[{"data":1,"prerenderedAt":173771},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch20-yi-dong-duan-bu-ju-shi-zhan-shang-pian":3,"wiki-doc-nav":981},{"id":4,"title":5,"body":6,"description":973,"extension":974,"meta":975,"navigation":976,"path":977,"seo":978,"stem":979,"__hash__":980},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":8,"toc":957},"minimark",[9,13,18,28,33,41,44,50,53,57,62,72,75,78,82,85,88,91,94,97,101,104,108,111,114,117,120,123,126,129,132,184,187,217,221,224,228,231,249,252,255,349,352,355,358,361,364,367,370,373,377,399,402,405,409,412,418,421,425,428,431,435,438,441,444,448,451,454,457,460,464,467,471,478,481,484,487,490,501,504,507,515,518,522,525,528,532,535,538,541,586,589,592,595,598,735,737,787,790,793,795,913,915,953],[10,11,5],"h1",{"id":12},"_20-移动端布局实战上篇",[14,15,17],"h2",{"id":16},"_201-移动端主流方案","20.1 移动端主流方案",[19,20,21],"ol",{},[22,23,24],"li",{},[25,26,27],"strong",{},"单独移动端页面（主流）",[29,30],"img",{"style":31,"src":32},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[19,34,36],{"start":35},2,[22,37,38],{},[25,39,40],{},"响应式兼容PC移动端",[29,42],{"style":31,"src":43},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[19,45,47],{"start":46},3,[22,48,49],{},"两种页面选型布局方式",[29,51],{"style":31,"src":52},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,54,56],{"id":55},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[58,59,61],"h3",{"id":60},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[63,64,65,66],"p",{},"官网地址： ",[67,68,69],"a",{"href":69,"rel":70},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[71],"nofollow",[29,73],{"style":31,"src":74},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[29,76],{"style":31,"src":77},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[58,79,81],{"id":80},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[29,83],{"style":31,"src":84},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[29,86],{"style":31,"src":87},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[63,89,90],{},"去除高亮：",[63,92,93],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[63,95,96],{},"-webkit- tap-highlight-color: transparent;",[14,98,100],{"id":99},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[29,102],{"style":31,"src":103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,105,107],{"id":106},"_204-流式布局案例","20.4 流式布局案例",[63,109,110],{},"注意点：",[63,112,113],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[63,115,116],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[63,118,119],{},"图片格式：",[29,121],{"style":31,"src":122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[63,124,125],{},"效果：",[29,127],{"style":31,"src":128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[63,130,131],{},"结构代码：",[133,134,139],"pre",{"className":135,"code":136,"language":137,"meta":138,"style":138},"language-Html shiki shiki-themes github-light github-dark","\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n","Html","",[140,141,142],"code",{"__ignoreMap":138},[143,144,147,151,154,158,161,165,168,170,173,176,178,181],"span",{"class":145,"line":146},"line",1,[143,148,150],{"class":149},"sVt8B","\u003C",[143,152,29],{"class":153},"s9eBZ",[143,155,157],{"class":156},"sScJk"," src",[143,159,160],{"class":149},"=",[143,162,164],{"class":163},"sZZnC","\"images\u002Fpic.jpg\"",[143,166,167],{"class":156}," alt",[143,169,160],{"class":149},[143,171,172],{"class":163},"\"描述文字\"",[143,174,175],{"class":156}," title",[143,177,160],{"class":149},[143,179,180],{"class":163},"\"悬停提示\"",[143,182,183],{"class":149},">\n",[63,185,186],{},"样式代码：",[133,188,189],{"className":135,"code":136,"language":137,"meta":138,"style":138},[140,190,191],{"__ignoreMap":138},[143,192,193,195,197,199,201,203,205,207,209,211,213,215],{"class":145,"line":146},[143,194,150],{"class":149},[143,196,29],{"class":153},[143,198,157],{"class":156},[143,200,160],{"class":149},[143,202,164],{"class":163},[143,204,167],{"class":156},[143,206,160],{"class":149},[143,208,172],{"class":163},[143,210,175],{"class":156},[143,212,160],{"class":149},[143,214,180],{"class":163},[143,216,183],{"class":149},[14,218,220],{"id":219},"_205-flex布局","20.5 flex布局",[29,222],{"style":31,"src":223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[58,225,227],{"id":226},"_2051-布局原理","20.5.1 布局原理",[63,229,230],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[232,233,234,237,240,243,246],"ul",{},[22,235,236],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[22,238,239],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[22,241,242],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[22,244,245],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[22,247,248],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[63,250,251],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[63,253,254],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[133,256,260],{"className":257,"code":258,"language":259,"meta":138,"style":138},"language-Css shiki shiki-themes github-light github-dark","\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","Css",[140,261,262,268,276,291,304,317,330,343],{"__ignoreMap":138},[143,263,264],{"class":145,"line":146},[143,265,267],{"class":266},"sJ8bj","\u002F* Flex 弹性布局 *\u002F\n",[143,269,270,273],{"class":145,"line":35},[143,271,272],{"class":156},".container",[143,274,275],{"class":149}," {\n",[143,277,278,282,285,288],{"class":145,"line":46},[143,279,281],{"class":280},"sj4cs","  display",[143,283,284],{"class":149},": ",[143,286,287],{"class":280},"flex",[143,289,290],{"class":149},";\n",[143,292,294,297,299,302],{"class":145,"line":293},4,[143,295,296],{"class":280},"  flex-direction",[143,298,284],{"class":149},[143,300,301],{"class":280},"row",[143,303,290],{"class":149},[143,305,307,310,312,315],{"class":145,"line":306},5,[143,308,309],{"class":280},"  justify-content",[143,311,284],{"class":149},[143,313,314],{"class":280},"space-between",[143,316,290],{"class":149},[143,318,320,323,325,328],{"class":145,"line":319},6,[143,321,322],{"class":280},"  align-items",[143,324,284],{"class":149},[143,326,327],{"class":280},"center",[143,329,290],{"class":149},[143,331,333,336,338,341],{"class":145,"line":332},7,[143,334,335],{"class":280},"  flex-wrap",[143,337,284],{"class":149},[143,339,340],{"class":280},"wrap",[143,342,290],{"class":149},[143,344,346],{"class":145,"line":345},8,[143,347,348],{"class":149},"}\n",[63,350,351],{},"样式：",[63,353,354],{},".form-item .male-label {",[63,356,357],{},"   margin-right: 20px;",[63,359,360],{},"   display: inline-flex;",[63,362,363],{},"   align-items: center;",[63,365,366],{},"}",[29,368],{"style":31,"src":369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[29,371],{"style":31,"src":372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[58,374,376],{"id":375},"_2052-常见父项属性","20.5.2 常见父项属性",[19,378,379,382,385,388,391,394,397],{},[22,380,381],{},"flex-direction：设置主轴的方向",[22,383,384],{},"justify-content：设置主轴上的子元素排列方式",[22,386,387],{},"flex-wrap：设置子元素是否换行",[22,389,390],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[22,392,393],{},"align-items：设置侧轴上的子元素排列方式（单行）",[22,395,396],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[22,398,381],{},[29,400],{"style":31,"src":401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[29,403],{"style":31,"src":404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[19,406,407],{"start":35},[22,408,384],{},[29,410],{"style":31,"src":411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[63,413,414,417],{},[140,415,416],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[63,419,420],{},"跟着主轴走",[19,422,423],{"start":46},[22,424,387],{},[29,426],{"style":31,"src":427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[63,429,430],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[19,432,433],{"start":293},[22,434,390],{},[29,436],{"style":31,"src":437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[63,439,440],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[63,442,443],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[19,445,446],{"start":306},[22,447,393],{},[29,449],{"style":31,"src":450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[63,452,453],{},"align-items与align-content之间的区别：",[63,455,456],{},"单找items，多找content",[29,458],{"style":31,"src":459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[19,461,462],{"start":319},[22,463,396],{},[29,465],{"style":31,"src":466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[58,468,470],{"id":469},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[19,472,473],{},[22,474,475],{},[25,476,477],{},"flex 属性",[63,479,480],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[29,482],{"style":31,"src":483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[63,485,486],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[63,488,489],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[19,491,492],{"start":35},[22,493,494,497,498],{},[25,495,496],{},"align-self"," ",[25,499,500],{},"控制子项自己在侧轴上的排列方式",[29,502],{"style":31,"src":503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[63,505,506],{},"单个子盒子在父盒子侧轴上的排列方式",[19,508,509],{"start":46},[22,510,511,514],{},[25,512,513],{},"order"," 属性定义项目的排列顺序",[29,516],{"style":31,"src":517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[58,519,521],{"id":520},"_2054-背景线性渐变","20.5.4 背景线性渐变",[29,523],{"style":31,"src":524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[63,526,527],{},"必须要添加浏览器的私有前缀",[58,529,531],{"id":530},"_2055-携程网首页案例","20.5.5 携程网首页案例",[63,533,534],{},"学到最重要的知识：",[63,536,537],{},"flex处理这样的布局思路",[29,539],{"style":31,"src":540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[133,542,544],{"className":257,"code":543,"language":259,"meta":138,"style":138},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[140,545,546,552,562,572,582],{"__ignoreMap":138},[143,547,548,550],{"class":145,"line":146},[143,549,272],{"class":156},[143,551,275],{"class":149},[143,553,554,556,558,560],{"class":145,"line":35},[143,555,281],{"class":280},[143,557,284],{"class":149},[143,559,287],{"class":280},[143,561,290],{"class":149},[143,563,564,566,568,570],{"class":145,"line":46},[143,565,309],{"class":280},[143,567,284],{"class":149},[143,569,327],{"class":280},[143,571,290],{"class":149},[143,573,574,576,578,580],{"class":145,"line":293},[143,575,322],{"class":280},[143,577,284],{"class":149},[143,579,327],{"class":280},[143,581,290],{"class":149},[143,583,584],{"class":145,"line":306},[143,585,348],{"class":149},[63,587,588],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[63,590,591],{},"使用属性选择器",[29,593],{"style":31,"src":594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[63,596,597],{},"结构：",[133,599,601],{"className":135,"code":600,"language":137,"meta":138,"style":138},"\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",[140,602,603,608,625,630,651,656,675,680,699,705,725],{"__ignoreMap":138},[143,604,605],{"class":145,"line":146},[143,606,607],{"class":266},"\u003C!-- 携程网移动端案例结构 -->\n",[143,609,610,612,615,618,620,623],{"class":145,"line":35},[143,611,150],{"class":149},[143,613,614],{"class":153},"div",[143,616,617],{"class":156}," class",[143,619,160],{"class":149},[143,621,622],{"class":163},"\"container\"",[143,624,183],{"class":149},[143,626,627],{"class":145,"line":46},[143,628,629],{"class":266},"  \u003C!-- 搜索栏 -->\n",[143,631,632,635,637,639,641,644,647,649],{"class":145,"line":293},[143,633,634],{"class":149},"  \u003C",[143,636,614],{"class":153},[143,638,617],{"class":156},[143,640,160],{"class":149},[143,642,643],{"class":163},"\"search-index\"",[143,645,646],{"class":149},">...\u003C\u002F",[143,648,614],{"class":153},[143,650,183],{"class":149},[143,652,653],{"class":145,"line":306},[143,654,655],{"class":266},"  \u003C!-- 焦点图 -->\n",[143,657,658,660,662,664,666,669,671,673],{"class":145,"line":319},[143,659,634],{"class":149},[143,661,614],{"class":153},[143,663,617],{"class":156},[143,665,160],{"class":149},[143,667,668],{"class":163},"\"focus\"",[143,670,646],{"class":149},[143,672,614],{"class":153},[143,674,183],{"class":149},[143,676,677],{"class":145,"line":332},[143,678,679],{"class":266},"  \u003C!-- 主导航 -->\n",[143,681,682,684,686,688,690,693,695,697],{"class":145,"line":345},[143,683,634],{"class":149},[143,685,614],{"class":153},[143,687,617],{"class":156},[143,689,160],{"class":149},[143,691,692],{"class":163},"\"local-nav\"",[143,694,646],{"class":149},[143,696,614],{"class":153},[143,698,183],{"class":149},[143,700,702],{"class":145,"line":701},9,[143,703,704],{"class":266},"  \u003C!-- 子导航 -->\n",[143,706,708,710,712,714,716,719,721,723],{"class":145,"line":707},10,[143,709,634],{"class":149},[143,711,614],{"class":153},[143,713,617],{"class":156},[143,715,160],{"class":149},[143,717,718],{"class":163},"\"nav-common\"",[143,720,646],{"class":149},[143,722,614],{"class":153},[143,724,183],{"class":149},[143,726,728,731,733],{"class":145,"line":727},11,[143,729,730],{"class":149},"\u003C\u002F",[143,732,614],{"class":153},[143,734,183],{"class":149},[63,736,351],{},[133,738,740],{"className":257,"code":739,"language":259,"meta":138,"style":138},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[140,741,742,762,783],{"__ignoreMap":138},[143,743,744,747,750,753,756,759],{"class":145,"line":146},[143,745,746],{"class":153},"input",[143,748,749],{"class":149},"[",[143,751,752],{"class":156},"type",[143,754,160],{"class":755},"szBVR",[143,757,758],{"class":163},"\"text\"",[143,760,761],{"class":149},"] {\n",[143,763,764,767,769,772,775,778,781],{"class":145,"line":35},[143,765,766],{"class":280},"  border",[143,768,284],{"class":149},[143,770,771],{"class":280},"1",[143,773,774],{"class":755},"px",[143,776,777],{"class":280}," solid",[143,779,780],{"class":280}," #999",[143,782,290],{"class":149},[143,784,785],{"class":145,"line":46},[143,786,348],{"class":149},[63,788,789],{},"总代码和效果展示：",[29,791],{"style":31,"src":792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[63,794,597],{},[133,796,797],{"className":135,"code":600,"language":137,"meta":138,"style":138},[140,798,799,803,817,821,839,843,861,865,883,887,905],{"__ignoreMap":138},[143,800,801],{"class":145,"line":146},[143,802,607],{"class":266},[143,804,805,807,809,811,813,815],{"class":145,"line":35},[143,806,150],{"class":149},[143,808,614],{"class":153},[143,810,617],{"class":156},[143,812,160],{"class":149},[143,814,622],{"class":163},[143,816,183],{"class":149},[143,818,819],{"class":145,"line":46},[143,820,629],{"class":266},[143,822,823,825,827,829,831,833,835,837],{"class":145,"line":293},[143,824,634],{"class":149},[143,826,614],{"class":153},[143,828,617],{"class":156},[143,830,160],{"class":149},[143,832,643],{"class":163},[143,834,646],{"class":149},[143,836,614],{"class":153},[143,838,183],{"class":149},[143,840,841],{"class":145,"line":306},[143,842,655],{"class":266},[143,844,845,847,849,851,853,855,857,859],{"class":145,"line":319},[143,846,634],{"class":149},[143,848,614],{"class":153},[143,850,617],{"class":156},[143,852,160],{"class":149},[143,854,668],{"class":163},[143,856,646],{"class":149},[143,858,614],{"class":153},[143,860,183],{"class":149},[143,862,863],{"class":145,"line":332},[143,864,679],{"class":266},[143,866,867,869,871,873,875,877,879,881],{"class":145,"line":345},[143,868,634],{"class":149},[143,870,614],{"class":153},[143,872,617],{"class":156},[143,874,160],{"class":149},[143,876,692],{"class":163},[143,878,646],{"class":149},[143,880,614],{"class":153},[143,882,183],{"class":149},[143,884,885],{"class":145,"line":701},[143,886,704],{"class":266},[143,888,889,891,893,895,897,899,901,903],{"class":145,"line":707},[143,890,634],{"class":149},[143,892,614],{"class":153},[143,894,617],{"class":156},[143,896,160],{"class":149},[143,898,718],{"class":163},[143,900,646],{"class":149},[143,902,614],{"class":153},[143,904,183],{"class":149},[143,906,907,909,911],{"class":145,"line":727},[143,908,730],{"class":149},[143,910,614],{"class":153},[143,912,183],{"class":149},[63,914,351],{},[133,916,918],{"className":135,"code":917,"language":137,"meta":138,"style":138},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[140,919,920,925,940,945],{"__ignoreMap":138},[143,921,922],{"class":145,"line":146},[143,923,924],{"class":266},"\u003C!-- HTML 代码示例 -->\n",[143,926,927,929,931,933,935,938],{"class":145,"line":35},[143,928,150],{"class":149},[143,930,614],{"class":153},[143,932,617],{"class":156},[143,934,160],{"class":149},[143,936,937],{"class":163},"\"example\"",[143,939,183],{"class":149},[143,941,942],{"class":145,"line":46},[143,943,944],{"class":149},"  示例内容\n",[143,946,947,949,951],{"class":145,"line":293},[143,948,730],{"class":149},[143,950,614],{"class":153},[143,952,183],{"class":149},[954,955,956],"style",{},"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":138,"searchDepth":35,"depth":35,"links":958},[959,960,964,965,966],{"id":16,"depth":35,"text":17},{"id":55,"depth":35,"text":56,"children":961},[962,963],{"id":60,"depth":46,"text":61},{"id":80,"depth":46,"text":81},{"id":99,"depth":35,"text":100},{"id":106,"depth":35,"text":107},{"id":219,"depth":35,"text":220,"children":967},[968,969,970,971,972],{"id":226,"depth":46,"text":227},{"id":375,"depth":46,"text":376},{"id":469,"depth":46,"text":470},{"id":520,"depth":46,"text":521},{"id":530,"depth":46,"text":531},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":5,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",[982,6062,7170,8590,11579,12930,14419,15507,24269,24281,24879,24905,25029,25270,25335,25353,25366,25413,25537,25706,25905,26085,26290,26426,26521,26558,26571,26881,27622,28330,28351,29371,31002,31153,31166,31178,31479,51291,51306,51323,51356,54217,77557,93700,93721,93834,93955,94725,95388,95749,95787,95893,95993,96036,96062,96123,97776,97877,97902,98393,98893,99973,100256,100998,101500,101512,103528,105191,106694,108392,110309,112228,114250,117720,118152,118615,119364,122308,122656,122678,123034,126341,126353,126756,126779,126926,127093,127297,127596,128153,128808,130738,132331,132980,134474,135900,137134,138825,140577,142985,143101,144036,144247,145003,146238,146466,146479,147634,150046,152414,155735,158212,159856,161633,163646,166698,168878,171405,173599],{"id":983,"title":984,"body":985,"description":138,"extension":974,"meta":6057,"navigation":976,"path":6058,"seo":6059,"stem":6060,"__hash__":6061},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":986,"toc":6029},[987,990,994,997,1001,1012,1016,1020,1023,1026,1029,1032,1035,1063,1067,1070,1073,1076,1078,1128,1132,1150,1152,1166,1169,1177,1180,2037,2044,2060,2064,2150,2154,2160,2245,2249,2287,2291,2355,2359,2363,2369,2380,2384,2389,2393,2398,2402,2407,2411,2415,2420,2688,2693,2831,2836,3092,3095,3103,3107,3112,3215,3218,3524,3533,3634,3637,3640,3643,3646,3906,3911,4051,4054,4233,4236,4364,4367,4519,4523,4528,4531,4542,4550,4553,4660,4664,4668,4673,4723,4728,4733,4757,4762,4815,4818,4823,5000,5005,5290,5295,5692,5696,5701,5758,5763,5771,5774,5914,5917,6026],[10,988,984],{"id":989},"_1基础入门",[14,991,993],{"id":992},"_11注释","1.1注释",[63,995,996],{},"\u002F\u002F或者\u002F* *\u002F",[14,998,1000],{"id":999},"_12命名","1.2命名",[19,1002,1003,1006,1009],{},[22,1004,1005],{},"字母数字下划线",[22,1007,1008],{},"开头必须是字母或_",[22,1010,1011],{},"不能使用关键词",[14,1013,1015],{"id":1014},"_13数据类型","1.3数据类型",[58,1017,1019],{"id":1018},"_131整形","1.3.1整形",[63,1021,1022],{},"short 短整形 2",[63,1024,1025],{},"int 整形 4",[63,1027,1028],{},"long 长整形 win4 linux32位4 linux64位8",[63,1030,1031],{},"long long 长长整形 8",[63,1033,1034],{},"利用sizeof可以求数据类型占用的内存空间大小",[133,1036,1040],{"className":1037,"code":1038,"language":1039,"meta":138,"style":138},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[140,1041,1042,1056],{"__ignoreMap":138},[143,1043,1044,1047,1050,1053],{"class":145,"line":146},[143,1045,1046],{"class":755},"sizeof",[143,1048,1049],{"class":149},"(",[143,1051,1052],{"class":755},"int",[143,1054,1055],{"class":149},")\n",[143,1057,1058,1060],{"class":145,"line":35},[143,1059,1046],{"class":755},[143,1061,1062],{"class":149},"(num)\n",[58,1064,1066],{"id":1065},"_132浮点型","1.3.2浮点型",[63,1068,1069],{},"float 单精度 4节 7位有效数字",[63,1071,1072],{},"double 双精度 8节 15-16有效数字",[63,1074,1075],{},"默认情况下，输出一个小数，会显示6位有效数字",[63,1077,110],{},[133,1079,1081],{"className":1037,"code":1080,"language":1039,"meta":138,"style":138},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[140,1082,1083,1105],{"__ignoreMap":138},[143,1084,1085,1088,1091,1093,1096,1099,1102],{"class":145,"line":146},[143,1086,1087],{"class":755},"float",[143,1089,1090],{"class":149}," f1",[143,1092,160],{"class":755},[143,1094,1095],{"class":280},"3.14",[143,1097,1098],{"class":755},"f",[143,1100,1101],{"class":149},";",[143,1103,1104],{"class":266}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[143,1106,1107,1109,1112,1114,1117,1120,1123,1125],{"class":145,"line":35},[143,1108,1087],{"class":755},[143,1110,1111],{"class":149}," f2",[143,1113,160],{"class":755},[143,1115,1116],{"class":280},"3",[143,1118,1119],{"class":755},"e",[143,1121,1122],{"class":280},"2",[143,1124,1101],{"class":149},[143,1126,1127],{"class":266}," \u002F\u002F科学记数法\n",[58,1129,1131],{"id":1130},"_133字符型","1.3.3字符型",[133,1133,1135],{"className":1037,"code":1134,"language":1039,"meta":138,"style":138},"char ch='a'\n",[140,1136,1137],{"__ignoreMap":138},[143,1138,1139,1142,1145,1147],{"class":145,"line":146},[143,1140,1141],{"class":755},"char",[143,1143,1144],{"class":149}," ch",[143,1146,160],{"class":755},[143,1148,1149],{"class":163},"'a'\n",[63,1151,110],{},[19,1153,1154,1157,1160,1163],{},[22,1155,1156],{},"在显示字符型变量时，只能单引号，双引号x",[22,1158,1159],{},"单引号内只能一个字符，不能字符串",[22,1161,1162],{},"c和c++字符型变量只占用一个字符",[22,1164,1165],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[63,1167,1168],{},"ASCII码大致由以下两部分组成：",[19,1170,1171,1174],{},[22,1172,1173],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[22,1175,1176],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[63,1178,1179],{},"ASCII码表格：",[1181,1182,1183,1226],"table",{},[1184,1185,1186],"thead",{},[1187,1188,1189,1196,1201,1205,1210,1214,1218,1222],"tr",{},[1190,1191,1192,1195],"th",{},[25,1193,1194],{},"ASCII","值",[1190,1197,1198],{},[25,1199,1200],{},"控制字符",[1190,1202,1203,1195],{},[25,1204,1194],{},[1190,1206,1207],{},[25,1208,1209],{},"字符",[1190,1211,1212,1195],{},[25,1213,1194],{},[1190,1215,1216],{},[25,1217,1209],{},[1190,1219,1220,1195],{},[25,1221,1194],{},[1190,1223,1224],{},[25,1225,1209],{},[1227,1228,1229,1256,1280,1305,1330,1356,1381,1406,1432,1457,1483,1509,1535,1560,1586,1612,1638,1662,1687,1712,1737,1762,1787,1812,1837,1862,1887,1913,1937,1961,1985,2011],"tbody",{},[1187,1230,1231,1235,1238,1241,1244,1247,1250,1253],{},[1232,1233,1234],"td",{},"0",[1232,1236,1237],{},"NUT",[1232,1239,1240],{},"32",[1232,1242,1243],{},"(space)",[1232,1245,1246],{},"64",[1232,1248,1249],{},"@",[1232,1251,1252],{},"96",[1232,1254,1255],{},"、",[1187,1257,1258,1260,1263,1266,1269,1272,1275,1278],{},[1232,1259,771],{},[1232,1261,1262],{},"SOH",[1232,1264,1265],{},"33",[1232,1267,1268],{},"!",[1232,1270,1271],{},"65",[1232,1273,1274],{},"A",[1232,1276,1277],{},"97",[1232,1279,67],{},[1187,1281,1282,1284,1287,1290,1293,1296,1299,1302],{},[1232,1283,1122],{},[1232,1285,1286],{},"STX",[1232,1288,1289],{},"34",[1232,1291,1292],{},"\"",[1232,1294,1295],{},"66",[1232,1297,1298],{},"B",[1232,1300,1301],{},"98",[1232,1303,1304],{},"b",[1187,1306,1307,1309,1312,1315,1318,1321,1324,1327],{},[1232,1308,1116],{},[1232,1310,1311],{},"ETX",[1232,1313,1314],{},"35",[1232,1316,1317],{},"#",[1232,1319,1320],{},"67",[1232,1322,1323],{},"C",[1232,1325,1326],{},"99",[1232,1328,1329],{},"c",[1187,1331,1332,1335,1338,1341,1344,1347,1350,1353],{},[1232,1333,1334],{},"4",[1232,1336,1337],{},"EOT",[1232,1339,1340],{},"36",[1232,1342,1343],{},"$",[1232,1345,1346],{},"68",[1232,1348,1349],{},"D",[1232,1351,1352],{},"100",[1232,1354,1355],{},"d",[1187,1357,1358,1361,1364,1367,1370,1373,1376,1379],{},[1232,1359,1360],{},"5",[1232,1362,1363],{},"ENQ",[1232,1365,1366],{},"37",[1232,1368,1369],{},"%",[1232,1371,1372],{},"69",[1232,1374,1375],{},"E",[1232,1377,1378],{},"101",[1232,1380,1119],{},[1187,1382,1383,1386,1389,1392,1395,1398,1401,1404],{},[1232,1384,1385],{},"6",[1232,1387,1388],{},"ACK",[1232,1390,1391],{},"38",[1232,1393,1394],{},"&",[1232,1396,1397],{},"70",[1232,1399,1400],{},"F",[1232,1402,1403],{},"102",[1232,1405,1098],{},[1187,1407,1408,1411,1414,1417,1420,1423,1426,1429],{},[1232,1409,1410],{},"7",[1232,1412,1413],{},"BEL",[1232,1415,1416],{},"39",[1232,1418,1419],{},",",[1232,1421,1422],{},"71",[1232,1424,1425],{},"G",[1232,1427,1428],{},"103",[1232,1430,1431],{},"g",[1187,1433,1434,1437,1440,1443,1445,1448,1451,1454],{},[1232,1435,1436],{},"8",[1232,1438,1439],{},"BS",[1232,1441,1442],{},"40",[1232,1444,1049],{},[1232,1446,1447],{},"72",[1232,1449,1450],{},"H",[1232,1452,1453],{},"104",[1232,1455,1456],{},"h",[1187,1458,1459,1462,1465,1468,1471,1474,1477,1480],{},[1232,1460,1461],{},"9",[1232,1463,1464],{},"HT",[1232,1466,1467],{},"41",[1232,1469,1470],{},")",[1232,1472,1473],{},"73",[1232,1475,1476],{},"I",[1232,1478,1479],{},"105",[1232,1481,1482],{},"i",[1187,1484,1485,1488,1491,1494,1497,1500,1503,1506],{},[1232,1486,1487],{},"10",[1232,1489,1490],{},"LF",[1232,1492,1493],{},"42",[1232,1495,1496],{},"*",[1232,1498,1499],{},"74",[1232,1501,1502],{},"J",[1232,1504,1505],{},"106",[1232,1507,1508],{},"j",[1187,1510,1511,1514,1517,1520,1523,1526,1529,1532],{},[1232,1512,1513],{},"11",[1232,1515,1516],{},"VT",[1232,1518,1519],{},"43",[1232,1521,1522],{},"+",[1232,1524,1525],{},"75",[1232,1527,1528],{},"K",[1232,1530,1531],{},"107",[1232,1533,1534],{},"k",[1187,1536,1537,1540,1543,1546,1548,1551,1554,1557],{},[1232,1538,1539],{},"12",[1232,1541,1542],{},"FF",[1232,1544,1545],{},"44",[1232,1547,1419],{},[1232,1549,1550],{},"76",[1232,1552,1553],{},"L",[1232,1555,1556],{},"108",[1232,1558,1559],{},"l",[1187,1561,1562,1565,1568,1571,1574,1577,1580,1583],{},[1232,1563,1564],{},"13",[1232,1566,1567],{},"CR",[1232,1569,1570],{},"45",[1232,1572,1573],{},"-",[1232,1575,1576],{},"77",[1232,1578,1579],{},"M",[1232,1581,1582],{},"109",[1232,1584,1585],{},"m",[1187,1587,1588,1591,1594,1597,1600,1603,1606,1609],{},[1232,1589,1590],{},"14",[1232,1592,1593],{},"SO",[1232,1595,1596],{},"46",[1232,1598,1599],{},".",[1232,1601,1602],{},"78",[1232,1604,1605],{},"N",[1232,1607,1608],{},"110",[1232,1610,1611],{},"n",[1187,1613,1614,1617,1620,1623,1626,1629,1632,1635],{},[1232,1615,1616],{},"15",[1232,1618,1619],{},"SI",[1232,1621,1622],{},"47",[1232,1624,1625],{},"\u002F",[1232,1627,1628],{},"79",[1232,1630,1631],{},"O",[1232,1633,1634],{},"111",[1232,1636,1637],{},"o",[1187,1639,1640,1643,1646,1649,1651,1654,1657,1660],{},[1232,1641,1642],{},"16",[1232,1644,1645],{},"DLE",[1232,1647,1648],{},"48",[1232,1650,1234],{},[1232,1652,1653],{},"80",[1232,1655,1656],{},"P",[1232,1658,1659],{},"112",[1232,1661,63],{},[1187,1663,1664,1667,1670,1673,1675,1678,1681,1684],{},[1232,1665,1666],{},"17",[1232,1668,1669],{},"DCI",[1232,1671,1672],{},"49",[1232,1674,771],{},[1232,1676,1677],{},"81",[1232,1679,1680],{},"Q",[1232,1682,1683],{},"113",[1232,1685,1686],{},"q",[1187,1688,1689,1692,1695,1698,1700,1703,1706,1709],{},[1232,1690,1691],{},"18",[1232,1693,1694],{},"DC2",[1232,1696,1697],{},"50",[1232,1699,1122],{},[1232,1701,1702],{},"82",[1232,1704,1705],{},"R",[1232,1707,1708],{},"114",[1232,1710,1711],{},"r",[1187,1713,1714,1717,1720,1723,1725,1728,1731,1734],{},[1232,1715,1716],{},"19",[1232,1718,1719],{},"DC3",[1232,1721,1722],{},"51",[1232,1724,1116],{},[1232,1726,1727],{},"83",[1232,1729,1730],{},"S",[1232,1732,1733],{},"115",[1232,1735,1736],{},"s",[1187,1738,1739,1742,1745,1748,1750,1753,1756,1759],{},[1232,1740,1741],{},"20",[1232,1743,1744],{},"DC4",[1232,1746,1747],{},"52",[1232,1749,1334],{},[1232,1751,1752],{},"84",[1232,1754,1755],{},"T",[1232,1757,1758],{},"116",[1232,1760,1761],{},"t",[1187,1763,1764,1767,1770,1773,1775,1778,1781,1784],{},[1232,1765,1766],{},"21",[1232,1768,1769],{},"NAK",[1232,1771,1772],{},"53",[1232,1774,1360],{},[1232,1776,1777],{},"85",[1232,1779,1780],{},"U",[1232,1782,1783],{},"117",[1232,1785,1786],{},"u",[1187,1788,1789,1792,1795,1798,1800,1803,1806,1809],{},[1232,1790,1791],{},"22",[1232,1793,1794],{},"SYN",[1232,1796,1797],{},"54",[1232,1799,1385],{},[1232,1801,1802],{},"86",[1232,1804,1805],{},"V",[1232,1807,1808],{},"118",[1232,1810,1811],{},"v",[1187,1813,1814,1817,1820,1823,1825,1828,1831,1834],{},[1232,1815,1816],{},"23",[1232,1818,1819],{},"TB",[1232,1821,1822],{},"55",[1232,1824,1410],{},[1232,1826,1827],{},"87",[1232,1829,1830],{},"W",[1232,1832,1833],{},"119",[1232,1835,1836],{},"w",[1187,1838,1839,1842,1845,1848,1850,1853,1856,1859],{},[1232,1840,1841],{},"24",[1232,1843,1844],{},"CAN",[1232,1846,1847],{},"56",[1232,1849,1436],{},[1232,1851,1852],{},"88",[1232,1854,1855],{},"X",[1232,1857,1858],{},"120",[1232,1860,1861],{},"x",[1187,1863,1864,1867,1870,1873,1875,1878,1881,1884],{},[1232,1865,1866],{},"25",[1232,1868,1869],{},"EM",[1232,1871,1872],{},"57",[1232,1874,1461],{},[1232,1876,1877],{},"89",[1232,1879,1880],{},"Y",[1232,1882,1883],{},"121",[1232,1885,1886],{},"y",[1187,1888,1889,1892,1895,1898,1901,1904,1907,1910],{},[1232,1890,1891],{},"26",[1232,1893,1894],{},"SUB",[1232,1896,1897],{},"58",[1232,1899,1900],{},":",[1232,1902,1903],{},"90",[1232,1905,1906],{},"Z",[1232,1908,1909],{},"122",[1232,1911,1912],{},"z",[1187,1914,1915,1918,1921,1924,1926,1929,1931,1934],{},[1232,1916,1917],{},"27",[1232,1919,1920],{},"ESC",[1232,1922,1923],{},"59",[1232,1925,1101],{},[1232,1927,1928],{},"91",[1232,1930,749],{},[1232,1932,1933],{},"123",[1232,1935,1936],{},"{",[1187,1938,1939,1942,1945,1948,1950,1953,1955,1958],{},[1232,1940,1941],{},"28",[1232,1943,1944],{},"FS",[1232,1946,1947],{},"60",[1232,1949,150],{},[1232,1951,1952],{},"92",[1232,1954,1625],{},[1232,1956,1957],{},"124",[1232,1959,1960],{},"|",[1187,1962,1963,1966,1969,1972,1974,1977,1980,1983],{},[1232,1964,1965],{},"29",[1232,1967,1968],{},"GS",[1232,1970,1971],{},"61",[1232,1973,160],{},[1232,1975,1976],{},"93",[1232,1978,1979],{},"]",[1232,1981,1982],{},"125",[1232,1984,366],{},[1187,1986,1987,1990,1993,1996,1999,2002,2005,2008],{},[1232,1988,1989],{},"30",[1232,1991,1992],{},"RS",[1232,1994,1995],{},"62",[1232,1997,1998],{},">",[1232,2000,2001],{},"94",[1232,2003,2004],{},"^",[1232,2006,2007],{},"126",[1232,2009,2010],{},"`",[1187,2012,2013,2016,2019,2022,2025,2028,2031,2034],{},[1232,2014,2015],{},"31",[1232,2017,2018],{},"US",[1232,2020,2021],{},"63",[1232,2023,2024],{},"?",[1232,2026,2027],{},"95",[1232,2029,2030],{},"_",[1232,2032,2033],{},"127",[1232,2035,2036],{},"DEL",[63,2038,2039,2040,2043],{},"ASCII 码大致由以下",[25,2041,2042],{},"两部分组","成：",[232,2045,2046,2053],{},[22,2047,2048,2049,2052],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[25,2050,2051],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[22,2054,2055,2056,2059],{},"ASCII 打印字符：数字 ",[25,2057,2058],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[58,2061,2063],{"id":2062},"_134转义字符","1.3.4转义字符",[133,2065,2067],{"className":1037,"code":2066,"language":1039,"meta":138,"style":138},"\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",[140,2068,2069,2074,2090,2104,2109,2122,2127],{"__ignoreMap":138},[143,2070,2071],{"class":145,"line":146},[143,2072,2073],{"class":266},"\u002F\u002F换行符\n",[143,2075,2076,2079,2082,2085,2087],{"class":145,"line":35},[143,2077,2078],{"class":149},"cout ",[143,2080,2081],{"class":755},"\u003C\u003C",[143,2083,2084],{"class":163},"\"hello world\u002Fn\"",[143,2086,1101],{"class":149},[143,2088,2089],{"class":266}," \u002F\u002F就等同于如下：\n",[143,2091,2092,2094,2096,2099,2101],{"class":145,"line":46},[143,2093,2078],{"class":149},[143,2095,2081],{"class":755},[143,2097,2098],{"class":163},"\"hello world\"",[143,2100,2081],{"class":755},[143,2102,2103],{"class":149},"endl;\n",[143,2105,2106],{"class":145,"line":293},[143,2107,2108],{"class":266},"\u002F\u002F反斜杠\n",[143,2110,2111,2113,2115,2118,2120],{"class":145,"line":306},[143,2112,2078],{"class":149},[143,2114,2081],{"class":755},[143,2116,2117],{"class":163},"\"\u002F\u002F\"",[143,2119,2081],{"class":755},[143,2121,2103],{"class":149},[143,2123,2124],{"class":145,"line":319},[143,2125,2126],{"class":266},"\u002F\u002F水平制表符\n",[143,2128,2129,2131,2133,2136,2139,2142,2144,2147],{"class":145,"line":332},[143,2130,2078],{"class":149},[143,2132,2081],{"class":755},[143,2134,2135],{"class":163},"\"aaaa",[143,2137,2138],{"class":280},"\\t",[143,2140,2141],{"class":163},"helloworld\"",[143,2143,2081],{"class":755},[143,2145,2146],{"class":149},"endl;",[143,2148,2149],{"class":266}," \u002F\u002F输出窗口时有对齐效果\n",[58,2151,2153],{"id":2152},"_135字符串型","1.3.5字符串型",[63,2155,2156,2157,2159],{},"char 变量名",[143,2158],{},"=\"字符串值\"",[133,2161,2163],{"className":1037,"code":2162,"language":1039,"meta":138,"style":138},"\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",[140,2164,2165,2170,2175,2180,2185,2198,2211,2216,2221,2232],{"__ignoreMap":138},[143,2166,2167],{"class":145,"line":146},[143,2168,2169],{"class":266},"\u002F\u002Fc风格字符串\n",[143,2171,2172],{"class":145,"line":35},[143,2173,2174],{"class":266},"\u002F\u002F注意事项：\n",[143,2176,2177],{"class":145,"line":46},[143,2178,2179],{"class":266},"\u002F\u002F1.char字符串名[]\n",[143,2181,2182],{"class":145,"line":293},[143,2183,2184],{"class":266},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[143,2186,2187,2189,2192,2194,2196],{"class":145,"line":306},[143,2188,1141],{"class":755},[143,2190,2191],{"class":149}," str[]",[143,2193,160],{"class":755},[143,2195,2098],{"class":163},[143,2197,290],{"class":149},[143,2199,2200,2202,2204,2207,2209],{"class":145,"line":319},[143,2201,2078],{"class":149},[143,2203,2081],{"class":755},[143,2205,2206],{"class":149},"str",[143,2208,2081],{"class":755},[143,2210,2103],{"class":149},[143,2212,2213],{"class":145,"line":332},[143,2214,2215],{"class":266},"\u002F\u002Fc++风格字符串\n",[143,2217,2218],{"class":145,"line":345},[143,2219,2220],{"class":266},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[143,2222,2223,2226,2228,2230],{"class":145,"line":701},[143,2224,2225],{"class":149},"string str2",[143,2227,160],{"class":755},[143,2229,2098],{"class":163},[143,2231,290],{"class":149},[143,2233,2234,2236,2238,2241,2243],{"class":145,"line":707},[143,2235,2078],{"class":149},[143,2237,2081],{"class":755},[143,2239,2240],{"class":149},"str2",[143,2242,2081],{"class":755},[143,2244,2103],{"class":149},[58,2246,2248],{"id":2247},"_136布尔类型bool","1.3.6布尔类型bool",[133,2250,2252],{"className":1037,"code":2251,"language":1039,"meta":138,"style":138},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[140,2253,2254,2269],{"__ignoreMap":138},[143,2255,2256,2259,2262,2264,2267],{"class":145,"line":146},[143,2257,2258],{"class":755},"bool",[143,2260,2261],{"class":149}," flag",[143,2263,160],{"class":755},[143,2265,2266],{"class":280},"true",[143,2268,290],{"class":149},[143,2270,2271,2274,2277,2280,2282,2284],{"class":145,"line":35},[143,2272,2273],{"class":149},"cout",[143,2275,2276],{"class":755},"\u003C\u003Csizeof",[143,2278,2279],{"class":149},"(flag)",[143,2281,2081],{"class":755},[143,2283,2146],{"class":149},[143,2285,2286],{"class":266}," \u002F\u002F查看布尔占内存空间\n",[14,2288,2290],{"id":2289},"_14键盘输入cin","1.4键盘输入cin",[133,2292,2294],{"className":1037,"code":2293,"language":1039,"meta":138,"style":138},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[140,2295,2296,2309,2326,2337],{"__ignoreMap":138},[143,2297,2298,2300,2303,2305,2307],{"class":145,"line":146},[143,2299,1052],{"class":755},[143,2301,2302],{"class":149}," a",[143,2304,160],{"class":755},[143,2306,1234],{"class":280},[143,2308,290],{"class":149},[143,2310,2311,2313,2315,2318,2320,2322,2324],{"class":145,"line":35},[143,2312,2273],{"class":149},[143,2314,2081],{"class":755},[143,2316,2317],{"class":163},"\"请给整型变量a赋值\"",[143,2319,2081],{"class":755},[143,2321,67],{"class":149},[143,2323,2081],{"class":755},[143,2325,2103],{"class":149},[143,2327,2328,2331,2334],{"class":145,"line":46},[143,2329,2330],{"class":149},"cin ",[143,2332,2333],{"class":755},">>",[143,2335,2336],{"class":149}," a;\n",[143,2338,2339,2341,2343,2346,2349,2351,2353],{"class":145,"line":293},[143,2340,2078],{"class":149},[143,2342,2081],{"class":755},[143,2344,2345],{"class":163}," \"整型变量a=\"",[143,2347,2348],{"class":755}," \u003C\u003C",[143,2350,67],{"class":149},[143,2352,2081],{"class":755},[143,2354,2103],{"class":149},[14,2356,2358],{"id":2357},"_15运算符","1.5运算符",[58,2360,2362],{"id":2361},"_151算术运算符","1.5.1算术运算符",[63,2364,2365,2368],{},[29,2366],{"alt":138,"src":2367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[19,2370,2371,2374,2377],{},[22,2372,2373],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[22,2375,2376],{},"两个小数不可以做取模运算",[22,2378,2379],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[58,2381,2383],{"id":2382},"_152赋值运算符","1.5.2赋值运算符",[63,2385,2386],{},[29,2387],{"alt":138,"src":2388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[58,2390,2392],{"id":2391},"_153比较运算符","1.5.3比较运算符",[63,2394,2395],{},[29,2396],{"alt":138,"src":2397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[58,2399,2401],{"id":2400},"_154逻辑运算符","1.5.4逻辑运算符",[63,2403,2404],{},[29,2405],{"alt":138,"src":2406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,2408,2410],{"id":2409},"_16程序流程结构","1.6程序流程结构",[58,2412,2414],{"id":2413},"_161选择结构","1.6.1选择结构",[19,2416,2417],{},[22,2418,2419],{},"if语句\n单行、多行、多条件if语句",[133,2421,2423],{"className":1037,"code":2422,"language":1039,"meta":138,"style":138},"\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",[140,2424,2425,2430,2445,2450,2464,2468,2473,2482,2495,2499,2512,2516,2522,2527,2541,2546,2552,2573,2578,2592,2597,2626,2631,2648,2653,2658,2663,2677,2682],{"__ignoreMap":138},[143,2426,2427],{"class":145,"line":146},[143,2428,2429],{"class":266},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[143,2431,2432,2435,2438,2440,2443],{"class":145,"line":35},[143,2433,2434],{"class":755},"if",[143,2436,2437],{"class":149},"(score",[143,2439,1998],{"class":755},[143,2441,2442],{"class":280},"600",[143,2444,1055],{"class":149},[143,2446,2447],{"class":145,"line":46},[143,2448,2449],{"class":149},"{\n",[143,2451,2452,2455,2457,2460,2462],{"class":145,"line":293},[143,2453,2454],{"class":149},"    cout",[143,2456,2081],{"class":755},[143,2458,2459],{"class":163},"'这是单行if语句'",[143,2461,2081],{"class":755},[143,2463,2103],{"class":149},[143,2465,2466],{"class":145,"line":306},[143,2467,348],{"class":149},[143,2469,2470],{"class":145,"line":319},[143,2471,2472],{"class":266},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[143,2474,2475,2477,2479],{"class":145,"line":332},[143,2476,2330],{"class":149},[143,2478,2333],{"class":755},[143,2480,2481],{"class":149}," score\n",[143,2483,2484,2486,2488,2491,2493],{"class":145,"line":345},[143,2485,2434],{"class":755},[143,2487,2437],{"class":149},[143,2489,2490],{"class":755},"\u003C=",[143,2492,2442],{"class":280},[143,2494,1055],{"class":149},[143,2496,2497],{"class":145,"line":701},[143,2498,2449],{"class":149},[143,2500,2501,2503,2505,2508,2510],{"class":145,"line":707},[143,2502,2454],{"class":149},[143,2504,2333],{"class":755},[143,2506,2507],{"class":163},"\"小于等于600\"",[143,2509,2081],{"class":755},[143,2511,2103],{"class":149},[143,2513,2514],{"class":145,"line":727},[143,2515,348],{"class":149},[143,2517,2519],{"class":145,"line":2518},12,[143,2520,2521],{"class":755},"else\n",[143,2523,2525],{"class":145,"line":2524},13,[143,2526,2449],{"class":149},[143,2528,2530,2532,2534,2537,2539],{"class":145,"line":2529},14,[143,2531,2454],{"class":149},[143,2533,2333],{"class":755},[143,2535,2536],{"class":163},"\"大于600\"",[143,2538,2333],{"class":755},[143,2540,2103],{"class":149},[143,2542,2544],{"class":145,"line":2543},15,[143,2545,348],{"class":149},[143,2547,2549],{"class":145,"line":2548},16,[143,2550,2551],{"class":266},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[143,2553,2555,2557,2560,2562,2564,2567,2569,2571],{"class":145,"line":2554},17,[143,2556,2434],{"class":755},[143,2558,2559],{"class":149}," (",[143,2561,1234],{"class":280},[143,2563,150],{"class":755},[143,2565,2566],{"class":149},"num",[143,2568,150],{"class":755},[143,2570,1352],{"class":280},[143,2572,1055],{"class":149},[143,2574,2576],{"class":145,"line":2575},18,[143,2577,2449],{"class":149},[143,2579,2581,2583,2585,2588,2590],{"class":145,"line":2580},19,[143,2582,2454],{"class":149},[143,2584,2081],{"class":755},[143,2586,2587],{"class":163},"\"小于100\"",[143,2589,2081],{"class":755},[143,2591,2103],{"class":149},[143,2593,2595],{"class":145,"line":2594},20,[143,2596,348],{"class":149},[143,2598,2600,2603,2606,2609,2612,2614,2617,2619,2621,2624],{"class":145,"line":2599},21,[143,2601,2602],{"class":755},"else",[143,2604,2605],{"class":755}," if",[143,2607,2608],{"class":149}," (nmu",[143,2610,2611],{"class":755},">=",[143,2613,1352],{"class":280},[143,2615,2616],{"class":755},"&&",[143,2618,2566],{"class":149},[143,2620,150],{"class":755},[143,2622,2623],{"class":280},"200",[143,2625,1055],{"class":149},[143,2627,2629],{"class":145,"line":2628},22,[143,2630,2449],{"class":149},[143,2632,2634,2636,2638,2641,2643,2645],{"class":145,"line":2633},23,[143,2635,2454],{"class":149},[143,2637,2081],{"class":755},[143,2639,2640],{"class":163},"\"不小于100且小于200\"",[143,2642,2081],{"class":755},[143,2644,2146],{"class":149},[143,2646,2647],{"class":266}," \u002F\u002F可以无限else if,python中是elif：\n",[143,2649,2651],{"class":145,"line":2650},24,[143,2652,348],{"class":149},[143,2654,2656],{"class":145,"line":2655},25,[143,2657,2521],{"class":755},[143,2659,2661],{"class":145,"line":2660},26,[143,2662,2449],{"class":149},[143,2664,2666,2668,2670,2673,2675],{"class":145,"line":2665},27,[143,2667,2454],{"class":149},[143,2669,2081],{"class":755},[143,2671,2672],{"class":163},"\"不小于200\"",[143,2674,2081],{"class":755},[143,2676,2103],{"class":149},[143,2678,2680],{"class":145,"line":2679},28,[143,2681,348],{"class":149},[143,2683,2685],{"class":145,"line":2684},29,[143,2686,2687],{"class":266},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[19,2689,2690],{"start":35},[22,2691,2692],{},"三目运算符",[133,2694,2696],{"className":1037,"code":2695,"language":1039,"meta":138,"style":138},"\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",[140,2697,2698,2703,2708,2734,2756,2773,2778,2801,2816],{"__ignoreMap":138},[143,2699,2700],{"class":145,"line":146},[143,2701,2702],{"class":266},"\u002F\u002F创建三个变量a,b,c\n",[143,2704,2705],{"class":145,"line":35},[143,2706,2707],{"class":266},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[143,2709,2710,2712,2714,2716,2718,2721,2723,2725,2728,2730,2732],{"class":145,"line":46},[143,2711,1052],{"class":755},[143,2713,2302],{"class":149},[143,2715,160],{"class":755},[143,2717,1741],{"class":280},[143,2719,2720],{"class":149},",b",[143,2722,160],{"class":755},[143,2724,1487],{"class":280},[143,2726,2727],{"class":149},",c",[143,2729,160],{"class":755},[143,2731,1234],{"class":280},[143,2733,290],{"class":149},[143,2735,2736,2738,2740,2743,2745,2747,2749,2751,2753],{"class":145,"line":293},[143,2737,1329],{"class":149},[143,2739,160],{"class":755},[143,2741,2742],{"class":149},"(a",[143,2744,1998],{"class":755},[143,2746,1304],{"class":149},[143,2748,2024],{"class":755},[143,2750,67],{"class":149},[143,2752,1900],{"class":755},[143,2754,2755],{"class":149},"b)\n",[143,2757,2758,2760,2762,2765,2767,2769,2771],{"class":145,"line":306},[143,2759,2273],{"class":149},[143,2761,2081],{"class":755},[143,2763,2764],{"class":163},"\"c=\"",[143,2766,2081],{"class":755},[143,2768,1329],{"class":149},[143,2770,2081],{"class":755},[143,2772,2103],{"class":149},[143,2774,2775],{"class":145,"line":319},[143,2776,2777],{"class":266},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[143,2779,2780,2782,2784,2786,2788,2790,2792,2795,2797,2799],{"class":145,"line":332},[143,2781,2742],{"class":149},[143,2783,1998],{"class":755},[143,2785,1304],{"class":149},[143,2787,2024],{"class":755},[143,2789,67],{"class":149},[143,2791,1900],{"class":755},[143,2793,2794],{"class":149},"b)",[143,2796,160],{"class":755},[143,2798,1352],{"class":280},[143,2800,290],{"class":149},[143,2802,2803,2805,2807,2809,2811,2813],{"class":145,"line":345},[143,2804,2273],{"class":149},[143,2806,2081],{"class":755},[143,2808,67],{"class":149},[143,2810,2081],{"class":755},[143,2812,2146],{"class":149},[143,2814,2815],{"class":266}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[143,2817,2818,2820,2822,2824,2826,2828],{"class":145,"line":701},[143,2819,2273],{"class":149},[143,2821,2081],{"class":755},[143,2823,1304],{"class":149},[143,2825,2081],{"class":755},[143,2827,2146],{"class":149},[143,2829,2830],{"class":266}," \u002F\u002F10   a>b,b还是原值\n",[19,2832,2833],{"start":46},[22,2834,2835],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[133,2837,2839],{"className":1037,"code":2838,"language":1039,"meta":138,"style":138},"\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",[140,2840,2841,2846,2854,2867,2877,2881,2895,2908,2918,2926,2931,2956,2977,2999,3020,3042,3063,3083,3088],{"__ignoreMap":138},[143,2842,2843],{"class":145,"line":146},[143,2844,2845],{"class":266},"\u002F\u002F案例-电影打分\n",[143,2847,2848,2851],{"class":145,"line":35},[143,2849,2850],{"class":755},"#include",[143,2852,2853],{"class":163},"\u003Ciostream>\n",[143,2855,2856,2859,2862,2865],{"class":145,"line":46},[143,2857,2858],{"class":755},"using",[143,2860,2861],{"class":755}," namespace",[143,2863,2864],{"class":156}," std",[143,2866,290],{"class":149},[143,2868,2869,2871,2874],{"class":145,"line":293},[143,2870,1052],{"class":755},[143,2872,2873],{"class":156}," main",[143,2875,2876],{"class":149},"()\n",[143,2878,2879],{"class":145,"line":306},[143,2880,2449],{"class":149},[143,2882,2883,2886,2889,2891,2893],{"class":145,"line":319},[143,2884,2885],{"class":755},"    int",[143,2887,2888],{"class":149}," score",[143,2890,160],{"class":755},[143,2892,1234],{"class":280},[143,2894,290],{"class":149},[143,2896,2897,2899,2901,2904,2906],{"class":145,"line":332},[143,2898,2454],{"class":149},[143,2900,2081],{"class":755},[143,2902,2903],{"class":163},"\"电影打分：\"",[143,2905,2081],{"class":755},[143,2907,2103],{"class":149},[143,2909,2910,2913,2915],{"class":145,"line":345},[143,2911,2912],{"class":149},"    cin",[143,2914,2333],{"class":755},[143,2916,2917],{"class":149},"score;\n",[143,2919,2920,2923],{"class":145,"line":701},[143,2921,2922],{"class":755},"    switch",[143,2924,2925],{"class":149},"(score)\n",[143,2927,2928],{"class":145,"line":707},[143,2929,2930],{"class":149},"    {\n",[143,2932,2933,2936,2939,2942,2944,2947,2949,2951,2954],{"class":145,"line":727},[143,2934,2935],{"class":755},"        case",[143,2937,2938],{"class":280}," 10",[143,2940,2941],{"class":149},":cout",[143,2943,2081],{"class":755},[143,2945,2946],{"class":163},"\"经典\"",[143,2948,2081],{"class":755},[143,2950,2146],{"class":149},[143,2952,2953],{"class":755},"break",[143,2955,290],{"class":149},[143,2957,2958,2960,2963,2965,2967,2969,2971,2973,2975],{"class":145,"line":2518},[143,2959,2935],{"class":755},[143,2961,2962],{"class":280}," 9",[143,2964,2941],{"class":149},[143,2966,2081],{"class":755},[143,2968,2946],{"class":163},[143,2970,2081],{"class":755},[143,2972,2146],{"class":149},[143,2974,2953],{"class":755},[143,2976,290],{"class":149},[143,2978,2979,2981,2984,2986,2988,2991,2993,2995,2997],{"class":145,"line":2524},[143,2980,2935],{"class":755},[143,2982,2983],{"class":280}," 8",[143,2985,2941],{"class":149},[143,2987,2081],{"class":755},[143,2989,2990],{"class":163},"\"非常好\"",[143,2992,2081],{"class":755},[143,2994,2146],{"class":149},[143,2996,2953],{"class":755},[143,2998,290],{"class":149},[143,3000,3001,3003,3006,3008,3010,3012,3014,3016,3018],{"class":145,"line":2529},[143,3002,2935],{"class":755},[143,3004,3005],{"class":280}," 7",[143,3007,2941],{"class":149},[143,3009,2081],{"class":755},[143,3011,2990],{"class":163},[143,3013,2081],{"class":755},[143,3015,2146],{"class":149},[143,3017,2953],{"class":755},[143,3019,290],{"class":149},[143,3021,3022,3024,3027,3029,3031,3034,3036,3038,3040],{"class":145,"line":2543},[143,3023,2935],{"class":755},[143,3025,3026],{"class":280}," 6",[143,3028,2941],{"class":149},[143,3030,2081],{"class":755},[143,3032,3033],{"class":163},"\"一般\"",[143,3035,2081],{"class":755},[143,3037,2146],{"class":149},[143,3039,2953],{"class":755},[143,3041,290],{"class":149},[143,3043,3044,3046,3049,3051,3053,3055,3057,3059,3061],{"class":145,"line":2548},[143,3045,2935],{"class":755},[143,3047,3048],{"class":280}," 5",[143,3050,2941],{"class":149},[143,3052,2081],{"class":755},[143,3054,3033],{"class":163},[143,3056,2081],{"class":755},[143,3058,2146],{"class":149},[143,3060,2953],{"class":755},[143,3062,290],{"class":149},[143,3064,3065,3068,3070,3072,3075,3077,3079,3081],{"class":145,"line":2554},[143,3066,3067],{"class":755},"        default",[143,3069,2941],{"class":149},[143,3071,2081],{"class":755},[143,3073,3074],{"class":163},"\"烂片\"",[143,3076,2081],{"class":755},[143,3078,2146],{"class":149},[143,3080,2953],{"class":755},[143,3082,290],{"class":149},[143,3084,3085],{"class":145,"line":2575},[143,3086,3087],{"class":149},"    }\n",[143,3089,3090],{"class":145,"line":2580},[143,3091,348],{"class":149},[63,3093,3094],{},"if和switch区别：",[232,3096,3097,3100],{},[22,3098,3099],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[22,3101,3102],{},"switch优点：结构清晰，执行效率高",[58,3104,3106],{"id":3105},"_162循环结构","1.6.2循环结构",[19,3108,3109],{},[22,3110,3111],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[133,3113,3115],{"className":1037,"code":3114,"language":1039,"meta":138,"style":138},"\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",[140,3116,3117,3122,3130,3134,3147,3161,3165,3185,3195,3199,3211],{"__ignoreMap":138},[143,3118,3119],{"class":145,"line":146},[143,3120,3121],{"class":266},"\u002F\u002F打印0-9数字\n",[143,3123,3124,3126,3128],{"class":145,"line":35},[143,3125,1052],{"class":755},[143,3127,2873],{"class":156},[143,3129,2876],{"class":149},[143,3131,3132],{"class":145,"line":46},[143,3133,2449],{"class":149},[143,3135,3136,3138,3141,3143,3145],{"class":145,"line":293},[143,3137,2885],{"class":755},[143,3139,3140],{"class":149}," num",[143,3142,160],{"class":755},[143,3144,1234],{"class":280},[143,3146,290],{"class":149},[143,3148,3149,3152,3155,3157,3159],{"class":145,"line":306},[143,3150,3151],{"class":755},"    while",[143,3153,3154],{"class":149},"(num",[143,3156,150],{"class":755},[143,3158,1487],{"class":280},[143,3160,1055],{"class":149},[143,3162,3163],{"class":145,"line":319},[143,3164,2930],{"class":149},[143,3166,3167,3170,3173,3175,3177,3179,3182],{"class":145,"line":332},[143,3168,3169],{"class":156},"       std",[143,3171,3172],{"class":149},"::cout",[143,3174,2081],{"class":755},[143,3176,2566],{"class":149},[143,3178,2081],{"class":755},[143,3180,3181],{"class":156},"std",[143,3183,3184],{"class":149},"::endl;\n",[143,3186,3187,3190,3193],{"class":145,"line":345},[143,3188,3189],{"class":149},"        num",[143,3191,3192],{"class":755},"++",[143,3194,290],{"class":149},[143,3196,3197],{"class":145,"line":701},[143,3198,3087],{"class":149},[143,3200,3201,3204,3206,3209],{"class":145,"line":707},[143,3202,3203],{"class":156},"    system",[143,3205,1049],{"class":149},[143,3207,3208],{"class":163},"\"pause\"",[143,3210,1055],{"class":149},[143,3212,3213],{"class":145,"line":727},[143,3214,348],{"class":149},[63,3216,3217],{},"注意：写好循环条件，避免死循环情况",[133,3219,3221],{"className":1037,"code":3220,"language":1039,"meta":138,"style":138},"\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",[140,3222,3223,3228,3235,3242,3252,3260,3264,3269,3296,3301,3306,3314,3341,3346,3351,3364,3374,3378,3388,3393,3406,3411,3425,3430,3445,3449,3462,3466,3471,3475,3489,3497,3502,3508,3514,3519],{"__ignoreMap":138},[143,3224,3225],{"class":145,"line":146},[143,3226,3227],{"class":266},"\u002F\u002F循环结构-猜数字\n",[143,3229,3230,3232],{"class":145,"line":35},[143,3231,2850],{"class":755},[143,3233,3234],{"class":163}," \u003Ciostream>\n",[143,3236,3237,3239],{"class":145,"line":46},[143,3238,2850],{"class":755},[143,3240,3241],{"class":163}," \u003Cctime>\n",[143,3243,3244,3246,3248,3250],{"class":145,"line":293},[143,3245,2858],{"class":755},[143,3247,2861],{"class":755},[143,3249,2864],{"class":156},[143,3251,290],{"class":149},[143,3253,3254,3256,3258],{"class":145,"line":306},[143,3255,1052],{"class":755},[143,3257,2873],{"class":156},[143,3259,2876],{"class":149},[143,3261,3262],{"class":145,"line":319},[143,3263,2449],{"class":149},[143,3265,3266],{"class":145,"line":332},[143,3267,3268],{"class":266},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[143,3270,3271,3274,3277,3280,3283,3285,3288,3290,3293],{"class":145,"line":345},[143,3272,3273],{"class":156},"    srand",[143,3275,3276],{"class":149},"((",[143,3278,3279],{"class":755},"unsigned",[143,3281,3282],{"class":755}," int",[143,3284,1470],{"class":149},[143,3286,3287],{"class":156},"time",[143,3289,1049],{"class":149},[143,3291,3292],{"class":280},"NULL",[143,3294,3295],{"class":149},"));\n",[143,3297,3298],{"class":145,"line":701},[143,3299,3300],{"emptyLinePlaceholder":976},"\n",[143,3302,3303],{"class":145,"line":707},[143,3304,3305],{"class":266},"    \u002F\u002F1.系统生成随机数\n",[143,3307,3308,3311],{"class":145,"line":727},[143,3309,3310],{"class":266},"    \u002F\u002Frand()%100",[143,3312,3313],{"class":266}," \u002F\u002F生成0-99的随机数\n",[143,3315,3316,3318,3320,3322,3325,3328,3330,3332,3334,3336,3338],{"class":145,"line":2518},[143,3317,2885],{"class":755},[143,3319,3140],{"class":149},[143,3321,160],{"class":755},[143,3323,3324],{"class":156},"rand",[143,3326,3327],{"class":149},"()",[143,3329,1369],{"class":755},[143,3331,1352],{"class":280},[143,3333,1522],{"class":755},[143,3335,771],{"class":280},[143,3337,1101],{"class":149},[143,3339,3340],{"class":266}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[143,3342,3343],{"class":145,"line":2524},[143,3344,3345],{"class":266},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[143,3347,3348],{"class":145,"line":2529},[143,3349,3350],{"class":266},"    \u002F\u002F2.玩家猜测\n",[143,3352,3353,3355,3358,3360,3362],{"class":145,"line":2543},[143,3354,2885],{"class":755},[143,3356,3357],{"class":149}," val",[143,3359,160],{"class":755},[143,3361,1234],{"class":280},[143,3363,290],{"class":149},[143,3365,3366,3368,3370,3372],{"class":145,"line":2548},[143,3367,3151],{"class":755},[143,3369,2559],{"class":149},[143,3371,771],{"class":280},[143,3373,1055],{"class":149},[143,3375,3376],{"class":145,"line":2554},[143,3377,2930],{"class":149},[143,3379,3380,3383,3385],{"class":145,"line":2575},[143,3381,3382],{"class":149},"        cin",[143,3384,2333],{"class":755},[143,3386,3387],{"class":149},"val;\n",[143,3389,3390],{"class":145,"line":2580},[143,3391,3392],{"class":266},"        \u002F\u002F3.判断玩家猜测\n",[143,3394,3395,3398,3401,3403],{"class":145,"line":2594},[143,3396,3397],{"class":755},"        if",[143,3399,3400],{"class":149},"(val",[143,3402,150],{"class":755},[143,3404,3405],{"class":149},"num) \n",[143,3407,3408],{"class":145,"line":2599},[143,3409,3410],{"class":149},"        {\n",[143,3412,3413,3416,3418,3421,3423],{"class":145,"line":2628},[143,3414,3415],{"class":149},"            cout",[143,3417,2081],{"class":755},[143,3419,3420],{"class":163},"\"猜小了！\"",[143,3422,2081],{"class":755},[143,3424,2103],{"class":149},[143,3426,3427],{"class":145,"line":2633},[143,3428,3429],{"class":149},"        }\n",[143,3431,3432,3435,3437,3440,3442],{"class":145,"line":2650},[143,3433,3434],{"class":755},"        else",[143,3436,2605],{"class":755},[143,3438,3439],{"class":149}," (val",[143,3441,1998],{"class":755},[143,3443,3444],{"class":149},"num)\n",[143,3446,3447],{"class":145,"line":2655},[143,3448,3410],{"class":149},[143,3450,3451,3453,3455,3458,3460],{"class":145,"line":2660},[143,3452,3415],{"class":149},[143,3454,2081],{"class":755},[143,3456,3457],{"class":163},"\"猜大了！\"",[143,3459,2081],{"class":755},[143,3461,2103],{"class":149},[143,3463,3464],{"class":145,"line":2665},[143,3465,3429],{"class":149},[143,3467,3468],{"class":145,"line":2679},[143,3469,3470],{"class":755},"        else\n",[143,3472,3473],{"class":145,"line":2684},[143,3474,3410],{"class":149},[143,3476,3478,3480,3482,3485,3487],{"class":145,"line":3477},30,[143,3479,3415],{"class":149},[143,3481,2081],{"class":755},[143,3483,3484],{"class":163},"\"猜对了！\"",[143,3486,2081],{"class":755},[143,3488,2103],{"class":149},[143,3490,3492,3495],{"class":145,"line":3491},31,[143,3493,3494],{"class":755},"            break",[143,3496,290],{"class":149},[143,3498,3500],{"class":145,"line":3499},32,[143,3501,3429],{"class":149},[143,3503,3505],{"class":145,"line":3504},33,[143,3506,3507],{"class":266},"        \u002F\u002F猜对 退出游戏\n",[143,3509,3511],{"class":145,"line":3510},34,[143,3512,3513],{"class":266},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[143,3515,3517],{"class":145,"line":3516},35,[143,3518,3087],{"class":149},[143,3520,3522],{"class":145,"line":3521},36,[143,3523,348],{"class":149},[19,3525,3526],{"start":35},[22,3527,3528,3529,3532],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[25,3530,3531],{},"do...while会先执行一次循环语句","，在判断循环语句",[133,3534,3536],{"className":1037,"code":3535,"language":1039,"meta":138,"style":138},"\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",[140,3537,3538,3543,3551,3555,3567,3575,3579,3596,3603,3607,3620,3630],{"__ignoreMap":138},[143,3539,3540],{"class":145,"line":146},[143,3541,3542],{"class":266},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[143,3544,3545,3547,3549],{"class":145,"line":35},[143,3546,1052],{"class":755},[143,3548,2873],{"class":156},[143,3550,2876],{"class":149},[143,3552,3553],{"class":145,"line":46},[143,3554,2449],{"class":149},[143,3556,3557,3559,3561,3563,3565],{"class":145,"line":293},[143,3558,2885],{"class":755},[143,3560,3140],{"class":149},[143,3562,160],{"class":755},[143,3564,1234],{"class":280},[143,3566,290],{"class":149},[143,3568,3569,3572],{"class":145,"line":306},[143,3570,3571],{"class":755},"    do",[143,3573,3574],{"class":149}," \n",[143,3576,3577],{"class":145,"line":319},[143,3578,2930],{"class":149},[143,3580,3581,3584,3586,3588,3590,3592,3594],{"class":145,"line":332},[143,3582,3583],{"class":156},"        std",[143,3585,3172],{"class":149},[143,3587,2081],{"class":755},[143,3589,2566],{"class":149},[143,3591,2081],{"class":755},[143,3593,3181],{"class":156},[143,3595,3184],{"class":149},[143,3597,3598,3600],{"class":145,"line":345},[143,3599,3189],{"class":149},[143,3601,3602],{"class":755},"++\n",[143,3604,3605],{"class":145,"line":701},[143,3606,3087],{"class":149},[143,3608,3609,3611,3613,3615,3617],{"class":145,"line":707},[143,3610,3151],{"class":755},[143,3612,3154],{"class":149},[143,3614,150],{"class":755},[143,3616,1487],{"class":280},[143,3618,3619],{"class":149},");\n",[143,3621,3622,3624,3626,3628],{"class":145,"line":727},[143,3623,3203],{"class":156},[143,3625,1049],{"class":149},[143,3627,3208],{"class":163},[143,3629,3619],{"class":149},[143,3631,3632],{"class":145,"line":2518},[143,3633,348],{"class":149},[63,3635,3636],{},"案例-水仙花数",[63,3638,3639],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[63,3641,3642],{},"例如：1^3+5^3+3^3=153",[63,3644,3645],{},"请用do...while语句，求出所有3位数的水仙花数",[133,3647,3649],{"className":1037,"code":3648,"language":1039,"meta":138,"style":138},"#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",[140,3650,3651,3657,3667,3675,3679,3684,3696,3702,3706,3711,3727,3743,3759,3774,3793,3808,3856,3860,3872,3876,3884,3888,3902],{"__ignoreMap":138},[143,3652,3653,3655],{"class":145,"line":146},[143,3654,2850],{"class":755},[143,3656,3234],{"class":163},[143,3658,3659,3661,3663,3665],{"class":145,"line":35},[143,3660,2858],{"class":755},[143,3662,2861],{"class":755},[143,3664,2864],{"class":156},[143,3666,290],{"class":149},[143,3668,3669,3671,3673],{"class":145,"line":46},[143,3670,1052],{"class":755},[143,3672,2873],{"class":156},[143,3674,2876],{"class":149},[143,3676,3677],{"class":145,"line":293},[143,3678,2449],{"class":149},[143,3680,3681],{"class":145,"line":306},[143,3682,3683],{"class":266},"    \u002F\u002F1.先打印所有三位数字\n",[143,3685,3686,3688,3690,3692,3694],{"class":145,"line":319},[143,3687,2885],{"class":755},[143,3689,3140],{"class":149},[143,3691,160],{"class":755},[143,3693,1352],{"class":280},[143,3695,290],{"class":149},[143,3697,3698,3700],{"class":145,"line":332},[143,3699,3571],{"class":755},[143,3701,3574],{"class":149},[143,3703,3704],{"class":145,"line":345},[143,3705,2930],{"class":149},[143,3707,3708],{"class":145,"line":701},[143,3709,3710],{"class":266},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[143,3712,3713,3716,3718,3720,3722,3724],{"class":145,"line":707},[143,3714,3715],{"class":755},"        int",[143,3717,2302],{"class":149},[143,3719,160],{"class":755},[143,3721,1234],{"class":280},[143,3723,1101],{"class":149},[143,3725,3726],{"class":266}," \u002F\u002F个位\n",[143,3728,3729,3731,3734,3736,3738,3740],{"class":145,"line":727},[143,3730,3715],{"class":755},[143,3732,3733],{"class":149}," b",[143,3735,160],{"class":755},[143,3737,1234],{"class":280},[143,3739,1101],{"class":149},[143,3741,3742],{"class":266}," \u002F\u002F十位\n",[143,3744,3745,3747,3750,3752,3754,3756],{"class":145,"line":2518},[143,3746,3715],{"class":755},[143,3748,3749],{"class":149}," c",[143,3751,160],{"class":755},[143,3753,1234],{"class":280},[143,3755,1101],{"class":149},[143,3757,3758],{"class":266}," \u002F\u002F百位\n",[143,3760,3761,3764,3766,3768,3770,3772],{"class":145,"line":2524},[143,3762,3763],{"class":149},"        a",[143,3765,160],{"class":755},[143,3767,2566],{"class":149},[143,3769,1369],{"class":755},[143,3771,1487],{"class":280},[143,3773,290],{"class":149},[143,3775,3776,3779,3781,3783,3785,3787,3789,3791],{"class":145,"line":2529},[143,3777,3778],{"class":149},"        b",[143,3780,160],{"class":755},[143,3782,2566],{"class":149},[143,3784,1625],{"class":755},[143,3786,1487],{"class":280},[143,3788,1369],{"class":755},[143,3790,1487],{"class":280},[143,3792,290],{"class":149},[143,3794,3795,3798,3800,3802,3804,3806],{"class":145,"line":2543},[143,3796,3797],{"class":149},"        c",[143,3799,160],{"class":755},[143,3801,2566],{"class":149},[143,3803,1625],{"class":755},[143,3805,1352],{"class":280},[143,3807,290],{"class":149},[143,3809,3810,3812,3814,3816,3818,3820,3822,3824,3826,3828,3830,3832,3834,3836,3838,3840,3842,3844,3847,3850,3853],{"class":145,"line":2548},[143,3811,3397],{"class":755},[143,3813,2742],{"class":149},[143,3815,1496],{"class":755},[143,3817,67],{"class":149},[143,3819,1496],{"class":755},[143,3821,67],{"class":149},[143,3823,1522],{"class":755},[143,3825,1304],{"class":149},[143,3827,1496],{"class":755},[143,3829,1304],{"class":149},[143,3831,1496],{"class":755},[143,3833,1304],{"class":149},[143,3835,1522],{"class":755},[143,3837,1329],{"class":149},[143,3839,1496],{"class":755},[143,3841,1329],{"class":149},[143,3843,1496],{"class":755},[143,3845,3846],{"class":149},"c ",[143,3848,3849],{"class":755},"==",[143,3851,3852],{"class":149}," num)",[143,3854,3855],{"class":266}," \u002F\u002F如果是水仙花数，才打印\n",[143,3857,3858],{"class":145,"line":2554},[143,3859,3410],{"class":149},[143,3861,3862,3864,3866,3868,3870],{"class":145,"line":2575},[143,3863,3415],{"class":149},[143,3865,2081],{"class":755},[143,3867,2566],{"class":149},[143,3869,2081],{"class":755},[143,3871,2103],{"class":149},[143,3873,3874],{"class":145,"line":2580},[143,3875,3429],{"class":149},[143,3877,3878,3880,3882],{"class":145,"line":2594},[143,3879,3189],{"class":149},[143,3881,3192],{"class":755},[143,3883,290],{"class":149},[143,3885,3886],{"class":145,"line":2599},[143,3887,3087],{"class":149},[143,3889,3890,3892,3895,3897,3900],{"class":145,"line":2628},[143,3891,3151],{"class":755},[143,3893,3894],{"class":149}," (num ",[143,3896,150],{"class":755},[143,3898,3899],{"class":280}," 1000",[143,3901,3619],{"class":149},[143,3903,3904],{"class":145,"line":2633},[143,3905,348],{"class":149},[19,3907,3908],{"start":46},[22,3909,3910],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[133,3912,3914],{"className":1037,"code":3913,"language":1039,"meta":138,"style":138},"\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",[140,3915,3916,3921,3950,3954,3966,3970,3975,3986,3993,3997,4011,4015,4022,4026,4038,4047],{"__ignoreMap":138},[143,3917,3918],{"class":145,"line":146},[143,3919,3920],{"class":266},"\u002F\u002F从数字0-9打印\n",[143,3922,3923,3926,3928,3930,3933,3935,3937,3940,3942,3944,3946,3948],{"class":145,"line":35},[143,3924,3925],{"class":755},"for",[143,3927,1049],{"class":149},[143,3929,1052],{"class":755},[143,3931,3932],{"class":149}," i",[143,3934,160],{"class":755},[143,3936,1234],{"class":280},[143,3938,3939],{"class":149},";i",[143,3941,150],{"class":755},[143,3943,1487],{"class":280},[143,3945,3939],{"class":149},[143,3947,3192],{"class":755},[143,3949,1055],{"class":149},[143,3951,3952],{"class":145,"line":46},[143,3953,2449],{"class":149},[143,3955,3956,3958,3960,3962,3964],{"class":145,"line":293},[143,3957,2454],{"class":149},[143,3959,2081],{"class":755},[143,3961,1482],{"class":149},[143,3963,2081],{"class":755},[143,3965,2103],{"class":149},[143,3967,3968],{"class":145,"line":306},[143,3969,348],{"class":149},[143,3971,3972],{"class":145,"line":319},[143,3973,3974],{"class":266},"\u002F\u002F上式可以进行拆分\n",[143,3976,3977,3979,3981,3983],{"class":145,"line":332},[143,3978,1052],{"class":755},[143,3980,3932],{"class":149},[143,3982,160],{"class":755},[143,3984,3985],{"class":280},"0\n",[143,3987,3988,3990],{"class":145,"line":345},[143,3989,3925],{"class":755},[143,3991,3992],{"class":149},"(;;;)\n",[143,3994,3995],{"class":145,"line":701},[143,3996,2449],{"class":149},[143,3998,3999,4002,4005,4007,4009],{"class":145,"line":707},[143,4000,4001],{"class":755},"    if",[143,4003,4004],{"class":149},"(i",[143,4006,2611],{"class":755},[143,4008,1487],{"class":280},[143,4010,1055],{"class":149},[143,4012,4013],{"class":145,"line":727},[143,4014,2930],{"class":149},[143,4016,4017,4020],{"class":145,"line":2518},[143,4018,4019],{"class":755},"        break",[143,4021,290],{"class":149},[143,4023,4024],{"class":145,"line":2524},[143,4025,3087],{"class":149},[143,4027,4028,4030,4032,4034,4036],{"class":145,"line":2529},[143,4029,2454],{"class":149},[143,4031,2081],{"class":755},[143,4033,1482],{"class":149},[143,4035,2081],{"class":755},[143,4037,2103],{"class":149},[143,4039,4040,4043,4045],{"class":145,"line":2543},[143,4041,4042],{"class":149},"    i",[143,4044,3192],{"class":755},[143,4046,290],{"class":149},[143,4048,4049],{"class":145,"line":2548},[143,4050,348],{"class":149},[63,4052,4053],{},"小练习",[133,4055,4057],{"className":1037,"code":4056,"language":1039,"meta":138,"style":138},"#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",[140,4058,4059,4065,4075,4083,4087,4092,4097,4125,4129,4134,4139,4180,4184,4197,4201,4205,4209,4221,4225,4229],{"__ignoreMap":138},[143,4060,4061,4063],{"class":145,"line":146},[143,4062,2850],{"class":755},[143,4064,2853],{"class":163},[143,4066,4067,4069,4071,4073],{"class":145,"line":35},[143,4068,2858],{"class":755},[143,4070,2861],{"class":755},[143,4072,2864],{"class":156},[143,4074,290],{"class":149},[143,4076,4077,4079,4081],{"class":145,"line":46},[143,4078,1052],{"class":755},[143,4080,2873],{"class":156},[143,4082,2876],{"class":149},[143,4084,4085],{"class":145,"line":293},[143,4086,2449],{"class":149},[143,4088,4089],{"class":145,"line":306},[143,4090,4091],{"class":266},"    \u002F\u002F敲桌子案例\n",[143,4093,4094],{"class":145,"line":319},[143,4095,4096],{"class":266},"    \u002F\u002F1.先输出1-100的数字\n",[143,4098,4099,4102,4104,4106,4108,4110,4112,4115,4117,4119,4121,4123],{"class":145,"line":332},[143,4100,4101],{"class":755},"    for",[143,4103,1049],{"class":149},[143,4105,1052],{"class":755},[143,4107,3932],{"class":149},[143,4109,160],{"class":755},[143,4111,771],{"class":280},[143,4113,4114],{"class":149},"; i",[143,4116,2490],{"class":755},[143,4118,1352],{"class":280},[143,4120,4114],{"class":149},[143,4122,3192],{"class":755},[143,4124,1055],{"class":149},[143,4126,4127],{"class":145,"line":345},[143,4128,2930],{"class":149},[143,4130,4131],{"class":145,"line":701},[143,4132,4133],{"class":266},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[143,4135,4136],{"class":145,"line":707},[143,4137,4138],{"class":266},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[143,4140,4141,4143,4145,4147,4149,4151,4153,4156,4158,4160,4162,4164,4166,4168,4170,4172,4174,4176,4178],{"class":145,"line":727},[143,4142,3397],{"class":755},[143,4144,4004],{"class":149},[143,4146,1369],{"class":755},[143,4148,1410],{"class":280},[143,4150,3849],{"class":755},[143,4152,1234],{"class":280},[143,4154,4155],{"class":755}," ||",[143,4157,3932],{"class":149},[143,4159,1369],{"class":755},[143,4161,1487],{"class":280},[143,4163,3849],{"class":755},[143,4165,1410],{"class":280},[143,4167,4155],{"class":755},[143,4169,3932],{"class":149},[143,4171,1625],{"class":755},[143,4173,1487],{"class":280},[143,4175,3849],{"class":755},[143,4177,1410],{"class":280},[143,4179,1055],{"class":149},[143,4181,4182],{"class":145,"line":2518},[143,4183,3410],{"class":149},[143,4185,4186,4188,4190,4193,4195],{"class":145,"line":2524},[143,4187,3415],{"class":149},[143,4189,2081],{"class":755},[143,4191,4192],{"class":163},"\"敲桌子\"",[143,4194,2081],{"class":755},[143,4196,2103],{"class":149},[143,4198,4199],{"class":145,"line":2529},[143,4200,3429],{"class":149},[143,4202,4203],{"class":145,"line":2543},[143,4204,3470],{"class":755},[143,4206,4207],{"class":145,"line":2548},[143,4208,3410],{"class":149},[143,4210,4211,4213,4215,4217,4219],{"class":145,"line":2554},[143,4212,3415],{"class":149},[143,4214,2081],{"class":755},[143,4216,1482],{"class":149},[143,4218,2081],{"class":755},[143,4220,2103],{"class":149},[143,4222,4223],{"class":145,"line":2575},[143,4224,3429],{"class":149},[143,4226,4227],{"class":145,"line":2580},[143,4228,3087],{"class":149},[143,4230,4231],{"class":145,"line":2594},[143,4232,348],{"class":149},[63,4234,4235],{},"嵌套实现星图",[133,4237,4239],{"className":1037,"code":4238,"language":1039,"meta":138,"style":138},"#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",[140,4240,4241,4247,4257,4265,4269,4295,4299,4328,4332,4343,4347,4356,4360],{"__ignoreMap":138},[143,4242,4243,4245],{"class":145,"line":146},[143,4244,2850],{"class":755},[143,4246,2853],{"class":163},[143,4248,4249,4251,4253,4255],{"class":145,"line":35},[143,4250,2858],{"class":755},[143,4252,2861],{"class":755},[143,4254,2864],{"class":156},[143,4256,290],{"class":149},[143,4258,4259,4261,4263],{"class":145,"line":46},[143,4260,1052],{"class":755},[143,4262,2873],{"class":156},[143,4264,2876],{"class":149},[143,4266,4267],{"class":145,"line":293},[143,4268,2449],{"class":149},[143,4270,4271,4273,4275,4277,4279,4281,4283,4285,4287,4289,4291,4293],{"class":145,"line":306},[143,4272,4101],{"class":755},[143,4274,2559],{"class":149},[143,4276,1052],{"class":755},[143,4278,3932],{"class":149},[143,4280,160],{"class":755},[143,4282,1234],{"class":280},[143,4284,3939],{"class":149},[143,4286,150],{"class":755},[143,4288,1487],{"class":280},[143,4290,3939],{"class":149},[143,4292,3192],{"class":755},[143,4294,1055],{"class":149},[143,4296,4297],{"class":145,"line":319},[143,4298,2930],{"class":149},[143,4300,4301,4304,4306,4308,4311,4313,4315,4318,4320,4322,4324,4326],{"class":145,"line":332},[143,4302,4303],{"class":755},"        for",[143,4305,2559],{"class":149},[143,4307,1052],{"class":755},[143,4309,4310],{"class":149}," j",[143,4312,160],{"class":755},[143,4314,1234],{"class":280},[143,4316,4317],{"class":149},";j",[143,4319,150],{"class":755},[143,4321,1487],{"class":280},[143,4323,4317],{"class":149},[143,4325,3192],{"class":755},[143,4327,1055],{"class":149},[143,4329,4330],{"class":145,"line":345},[143,4331,3410],{"class":149},[143,4333,4334,4336,4338,4341],{"class":145,"line":701},[143,4335,3415],{"class":149},[143,4337,2081],{"class":755},[143,4339,4340],{"class":163},"\"*\"",[143,4342,290],{"class":149},[143,4344,4345],{"class":145,"line":707},[143,4346,3429],{"class":149},[143,4348,4349,4352,4354],{"class":145,"line":727},[143,4350,4351],{"class":149},"        cout",[143,4353,2081],{"class":755},[143,4355,2103],{"class":149},[143,4357,4358],{"class":145,"line":2518},[143,4359,3087],{"class":149},[143,4361,4362],{"class":145,"line":2524},[143,4363,348],{"class":149},[63,4365,4366],{},"乘法口诀表",[133,4368,4370],{"className":1037,"code":4369,"language":1039,"meta":138,"style":138},"#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",[140,4371,4372,4378,4388,4396,4400,4426,4430,4455,4459,4499,4503,4511,4515],{"__ignoreMap":138},[143,4373,4374,4376],{"class":145,"line":146},[143,4375,2850],{"class":755},[143,4377,3234],{"class":163},[143,4379,4380,4382,4384,4386],{"class":145,"line":35},[143,4381,2858],{"class":755},[143,4383,2861],{"class":755},[143,4385,2864],{"class":156},[143,4387,290],{"class":149},[143,4389,4390,4392,4394],{"class":145,"line":46},[143,4391,1052],{"class":755},[143,4393,2873],{"class":156},[143,4395,2876],{"class":149},[143,4397,4398],{"class":145,"line":293},[143,4399,2449],{"class":149},[143,4401,4402,4404,4406,4408,4410,4412,4414,4416,4418,4420,4422,4424],{"class":145,"line":306},[143,4403,4101],{"class":755},[143,4405,1049],{"class":149},[143,4407,1052],{"class":755},[143,4409,3932],{"class":149},[143,4411,160],{"class":755},[143,4413,771],{"class":280},[143,4415,3939],{"class":149},[143,4417,150],{"class":755},[143,4419,1487],{"class":280},[143,4421,3939],{"class":149},[143,4423,3192],{"class":755},[143,4425,1055],{"class":149},[143,4427,4428],{"class":145,"line":319},[143,4429,2930],{"class":149},[143,4431,4432,4434,4436,4438,4440,4442,4444,4446,4448,4451,4453],{"class":145,"line":332},[143,4433,4303],{"class":755},[143,4435,1049],{"class":149},[143,4437,1052],{"class":755},[143,4439,4310],{"class":149},[143,4441,160],{"class":755},[143,4443,771],{"class":280},[143,4445,4317],{"class":149},[143,4447,2490],{"class":755},[143,4449,4450],{"class":149},"i;j",[143,4452,3192],{"class":755},[143,4454,1055],{"class":149},[143,4456,4457],{"class":145,"line":345},[143,4458,3410],{"class":149},[143,4460,4461,4463,4465,4467,4469,4471,4473,4475,4477,4480,4482,4484,4486,4488,4490,4493,4495,4497],{"class":145,"line":701},[143,4462,3415],{"class":149},[143,4464,2081],{"class":755},[143,4466,1508],{"class":149},[143,4468,2081],{"class":755},[143,4470,4340],{"class":163},[143,4472,2081],{"class":755},[143,4474,1482],{"class":149},[143,4476,2081],{"class":755},[143,4478,4479],{"class":163},"\"=\"",[143,4481,2081],{"class":755},[143,4483,1482],{"class":149},[143,4485,1496],{"class":755},[143,4487,1508],{"class":149},[143,4489,2081],{"class":755},[143,4491,4492],{"class":163},"'",[143,4494,2138],{"class":280},[143,4496,4492],{"class":163},[143,4498,290],{"class":149},[143,4500,4501],{"class":145,"line":707},[143,4502,3429],{"class":149},[143,4504,4505,4507,4509],{"class":145,"line":727},[143,4506,4351],{"class":149},[143,4508,2081],{"class":755},[143,4510,2103],{"class":149},[143,4512,4513],{"class":145,"line":2518},[143,4514,3087],{"class":149},[143,4516,4517],{"class":145,"line":2524},[143,4518,348],{"class":149},[58,4520,4522],{"id":4521},"_163跳出语句","1.6.3跳出语句",[19,4524,4525],{},[22,4526,4527],{},"break语句\n作用：用于跳出选择结构或者循环结构",[63,4529,4530],{},"break使用时机：",[232,4532,4533,4536,4539],{},[22,4534,4535],{},"出现在switch条件语句中，作用是终止case并跳出switch",[22,4537,4538],{},"出现在循环结构中，作用是跳出当前的循环结构",[22,4540,4541],{},"出现在嵌套循环中，跳出最近的内层循环语句",[19,4543,4544,4547],{"start":35},[22,4545,4546],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[22,4548,4549],{},"goto语句\n语法：goto 标记;",[63,4551,4552],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[133,4554,4556],{"className":1037,"code":4555,"language":1039,"meta":138,"style":138},"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",[140,4557,4558,4566,4570,4583,4593,4606,4619,4632,4640,4656],{"__ignoreMap":138},[143,4559,4560,4562,4564],{"class":145,"line":146},[143,4561,1052],{"class":755},[143,4563,2873],{"class":156},[143,4565,2876],{"class":149},[143,4567,4568],{"class":145,"line":35},[143,4569,2449],{"class":149},[143,4571,4572,4574,4576,4579,4581],{"class":145,"line":46},[143,4573,2454],{"class":149},[143,4575,2081],{"class":755},[143,4577,4578],{"class":163},"\"1\"",[143,4580,2081],{"class":755},[143,4582,2103],{"class":149},[143,4584,4585,4588,4591],{"class":145,"line":293},[143,4586,4587],{"class":755},"    goto",[143,4589,4590],{"class":156}," FLAG",[143,4592,290],{"class":149},[143,4594,4595,4597,4599,4602,4604],{"class":145,"line":306},[143,4596,2454],{"class":149},[143,4598,2081],{"class":755},[143,4600,4601],{"class":163},"\"2\"",[143,4603,2081],{"class":755},[143,4605,2103],{"class":149},[143,4607,4608,4610,4612,4615,4617],{"class":145,"line":319},[143,4609,2454],{"class":149},[143,4611,2081],{"class":755},[143,4613,4614],{"class":163},"\"3\"",[143,4616,2081],{"class":755},[143,4618,2103],{"class":149},[143,4620,4621,4623,4625,4628,4630],{"class":145,"line":332},[143,4622,2454],{"class":149},[143,4624,2081],{"class":755},[143,4626,4627],{"class":163},"\"4\"",[143,4629,2081],{"class":755},[143,4631,2103],{"class":149},[143,4633,4634,4637],{"class":145,"line":345},[143,4635,4636],{"class":156},"    FLAG",[143,4638,4639],{"class":149},":\n",[143,4641,4642,4644,4646,4649,4651,4653],{"class":145,"line":701},[143,4643,2454],{"class":149},[143,4645,2081],{"class":755},[143,4647,4648],{"class":163},"\"5\"",[143,4650,2081],{"class":755},[143,4652,2146],{"class":149},[143,4654,4655],{"class":266},"\u002F\u002F跳过了2,3,4,直接到5\n",[143,4657,4658],{"class":145,"line":707},[143,4659,348],{"class":149},[14,4661,4663],{"id":4662},"_17数组","1.7数组",[58,4665,4667],{"id":4666},"_171一维数组","1.7.1一维数组",[19,4669,4670],{},[22,4671,4672],{},"一维数组定义方式",[1181,4674,4675,4685],{},[1184,4676,4677],{},[1187,4678,4679,4682],{},[1190,4680,4681],{},"方式",[1190,4683,4684],{},"注意事项",[1227,4686,4687,4701,4711],{},[1187,4688,4689,4695],{},[1232,4690,4691,4692,1101],{},"数据类型 数组名",[143,4693,4694],{},"数组长度",[1232,4696,4697,4698,4700],{},"这种方式是先定义再arr",[143,4699,1482],{},"赋值",[1187,4702,4703,4708],{},[1232,4704,4691,4705,4707],{},[143,4706,4694],{},"={值1,值2....};",[1232,4709,4710],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[1187,4712,4713,4717],{},[1232,4714,4691,4715,4707],{},[143,4716],{},[1232,4718,4719,4720,4722],{},"int arr",[143,4721],{},";这是不正确的，按照这样的方式定义必须有初始长度",[19,4724,4725],{"start":35},[22,4726,4727],{},"一维数组数组名\n用途：",[232,4729,4730],{},[22,4731,4732],{},"1.可以统计整个数组在内存中的长度：",[133,4734,4736],{"className":1037,"code":4735,"language":1039,"meta":138,"style":138},"sizeof(arr);\nsizeof(arr[0]);\n",[140,4737,4738,4745],{"__ignoreMap":138},[143,4739,4740,4742],{"class":145,"line":146},[143,4741,1046],{"class":755},[143,4743,4744],{"class":149},"(arr);\n",[143,4746,4747,4749,4752,4754],{"class":145,"line":35},[143,4748,1046],{"class":755},[143,4750,4751],{"class":149},"(arr[",[143,4753,1234],{"class":280},[143,4755,4756],{"class":149},"]);\n",[232,4758,4759],{},[22,4760,4761],{},"2.可以获取数组在内存中的首地址:",[133,4763,4765],{"className":1037,"code":4764,"language":1039,"meta":138,"style":138},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[140,4766,4767,4772,4785,4790],{"__ignoreMap":138},[143,4768,4769],{"class":145,"line":146},[143,4770,4771],{"class":266},"\u002F\u002F查看16进制的首地址\n",[143,4773,4774,4776,4778,4781,4783],{"class":145,"line":35},[143,4775,2273],{"class":149},[143,4777,2081],{"class":755},[143,4779,4780],{"class":149},"arr",[143,4782,2081],{"class":755},[143,4784,2103],{"class":149},[143,4786,4787],{"class":145,"line":46},[143,4788,4789],{"class":266},"\u002F\u002F看10进制数\n",[143,4791,4792,4794,4796,4798,4800,4802,4804,4807,4809,4811,4813],{"class":145,"line":293},[143,4793,2273],{"class":149},[143,4795,2081],{"class":755},[143,4797,1049],{"class":149},[143,4799,1052],{"class":755},[143,4801,1470],{"class":149},[143,4803,1394],{"class":755},[143,4805,4806],{"class":149},"arr[",[143,4808,1234],{"class":280},[143,4810,1979],{"class":149},[143,4812,2081],{"class":755},[143,4814,2103],{"class":149},[63,4816,4817],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[232,4819,4820],{},[22,4821,4822],{},"1️⃣五只小猪称体重",[133,4824,4826],{"className":1037,"code":4825,"language":1039,"meta":138,"style":138},"#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",[140,4827,4828,4834,4844,4852,4856,4896,4909,4935,4939,4951,4955,4965,4969,4973,4986,4996],{"__ignoreMap":138},[143,4829,4830,4832],{"class":145,"line":146},[143,4831,2850],{"class":755},[143,4833,2853],{"class":163},[143,4835,4836,4838,4840,4842],{"class":145,"line":35},[143,4837,2858],{"class":755},[143,4839,2861],{"class":755},[143,4841,2864],{"class":156},[143,4843,290],{"class":149},[143,4845,4846,4848,4850],{"class":145,"line":46},[143,4847,1052],{"class":755},[143,4849,2873],{"class":156},[143,4851,2876],{"class":149},[143,4853,4854],{"class":145,"line":293},[143,4855,2449],{"class":149},[143,4857,4858,4860,4863,4865,4867,4869,4871,4874,4876,4879,4881,4883,4885,4888,4890,4893],{"class":145,"line":306},[143,4859,2885],{"class":755},[143,4861,4862],{"class":149}," arr[",[143,4864,1360],{"class":280},[143,4866,1979],{"class":149},[143,4868,160],{"class":755},[143,4870,1936],{"class":149},[143,4872,4873],{"class":280},"300",[143,4875,1419],{"class":149},[143,4877,4878],{"class":280},"350",[143,4880,1419],{"class":149},[143,4882,2623],{"class":280},[143,4884,1419],{"class":149},[143,4886,4887],{"class":280},"400",[143,4889,1419],{"class":149},[143,4891,4892],{"class":280},"250",[143,4894,4895],{"class":149},"};\n",[143,4897,4898,4900,4903,4905,4907],{"class":145,"line":319},[143,4899,2885],{"class":755},[143,4901,4902],{"class":149}," tmp",[143,4904,160],{"class":755},[143,4906,1234],{"class":280},[143,4908,290],{"class":149},[143,4910,4911,4913,4915,4917,4919,4921,4923,4925,4927,4929,4931,4933],{"class":145,"line":332},[143,4912,4101],{"class":755},[143,4914,2559],{"class":149},[143,4916,1052],{"class":755},[143,4918,3932],{"class":149},[143,4920,160],{"class":755},[143,4922,1234],{"class":280},[143,4924,3939],{"class":149},[143,4926,150],{"class":755},[143,4928,1360],{"class":280},[143,4930,3939],{"class":149},[143,4932,3192],{"class":755},[143,4934,1055],{"class":149},[143,4936,4937],{"class":145,"line":345},[143,4938,2930],{"class":149},[143,4940,4941,4943,4946,4948],{"class":145,"line":701},[143,4942,3397],{"class":755},[143,4944,4945],{"class":149},"(tmp",[143,4947,150],{"class":755},[143,4949,4950],{"class":149},"arr[i])\n",[143,4952,4953],{"class":145,"line":707},[143,4954,3410],{"class":149},[143,4956,4957,4960,4962],{"class":145,"line":727},[143,4958,4959],{"class":149},"            tmp",[143,4961,160],{"class":755},[143,4963,4964],{"class":149},"arr[i];\n",[143,4966,4967],{"class":145,"line":2518},[143,4968,3429],{"class":149},[143,4970,4971],{"class":145,"line":2524},[143,4972,3087],{"class":149},[143,4974,4975,4977,4979,4982,4984],{"class":145,"line":2529},[143,4976,2454],{"class":149},[143,4978,2081],{"class":755},[143,4980,4981],{"class":149},"tmp",[143,4983,2081],{"class":755},[143,4985,2103],{"class":149},[143,4987,4988,4991,4994],{"class":145,"line":2543},[143,4989,4990],{"class":755},"    return",[143,4992,4993],{"class":280}," 0",[143,4995,290],{"class":149},[143,4997,4998],{"class":145,"line":2548},[143,4999,348],{"class":149},[232,5001,5002],{},[22,5003,5004],{},"2️⃣数组元素逆置",[133,5006,5008],{"className":1037,"code":5007,"language":1039,"meta":138,"style":138},"\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",[140,5009,5010,5015,5021,5031,5039,5043,5078,5094,5126,5139,5144,5149,5161,5171,5181,5186,5195,5205,5210,5215,5242,5246,5262,5266,5277,5286],{"__ignoreMap":138},[143,5011,5012],{"class":145,"line":146},[143,5013,5014],{"class":266},"\u002F\u002F元素逆置\n",[143,5016,5017,5019],{"class":145,"line":35},[143,5018,2850],{"class":755},[143,5020,2853],{"class":163},[143,5022,5023,5025,5027,5029],{"class":145,"line":46},[143,5024,2858],{"class":755},[143,5026,2861],{"class":755},[143,5028,2864],{"class":156},[143,5030,290],{"class":149},[143,5032,5033,5035,5037],{"class":145,"line":293},[143,5034,1052],{"class":755},[143,5036,2873],{"class":156},[143,5038,2876],{"class":149},[143,5040,5041],{"class":145,"line":306},[143,5042,2449],{"class":149},[143,5044,5045,5048,5050,5052,5054,5056,5058,5060,5062,5064,5066,5068,5070,5072,5074,5076],{"class":145,"line":319},[143,5046,5047],{"class":755},"   int",[143,5049,4862],{"class":149},[143,5051,1360],{"class":280},[143,5053,1979],{"class":149},[143,5055,160],{"class":755},[143,5057,1936],{"class":149},[143,5059,771],{"class":280},[143,5061,1419],{"class":149},[143,5063,1122],{"class":280},[143,5065,1419],{"class":149},[143,5067,1116],{"class":280},[143,5069,1419],{"class":149},[143,5071,1334],{"class":280},[143,5073,1419],{"class":149},[143,5075,1360],{"class":280},[143,5077,4895],{"class":149},[143,5079,5080,5082,5085,5087,5089,5091],{"class":145,"line":332},[143,5081,5047],{"class":755},[143,5083,5084],{"class":149}," start",[143,5086,160],{"class":755},[143,5088,1234],{"class":280},[143,5090,1101],{"class":149},[143,5092,5093],{"class":266},"\u002F\u002F起始下标\n",[143,5095,5096,5098,5101,5104,5107,5110,5112,5114,5117,5119,5121,5123],{"class":145,"line":345},[143,5097,5047],{"class":755},[143,5099,5100],{"class":149}," end",[143,5102,5103],{"class":755},"=sizeof",[143,5105,5106],{"class":149},"(arr)",[143,5108,5109],{"class":755},"\u002Fsizeof",[143,5111,4751],{"class":149},[143,5113,1234],{"class":280},[143,5115,5116],{"class":149},"])",[143,5118,1573],{"class":755},[143,5120,771],{"class":280},[143,5122,1101],{"class":149},[143,5124,5125],{"class":266},"\u002F\u002F结束下标\n",[143,5127,5128,5131,5134,5136],{"class":145,"line":701},[143,5129,5130],{"class":755},"   while",[143,5132,5133],{"class":149}," (start",[143,5135,150],{"class":755},[143,5137,5138],{"class":149},"end)\n",[143,5140,5141],{"class":145,"line":707},[143,5142,5143],{"class":149},"   {\n",[143,5145,5146],{"class":145,"line":727},[143,5147,5148],{"class":266},"    \u002F\u002F实现元素互换代码\n",[143,5150,5151,5153,5156,5158],{"class":145,"line":2518},[143,5152,2885],{"class":755},[143,5154,5155],{"class":149}," temp",[143,5157,160],{"class":755},[143,5159,5160],{"class":149},"arr[start];\n",[143,5162,5163,5166,5168],{"class":145,"line":2524},[143,5164,5165],{"class":149},"    arr[start]",[143,5167,160],{"class":755},[143,5169,5170],{"class":149},"arr[end];\n",[143,5172,5173,5176,5178],{"class":145,"line":2529},[143,5174,5175],{"class":149},"    arr[end]",[143,5177,160],{"class":755},[143,5179,5180],{"class":149},"temp;\n",[143,5182,5183],{"class":145,"line":2543},[143,5184,5185],{"class":266},"    \u002F\u002F下标更新\n",[143,5187,5188,5191,5193],{"class":145,"line":2548},[143,5189,5190],{"class":149},"    start",[143,5192,3192],{"class":755},[143,5194,290],{"class":149},[143,5196,5197,5200,5203],{"class":145,"line":2554},[143,5198,5199],{"class":149},"    end",[143,5201,5202],{"class":755},"--",[143,5204,290],{"class":149},[143,5206,5207],{"class":145,"line":2575},[143,5208,5209],{"class":149},"   }\n",[143,5211,5212],{"class":145,"line":2580},[143,5213,5214],{"class":266},"   \u002F\u002F输出逆置后的数组\n",[143,5216,5217,5220,5222,5224,5226,5228,5230,5232,5234,5236,5238,5240],{"class":145,"line":2594},[143,5218,5219],{"class":755},"   for",[143,5221,2559],{"class":149},[143,5223,1052],{"class":755},[143,5225,3932],{"class":149},[143,5227,160],{"class":755},[143,5229,1234],{"class":280},[143,5231,3939],{"class":149},[143,5233,150],{"class":755},[143,5235,1360],{"class":280},[143,5237,3939],{"class":149},[143,5239,3192],{"class":755},[143,5241,1055],{"class":149},[143,5243,5244],{"class":145,"line":2599},[143,5245,5143],{"class":149},[143,5247,5248,5250,5252,5255,5257,5260],{"class":145,"line":2628},[143,5249,2454],{"class":149},[143,5251,2081],{"class":755},[143,5253,5254],{"class":149},"arr[i]",[143,5256,2081],{"class":755},[143,5258,5259],{"class":163},"\" \"",[143,5261,290],{"class":149},[143,5263,5264],{"class":145,"line":2633},[143,5265,5209],{"class":149},[143,5267,5268,5271,5273,5275],{"class":145,"line":2650},[143,5269,5270],{"class":156},"   system",[143,5272,1049],{"class":149},[143,5274,3208],{"class":163},[143,5276,3619],{"class":149},[143,5278,5279,5282,5284],{"class":145,"line":2655},[143,5280,5281],{"class":755},"   return",[143,5283,4993],{"class":280},[143,5285,290],{"class":149},[143,5287,5288],{"class":145,"line":2660},[143,5289,348],{"class":149},[232,5291,5292],{},[22,5293,5294],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[133,5296,5298],{"className":1037,"code":5297,"language":1039,"meta":138,"style":138},"\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",[140,5299,5300,5305,5311,5321,5329,5333,5385,5398,5424,5428,5442,5446,5451,5456,5486,5490,5495,5529,5533,5538,5558,5563,5575,5591,5606,5611,5615,5619,5632,5658,5662,5676,5680,5688],{"__ignoreMap":138},[143,5301,5302],{"class":145,"line":146},[143,5303,5304],{"class":266},"\u002F\u002F冒泡排序,升序\n",[143,5306,5307,5309],{"class":145,"line":35},[143,5308,2850],{"class":755},[143,5310,2853],{"class":163},[143,5312,5313,5315,5317,5319],{"class":145,"line":46},[143,5314,2858],{"class":755},[143,5316,2861],{"class":755},[143,5318,2864],{"class":156},[143,5320,290],{"class":149},[143,5322,5323,5325,5327],{"class":145,"line":293},[143,5324,1052],{"class":755},[143,5326,2873],{"class":156},[143,5328,2876],{"class":149},[143,5330,5331],{"class":145,"line":306},[143,5332,2449],{"class":149},[143,5334,5335,5337,5339,5341,5344,5346,5349,5351,5353,5355,5357,5359,5361,5363,5365,5367,5369,5371,5373,5375,5377,5379,5381,5383],{"class":145,"line":319},[143,5336,2885],{"class":755},[143,5338,4862],{"class":149},[143,5340,1461],{"class":280},[143,5342,5343],{"class":149},"] ",[143,5345,160],{"class":755},[143,5347,5348],{"class":149}," {",[143,5350,1334],{"class":280},[143,5352,1419],{"class":149},[143,5354,1122],{"class":280},[143,5356,1419],{"class":149},[143,5358,1436],{"class":280},[143,5360,1419],{"class":149},[143,5362,1234],{"class":280},[143,5364,1419],{"class":149},[143,5366,1360],{"class":280},[143,5368,1419],{"class":149},[143,5370,1410],{"class":280},[143,5372,1419],{"class":149},[143,5374,771],{"class":280},[143,5376,1419],{"class":149},[143,5378,1116],{"class":280},[143,5380,1419],{"class":149},[143,5382,1461],{"class":280},[143,5384,4895],{"class":149},[143,5386,5387,5389,5391,5394,5396],{"class":145,"line":332},[143,5388,2454],{"class":149},[143,5390,2081],{"class":755},[143,5392,5393],{"class":163},"\"排序前：\"",[143,5395,2081],{"class":755},[143,5397,2103],{"class":149},[143,5399,5400,5402,5404,5406,5408,5410,5412,5414,5416,5418,5420,5422],{"class":145,"line":345},[143,5401,4101],{"class":755},[143,5403,2559],{"class":149},[143,5405,1052],{"class":755},[143,5407,3932],{"class":149},[143,5409,160],{"class":755},[143,5411,1234],{"class":280},[143,5413,3939],{"class":149},[143,5415,150],{"class":755},[143,5417,1461],{"class":280},[143,5419,3939],{"class":149},[143,5421,3192],{"class":755},[143,5423,1055],{"class":149},[143,5425,5426],{"class":145,"line":701},[143,5427,2930],{"class":149},[143,5429,5430,5432,5434,5436,5438,5440],{"class":145,"line":707},[143,5431,4351],{"class":149},[143,5433,2081],{"class":755},[143,5435,5254],{"class":149},[143,5437,2081],{"class":755},[143,5439,5259],{"class":163},[143,5441,290],{"class":149},[143,5443,5444],{"class":145,"line":727},[143,5445,3087],{"class":149},[143,5447,5448],{"class":145,"line":2518},[143,5449,5450],{"class":266},"    \u002F\u002F开始冒泡排序\n",[143,5452,5453],{"class":145,"line":2524},[143,5454,5455],{"class":266},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[143,5457,5458,5460,5462,5464,5466,5468,5470,5472,5474,5476,5478,5480,5482,5484],{"class":145,"line":2529},[143,5459,4101],{"class":755},[143,5461,2559],{"class":149},[143,5463,1052],{"class":755},[143,5465,3932],{"class":149},[143,5467,160],{"class":755},[143,5469,1234],{"class":280},[143,5471,3939],{"class":149},[143,5473,150],{"class":755},[143,5475,1461],{"class":280},[143,5477,1573],{"class":755},[143,5479,771],{"class":280},[143,5481,3939],{"class":149},[143,5483,3192],{"class":755},[143,5485,1055],{"class":149},[143,5487,5488],{"class":145,"line":2543},[143,5489,2930],{"class":149},[143,5491,5492],{"class":145,"line":2548},[143,5493,5494],{"class":266},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[143,5496,5497,5499,5501,5503,5505,5507,5509,5511,5513,5515,5517,5519,5521,5523,5525,5527],{"class":145,"line":2554},[143,5498,4303],{"class":755},[143,5500,2559],{"class":149},[143,5502,1052],{"class":755},[143,5504,4310],{"class":149},[143,5506,160],{"class":755},[143,5508,1234],{"class":280},[143,5510,4317],{"class":149},[143,5512,150],{"class":755},[143,5514,1461],{"class":280},[143,5516,1573],{"class":755},[143,5518,1482],{"class":149},[143,5520,1573],{"class":755},[143,5522,771],{"class":280},[143,5524,4317],{"class":149},[143,5526,3192],{"class":755},[143,5528,1055],{"class":149},[143,5530,5531],{"class":145,"line":2575},[143,5532,3410],{"class":149},[143,5534,5535],{"class":145,"line":2580},[143,5536,5537],{"class":266},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[143,5539,5540,5543,5546,5548,5551,5553,5555],{"class":145,"line":2594},[143,5541,5542],{"class":755},"            if",[143,5544,5545],{"class":149},"(arr[j]",[143,5547,1998],{"class":755},[143,5549,5550],{"class":149},"arr[j",[143,5552,1522],{"class":755},[143,5554,771],{"class":280},[143,5556,5557],{"class":149},"])\n",[143,5559,5560],{"class":145,"line":2599},[143,5561,5562],{"class":149},"            {\n",[143,5564,5565,5568,5570,5572],{"class":145,"line":2628},[143,5566,5567],{"class":755},"                int",[143,5569,5155],{"class":149},[143,5571,160],{"class":755},[143,5573,5574],{"class":149},"arr[j];\n",[143,5576,5577,5580,5582,5584,5586,5588],{"class":145,"line":2633},[143,5578,5579],{"class":149},"                arr[j]",[143,5581,160],{"class":755},[143,5583,5550],{"class":149},[143,5585,1522],{"class":755},[143,5587,771],{"class":280},[143,5589,5590],{"class":149},"];\n",[143,5592,5593,5596,5598,5600,5602,5604],{"class":145,"line":2650},[143,5594,5595],{"class":149},"                arr[j",[143,5597,1522],{"class":755},[143,5599,771],{"class":280},[143,5601,1979],{"class":149},[143,5603,160],{"class":755},[143,5605,5180],{"class":149},[143,5607,5608],{"class":145,"line":2655},[143,5609,5610],{"class":149},"            }\n",[143,5612,5613],{"class":145,"line":2660},[143,5614,3429],{"class":149},[143,5616,5617],{"class":145,"line":2665},[143,5618,3087],{"class":149},[143,5620,5621,5623,5625,5628,5630],{"class":145,"line":2679},[143,5622,2454],{"class":149},[143,5624,2081],{"class":755},[143,5626,5627],{"class":163},"\"排序后：\"",[143,5629,2081],{"class":755},[143,5631,2103],{"class":149},[143,5633,5634,5636,5638,5640,5642,5644,5646,5648,5650,5652,5654,5656],{"class":145,"line":2684},[143,5635,4101],{"class":755},[143,5637,2559],{"class":149},[143,5639,1052],{"class":755},[143,5641,3932],{"class":149},[143,5643,160],{"class":755},[143,5645,1234],{"class":280},[143,5647,3939],{"class":149},[143,5649,150],{"class":755},[143,5651,1461],{"class":280},[143,5653,3939],{"class":149},[143,5655,3192],{"class":755},[143,5657,1055],{"class":149},[143,5659,5660],{"class":145,"line":3477},[143,5661,2930],{"class":149},[143,5663,5664,5666,5668,5670,5672,5674],{"class":145,"line":3491},[143,5665,4351],{"class":149},[143,5667,2081],{"class":755},[143,5669,5254],{"class":149},[143,5671,2081],{"class":755},[143,5673,5259],{"class":163},[143,5675,290],{"class":149},[143,5677,5678],{"class":145,"line":3499},[143,5679,3087],{"class":149},[143,5681,5682,5684,5686],{"class":145,"line":3504},[143,5683,4990],{"class":755},[143,5685,4993],{"class":280},[143,5687,290],{"class":149},[143,5689,5690],{"class":145,"line":3510},[143,5691,348],{"class":149},[58,5693,5695],{"id":5694},"_172二维数组","1.7.2二维数组",[19,5697,5698],{},[22,5699,5700],{},"二维数组的四种定义方式",[1181,5702,5703,5712],{},[1184,5704,5705],{},[1187,5706,5707,5710],{},[1190,5708,5709],{},"序号",[1190,5711,4681],{},[1227,5713,5714,5724,5733,5742,5751],{},[1187,5715,5716,5718],{},[1232,5717,771],{},[1232,5719,5720,5721,1101],{},"数据类型 数组名[行数]",[143,5722,5723],{},"列数",[1187,5725,5726,5728],{},[1232,5727,1122],{},[1232,5729,5720,5730,5732],{},[143,5731,5723],{},"={ {数据1,数据2}，{数据3，数据4}... }",[1187,5734,5735,5737],{},[1232,5736,1116],{},[1232,5738,5720,5739,5741],{},[143,5740,5723],{},"={数据1,数据2,数据3...}",[1187,5743,5744,5746],{},[1232,5745,1334],{},[1232,5747,5748,5749,5741],{},"数据类型 数组名[]",[143,5750,5723],{},[1187,5752,5753,5756],{},[1232,5754,5755],{},"注意：不能只省略列数",[1232,5757],{},[19,5759,5760],{"start":35},[22,5761,5762],{},"二维数组数组名",[232,5764,5765,5768],{},[22,5766,5767],{},"1.查看二维数组所占内存空间",[22,5769,5770],{},"2.获取二维数组首地址",[63,5772,5773],{},"已知二维数组，求二维数组的行数与列数",[133,5775,5777],{"className":1037,"code":5776,"language":1039,"meta":138,"style":138},"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",[140,5778,5779,5787,5791,5809,5813,5831,5847,5852,5877,5910],{"__ignoreMap":138},[143,5780,5781,5783,5785],{"class":145,"line":146},[143,5782,1052],{"class":755},[143,5784,2873],{"class":156},[143,5786,2876],{"class":149},[143,5788,5789],{"class":145,"line":35},[143,5790,2449],{"class":149},[143,5792,5793,5795,5797,5799,5802,5804,5806],{"class":145,"line":46},[143,5794,2885],{"class":755},[143,5796,4862],{"class":149},[143,5798,1122],{"class":280},[143,5800,5801],{"class":149},"][",[143,5803,1116],{"class":280},[143,5805,1979],{"class":149},[143,5807,5808],{"class":755},"=\n",[143,5810,5811],{"class":145,"line":293},[143,5812,2930],{"class":149},[143,5814,5815,5818,5820,5822,5824,5826,5828],{"class":145,"line":306},[143,5816,5817],{"class":149},"        {",[143,5819,771],{"class":280},[143,5821,1419],{"class":149},[143,5823,1122],{"class":280},[143,5825,1419],{"class":149},[143,5827,1116],{"class":280},[143,5829,5830],{"class":149},"},\n",[143,5832,5833,5835,5837,5839,5841,5843,5845],{"class":145,"line":319},[143,5834,5817],{"class":149},[143,5836,1334],{"class":280},[143,5838,1419],{"class":149},[143,5840,1360],{"class":280},[143,5842,1419],{"class":149},[143,5844,1385],{"class":280},[143,5846,348],{"class":149},[143,5848,5849],{"class":145,"line":332},[143,5850,5851],{"class":149},"    };\n",[143,5853,5854,5856,5858,5861,5863,5865,5867,5869,5871,5873,5875],{"class":145,"line":345},[143,5855,2454],{"class":149},[143,5857,2081],{"class":755},[143,5859,5860],{"class":163},"\"二维数组的行数\"",[143,5862,2276],{"class":755},[143,5864,5106],{"class":149},[143,5866,5109],{"class":755},[143,5868,4751],{"class":149},[143,5870,1234],{"class":280},[143,5872,5116],{"class":149},[143,5874,2081],{"class":755},[143,5876,2103],{"class":149},[143,5878,5879,5881,5883,5886,5888,5890,5892,5894,5896,5898,5900,5902,5904,5906,5908],{"class":145,"line":701},[143,5880,2454],{"class":149},[143,5882,2081],{"class":755},[143,5884,5885],{"class":163},"\"二维数组的列数\"",[143,5887,2276],{"class":755},[143,5889,4751],{"class":149},[143,5891,1234],{"class":280},[143,5893,5116],{"class":149},[143,5895,5109],{"class":755},[143,5897,4751],{"class":149},[143,5899,1234],{"class":280},[143,5901,5801],{"class":149},[143,5903,1234],{"class":280},[143,5905,5116],{"class":149},[143,5907,2081],{"class":755},[143,5909,2103],{"class":149},[143,5911,5912],{"class":145,"line":707},[143,5913,348],{"class":149},[63,5915,5916],{},"查看二维数组首地址",[133,5918,5920],{"className":1037,"code":5919,"language":1039,"meta":138,"style":138},"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",[140,5921,5922,5939,5965,5990],{"__ignoreMap":138},[143,5923,5924,5926,5928,5931,5933,5935,5937],{"class":145,"line":146},[143,5925,2273],{"class":149},[143,5927,2081],{"class":755},[143,5929,5930],{"class":163},"\"二维数组首地址：\"",[143,5932,2081],{"class":755},[143,5934,4780],{"class":149},[143,5936,2081],{"class":755},[143,5938,2103],{"class":149},[143,5940,5941,5943,5945,5948,5950,5952,5954,5957,5959,5961,5963],{"class":145,"line":35},[143,5942,2273],{"class":149},[143,5944,2081],{"class":755},[143,5946,5947],{"class":163},"\"二维数组第一行的首地址：\"",[143,5949,2081],{"class":755},[143,5951,1049],{"class":149},[143,5953,1052],{"class":755},[143,5955,5956],{"class":149},")arr[",[143,5958,1234],{"class":280},[143,5960,1979],{"class":149},[143,5962,2081],{"class":755},[143,5964,2103],{"class":149},[143,5966,5967,5969,5971,5974,5976,5978,5980,5982,5984,5986,5988],{"class":145,"line":46},[143,5968,2273],{"class":149},[143,5970,2081],{"class":755},[143,5972,5973],{"class":163},"\"二维数组第二行的首地址：\"",[143,5975,2081],{"class":755},[143,5977,1049],{"class":149},[143,5979,1052],{"class":755},[143,5981,5956],{"class":149},[143,5983,771],{"class":280},[143,5985,1979],{"class":149},[143,5987,2081],{"class":755},[143,5989,2103],{"class":149},[143,5991,5992,5994,5996,5999,6001,6003,6005,6007,6009,6011,6013,6015,6017,6019,6021,6023],{"class":145,"line":293},[143,5993,2273],{"class":149},[143,5995,2081],{"class":755},[143,5997,5998],{"class":163},"\"二维数组第一个元素的首地址:\"",[143,6000,2081],{"class":755},[143,6002,1049],{"class":149},[143,6004,1052],{"class":755},[143,6006,1470],{"class":149},[143,6008,1394],{"class":755},[143,6010,4806],{"class":149},[143,6012,1234],{"class":280},[143,6014,5801],{"class":149},[143,6016,1234],{"class":280},[143,6018,1979],{"class":149},[143,6020,2081],{"class":755},[143,6022,2146],{"class":149},[143,6024,6025],{"class":266},"\u002F\u002F对于数，要加取址符\n",[954,6027,6028],{},"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":138,"searchDepth":35,"depth":35,"links":6030},[6031,6032,6033,6041,6042,6048,6053],{"id":992,"depth":35,"text":993},{"id":999,"depth":35,"text":1000},{"id":1014,"depth":35,"text":1015,"children":6034},[6035,6036,6037,6038,6039,6040],{"id":1018,"depth":46,"text":1019},{"id":1065,"depth":46,"text":1066},{"id":1130,"depth":46,"text":1131},{"id":2062,"depth":46,"text":2063},{"id":2152,"depth":46,"text":2153},{"id":2247,"depth":46,"text":2248},{"id":2289,"depth":35,"text":2290},{"id":2357,"depth":35,"text":2358,"children":6043},[6044,6045,6046,6047],{"id":2361,"depth":46,"text":2362},{"id":2382,"depth":46,"text":2383},{"id":2391,"depth":46,"text":2392},{"id":2400,"depth":46,"text":2401},{"id":2409,"depth":35,"text":2410,"children":6049},[6050,6051,6052],{"id":2413,"depth":46,"text":2414},{"id":3105,"depth":46,"text":3106},{"id":4521,"depth":46,"text":4522},{"id":4662,"depth":35,"text":4663,"children":6054},[6055,6056],{"id":4666,"depth":46,"text":4667},{"id":5694,"depth":46,"text":5695},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":984,"description":138},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6063,"title":6064,"body":6065,"description":138,"extension":974,"meta":7165,"navigation":976,"path":7166,"seo":7167,"stem":7168,"__hash__":7169},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6066,"toc":7157},[6067,6070,6074,6082,6090,6093,6159,6163,6166,6242,6246,6249,6252,6255,6468,6472,6477,6541,6546,6613,6618,6709,6712,6817,6821,6824,6830,6974,6978,6981,6995,6998,7043,7046,7154],[10,6068,6064],{"id":6069},"_2函数",[14,6071,6073],{"id":6072},"_21函数概述","2.1函数概述",[19,6075,6076,6079],{},[22,6077,6078],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[22,6080,6081],{},"语法：",[133,6083,6088],{"className":6084,"code":6086,"language":6087,"meta":138},[6085],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[140,6089,6086],{"__ignoreMap":138},[63,6091,6092],{},"小案例",[133,6094,6096],{"className":1037,"code":6095,"language":1039,"meta":138,"style":138},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[140,6097,6098,6103,6127,6131,6148,6155],{"__ignoreMap":138},[143,6099,6100],{"class":145,"line":146},[143,6101,6102],{"class":266},"\u002F\u002Fnum1,num2形参\n",[143,6104,6105,6107,6110,6112,6114,6118,6120,6122,6125],{"class":145,"line":35},[143,6106,1052],{"class":755},[143,6108,6109],{"class":156}," add",[143,6111,1049],{"class":149},[143,6113,1052],{"class":755},[143,6115,6117],{"class":6116},"s4XuR"," num1",[143,6119,1419],{"class":149},[143,6121,1052],{"class":755},[143,6123,6124],{"class":6116}," num2",[143,6126,1055],{"class":149},[143,6128,6129],{"class":145,"line":46},[143,6130,2449],{"class":149},[143,6132,6133,6135,6138,6140,6143,6145],{"class":145,"line":293},[143,6134,2885],{"class":755},[143,6136,6137],{"class":149}," sum",[143,6139,160],{"class":755},[143,6141,6142],{"class":149},"num1",[143,6144,1522],{"class":755},[143,6146,6147],{"class":149},"num2;\n",[143,6149,6150,6152],{"class":145,"line":306},[143,6151,4990],{"class":755},[143,6153,6154],{"class":149}," sum;\n",[143,6156,6157],{"class":145,"line":319},[143,6158,348],{"class":149},[14,6160,6162],{"id":6161},"_22函数调用","2.2函数调用",[63,6164,6165],{},"调用刚刚写的求和函数",[133,6167,6169],{"className":1037,"code":6168,"language":1039,"meta":138,"style":138},"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",[140,6170,6171,6179,6183,6188,6200,6212,6221,6226,6238],{"__ignoreMap":138},[143,6172,6173,6175,6177],{"class":145,"line":146},[143,6174,1052],{"class":755},[143,6176,2873],{"class":156},[143,6178,2876],{"class":149},[143,6180,6181],{"class":145,"line":35},[143,6182,2449],{"class":149},[143,6184,6185],{"class":145,"line":46},[143,6186,6187],{"class":266},"    \u002F\u002Fa,b实参\n",[143,6189,6190,6192,6194,6196,6198],{"class":145,"line":293},[143,6191,2885],{"class":755},[143,6193,2302],{"class":149},[143,6195,160],{"class":755},[143,6197,1234],{"class":280},[143,6199,290],{"class":149},[143,6201,6202,6204,6206,6208,6210],{"class":145,"line":306},[143,6203,2885],{"class":755},[143,6205,3733],{"class":149},[143,6207,160],{"class":755},[143,6209,1234],{"class":280},[143,6211,290],{"class":149},[143,6213,6214,6216,6218],{"class":145,"line":319},[143,6215,2912],{"class":149},[143,6217,2333],{"class":755},[143,6219,6220],{"class":149},"a,b;\n",[143,6222,6223],{"class":145,"line":332},[143,6224,6225],{"class":266},"    \u002F\u002F调用函数时，实参值传给了形参\n",[143,6227,6228,6230,6232,6235],{"class":145,"line":345},[143,6229,2454],{"class":149},[143,6231,2081],{"class":755},[143,6233,6234],{"class":156},"add",[143,6236,6237],{"class":149},"(a,b);\n",[143,6239,6240],{"class":145,"line":701},[143,6241,348],{"class":149},[14,6243,6245],{"id":6244},"_23值传递","2.3值传递",[63,6247,6248],{},"值传递就是函数调用时实参将数值传给形参",[63,6250,6251],{},"值传递时，如果形参发生任何改变，不会影响实参",[63,6253,6254],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[133,6256,6258],{"className":1037,"code":6257,"language":1039,"meta":138,"style":138},"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",[140,6259,6260,6282,6286,6299,6316,6334,6345,6354,6363,6376,6392,6408,6417,6421,6429,6433,6445,6457,6464],{"__ignoreMap":138},[143,6261,6262,6265,6268,6270,6272,6274,6276,6278,6280],{"class":145,"line":146},[143,6263,6264],{"class":755},"void",[143,6266,6267],{"class":156}," swap",[143,6269,1049],{"class":149},[143,6271,1052],{"class":755},[143,6273,6117],{"class":6116},[143,6275,1419],{"class":149},[143,6277,1052],{"class":755},[143,6279,6124],{"class":6116},[143,6281,1055],{"class":149},[143,6283,6284],{"class":145,"line":35},[143,6285,2449],{"class":149},[143,6287,6288,6290,6292,6295,6297],{"class":145,"line":46},[143,6289,2454],{"class":149},[143,6291,2081],{"class":755},[143,6293,6294],{"class":163},"\"交换前：\"",[143,6296,2081],{"class":755},[143,6298,2103],{"class":149},[143,6300,6301,6303,6305,6308,6310,6312,6314],{"class":145,"line":293},[143,6302,2454],{"class":149},[143,6304,2081],{"class":755},[143,6306,6307],{"class":163},"\"num1=\"",[143,6309,2081],{"class":755},[143,6311,6142],{"class":149},[143,6313,2081],{"class":755},[143,6315,2103],{"class":149},[143,6317,6318,6320,6322,6325,6327,6330,6332],{"class":145,"line":306},[143,6319,2454],{"class":149},[143,6321,2081],{"class":755},[143,6323,6324],{"class":163},"\"num2=\"",[143,6326,2081],{"class":755},[143,6328,6329],{"class":149},"num2",[143,6331,2081],{"class":755},[143,6333,2103],{"class":149},[143,6335,6336,6338,6340,6342],{"class":145,"line":319},[143,6337,2885],{"class":755},[143,6339,5155],{"class":149},[143,6341,160],{"class":755},[143,6343,6344],{"class":149},"num1;\n",[143,6346,6347,6350,6352],{"class":145,"line":332},[143,6348,6349],{"class":149},"    num1",[143,6351,160],{"class":755},[143,6353,6147],{"class":149},[143,6355,6356,6359,6361],{"class":145,"line":345},[143,6357,6358],{"class":149},"    num2",[143,6360,160],{"class":755},[143,6362,5180],{"class":149},[143,6364,6365,6367,6369,6372,6374],{"class":145,"line":701},[143,6366,2454],{"class":149},[143,6368,2081],{"class":755},[143,6370,6371],{"class":163},"\"交换后：\"",[143,6373,2081],{"class":755},[143,6375,2103],{"class":149},[143,6377,6378,6380,6382,6384,6386,6388,6390],{"class":145,"line":707},[143,6379,2454],{"class":149},[143,6381,2081],{"class":755},[143,6383,6307],{"class":163},[143,6385,2081],{"class":755},[143,6387,6142],{"class":149},[143,6389,2081],{"class":755},[143,6391,2103],{"class":149},[143,6393,6394,6396,6398,6400,6402,6404,6406],{"class":145,"line":727},[143,6395,2454],{"class":149},[143,6397,2081],{"class":755},[143,6399,6324],{"class":163},[143,6401,2081],{"class":755},[143,6403,6329],{"class":149},[143,6405,2081],{"class":755},[143,6407,2103],{"class":149},[143,6409,6410,6412,6414],{"class":145,"line":2518},[143,6411,4990],{"class":755},[143,6413,1101],{"class":149},[143,6415,6416],{"class":266},"\u002F\u002F或者不写\n",[143,6418,6419],{"class":145,"line":2524},[143,6420,348],{"class":149},[143,6422,6423,6425,6427],{"class":145,"line":2529},[143,6424,1052],{"class":755},[143,6426,2873],{"class":156},[143,6428,2876],{"class":149},[143,6430,6431],{"class":145,"line":2543},[143,6432,2449],{"class":149},[143,6434,6435,6437,6439,6441,6443],{"class":145,"line":2548},[143,6436,2885],{"class":755},[143,6438,2302],{"class":149},[143,6440,160],{"class":755},[143,6442,1487],{"class":280},[143,6444,290],{"class":149},[143,6446,6447,6449,6451,6453,6455],{"class":145,"line":2554},[143,6448,2885],{"class":755},[143,6450,3733],{"class":149},[143,6452,160],{"class":755},[143,6454,1741],{"class":280},[143,6456,290],{"class":149},[143,6458,6459,6462],{"class":145,"line":2575},[143,6460,6461],{"class":156},"    swap",[143,6463,6237],{"class":149},[143,6465,6466],{"class":145,"line":2580},[143,6467,348],{"class":149},[14,6469,6471],{"id":6470},"_24函数的常见形式","2.4函数的常见形式",[19,6473,6474],{},[22,6475,6476],{},"无参无返",[133,6478,6480],{"className":1037,"code":6479,"language":1039,"meta":138,"style":138},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[140,6481,6482,6491,6495,6508,6512,6520,6524,6529,6537],{"__ignoreMap":138},[143,6483,6484,6486,6489],{"class":145,"line":146},[143,6485,6264],{"class":755},[143,6487,6488],{"class":156}," test01",[143,6490,2876],{"class":149},[143,6492,6493],{"class":145,"line":35},[143,6494,2449],{"class":149},[143,6496,6497,6499,6501,6504,6506],{"class":145,"line":46},[143,6498,2454],{"class":149},[143,6500,2081],{"class":755},[143,6502,6503],{"class":163},"\"你好\"",[143,6505,2081],{"class":755},[143,6507,2103],{"class":149},[143,6509,6510],{"class":145,"line":293},[143,6511,348],{"class":149},[143,6513,6514,6516,6518],{"class":145,"line":306},[143,6515,1052],{"class":755},[143,6517,2873],{"class":156},[143,6519,2876],{"class":149},[143,6521,6522],{"class":145,"line":319},[143,6523,2449],{"class":149},[143,6525,6526],{"class":145,"line":332},[143,6527,6528],{"class":266},"    \u002F\u002F函数调用\n",[143,6530,6531,6534],{"class":145,"line":345},[143,6532,6533],{"class":156},"    test01",[143,6535,6536],{"class":149},"();\n",[143,6538,6539],{"class":145,"line":701},[143,6540,348],{"class":149},[19,6542,6543],{"start":35},[22,6544,6545],{},"有参无返",[133,6547,6549],{"className":1037,"code":6548,"language":1039,"meta":138,"style":138},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[140,6550,6551,6566,6570,6582,6586,6594,6598,6609],{"__ignoreMap":138},[143,6552,6553,6555,6558,6560,6562,6564],{"class":145,"line":146},[143,6554,6264],{"class":755},[143,6556,6557],{"class":156}," test02",[143,6559,1049],{"class":149},[143,6561,1052],{"class":755},[143,6563,2302],{"class":6116},[143,6565,1055],{"class":149},[143,6567,6568],{"class":145,"line":35},[143,6569,2449],{"class":149},[143,6571,6572,6574,6576,6578,6580],{"class":145,"line":46},[143,6573,2454],{"class":149},[143,6575,2081],{"class":755},[143,6577,6503],{"class":163},[143,6579,2081],{"class":755},[143,6581,2103],{"class":149},[143,6583,6584],{"class":145,"line":293},[143,6585,348],{"class":149},[143,6587,6588,6590,6592],{"class":145,"line":306},[143,6589,1052],{"class":755},[143,6591,2873],{"class":156},[143,6593,2876],{"class":149},[143,6595,6596],{"class":145,"line":319},[143,6597,2449],{"class":149},[143,6599,6600,6603,6605,6607],{"class":145,"line":332},[143,6601,6602],{"class":156},"    test02",[143,6604,1049],{"class":149},[143,6606,1352],{"class":280},[143,6608,3619],{"class":149},[143,6610,6611],{"class":145,"line":345},[143,6612,348],{"class":149},[19,6614,6615],{"start":46},[22,6616,6617],{},"无参有返",[133,6619,6621],{"className":1037,"code":6620,"language":1039,"meta":138,"style":138},"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",[140,6622,6623,6632,6636,6648,6657,6661,6669,6673,6686,6705],{"__ignoreMap":138},[143,6624,6625,6627,6630],{"class":145,"line":146},[143,6626,1052],{"class":755},[143,6628,6629],{"class":156}," test03",[143,6631,2876],{"class":149},[143,6633,6634],{"class":145,"line":35},[143,6635,2449],{"class":149},[143,6637,6638,6640,6642,6644,6646],{"class":145,"line":46},[143,6639,2454],{"class":149},[143,6641,2081],{"class":755},[143,6643,6503],{"class":163},[143,6645,2081],{"class":755},[143,6647,2103],{"class":149},[143,6649,6650,6652,6655],{"class":145,"line":293},[143,6651,4990],{"class":755},[143,6653,6654],{"class":280}," 100",[143,6656,290],{"class":149},[143,6658,6659],{"class":145,"line":306},[143,6660,348],{"class":149},[143,6662,6663,6665,6667],{"class":145,"line":319},[143,6664,1052],{"class":755},[143,6666,2873],{"class":156},[143,6668,2876],{"class":149},[143,6670,6671],{"class":145,"line":332},[143,6672,2449],{"class":149},[143,6674,6675,6677,6679,6681,6684],{"class":145,"line":345},[143,6676,2885],{"class":755},[143,6678,6117],{"class":149},[143,6680,160],{"class":755},[143,6682,6683],{"class":156},"test03",[143,6685,6536],{"class":149},[143,6687,6688,6690,6692,6694,6696,6698,6700,6702],{"class":145,"line":701},[143,6689,2454],{"class":149},[143,6691,2081],{"class":755},[143,6693,6307],{"class":163},[143,6695,2081],{"class":755},[143,6697,6142],{"class":149},[143,6699,2081],{"class":755},[143,6701,2146],{"class":149},[143,6703,6704],{"class":266}," \u002F\u002F100\n",[143,6706,6707],{"class":145,"line":707},[143,6708,348],{"class":149},[63,6710,6711],{},"4.有参有返",[133,6713,6715],{"className":1037,"code":6714,"language":1039,"meta":138,"style":138},"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",[140,6716,6717,6732,6736,6749,6755,6759,6768,6772,6784,6798,6813],{"__ignoreMap":138},[143,6718,6719,6721,6724,6726,6728,6730],{"class":145,"line":146},[143,6720,1052],{"class":755},[143,6722,6723],{"class":156}," test04",[143,6725,1049],{"class":149},[143,6727,1052],{"class":755},[143,6729,2302],{"class":6116},[143,6731,1055],{"class":149},[143,6733,6734],{"class":145,"line":35},[143,6735,2449],{"class":149},[143,6737,6738,6740,6742,6745,6747],{"class":145,"line":46},[143,6739,2454],{"class":149},[143,6741,2081],{"class":755},[143,6743,6744],{"class":163},"\"hello\"",[143,6746,2081],{"class":755},[143,6748,2103],{"class":149},[143,6750,6751,6753],{"class":145,"line":293},[143,6752,4990],{"class":755},[143,6754,2336],{"class":149},[143,6756,6757],{"class":145,"line":306},[143,6758,348],{"class":149},[143,6760,6761,6763,6766],{"class":145,"line":319},[143,6762,1052],{"class":755},[143,6764,6765],{"class":156}," mian",[143,6767,2876],{"class":149},[143,6769,6770],{"class":145,"line":332},[143,6771,2449],{"class":149},[143,6773,6774,6776,6778,6780,6782],{"class":145,"line":345},[143,6775,2885],{"class":755},[143,6777,3733],{"class":149},[143,6779,160],{"class":755},[143,6781,771],{"class":280},[143,6783,290],{"class":149},[143,6785,6786,6788,6790,6792,6795],{"class":145,"line":701},[143,6787,2885],{"class":755},[143,6789,3749],{"class":149},[143,6791,160],{"class":755},[143,6793,6794],{"class":156},"test04",[143,6796,6797],{"class":149},"(b);\n",[143,6799,6800,6802,6804,6806,6808,6810],{"class":145,"line":707},[143,6801,2454],{"class":149},[143,6803,2081],{"class":755},[143,6805,1329],{"class":149},[143,6807,2081],{"class":755},[143,6809,2146],{"class":149},[143,6811,6812],{"class":266}," \u002F\u002F1\n",[143,6814,6815],{"class":145,"line":727},[143,6816,348],{"class":149},[14,6818,6820],{"id":6819},"_25函数的声明","2.5函数的声明",[63,6822,6823],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[63,6825,6826,6827],{},"函数的",[25,6828,6829],{},"声明可以多次，但是函数的定义只能有一次",[133,6831,6833],{"className":1037,"code":6832,"language":1039,"meta":138,"style":138},"\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",[140,6834,6835,6840,6845,6870,6879,6883,6895,6907,6923,6927,6947,6951,6970],{"__ignoreMap":138},[143,6836,6837],{"class":145,"line":146},[143,6838,6839],{"class":266},"\u002F\u002F函数声明\n",[143,6841,6842],{"class":145,"line":35},[143,6843,6844],{"class":266},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[143,6846,6847,6849,6852,6854,6856,6858,6860,6862,6864,6867],{"class":145,"line":46},[143,6848,1052],{"class":755},[143,6850,6851],{"class":156}," max",[143,6853,1049],{"class":149},[143,6855,1052],{"class":755},[143,6857,2302],{"class":6116},[143,6859,1419],{"class":149},[143,6861,1052],{"class":755},[143,6863,3733],{"class":6116},[143,6865,6866],{"class":149},");",[143,6868,6869],{"class":266},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[143,6871,6872,6874,6876],{"class":145,"line":293},[143,6873,1052],{"class":755},[143,6875,2873],{"class":156},[143,6877,6878],{"class":149},"() \n",[143,6880,6881],{"class":145,"line":306},[143,6882,2449],{"class":149},[143,6884,6885,6887,6889,6891,6893],{"class":145,"line":319},[143,6886,2885],{"class":755},[143,6888,2302],{"class":149},[143,6890,160],{"class":755},[143,6892,1487],{"class":280},[143,6894,290],{"class":149},[143,6896,6897,6899,6901,6903,6905],{"class":145,"line":332},[143,6898,2885],{"class":755},[143,6900,3733],{"class":149},[143,6902,160],{"class":755},[143,6904,1741],{"class":280},[143,6906,290],{"class":149},[143,6908,6909,6911,6913,6916,6919,6921],{"class":145,"line":345},[143,6910,2454],{"class":149},[143,6912,2081],{"class":755},[143,6914,6915],{"class":156},"max",[143,6917,6918],{"class":149},"(a,b)",[143,6920,2081],{"class":755},[143,6922,2103],{"class":149},[143,6924,6925],{"class":145,"line":701},[143,6926,348],{"class":149},[143,6928,6929,6931,6933,6935,6937,6939,6941,6943,6945],{"class":145,"line":707},[143,6930,1052],{"class":755},[143,6932,6851],{"class":156},[143,6934,1049],{"class":149},[143,6936,1052],{"class":755},[143,6938,2302],{"class":6116},[143,6940,1419],{"class":149},[143,6942,1052],{"class":755},[143,6944,3733],{"class":6116},[143,6946,1055],{"class":149},[143,6948,6949],{"class":145,"line":727},[143,6950,2449],{"class":149},[143,6952,6953,6955,6957,6959,6961,6963,6965,6967],{"class":145,"line":2518},[143,6954,4990],{"class":755},[143,6956,2302],{"class":149},[143,6958,1998],{"class":755},[143,6960,1304],{"class":149},[143,6962,2024],{"class":755},[143,6964,67],{"class":149},[143,6966,1900],{"class":755},[143,6968,6969],{"class":149},"b;\n",[143,6971,6972],{"class":145,"line":2524},[143,6973,348],{"class":149},[14,6975,6977],{"id":6976},"_26函数的分文件编写","2.6函数的分文件编写",[63,6979,6980],{},"4个步骤：",[232,6982,6983,6986,6989,6992],{},[22,6984,6985],{},"1.创建后缀名为.h的头文件",[22,6987,6988],{},"2.创建后缀名为.cpp的源文件",[22,6990,6991],{},"3.在头文件中写函数的定义",[22,6993,6994],{},"4.在源文件中写函数的定义\n示例：",[63,6996,6997],{},"头文件：swap.h",[133,6999,7001],{"className":1037,"code":7000,"language":1039,"meta":138,"style":138},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[140,7002,7003,7009,7019,7023],{"__ignoreMap":138},[143,7004,7005,7007],{"class":145,"line":146},[143,7006,2850],{"class":755},[143,7008,2853],{"class":163},[143,7010,7011,7013,7015,7017],{"class":145,"line":35},[143,7012,2858],{"class":755},[143,7014,2861],{"class":755},[143,7016,2864],{"class":156},[143,7018,290],{"class":149},[143,7020,7021],{"class":145,"line":46},[143,7022,6839],{"class":266},[143,7024,7025,7027,7029,7031,7033,7035,7037,7039,7041],{"class":145,"line":293},[143,7026,6264],{"class":755},[143,7028,6267],{"class":156},[143,7030,1049],{"class":149},[143,7032,1052],{"class":755},[143,7034,2302],{"class":6116},[143,7036,1419],{"class":149},[143,7038,1052],{"class":755},[143,7040,3733],{"class":6116},[143,7042,3619],{"class":149},[63,7044,7045],{},"源文件：swap.cpp",[133,7047,7049],{"className":1037,"code":7048,"language":1039,"meta":138,"style":138},"#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",[140,7050,7051,7058,7063,7083,7087,7098,7107,7116,7133,7150],{"__ignoreMap":138},[143,7052,7053,7055],{"class":145,"line":146},[143,7054,2850],{"class":755},[143,7056,7057],{"class":163}," \"swap.h\"\n",[143,7059,7060],{"class":145,"line":35},[143,7061,7062],{"class":266},"\u002F\u002F函数的定义\n",[143,7064,7065,7067,7069,7071,7073,7075,7077,7079,7081],{"class":145,"line":46},[143,7066,6264],{"class":755},[143,7068,6267],{"class":156},[143,7070,1049],{"class":149},[143,7072,1052],{"class":755},[143,7074,2302],{"class":6116},[143,7076,1419],{"class":149},[143,7078,1052],{"class":755},[143,7080,3733],{"class":6116},[143,7082,1055],{"class":149},[143,7084,7085],{"class":145,"line":293},[143,7086,2449],{"class":149},[143,7088,7089,7091,7093,7095],{"class":145,"line":306},[143,7090,2885],{"class":755},[143,7092,5155],{"class":149},[143,7094,160],{"class":755},[143,7096,7097],{"class":149},"a;\n",[143,7099,7100,7103,7105],{"class":145,"line":319},[143,7101,7102],{"class":149},"    a",[143,7104,160],{"class":755},[143,7106,6969],{"class":149},[143,7108,7109,7112,7114],{"class":145,"line":332},[143,7110,7111],{"class":149},"    b",[143,7113,160],{"class":755},[143,7115,5180],{"class":149},[143,7117,7118,7120,7122,7125,7127,7129,7131],{"class":145,"line":345},[143,7119,2454],{"class":149},[143,7121,2081],{"class":755},[143,7123,7124],{"class":163},"\"a=\"",[143,7126,2081],{"class":755},[143,7128,67],{"class":149},[143,7130,2081],{"class":755},[143,7132,2103],{"class":149},[143,7134,7135,7137,7139,7142,7144,7146,7148],{"class":145,"line":701},[143,7136,2454],{"class":149},[143,7138,2081],{"class":755},[143,7140,7141],{"class":163},"\"b=\"",[143,7143,2081],{"class":755},[143,7145,1304],{"class":149},[143,7147,2081],{"class":755},[143,7149,2103],{"class":149},[143,7151,7152],{"class":145,"line":707},[143,7153,348],{"class":149},[954,7155,7156],{},"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":138,"searchDepth":35,"depth":35,"links":7158},[7159,7160,7161,7162,7163,7164],{"id":6072,"depth":35,"text":6073},{"id":6161,"depth":35,"text":6162},{"id":6244,"depth":35,"text":6245},{"id":6470,"depth":35,"text":6471},{"id":6819,"depth":35,"text":6820},{"id":6976,"depth":35,"text":6977},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6064,"description":138},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7171,"title":7172,"body":7173,"description":7180,"extension":974,"meta":8585,"navigation":976,"path":8586,"seo":8587,"stem":8588,"__hash__":8589},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7174,"toc":8575},[7175,7178,7181,7185,7347,7351,7354,7357,7360,7363,7503,7507,7510,7513,7516,7581,7585,7590,7657,7660,7664,7667,7678,7683,7703,7706,7711,7730,7733,7737,7756,7759,7763,7998,8002,8005,8008,8011,8173,8176,8180,8183,8189,8572],[10,7176,7172],{"id":7177},"_3指针",[63,7179,7180],{},"通过指针保存一个地址，指针就是个地址",[14,7182,7184],{"id":7183},"_31定义指针","3.1定义指针",[133,7186,7188],{"className":1037,"code":7187,"language":1039,"meta":138,"style":138},"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",[140,7189,7190,7198,7202,7207,7219,7224,7232,7242,7260,7280,7284,7289,7294,7299,7313,7329,7343],{"__ignoreMap":138},[143,7191,7192,7194,7196],{"class":145,"line":146},[143,7193,1052],{"class":755},[143,7195,2873],{"class":156},[143,7197,2876],{"class":149},[143,7199,7200],{"class":145,"line":35},[143,7201,2449],{"class":149},[143,7203,7204],{"class":145,"line":46},[143,7205,7206],{"class":266},"    \u002F\u002F1.定义指针\n",[143,7208,7209,7211,7213,7215,7217],{"class":145,"line":293},[143,7210,2885],{"class":755},[143,7212,2302],{"class":149},[143,7214,160],{"class":755},[143,7216,1487],{"class":280},[143,7218,290],{"class":149},[143,7220,7221],{"class":145,"line":306},[143,7222,7223],{"class":266},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[143,7225,7226,7229],{"class":145,"line":319},[143,7227,7228],{"class":755},"    int*",[143,7230,7231],{"class":149},"p;\n",[143,7233,7234,7237,7240],{"class":145,"line":332},[143,7235,7236],{"class":149},"    p",[143,7238,7239],{"class":755},"=&",[143,7241,7097],{"class":149},[143,7243,7244,7246,7248,7251,7254,7256,7258],{"class":145,"line":345},[143,7245,2454],{"class":149},[143,7247,2081],{"class":755},[143,7249,7250],{"class":163},"\"a的地址为：\"",[143,7252,7253],{"class":755},"\u003C\u003C&",[143,7255,67],{"class":149},[143,7257,2081],{"class":755},[143,7259,2103],{"class":149},[143,7261,7262,7264,7266,7269,7271,7273,7275,7277],{"class":145,"line":701},[143,7263,2454],{"class":149},[143,7265,2081],{"class":755},[143,7267,7268],{"class":163},"\"指针p为：\"",[143,7270,2081],{"class":755},[143,7272,63],{"class":149},[143,7274,2081],{"class":755},[143,7276,2146],{"class":149},[143,7278,7279],{"class":266},"\u002F\u002F指针p表示的就是a的地址\n",[143,7281,7282],{"class":145,"line":707},[143,7283,3300],{"emptyLinePlaceholder":976},[143,7285,7286],{"class":145,"line":727},[143,7287,7288],{"class":266},"    \u002F\u002F2.使用指针\n",[143,7290,7291],{"class":145,"line":2518},[143,7292,7293],{"class":266},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[143,7295,7296],{"class":145,"line":2524},[143,7297,7298],{"class":266},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[143,7300,7301,7304,7306,7308,7311],{"class":145,"line":2529},[143,7302,7303],{"class":755},"    *",[143,7305,63],{"class":149},[143,7307,160],{"class":755},[143,7309,7310],{"class":280},"1000",[143,7312,290],{"class":149},[143,7314,7315,7317,7320,7322,7324,7326],{"class":145,"line":2543},[143,7316,2454],{"class":149},[143,7318,7319],{"class":755},"\u003C\u003C*",[143,7321,63],{"class":149},[143,7323,2081],{"class":755},[143,7325,2146],{"class":149},[143,7327,7328],{"class":266},"\u002F\u002F1000\n",[143,7330,7331,7333,7335,7337,7339,7341],{"class":145,"line":2548},[143,7332,2454],{"class":149},[143,7334,2081],{"class":755},[143,7336,67],{"class":149},[143,7338,2081],{"class":755},[143,7340,2146],{"class":149},[143,7342,7328],{"class":266},[143,7344,7345],{"class":145,"line":2554},[143,7346,348],{"class":149},[14,7348,7350],{"id":7349},"_32指针所占的内存空间","3.2指针所占的内存空间",[63,7352,7353],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[63,7355,7356],{},"在32位操作系统下：占用4个字节空间",[63,7358,7359],{},"在64位操作系统下：占用8个字节空间",[63,7361,7362],{},"上方是不管啥数据类型的",[133,7364,7366],{"className":1037,"code":7365,"language":1039,"meta":138,"style":138},"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",[140,7367,7368,7376,7380,7385,7397,7402,7407,7412,7425,7447,7473,7499],{"__ignoreMap":138},[143,7369,7370,7372,7374],{"class":145,"line":146},[143,7371,1052],{"class":755},[143,7373,2873],{"class":156},[143,7375,2876],{"class":149},[143,7377,7378],{"class":145,"line":35},[143,7379,2449],{"class":149},[143,7381,7382],{"class":145,"line":46},[143,7383,7384],{"class":266},"    \u002F\u002F指针所占内存空间\n",[143,7386,7387,7389,7391,7393,7395],{"class":145,"line":293},[143,7388,2885],{"class":755},[143,7390,2302],{"class":149},[143,7392,160],{"class":755},[143,7394,1487],{"class":280},[143,7396,290],{"class":149},[143,7398,7399],{"class":145,"line":306},[143,7400,7401],{"class":266},"    \u002F\u002Fint *p;\n",[143,7403,7404],{"class":145,"line":319},[143,7405,7406],{"class":266},"    \u002F\u002Fp=&a;\n",[143,7408,7409],{"class":145,"line":332},[143,7410,7411],{"class":266},"    \u002F\u002F上述可以写为以下：\n",[143,7413,7414,7416,7419,7421,7423],{"class":145,"line":345},[143,7415,2885],{"class":755},[143,7417,7418],{"class":755}," *",[143,7420,63],{"class":149},[143,7422,7239],{"class":755},[143,7424,7097],{"class":149},[143,7426,7427,7430,7432,7435,7437,7440,7442,7444],{"class":145,"line":701},[143,7428,7429],{"class":149},"    cout ",[143,7431,2081],{"class":755},[143,7433,7434],{"class":163},"\"sizeof(int *)\"",[143,7436,2276],{"class":755},[143,7438,7439],{"class":149},"(p)",[143,7441,2081],{"class":755},[143,7443,2146],{"class":149},[143,7445,7446],{"class":266},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[143,7448,7449,7451,7453,7455,7457,7459,7461,7463,7465,7467,7470],{"class":145,"line":707},[143,7450,7429],{"class":149},[143,7452,2081],{"class":755},[143,7454,7434],{"class":163},[143,7456,2276],{"class":755},[143,7458,1049],{"class":149},[143,7460,1052],{"class":755},[143,7462,7418],{"class":755},[143,7464,1470],{"class":149},[143,7466,2081],{"class":755},[143,7468,7469],{"class":149},"endl",[143,7471,7472],{"class":266},"  \u002F\u002F4字节(32位的话)\n",[143,7474,7475,7477,7479,7482,7484,7486,7488,7490,7492,7494,7496],{"class":145,"line":727},[143,7476,7429],{"class":149},[143,7478,2081],{"class":755},[143,7480,7481],{"class":163},"\"sizeof(char *)\"",[143,7483,2276],{"class":755},[143,7485,1049],{"class":149},[143,7487,1141],{"class":755},[143,7489,7418],{"class":755},[143,7491,1470],{"class":149},[143,7493,2081],{"class":755},[143,7495,2146],{"class":149},[143,7497,7498],{"class":266}," \u002F\u002F4字节(32位的话)\n",[143,7500,7501],{"class":145,"line":2518},[143,7502,348],{"class":149},[14,7504,7506],{"id":7505},"_33空指针","3.3空指针",[63,7508,7509],{},"空指针：指针变量指向内存中编号为0的空间",[63,7511,7512],{},"用途：初始化指针变量",[63,7514,7515],{},"注意：空指针指向的内存是不可以访问的",[133,7517,7519],{"className":1037,"code":7518,"language":1039,"meta":138,"style":138},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[140,7520,7521,7529,7533,7538,7552,7557,7572,7577],{"__ignoreMap":138},[143,7522,7523,7525,7527],{"class":145,"line":146},[143,7524,1052],{"class":755},[143,7526,2873],{"class":156},[143,7528,2876],{"class":149},[143,7530,7531],{"class":145,"line":35},[143,7532,2449],{"class":149},[143,7534,7535],{"class":145,"line":46},[143,7536,7537],{"class":266},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[143,7539,7540,7542,7544,7546,7548,7550],{"class":145,"line":293},[143,7541,2885],{"class":755},[143,7543,7418],{"class":755},[143,7545,63],{"class":149},[143,7547,160],{"class":755},[143,7549,3292],{"class":280},[143,7551,290],{"class":149},[143,7553,7554],{"class":145,"line":306},[143,7555,7556],{"class":266},"    \u002F\u002F2.空指针不能进行访问\n",[143,7558,7559,7561,7563,7565,7567,7569],{"class":145,"line":319},[143,7560,7303],{"class":755},[143,7562,63],{"class":149},[143,7564,160],{"class":755},[143,7566,1352],{"class":280},[143,7568,1101],{"class":149},[143,7570,7571],{"class":266},"\u002F\u002F直接报错，压根不能访问\n",[143,7573,7574],{"class":145,"line":332},[143,7575,7576],{"class":266},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[143,7578,7579],{"class":145,"line":345},[143,7580,348],{"class":149},[14,7582,7584],{"id":7583},"_34野指针","3.4野指针",[63,7586,7587],{},[25,7588,7589],{},"指针变量指向非法的内存空间",[133,7591,7593],{"className":1037,"code":7592,"language":1039,"meta":138,"style":138},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[140,7594,7595,7603,7607,7636,7641,7653],{"__ignoreMap":138},[143,7596,7597,7599,7601],{"class":145,"line":146},[143,7598,1052],{"class":755},[143,7600,2873],{"class":156},[143,7602,2876],{"class":149},[143,7604,7605],{"class":145,"line":35},[143,7606,2449],{"class":149},[143,7608,7609,7611,7613,7615,7617,7619,7621,7623,7625,7628,7631,7633],{"class":145,"line":46},[143,7610,2885],{"class":755},[143,7612,7418],{"class":755},[143,7614,63],{"class":149},[143,7616,160],{"class":755},[143,7618,1049],{"class":149},[143,7620,1052],{"class":755},[143,7622,7418],{"class":755},[143,7624,1470],{"class":149},[143,7626,7627],{"class":755},"0x",[143,7629,7630],{"class":280},"1100",[143,7632,1101],{"class":149},[143,7634,7635],{"class":266}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[143,7637,7638],{"class":145,"line":293},[143,7639,7640],{"class":266},"    \u002F\u002F访问野指针报错\n",[143,7642,7643,7645,7647,7649,7651],{"class":145,"line":306},[143,7644,2454],{"class":149},[143,7646,7319],{"class":755},[143,7648,63],{"class":149},[143,7650,2081],{"class":755},[143,7652,2103],{"class":149},[143,7654,7655],{"class":145,"line":319},[143,7656,348],{"class":149},[63,7658,7659],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,7661,7663],{"id":7662},"_35const修饰指针","3.5const修饰指针",[63,7665,7666],{},"三种情况：",[232,7668,7669,7672,7675],{},[22,7670,7671],{},"const修饰指针 常量指针",[22,7673,7674],{},"const修饰常量 指针常量",[22,7676,7677],{},"const即修饰指针，又修饰常量",[19,7679,7680],{},[22,7681,7682],{},"常量指针",[133,7684,7686],{"className":1037,"code":7685,"language":1039,"meta":138,"style":138},"const int *p=&a;\n",[140,7687,7688],{"__ignoreMap":138},[143,7689,7690,7693,7695,7697,7699,7701],{"class":145,"line":146},[143,7691,7692],{"class":755},"const",[143,7694,3282],{"class":755},[143,7696,7418],{"class":755},[143,7698,63],{"class":149},[143,7700,7239],{"class":755},[143,7702,7097],{"class":149},[63,7704,7705],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[19,7707,7708],{"start":35},[22,7709,7710],{},"指针常量",[133,7712,7714],{"className":1037,"code":7713,"language":1039,"meta":138,"style":138},"int *const p=&a;\n",[140,7715,7716],{"__ignoreMap":138},[143,7717,7718,7720,7723,7726,7728],{"class":145,"line":146},[143,7719,1052],{"class":755},[143,7721,7722],{"class":755}," *const",[143,7724,7725],{"class":149}," p",[143,7727,7239],{"class":755},[143,7729,7097],{"class":149},[63,7731,7732],{},"指针的指向不可以改，指针指向的值可以改",[19,7734,7735],{"start":46},[22,7736,7677],{},[133,7738,7740],{"className":1037,"code":7739,"language":1039,"meta":138,"style":138},"const int *const p=&a;\n",[140,7741,7742],{"__ignoreMap":138},[143,7743,7744,7746,7748,7750,7752,7754],{"class":145,"line":146},[143,7745,7692],{"class":755},[143,7747,3282],{"class":755},[143,7749,7722],{"class":755},[143,7751,7725],{"class":149},[143,7753,7239],{"class":755},[143,7755,7097],{"class":149},[63,7757,7758],{},"指针的指向和指针指向的值都不可以改变",[14,7760,7762],{"id":7761},"_36指针和数组","3.6指针和数组",[133,7764,7766],{"className":1037,"code":7765,"language":1039,"meta":138,"style":138},"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",[140,7767,7768,7776,7780,7785,7839,7860,7876,7892,7903,7920,7925,7939,7965,7969,7981,7990,7994],{"__ignoreMap":138},[143,7769,7770,7772,7774],{"class":145,"line":146},[143,7771,1052],{"class":755},[143,7773,2873],{"class":156},[143,7775,2876],{"class":149},[143,7777,7778],{"class":145,"line":35},[143,7779,2449],{"class":149},[143,7781,7782],{"class":145,"line":46},[143,7783,7784],{"class":266},"    \u002F\u002F利用指针访问数组中的元素\n",[143,7786,7787,7789,7791,7793,7795,7797,7799,7801,7803,7805,7807,7809,7811,7813,7815,7817,7819,7821,7823,7825,7827,7829,7831,7833,7835,7837],{"class":145,"line":293},[143,7788,2885],{"class":755},[143,7790,4862],{"class":149},[143,7792,1487],{"class":280},[143,7794,1979],{"class":149},[143,7796,160],{"class":755},[143,7798,1936],{"class":149},[143,7800,771],{"class":280},[143,7802,1419],{"class":149},[143,7804,1122],{"class":280},[143,7806,1419],{"class":149},[143,7808,1116],{"class":280},[143,7810,1419],{"class":149},[143,7812,1334],{"class":280},[143,7814,1419],{"class":149},[143,7816,1360],{"class":280},[143,7818,1419],{"class":149},[143,7820,1385],{"class":280},[143,7822,1419],{"class":149},[143,7824,1410],{"class":280},[143,7826,1419],{"class":149},[143,7828,1436],{"class":280},[143,7830,1419],{"class":149},[143,7832,1461],{"class":280},[143,7834,1419],{"class":149},[143,7836,1487],{"class":280},[143,7838,4895],{"class":149},[143,7840,7841,7843,7845,7848,7850,7852,7854,7856,7858],{"class":145,"line":306},[143,7842,2454],{"class":149},[143,7844,2081],{"class":755},[143,7846,7847],{"class":163},"\"数组的第一个元素为：\"",[143,7849,2081],{"class":755},[143,7851,4806],{"class":149},[143,7853,1234],{"class":280},[143,7855,1979],{"class":149},[143,7857,2081],{"class":755},[143,7859,2103],{"class":149},[143,7861,7862,7864,7866,7868,7870,7873],{"class":145,"line":319},[143,7863,2885],{"class":755},[143,7865,7418],{"class":755},[143,7867,63],{"class":149},[143,7869,160],{"class":755},[143,7871,7872],{"class":149},"arr;",[143,7874,7875],{"class":266},"\u002F\u002F注意数才要加取地址符号&\n",[143,7877,7878,7880,7882,7884,7886,7888,7890],{"class":145,"line":332},[143,7879,2454],{"class":149},[143,7881,2081],{"class":755},[143,7883,7847],{"class":163},[143,7885,7319],{"class":755},[143,7887,63],{"class":149},[143,7889,2081],{"class":755},[143,7891,2103],{"class":149},[143,7893,7894,7896,7898,7900],{"class":145,"line":345},[143,7895,7236],{"class":149},[143,7897,3192],{"class":755},[143,7899,1101],{"class":149},[143,7901,7902],{"class":266}," \u002F\u002F让指针向后偏移4个字节\n",[143,7904,7905,7907,7909,7912,7914,7916,7918],{"class":145,"line":701},[143,7906,2454],{"class":149},[143,7908,2081],{"class":755},[143,7910,7911],{"class":163},"\"数组的第二个元素为：\"",[143,7913,7319],{"class":755},[143,7915,63],{"class":149},[143,7917,2081],{"class":755},[143,7919,2103],{"class":149},[143,7921,7922],{"class":145,"line":707},[143,7923,7924],{"class":266},"    \u002F\u002F利用指针遍历数组\n",[143,7926,7927,7929,7931,7934,7936],{"class":145,"line":727},[143,7928,2885],{"class":755},[143,7930,7418],{"class":755},[143,7932,7933],{"class":149},"p2",[143,7935,160],{"class":755},[143,7937,7938],{"class":149},"arr;\n",[143,7940,7941,7943,7945,7947,7949,7951,7953,7955,7957,7959,7961,7963],{"class":145,"line":2518},[143,7942,4101],{"class":755},[143,7944,2559],{"class":149},[143,7946,1052],{"class":755},[143,7948,3932],{"class":149},[143,7950,160],{"class":755},[143,7952,1234],{"class":280},[143,7954,3939],{"class":149},[143,7956,150],{"class":755},[143,7958,1487],{"class":280},[143,7960,3939],{"class":149},[143,7962,3192],{"class":755},[143,7964,1055],{"class":149},[143,7966,7967],{"class":145,"line":2524},[143,7968,2930],{"class":149},[143,7970,7971,7973,7975,7977,7979],{"class":145,"line":2529},[143,7972,4351],{"class":149},[143,7974,7319],{"class":755},[143,7976,7933],{"class":149},[143,7978,2081],{"class":755},[143,7980,2103],{"class":149},[143,7982,7983,7986,7988],{"class":145,"line":2543},[143,7984,7985],{"class":149},"        p2",[143,7987,3192],{"class":755},[143,7989,290],{"class":149},[143,7991,7992],{"class":145,"line":2548},[143,7993,3087],{"class":149},[143,7995,7996],{"class":145,"line":2554},[143,7997,348],{"class":149},[14,7999,8001],{"id":8000},"_37指针和函数","3.7指针和函数",[63,8003,8004],{},"利用指针做函数参数，可以修改实参的值",[63,8006,8007],{},"值传递：只改变形参，不改变实参",[63,8009,8010],{},"地址传递：",[133,8012,8014],{"className":1037,"code":8013,"language":1039,"meta":138,"style":138},"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",[140,8015,8016,8041,8045,8057,8068,8078,8082,8090,8094,8106,8118,8123,8139,8154,8169],{"__ignoreMap":138},[143,8017,8018,8020,8022,8024,8026,8028,8031,8033,8035,8037,8039],{"class":145,"line":146},[143,8019,6264],{"class":755},[143,8021,6267],{"class":156},[143,8023,1049],{"class":149},[143,8025,1052],{"class":755},[143,8027,7418],{"class":755},[143,8029,8030],{"class":6116},"p1",[143,8032,1419],{"class":149},[143,8034,1052],{"class":755},[143,8036,7418],{"class":755},[143,8038,7933],{"class":6116},[143,8040,1055],{"class":149},[143,8042,8043],{"class":145,"line":35},[143,8044,2449],{"class":149},[143,8046,8047,8049,8051,8054],{"class":145,"line":46},[143,8048,2885],{"class":755},[143,8050,5155],{"class":149},[143,8052,8053],{"class":755},"=*",[143,8055,8056],{"class":149},"p1;\n",[143,8058,8059,8061,8063,8065],{"class":145,"line":293},[143,8060,7303],{"class":755},[143,8062,8030],{"class":149},[143,8064,8053],{"class":755},[143,8066,8067],{"class":149},"p2;\n",[143,8069,8070,8072,8074,8076],{"class":145,"line":306},[143,8071,7303],{"class":755},[143,8073,7933],{"class":149},[143,8075,160],{"class":755},[143,8077,5180],{"class":149},[143,8079,8080],{"class":145,"line":319},[143,8081,348],{"class":149},[143,8083,8084,8086,8088],{"class":145,"line":332},[143,8085,1052],{"class":755},[143,8087,2873],{"class":156},[143,8089,2876],{"class":149},[143,8091,8092],{"class":145,"line":345},[143,8093,2449],{"class":149},[143,8095,8096,8098,8100,8102,8104],{"class":145,"line":701},[143,8097,2885],{"class":755},[143,8099,2302],{"class":149},[143,8101,160],{"class":755},[143,8103,1487],{"class":280},[143,8105,290],{"class":149},[143,8107,8108,8110,8112,8114,8116],{"class":145,"line":707},[143,8109,2885],{"class":755},[143,8111,3733],{"class":149},[143,8113,160],{"class":755},[143,8115,1741],{"class":280},[143,8117,290],{"class":149},[143,8119,8120],{"class":145,"line":727},[143,8121,8122],{"class":266},"    \u002F\u002F地址传递\n",[143,8124,8125,8127,8129,8131,8134,8136],{"class":145,"line":2518},[143,8126,6461],{"class":156},[143,8128,1049],{"class":149},[143,8130,1394],{"class":755},[143,8132,8133],{"class":149},"a,",[143,8135,1394],{"class":755},[143,8137,8138],{"class":149},"b);\n",[143,8140,8141,8143,8145,8147,8149,8151],{"class":145,"line":2524},[143,8142,2454],{"class":149},[143,8144,2081],{"class":755},[143,8146,67],{"class":149},[143,8148,2081],{"class":755},[143,8150,2146],{"class":149},[143,8152,8153],{"class":266},"\u002F\u002F20\n",[143,8155,8156,8158,8160,8162,8164,8166],{"class":145,"line":2529},[143,8157,2454],{"class":149},[143,8159,2081],{"class":755},[143,8161,1304],{"class":149},[143,8163,2081],{"class":755},[143,8165,2146],{"class":149},[143,8167,8168],{"class":266},"\u002F\u002F10\n",[143,8170,8171],{"class":145,"line":2543},[143,8172,348],{"class":149},[63,8174,8175],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8177,8179],{"id":8178},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[63,8181,8182],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[63,8184,8185,8186,8188],{},"例如数组：int arr",[143,8187,1487],{},"={4,3,6,9,1,2,10,8,7,5}",[133,8190,8192],{"className":1037,"code":8191,"language":1039,"meta":138,"style":138},"#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",[140,8193,8194,8200,8210,8234,8238,8269,8273,8307,8311,8329,8333,8344,8359,8374,8378,8382,8386,8390,8394,8402,8406,8411,8465,8477,8489,8494,8502,8506,8511,8536,8540,8555,8564,8568],{"__ignoreMap":138},[143,8195,8196,8198],{"class":145,"line":146},[143,8197,2850],{"class":755},[143,8199,2853],{"class":163},[143,8201,8202,8204,8206,8208],{"class":145,"line":35},[143,8203,2858],{"class":755},[143,8205,2861],{"class":755},[143,8207,2864],{"class":156},[143,8209,290],{"class":149},[143,8211,8212,8214,8217,8219,8221,8223,8225,8227,8229,8232],{"class":145,"line":46},[143,8213,6264],{"class":755},[143,8215,8216],{"class":156}," bubbleSort",[143,8218,1049],{"class":149},[143,8220,1052],{"class":755},[143,8222,7418],{"class":755},[143,8224,63],{"class":6116},[143,8226,1419],{"class":149},[143,8228,1052],{"class":755},[143,8230,8231],{"class":6116}," len",[143,8233,1055],{"class":149},[143,8235,8236],{"class":145,"line":293},[143,8237,2449],{"class":149},[143,8239,8240,8242,8244,8246,8248,8250,8252,8254,8256,8259,8261,8263,8265,8267],{"class":145,"line":306},[143,8241,4101],{"class":755},[143,8243,1049],{"class":149},[143,8245,1052],{"class":755},[143,8247,3932],{"class":149},[143,8249,160],{"class":755},[143,8251,1234],{"class":280},[143,8253,3939],{"class":149},[143,8255,150],{"class":755},[143,8257,8258],{"class":149},"len",[143,8260,1573],{"class":755},[143,8262,771],{"class":280},[143,8264,3939],{"class":149},[143,8266,3192],{"class":755},[143,8268,1055],{"class":149},[143,8270,8271],{"class":145,"line":319},[143,8272,2930],{"class":149},[143,8274,8275,8277,8279,8281,8283,8285,8287,8289,8291,8293,8295,8297,8299,8301,8303,8305],{"class":145,"line":332},[143,8276,4303],{"class":755},[143,8278,1049],{"class":149},[143,8280,1052],{"class":755},[143,8282,4310],{"class":149},[143,8284,160],{"class":755},[143,8286,1234],{"class":280},[143,8288,4317],{"class":149},[143,8290,150],{"class":755},[143,8292,8258],{"class":149},[143,8294,1573],{"class":755},[143,8296,1482],{"class":149},[143,8298,1573],{"class":755},[143,8300,771],{"class":280},[143,8302,4317],{"class":149},[143,8304,3192],{"class":755},[143,8306,1055],{"class":149},[143,8308,8309],{"class":145,"line":345},[143,8310,3410],{"class":149},[143,8312,8313,8315,8318,8320,8323,8325,8327],{"class":145,"line":701},[143,8314,5542],{"class":755},[143,8316,8317],{"class":149},"(p[j]",[143,8319,1998],{"class":755},[143,8321,8322],{"class":149},"p[j",[143,8324,1522],{"class":755},[143,8326,771],{"class":280},[143,8328,5557],{"class":149},[143,8330,8331],{"class":145,"line":707},[143,8332,5562],{"class":149},[143,8334,8335,8337,8339,8341],{"class":145,"line":727},[143,8336,5567],{"class":755},[143,8338,5155],{"class":149},[143,8340,160],{"class":755},[143,8342,8343],{"class":149},"p[j];\n",[143,8345,8346,8349,8351,8353,8355,8357],{"class":145,"line":2518},[143,8347,8348],{"class":149},"                p[j]",[143,8350,160],{"class":755},[143,8352,8322],{"class":149},[143,8354,1522],{"class":755},[143,8356,771],{"class":280},[143,8358,5590],{"class":149},[143,8360,8361,8364,8366,8368,8370,8372],{"class":145,"line":2524},[143,8362,8363],{"class":149},"                p[j",[143,8365,1522],{"class":755},[143,8367,771],{"class":280},[143,8369,1979],{"class":149},[143,8371,160],{"class":755},[143,8373,5180],{"class":149},[143,8375,8376],{"class":145,"line":2529},[143,8377,5610],{"class":149},[143,8379,8380],{"class":145,"line":2543},[143,8381,3429],{"class":149},[143,8383,8384],{"class":145,"line":2548},[143,8385,3087],{"class":149},[143,8387,8388],{"class":145,"line":2554},[143,8389,348],{"class":149},[143,8391,8392],{"class":145,"line":2575},[143,8393,3300],{"emptyLinePlaceholder":976},[143,8395,8396,8398,8400],{"class":145,"line":2580},[143,8397,1052],{"class":755},[143,8399,2873],{"class":156},[143,8401,2876],{"class":149},[143,8403,8404],{"class":145,"line":2594},[143,8405,2449],{"class":149},[143,8407,8408],{"class":145,"line":2599},[143,8409,8410],{"class":266},"    \u002F\u002F 1.创建数组\n",[143,8412,8413,8415,8417,8419,8421,8423,8425,8427,8429,8431,8433,8435,8437,8439,8441,8443,8445,8447,8449,8451,8453,8455,8457,8459,8461,8463],{"class":145,"line":2628},[143,8414,2885],{"class":755},[143,8416,4862],{"class":149},[143,8418,1487],{"class":280},[143,8420,1979],{"class":149},[143,8422,160],{"class":755},[143,8424,1936],{"class":149},[143,8426,1334],{"class":280},[143,8428,1419],{"class":149},[143,8430,1116],{"class":280},[143,8432,1419],{"class":149},[143,8434,1385],{"class":280},[143,8436,1419],{"class":149},[143,8438,1461],{"class":280},[143,8440,1419],{"class":149},[143,8442,771],{"class":280},[143,8444,1419],{"class":149},[143,8446,1122],{"class":280},[143,8448,1419],{"class":149},[143,8450,1487],{"class":280},[143,8452,1419],{"class":149},[143,8454,1436],{"class":280},[143,8456,1419],{"class":149},[143,8458,1410],{"class":280},[143,8460,1419],{"class":149},[143,8462,1360],{"class":280},[143,8464,4895],{"class":149},[143,8466,8467,8469,8471,8473,8475],{"class":145,"line":2633},[143,8468,2885],{"class":755},[143,8470,8231],{"class":149},[143,8472,160],{"class":755},[143,8474,1487],{"class":280},[143,8476,290],{"class":149},[143,8478,8479,8481,8483,8485,8487],{"class":145,"line":2650},[143,8480,2885],{"class":755},[143,8482,7418],{"class":755},[143,8484,63],{"class":149},[143,8486,160],{"class":755},[143,8488,7938],{"class":149},[143,8490,8491],{"class":145,"line":2655},[143,8492,8493],{"class":266},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[143,8495,8496,8499],{"class":145,"line":2660},[143,8497,8498],{"class":156},"    bubbleSort",[143,8500,8501],{"class":149},"(p,len);\n",[143,8503,8504],{"class":145,"line":2665},[143,8505,3300],{"emptyLinePlaceholder":976},[143,8507,8508],{"class":145,"line":2679},[143,8509,8510],{"class":266},"    \u002F\u002F 3.打印排序后的数组\n",[143,8512,8513,8515,8517,8519,8521,8523,8525,8527,8529,8532,8534],{"class":145,"line":2684},[143,8514,4101],{"class":755},[143,8516,2559],{"class":149},[143,8518,1052],{"class":755},[143,8520,3932],{"class":149},[143,8522,160],{"class":755},[143,8524,1234],{"class":280},[143,8526,4114],{"class":149},[143,8528,150],{"class":755},[143,8530,8531],{"class":149},"len; i",[143,8533,3192],{"class":755},[143,8535,1055],{"class":149},[143,8537,8538],{"class":145,"line":3477},[143,8539,2930],{"class":149},[143,8541,8542,8544,8546,8548,8550,8553],{"class":145,"line":3491},[143,8543,4351],{"class":149},[143,8545,7319],{"class":755},[143,8547,63],{"class":149},[143,8549,2081],{"class":755},[143,8551,8552],{"class":163},"\"\"",[143,8554,290],{"class":149},[143,8556,8557,8560,8562],{"class":145,"line":3499},[143,8558,8559],{"class":149},"        p",[143,8561,3192],{"class":755},[143,8563,290],{"class":149},[143,8565,8566],{"class":145,"line":3504},[143,8567,3087],{"class":149},[143,8569,8570],{"class":145,"line":3510},[143,8571,348],{"class":149},[954,8573,8574],{},"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":138,"searchDepth":35,"depth":35,"links":8576},[8577,8578,8579,8580,8581,8582,8583,8584],{"id":7183,"depth":35,"text":7184},{"id":7349,"depth":35,"text":7350},{"id":7505,"depth":35,"text":7506},{"id":7583,"depth":35,"text":7584},{"id":7662,"depth":35,"text":7663},{"id":7761,"depth":35,"text":7762},{"id":8000,"depth":35,"text":8001},{"id":8178,"depth":35,"text":8179},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7172,"description":7180},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8591,"title":8592,"body":8593,"description":8600,"extension":974,"meta":11574,"navigation":976,"path":11575,"seo":11576,"stem":11577,"__hash__":11578},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8594,"toc":11565},[8595,8598,8601,8605,8608,8611,8622,8960,8963,8967,8970,8977,9232,9236,9239,9242,9397,9401,9404,9407,9613,9617,9620,9923,9926,9934,9938,9941,10092,10094,10105,10162,10166,10171,10828,10836,10839,10933,10936,11556,11562],[10,8596,8592],{"id":8597},"_4结构体",[63,8599,8600],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,8602,8604],{"id":8603},"_41结构体定义与使用","4.1结构体定义与使用",[63,8606,8607],{},"语法：struct 结构体名 {结构体成员列表}；",[63,8609,8610],{},"通过结构体创建变量的方式：",[232,8612,8613,8616,8619],{},[22,8614,8615],{},"struct 结构体名 变量名",[22,8617,8618],{},"struct 结构体名 变量名={成员1值，成员2值...}",[22,8620,8621],{},"定义结构体时顺便创建变量",[133,8623,8625],{"className":1037,"code":8624,"language":1039,"meta":138,"style":138},"#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",[140,8626,8627,8633,8643,8650,8655,8663,8667,8672,8676,8681,8686,8691,8698,8703,8710,8714,8721,8725,8729,8733,8737,8741,8745,8751,8755,8761,8769,8777,8781,8786,8791,8802,8807,8819,8830,8841,8846,8870,8875,8881,8908,8913,8919,8931,8943,8955],{"__ignoreMap":138},[143,8628,8629,8631],{"class":145,"line":146},[143,8630,2850],{"class":755},[143,8632,2853],{"class":163},[143,8634,8635,8637,8639,8641],{"class":145,"line":35},[143,8636,2858],{"class":755},[143,8638,2861],{"class":755},[143,8640,2864],{"class":156},[143,8642,290],{"class":149},[143,8644,8645,8647],{"class":145,"line":46},[143,8646,2850],{"class":755},[143,8648,8649],{"class":163},"\u003Cstring>\n",[143,8651,8652],{"class":145,"line":293},[143,8653,8654],{"class":266},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[143,8656,8657,8660],{"class":145,"line":306},[143,8658,8659],{"class":755},"struct",[143,8661,8662],{"class":156}," Student\n",[143,8664,8665],{"class":145,"line":319},[143,8666,2449],{"class":149},[143,8668,8669],{"class":145,"line":332},[143,8670,8671],{"class":266},"    \u002F\u002F成员列表\n",[143,8673,8674],{"class":145,"line":345},[143,8675,3300],{"emptyLinePlaceholder":976},[143,8677,8678],{"class":145,"line":701},[143,8679,8680],{"class":266},"    \u002F\u002F姓名\n",[143,8682,8683],{"class":145,"line":707},[143,8684,8685],{"class":149},"    string name;\n",[143,8687,8688],{"class":145,"line":727},[143,8689,8690],{"class":266},"    \u002F\u002F年龄\n",[143,8692,8693,8695],{"class":145,"line":2518},[143,8694,2885],{"class":755},[143,8696,8697],{"class":149}," age;\n",[143,8699,8700],{"class":145,"line":2524},[143,8701,8702],{"class":266},"    \u002F\u002F分数\n",[143,8704,8705,8707],{"class":145,"line":2529},[143,8706,2885],{"class":755},[143,8708,8709],{"class":149}," score;\n",[143,8711,8712],{"class":145,"line":2543},[143,8713,4895],{"class":149},[143,8715,8716,8718],{"class":145,"line":2548},[143,8717,8659],{"class":755},[143,8719,8720],{"class":156}," School\n",[143,8722,8723],{"class":145,"line":2554},[143,8724,2449],{"class":149},[143,8726,8727],{"class":145,"line":2575},[143,8728,8671],{"class":266},[143,8730,8731],{"class":145,"line":2580},[143,8732,3300],{"emptyLinePlaceholder":976},[143,8734,8735],{"class":145,"line":2594},[143,8736,8680],{"class":266},[143,8738,8739],{"class":145,"line":2599},[143,8740,8685],{"class":149},[143,8742,8743],{"class":145,"line":2628},[143,8744,8690],{"class":266},[143,8746,8747,8749],{"class":145,"line":2633},[143,8748,2885],{"class":755},[143,8750,8697],{"class":149},[143,8752,8753],{"class":145,"line":2650},[143,8754,8702],{"class":266},[143,8756,8757,8759],{"class":145,"line":2655},[143,8758,2885],{"class":755},[143,8760,8709],{"class":149},[143,8762,8763,8766],{"class":145,"line":2660},[143,8764,8765],{"class":149},"} s3;",[143,8767,8768],{"class":266}," \u002F\u002F创建结构体时就创建了变量\n",[143,8770,8771,8773,8775],{"class":145,"line":2665},[143,8772,1052],{"class":755},[143,8774,2873],{"class":156},[143,8776,2876],{"class":149},[143,8778,8779],{"class":145,"line":2679},[143,8780,2449],{"class":149},[143,8782,8783],{"class":145,"line":2684},[143,8784,8785],{"class":266},"    \u002F\u002F2.通过学生类型创建具体学生\n",[143,8787,8788],{"class":145,"line":3477},[143,8789,8790],{"class":266},"    \u002F\u002F2.1 struct Student s1;\n",[143,8792,8793,8796,8799],{"class":145,"line":3491},[143,8794,8795],{"class":755},"    struct",[143,8797,8798],{"class":156}," Student",[143,8800,8801],{"class":149}," s1;\n",[143,8803,8804],{"class":145,"line":3499},[143,8805,8806],{"class":266},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[143,8808,8809,8812,8814,8817],{"class":145,"line":3504},[143,8810,8811],{"class":149},"    s1.name",[143,8813,160],{"class":755},[143,8815,8816],{"class":163},"\"张三\"",[143,8818,290],{"class":149},[143,8820,8821,8824,8826,8828],{"class":145,"line":3510},[143,8822,8823],{"class":149},"    s1.age",[143,8825,160],{"class":755},[143,8827,1691],{"class":280},[143,8829,290],{"class":149},[143,8831,8832,8835,8837,8839],{"class":145,"line":3516},[143,8833,8834],{"class":149},"    s1.score",[143,8836,160],{"class":755},[143,8838,1295],{"class":280},[143,8840,290],{"class":149},[143,8842,8843],{"class":145,"line":3521},[143,8844,8845],{"class":266},"    \u002F\u002F输出结果\n",[143,8847,8849,8851,8853,8856,8858,8861,8863,8866,8868],{"class":145,"line":8848},37,[143,8850,2454],{"class":149},[143,8852,2081],{"class":755},[143,8854,8855],{"class":149},"s1.name",[143,8857,2081],{"class":755},[143,8859,8860],{"class":149},"s1.age",[143,8862,2081],{"class":755},[143,8864,8865],{"class":149},"s1.score",[143,8867,2081],{"class":755},[143,8869,2103],{"class":149},[143,8871,8873],{"class":145,"line":8872},38,[143,8874,3300],{"emptyLinePlaceholder":976},[143,8876,8878],{"class":145,"line":8877},39,[143,8879,8880],{"class":266},"    \u002F\u002F2.2 struct Student s2={...}\n",[143,8882,8884,8886,8888,8891,8893,8895,8898,8900,8902,8904,8906],{"class":145,"line":8883},40,[143,8885,8795],{"class":755},[143,8887,8798],{"class":156},[143,8889,8890],{"class":149}," s2",[143,8892,160],{"class":755},[143,8894,1936],{"class":149},[143,8896,8897],{"class":163},"\"王五\"",[143,8899,1419],{"class":149},[143,8901,1691],{"class":280},[143,8903,1419],{"class":149},[143,8905,1295],{"class":280},[143,8907,4895],{"class":149},[143,8909,8911],{"class":145,"line":8910},41,[143,8912,3300],{"emptyLinePlaceholder":976},[143,8914,8916],{"class":145,"line":8915},42,[143,8917,8918],{"class":266},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[143,8920,8922,8925,8927,8929],{"class":145,"line":8921},43,[143,8923,8924],{"class":149},"    s3.name",[143,8926,160],{"class":755},[143,8928,4578],{"class":163},[143,8930,290],{"class":149},[143,8932,8934,8937,8939,8941],{"class":145,"line":8933},44,[143,8935,8936],{"class":149},"    s3.age",[143,8938,160],{"class":755},[143,8940,1691],{"class":280},[143,8942,290],{"class":149},[143,8944,8946,8949,8951,8953],{"class":145,"line":8945},45,[143,8947,8948],{"class":149},"    s3.score",[143,8950,160],{"class":755},[143,8952,1741],{"class":280},[143,8954,290],{"class":149},[143,8956,8958],{"class":145,"line":8957},46,[143,8959,348],{"class":149},[63,8961,8962],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8964,8966],{"id":8965},"_42结构体数组","4.2结构体数组",[63,8968,8969],{},"将自定义的结构体放入到数组中方便维护",[63,8971,8972,8973,8976],{},"语法：struct 结构体名 数组名",[143,8974,8975],{},"元素个数","={ {}，{},...{} };",[133,8978,8980],{"className":1037,"code":8979,"language":1039,"meta":138,"style":138},"#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",[140,8981,8982,8988,8998,9004,9009,9015,9019,9023,9029,9035,9039,9043,9051,9055,9060,9075,9079,9095,9111,9115,9120,9136,9151,9166,9171,9197,9201,9224,9228],{"__ignoreMap":138},[143,8983,8984,8986],{"class":145,"line":146},[143,8985,2850],{"class":755},[143,8987,2853],{"class":163},[143,8989,8990,8992,8994,8996],{"class":145,"line":35},[143,8991,2858],{"class":755},[143,8993,2861],{"class":755},[143,8995,2864],{"class":156},[143,8997,290],{"class":149},[143,8999,9000,9002],{"class":145,"line":46},[143,9001,2850],{"class":755},[143,9003,8649],{"class":163},[143,9005,9006],{"class":145,"line":293},[143,9007,9008],{"class":266},"\u002F\u002F1.定义结构体\n",[143,9010,9011,9013],{"class":145,"line":306},[143,9012,8659],{"class":755},[143,9014,8662],{"class":156},[143,9016,9017],{"class":145,"line":319},[143,9018,2449],{"class":149},[143,9020,9021],{"class":145,"line":332},[143,9022,8685],{"class":149},[143,9024,9025,9027],{"class":145,"line":345},[143,9026,2885],{"class":755},[143,9028,8697],{"class":149},[143,9030,9031,9033],{"class":145,"line":701},[143,9032,2885],{"class":755},[143,9034,8709],{"class":149},[143,9036,9037],{"class":145,"line":707},[143,9038,3300],{"emptyLinePlaceholder":976},[143,9040,9041],{"class":145,"line":727},[143,9042,4895],{"class":149},[143,9044,9045,9047,9049],{"class":145,"line":2518},[143,9046,1052],{"class":755},[143,9048,2873],{"class":156},[143,9050,2876],{"class":149},[143,9052,9053],{"class":145,"line":2524},[143,9054,2449],{"class":149},[143,9056,9057],{"class":145,"line":2529},[143,9058,9059],{"class":266},"    \u002F\u002F2.创建结构体数组\n",[143,9061,9062,9064,9066,9069,9071,9073],{"class":145,"line":2543},[143,9063,8795],{"class":755},[143,9065,8798],{"class":156},[143,9067,9068],{"class":149}," stuArray[",[143,9070,1122],{"class":280},[143,9072,1979],{"class":149},[143,9074,5808],{"class":755},[143,9076,9077],{"class":145,"line":2548},[143,9078,2930],{"class":149},[143,9080,9081,9083,9085,9087,9089,9091,9093],{"class":145,"line":2554},[143,9082,5817],{"class":149},[143,9084,8816],{"class":163},[143,9086,1419],{"class":149},[143,9088,1691],{"class":280},[143,9090,1419],{"class":149},[143,9092,1352],{"class":280},[143,9094,5830],{"class":149},[143,9096,9097,9099,9101,9103,9105,9107,9109],{"class":145,"line":2575},[143,9098,5817],{"class":149},[143,9100,4578],{"class":163},[143,9102,1419],{"class":149},[143,9104,1616],{"class":280},[143,9106,1419],{"class":149},[143,9108,1616],{"class":280},[143,9110,348],{"class":149},[143,9112,9113],{"class":145,"line":2580},[143,9114,3087],{"class":149},[143,9116,9117],{"class":145,"line":2594},[143,9118,9119],{"class":266},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[143,9121,9122,9125,9127,9130,9132,9134],{"class":145,"line":2599},[143,9123,9124],{"class":149},"    stuArray[",[143,9126,771],{"class":280},[143,9128,9129],{"class":149},"].name",[143,9131,160],{"class":755},[143,9133,4601],{"class":163},[143,9135,290],{"class":149},[143,9137,9138,9140,9142,9145,9147,9149],{"class":145,"line":2628},[143,9139,9124],{"class":149},[143,9141,771],{"class":280},[143,9143,9144],{"class":149},"].age",[143,9146,160],{"class":755},[143,9148,1122],{"class":280},[143,9150,290],{"class":149},[143,9152,9153,9155,9157,9160,9162,9164],{"class":145,"line":2633},[143,9154,9124],{"class":149},[143,9156,771],{"class":280},[143,9158,9159],{"class":149},"].score",[143,9161,160],{"class":755},[143,9163,1122],{"class":280},[143,9165,290],{"class":149},[143,9167,9168],{"class":145,"line":2650},[143,9169,9170],{"class":266},"    \u002F\u002F4.遍历结构体数组\n",[143,9172,9173,9175,9177,9179,9181,9183,9185,9187,9189,9191,9193,9195],{"class":145,"line":2655},[143,9174,4101],{"class":755},[143,9176,2559],{"class":149},[143,9178,1052],{"class":755},[143,9180,3932],{"class":149},[143,9182,160],{"class":755},[143,9184,1234],{"class":280},[143,9186,3939],{"class":149},[143,9188,150],{"class":755},[143,9190,1122],{"class":280},[143,9192,3939],{"class":149},[143,9194,3192],{"class":755},[143,9196,1055],{"class":149},[143,9198,9199],{"class":145,"line":2660},[143,9200,2930],{"class":149},[143,9202,9203,9205,9207,9210,9212,9215,9217,9220,9222],{"class":145,"line":2665},[143,9204,4351],{"class":149},[143,9206,2081],{"class":755},[143,9208,9209],{"class":149},"stuArray[i].name",[143,9211,2081],{"class":755},[143,9213,9214],{"class":149},"stuArray[i].age",[143,9216,2081],{"class":755},[143,9218,9219],{"class":149},"stuArray[i].score",[143,9221,2081],{"class":755},[143,9223,2103],{"class":149},[143,9225,9226],{"class":145,"line":2679},[143,9227,3087],{"class":149},[143,9229,9230],{"class":145,"line":2684},[143,9231,348],{"class":149},[14,9233,9235],{"id":9234},"_43结构体指针","4.3结构体指针",[63,9237,9238],{},"作用：通过指针访问结构体中的成员",[63,9240,9241],{},"利用操作符->可以通过结构体指针访问结构体属性",[133,9243,9245],{"className":1037,"code":9244,"language":1039,"meta":138,"style":138},"#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",[140,9246,9247,9253,9263,9269,9273,9279,9283,9287,9293,9299,9303,9311,9315,9320,9345,9350,9365,9370,9393],{"__ignoreMap":138},[143,9248,9249,9251],{"class":145,"line":146},[143,9250,2850],{"class":755},[143,9252,2853],{"class":163},[143,9254,9255,9257,9259,9261],{"class":145,"line":35},[143,9256,2858],{"class":755},[143,9258,2861],{"class":755},[143,9260,2864],{"class":156},[143,9262,290],{"class":149},[143,9264,9265,9267],{"class":145,"line":46},[143,9266,2850],{"class":755},[143,9268,8649],{"class":163},[143,9270,9271],{"class":145,"line":293},[143,9272,9008],{"class":266},[143,9274,9275,9277],{"class":145,"line":306},[143,9276,8659],{"class":755},[143,9278,8662],{"class":156},[143,9280,9281],{"class":145,"line":319},[143,9282,2449],{"class":149},[143,9284,9285],{"class":145,"line":332},[143,9286,8685],{"class":149},[143,9288,9289,9291],{"class":145,"line":345},[143,9290,2885],{"class":755},[143,9292,8697],{"class":149},[143,9294,9295,9297],{"class":145,"line":701},[143,9296,2885],{"class":755},[143,9298,8709],{"class":149},[143,9300,9301],{"class":145,"line":707},[143,9302,4895],{"class":149},[143,9304,9305,9307,9309],{"class":145,"line":727},[143,9306,1052],{"class":755},[143,9308,2873],{"class":156},[143,9310,2876],{"class":149},[143,9312,9313],{"class":145,"line":2518},[143,9314,2449],{"class":149},[143,9316,9317],{"class":145,"line":2524},[143,9318,9319],{"class":266},"    \u002F\u002F创建学生结构体变量\n",[143,9321,9322,9324,9326,9329,9331,9333,9335,9337,9339,9341,9343],{"class":145,"line":2529},[143,9323,8795],{"class":755},[143,9325,8798],{"class":156},[143,9327,9328],{"class":149}," s",[143,9330,160],{"class":755},[143,9332,1936],{"class":149},[143,9334,8816],{"class":163},[143,9336,1419],{"class":149},[143,9338,1691],{"class":280},[143,9340,1419],{"class":149},[143,9342,2623],{"class":280},[143,9344,4895],{"class":149},[143,9346,9347],{"class":145,"line":2543},[143,9348,9349],{"class":266},"    \u002F\u002F通过指针指向结构体变量\n",[143,9351,9352,9354,9356,9358,9360,9362],{"class":145,"line":2548},[143,9353,8795],{"class":755},[143,9355,8798],{"class":156},[143,9357,7418],{"class":755},[143,9359,63],{"class":149},[143,9361,7239],{"class":755},[143,9363,9364],{"class":149},"s\n",[143,9366,9367],{"class":145,"line":2554},[143,9368,9369],{"class":266},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[143,9371,9372,9374,9376,9379,9381,9384,9386,9389,9391],{"class":145,"line":2575},[143,9373,2454],{"class":149},[143,9375,2081],{"class":755},[143,9377,9378],{"class":149},"p->name",[143,9380,2081],{"class":755},[143,9382,9383],{"class":149},"p->age",[143,9385,2081],{"class":755},[143,9387,9388],{"class":149},"p->score",[143,9390,2081],{"class":755},[143,9392,2103],{"class":149},[143,9394,9395],{"class":145,"line":2580},[143,9396,348],{"class":149},[14,9398,9400],{"id":9399},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[63,9402,9403],{},"作用：结构体中的成员可以是另一个结构体",[63,9405,9406],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[133,9408,9410],{"className":1037,"code":9409,"language":1039,"meta":138,"style":138},"#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",[140,9411,9412,9418,9428,9434,9439,9447,9451,9455,9461,9467,9471,9476,9483,9487,9494,9498,9504,9509,9513,9521,9525,9530,9535,9540,9551,9563,9574,9587,9598,9609],{"__ignoreMap":138},[143,9413,9414,9416],{"class":145,"line":146},[143,9415,2850],{"class":755},[143,9417,2853],{"class":163},[143,9419,9420,9422,9424,9426],{"class":145,"line":35},[143,9421,2858],{"class":755},[143,9423,2861],{"class":755},[143,9425,2864],{"class":156},[143,9427,290],{"class":149},[143,9429,9430,9432],{"class":145,"line":46},[143,9431,2850],{"class":755},[143,9433,8649],{"class":163},[143,9435,9436],{"class":145,"line":293},[143,9437,9438],{"class":266},"\u002F\u002F定义学生结构体\n",[143,9440,9441,9443,9445],{"class":145,"line":306},[143,9442,8659],{"class":755},[143,9444,8798],{"class":156},[143,9446,3574],{"class":149},[143,9448,9449],{"class":145,"line":319},[143,9450,2449],{"class":149},[143,9452,9453],{"class":145,"line":332},[143,9454,8685],{"class":149},[143,9456,9457,9459],{"class":145,"line":345},[143,9458,2885],{"class":755},[143,9460,8697],{"class":149},[143,9462,9463,9465],{"class":145,"line":701},[143,9464,2885],{"class":755},[143,9466,8709],{"class":149},[143,9468,9469],{"class":145,"line":707},[143,9470,348],{"class":149},[143,9472,9473],{"class":145,"line":727},[143,9474,9475],{"class":266},"\u002F\u002F定义老师结构体\n",[143,9477,9478,9480],{"class":145,"line":2518},[143,9479,8659],{"class":755},[143,9481,9482],{"class":156}," Teacher\n",[143,9484,9485],{"class":145,"line":2524},[143,9486,2449],{"class":149},[143,9488,9489,9491],{"class":145,"line":2529},[143,9490,2885],{"class":755},[143,9492,9493],{"class":149}," id;\n",[143,9495,9496],{"class":145,"line":2543},[143,9497,8685],{"class":149},[143,9499,9500,9502],{"class":145,"line":2548},[143,9501,2885],{"class":755},[143,9503,8697],{"class":149},[143,9505,9506],{"class":145,"line":2554},[143,9507,9508],{"class":149},"    Student stu;\n",[143,9510,9511],{"class":145,"line":2575},[143,9512,348],{"class":149},[143,9514,9515,9517,9519],{"class":145,"line":2580},[143,9516,1052],{"class":755},[143,9518,2873],{"class":156},[143,9520,6878],{"class":149},[143,9522,9523],{"class":145,"line":2594},[143,9524,2449],{"class":149},[143,9526,9527],{"class":145,"line":2599},[143,9528,9529],{"class":266},"    \u002F\u002F结构体嵌套结构体\n",[143,9531,9532],{"class":145,"line":2628},[143,9533,9534],{"class":266},"    \u002F\u002F创建老师\n",[143,9536,9537],{"class":145,"line":2633},[143,9538,9539],{"class":149},"    Teacher t;\n",[143,9541,9542,9545,9547,9549],{"class":145,"line":2650},[143,9543,9544],{"class":149},"    t.id",[143,9546,160],{"class":755},[143,9548,1352],{"class":280},[143,9550,290],{"class":149},[143,9552,9553,9556,9558,9561],{"class":145,"line":2655},[143,9554,9555],{"class":149},"    t.name",[143,9557,160],{"class":755},[143,9559,9560],{"class":163},"\"老王\"",[143,9562,290],{"class":149},[143,9564,9565,9568,9570,9572],{"class":145,"line":2660},[143,9566,9567],{"class":149},"    t.age",[143,9569,160],{"class":755},[143,9571,1691],{"class":280},[143,9573,290],{"class":149},[143,9575,9576,9579,9581,9584],{"class":145,"line":2665},[143,9577,9578],{"class":149},"    t.stu.name",[143,9580,160],{"class":755},[143,9582,9583],{"class":163},"\"小王\"",[143,9585,9586],{"class":149},"；\n",[143,9588,9589,9592,9594,9596],{"class":145,"line":2679},[143,9590,9591],{"class":149},"    t.stu.age",[143,9593,160],{"class":755},[143,9595,1741],{"class":280},[143,9597,290],{"class":149},[143,9599,9600,9603,9605,9607],{"class":145,"line":2684},[143,9601,9602],{"class":149},"    t.stu.score",[143,9604,160],{"class":755},[143,9606,1385],{"class":280},[143,9608,290],{"class":149},[143,9610,9611],{"class":145,"line":3477},[143,9612,348],{"class":149},[14,9614,9616],{"id":9615},"_45结构体做函数参数","4.5结构体做函数参数",[63,9618,9619],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[133,9621,9623],{"className":1037,"code":9622,"language":1039,"meta":138,"style":138},"#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",[140,9624,9625,9631,9641,9647,9653,9657,9661,9667,9673,9677,9682,9687,9704,9708,9741,9745,9750,9769,9773,9804,9808,9816,9820,9829,9841,9853,9865,9878,9886,9899,9911,9919],{"__ignoreMap":138},[143,9626,9627,9629],{"class":145,"line":146},[143,9628,2850],{"class":755},[143,9630,2853],{"class":163},[143,9632,9633,9635,9637,9639],{"class":145,"line":35},[143,9634,2858],{"class":755},[143,9636,2861],{"class":755},[143,9638,2864],{"class":156},[143,9640,290],{"class":149},[143,9642,9643,9645],{"class":145,"line":46},[143,9644,2850],{"class":755},[143,9646,8649],{"class":163},[143,9648,9649,9651],{"class":145,"line":293},[143,9650,8659],{"class":755},[143,9652,8662],{"class":156},[143,9654,9655],{"class":145,"line":306},[143,9656,2449],{"class":149},[143,9658,9659],{"class":145,"line":319},[143,9660,8685],{"class":149},[143,9662,9663,9665],{"class":145,"line":332},[143,9664,2885],{"class":755},[143,9666,8697],{"class":149},[143,9668,9669,9671],{"class":145,"line":345},[143,9670,2885],{"class":755},[143,9672,8709],{"class":149},[143,9674,9675],{"class":145,"line":701},[143,9676,4895],{"class":149},[143,9678,9679],{"class":145,"line":707},[143,9680,9681],{"class":266},"\u002F\u002F打印学生信息的函数\n",[143,9683,9684],{"class":145,"line":727},[143,9685,9686],{"class":266},"\u002F\u002F值传递\n",[143,9688,9689,9691,9694,9696,9698,9700,9702],{"class":145,"line":2518},[143,9690,6264],{"class":755},[143,9692,9693],{"class":156}," printStudent1",[143,9695,1049],{"class":149},[143,9697,8659],{"class":755},[143,9699,8798],{"class":156},[143,9701,9328],{"class":6116},[143,9703,1055],{"class":149},[143,9705,9706],{"class":145,"line":2524},[143,9707,2449],{"class":149},[143,9709,9710,9712,9714,9717,9719,9722,9724,9727,9729,9731,9733,9736,9738],{"class":145,"line":2529},[143,9711,7429],{"class":149},[143,9713,2081],{"class":755},[143,9715,9716],{"class":149}," s.name ",[143,9718,2081],{"class":755},[143,9720,9721],{"class":163}," \" \"",[143,9723,2348],{"class":755},[143,9725,9726],{"class":149}," s.age ",[143,9728,2081],{"class":755},[143,9730,9721],{"class":163},[143,9732,2348],{"class":755},[143,9734,9735],{"class":149}," s.score ",[143,9737,2081],{"class":755},[143,9739,9740],{"class":149}," endl;\n",[143,9742,9743],{"class":145,"line":2543},[143,9744,348],{"class":149},[143,9746,9747],{"class":145,"line":2548},[143,9748,9749],{"class":266},"\u002F\u002F地址传递\n",[143,9751,9752,9754,9757,9759,9761,9763,9765,9767],{"class":145,"line":2554},[143,9753,6264],{"class":755},[143,9755,9756],{"class":156}," printStudent2",[143,9758,1049],{"class":149},[143,9760,8659],{"class":755},[143,9762,8798],{"class":156},[143,9764,7418],{"class":755},[143,9766,1736],{"class":6116},[143,9768,1055],{"class":149},[143,9770,9771],{"class":145,"line":2575},[143,9772,2449],{"class":149},[143,9774,9775,9777,9779,9782,9784,9786,9788,9791,9793,9795,9797,9800,9802],{"class":145,"line":2580},[143,9776,7429],{"class":149},[143,9778,2081],{"class":755},[143,9780,9781],{"class":149}," s->name ",[143,9783,2081],{"class":755},[143,9785,9721],{"class":163},[143,9787,2348],{"class":755},[143,9789,9790],{"class":149}," s->age ",[143,9792,2081],{"class":755},[143,9794,9721],{"class":163},[143,9796,2348],{"class":755},[143,9798,9799],{"class":149}," s->score ",[143,9801,2081],{"class":755},[143,9803,9740],{"class":149},[143,9805,9806],{"class":145,"line":2594},[143,9807,348],{"class":149},[143,9809,9810,9812,9814],{"class":145,"line":2599},[143,9811,1052],{"class":755},[143,9813,2873],{"class":156},[143,9815,2876],{"class":149},[143,9817,9818],{"class":145,"line":2628},[143,9819,2449],{"class":149},[143,9821,9822,9824,9826],{"class":145,"line":2633},[143,9823,8795],{"class":755},[143,9825,8798],{"class":156},[143,9827,9828],{"class":149}," s;\n",[143,9830,9831,9834,9836,9839],{"class":145,"line":2650},[143,9832,9833],{"class":149},"    s.name ",[143,9835,160],{"class":755},[143,9837,9838],{"class":163}," \"张三\"",[143,9840,290],{"class":149},[143,9842,9843,9846,9848,9851],{"class":145,"line":2655},[143,9844,9845],{"class":149},"    s.age ",[143,9847,160],{"class":755},[143,9849,9850],{"class":280}," 20",[143,9852,290],{"class":149},[143,9854,9855,9858,9860,9863],{"class":145,"line":2660},[143,9856,9857],{"class":149},"    s.score ",[143,9859,160],{"class":755},[143,9861,9862],{"class":280}," 85",[143,9864,290],{"class":149},[143,9866,9867,9869,9871,9874,9876],{"class":145,"line":2665},[143,9868,2454],{"class":149},[143,9870,2081],{"class":755},[143,9872,9873],{"class":163},"\"值传递:\"",[143,9875,2081],{"class":755},[143,9877,2103],{"class":149},[143,9879,9880,9883],{"class":145,"line":2679},[143,9881,9882],{"class":156},"    printStudent1",[143,9884,9885],{"class":149},"(s);\n",[143,9887,9888,9890,9892,9895,9897],{"class":145,"line":2684},[143,9889,2454],{"class":149},[143,9891,2081],{"class":755},[143,9893,9894],{"class":163},"\"地址传递:\"",[143,9896,2081],{"class":755},[143,9898,2103],{"class":149},[143,9900,9901,9904,9906,9908],{"class":145,"line":3477},[143,9902,9903],{"class":156},"    printStudent2",[143,9905,1049],{"class":149},[143,9907,1394],{"class":755},[143,9909,9910],{"class":149},"s); \n",[143,9912,9913,9915,9917],{"class":145,"line":3491},[143,9914,4990],{"class":755},[143,9916,4993],{"class":280},[143,9918,290],{"class":149},[143,9920,9921],{"class":145,"line":3499},[143,9922,348],{"class":149},[63,9924,9925],{},"注意：",[232,9927,9928,9931],{},[22,9929,9930],{},"1.先定义结构体，不要在函数中写结构体的定义",[22,9932,9933],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9935,9937],{"id":9936},"_46结构体中const使用场景","4.6结构体中const使用场景",[63,9939,9940],{},"用const防止误操作",[133,9942,9944],{"className":1037,"code":9943,"language":1039,"meta":138,"style":138},"#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",[140,9945,9946,9952,9962,9968,9973,9977,9981,9987,9993,9997,10013,10017,10040,10044,10052,10056,10077,10084,10088],{"__ignoreMap":138},[143,9947,9948,9950],{"class":145,"line":146},[143,9949,2850],{"class":755},[143,9951,2853],{"class":163},[143,9953,9954,9956,9958,9960],{"class":145,"line":35},[143,9955,2858],{"class":755},[143,9957,2861],{"class":755},[143,9959,2864],{"class":156},[143,9961,290],{"class":149},[143,9963,9964,9966],{"class":145,"line":46},[143,9965,2850],{"class":755},[143,9967,8649],{"class":163},[143,9969,9970],{"class":145,"line":293},[143,9971,9972],{"class":149},"sctuct Student\n",[143,9974,9975],{"class":145,"line":306},[143,9976,2449],{"class":149},[143,9978,9979],{"class":145,"line":319},[143,9980,8685],{"class":149},[143,9982,9983,9985],{"class":145,"line":332},[143,9984,2885],{"class":755},[143,9986,8697],{"class":149},[143,9988,9989,9991],{"class":145,"line":345},[143,9990,2885],{"class":755},[143,9992,8709],{"class":149},[143,9994,9995],{"class":145,"line":701},[143,9996,4895],{"class":149},[143,9998,9999,10001,10004,10006,10009,10011],{"class":145,"line":707},[143,10000,6264],{"class":755},[143,10002,10003],{"class":156}," printStudents",[143,10005,1049],{"class":149},[143,10007,10008],{"class":156},"student",[143,10010,9328],{"class":6116},[143,10012,1055],{"class":149},[143,10014,10015],{"class":145,"line":727},[143,10016,2449],{"class":149},[143,10018,10019,10021,10023,10026,10028,10031,10033,10036,10038],{"class":145,"line":2518},[143,10020,2454],{"class":149},[143,10022,2081],{"class":755},[143,10024,10025],{"class":149},"s.name",[143,10027,2081],{"class":755},[143,10029,10030],{"class":149},"s.age",[143,10032,2081],{"class":755},[143,10034,10035],{"class":149},"s.score",[143,10037,2081],{"class":755},[143,10039,2103],{"class":149},[143,10041,10042],{"class":145,"line":2524},[143,10043,348],{"class":149},[143,10045,10046,10048,10050],{"class":145,"line":2529},[143,10047,1052],{"class":755},[143,10049,2873],{"class":156},[143,10051,6878],{"class":149},[143,10053,10054],{"class":145,"line":2543},[143,10055,2449],{"class":149},[143,10057,10058,10061,10063,10065,10067,10069,10071,10073,10075],{"class":145,"line":2548},[143,10059,10060],{"class":149},"    Student s",[143,10062,160],{"class":755},[143,10064,1936],{"class":149},[143,10066,8816],{"class":163},[143,10068,1419],{"class":149},[143,10070,1691],{"class":280},[143,10072,1419],{"class":149},[143,10074,1691],{"class":280},[143,10076,4895],{"class":149},[143,10078,10079,10082],{"class":145,"line":2554},[143,10080,10081],{"class":156},"    printStudent",[143,10083,9885],{"class":149},[143,10085,10086],{"class":145,"line":2575},[143,10087,3300],{"emptyLinePlaceholder":976},[143,10089,10090],{"class":145,"line":2580},[143,10091,348],{"class":149},[63,10093,9925],{},[232,10095,10096,10099,10102],{},[22,10097,10098],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[22,10100,10101],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[22,10103,10104],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[133,10106,10108],{"className":1037,"code":10107,"language":1039,"meta":138,"style":138},"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",[140,10109,10110,10129,10133,10138,10158],{"__ignoreMap":138},[143,10111,10112,10114,10116,10118,10120,10123,10125,10127],{"class":145,"line":146},[143,10113,6264],{"class":755},[143,10115,10003],{"class":156},[143,10117,1049],{"class":149},[143,10119,7692],{"class":755},[143,10121,10122],{"class":156}," student",[143,10124,7418],{"class":755},[143,10126,1736],{"class":6116},[143,10128,1055],{"class":149},[143,10130,10131],{"class":145,"line":35},[143,10132,2449],{"class":149},[143,10134,10135],{"class":145,"line":46},[143,10136,10137],{"class":266},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[143,10139,10140,10142,10144,10146,10148,10150,10152,10154,10156],{"class":145,"line":293},[143,10141,2454],{"class":149},[143,10143,2081],{"class":755},[143,10145,10025],{"class":149},[143,10147,2081],{"class":755},[143,10149,10030],{"class":149},[143,10151,2081],{"class":755},[143,10153,10035],{"class":149},[143,10155,2081],{"class":755},[143,10157,2103],{"class":149},[143,10159,10160],{"class":145,"line":306},[143,10161,348],{"class":149},[14,10163,10165],{"id":10164},"_47案例","4.7案例",[19,10167,10168],{},[22,10169,10170],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[133,10172,10174],{"className":1037,"code":10173,"language":1039,"meta":138,"style":138},"#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",[140,10175,10176,10182,10192,10198,10205,10209,10215,10219,10224,10230,10236,10240,10244,10250,10254,10259,10264,10277,10281,10286,10312,10316,10328,10355,10359,10371,10381,10385,10390,10419,10423,10435,10444,10471,10482,10492,10496,10500,10504,10509,10533,10537,10561,10565,10584,10610,10614,10639,10662,10686,10691,10696,10701,10710,10715,10721,10742,10748,10762,10768,10795,10804,10810,10818,10823],{"__ignoreMap":138},[143,10177,10178,10180],{"class":145,"line":146},[143,10179,2850],{"class":755},[143,10181,2853],{"class":163},[143,10183,10184,10186,10188,10190],{"class":145,"line":35},[143,10185,2858],{"class":755},[143,10187,2861],{"class":755},[143,10189,2864],{"class":156},[143,10191,290],{"class":149},[143,10193,10194,10196],{"class":145,"line":46},[143,10195,2850],{"class":755},[143,10197,8649],{"class":163},[143,10199,10200,10202],{"class":145,"line":293},[143,10201,2850],{"class":755},[143,10203,10204],{"class":163},"\u003Cctime>\n",[143,10206,10207],{"class":145,"line":306},[143,10208,9438],{"class":266},[143,10210,10211,10213],{"class":145,"line":319},[143,10212,8659],{"class":755},[143,10214,8662],{"class":156},[143,10216,10217],{"class":145,"line":332},[143,10218,2449],{"class":149},[143,10220,10221],{"class":145,"line":345},[143,10222,10223],{"class":149},"    string sName;\n",[143,10225,10226,10228],{"class":145,"line":701},[143,10227,2885],{"class":755},[143,10229,8697],{"class":149},[143,10231,10232,10234],{"class":145,"line":707},[143,10233,2885],{"class":755},[143,10235,8709],{"class":149},[143,10237,10238],{"class":145,"line":727},[143,10239,4895],{"class":149},[143,10241,10242],{"class":145,"line":2518},[143,10243,9475],{"class":266},[143,10245,10246,10248],{"class":145,"line":2524},[143,10247,8659],{"class":755},[143,10249,9482],{"class":156},[143,10251,10252],{"class":145,"line":2529},[143,10253,2449],{"class":149},[143,10255,10256],{"class":145,"line":2543},[143,10257,10258],{"class":149},"    string tName;\n",[143,10260,10261],{"class":145,"line":2548},[143,10262,10263],{"class":266},"    \u002F\u002F学生数组\n",[143,10265,10266,10268,10270,10273,10275],{"class":145,"line":2554},[143,10267,8795],{"class":755},[143,10269,8798],{"class":156},[143,10271,10272],{"class":149}," sArray[",[143,10274,1360],{"class":280},[143,10276,5590],{"class":149},[143,10278,10279],{"class":145,"line":2575},[143,10280,4895],{"class":149},[143,10282,10283],{"class":145,"line":2580},[143,10284,10285],{"class":266},"\u002F\u002F给老师和学生赋值的函数\n",[143,10287,10288,10290,10293,10295,10297,10300,10303,10306,10308,10310],{"class":145,"line":2594},[143,10289,6264],{"class":755},[143,10291,10292],{"class":156}," allocateSpace",[143,10294,1049],{"class":149},[143,10296,8659],{"class":755},[143,10298,10299],{"class":156}," Teacher",[143,10301,10302],{"class":6116}," tArray",[143,10304,10305],{"class":149},"[],",[143,10307,1052],{"class":755},[143,10309,8231],{"class":6116},[143,10311,1055],{"class":149},[143,10313,10314],{"class":145,"line":2599},[143,10315,2449],{"class":149},[143,10317,10318,10321,10323,10326],{"class":145,"line":2628},[143,10319,10320],{"class":149},"    string nameSeed",[143,10322,160],{"class":755},[143,10324,10325],{"class":163},"\"ABCDE\"",[143,10327,290],{"class":149},[143,10329,10330,10332,10334,10336,10339,10341,10343,10346,10348,10351,10353],{"class":145,"line":2633},[143,10331,4101],{"class":755},[143,10333,2559],{"class":149},[143,10335,1052],{"class":755},[143,10337,10338],{"class":149}," i ",[143,10340,160],{"class":755},[143,10342,4993],{"class":280},[143,10344,10345],{"class":149},"; i ",[143,10347,150],{"class":755},[143,10349,10350],{"class":149}," len; i",[143,10352,3192],{"class":755},[143,10354,1055],{"class":149},[143,10356,10357],{"class":145,"line":2650},[143,10358,2930],{"class":149},[143,10360,10361,10364,10366,10369],{"class":145,"line":2655},[143,10362,10363],{"class":149},"        tArray[i].tName ",[143,10365,160],{"class":755},[143,10367,10368],{"class":163}," \"Teacher_\"",[143,10370,290],{"class":149},[143,10372,10373,10375,10378],{"class":145,"line":2660},[143,10374,10363],{"class":149},[143,10376,10377],{"class":755},"+=",[143,10379,10380],{"class":149},"nameSeed[i];\n",[143,10382,10383],{"class":145,"line":2665},[143,10384,3300],{"emptyLinePlaceholder":976},[143,10386,10387],{"class":145,"line":2679},[143,10388,10389],{"class":266},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[143,10391,10392,10394,10396,10398,10401,10403,10405,10408,10410,10412,10415,10417],{"class":145,"line":2684},[143,10393,4303],{"class":755},[143,10395,2559],{"class":149},[143,10397,1052],{"class":755},[143,10399,10400],{"class":149}," j ",[143,10402,160],{"class":755},[143,10404,4993],{"class":280},[143,10406,10407],{"class":149},"; j ",[143,10409,150],{"class":755},[143,10411,3048],{"class":280},[143,10413,10414],{"class":149},"; j",[143,10416,3192],{"class":755},[143,10418,1055],{"class":149},[143,10420,10421],{"class":145,"line":3477},[143,10422,3410],{"class":149},[143,10424,10425,10428,10430,10433],{"class":145,"line":3491},[143,10426,10427],{"class":149},"            tArray[i].sArray[j].sName ",[143,10429,160],{"class":755},[143,10431,10432],{"class":163}," \"Student_\"",[143,10434,290],{"class":149},[143,10436,10437,10439,10441],{"class":145,"line":3499},[143,10438,10427],{"class":149},[143,10440,10377],{"class":755},[143,10442,10443],{"class":149}," nameSeed[j];\n",[143,10445,10446,10449,10452,10454,10456,10458,10460,10462,10464,10466,10468],{"class":145,"line":3504},[143,10447,10448],{"class":755},"            int",[143,10450,10451],{"class":149}," random",[143,10453,160],{"class":755},[143,10455,3324],{"class":156},[143,10457,3327],{"class":149},[143,10459,1369],{"class":755},[143,10461,1947],{"class":280},[143,10463,1522],{"class":755},[143,10465,1442],{"class":280},[143,10467,1101],{"class":149},[143,10469,10470],{"class":266},"\u002F\u002F40~99\n",[143,10472,10473,10476,10478,10480],{"class":145,"line":3510},[143,10474,10475],{"class":149},"            tArray[i].sArray[j].age ",[143,10477,160],{"class":755},[143,10479,9850],{"class":280},[143,10481,290],{"class":149},[143,10483,10484,10487,10489],{"class":145,"line":3516},[143,10485,10486],{"class":149},"            tArray[i].sArray[j].score ",[143,10488,160],{"class":755},[143,10490,10491],{"class":149}," random;\n",[143,10493,10494],{"class":145,"line":3521},[143,10495,3429],{"class":149},[143,10497,10498],{"class":145,"line":8848},[143,10499,3087],{"class":149},[143,10501,10502],{"class":145,"line":8872},[143,10503,348],{"class":149},[143,10505,10506],{"class":145,"line":8877},[143,10507,10508],{"class":266},"\u002F\u002F打印所有信息的函数\n",[143,10510,10511,10513,10516,10518,10520,10522,10524,10527,10529,10531],{"class":145,"line":8883},[143,10512,6264],{"class":755},[143,10514,10515],{"class":156}," printInfo",[143,10517,1049],{"class":149},[143,10519,8659],{"class":755},[143,10521,10299],{"class":156},[143,10523,10302],{"class":6116},[143,10525,10526],{"class":149},"[], ",[143,10528,1052],{"class":755},[143,10530,8231],{"class":6116},[143,10532,1055],{"class":149},[143,10534,10535],{"class":145,"line":8910},[143,10536,2449],{"class":149},[143,10538,10539,10541,10543,10545,10547,10549,10551,10553,10555,10557,10559],{"class":145,"line":8915},[143,10540,4101],{"class":755},[143,10542,2559],{"class":149},[143,10544,1052],{"class":755},[143,10546,10338],{"class":149},[143,10548,160],{"class":755},[143,10550,4993],{"class":280},[143,10552,10345],{"class":149},[143,10554,150],{"class":755},[143,10556,10350],{"class":149},[143,10558,3192],{"class":755},[143,10560,1055],{"class":149},[143,10562,10563],{"class":145,"line":8921},[143,10564,2930],{"class":149},[143,10566,10567,10570,10572,10575,10577,10580,10582],{"class":145,"line":8933},[143,10568,10569],{"class":149},"        cout ",[143,10571,2081],{"class":755},[143,10573,10574],{"class":163}," \"Teacher: \"",[143,10576,2348],{"class":755},[143,10578,10579],{"class":149}," tArray[i].tName ",[143,10581,2081],{"class":755},[143,10583,9740],{"class":149},[143,10585,10586,10588,10590,10592,10594,10596,10598,10600,10602,10604,10606,10608],{"class":145,"line":8945},[143,10587,4303],{"class":755},[143,10589,2559],{"class":149},[143,10591,1052],{"class":755},[143,10593,10400],{"class":149},[143,10595,160],{"class":755},[143,10597,4993],{"class":280},[143,10599,10407],{"class":149},[143,10601,150],{"class":755},[143,10603,3048],{"class":280},[143,10605,10414],{"class":149},[143,10607,3192],{"class":755},[143,10609,1055],{"class":149},[143,10611,10612],{"class":145,"line":8957},[143,10613,3410],{"class":149},[143,10615,10617,10620,10622,10625,10627,10630,10632,10635,10637],{"class":145,"line":10616},47,[143,10618,10619],{"class":149},"            cout ",[143,10621,2081],{"class":755},[143,10623,10624],{"class":163}," \"",[143,10626,2138],{"class":280},[143,10628,10629],{"class":163},"Student: \"",[143,10631,2348],{"class":755},[143,10633,10634],{"class":149}," tArray[i].sArray[j].sName",[143,10636,2081],{"class":755},[143,10638,2103],{"class":149},[143,10640,10642,10644,10646,10648,10650,10653,10655,10658,10660],{"class":145,"line":10641},48,[143,10643,10619],{"class":149},[143,10645,2081],{"class":755},[143,10647,10624],{"class":163},[143,10649,2138],{"class":280},[143,10651,10652],{"class":163},"Age: \"",[143,10654,2348],{"class":755},[143,10656,10657],{"class":149}," tArray[i].sArray[j].age ",[143,10659,2081],{"class":755},[143,10661,9740],{"class":149},[143,10663,10665,10667,10669,10671,10673,10676,10678,10681,10683],{"class":145,"line":10664},49,[143,10666,10619],{"class":149},[143,10668,2081],{"class":755},[143,10670,10624],{"class":163},[143,10672,2138],{"class":280},[143,10674,10675],{"class":163},"Score: \"",[143,10677,2348],{"class":755},[143,10679,10680],{"class":149}," tArray[i].sArray[j].score ",[143,10682,2081],{"class":755},[143,10684,10685],{"class":149}," endl;   \n",[143,10687,10689],{"class":145,"line":10688},50,[143,10690,3429],{"class":149},[143,10692,10694],{"class":145,"line":10693},51,[143,10695,3087],{"class":149},[143,10697,10699],{"class":145,"line":10698},52,[143,10700,348],{"class":149},[143,10702,10704,10706,10708],{"class":145,"line":10703},53,[143,10705,1052],{"class":755},[143,10707,2873],{"class":156},[143,10709,2876],{"class":149},[143,10711,10713],{"class":145,"line":10712},54,[143,10714,2449],{"class":149},[143,10716,10718],{"class":145,"line":10717},55,[143,10719,10720],{"class":266},"    \u002F\u002F随机数种子\n",[143,10722,10724,10726,10728,10730,10732,10734,10736,10738,10740],{"class":145,"line":10723},56,[143,10725,3273],{"class":156},[143,10727,3276],{"class":149},[143,10729,3279],{"class":755},[143,10731,3282],{"class":755},[143,10733,1470],{"class":149},[143,10735,3287],{"class":156},[143,10737,1049],{"class":149},[143,10739,3292],{"class":280},[143,10741,3295],{"class":149},[143,10743,10745],{"class":145,"line":10744},57,[143,10746,10747],{"class":266},"    \u002F\u002F1.创建3名老师的数组\n",[143,10749,10751,10753,10755,10758,10760],{"class":145,"line":10750},58,[143,10752,8795],{"class":755},[143,10754,10299],{"class":156},[143,10756,10757],{"class":149}," tArray[",[143,10759,1116],{"class":280},[143,10761,5590],{"class":149},[143,10763,10765],{"class":145,"line":10764},59,[143,10766,10767],{"class":266},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[143,10769,10771,10773,10776,10778,10781,10784,10786,10788,10791,10793],{"class":145,"line":10770},60,[143,10772,2885],{"class":755},[143,10774,10775],{"class":149}," len ",[143,10777,160],{"class":755},[143,10779,10780],{"class":755}," sizeof",[143,10782,10783],{"class":149},"(tArray) ",[143,10785,1625],{"class":755},[143,10787,10780],{"class":755},[143,10789,10790],{"class":149},"(tArray[",[143,10792,1234],{"class":280},[143,10794,4756],{"class":149},[143,10796,10798,10801],{"class":145,"line":10797},61,[143,10799,10800],{"class":156},"    allocateSpace",[143,10802,10803],{"class":149},"(tArray, len);\n",[143,10805,10807],{"class":145,"line":10806},62,[143,10808,10809],{"class":266},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[143,10811,10813,10816],{"class":145,"line":10812},63,[143,10814,10815],{"class":156},"    printInfo",[143,10817,10803],{"class":149},[143,10819,10821],{"class":145,"line":10820},64,[143,10822,3300],{"emptyLinePlaceholder":976},[143,10824,10826],{"class":145,"line":10825},65,[143,10827,348],{"class":149},[19,10829,10830],{"start":35},[22,10831,10832,10835],{},[25,10833,10834],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[63,10837,10838],{},"五名英雄信息如下：",[133,10840,10844],{"className":10841,"code":10842,"language":10843,"meta":138,"style":138},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[140,10845,10846,10864,10881,10898,10915],{"__ignoreMap":138},[143,10847,10848,10850,10853,10855,10857,10859,10862],{"class":145,"line":146},[143,10849,5817],{"class":149},[143,10851,10852],{"class":163},"\"刘备\"",[143,10854,1419],{"class":149},[143,10856,1816],{"class":280},[143,10858,1419],{"class":149},[143,10860,10861],{"class":163},"\"男\"",[143,10863,5830],{"class":149},[143,10865,10866,10868,10871,10873,10875,10877,10879],{"class":145,"line":35},[143,10867,5817],{"class":149},[143,10869,10870],{"class":163},"\"关羽\"",[143,10872,1419],{"class":149},[143,10874,1791],{"class":280},[143,10876,1419],{"class":149},[143,10878,10861],{"class":163},[143,10880,5830],{"class":149},[143,10882,10883,10885,10888,10890,10892,10894,10896],{"class":145,"line":46},[143,10884,5817],{"class":149},[143,10886,10887],{"class":163},"\"张飞\"",[143,10889,1419],{"class":149},[143,10891,1741],{"class":280},[143,10893,1419],{"class":149},[143,10895,10861],{"class":163},[143,10897,5830],{"class":149},[143,10899,10900,10902,10905,10907,10909,10911,10913],{"class":145,"line":293},[143,10901,5817],{"class":149},[143,10903,10904],{"class":163},"\"赵云\"",[143,10906,1419],{"class":149},[143,10908,1766],{"class":280},[143,10910,1419],{"class":149},[143,10912,10861],{"class":163},[143,10914,5830],{"class":149},[143,10916,10917,10919,10922,10924,10926,10928,10931],{"class":145,"line":306},[143,10918,5817],{"class":149},[143,10920,10921],{"class":163},"\"貂蝉\"",[143,10923,1419],{"class":149},[143,10925,1716],{"class":280},[143,10927,1419],{"class":149},[143,10929,10930],{"class":163},"\"女\"",[143,10932,5830],{"class":149},[63,10934,10935],{},"代码：",[133,10937,10939],{"className":1037,"code":10938,"language":1039,"meta":138,"style":138},"#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",[140,10940,10941,10947,10957,10963,10970,10974,10978,10984,10989,10993,10998,11021,11025,11050,11054,11087,11092,11121,11126,11141,11167,11187,11192,11197,11201,11205,11210,11232,11236,11260,11264,11326,11330,11334,11342,11346,11351,11362,11366,11382,11398,11414,11430,11446,11450,11470,11492,11497,11510,11517,11522,11528,11533,11546,11552],{"__ignoreMap":138},[143,10942,10943,10945],{"class":145,"line":146},[143,10944,2850],{"class":755},[143,10946,2853],{"class":163},[143,10948,10949,10951,10953,10955],{"class":145,"line":35},[143,10950,2858],{"class":755},[143,10952,2861],{"class":755},[143,10954,2864],{"class":156},[143,10956,290],{"class":149},[143,10958,10959,10961],{"class":145,"line":46},[143,10960,2850],{"class":755},[143,10962,8649],{"class":163},[143,10964,10965,10967],{"class":145,"line":293},[143,10966,8659],{"class":755},[143,10968,10969],{"class":156}," Sanguo\n",[143,10971,10972],{"class":145,"line":306},[143,10973,2449],{"class":149},[143,10975,10976],{"class":145,"line":319},[143,10977,8685],{"class":149},[143,10979,10980,10982],{"class":145,"line":332},[143,10981,2885],{"class":755},[143,10983,8697],{"class":149},[143,10985,10986],{"class":145,"line":345},[143,10987,10988],{"class":149},"    string gender;\n",[143,10990,10991],{"class":145,"line":701},[143,10992,4895],{"class":149},[143,10994,10995],{"class":145,"line":707},[143,10996,10997],{"class":266},"\u002F\u002F定义排序函数\n",[143,10999,11000,11002,11004,11006,11009,11011,11013,11015,11017,11019],{"class":145,"line":727},[143,11001,6264],{"class":755},[143,11003,8216],{"class":156},[143,11005,1049],{"class":149},[143,11007,11008],{"class":156},"Sanguo",[143,11010,7418],{"class":755},[143,11012,1736],{"class":6116},[143,11014,1419],{"class":149},[143,11016,1052],{"class":755},[143,11018,8231],{"class":6116},[143,11020,1055],{"class":149},[143,11022,11023],{"class":145,"line":2518},[143,11024,2449],{"class":149},[143,11026,11027,11029,11031,11033,11035,11037,11039,11041,11043,11046,11048],{"class":145,"line":2524},[143,11028,4101],{"class":755},[143,11030,1049],{"class":149},[143,11032,1052],{"class":755},[143,11034,3932],{"class":149},[143,11036,160],{"class":755},[143,11038,1234],{"class":280},[143,11040,3939],{"class":149},[143,11042,150],{"class":755},[143,11044,11045],{"class":149},"len;i",[143,11047,3192],{"class":755},[143,11049,1055],{"class":149},[143,11051,11052],{"class":145,"line":2529},[143,11053,2930],{"class":149},[143,11055,11056,11059,11061,11063,11065,11067,11069,11071,11073,11075,11077,11079,11081,11083,11085],{"class":145,"line":2543},[143,11057,11058],{"class":755},"     for",[143,11060,2559],{"class":149},[143,11062,1052],{"class":755},[143,11064,4310],{"class":149},[143,11066,160],{"class":755},[143,11068,1234],{"class":280},[143,11070,4317],{"class":149},[143,11072,150],{"class":755},[143,11074,8258],{"class":149},[143,11076,1573],{"class":755},[143,11078,771],{"class":280},[143,11080,1573],{"class":755},[143,11082,4450],{"class":149},[143,11084,3192],{"class":755},[143,11086,1055],{"class":149},[143,11088,11089],{"class":145,"line":2548},[143,11090,11091],{"class":149},"     {\n",[143,11093,11094,11097,11100,11102,11105,11107,11110,11112,11114,11116,11118],{"class":145,"line":2554},[143,11095,11096],{"class":755},"         if",[143,11098,11099],{"class":149}," ((s",[143,11101,1522],{"class":755},[143,11103,11104],{"class":149},"j)->age ",[143,11106,1998],{"class":755},[143,11108,11109],{"class":149}," (s",[143,11111,1522],{"class":755},[143,11113,1508],{"class":149},[143,11115,1522],{"class":755},[143,11117,771],{"class":280},[143,11119,11120],{"class":149},")->age)\n",[143,11122,11123],{"class":145,"line":2575},[143,11124,11125],{"class":149},"         {\n",[143,11127,11128,11131,11133,11136,11138],{"class":145,"line":2580},[143,11129,11130],{"class":149},"             Sanguo temp",[143,11132,8053],{"class":755},[143,11134,11135],{"class":149},"(s",[143,11137,1522],{"class":755},[143,11139,11140],{"class":149},"j);\n",[143,11142,11143,11146,11148,11150,11153,11155,11157,11159,11161,11163,11165],{"class":145,"line":2594},[143,11144,11145],{"class":755},"             *",[143,11147,11135],{"class":149},[143,11149,1522],{"class":755},[143,11151,11152],{"class":149},"j)",[143,11154,8053],{"class":755},[143,11156,11135],{"class":149},[143,11158,1522],{"class":755},[143,11160,1508],{"class":149},[143,11162,1522],{"class":755},[143,11164,771],{"class":280},[143,11166,3619],{"class":149},[143,11168,11169,11171,11173,11175,11177,11179,11181,11183,11185],{"class":145,"line":2599},[143,11170,11145],{"class":755},[143,11172,11135],{"class":149},[143,11174,1522],{"class":755},[143,11176,1508],{"class":149},[143,11178,1522],{"class":755},[143,11180,771],{"class":280},[143,11182,1470],{"class":149},[143,11184,160],{"class":755},[143,11186,5180],{"class":149},[143,11188,11189],{"class":145,"line":2628},[143,11190,11191],{"class":149},"         }\n",[143,11193,11194],{"class":145,"line":2633},[143,11195,11196],{"class":149},"     }\n",[143,11198,11199],{"class":145,"line":2650},[143,11200,3087],{"class":149},[143,11202,11203],{"class":145,"line":2655},[143,11204,348],{"class":149},[143,11206,11207],{"class":145,"line":2660},[143,11208,11209],{"class":266},"\u002F\u002F定义打印函数\n",[143,11211,11212,11214,11216,11218,11220,11222,11224,11226,11228,11230],{"class":145,"line":2665},[143,11213,6264],{"class":755},[143,11215,10515],{"class":156},[143,11217,1049],{"class":149},[143,11219,11008],{"class":156},[143,11221,7418],{"class":755},[143,11223,1736],{"class":6116},[143,11225,1419],{"class":149},[143,11227,1052],{"class":755},[143,11229,8231],{"class":6116},[143,11231,1055],{"class":149},[143,11233,11234],{"class":145,"line":2679},[143,11235,2449],{"class":149},[143,11237,11238,11240,11242,11244,11246,11248,11250,11252,11254,11256,11258],{"class":145,"line":2684},[143,11239,4101],{"class":755},[143,11241,2559],{"class":149},[143,11243,1052],{"class":755},[143,11245,3932],{"class":149},[143,11247,160],{"class":755},[143,11249,1234],{"class":280},[143,11251,3939],{"class":149},[143,11253,150],{"class":755},[143,11255,11045],{"class":149},[143,11257,3192],{"class":755},[143,11259,1055],{"class":149},[143,11261,11262],{"class":145,"line":3477},[143,11263,2930],{"class":149},[143,11265,11266,11268,11270,11272,11274,11277,11279,11281,11283,11286,11288,11290,11292,11295,11297,11299,11301,11304,11306,11308,11310,11313,11315,11317,11319,11322,11324],{"class":145,"line":3491},[143,11267,4351],{"class":149},[143,11269,2081],{"class":755},[143,11271,1292],{"class":163},[143,11273,2138],{"class":280},[143,11275,11276],{"class":163},"姓名：\"",[143,11278,2081],{"class":755},[143,11280,11135],{"class":149},[143,11282,1522],{"class":755},[143,11284,11285],{"class":149},"i)->name",[143,11287,2081],{"class":755},[143,11289,1292],{"class":163},[143,11291,2138],{"class":280},[143,11293,11294],{"class":163},"年龄：\"",[143,11296,2081],{"class":755},[143,11298,11135],{"class":149},[143,11300,1522],{"class":755},[143,11302,11303],{"class":149},"i)->age",[143,11305,2081],{"class":755},[143,11307,1292],{"class":163},[143,11309,2138],{"class":280},[143,11311,11312],{"class":163},"性别：\"",[143,11314,2081],{"class":755},[143,11316,11135],{"class":149},[143,11318,1522],{"class":755},[143,11320,11321],{"class":149},"i)->gender",[143,11323,2081],{"class":755},[143,11325,2103],{"class":149},[143,11327,11328],{"class":145,"line":3499},[143,11329,3087],{"class":149},[143,11331,11332],{"class":145,"line":3504},[143,11333,348],{"class":149},[143,11335,11336,11338,11340],{"class":145,"line":3510},[143,11337,1052],{"class":755},[143,11339,2873],{"class":156},[143,11341,2876],{"class":149},[143,11343,11344],{"class":145,"line":3516},[143,11345,2449],{"class":149},[143,11347,11348],{"class":145,"line":3521},[143,11349,11350],{"class":266},"    \u002F\u002F定义结构体变量\n",[143,11352,11353,11356,11358,11360],{"class":145,"line":8848},[143,11354,11355],{"class":149},"    Sanguo s1[",[143,11357,1360],{"class":280},[143,11359,1979],{"class":149},[143,11361,5808],{"class":755},[143,11363,11364],{"class":145,"line":8872},[143,11365,2930],{"class":149},[143,11367,11368,11370,11372,11374,11376,11378,11380],{"class":145,"line":8877},[143,11369,5817],{"class":149},[143,11371,10852],{"class":163},[143,11373,1419],{"class":149},[143,11375,1816],{"class":280},[143,11377,1419],{"class":149},[143,11379,10861],{"class":163},[143,11381,5830],{"class":149},[143,11383,11384,11386,11388,11390,11392,11394,11396],{"class":145,"line":8883},[143,11385,5817],{"class":149},[143,11387,10870],{"class":163},[143,11389,1419],{"class":149},[143,11391,1791],{"class":280},[143,11393,1419],{"class":149},[143,11395,10861],{"class":163},[143,11397,5830],{"class":149},[143,11399,11400,11402,11404,11406,11408,11410,11412],{"class":145,"line":8910},[143,11401,5817],{"class":149},[143,11403,10887],{"class":163},[143,11405,1419],{"class":149},[143,11407,1741],{"class":280},[143,11409,1419],{"class":149},[143,11411,10861],{"class":163},[143,11413,5830],{"class":149},[143,11415,11416,11418,11420,11422,11424,11426,11428],{"class":145,"line":8915},[143,11417,5817],{"class":149},[143,11419,10904],{"class":163},[143,11421,1419],{"class":149},[143,11423,1766],{"class":280},[143,11425,1419],{"class":149},[143,11427,10861],{"class":163},[143,11429,5830],{"class":149},[143,11431,11432,11434,11436,11438,11440,11442,11444],{"class":145,"line":8921},[143,11433,5817],{"class":149},[143,11435,10921],{"class":163},[143,11437,1419],{"class":149},[143,11439,1716],{"class":280},[143,11441,1419],{"class":149},[143,11443,10930],{"class":163},[143,11445,5830],{"class":149},[143,11447,11448],{"class":145,"line":8933},[143,11449,5851],{"class":149},[143,11451,11452,11454,11456,11458,11461,11463,11466,11468],{"class":145,"line":8945},[143,11453,2885],{"class":755},[143,11455,8231],{"class":149},[143,11457,5103],{"class":755},[143,11459,11460],{"class":149},"(s1)",[143,11462,5109],{"class":755},[143,11464,11465],{"class":149},"(s1[",[143,11467,1234],{"class":280},[143,11469,4756],{"class":149},[143,11471,11472,11475,11477,11480,11482,11485,11488,11490],{"class":145,"line":8957},[143,11473,11474],{"class":149},"    Sanguo ",[143,11476,1496],{"class":755},[143,11478,11479],{"class":149},"s ",[143,11481,160],{"class":755},[143,11483,11484],{"class":755}," &",[143,11486,11487],{"class":149},"s1[",[143,11489,1234],{"class":280},[143,11491,5590],{"class":149},[143,11493,11494],{"class":145,"line":10616},[143,11495,11496],{"class":266},"    \u002F\u002F排序前：\n",[143,11498,11499,11501,11503,11506,11508],{"class":145,"line":10641},[143,11500,7429],{"class":149},[143,11502,2081],{"class":755},[143,11504,11505],{"class":163}," \"排序前：\"",[143,11507,2348],{"class":755},[143,11509,9740],{"class":149},[143,11511,11512,11514],{"class":145,"line":10664},[143,11513,10815],{"class":156},[143,11515,11516],{"class":149},"(s,len);\n",[143,11518,11519],{"class":145,"line":10688},[143,11520,11521],{"class":266},"    \u002F\u002F调用排序函数\n",[143,11523,11524,11526],{"class":145,"line":10693},[143,11525,8498],{"class":156},[143,11527,11516],{"class":149},[143,11529,11530],{"class":145,"line":10698},[143,11531,11532],{"class":266},"    \u002F\u002F排序后\n",[143,11534,11535,11537,11539,11542,11544],{"class":145,"line":10703},[143,11536,7429],{"class":149},[143,11538,2081],{"class":755},[143,11540,11541],{"class":163}," \"排序后：\"",[143,11543,2348],{"class":755},[143,11545,9740],{"class":149},[143,11547,11548,11550],{"class":145,"line":10712},[143,11549,10815],{"class":156},[143,11551,11516],{"class":149},[143,11553,11554],{"class":145,"line":10717},[143,11555,348],{"class":149},[63,11557,11558,11559,11561],{},"注意：使用指针时直接用传首地址**&s",[143,11560,1234],{},"**",[954,11563,11564],{},"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":138,"searchDepth":35,"depth":35,"links":11566},[11567,11568,11569,11570,11571,11572,11573],{"id":8603,"depth":35,"text":8604},{"id":8965,"depth":35,"text":8966},{"id":9234,"depth":35,"text":9235},{"id":9399,"depth":35,"text":9400},{"id":9615,"depth":35,"text":9616},{"id":9936,"depth":35,"text":9937},{"id":10164,"depth":35,"text":10165},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8592,"description":8600},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11580,"title":11581,"body":11582,"description":138,"extension":974,"meta":12925,"navigation":976,"path":12926,"seo":12927,"stem":12928,"__hash__":12929},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11583,"toc":12919},[11584,11587,11591,11597,11611,11616,11619,11623,11630,11636,11639,11646,11652,11657,11660,11663,11666,12230,12233,12247,12251,12256,12272,12412,12415,12421,12424,12429,12437,12545,12548,12553,12556,12561,12564,12570,12573,12916],[10,11585,11581],{"id":11586},"_5程序内存模型",[14,11588,11590],{"id":11589},"_51内存分区模型","5.1内存分区模型",[63,11592,11593,11594],{},"C++程序在执行时，将内存大方向划分为",[25,11595,11596],{},"4个区域",[232,11598,11599,11602,11605,11608],{},[22,11600,11601],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[22,11603,11604],{},"全局区：存放全局变量和静态变量以及常量",[22,11606,11607],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[22,11609,11610],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[63,11612,11613],{},[25,11614,11615],{},"内存四区意义：",[63,11617,11618],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[58,11620,11622],{"id":11621},"_511程序运行前","5.1.1程序运行前",[63,11624,11625,11626,11629],{},"​\t在程序编译后，生成了exe可执行程序，",[25,11627,11628],{},"未执行该程序前","分为两个区域",[63,11631,11632,11633],{},"​\t",[25,11634,11635],{},"代码区：",[63,11637,11638],{},"​\t\t存放 CPU 执行的机器指令",[63,11640,11641,11642,11645],{},"​\t\t代码区是",[25,11643,11644],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[63,11647,11641,11648,11651],{},[25,11649,11650],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[63,11653,11632,11654],{},[25,11655,11656],{},"全局区：",[63,11658,11659],{},"​\t\t全局变量和静态变量存放在此.",[63,11661,11662],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[63,11664,11665],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[133,11667,11669],{"className":1037,"code":11668,"language":1039,"meta":138,"style":138},"\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",[140,11670,11671,11676,11689,11702,11706,11711,11726,11741,11745,11754,11758,11763,11776,11789,11793,11798,11824,11850,11854,11881,11907,11911,11916,11932,11947,11951,11977,12003,12007,12032,12057,12061,12087,12113,12117,12133,12148,12174,12200,12204,12214,12218,12226],{"__ignoreMap":138},[143,11672,11673],{"class":145,"line":146},[143,11674,11675],{"class":266},"\u002F\u002F全局变量\n",[143,11677,11678,11680,11683,11685,11687],{"class":145,"line":35},[143,11679,1052],{"class":755},[143,11681,11682],{"class":149}," g_a ",[143,11684,160],{"class":755},[143,11686,2938],{"class":280},[143,11688,290],{"class":149},[143,11690,11691,11693,11696,11698,11700],{"class":145,"line":46},[143,11692,1052],{"class":755},[143,11694,11695],{"class":149}," g_b ",[143,11697,160],{"class":755},[143,11699,2938],{"class":280},[143,11701,290],{"class":149},[143,11703,11704],{"class":145,"line":293},[143,11705,3300],{"emptyLinePlaceholder":976},[143,11707,11708],{"class":145,"line":306},[143,11709,11710],{"class":266},"\u002F\u002F全局常量\n",[143,11712,11713,11715,11717,11720,11722,11724],{"class":145,"line":319},[143,11714,7692],{"class":755},[143,11716,3282],{"class":755},[143,11718,11719],{"class":149}," c_g_a ",[143,11721,160],{"class":755},[143,11723,2938],{"class":280},[143,11725,290],{"class":149},[143,11727,11728,11730,11732,11735,11737,11739],{"class":145,"line":332},[143,11729,7692],{"class":755},[143,11731,3282],{"class":755},[143,11733,11734],{"class":149}," c_g_b ",[143,11736,160],{"class":755},[143,11738,2938],{"class":280},[143,11740,290],{"class":149},[143,11742,11743],{"class":145,"line":345},[143,11744,3300],{"emptyLinePlaceholder":976},[143,11746,11747,11749,11751],{"class":145,"line":701},[143,11748,1052],{"class":755},[143,11750,2873],{"class":156},[143,11752,11753],{"class":149},"() {\n",[143,11755,11756],{"class":145,"line":707},[143,11757,3300],{"emptyLinePlaceholder":976},[143,11759,11760],{"class":145,"line":727},[143,11761,11762],{"class":266},"    \u002F\u002F局部变量\n",[143,11764,11765,11767,11770,11772,11774],{"class":145,"line":2518},[143,11766,2885],{"class":755},[143,11768,11769],{"class":149}," a ",[143,11771,160],{"class":755},[143,11773,2938],{"class":280},[143,11775,290],{"class":149},[143,11777,11778,11780,11783,11785,11787],{"class":145,"line":2524},[143,11779,2885],{"class":755},[143,11781,11782],{"class":149}," b ",[143,11784,160],{"class":755},[143,11786,2938],{"class":280},[143,11788,290],{"class":149},[143,11790,11791],{"class":145,"line":2529},[143,11792,3300],{"emptyLinePlaceholder":976},[143,11794,11795],{"class":145,"line":2543},[143,11796,11797],{"class":266},"    \u002F\u002F打印地址\n",[143,11799,11800,11802,11804,11807,11809,11811,11813,11815,11817,11820,11822],{"class":145,"line":2548},[143,11801,7429],{"class":149},[143,11803,2081],{"class":755},[143,11805,11806],{"class":163}," \"局部变量a地址为： \"",[143,11808,2348],{"class":755},[143,11810,2559],{"class":149},[143,11812,1052],{"class":755},[143,11814,1470],{"class":149},[143,11816,1394],{"class":755},[143,11818,11819],{"class":149},"a ",[143,11821,2081],{"class":755},[143,11823,9740],{"class":149},[143,11825,11826,11828,11830,11833,11835,11837,11839,11841,11843,11846,11848],{"class":145,"line":2554},[143,11827,7429],{"class":149},[143,11829,2081],{"class":755},[143,11831,11832],{"class":163}," \"局部变量b地址为： \"",[143,11834,2348],{"class":755},[143,11836,2559],{"class":149},[143,11838,1052],{"class":755},[143,11840,1470],{"class":149},[143,11842,1394],{"class":755},[143,11844,11845],{"class":149},"b ",[143,11847,2081],{"class":755},[143,11849,9740],{"class":149},[143,11851,11852],{"class":145,"line":2575},[143,11853,3300],{"emptyLinePlaceholder":976},[143,11855,11856,11858,11860,11863,11865,11868,11870,11872,11874,11877,11879],{"class":145,"line":2580},[143,11857,7429],{"class":149},[143,11859,2081],{"class":755},[143,11861,11862],{"class":163}," \"全局变量g_a地址为： \"",[143,11864,2348],{"class":755},[143,11866,11867],{"class":149},"  (",[143,11869,1052],{"class":755},[143,11871,1470],{"class":149},[143,11873,1394],{"class":755},[143,11875,11876],{"class":149},"g_a ",[143,11878,2081],{"class":755},[143,11880,9740],{"class":149},[143,11882,11883,11885,11887,11890,11892,11894,11896,11898,11900,11903,11905],{"class":145,"line":2594},[143,11884,7429],{"class":149},[143,11886,2081],{"class":755},[143,11888,11889],{"class":163}," \"全局变量g_b地址为： \"",[143,11891,2348],{"class":755},[143,11893,11867],{"class":149},[143,11895,1052],{"class":755},[143,11897,1470],{"class":149},[143,11899,1394],{"class":755},[143,11901,11902],{"class":149},"g_b ",[143,11904,2081],{"class":755},[143,11906,9740],{"class":149},[143,11908,11909],{"class":145,"line":2599},[143,11910,3300],{"emptyLinePlaceholder":976},[143,11912,11913],{"class":145,"line":2628},[143,11914,11915],{"class":266},"    \u002F\u002F静态变量\n",[143,11917,11918,11921,11923,11926,11928,11930],{"class":145,"line":2633},[143,11919,11920],{"class":755},"    static",[143,11922,3282],{"class":755},[143,11924,11925],{"class":149}," s_a ",[143,11927,160],{"class":755},[143,11929,2938],{"class":280},[143,11931,290],{"class":149},[143,11933,11934,11936,11938,11941,11943,11945],{"class":145,"line":2650},[143,11935,11920],{"class":755},[143,11937,3282],{"class":755},[143,11939,11940],{"class":149}," s_b ",[143,11942,160],{"class":755},[143,11944,2938],{"class":280},[143,11946,290],{"class":149},[143,11948,11949],{"class":145,"line":2655},[143,11950,3300],{"emptyLinePlaceholder":976},[143,11952,11953,11955,11957,11960,11962,11964,11966,11968,11970,11973,11975],{"class":145,"line":2660},[143,11954,7429],{"class":149},[143,11956,2081],{"class":755},[143,11958,11959],{"class":163}," \"静态变量s_a地址为： \"",[143,11961,2348],{"class":755},[143,11963,2559],{"class":149},[143,11965,1052],{"class":755},[143,11967,1470],{"class":149},[143,11969,1394],{"class":755},[143,11971,11972],{"class":149},"s_a ",[143,11974,2081],{"class":755},[143,11976,9740],{"class":149},[143,11978,11979,11981,11983,11986,11988,11990,11992,11994,11996,11999,12001],{"class":145,"line":2665},[143,11980,7429],{"class":149},[143,11982,2081],{"class":755},[143,11984,11985],{"class":163}," \"静态变量s_b地址为： \"",[143,11987,2348],{"class":755},[143,11989,2559],{"class":149},[143,11991,1052],{"class":755},[143,11993,1470],{"class":149},[143,11995,1394],{"class":755},[143,11997,11998],{"class":149},"s_b ",[143,12000,2081],{"class":755},[143,12002,9740],{"class":149},[143,12004,12005],{"class":145,"line":2679},[143,12006,3300],{"emptyLinePlaceholder":976},[143,12008,12009,12011,12013,12016,12018,12020,12022,12024,12026,12028,12030],{"class":145,"line":2684},[143,12010,7429],{"class":149},[143,12012,2081],{"class":755},[143,12014,12015],{"class":163}," \"字符串常量地址为： \"",[143,12017,2348],{"class":755},[143,12019,2559],{"class":149},[143,12021,1052],{"class":755},[143,12023,1470],{"class":149},[143,12025,1394],{"class":755},[143,12027,2098],{"class":163},[143,12029,2348],{"class":755},[143,12031,9740],{"class":149},[143,12033,12034,12036,12038,12040,12042,12044,12046,12048,12050,12053,12055],{"class":145,"line":3477},[143,12035,7429],{"class":149},[143,12037,2081],{"class":755},[143,12039,12015],{"class":163},[143,12041,2348],{"class":755},[143,12043,2559],{"class":149},[143,12045,1052],{"class":755},[143,12047,1470],{"class":149},[143,12049,1394],{"class":755},[143,12051,12052],{"class":163},"\"hello world1\"",[143,12054,2348],{"class":755},[143,12056,9740],{"class":149},[143,12058,12059],{"class":145,"line":3491},[143,12060,3300],{"emptyLinePlaceholder":976},[143,12062,12063,12065,12067,12070,12072,12074,12076,12078,12080,12083,12085],{"class":145,"line":3499},[143,12064,7429],{"class":149},[143,12066,2081],{"class":755},[143,12068,12069],{"class":163}," \"全局常量c_g_a地址为： \"",[143,12071,2348],{"class":755},[143,12073,2559],{"class":149},[143,12075,1052],{"class":755},[143,12077,1470],{"class":149},[143,12079,1394],{"class":755},[143,12081,12082],{"class":149},"c_g_a ",[143,12084,2081],{"class":755},[143,12086,9740],{"class":149},[143,12088,12089,12091,12093,12096,12098,12100,12102,12104,12106,12109,12111],{"class":145,"line":3504},[143,12090,7429],{"class":149},[143,12092,2081],{"class":755},[143,12094,12095],{"class":163}," \"全局常量c_g_b地址为： \"",[143,12097,2348],{"class":755},[143,12099,2559],{"class":149},[143,12101,1052],{"class":755},[143,12103,1470],{"class":149},[143,12105,1394],{"class":755},[143,12107,12108],{"class":149},"c_g_b ",[143,12110,2081],{"class":755},[143,12112,9740],{"class":149},[143,12114,12115],{"class":145,"line":3510},[143,12116,3300],{"emptyLinePlaceholder":976},[143,12118,12119,12122,12124,12127,12129,12131],{"class":145,"line":3516},[143,12120,12121],{"class":755},"    const",[143,12123,3282],{"class":755},[143,12125,12126],{"class":149}," c_l_a ",[143,12128,160],{"class":755},[143,12130,2938],{"class":280},[143,12132,290],{"class":149},[143,12134,12135,12137,12139,12142,12144,12146],{"class":145,"line":3521},[143,12136,12121],{"class":755},[143,12138,3282],{"class":755},[143,12140,12141],{"class":149}," c_l_b ",[143,12143,160],{"class":755},[143,12145,2938],{"class":280},[143,12147,290],{"class":149},[143,12149,12150,12152,12154,12157,12159,12161,12163,12165,12167,12170,12172],{"class":145,"line":8848},[143,12151,7429],{"class":149},[143,12153,2081],{"class":755},[143,12155,12156],{"class":163}," \"局部常量c_l_a地址为： \"",[143,12158,2348],{"class":755},[143,12160,2559],{"class":149},[143,12162,1052],{"class":755},[143,12164,1470],{"class":149},[143,12166,1394],{"class":755},[143,12168,12169],{"class":149},"c_l_a ",[143,12171,2081],{"class":755},[143,12173,9740],{"class":149},[143,12175,12176,12178,12180,12183,12185,12187,12189,12191,12193,12196,12198],{"class":145,"line":8872},[143,12177,7429],{"class":149},[143,12179,2081],{"class":755},[143,12181,12182],{"class":163}," \"局部常量c_l_b地址为： \"",[143,12184,2348],{"class":755},[143,12186,2559],{"class":149},[143,12188,1052],{"class":755},[143,12190,1470],{"class":149},[143,12192,1394],{"class":755},[143,12194,12195],{"class":149},"c_l_b ",[143,12197,2081],{"class":755},[143,12199,9740],{"class":149},[143,12201,12202],{"class":145,"line":8877},[143,12203,3300],{"emptyLinePlaceholder":976},[143,12205,12206,12208,12210,12212],{"class":145,"line":8883},[143,12207,3203],{"class":156},[143,12209,1049],{"class":149},[143,12211,3208],{"class":163},[143,12213,3619],{"class":149},[143,12215,12216],{"class":145,"line":8910},[143,12217,3300],{"emptyLinePlaceholder":976},[143,12219,12220,12222,12224],{"class":145,"line":8915},[143,12221,4990],{"class":755},[143,12223,4993],{"class":280},[143,12225,290],{"class":149},[143,12227,12228],{"class":145,"line":8921},[143,12229,348],{"class":149},[63,12231,12232],{},"总结：",[232,12234,12235,12238,12241,12244],{},[22,12236,12237],{},"c++中程序运行前分为全局区和代码区",[22,12239,12240],{},"代码区特点是共享和只读",[22,12242,12243],{},"全局区中存放全局变量、静态变量、常量",[22,12245,12246],{},"常量区中存放const修饰的全局常量和字符串常量",[58,12248,12250],{"id":12249},"_512程序运行后","5.1.2程序运行后",[19,12252,12253],{},[22,12254,12255],{},"栈区：",[232,12257,12258,12265],{},[22,12259,12260,12261,12264],{},"由编译器自动分配释放, 存放",[25,12262,12263],{},"函数的参数值,局部变量","等",[22,12266,12267,12268,12271],{},"注意事项：",[25,12269,12270],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[133,12273,12275],{"className":1037,"code":12274,"language":1039,"meta":138,"style":138},"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",[140,12276,12277,12288,12292,12307,12319,12323,12327,12335,12340,12355,12373,12390,12400,12408],{"__ignoreMap":138},[143,12278,12279,12281,12283,12286],{"class":145,"line":146},[143,12280,1052],{"class":755},[143,12282,7418],{"class":755},[143,12284,12285],{"class":156}," func",[143,12287,2876],{"class":149},[143,12289,12290],{"class":145,"line":35},[143,12291,2449],{"class":149},[143,12293,12294,12296,12298,12300,12302,12304],{"class":145,"line":46},[143,12295,2885],{"class":755},[143,12297,11769],{"class":149},[143,12299,160],{"class":755},[143,12301,2938],{"class":280},[143,12303,1101],{"class":149},[143,12305,12306],{"class":266}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[143,12308,12309,12311,12313,12316],{"class":145,"line":293},[143,12310,4990],{"class":755},[143,12312,11484],{"class":755},[143,12314,12315],{"class":149},"a;",[143,12317,12318],{"class":266}," \u002F\u002F放回局部变量的地址\n",[143,12320,12321],{"class":145,"line":306},[143,12322,348],{"class":149},[143,12324,12325],{"class":145,"line":319},[143,12326,3300],{"emptyLinePlaceholder":976},[143,12328,12329,12331,12333],{"class":145,"line":332},[143,12330,1052],{"class":755},[143,12332,2873],{"class":156},[143,12334,11753],{"class":149},[143,12336,12337],{"class":145,"line":345},[143,12338,12339],{"class":266},"    \u002F\u002F接受func的返回值\n",[143,12341,12342,12344,12346,12349,12351,12353],{"class":145,"line":701},[143,12343,2885],{"class":755},[143,12345,7418],{"class":755},[143,12347,12348],{"class":149},"p ",[143,12350,160],{"class":755},[143,12352,12285],{"class":156},[143,12354,6536],{"class":149},[143,12356,12357,12359,12361,12363,12365,12367,12370],{"class":145,"line":707},[143,12358,7429],{"class":149},[143,12360,2081],{"class":755},[143,12362,7418],{"class":755},[143,12364,12348],{"class":149},[143,12366,2081],{"class":755},[143,12368,12369],{"class":149}," endl;",[143,12371,12372],{"class":266}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[143,12374,12375,12377,12379,12381,12383,12385,12387],{"class":145,"line":727},[143,12376,7429],{"class":149},[143,12378,2081],{"class":755},[143,12380,7418],{"class":755},[143,12382,12348],{"class":149},[143,12384,2081],{"class":755},[143,12386,12369],{"class":149},[143,12388,12389],{"class":266}," \u002F\u002F第二次这个数据不再保留\n",[143,12391,12392,12394,12396,12398],{"class":145,"line":2518},[143,12393,3203],{"class":156},[143,12395,1049],{"class":149},[143,12397,3208],{"class":163},[143,12399,3619],{"class":149},[143,12401,12402,12404,12406],{"class":145,"line":2524},[143,12403,4990],{"class":755},[143,12405,4993],{"class":280},[143,12407,290],{"class":149},[143,12409,12410],{"class":145,"line":2529},[143,12411,348],{"class":149},[63,12413,12414],{},"输出结果：",[63,12416,12417],{},[29,12418],{"alt":12419,"src":12420},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[63,12422,12423],{},"总结：不要返回局部变量的地址",[19,12425,12426],{"start":35},[22,12427,12428],{},"堆区",[232,12430,12431,12434],{},[22,12432,12433],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[22,12435,12436],{},"在c++中主要利用new在堆区开辟内存",[133,12438,12440],{"className":1037,"code":12439,"language":1039,"meta":138,"style":138},"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",[140,12441,12442,12457,12461,12466,12487,12494,12498,12506,12510,12515,12529,12541],{"__ignoreMap":138},[143,12443,12444,12446,12449,12452,12454],{"class":145,"line":146},[143,12445,1052],{"class":755},[143,12447,12448],{"class":755},"  *",[143,12450,12451],{"class":156},"func",[143,12453,3327],{"class":149},[143,12455,12456],{"class":266},"  \u002F\u002F函数返回指针\n",[143,12458,12459],{"class":145,"line":35},[143,12460,2449],{"class":149},[143,12462,12463],{"class":145,"line":46},[143,12464,12465],{"class":266},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[143,12467,12468,12470,12472,12474,12476,12479,12481,12483,12485],{"class":145,"line":293},[143,12469,5047],{"class":755},[143,12471,7418],{"class":755},[143,12473,63],{"class":149},[143,12475,160],{"class":755},[143,12477,12478],{"class":755}," new",[143,12480,3282],{"class":755},[143,12482,1049],{"class":149},[143,12484,1487],{"class":280},[143,12486,3619],{"class":149},[143,12488,12489,12491],{"class":145,"line":306},[143,12490,5281],{"class":755},[143,12492,12493],{"class":149}," p;\n",[143,12495,12496],{"class":145,"line":319},[143,12497,348],{"class":149},[143,12499,12500,12502,12504],{"class":145,"line":332},[143,12501,1052],{"class":755},[143,12503,2873],{"class":156},[143,12505,2876],{"class":149},[143,12507,12508],{"class":145,"line":345},[143,12509,2449],{"class":149},[143,12511,12512],{"class":145,"line":701},[143,12513,12514],{"class":266},"    \u002F\u002F在堆区开辟数据\n",[143,12516,12517,12519,12521,12523,12525,12527],{"class":145,"line":707},[143,12518,2885],{"class":755},[143,12520,7418],{"class":755},[143,12522,63],{"class":149},[143,12524,160],{"class":755},[143,12526,12451],{"class":156},[143,12528,6536],{"class":149},[143,12530,12531,12533,12535,12537,12539],{"class":145,"line":727},[143,12532,2454],{"class":149},[143,12534,7319],{"class":755},[143,12536,63],{"class":149},[143,12538,2081],{"class":755},[143,12540,2103],{"class":149},[143,12542,12543],{"class":145,"line":2518},[143,12544,348],{"class":149},[63,12546,12547],{},"图片展示：",[63,12549,12550],{},[29,12551],{"alt":12419,"src":12552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[63,12554,12555],{},"堆区内存由程序员管生死！！！",[19,12557,12558],{"start":46},[22,12559,12560],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[63,12562,12563],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[63,12565,12566,12567],{},"​语法：",[140,12568,12569],{}," new 数据类型",[63,12571,12572],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[133,12574,12576],{"className":1037,"code":12575,"language":1039,"meta":138,"style":138},"\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",[140,12577,12578,12583,12593,12597,12602,12607,12629,12633,12641,12645,12659,12671,12683,12695,12700,12705,12716,12720,12725,12733,12737,12742,12764,12790,12794,12812,12816,12842,12846,12858,12862,12867,12872,12880,12884,12888,12896,12900,12906,12912],{"__ignoreMap":138},[143,12579,12580],{"class":145,"line":146},[143,12581,12582],{"class":266},"\u002F\u002F1.new的基本语法\n",[143,12584,12585,12587,12589,12591],{"class":145,"line":35},[143,12586,1052],{"class":755},[143,12588,7418],{"class":755},[143,12590,12451],{"class":156},[143,12592,2876],{"class":149},[143,12594,12595],{"class":145,"line":46},[143,12596,2449],{"class":149},[143,12598,12599],{"class":145,"line":293},[143,12600,12601],{"class":266},"    \u002F\u002F在堆区创建整型数据\n",[143,12603,12604],{"class":145,"line":306},[143,12605,12606],{"class":266},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[143,12608,12609,12611,12613,12615,12618,12620,12622,12624,12626],{"class":145,"line":319},[143,12610,2885],{"class":755},[143,12612,7418],{"class":755},[143,12614,63],{"class":149},[143,12616,12617],{"class":755},"=new",[143,12619,3282],{"class":755},[143,12621,1049],{"class":149},[143,12623,1487],{"class":280},[143,12625,6866],{"class":149},[143,12627,12628],{"class":266},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[143,12630,12631],{"class":145,"line":332},[143,12632,348],{"class":149},[143,12634,12635,12637,12639],{"class":145,"line":345},[143,12636,6264],{"class":755},[143,12638,6488],{"class":156},[143,12640,2876],{"class":149},[143,12642,12643],{"class":145,"line":701},[143,12644,2449],{"class":149},[143,12646,12647,12649,12651,12653,12655,12657],{"class":145,"line":707},[143,12648,2885],{"class":755},[143,12650,7418],{"class":755},[143,12652,63],{"class":149},[143,12654,160],{"class":755},[143,12656,12451],{"class":156},[143,12658,6536],{"class":149},[143,12660,12661,12663,12665,12667,12669],{"class":145,"line":727},[143,12662,2454],{"class":149},[143,12664,7319],{"class":755},[143,12666,63],{"class":149},[143,12668,2081],{"class":755},[143,12670,2103],{"class":149},[143,12672,12673,12675,12677,12679,12681],{"class":145,"line":2518},[143,12674,2454],{"class":149},[143,12676,7319],{"class":755},[143,12678,63],{"class":149},[143,12680,2081],{"class":755},[143,12682,2103],{"class":149},[143,12684,12685,12687,12689,12691,12693],{"class":145,"line":2524},[143,12686,2454],{"class":149},[143,12688,7319],{"class":755},[143,12690,63],{"class":149},[143,12692,2081],{"class":755},[143,12694,2103],{"class":149},[143,12696,12697],{"class":145,"line":2529},[143,12698,12699],{"class":266},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[143,12701,12702],{"class":145,"line":2543},[143,12703,12704],{"class":266},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[143,12706,12707,12710,12713],{"class":145,"line":2548},[143,12708,12709],{"class":755},"    delete",[143,12711,12712],{"class":149}," p;",[143,12714,12715],{"class":266},"\u002F\u002F删除这块地址\n",[143,12717,12718],{"class":145,"line":2554},[143,12719,348],{"class":149},[143,12721,12722],{"class":145,"line":2575},[143,12723,12724],{"class":266},"\u002F\u002F2.在堆区利用new开辟数组\n",[143,12726,12727,12729,12731],{"class":145,"line":2580},[143,12728,6264],{"class":755},[143,12730,6557],{"class":156},[143,12732,2876],{"class":149},[143,12734,12735],{"class":145,"line":2594},[143,12736,2449],{"class":149},[143,12738,12739],{"class":145,"line":2599},[143,12740,12741],{"class":266},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[143,12743,12744,12746,12748,12750,12752,12754,12756,12758,12761],{"class":145,"line":2628},[143,12745,2885],{"class":755},[143,12747,7418],{"class":755},[143,12749,4780],{"class":149},[143,12751,12617],{"class":755},[143,12753,3282],{"class":755},[143,12755,749],{"class":149},[143,12757,1487],{"class":280},[143,12759,12760],{"class":149},"];",[143,12762,12763],{"class":266},"\u002F\u002F10代表数组有10个元素\n",[143,12765,12766,12768,12770,12772,12774,12776,12778,12780,12782,12784,12786,12788],{"class":145,"line":2633},[143,12767,4101],{"class":755},[143,12769,2559],{"class":149},[143,12771,1052],{"class":755},[143,12773,3932],{"class":149},[143,12775,160],{"class":755},[143,12777,1234],{"class":280},[143,12779,3939],{"class":149},[143,12781,150],{"class":755},[143,12783,1487],{"class":280},[143,12785,3939],{"class":149},[143,12787,3192],{"class":755},[143,12789,1055],{"class":149},[143,12791,12792],{"class":145,"line":2650},[143,12793,2930],{"class":149},[143,12795,12796,12799,12801,12803,12805,12807,12809],{"class":145,"line":2655},[143,12797,12798],{"class":149},"        arr[i]",[143,12800,160],{"class":755},[143,12802,1482],{"class":149},[143,12804,1522],{"class":755},[143,12806,1352],{"class":280},[143,12808,1101],{"class":149},[143,12810,12811],{"class":266},"\u002F\u002F给10个元素赋值100～109\n",[143,12813,12814],{"class":145,"line":2660},[143,12815,3087],{"class":149},[143,12817,12818,12820,12822,12824,12826,12828,12830,12832,12834,12836,12838,12840],{"class":145,"line":2665},[143,12819,4101],{"class":755},[143,12821,2559],{"class":149},[143,12823,1052],{"class":755},[143,12825,3932],{"class":149},[143,12827,160],{"class":755},[143,12829,1234],{"class":280},[143,12831,3939],{"class":149},[143,12833,150],{"class":755},[143,12835,1487],{"class":280},[143,12837,3939],{"class":149},[143,12839,3192],{"class":755},[143,12841,1055],{"class":149},[143,12843,12844],{"class":145,"line":2679},[143,12845,2930],{"class":149},[143,12847,12848,12850,12852,12854,12856],{"class":145,"line":2684},[143,12849,4351],{"class":149},[143,12851,2081],{"class":755},[143,12853,5254],{"class":149},[143,12855,2081],{"class":755},[143,12857,2103],{"class":149},[143,12859,12860],{"class":145,"line":3477},[143,12861,3087],{"class":149},[143,12863,12864],{"class":145,"line":3491},[143,12865,12866],{"class":266},"    \u002F\u002F释放堆区数组\n",[143,12868,12869],{"class":145,"line":3499},[143,12870,12871],{"class":266},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[143,12873,12874,12877],{"class":145,"line":3504},[143,12875,12876],{"class":755},"    delete[]",[143,12878,12879],{"class":149}," arr;\n",[143,12881,12882],{"class":145,"line":3510},[143,12883,348],{"class":149},[143,12885,12886],{"class":145,"line":3516},[143,12887,3300],{"emptyLinePlaceholder":976},[143,12889,12890,12892,12894],{"class":145,"line":3521},[143,12891,1052],{"class":755},[143,12893,2873],{"class":156},[143,12895,2876],{"class":149},[143,12897,12898],{"class":145,"line":8848},[143,12899,2449],{"class":149},[143,12901,12902,12904],{"class":145,"line":8872},[143,12903,6533],{"class":156},[143,12905,6536],{"class":149},[143,12907,12908,12910],{"class":145,"line":8877},[143,12909,6602],{"class":156},[143,12911,6536],{"class":149},[143,12913,12914],{"class":145,"line":8883},[143,12915,348],{"class":149},[954,12917,12918],{},"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":138,"searchDepth":35,"depth":35,"links":12920},[12921],{"id":11589,"depth":35,"text":11590,"children":12922},[12923,12924],{"id":11621,"depth":46,"text":11622},{"id":12249,"depth":46,"text":12250},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11581,"description":138},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12931,"title":12932,"body":12933,"description":138,"extension":974,"meta":14414,"navigation":976,"path":14415,"seo":14416,"stem":14417,"__hash__":14418},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12934,"toc":14406},[12935,12938,12942,12945,12948,13117,13121,13126,13143,13148,13300,13304,13307,13310,13704,13708,13711,13716,13719,14031,14035,14041,14201,14203,14211,14215,14218,14225,14403],[10,12936,12932],{"id":12937},"_6引用",[14,12939,12941],{"id":12940},"_61引用基本用法","6.1引用基本用法",[63,12943,12944],{},"引用的本质：给变量起别名",[63,12946,12947],{},"语法：数据类型 &别名=原名",[133,12949,12951],{"className":1037,"code":12950,"language":1039,"meta":138,"style":138},"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",[140,12952,12953,12961,12965,12977,12989,12993,13012,13031,13035,13046,13050,13069,13087,13091,13101,13105,13113],{"__ignoreMap":138},[143,12954,12955,12957,12959],{"class":145,"line":146},[143,12956,1052],{"class":755},[143,12958,2873],{"class":156},[143,12960,11753],{"class":149},[143,12962,12963],{"class":145,"line":35},[143,12964,3300],{"emptyLinePlaceholder":976},[143,12966,12967,12969,12971,12973,12975],{"class":145,"line":46},[143,12968,2885],{"class":755},[143,12970,11769],{"class":149},[143,12972,160],{"class":755},[143,12974,2938],{"class":280},[143,12976,290],{"class":149},[143,12978,12979,12981,12983,12985,12987],{"class":145,"line":293},[143,12980,2885],{"class":755},[143,12982,11484],{"class":755},[143,12984,11845],{"class":149},[143,12986,160],{"class":755},[143,12988,2336],{"class":149},[143,12990,12991],{"class":145,"line":306},[143,12992,3300],{"emptyLinePlaceholder":976},[143,12994,12995,12997,12999,13002,13004,13006,13008,13010],{"class":145,"line":319},[143,12996,7429],{"class":149},[143,12998,2081],{"class":755},[143,13000,13001],{"class":163}," \"a = \"",[143,13003,2348],{"class":755},[143,13005,11769],{"class":149},[143,13007,2081],{"class":755},[143,13009,12369],{"class":149},[143,13011,8168],{"class":266},[143,13013,13014,13016,13018,13021,13023,13025,13027,13029],{"class":145,"line":332},[143,13015,7429],{"class":149},[143,13017,2081],{"class":755},[143,13019,13020],{"class":163}," \"b = \"",[143,13022,2348],{"class":755},[143,13024,11782],{"class":149},[143,13026,2081],{"class":755},[143,13028,12369],{"class":149},[143,13030,8168],{"class":266},[143,13032,13033],{"class":145,"line":345},[143,13034,3300],{"emptyLinePlaceholder":976},[143,13036,13037,13040,13042,13044],{"class":145,"line":701},[143,13038,13039],{"class":149},"    b ",[143,13041,160],{"class":755},[143,13043,6654],{"class":280},[143,13045,290],{"class":149},[143,13047,13048],{"class":145,"line":707},[143,13049,3300],{"emptyLinePlaceholder":976},[143,13051,13052,13054,13056,13058,13060,13062,13064,13066],{"class":145,"line":727},[143,13053,7429],{"class":149},[143,13055,2081],{"class":755},[143,13057,13001],{"class":163},[143,13059,2348],{"class":755},[143,13061,11769],{"class":149},[143,13063,2081],{"class":755},[143,13065,12369],{"class":149},[143,13067,13068],{"class":266},"\u002F\u002F100\n",[143,13070,13071,13073,13075,13077,13079,13081,13083,13085],{"class":145,"line":2518},[143,13072,7429],{"class":149},[143,13074,2081],{"class":755},[143,13076,13020],{"class":163},[143,13078,2348],{"class":755},[143,13080,11782],{"class":149},[143,13082,2081],{"class":755},[143,13084,12369],{"class":149},[143,13086,13068],{"class":266},[143,13088,13089],{"class":145,"line":2524},[143,13090,3300],{"emptyLinePlaceholder":976},[143,13092,13093,13095,13097,13099],{"class":145,"line":2529},[143,13094,3203],{"class":156},[143,13096,1049],{"class":149},[143,13098,3208],{"class":163},[143,13100,3619],{"class":149},[143,13102,13103],{"class":145,"line":2543},[143,13104,3300],{"emptyLinePlaceholder":976},[143,13106,13107,13109,13111],{"class":145,"line":2548},[143,13108,4990],{"class":755},[143,13110,4993],{"class":280},[143,13112,290],{"class":149},[143,13114,13115],{"class":145,"line":2554},[143,13116,348],{"class":149},[14,13118,13120],{"id":13119},"_62引用的注意事项","6.2引用的注意事项",[19,13122,13123],{},[22,13124,13125],{},"引用必须要初始化",[133,13127,13129],{"className":1037,"code":13128,"language":1039,"meta":138,"style":138},"int &b;\u002F\u002F非常错误！\n",[140,13130,13131],{"__ignoreMap":138},[143,13132,13133,13135,13137,13140],{"class":145,"line":146},[143,13134,1052],{"class":755},[143,13136,11484],{"class":755},[143,13138,13139],{"class":149},"b;",[143,13141,13142],{"class":266},"\u002F\u002F非常错误！\n",[19,13144,13145],{"start":35},[22,13146,13147],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[133,13149,13151],{"className":1037,"code":13150,"language":1039,"meta":138,"style":138},"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",[140,13152,13153,13161,13173,13185,13193,13209,13222,13240,13258,13278,13288,13296],{"__ignoreMap":138},[143,13154,13155,13157,13159],{"class":145,"line":146},[143,13156,1052],{"class":755},[143,13158,2873],{"class":156},[143,13160,11753],{"class":149},[143,13162,13163,13165,13167,13169,13171],{"class":145,"line":35},[143,13164,2885],{"class":755},[143,13166,11769],{"class":149},[143,13168,160],{"class":755},[143,13170,2938],{"class":280},[143,13172,290],{"class":149},[143,13174,13175,13177,13179,13181,13183],{"class":145,"line":46},[143,13176,2885],{"class":755},[143,13178,11782],{"class":149},[143,13180,160],{"class":755},[143,13182,9850],{"class":280},[143,13184,290],{"class":149},[143,13186,13187,13190],{"class":145,"line":293},[143,13188,13189],{"class":266},"    \u002F\u002Fint &c;",[143,13191,13192],{"class":266}," \u002F\u002F错误，引用必须初始化\n",[143,13194,13195,13197,13199,13201,13203,13206],{"class":145,"line":306},[143,13196,2885],{"class":755},[143,13198,11484],{"class":755},[143,13200,3846],{"class":149},[143,13202,160],{"class":755},[143,13204,13205],{"class":149}," a;",[143,13207,13208],{"class":266}," \u002F\u002F一旦初始化后，就不可以更改\n",[143,13210,13211,13214,13216,13219],{"class":145,"line":319},[143,13212,13213],{"class":149},"    c ",[143,13215,160],{"class":755},[143,13217,13218],{"class":149}," b;",[143,13220,13221],{"class":266}," \u002F\u002F这是赋值操作，不是更改引用\n",[143,13223,13224,13226,13228,13230,13232,13234,13236,13238],{"class":145,"line":332},[143,13225,7429],{"class":149},[143,13227,2081],{"class":755},[143,13229,13001],{"class":163},[143,13231,2348],{"class":755},[143,13233,11769],{"class":149},[143,13235,2081],{"class":755},[143,13237,12369],{"class":149},[143,13239,8153],{"class":266},[143,13241,13242,13244,13246,13248,13250,13252,13254,13256],{"class":145,"line":345},[143,13243,7429],{"class":149},[143,13245,2081],{"class":755},[143,13247,13020],{"class":163},[143,13249,2348],{"class":755},[143,13251,11782],{"class":149},[143,13253,2081],{"class":755},[143,13255,12369],{"class":149},[143,13257,8153],{"class":266},[143,13259,13260,13262,13264,13267,13269,13272,13274,13276],{"class":145,"line":701},[143,13261,7429],{"class":149},[143,13263,2081],{"class":755},[143,13265,13266],{"class":163}," \"c = \"",[143,13268,2348],{"class":755},[143,13270,13271],{"class":149}," c ",[143,13273,2081],{"class":755},[143,13275,12369],{"class":149},[143,13277,8153],{"class":266},[143,13279,13280,13282,13284,13286],{"class":145,"line":707},[143,13281,3203],{"class":156},[143,13283,1049],{"class":149},[143,13285,3208],{"class":163},[143,13287,3619],{"class":149},[143,13289,13290,13292,13294],{"class":145,"line":727},[143,13291,4990],{"class":755},[143,13293,4993],{"class":280},[143,13295,290],{"class":149},[143,13297,13298],{"class":145,"line":2518},[143,13299,348],{"class":149},[14,13301,13303],{"id":13302},"_63引用做函数参数","6.3引用做函数参数",[63,13305,13306],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[63,13308,13309],{},"优点：可以简化指针修改实参",[133,13311,13313],{"className":1037,"code":13312,"language":1039,"meta":138,"style":138},"\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",[140,13314,13315,13320,13343,13354,13364,13373,13377,13381,13386,13408,13420,13432,13442,13446,13450,13455,13477,13487,13495,13503,13507,13511,13519,13523,13535,13547,13551,13562,13588,13592,13612,13636,13640,13650,13674,13678,13688,13692,13700],{"__ignoreMap":138},[143,13316,13317],{"class":145,"line":146},[143,13318,13319],{"class":266},"\u002F\u002F1. 值传递\n",[143,13321,13322,13324,13327,13329,13331,13333,13336,13338,13340],{"class":145,"line":35},[143,13323,6264],{"class":755},[143,13325,13326],{"class":156}," mySwap01",[143,13328,1049],{"class":149},[143,13330,1052],{"class":755},[143,13332,2302],{"class":6116},[143,13334,13335],{"class":149},", ",[143,13337,1052],{"class":755},[143,13339,3733],{"class":6116},[143,13341,13342],{"class":149},") {\n",[143,13344,13345,13347,13350,13352],{"class":145,"line":46},[143,13346,2885],{"class":755},[143,13348,13349],{"class":149}," temp ",[143,13351,160],{"class":755},[143,13353,2336],{"class":149},[143,13355,13356,13359,13361],{"class":145,"line":293},[143,13357,13358],{"class":149},"    a ",[143,13360,160],{"class":755},[143,13362,13363],{"class":149}," b;\n",[143,13365,13366,13368,13370],{"class":145,"line":306},[143,13367,13039],{"class":149},[143,13369,160],{"class":755},[143,13371,13372],{"class":149}," temp;\n",[143,13374,13375],{"class":145,"line":319},[143,13376,348],{"class":149},[143,13378,13379],{"class":145,"line":332},[143,13380,3300],{"emptyLinePlaceholder":976},[143,13382,13383],{"class":145,"line":345},[143,13384,13385],{"class":266},"\u002F\u002F2. 地址传递\n",[143,13387,13388,13390,13393,13395,13398,13400,13402,13404,13406],{"class":145,"line":701},[143,13389,6264],{"class":755},[143,13391,13392],{"class":156}," mySwap02",[143,13394,1049],{"class":149},[143,13396,13397],{"class":755},"int*",[143,13399,2302],{"class":6116},[143,13401,13335],{"class":149},[143,13403,13397],{"class":755},[143,13405,3733],{"class":6116},[143,13407,13342],{"class":149},[143,13409,13410,13412,13414,13416,13418],{"class":145,"line":707},[143,13411,2885],{"class":755},[143,13413,13349],{"class":149},[143,13415,160],{"class":755},[143,13417,7418],{"class":755},[143,13419,7097],{"class":149},[143,13421,13422,13424,13426,13428,13430],{"class":145,"line":727},[143,13423,7303],{"class":755},[143,13425,11819],{"class":149},[143,13427,160],{"class":755},[143,13429,7418],{"class":755},[143,13431,6969],{"class":149},[143,13433,13434,13436,13438,13440],{"class":145,"line":2518},[143,13435,7303],{"class":755},[143,13437,11845],{"class":149},[143,13439,160],{"class":755},[143,13441,13372],{"class":149},[143,13443,13444],{"class":145,"line":2524},[143,13445,348],{"class":149},[143,13447,13448],{"class":145,"line":2529},[143,13449,3300],{"emptyLinePlaceholder":976},[143,13451,13452],{"class":145,"line":2543},[143,13453,13454],{"class":266},"\u002F\u002F3. 引用传递\n",[143,13456,13457,13459,13462,13464,13467,13469,13471,13473,13475],{"class":145,"line":2548},[143,13458,6264],{"class":755},[143,13460,13461],{"class":156}," mySwap03",[143,13463,1049],{"class":149},[143,13465,13466],{"class":755},"int&",[143,13468,2302],{"class":6116},[143,13470,13335],{"class":149},[143,13472,13466],{"class":755},[143,13474,3733],{"class":6116},[143,13476,13342],{"class":149},[143,13478,13479,13481,13483,13485],{"class":145,"line":2554},[143,13480,2885],{"class":755},[143,13482,13349],{"class":149},[143,13484,160],{"class":755},[143,13486,2336],{"class":149},[143,13488,13489,13491,13493],{"class":145,"line":2575},[143,13490,13358],{"class":149},[143,13492,160],{"class":755},[143,13494,13363],{"class":149},[143,13496,13497,13499,13501],{"class":145,"line":2580},[143,13498,13039],{"class":149},[143,13500,160],{"class":755},[143,13502,13372],{"class":149},[143,13504,13505],{"class":145,"line":2594},[143,13506,348],{"class":149},[143,13508,13509],{"class":145,"line":2599},[143,13510,3300],{"emptyLinePlaceholder":976},[143,13512,13513,13515,13517],{"class":145,"line":2628},[143,13514,1052],{"class":755},[143,13516,2873],{"class":156},[143,13518,11753],{"class":149},[143,13520,13521],{"class":145,"line":2633},[143,13522,3300],{"emptyLinePlaceholder":976},[143,13524,13525,13527,13529,13531,13533],{"class":145,"line":2650},[143,13526,2885],{"class":755},[143,13528,11769],{"class":149},[143,13530,160],{"class":755},[143,13532,2938],{"class":280},[143,13534,290],{"class":149},[143,13536,13537,13539,13541,13543,13545],{"class":145,"line":2655},[143,13538,2885],{"class":755},[143,13540,11782],{"class":149},[143,13542,160],{"class":755},[143,13544,9850],{"class":280},[143,13546,290],{"class":149},[143,13548,13549],{"class":145,"line":2660},[143,13550,3300],{"emptyLinePlaceholder":976},[143,13552,13553,13556,13559],{"class":145,"line":2665},[143,13554,13555],{"class":156},"    mySwap01",[143,13557,13558],{"class":149},"(a, b);",[143,13560,13561],{"class":266},"\u002F\u002F值传递，形参不会修饰实参\n",[143,13563,13564,13566,13568,13571,13573,13575,13577,13580,13582,13584,13586],{"class":145,"line":2679},[143,13565,7429],{"class":149},[143,13567,2081],{"class":755},[143,13569,13570],{"class":163}," \"a:\"",[143,13572,2348],{"class":755},[143,13574,11769],{"class":149},[143,13576,2081],{"class":755},[143,13578,13579],{"class":163}," \" b:\"",[143,13581,2348],{"class":755},[143,13583,11782],{"class":149},[143,13585,2081],{"class":755},[143,13587,9740],{"class":149},[143,13589,13590],{"class":145,"line":2684},[143,13591,3300],{"emptyLinePlaceholder":976},[143,13593,13594,13597,13599,13601,13604,13606,13609],{"class":145,"line":3477},[143,13595,13596],{"class":156},"    mySwap02",[143,13598,1049],{"class":149},[143,13600,1394],{"class":755},[143,13602,13603],{"class":149},"a, ",[143,13605,1394],{"class":755},[143,13607,13608],{"class":149},"b);",[143,13610,13611],{"class":266},"\u002F\u002F地址传递，形参会修饰实参\n",[143,13613,13614,13616,13618,13620,13622,13624,13626,13628,13630,13632,13634],{"class":145,"line":3491},[143,13615,7429],{"class":149},[143,13617,2081],{"class":755},[143,13619,13570],{"class":163},[143,13621,2348],{"class":755},[143,13623,11769],{"class":149},[143,13625,2081],{"class":755},[143,13627,13579],{"class":163},[143,13629,2348],{"class":755},[143,13631,11782],{"class":149},[143,13633,2081],{"class":755},[143,13635,9740],{"class":149},[143,13637,13638],{"class":145,"line":3499},[143,13639,3300],{"emptyLinePlaceholder":976},[143,13641,13642,13645,13647],{"class":145,"line":3504},[143,13643,13644],{"class":156},"    mySwap03",[143,13646,13558],{"class":149},[143,13648,13649],{"class":266},"\u002F\u002F引用传递，形参会修饰实参\n",[143,13651,13652,13654,13656,13658,13660,13662,13664,13666,13668,13670,13672],{"class":145,"line":3510},[143,13653,7429],{"class":149},[143,13655,2081],{"class":755},[143,13657,13570],{"class":163},[143,13659,2348],{"class":755},[143,13661,11769],{"class":149},[143,13663,2081],{"class":755},[143,13665,13579],{"class":163},[143,13667,2348],{"class":755},[143,13669,11782],{"class":149},[143,13671,2081],{"class":755},[143,13673,9740],{"class":149},[143,13675,13676],{"class":145,"line":3516},[143,13677,3300],{"emptyLinePlaceholder":976},[143,13679,13680,13682,13684,13686],{"class":145,"line":3521},[143,13681,3203],{"class":156},[143,13683,1049],{"class":149},[143,13685,3208],{"class":163},[143,13687,3619],{"class":149},[143,13689,13690],{"class":145,"line":8848},[143,13691,3300],{"emptyLinePlaceholder":976},[143,13693,13694,13696,13698],{"class":145,"line":8872},[143,13695,4990],{"class":755},[143,13697,4993],{"class":280},[143,13699,290],{"class":149},[143,13701,13702],{"class":145,"line":8877},[143,13703,348],{"class":149},[14,13705,13707],{"id":13706},"_64引用做函数的返回值","6.4引用做函数的返回值",[63,13709,13710],{},"作用：引用是可以作为函数的返回值存在的",[63,13712,9925,13713],{},[25,13714,13715],{},"不要返回局部变量引用",[63,13717,13718],{},"用法：函数调用作为左值",[133,13720,13722],{"className":10841,"code":13721,"language":10843,"meta":138,"style":138},"\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",[140,13723,13724,13729,13737,13752,13758,13762,13766,13771,13779,13796,13802,13806,13810,13818,13822,13827,13841,13861,13880,13884,13889,13902,13922,13940,13944,13960,13964,13983,14001,14005,14015,14019,14027],{"__ignoreMap":138},[143,13725,13726],{"class":145,"line":146},[143,13727,13728],{"class":266},"\u002F\u002F返回局部变量引用\n",[143,13730,13731,13733,13735],{"class":145,"line":35},[143,13732,13466],{"class":755},[143,13734,6488],{"class":156},[143,13736,11753],{"class":149},[143,13738,13739,13741,13743,13745,13747,13749],{"class":145,"line":46},[143,13740,2885],{"class":755},[143,13742,11769],{"class":149},[143,13744,160],{"class":755},[143,13746,2938],{"class":280},[143,13748,1101],{"class":149},[143,13750,13751],{"class":266}," \u002F\u002F局部变量\n",[143,13753,13754,13756],{"class":145,"line":293},[143,13755,4990],{"class":755},[143,13757,2336],{"class":149},[143,13759,13760],{"class":145,"line":306},[143,13761,348],{"class":149},[143,13763,13764],{"class":145,"line":319},[143,13765,3300],{"emptyLinePlaceholder":976},[143,13767,13768],{"class":145,"line":332},[143,13769,13770],{"class":266},"\u002F\u002F返回静态变量引用\n",[143,13772,13773,13775,13777],{"class":145,"line":345},[143,13774,13466],{"class":755},[143,13776,6557],{"class":156},[143,13778,11753],{"class":149},[143,13780,13781,13783,13785,13787,13789,13791,13793],{"class":145,"line":701},[143,13782,11920],{"class":755},[143,13784,3282],{"class":755},[143,13786,11769],{"class":149},[143,13788,160],{"class":755},[143,13790,9850],{"class":280},[143,13792,1101],{"class":149},[143,13794,13795],{"class":266},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[143,13797,13798,13800],{"class":145,"line":707},[143,13799,4990],{"class":755},[143,13801,2336],{"class":149},[143,13803,13804],{"class":145,"line":727},[143,13805,348],{"class":149},[143,13807,13808],{"class":145,"line":2518},[143,13809,3300],{"emptyLinePlaceholder":976},[143,13811,13812,13814,13816],{"class":145,"line":2524},[143,13813,1052],{"class":755},[143,13815,2873],{"class":156},[143,13817,11753],{"class":149},[143,13819,13820],{"class":145,"line":2529},[143,13821,3300],{"emptyLinePlaceholder":976},[143,13823,13824],{"class":145,"line":2543},[143,13825,13826],{"class":266},"    \u002F\u002F不能返回局部变量的引用\n",[143,13828,13829,13832,13835,13837,13839],{"class":145,"line":2548},[143,13830,13831],{"class":755},"    int&",[143,13833,13834],{"class":149}," ref ",[143,13836,160],{"class":755},[143,13838,6488],{"class":156},[143,13840,6536],{"class":149},[143,13842,13843,13845,13847,13850,13852,13854,13856,13858],{"class":145,"line":2554},[143,13844,7429],{"class":149},[143,13846,2081],{"class":755},[143,13848,13849],{"class":163}," \"ref = \"",[143,13851,2348],{"class":755},[143,13853,13834],{"class":149},[143,13855,2081],{"class":755},[143,13857,12369],{"class":149},[143,13859,13860],{"class":266},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[143,13862,13863,13865,13867,13869,13871,13873,13875,13877],{"class":145,"line":2575},[143,13864,7429],{"class":149},[143,13866,2081],{"class":755},[143,13868,13849],{"class":163},[143,13870,2348],{"class":755},[143,13872,13834],{"class":149},[143,13874,2081],{"class":755},[143,13876,12369],{"class":149},[143,13878,13879],{"class":266},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[143,13881,13882],{"class":145,"line":2580},[143,13883,3300],{"emptyLinePlaceholder":976},[143,13885,13886],{"class":145,"line":2594},[143,13887,13888],{"class":266},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[143,13890,13891,13893,13896,13898,13900],{"class":145,"line":2599},[143,13892,13831],{"class":755},[143,13894,13895],{"class":149}," ref2 ",[143,13897,160],{"class":755},[143,13899,6557],{"class":156},[143,13901,6536],{"class":149},[143,13903,13904,13906,13908,13911,13913,13915,13917,13919],{"class":145,"line":2628},[143,13905,7429],{"class":149},[143,13907,2081],{"class":755},[143,13909,13910],{"class":163}," \"ref2 = \"",[143,13912,2348],{"class":755},[143,13914,13895],{"class":149},[143,13916,2081],{"class":755},[143,13918,12369],{"class":149},[143,13920,13921],{"class":266}," \u002F\u002F20\n",[143,13923,13924,13926,13928,13930,13932,13934,13936,13938],{"class":145,"line":2633},[143,13925,7429],{"class":149},[143,13927,2081],{"class":755},[143,13929,13910],{"class":163},[143,13931,2348],{"class":755},[143,13933,13895],{"class":149},[143,13935,2081],{"class":755},[143,13937,12369],{"class":149},[143,13939,13921],{"class":266},[143,13941,13942],{"class":145,"line":2650},[143,13943,3300],{"emptyLinePlaceholder":976},[143,13945,13946,13948,13951,13953,13955,13957],{"class":145,"line":2655},[143,13947,6602],{"class":156},[143,13949,13950],{"class":149},"() ",[143,13952,160],{"class":755},[143,13954,3899],{"class":280},[143,13956,1101],{"class":149},[143,13958,13959],{"class":266},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[143,13961,13962],{"class":145,"line":2660},[143,13963,3300],{"emptyLinePlaceholder":976},[143,13965,13966,13968,13970,13972,13974,13976,13978,13980],{"class":145,"line":2665},[143,13967,7429],{"class":149},[143,13969,2081],{"class":755},[143,13971,13910],{"class":163},[143,13973,2348],{"class":755},[143,13975,13895],{"class":149},[143,13977,2081],{"class":755},[143,13979,12369],{"class":149},[143,13981,13982],{"class":266}," \u002F\u002F1000\n",[143,13984,13985,13987,13989,13991,13993,13995,13997,13999],{"class":145,"line":2679},[143,13986,7429],{"class":149},[143,13988,2081],{"class":755},[143,13990,13910],{"class":163},[143,13992,2348],{"class":755},[143,13994,13895],{"class":149},[143,13996,2081],{"class":755},[143,13998,12369],{"class":149},[143,14000,13982],{"class":266},[143,14002,14003],{"class":145,"line":2684},[143,14004,3300],{"emptyLinePlaceholder":976},[143,14006,14007,14009,14011,14013],{"class":145,"line":3477},[143,14008,3203],{"class":156},[143,14010,1049],{"class":149},[143,14012,3208],{"class":163},[143,14014,3619],{"class":149},[143,14016,14017],{"class":145,"line":3491},[143,14018,3300],{"emptyLinePlaceholder":976},[143,14020,14021,14023,14025],{"class":145,"line":3499},[143,14022,4990],{"class":755},[143,14024,4993],{"class":280},[143,14026,290],{"class":149},[143,14028,14029],{"class":145,"line":3504},[143,14030,348],{"class":149},[14,14032,14034],{"id":14033},"_65引用的本质","6.5引用的本质",[63,14036,14037,14038],{},"本质：",[25,14039,14040],{},"引用的本质在c++内部实现是一个指针常量.",[133,14042,14044],{"className":1037,"code":14043,"language":1039,"meta":138,"style":138},"\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",[140,14045,14046,14051,14067,14081,14085,14094,14106,14111,14116,14127,14140,14144,14160,14177,14181,14189,14197],{"__ignoreMap":138},[143,14047,14048],{"class":145,"line":146},[143,14049,14050],{"class":266},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[143,14052,14053,14055,14057,14059,14061,14064],{"class":145,"line":35},[143,14054,6264],{"class":755},[143,14056,12285],{"class":156},[143,14058,1049],{"class":149},[143,14060,13466],{"class":755},[143,14062,14063],{"class":6116}," ref",[143,14065,14066],{"class":149},"){\n",[143,14068,14069,14072,14074,14076,14078],{"class":145,"line":46},[143,14070,14071],{"class":149},"    ref ",[143,14073,160],{"class":755},[143,14075,6654],{"class":280},[143,14077,1101],{"class":149},[143,14079,14080],{"class":266}," \u002F\u002F ref是引用，转换为*ref = 100\n",[143,14082,14083],{"class":145,"line":293},[143,14084,348],{"class":149},[143,14086,14087,14089,14091],{"class":145,"line":306},[143,14088,1052],{"class":755},[143,14090,2873],{"class":156},[143,14092,14093],{"class":149},"(){\n",[143,14095,14096,14098,14100,14102,14104],{"class":145,"line":319},[143,14097,2885],{"class":755},[143,14099,11769],{"class":149},[143,14101,160],{"class":755},[143,14103,2938],{"class":280},[143,14105,290],{"class":149},[143,14107,14108],{"class":145,"line":332},[143,14109,14110],{"class":149},"    \n",[143,14112,14113],{"class":145,"line":345},[143,14114,14115],{"class":266},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[143,14117,14118,14120,14122,14124],{"class":145,"line":701},[143,14119,13831],{"class":755},[143,14121,13834],{"class":149},[143,14123,160],{"class":755},[143,14125,14126],{"class":149}," a; \n",[143,14128,14129,14131,14133,14135,14137],{"class":145,"line":707},[143,14130,14071],{"class":149},[143,14132,160],{"class":755},[143,14134,9850],{"class":280},[143,14136,1101],{"class":149},[143,14138,14139],{"class":266}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[143,14141,14142],{"class":145,"line":727},[143,14143,14110],{"class":149},[143,14145,14146,14148,14150,14152,14154,14156,14158],{"class":145,"line":2518},[143,14147,7429],{"class":149},[143,14149,2081],{"class":755},[143,14151,13570],{"class":163},[143,14153,2348],{"class":755},[143,14155,11769],{"class":149},[143,14157,2081],{"class":755},[143,14159,9740],{"class":149},[143,14161,14162,14164,14166,14169,14171,14173,14175],{"class":145,"line":2524},[143,14163,7429],{"class":149},[143,14165,2081],{"class":755},[143,14167,14168],{"class":163}," \"ref:\"",[143,14170,2348],{"class":755},[143,14172,13834],{"class":149},[143,14174,2081],{"class":755},[143,14176,9740],{"class":149},[143,14178,14179],{"class":145,"line":2529},[143,14180,14110],{"class":149},[143,14182,14183,14186],{"class":145,"line":2543},[143,14184,14185],{"class":156},"    func",[143,14187,14188],{"class":149},"(a);\n",[143,14190,14191,14193,14195],{"class":145,"line":2548},[143,14192,4990],{"class":755},[143,14194,4993],{"class":280},[143,14196,290],{"class":149},[143,14198,14199],{"class":145,"line":2554},[143,14200,348],{"class":149},[63,14202,12232],{},[19,14204,14205,14208],{},[22,14206,14207],{},"引用的本质，就是一个指针常量",[22,14209,14210],{},"引用一旦初始化，就不可以发生改变",[14,14212,14214],{"id":14213},"_66常量引用","6.6常量引用",[63,14216,14217],{},"作用：常量引用主要用来修饰形参",[63,14219,14220,14221,14224],{},"在函数形参列表中，可以加",[25,14222,14223],{},"const修饰形参","，防止形参改变实参",[133,14226,14228],{"className":1037,"code":14227,"language":1039,"meta":138,"style":138},"\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",[140,14229,14230,14235,14240,14259,14264,14277,14281,14285,14293,14297,14302,14307,14321,14325,14333,14345,14349,14354,14366,14373,14377,14387,14391,14399],{"__ignoreMap":138},[143,14231,14232],{"class":145,"line":146},[143,14233,14234],{"class":266},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[143,14236,14237],{"class":145,"line":35},[143,14238,14239],{"class":266},"\u002F\u002F加上const就不能修改实参的\n",[143,14241,14242,14244,14247,14249,14251,14254,14257],{"class":145,"line":46},[143,14243,6264],{"class":755},[143,14245,14246],{"class":156}," showValue",[143,14248,1049],{"class":149},[143,14250,7692],{"class":755},[143,14252,14253],{"class":755}," int&",[143,14255,14256],{"class":6116}," v",[143,14258,13342],{"class":149},[143,14260,14261],{"class":145,"line":293},[143,14262,14263],{"class":266},"    \u002F\u002Fv += 100;\n",[143,14265,14266,14268,14270,14273,14275],{"class":145,"line":306},[143,14267,7429],{"class":149},[143,14269,2081],{"class":755},[143,14271,14272],{"class":149}," v ",[143,14274,2081],{"class":755},[143,14276,9740],{"class":149},[143,14278,14279],{"class":145,"line":319},[143,14280,348],{"class":149},[143,14282,14283],{"class":145,"line":332},[143,14284,3300],{"emptyLinePlaceholder":976},[143,14286,14287,14289,14291],{"class":145,"line":345},[143,14288,1052],{"class":755},[143,14290,2873],{"class":156},[143,14292,11753],{"class":149},[143,14294,14295],{"class":145,"line":701},[143,14296,3300],{"emptyLinePlaceholder":976},[143,14298,14299],{"class":145,"line":707},[143,14300,14301],{"class":266},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[143,14303,14304],{"class":145,"line":727},[143,14305,14306],{"class":266},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[143,14308,14309,14311,14313,14315,14317,14319],{"class":145,"line":2518},[143,14310,12121],{"class":755},[143,14312,14253],{"class":755},[143,14314,13834],{"class":149},[143,14316,160],{"class":755},[143,14318,2938],{"class":280},[143,14320,290],{"class":149},[143,14322,14323],{"class":145,"line":2524},[143,14324,3300],{"emptyLinePlaceholder":976},[143,14326,14327,14330],{"class":145,"line":2529},[143,14328,14329],{"class":266},"    \u002F\u002Fref = 100;",[143,14331,14332],{"class":266},"  \u002F\u002F加入const后不可以修改变量\n",[143,14334,14335,14337,14339,14341,14343],{"class":145,"line":2543},[143,14336,7429],{"class":149},[143,14338,2081],{"class":755},[143,14340,13834],{"class":149},[143,14342,2081],{"class":755},[143,14344,9740],{"class":149},[143,14346,14347],{"class":145,"line":2548},[143,14348,3300],{"emptyLinePlaceholder":976},[143,14350,14351],{"class":145,"line":2554},[143,14352,14353],{"class":266},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[143,14355,14356,14358,14360,14362,14364],{"class":145,"line":2575},[143,14357,2885],{"class":755},[143,14359,11769],{"class":149},[143,14361,160],{"class":755},[143,14363,2938],{"class":280},[143,14365,290],{"class":149},[143,14367,14368,14371],{"class":145,"line":2580},[143,14369,14370],{"class":156},"    showValue",[143,14372,14188],{"class":149},[143,14374,14375],{"class":145,"line":2594},[143,14376,3300],{"emptyLinePlaceholder":976},[143,14378,14379,14381,14383,14385],{"class":145,"line":2599},[143,14380,3203],{"class":156},[143,14382,1049],{"class":149},[143,14384,3208],{"class":163},[143,14386,3619],{"class":149},[143,14388,14389],{"class":145,"line":2628},[143,14390,3300],{"emptyLinePlaceholder":976},[143,14392,14393,14395,14397],{"class":145,"line":2633},[143,14394,4990],{"class":755},[143,14396,4993],{"class":280},[143,14398,290],{"class":149},[143,14400,14401],{"class":145,"line":2650},[143,14402,348],{"class":149},[954,14404,14405],{},"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":138,"searchDepth":35,"depth":35,"links":14407},[14408,14409,14410,14411,14412,14413],{"id":12940,"depth":35,"text":12941},{"id":13119,"depth":35,"text":13120},{"id":13302,"depth":35,"text":13303},{"id":13706,"depth":35,"text":13707},{"id":14033,"depth":35,"text":14034},{"id":14213,"depth":35,"text":14214},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12932,"description":138},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14420,"title":14421,"body":14422,"description":138,"extension":974,"meta":15502,"navigation":976,"path":15503,"seo":15504,"stem":15505,"__hash__":15506},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14423,"toc":15494},[14424,14427,14431,14434,14439,14671,14673,14684,14688,14691,14698,14802,14805,14809,14812,14816,14819,14824,14846,14852,15179,15182,15186,15194,15491],[10,14425,14421],{"id":14426},"_7函数高级部分",[14,14428,14430],{"id":14429},"_71函数默认参数","7.1函数默认参数",[63,14432,14433],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[63,14435,6081,14436],{},[140,14437,14438],{}," 返回值类型  函数名 （参数= 默认值）{}",[133,14440,14442],{"className":1037,"code":14441,"language":1039,"meta":138,"style":138},"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",[140,14443,14444,14479,14494,14498,14502,14507,14512,14541,14561,14571,14575,14579,14587,14591,14619,14641,14645,14655,14659,14667],{"__ignoreMap":138},[143,14445,14446,14448,14450,14452,14454,14456,14458,14460,14462,14465,14467,14469,14471,14473,14475,14477],{"class":145,"line":146},[143,14447,1052],{"class":755},[143,14449,12285],{"class":156},[143,14451,1049],{"class":149},[143,14453,1052],{"class":755},[143,14455,2302],{"class":6116},[143,14457,13335],{"class":149},[143,14459,1052],{"class":755},[143,14461,3733],{"class":6116},[143,14463,14464],{"class":755}," =",[143,14466,2938],{"class":280},[143,14468,13335],{"class":149},[143,14470,1052],{"class":755},[143,14472,3749],{"class":6116},[143,14474,14464],{"class":755},[143,14476,2938],{"class":280},[143,14478,13342],{"class":149},[143,14480,14481,14483,14485,14487,14489,14491],{"class":145,"line":35},[143,14482,4990],{"class":755},[143,14484,11769],{"class":149},[143,14486,1522],{"class":755},[143,14488,11782],{"class":149},[143,14490,1522],{"class":755},[143,14492,14493],{"class":149}," c;\n",[143,14495,14496],{"class":145,"line":46},[143,14497,348],{"class":149},[143,14499,14500],{"class":145,"line":293},[143,14501,3300],{"emptyLinePlaceholder":976},[143,14503,14504],{"class":145,"line":306},[143,14505,14506],{"class":266},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[143,14508,14509],{"class":145,"line":319},[143,14510,14511],{"class":266},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[143,14513,14514,14516,14519,14521,14523,14525,14527,14529,14531,14533,14535,14537,14539],{"class":145,"line":332},[143,14515,1052],{"class":755},[143,14517,14518],{"class":156}," func2",[143,14520,1049],{"class":149},[143,14522,1052],{"class":755},[143,14524,2302],{"class":6116},[143,14526,14464],{"class":755},[143,14528,2938],{"class":280},[143,14530,13335],{"class":149},[143,14532,1052],{"class":755},[143,14534,3733],{"class":6116},[143,14536,14464],{"class":755},[143,14538,2938],{"class":280},[143,14540,3619],{"class":149},[143,14542,14543,14545,14547,14549,14551,14553,14555,14557,14559],{"class":145,"line":345},[143,14544,1052],{"class":755},[143,14546,14518],{"class":156},[143,14548,1049],{"class":149},[143,14550,1052],{"class":755},[143,14552,2302],{"class":6116},[143,14554,13335],{"class":149},[143,14556,1052],{"class":755},[143,14558,3733],{"class":6116},[143,14560,13342],{"class":149},[143,14562,14563,14565,14567,14569],{"class":145,"line":701},[143,14564,4990],{"class":755},[143,14566,11769],{"class":149},[143,14568,1522],{"class":755},[143,14570,13363],{"class":149},[143,14572,14573],{"class":145,"line":707},[143,14574,348],{"class":149},[143,14576,14577],{"class":145,"line":727},[143,14578,3300],{"emptyLinePlaceholder":976},[143,14580,14581,14583,14585],{"class":145,"line":2518},[143,14582,1052],{"class":755},[143,14584,2873],{"class":156},[143,14586,11753],{"class":149},[143,14588,14589],{"class":145,"line":2524},[143,14590,3300],{"emptyLinePlaceholder":976},[143,14592,14593,14595,14597,14600,14602,14604,14606,14608,14610,14612,14615,14617],{"class":145,"line":2529},[143,14594,7429],{"class":149},[143,14596,2081],{"class":755},[143,14598,14599],{"class":163}," \"ret = \"",[143,14601,2348],{"class":755},[143,14603,12285],{"class":156},[143,14605,1049],{"class":149},[143,14607,1741],{"class":280},[143,14609,13335],{"class":149},[143,14611,1741],{"class":280},[143,14613,14614],{"class":149},") ",[143,14616,2081],{"class":755},[143,14618,9740],{"class":149},[143,14620,14621,14623,14625,14627,14629,14631,14633,14635,14637,14639],{"class":145,"line":2543},[143,14622,7429],{"class":149},[143,14624,2081],{"class":755},[143,14626,14599],{"class":163},[143,14628,2348],{"class":755},[143,14630,12285],{"class":156},[143,14632,1049],{"class":149},[143,14634,1352],{"class":280},[143,14636,14614],{"class":149},[143,14638,2081],{"class":755},[143,14640,9740],{"class":149},[143,14642,14643],{"class":145,"line":2548},[143,14644,3300],{"emptyLinePlaceholder":976},[143,14646,14647,14649,14651,14653],{"class":145,"line":2554},[143,14648,3203],{"class":156},[143,14650,1049],{"class":149},[143,14652,3208],{"class":163},[143,14654,3619],{"class":149},[143,14656,14657],{"class":145,"line":2575},[143,14658,3300],{"emptyLinePlaceholder":976},[143,14660,14661,14663,14665],{"class":145,"line":2580},[143,14662,4990],{"class":755},[143,14664,4993],{"class":280},[143,14666,290],{"class":149},[143,14668,14669],{"class":145,"line":2594},[143,14670,348],{"class":149},[63,14672,12232],{},[19,14674,14675,14678,14681],{},[22,14676,14677],{},"我传就用我；没传就用你",[22,14679,14680],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[22,14682,14683],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,14685,14687],{"id":14686},"_72函数的占位参数","7.2函数的占位参数",[63,14689,14690],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[63,14692,14693,497,14695],{},[25,14694,6081],{},[140,14696,14697],{},"返回值类型 函数名 (数据类型){}",[133,14699,14701],{"className":1037,"code":14700,"language":1039,"meta":138,"style":138},"\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",[140,14702,14703,14708,14726,14739,14743,14751,14755,14772,14776,14786,14790,14798],{"__ignoreMap":138},[143,14704,14705],{"class":145,"line":146},[143,14706,14707],{"class":266},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[143,14709,14710,14712,14714,14716,14718,14720,14722,14724],{"class":145,"line":35},[143,14711,6264],{"class":755},[143,14713,12285],{"class":156},[143,14715,1049],{"class":149},[143,14717,1052],{"class":755},[143,14719,2302],{"class":6116},[143,14721,13335],{"class":149},[143,14723,1052],{"class":755},[143,14725,13342],{"class":149},[143,14727,14728,14730,14732,14735,14737],{"class":145,"line":46},[143,14729,7429],{"class":149},[143,14731,2081],{"class":755},[143,14733,14734],{"class":163}," \"this is func\"",[143,14736,2348],{"class":755},[143,14738,9740],{"class":149},[143,14740,14741],{"class":145,"line":293},[143,14742,348],{"class":149},[143,14744,14745,14747,14749],{"class":145,"line":306},[143,14746,1052],{"class":755},[143,14748,2873],{"class":156},[143,14750,11753],{"class":149},[143,14752,14753],{"class":145,"line":319},[143,14754,3300],{"emptyLinePlaceholder":976},[143,14756,14757,14759,14761,14763,14765,14767,14769],{"class":145,"line":332},[143,14758,14185],{"class":156},[143,14760,1049],{"class":149},[143,14762,1487],{"class":280},[143,14764,1419],{"class":149},[143,14766,1487],{"class":280},[143,14768,6866],{"class":149},[143,14770,14771],{"class":266}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[143,14773,14774],{"class":145,"line":345},[143,14775,3300],{"emptyLinePlaceholder":976},[143,14777,14778,14780,14782,14784],{"class":145,"line":701},[143,14779,3203],{"class":156},[143,14781,1049],{"class":149},[143,14783,3208],{"class":163},[143,14785,3619],{"class":149},[143,14787,14788],{"class":145,"line":707},[143,14789,3300],{"emptyLinePlaceholder":976},[143,14791,14792,14794,14796],{"class":145,"line":727},[143,14793,4990],{"class":755},[143,14795,4993],{"class":280},[143,14797,290],{"class":149},[143,14799,14800],{"class":145,"line":2518},[143,14801,348],{"class":149},[63,14803,14804],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14806,14808],{"id":14807},"_73函数重载","7.3函数重载",[63,14810,14811],{},"意思是函数名是可以相同的",[58,14813,14815],{"id":14814},"_731基本语法","7.3.1基本语法",[63,14817,14818],{},"作用：函数名可以相同，提高复用性",[63,14820,14821],{},[25,14822,14823],{},"函数重载满足条件：",[232,14825,14826,14829,14832],{},[22,14827,14828],{},"同一个作用域下",[22,14830,14831],{},"函数名称相同",[22,14833,14834,14835,14838,14839,14842,14843],{},"函数参数",[25,14836,14837],{},"类型不同","  或者 ",[25,14840,14841],{},"个数不同"," 或者 ",[25,14844,14845],{},"顺序不同",[63,14847,14848,14851],{},[25,14849,14850],{},"注意:","  函数的返回值不可以作为函数重载的条件",[133,14853,14855],{"className":10841,"code":14854,"language":10843,"meta":138,"style":138},"\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",[140,14856,14857,14862,14870,14874,14887,14891,14905,14909,14922,14926,14941,14945,14958,14962,14983,14987,15000,15004,15024,15028,15041,15045,15049,15054,15059,15064,15069,15074,15078,15082,15090,15094,15100,15110,15120,15134,15149,15153,15163,15167,15175],{"__ignoreMap":138},[143,14858,14859],{"class":145,"line":146},[143,14860,14861],{"class":266},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[143,14863,14864,14866,14868],{"class":145,"line":35},[143,14865,6264],{"class":755},[143,14867,12285],{"class":156},[143,14869,2876],{"class":149},[143,14871,14872],{"class":145,"line":46},[143,14873,2449],{"class":149},[143,14875,14876,14878,14880,14883,14885],{"class":145,"line":293},[143,14877,7429],{"class":149},[143,14879,2081],{"class":755},[143,14881,14882],{"class":163}," \"func 的调用！\"",[143,14884,2348],{"class":755},[143,14886,9740],{"class":149},[143,14888,14889],{"class":145,"line":306},[143,14890,348],{"class":149},[143,14892,14893,14895,14897,14899,14901,14903],{"class":145,"line":319},[143,14894,6264],{"class":755},[143,14896,12285],{"class":156},[143,14898,1049],{"class":149},[143,14900,1052],{"class":755},[143,14902,2302],{"class":6116},[143,14904,1055],{"class":149},[143,14906,14907],{"class":145,"line":332},[143,14908,2449],{"class":149},[143,14910,14911,14913,14915,14918,14920],{"class":145,"line":345},[143,14912,7429],{"class":149},[143,14914,2081],{"class":755},[143,14916,14917],{"class":163}," \"func (int a) 的调用！\"",[143,14919,2348],{"class":755},[143,14921,9740],{"class":149},[143,14923,14924],{"class":145,"line":701},[143,14925,348],{"class":149},[143,14927,14928,14930,14932,14934,14937,14939],{"class":145,"line":707},[143,14929,6264],{"class":755},[143,14931,12285],{"class":156},[143,14933,1049],{"class":149},[143,14935,14936],{"class":755},"double",[143,14938,2302],{"class":6116},[143,14940,1055],{"class":149},[143,14942,14943],{"class":145,"line":727},[143,14944,2449],{"class":149},[143,14946,14947,14949,14951,14954,14956],{"class":145,"line":2518},[143,14948,7429],{"class":149},[143,14950,2081],{"class":755},[143,14952,14953],{"class":163}," \"func (double a)的调用！\"",[143,14955,2348],{"class":755},[143,14957,9740],{"class":149},[143,14959,14960],{"class":145,"line":2524},[143,14961,348],{"class":149},[143,14963,14964,14966,14968,14970,14972,14974,14977,14979,14981],{"class":145,"line":2529},[143,14965,6264],{"class":755},[143,14967,12285],{"class":156},[143,14969,1049],{"class":149},[143,14971,1052],{"class":755},[143,14973,2302],{"class":6116},[143,14975,14976],{"class":149}," ,",[143,14978,14936],{"class":755},[143,14980,3733],{"class":6116},[143,14982,1055],{"class":149},[143,14984,14985],{"class":145,"line":2543},[143,14986,2449],{"class":149},[143,14988,14989,14991,14993,14996,14998],{"class":145,"line":2548},[143,14990,7429],{"class":149},[143,14992,2081],{"class":755},[143,14994,14995],{"class":163}," \"func (int a ,double b) 的调用！\"",[143,14997,2348],{"class":755},[143,14999,9740],{"class":149},[143,15001,15002],{"class":145,"line":2554},[143,15003,348],{"class":149},[143,15005,15006,15008,15010,15012,15014,15016,15018,15020,15022],{"class":145,"line":2575},[143,15007,6264],{"class":755},[143,15009,12285],{"class":156},[143,15011,1049],{"class":149},[143,15013,14936],{"class":755},[143,15015,2302],{"class":6116},[143,15017,14976],{"class":149},[143,15019,1052],{"class":755},[143,15021,3733],{"class":6116},[143,15023,1055],{"class":149},[143,15025,15026],{"class":145,"line":2580},[143,15027,2449],{"class":149},[143,15029,15030,15032,15034,15037,15039],{"class":145,"line":2594},[143,15031,7429],{"class":149},[143,15033,2081],{"class":755},[143,15035,15036],{"class":163}," \"func (double a ,int b)的调用！\"",[143,15038,2348],{"class":755},[143,15040,9740],{"class":149},[143,15042,15043],{"class":145,"line":2599},[143,15044,348],{"class":149},[143,15046,15047],{"class":145,"line":2628},[143,15048,3300],{"emptyLinePlaceholder":976},[143,15050,15051],{"class":145,"line":2633},[143,15052,15053],{"class":266},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[143,15055,15056],{"class":145,"line":2650},[143,15057,15058],{"class":266},"\u002F\u002Fint func(double a, int b)\n",[143,15060,15061],{"class":145,"line":2655},[143,15062,15063],{"class":266},"\u002F\u002F{\n",[143,15065,15066],{"class":145,"line":2660},[143,15067,15068],{"class":266},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[143,15070,15071],{"class":145,"line":2665},[143,15072,15073],{"class":266},"\u002F\u002F}\n",[143,15075,15076],{"class":145,"line":2679},[143,15077,3300],{"emptyLinePlaceholder":976},[143,15079,15080],{"class":145,"line":2684},[143,15081,3300],{"emptyLinePlaceholder":976},[143,15083,15084,15086,15088],{"class":145,"line":3477},[143,15085,1052],{"class":755},[143,15087,2873],{"class":156},[143,15089,11753],{"class":149},[143,15091,15092],{"class":145,"line":3491},[143,15093,3300],{"emptyLinePlaceholder":976},[143,15095,15096,15098],{"class":145,"line":3499},[143,15097,14185],{"class":156},[143,15099,6536],{"class":149},[143,15101,15102,15104,15106,15108],{"class":145,"line":3504},[143,15103,14185],{"class":156},[143,15105,1049],{"class":149},[143,15107,1487],{"class":280},[143,15109,3619],{"class":149},[143,15111,15112,15114,15116,15118],{"class":145,"line":3510},[143,15113,14185],{"class":156},[143,15115,1049],{"class":149},[143,15117,1095],{"class":280},[143,15119,3619],{"class":149},[143,15121,15122,15124,15126,15128,15130,15132],{"class":145,"line":3516},[143,15123,14185],{"class":156},[143,15125,1049],{"class":149},[143,15127,1487],{"class":280},[143,15129,1419],{"class":149},[143,15131,1095],{"class":280},[143,15133,3619],{"class":149},[143,15135,15136,15138,15140,15142,15145,15147],{"class":145,"line":3521},[143,15137,14185],{"class":156},[143,15139,1049],{"class":149},[143,15141,1095],{"class":280},[143,15143,15144],{"class":149}," , ",[143,15146,1487],{"class":280},[143,15148,3619],{"class":149},[143,15150,15151],{"class":145,"line":8848},[143,15152,14110],{"class":149},[143,15154,15155,15157,15159,15161],{"class":145,"line":8872},[143,15156,3203],{"class":156},[143,15158,1049],{"class":149},[143,15160,3208],{"class":163},[143,15162,3619],{"class":149},[143,15164,15165],{"class":145,"line":8877},[143,15166,3300],{"emptyLinePlaceholder":976},[143,15168,15169,15171,15173],{"class":145,"line":8883},[143,15170,4990],{"class":755},[143,15172,4993],{"class":280},[143,15174,290],{"class":149},[143,15176,15177],{"class":145,"line":8910},[143,15178,348],{"class":149},[63,15180,15181],{},"重点：函数返回值不可以作为函数重载条件！",[58,15183,15185],{"id":15184},"_732注意事项","7.3.2注意事项",[232,15187,15188,15191],{},[22,15189,15190],{},"引用作为重载条件!!!",[22,15192,15193],{},"函数重载碰到函数默认参数",[133,15195,15197],{"className":1037,"code":15196,"language":1039,"meta":138,"style":138},"\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",[140,15198,15199,15204,15209,15213,15229,15233,15246,15250,15254,15272,15276,15289,15293,15297,15301,15306,15310,15334,15338,15351,15355,15359,15373,15377,15390,15394,15398,15406,15410,15422,15432,15445,15449,15453,15461,15465,15475,15479,15487],{"__ignoreMap":138},[143,15200,15201],{"class":145,"line":146},[143,15202,15203],{"class":266},"\u002F\u002F函数重载注意事项\n",[143,15205,15206],{"class":145,"line":35},[143,15207,15208],{"class":266},"\u002F\u002F1、引用作为重载条件\n",[143,15210,15211],{"class":145,"line":46},[143,15212,3300],{"emptyLinePlaceholder":976},[143,15214,15215,15217,15219,15221,15223,15225,15227],{"class":145,"line":293},[143,15216,6264],{"class":755},[143,15218,12285],{"class":156},[143,15220,1049],{"class":149},[143,15222,1052],{"class":755},[143,15224,11484],{"class":755},[143,15226,67],{"class":6116},[143,15228,1055],{"class":149},[143,15230,15231],{"class":145,"line":306},[143,15232,2449],{"class":149},[143,15234,15235,15237,15239,15242,15244],{"class":145,"line":319},[143,15236,7429],{"class":149},[143,15238,2081],{"class":755},[143,15240,15241],{"class":163}," \"func (int &a) 调用 \"",[143,15243,2348],{"class":755},[143,15245,9740],{"class":149},[143,15247,15248],{"class":145,"line":332},[143,15249,348],{"class":149},[143,15251,15252],{"class":145,"line":345},[143,15253,3300],{"emptyLinePlaceholder":976},[143,15255,15256,15258,15260,15262,15264,15266,15268,15270],{"class":145,"line":701},[143,15257,6264],{"class":755},[143,15259,12285],{"class":156},[143,15261,1049],{"class":149},[143,15263,7692],{"class":755},[143,15265,3282],{"class":755},[143,15267,11484],{"class":755},[143,15269,67],{"class":6116},[143,15271,1055],{"class":149},[143,15273,15274],{"class":145,"line":707},[143,15275,2449],{"class":149},[143,15277,15278,15280,15282,15285,15287],{"class":145,"line":727},[143,15279,7429],{"class":149},[143,15281,2081],{"class":755},[143,15283,15284],{"class":163}," \"func (const int &a) 调用 \"",[143,15286,2348],{"class":755},[143,15288,9740],{"class":149},[143,15290,15291],{"class":145,"line":2518},[143,15292,348],{"class":149},[143,15294,15295],{"class":145,"line":2524},[143,15296,3300],{"emptyLinePlaceholder":976},[143,15298,15299],{"class":145,"line":2529},[143,15300,3300],{"emptyLinePlaceholder":976},[143,15302,15303],{"class":145,"line":2543},[143,15304,15305],{"class":266},"\u002F\u002F2、函数重载碰到函数默认参数\n",[143,15307,15308],{"class":145,"line":2548},[143,15309,3300],{"emptyLinePlaceholder":976},[143,15311,15312,15314,15316,15318,15320,15322,15324,15326,15328,15330,15332],{"class":145,"line":2554},[143,15313,6264],{"class":755},[143,15315,14518],{"class":156},[143,15317,1049],{"class":149},[143,15319,1052],{"class":755},[143,15321,2302],{"class":6116},[143,15323,13335],{"class":149},[143,15325,1052],{"class":755},[143,15327,3733],{"class":6116},[143,15329,14464],{"class":755},[143,15331,2938],{"class":280},[143,15333,1055],{"class":149},[143,15335,15336],{"class":145,"line":2575},[143,15337,2449],{"class":149},[143,15339,15340,15342,15344,15347,15349],{"class":145,"line":2580},[143,15341,7429],{"class":149},[143,15343,2081],{"class":755},[143,15345,15346],{"class":163}," \"func2(int a, int b = 10) 调用\"",[143,15348,2348],{"class":755},[143,15350,9740],{"class":149},[143,15352,15353],{"class":145,"line":2594},[143,15354,348],{"class":149},[143,15356,15357],{"class":145,"line":2599},[143,15358,3300],{"emptyLinePlaceholder":976},[143,15360,15361,15363,15365,15367,15369,15371],{"class":145,"line":2628},[143,15362,6264],{"class":755},[143,15364,14518],{"class":156},[143,15366,1049],{"class":149},[143,15368,1052],{"class":755},[143,15370,2302],{"class":6116},[143,15372,1055],{"class":149},[143,15374,15375],{"class":145,"line":2633},[143,15376,2449],{"class":149},[143,15378,15379,15381,15383,15386,15388],{"class":145,"line":2650},[143,15380,7429],{"class":149},[143,15382,2081],{"class":755},[143,15384,15385],{"class":163}," \"func2(int a) 调用\"",[143,15387,2348],{"class":755},[143,15389,9740],{"class":149},[143,15391,15392],{"class":145,"line":2655},[143,15393,348],{"class":149},[143,15395,15396],{"class":145,"line":2660},[143,15397,3300],{"emptyLinePlaceholder":976},[143,15399,15400,15402,15404],{"class":145,"line":2665},[143,15401,1052],{"class":755},[143,15403,2873],{"class":156},[143,15405,11753],{"class":149},[143,15407,15408],{"class":145,"line":2679},[143,15409,14110],{"class":149},[143,15411,15412,15414,15416,15418,15420],{"class":145,"line":2684},[143,15413,2885],{"class":755},[143,15415,11769],{"class":149},[143,15417,160],{"class":755},[143,15419,2938],{"class":280},[143,15421,290],{"class":149},[143,15423,15424,15426,15429],{"class":145,"line":3477},[143,15425,14185],{"class":156},[143,15427,15428],{"class":149},"(a);",[143,15430,15431],{"class":266}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[143,15433,15434,15436,15438,15440,15442],{"class":145,"line":3491},[143,15435,14185],{"class":156},[143,15437,1049],{"class":149},[143,15439,1487],{"class":280},[143,15441,6866],{"class":149},[143,15443,15444],{"class":266},"\u002F\u002F调用有const   10是个常量\n",[143,15446,15447],{"class":145,"line":3499},[143,15448,3300],{"emptyLinePlaceholder":976},[143,15450,15451],{"class":145,"line":3504},[143,15452,3300],{"emptyLinePlaceholder":976},[143,15454,15455,15458],{"class":145,"line":3510},[143,15456,15457],{"class":266},"    \u002F\u002Ffunc2(10);",[143,15459,15460],{"class":266}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[143,15462,15463],{"class":145,"line":3516},[143,15464,3300],{"emptyLinePlaceholder":976},[143,15466,15467,15469,15471,15473],{"class":145,"line":3521},[143,15468,3203],{"class":156},[143,15470,1049],{"class":149},[143,15472,3208],{"class":163},[143,15474,3619],{"class":149},[143,15476,15477],{"class":145,"line":8848},[143,15478,3300],{"emptyLinePlaceholder":976},[143,15480,15481,15483,15485],{"class":145,"line":8872},[143,15482,4990],{"class":755},[143,15484,4993],{"class":280},[143,15486,290],{"class":149},[143,15488,15489],{"class":145,"line":8877},[143,15490,348],{"class":149},[954,15492,15493],{},"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":138,"searchDepth":35,"depth":35,"links":15495},[15496,15497,15498],{"id":14429,"depth":35,"text":14430},{"id":14686,"depth":35,"text":14687},{"id":14807,"depth":35,"text":14808,"children":15499},[15500,15501],{"id":14814,"depth":46,"text":14815},{"id":15184,"depth":46,"text":15185},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14421,"description":138},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15508,"title":15509,"body":15510,"description":24263,"extension":974,"meta":24264,"navigation":976,"path":24265,"seo":24266,"stem":24267,"__hash__":24268},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15511,"toc":24244},[15512,15515,15521,15528,15533,15536,15539,15542,15546,15550,15553,15556,15564,15569,15572,15579,15584,15743,15746,15999,16002,16005,16008,16013,16016,16019,16030,16035,16271,16275,16285,16288,16296,16443,16447,16450,16453,16457,16901,16905,16913,16921,17833,17840,17845,18473,18476,18479,18482,18601,18604,18691,18694,18820,18823,18917,18920,19273,19277,19285,19289,19296,19299,19302,19313,19319,19324,19336,19344,19364,19372,19389,19575,19578,19582,19585,19588,19591,19594,19597,19600,19603,20063,20069,20073,20076,20087,20674,20677,21166,21170,21173,21176,21179,21182,21185,21193,21589,21593,21596,21599,22046,22049,22052,22057,22060,22065,22068,22072,22075,22077,22083,22086,22392,22402,22443,22447,22450,22452,22485,22488,22795,22797,22812,22815,22838,22847,22853,22856,22860,22863,22866,22871,22882,22887,22895,22900,23030,23033,23036,23211,23216,23428,23432,23435,23549,23554,23793,23797,23801,23804,23807,23812,23917,23920,23923,23926,23930,24041,24044,24047,24052,24104,24107,24110,24115,24161,24164,24169,24237,24239,24242],[10,15513,15509],{"id":15514},"_8类和对象",[63,15516,15517,15518],{},"C++面向对象的三大特性为",[25,15519,15520],{},"封装、继承、多态",[63,15522,15523,15524,15527],{},"C++认为",[25,15525,15526],{},"万事万物都皆为对象","，对象上有其属性和行为",[63,15529,15530],{},[25,15531,15532],{},"例如：",[63,15534,15535],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[63,15537,15538],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[63,15540,15541],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,15543,15545],{"id":15544},"_81封装","8.1封装",[58,15547,15549],{"id":15548},"_811封装的意义","8.1.1封装的意义",[63,15551,15552],{},"封装是C++面向对象三大特性之一",[63,15554,15555],{},"封装的意义：",[232,15557,15558,15561],{},[22,15559,15560],{},"将属性和行为作为一个整体，表现生活中的事物",[22,15562,15563],{},"将属性和行为加以权限控制",[63,15565,15566],{},[25,15567,15568],{},"封装意义一：",[63,15570,15571],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[63,15573,15574,497,15576],{},[25,15575,6081],{},[140,15577,15578],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[19,15580,15581],{},[22,15582,15583],{},"**示例1：**设计一个圆类，求圆的周长",[133,15585,15587],{"className":1037,"code":15586,"language":1039,"meta":138,"style":138},"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",[140,15588,15589,15597,15601,15606,15611,15616,15621,15628,15633,15643,15647,15665,15669,15673,15681,15685,15690,15695,15700,15705,15716,15739],{"__ignoreMap":138},[143,15590,15591,15594],{"class":145,"line":146},[143,15592,15593],{"class":755},"class",[143,15595,15596],{"class":156}," Circle\n",[143,15598,15599],{"class":145,"line":35},[143,15600,2449],{"class":149},[143,15602,15603],{"class":145,"line":46},[143,15604,15605],{"class":266},"    \u002F\u002F访问权限\n",[143,15607,15608],{"class":145,"line":293},[143,15609,15610],{"class":266},"    \u002F\u002F公共权限\n",[143,15612,15613],{"class":145,"line":306},[143,15614,15615],{"class":755},"public:\n",[143,15617,15618],{"class":145,"line":319},[143,15619,15620],{"class":266},"    \u002F\u002F属性\n",[143,15622,15623,15625],{"class":145,"line":332},[143,15624,2885],{"class":755},[143,15626,15627],{"class":149}," m_r;\n",[143,15629,15630],{"class":145,"line":345},[143,15631,15632],{"class":266},"    \u002F\u002F行为\n",[143,15634,15635,15638,15641],{"class":145,"line":701},[143,15636,15637],{"class":755},"    double",[143,15639,15640],{"class":156}," calculateZC",[143,15642,2876],{"class":149},[143,15644,15645],{"class":145,"line":707},[143,15646,2930],{"class":149},[143,15648,15649,15652,15655,15657,15660,15662],{"class":145,"line":727},[143,15650,15651],{"class":755},"        return",[143,15653,15654],{"class":280}," 2",[143,15656,1496],{"class":755},[143,15658,15659],{"class":149},"PI",[143,15661,1496],{"class":755},[143,15663,15664],{"class":149},"m_r;\n",[143,15666,15667],{"class":145,"line":2518},[143,15668,3087],{"class":149},[143,15670,15671],{"class":145,"line":2524},[143,15672,4895],{"class":149},[143,15674,15675,15677,15679],{"class":145,"line":2529},[143,15676,1052],{"class":755},[143,15678,2873],{"class":156},[143,15680,2876],{"class":149},[143,15682,15683],{"class":145,"line":2543},[143,15684,2449],{"class":149},[143,15686,15687],{"class":145,"line":2548},[143,15688,15689],{"class":266},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[143,15691,15692],{"class":145,"line":2554},[143,15693,15694],{"class":266},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[143,15696,15697],{"class":145,"line":2575},[143,15698,15699],{"class":149},"    Circle c1;\n",[143,15701,15702],{"class":145,"line":2580},[143,15703,15704],{"class":266},"    \u002F\u002F给圆对象 的属性进行赋值\n",[143,15706,15707,15710,15712,15714],{"class":145,"line":2594},[143,15708,15709],{"class":149},"    c1.m_r",[143,15711,160],{"class":755},[143,15713,1487],{"class":280},[143,15715,290],{"class":149},[143,15717,15718,15720,15722,15725,15727,15730,15733,15735,15737],{"class":145,"line":2599},[143,15719,2454],{"class":149},[143,15721,2081],{"class":755},[143,15723,15724],{"class":163},"\"圆的周长\"",[143,15726,2081],{"class":755},[143,15728,15729],{"class":149},"c1.",[143,15731,15732],{"class":156},"calculateZC",[143,15734,3327],{"class":149},[143,15736,2081],{"class":755},[143,15738,2103],{"class":149},[143,15740,15741],{"class":145,"line":2628},[143,15742,348],{"class":149},[63,15744,15745],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[133,15747,15749],{"className":1037,"code":15748,"language":1039,"meta":138,"style":138},"#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",[140,15750,15751,15757,15767,15773,15779,15783,15787,15792,15799,15804,15822,15826,15836,15840,15845,15861,15865,15875,15879,15884,15892,15896,15928,15932,15936,15944,15948,15953,15958,15972,15986,15995],{"__ignoreMap":138},[143,15752,15753,15755],{"class":145,"line":146},[143,15754,2850],{"class":755},[143,15756,2853],{"class":163},[143,15758,15759,15761,15763,15765],{"class":145,"line":35},[143,15760,2858],{"class":755},[143,15762,2861],{"class":755},[143,15764,2864],{"class":156},[143,15766,290],{"class":149},[143,15768,15769,15771],{"class":145,"line":46},[143,15770,2850],{"class":755},[143,15772,8649],{"class":163},[143,15774,15775,15777],{"class":145,"line":293},[143,15776,15593],{"class":755},[143,15778,8662],{"class":156},[143,15780,15781],{"class":145,"line":306},[143,15782,2449],{"class":149},[143,15784,15785],{"class":145,"line":319},[143,15786,15615],{"class":755},[143,15788,15789],{"class":145,"line":332},[143,15790,15791],{"class":149},"    string m_name;\n",[143,15793,15794,15796],{"class":145,"line":345},[143,15795,2885],{"class":755},[143,15797,15798],{"class":149}," m_id;\n",[143,15800,15801],{"class":145,"line":701},[143,15802,15803],{"class":266},"    \u002F\u002F赋值姓名\n",[143,15805,15806,15809,15812,15814,15817,15820],{"class":145,"line":707},[143,15807,15808],{"class":755},"    void",[143,15810,15811],{"class":156}," setName",[143,15813,1049],{"class":149},[143,15815,15816],{"class":156},"string",[143,15818,15819],{"class":6116}," name",[143,15821,1055],{"class":149},[143,15823,15824],{"class":145,"line":727},[143,15825,2930],{"class":149},[143,15827,15828,15831,15833],{"class":145,"line":2518},[143,15829,15830],{"class":149},"        m_name",[143,15832,160],{"class":755},[143,15834,15835],{"class":149},"name;\n",[143,15837,15838],{"class":145,"line":2524},[143,15839,3087],{"class":149},[143,15841,15842],{"class":145,"line":2529},[143,15843,15844],{"class":266},"    \u002F\u002F赋值学号\n",[143,15846,15847,15849,15852,15854,15856,15859],{"class":145,"line":2543},[143,15848,15808],{"class":755},[143,15850,15851],{"class":156}," setId",[143,15853,1049],{"class":149},[143,15855,1052],{"class":755},[143,15857,15858],{"class":6116}," id",[143,15860,1055],{"class":149},[143,15862,15863],{"class":145,"line":2548},[143,15864,2930],{"class":149},[143,15866,15867,15870,15872],{"class":145,"line":2554},[143,15868,15869],{"class":149},"        m_id",[143,15871,160],{"class":755},[143,15873,15874],{"class":149},"id;\n",[143,15876,15877],{"class":145,"line":2575},[143,15878,3087],{"class":149},[143,15880,15881],{"class":145,"line":2580},[143,15882,15883],{"class":266},"    \u002F\u002F打印学生信息\n",[143,15885,15886,15888,15890],{"class":145,"line":2594},[143,15887,15808],{"class":755},[143,15889,10515],{"class":156},[143,15891,2876],{"class":149},[143,15893,15894],{"class":145,"line":2599},[143,15895,2930],{"class":149},[143,15897,15898,15900,15902,15905,15907,15910,15912,15914,15916,15919,15921,15924,15926],{"class":145,"line":2628},[143,15899,4351],{"class":149},[143,15901,2081],{"class":755},[143,15903,15904],{"class":163},"\"姓名：\"",[143,15906,2081],{"class":755},[143,15908,15909],{"class":149},"m_name",[143,15911,2081],{"class":755},[143,15913,5259],{"class":163},[143,15915,2081],{"class":755},[143,15917,15918],{"class":163},"\"学号：\"",[143,15920,2081],{"class":755},[143,15922,15923],{"class":149},"m_id",[143,15925,2081],{"class":755},[143,15927,2103],{"class":149},[143,15929,15930],{"class":145,"line":2633},[143,15931,3087],{"class":149},[143,15933,15934],{"class":145,"line":2650},[143,15935,4895],{"class":149},[143,15937,15938,15940,15942],{"class":145,"line":2655},[143,15939,1052],{"class":755},[143,15941,2873],{"class":156},[143,15943,2876],{"class":149},[143,15945,15946],{"class":145,"line":2660},[143,15947,2449],{"class":149},[143,15949,15950],{"class":145,"line":2665},[143,15951,15952],{"class":266},"    \u002F\u002F实例化\n",[143,15954,15955],{"class":145,"line":2679},[143,15956,15957],{"class":149},"    Student s1;\n",[143,15959,15960,15963,15966,15968,15970],{"class":145,"line":2684},[143,15961,15962],{"class":149},"    s1.",[143,15964,15965],{"class":156},"setName",[143,15967,1049],{"class":149},[143,15969,8816],{"class":163},[143,15971,3619],{"class":149},[143,15973,15974,15976,15979,15981,15984],{"class":145,"line":3477},[143,15975,15962],{"class":149},[143,15977,15978],{"class":156},"setId",[143,15980,1049],{"class":149},[143,15982,15983],{"class":280},"123456",[143,15985,3619],{"class":149},[143,15987,15988,15990,15993],{"class":145,"line":3491},[143,15989,15962],{"class":149},[143,15991,15992],{"class":156},"printInfo",[143,15994,6536],{"class":149},[143,15996,15997],{"class":145,"line":3499},[143,15998,348],{"class":149},[63,16000,16001],{},"类中的属性和行为统称为成员",[63,16003,16004],{},"属性：成员属性(成员变量)",[63,16006,16007],{},"方法：成员函数(成员方法)",[63,16009,16010],{},[25,16011,16012],{},"封装意义二：",[63,16014,16015],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[63,16017,16018],{},"访问权限有三种：",[19,16020,16021,16024,16027],{},[22,16022,16023],{},"public        公共权限",[22,16025,16026],{},"protected 保护权限",[22,16028,16029],{},"private      私有权限",[63,16031,16032],{},[25,16033,16034],{},"示例：",[133,16036,16038],{"className":10841,"code":16037,"language":10843,"meta":138,"style":138},"\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",[140,16039,16040,16045,16050,16055,16060,16064,16071,16075,16080,16084,16089,16093,16098,16103,16108,16112,16117,16122,16129,16133,16137,16145,16149,16160,16172,16184,16188,16192,16196,16204,16208,16213,16225,16233,16241,16245,16255,16259,16267],{"__ignoreMap":138},[143,16041,16042],{"class":145,"line":146},[143,16043,16044],{"class":266},"\u002F\u002F三种权限\n",[143,16046,16047],{"class":145,"line":35},[143,16048,16049],{"class":266},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[143,16051,16052],{"class":145,"line":46},[143,16053,16054],{"class":266},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[143,16056,16057],{"class":145,"line":293},[143,16058,16059],{"class":266},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[143,16061,16062],{"class":145,"line":306},[143,16063,3300],{"emptyLinePlaceholder":976},[143,16065,16066,16068],{"class":145,"line":319},[143,16067,15593],{"class":755},[143,16069,16070],{"class":156}," Person\n",[143,16072,16073],{"class":145,"line":332},[143,16074,2449],{"class":149},[143,16076,16077],{"class":145,"line":345},[143,16078,16079],{"class":266},"    \u002F\u002F姓名  公共权限\n",[143,16081,16082],{"class":145,"line":701},[143,16083,15615],{"class":755},[143,16085,16086],{"class":145,"line":707},[143,16087,16088],{"class":149},"    string m_Name;\n",[143,16090,16091],{"class":145,"line":727},[143,16092,3300],{"emptyLinePlaceholder":976},[143,16094,16095],{"class":145,"line":2518},[143,16096,16097],{"class":266},"    \u002F\u002F汽车  保护权限\n",[143,16099,16100],{"class":145,"line":2524},[143,16101,16102],{"class":755},"protected:\n",[143,16104,16105],{"class":145,"line":2529},[143,16106,16107],{"class":149},"    string m_Car;\n",[143,16109,16110],{"class":145,"line":2543},[143,16111,3300],{"emptyLinePlaceholder":976},[143,16113,16114],{"class":145,"line":2548},[143,16115,16116],{"class":266},"    \u002F\u002F银行卡密码  私有权限\n",[143,16118,16119],{"class":145,"line":2554},[143,16120,16121],{"class":755},"private:\n",[143,16123,16124,16126],{"class":145,"line":2575},[143,16125,2885],{"class":755},[143,16127,16128],{"class":149}," m_Password;\n",[143,16130,16131],{"class":145,"line":2580},[143,16132,3300],{"emptyLinePlaceholder":976},[143,16134,16135],{"class":145,"line":2594},[143,16136,15615],{"class":755},[143,16138,16139,16141,16143],{"class":145,"line":2599},[143,16140,15808],{"class":755},[143,16142,12285],{"class":156},[143,16144,2876],{"class":149},[143,16146,16147],{"class":145,"line":2628},[143,16148,2930],{"class":149},[143,16150,16151,16154,16156,16158],{"class":145,"line":2633},[143,16152,16153],{"class":149},"        m_Name ",[143,16155,160],{"class":755},[143,16157,9838],{"class":163},[143,16159,290],{"class":149},[143,16161,16162,16165,16167,16170],{"class":145,"line":2650},[143,16163,16164],{"class":149},"        m_Car ",[143,16166,160],{"class":755},[143,16168,16169],{"class":163}," \"拖拉机\"",[143,16171,290],{"class":149},[143,16173,16174,16177,16179,16182],{"class":145,"line":2655},[143,16175,16176],{"class":149},"        m_Password ",[143,16178,160],{"class":755},[143,16180,16181],{"class":280}," 123456",[143,16183,290],{"class":149},[143,16185,16186],{"class":145,"line":2660},[143,16187,3087],{"class":149},[143,16189,16190],{"class":145,"line":2665},[143,16191,4895],{"class":149},[143,16193,16194],{"class":145,"line":2679},[143,16195,3300],{"emptyLinePlaceholder":976},[143,16197,16198,16200,16202],{"class":145,"line":2684},[143,16199,1052],{"class":755},[143,16201,2873],{"class":156},[143,16203,11753],{"class":149},[143,16205,16206],{"class":145,"line":3477},[143,16207,3300],{"emptyLinePlaceholder":976},[143,16209,16210],{"class":145,"line":3491},[143,16211,16212],{"class":149},"    Person p;\n",[143,16214,16215,16218,16220,16223],{"class":145,"line":3499},[143,16216,16217],{"class":149},"    p.m_Name ",[143,16219,160],{"class":755},[143,16221,16222],{"class":163}," \"李四\"",[143,16224,290],{"class":149},[143,16226,16227,16230],{"class":145,"line":3504},[143,16228,16229],{"class":266},"    \u002F\u002Fp.m_Car = \"奔驰\";",[143,16231,16232],{"class":266},"  \u002F\u002F保护权限类外访问不到\n",[143,16234,16235,16238],{"class":145,"line":3510},[143,16236,16237],{"class":266},"    \u002F\u002Fp.m_Password = 123;",[143,16239,16240],{"class":266}," \u002F\u002F私有权限类外访问不到\n",[143,16242,16243],{"class":145,"line":3516},[143,16244,3300],{"emptyLinePlaceholder":976},[143,16246,16247,16249,16251,16253],{"class":145,"line":3521},[143,16248,3203],{"class":156},[143,16250,1049],{"class":149},[143,16252,3208],{"class":163},[143,16254,3619],{"class":149},[143,16256,16257],{"class":145,"line":8848},[143,16258,3300],{"emptyLinePlaceholder":976},[143,16260,16261,16263,16265],{"class":145,"line":8872},[143,16262,4990],{"class":755},[143,16264,4993],{"class":280},[143,16266,290],{"class":149},[143,16268,16269],{"class":145,"line":8877},[143,16270,348],{"class":149},[58,16272,16274],{"id":16273},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[63,16276,16277,16278,16281,16282],{},"在C++中 struct和class唯一的",[25,16279,16280],{},"区别","就在于 ",[25,16283,16284],{},"默认的访问权限不同",[63,16286,16287],{},"区别：",[232,16289,16290,16293],{},[22,16291,16292],{},"struct 默认权限为公共",[22,16294,16295],{},"class   默认权限为私有",[133,16297,16299],{"className":10841,"code":16298,"language":10843,"meta":138,"style":138},"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",[140,16300,16301,16308,16312,16322,16326,16330,16337,16341,16351,16355,16359,16367,16371,16376,16390,16394,16399,16413,16417,16427,16431,16439],{"__ignoreMap":138},[143,16302,16303,16305],{"class":145,"line":146},[143,16304,15593],{"class":755},[143,16306,16307],{"class":156}," C1\n",[143,16309,16310],{"class":145,"line":35},[143,16311,2449],{"class":149},[143,16313,16314,16316,16319],{"class":145,"line":46},[143,16315,2885],{"class":755},[143,16317,16318],{"class":149},"  m_A;",[143,16320,16321],{"class":266}," \u002F\u002F默认是私有权限\n",[143,16323,16324],{"class":145,"line":293},[143,16325,4895],{"class":149},[143,16327,16328],{"class":145,"line":306},[143,16329,3300],{"emptyLinePlaceholder":976},[143,16331,16332,16334],{"class":145,"line":319},[143,16333,8659],{"class":755},[143,16335,16336],{"class":156}," C2\n",[143,16338,16339],{"class":145,"line":332},[143,16340,2449],{"class":149},[143,16342,16343,16345,16348],{"class":145,"line":345},[143,16344,2885],{"class":755},[143,16346,16347],{"class":149}," m_A;",[143,16349,16350],{"class":266},"  \u002F\u002F默认是公共权限\n",[143,16352,16353],{"class":145,"line":701},[143,16354,4895],{"class":149},[143,16356,16357],{"class":145,"line":707},[143,16358,3300],{"emptyLinePlaceholder":976},[143,16360,16361,16363,16365],{"class":145,"line":727},[143,16362,1052],{"class":755},[143,16364,2873],{"class":156},[143,16366,11753],{"class":149},[143,16368,16369],{"class":145,"line":2518},[143,16370,3300],{"emptyLinePlaceholder":976},[143,16372,16373],{"class":145,"line":2524},[143,16374,16375],{"class":149},"    C1 c1;\n",[143,16377,16378,16381,16383,16385,16387],{"class":145,"line":2529},[143,16379,16380],{"class":149},"    c1.m_A ",[143,16382,160],{"class":755},[143,16384,2938],{"class":280},[143,16386,1101],{"class":149},[143,16388,16389],{"class":266}," \u002F\u002F错误，访问权限是私有\n",[143,16391,16392],{"class":145,"line":2543},[143,16393,3300],{"emptyLinePlaceholder":976},[143,16395,16396],{"class":145,"line":2548},[143,16397,16398],{"class":149},"    C2 c2;\n",[143,16400,16401,16404,16406,16408,16410],{"class":145,"line":2554},[143,16402,16403],{"class":149},"    c2.m_A ",[143,16405,160],{"class":755},[143,16407,2938],{"class":280},[143,16409,1101],{"class":149},[143,16411,16412],{"class":266}," \u002F\u002F正确，访问权限是公共\n",[143,16414,16415],{"class":145,"line":2575},[143,16416,3300],{"emptyLinePlaceholder":976},[143,16418,16419,16421,16423,16425],{"class":145,"line":2580},[143,16420,3203],{"class":156},[143,16422,1049],{"class":149},[143,16424,3208],{"class":163},[143,16426,3619],{"class":149},[143,16428,16429],{"class":145,"line":2594},[143,16430,3300],{"emptyLinePlaceholder":976},[143,16432,16433,16435,16437],{"class":145,"line":2599},[143,16434,4990],{"class":755},[143,16436,4993],{"class":280},[143,16438,290],{"class":149},[143,16440,16441],{"class":145,"line":2628},[143,16442,348],{"class":149},[58,16444,16446],{"id":16445},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[63,16448,16449],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[63,16451,16452],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[63,16454,16455],{},[25,16456,16034],{},[133,16458,16460],{"className":10841,"code":16459,"language":10843,"meta":138,"style":138},"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",[140,16461,16462,16471,16475,16479,16484,16498,16507,16511,16521,16525,16532,16536,16540,16544,16549,16558,16565,16569,16574,16590,16613,16626,16633,16637,16646,16650,16654,16659,16675,16685,16689,16693,16697,16705,16709,16719,16723,16731,16735,16739,16747,16751,16755,16760,16773,16796,16800,16805,16818,16840,16844,16849,16863,16871,16875,16885,16889,16897],{"__ignoreMap":138},[143,16463,16464,16466,16469],{"class":145,"line":146},[143,16465,15593],{"class":755},[143,16467,16468],{"class":156}," Person",[143,16470,275],{"class":149},[143,16472,16473],{"class":145,"line":35},[143,16474,15615],{"class":755},[143,16476,16477],{"class":145,"line":46},[143,16478,3300],{"emptyLinePlaceholder":976},[143,16480,16481],{"class":145,"line":293},[143,16482,16483],{"class":266},"    \u002F\u002F姓名设置可读可写\n",[143,16485,16486,16488,16490,16492,16494,16496],{"class":145,"line":306},[143,16487,15808],{"class":755},[143,16489,15811],{"class":156},[143,16491,1049],{"class":149},[143,16493,15816],{"class":156},[143,16495,15819],{"class":6116},[143,16497,13342],{"class":149},[143,16499,16500,16502,16504],{"class":145,"line":319},[143,16501,16153],{"class":149},[143,16503,160],{"class":755},[143,16505,16506],{"class":149}," name;\n",[143,16508,16509],{"class":145,"line":332},[143,16510,3087],{"class":149},[143,16512,16513,16516,16519],{"class":145,"line":345},[143,16514,16515],{"class":156},"    string",[143,16517,16518],{"class":156}," getName",[143,16520,2876],{"class":149},[143,16522,16523],{"class":145,"line":701},[143,16524,2930],{"class":149},[143,16526,16527,16529],{"class":145,"line":707},[143,16528,15651],{"class":755},[143,16530,16531],{"class":149}," m_Name;\n",[143,16533,16534],{"class":145,"line":727},[143,16535,3087],{"class":149},[143,16537,16538],{"class":145,"line":2518},[143,16539,3300],{"emptyLinePlaceholder":976},[143,16541,16542],{"class":145,"line":2524},[143,16543,3300],{"emptyLinePlaceholder":976},[143,16545,16546],{"class":145,"line":2529},[143,16547,16548],{"class":266},"    \u002F\u002F获取年龄 \n",[143,16550,16551,16553,16556],{"class":145,"line":2543},[143,16552,2885],{"class":755},[143,16554,16555],{"class":156}," getAge",[143,16557,11753],{"class":149},[143,16559,16560,16562],{"class":145,"line":2548},[143,16561,15651],{"class":755},[143,16563,16564],{"class":149}," m_Age;\n",[143,16566,16567],{"class":145,"line":2554},[143,16568,3087],{"class":149},[143,16570,16571],{"class":145,"line":2575},[143,16572,16573],{"class":266},"    \u002F\u002F设置年龄\n",[143,16575,16576,16578,16581,16583,16585,16588],{"class":145,"line":2580},[143,16577,15808],{"class":755},[143,16579,16580],{"class":156}," setAge",[143,16582,1049],{"class":149},[143,16584,1052],{"class":755},[143,16586,16587],{"class":6116}," age",[143,16589,13342],{"class":149},[143,16591,16592,16594,16597,16599,16601,16603,16606,16608,16611],{"class":145,"line":2594},[143,16593,3397],{"class":755},[143,16595,16596],{"class":149}," (age ",[143,16598,150],{"class":755},[143,16600,4993],{"class":280},[143,16602,4155],{"class":755},[143,16604,16605],{"class":149}," age ",[143,16607,1998],{"class":755},[143,16609,16610],{"class":280}," 150",[143,16612,13342],{"class":149},[143,16614,16615,16617,16619,16622,16624],{"class":145,"line":2599},[143,16616,10619],{"class":149},[143,16618,2081],{"class":755},[143,16620,16621],{"class":163}," \"你个老妖精!\"",[143,16623,2348],{"class":755},[143,16625,9740],{"class":149},[143,16627,16628,16631],{"class":145,"line":2628},[143,16629,16630],{"class":755},"            return",[143,16632,290],{"class":149},[143,16634,16635],{"class":145,"line":2633},[143,16636,3429],{"class":149},[143,16638,16639,16642,16644],{"class":145,"line":2650},[143,16640,16641],{"class":149},"        m_Age ",[143,16643,160],{"class":755},[143,16645,8697],{"class":149},[143,16647,16648],{"class":145,"line":2655},[143,16649,3087],{"class":149},[143,16651,16652],{"class":145,"line":2660},[143,16653,3300],{"emptyLinePlaceholder":976},[143,16655,16656],{"class":145,"line":2665},[143,16657,16658],{"class":266},"    \u002F\u002F情人设置为只写\n",[143,16660,16661,16663,16666,16668,16670,16673],{"class":145,"line":2679},[143,16662,15808],{"class":755},[143,16664,16665],{"class":156}," setLover",[143,16667,1049],{"class":149},[143,16669,15816],{"class":156},[143,16671,16672],{"class":6116}," lover",[143,16674,13342],{"class":149},[143,16676,16677,16680,16682],{"class":145,"line":2684},[143,16678,16679],{"class":149},"        m_Lover ",[143,16681,160],{"class":755},[143,16683,16684],{"class":149}," lover;\n",[143,16686,16687],{"class":145,"line":3477},[143,16688,3087],{"class":149},[143,16690,16691],{"class":145,"line":3491},[143,16692,3300],{"emptyLinePlaceholder":976},[143,16694,16695],{"class":145,"line":3499},[143,16696,16121],{"class":755},[143,16698,16699,16702],{"class":145,"line":3504},[143,16700,16701],{"class":149},"    string m_Name;",[143,16703,16704],{"class":266}," \u002F\u002F可读可写  姓名\n",[143,16706,16707],{"class":145,"line":3510},[143,16708,14110],{"class":149},[143,16710,16711,16713,16716],{"class":145,"line":3516},[143,16712,2885],{"class":755},[143,16714,16715],{"class":149}," m_Age;",[143,16717,16718],{"class":266}," \u002F\u002F只读  年龄\n",[143,16720,16721],{"class":145,"line":3521},[143,16722,3300],{"emptyLinePlaceholder":976},[143,16724,16725,16728],{"class":145,"line":8848},[143,16726,16727],{"class":149},"    string m_Lover;",[143,16729,16730],{"class":266}," \u002F\u002F只写  情人\n",[143,16732,16733],{"class":145,"line":8872},[143,16734,4895],{"class":149},[143,16736,16737],{"class":145,"line":8877},[143,16738,3300],{"emptyLinePlaceholder":976},[143,16740,16741,16743,16745],{"class":145,"line":8883},[143,16742,1052],{"class":755},[143,16744,2873],{"class":156},[143,16746,11753],{"class":149},[143,16748,16749],{"class":145,"line":8910},[143,16750,3300],{"emptyLinePlaceholder":976},[143,16752,16753],{"class":145,"line":8915},[143,16754,16212],{"class":149},[143,16756,16757],{"class":145,"line":8921},[143,16758,16759],{"class":266},"    \u002F\u002F姓名设置\n",[143,16761,16762,16765,16767,16769,16771],{"class":145,"line":8933},[143,16763,16764],{"class":149},"    p.",[143,16766,15965],{"class":156},[143,16768,1049],{"class":149},[143,16770,8816],{"class":163},[143,16772,3619],{"class":149},[143,16774,16775,16777,16779,16782,16784,16787,16790,16792,16794],{"class":145,"line":8945},[143,16776,7429],{"class":149},[143,16778,2081],{"class":755},[143,16780,16781],{"class":163}," \"姓名： \"",[143,16783,2348],{"class":755},[143,16785,16786],{"class":149}," p.",[143,16788,16789],{"class":156},"getName",[143,16791,13950],{"class":149},[143,16793,2081],{"class":755},[143,16795,9740],{"class":149},[143,16797,16798],{"class":145,"line":8957},[143,16799,3300],{"emptyLinePlaceholder":976},[143,16801,16802],{"class":145,"line":10616},[143,16803,16804],{"class":266},"    \u002F\u002F年龄设置\n",[143,16806,16807,16809,16812,16814,16816],{"class":145,"line":10641},[143,16808,16764],{"class":149},[143,16810,16811],{"class":156},"setAge",[143,16813,1049],{"class":149},[143,16815,1697],{"class":280},[143,16817,3619],{"class":149},[143,16819,16820,16822,16824,16827,16829,16831,16834,16836,16838],{"class":145,"line":10664},[143,16821,7429],{"class":149},[143,16823,2081],{"class":755},[143,16825,16826],{"class":163}," \"年龄： \"",[143,16828,2348],{"class":755},[143,16830,16786],{"class":149},[143,16832,16833],{"class":156},"getAge",[143,16835,13950],{"class":149},[143,16837,2081],{"class":755},[143,16839,9740],{"class":149},[143,16841,16842],{"class":145,"line":10688},[143,16843,3300],{"emptyLinePlaceholder":976},[143,16845,16846],{"class":145,"line":10693},[143,16847,16848],{"class":266},"    \u002F\u002F情人设置\n",[143,16850,16851,16853,16856,16858,16861],{"class":145,"line":10698},[143,16852,16764],{"class":149},[143,16854,16855],{"class":156},"setLover",[143,16857,1049],{"class":149},[143,16859,16860],{"class":163},"\"苍井\"",[143,16862,3619],{"class":149},[143,16864,16865,16868],{"class":145,"line":10703},[143,16866,16867],{"class":266},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[143,16869,16870],{"class":266},"  \u002F\u002F只写属性，不可以读取\n",[143,16872,16873],{"class":145,"line":10712},[143,16874,3300],{"emptyLinePlaceholder":976},[143,16876,16877,16879,16881,16883],{"class":145,"line":10717},[143,16878,3203],{"class":156},[143,16880,1049],{"class":149},[143,16882,3208],{"class":163},[143,16884,3619],{"class":149},[143,16886,16887],{"class":145,"line":10723},[143,16888,3300],{"emptyLinePlaceholder":976},[143,16890,16891,16893,16895],{"class":145,"line":10744},[143,16892,4990],{"class":755},[143,16894,4993],{"class":280},[143,16896,290],{"class":149},[143,16898,16899],{"class":145,"line":10750},[143,16900,348],{"class":149},[58,16902,16904],{"id":16903},"_814封装案例","8.1.4封装案例",[19,16906,16907],{},[22,16908,16909,16912],{},[25,16910,16911],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[232,16914,16915,16918],{},[22,16916,16917],{},"求出立方体的面积和体积",[22,16919,16920],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[133,16922,16924],{"className":1037,"code":16923,"language":1039,"meta":138,"style":138},"#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",[140,16925,16926,16932,16942,16949,16953,16957,16962,16992,16996,17006,17016,17026,17030,17039,17043,17079,17083,17092,17096,17112,17116,17121,17130,17134,17141,17145,17154,17158,17165,17169,17178,17182,17189,17193,17198,17215,17219,17265,17269,17278,17282,17286,17290,17299,17303,17307,17312,17316,17322,17328,17334,17338,17342,17347,17369,17373,17427,17431,17439,17443,17448,17453,17466,17473,17489,17500,17506,17529,17535,17558,17572,17592,17598,17609,17632,17654,17659,17665,17679,17692,17697,17711,17716,17722,17727,17741,17746,17751,17765,17777,17782,17795,17800,17805,17810,17823,17828],{"__ignoreMap":138},[143,16927,16928,16930],{"class":145,"line":146},[143,16929,2850],{"class":755},[143,16931,2853],{"class":163},[143,16933,16934,16936,16938,16940],{"class":145,"line":35},[143,16935,2858],{"class":755},[143,16937,2861],{"class":755},[143,16939,2864],{"class":156},[143,16941,290],{"class":149},[143,16943,16944,16946],{"class":145,"line":46},[143,16945,15593],{"class":755},[143,16947,16948],{"class":156}," Cube\n",[143,16950,16951],{"class":145,"line":293},[143,16952,2449],{"class":149},[143,16954,16955],{"class":145,"line":306},[143,16956,15615],{"class":755},[143,16958,16959],{"class":145,"line":319},[143,16960,16961],{"class":266},"    \u002F\u002F输入长宽高\n",[143,16963,16964,16966,16969,16971,16973,16976,16978,16980,16983,16985,16987,16990],{"class":145,"line":332},[143,16965,15808],{"class":755},[143,16967,16968],{"class":156}," setLwh",[143,16970,1049],{"class":149},[143,16972,1052],{"class":755},[143,16974,16975],{"class":6116}," l",[143,16977,1419],{"class":149},[143,16979,1052],{"class":755},[143,16981,16982],{"class":6116}," w",[143,16984,1419],{"class":149},[143,16986,1052],{"class":755},[143,16988,16989],{"class":6116}," h",[143,16991,1055],{"class":149},[143,16993,16994],{"class":145,"line":345},[143,16995,2930],{"class":149},[143,16997,16998,17001,17003],{"class":145,"line":701},[143,16999,17000],{"class":149},"        m_L",[143,17002,160],{"class":755},[143,17004,17005],{"class":149},"l;\n",[143,17007,17008,17011,17013],{"class":145,"line":707},[143,17009,17010],{"class":149},"        m_W",[143,17012,160],{"class":755},[143,17014,17015],{"class":149},"w;\n",[143,17017,17018,17021,17023],{"class":145,"line":727},[143,17019,17020],{"class":149},"        m_H",[143,17022,160],{"class":755},[143,17024,17025],{"class":149},"h;\n",[143,17027,17028],{"class":145,"line":2518},[143,17029,3087],{"class":149},[143,17031,17032,17034,17037],{"class":145,"line":2524},[143,17033,2885],{"class":755},[143,17035,17036],{"class":156}," mianji",[143,17038,2876],{"class":149},[143,17040,17041],{"class":145,"line":2529},[143,17042,2930],{"class":149},[143,17044,17045,17047,17049,17051,17054,17056,17059,17061,17064,17066,17069,17071,17074,17076],{"class":145,"line":2543},[143,17046,15651],{"class":755},[143,17048,15654],{"class":280},[143,17050,1496],{"class":755},[143,17052,17053],{"class":149},"(m_L",[143,17055,1496],{"class":755},[143,17057,17058],{"class":149},"m_W ",[143,17060,1522],{"class":755},[143,17062,17063],{"class":149}," m_L",[143,17065,1496],{"class":755},[143,17067,17068],{"class":149},"m_H ",[143,17070,1522],{"class":755},[143,17072,17073],{"class":149}," m_W",[143,17075,1496],{"class":755},[143,17077,17078],{"class":149},"m_H);\n",[143,17080,17081],{"class":145,"line":2548},[143,17082,3087],{"class":149},[143,17084,17085,17087,17090],{"class":145,"line":2554},[143,17086,2885],{"class":755},[143,17088,17089],{"class":156}," tiji",[143,17091,2876],{"class":149},[143,17093,17094],{"class":145,"line":2575},[143,17095,2930],{"class":149},[143,17097,17098,17100,17102,17104,17107,17109],{"class":145,"line":2580},[143,17099,15651],{"class":755},[143,17101,17063],{"class":149},[143,17103,1496],{"class":755},[143,17105,17106],{"class":149},"m_W",[143,17108,1496],{"class":755},[143,17110,17111],{"class":149},"m_H;\n",[143,17113,17114],{"class":145,"line":2594},[143,17115,3087],{"class":149},[143,17117,17118],{"class":145,"line":2599},[143,17119,17120],{"class":266},"    \u002F\u002F获取长宽高\n",[143,17122,17123,17125,17128],{"class":145,"line":2628},[143,17124,2885],{"class":755},[143,17126,17127],{"class":156}," getLength",[143,17129,2876],{"class":149},[143,17131,17132],{"class":145,"line":2633},[143,17133,2930],{"class":149},[143,17135,17136,17138],{"class":145,"line":2650},[143,17137,15651],{"class":755},[143,17139,17140],{"class":149}," m_L;\n",[143,17142,17143],{"class":145,"line":2655},[143,17144,3087],{"class":149},[143,17146,17147,17149,17152],{"class":145,"line":2660},[143,17148,2885],{"class":755},[143,17150,17151],{"class":156}," getWidth",[143,17153,2876],{"class":149},[143,17155,17156],{"class":145,"line":2665},[143,17157,2930],{"class":149},[143,17159,17160,17162],{"class":145,"line":2679},[143,17161,15651],{"class":755},[143,17163,17164],{"class":149}," m_W;\n",[143,17166,17167],{"class":145,"line":2684},[143,17168,3087],{"class":149},[143,17170,17171,17173,17176],{"class":145,"line":3477},[143,17172,2885],{"class":755},[143,17174,17175],{"class":156}," getHeight",[143,17177,2876],{"class":149},[143,17179,17180],{"class":145,"line":3491},[143,17181,2930],{"class":149},[143,17183,17184,17186],{"class":145,"line":3499},[143,17185,15651],{"class":755},[143,17187,17188],{"class":149}," m_H;\n",[143,17190,17191],{"class":145,"line":3504},[143,17192,3087],{"class":149},[143,17194,17195],{"class":145,"line":3510},[143,17196,17197],{"class":266},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[143,17199,17200,17203,17206,17208,17211,17213],{"class":145,"line":3516},[143,17201,17202],{"class":755},"    bool",[143,17204,17205],{"class":156}," isEqual",[143,17207,1049],{"class":149},[143,17209,17210],{"class":156},"Cube",[143,17212,3749],{"class":6116},[143,17214,1055],{"class":149},[143,17216,17217],{"class":145,"line":3521},[143,17218,2930],{"class":149},[143,17220,17221,17223,17226,17229,17231,17233,17236,17238,17241,17244,17246,17248,17251,17253,17255,17258,17260,17262],{"class":145,"line":8848},[143,17222,3397],{"class":755},[143,17224,17225],{"class":149}," (c.",[143,17227,17228],{"class":156},"getLength",[143,17230,13950],{"class":149},[143,17232,3849],{"class":755},[143,17234,17235],{"class":149}," m_L ",[143,17237,2616],{"class":755},[143,17239,17240],{"class":149}," c.",[143,17242,17243],{"class":156},"getWidth",[143,17245,13950],{"class":149},[143,17247,3849],{"class":755},[143,17249,17250],{"class":149}," m_W ",[143,17252,2616],{"class":755},[143,17254,17240],{"class":149},[143,17256,17257],{"class":156},"getHeight",[143,17259,13950],{"class":149},[143,17261,3849],{"class":755},[143,17263,17264],{"class":149}," m_H)\n",[143,17266,17267],{"class":145,"line":8872},[143,17268,3410],{"class":149},[143,17270,17271,17273,17276],{"class":145,"line":8877},[143,17272,16630],{"class":755},[143,17274,17275],{"class":280}," true",[143,17277,290],{"class":149},[143,17279,17280],{"class":145,"line":8883},[143,17281,3429],{"class":149},[143,17283,17284],{"class":145,"line":8910},[143,17285,3470],{"class":755},[143,17287,17288],{"class":145,"line":8915},[143,17289,3410],{"class":149},[143,17291,17292,17294,17297],{"class":145,"line":8921},[143,17293,16630],{"class":755},[143,17295,17296],{"class":280}," false",[143,17298,290],{"class":149},[143,17300,17301],{"class":145,"line":8933},[143,17302,3429],{"class":149},[143,17304,17305],{"class":145,"line":8945},[143,17306,3087],{"class":149},[143,17308,17309],{"class":145,"line":8957},[143,17310,17311],{"class":266},"    \u002F\u002F私有属性\n",[143,17313,17314],{"class":145,"line":10616},[143,17315,16121],{"class":755},[143,17317,17318,17320],{"class":145,"line":10641},[143,17319,2885],{"class":755},[143,17321,17140],{"class":149},[143,17323,17324,17326],{"class":145,"line":10664},[143,17325,2885],{"class":755},[143,17327,17164],{"class":149},[143,17329,17330,17332],{"class":145,"line":10688},[143,17331,2885],{"class":755},[143,17333,17188],{"class":149},[143,17335,17336],{"class":145,"line":10693},[143,17337,3300],{"emptyLinePlaceholder":976},[143,17339,17340],{"class":145,"line":10698},[143,17341,4895],{"class":149},[143,17343,17344],{"class":145,"line":10703},[143,17345,17346],{"class":266},"\u002F\u002F全局函数判断两个立方体是否相等\n",[143,17348,17349,17351,17353,17355,17357,17360,17362,17364,17367],{"class":145,"line":10712},[143,17350,2258],{"class":755},[143,17352,17205],{"class":156},[143,17354,1049],{"class":149},[143,17356,17210],{"class":156},[143,17358,17359],{"class":6116}," c1",[143,17361,1419],{"class":149},[143,17363,17210],{"class":156},[143,17365,17366],{"class":6116}," c2",[143,17368,1055],{"class":149},[143,17370,17371],{"class":145,"line":10717},[143,17372,2449],{"class":149},[143,17374,17375,17377,17380,17382,17384,17386,17389,17391,17394,17396,17398,17400,17402,17404,17406,17408,17410,17412,17414,17416,17418,17420,17422,17424],{"class":145,"line":10723},[143,17376,4990],{"class":755},[143,17378,17379],{"class":149}," (c1.",[143,17381,17228],{"class":156},[143,17383,13950],{"class":149},[143,17385,3849],{"class":755},[143,17387,17388],{"class":149}," c2.",[143,17390,17228],{"class":156},[143,17392,17393],{"class":149},"()) ",[143,17395,2616],{"class":755},[143,17397,17379],{"class":149},[143,17399,17243],{"class":156},[143,17401,13950],{"class":149},[143,17403,3849],{"class":755},[143,17405,17388],{"class":149},[143,17407,17243],{"class":156},[143,17409,17393],{"class":149},[143,17411,2616],{"class":755},[143,17413,17379],{"class":149},[143,17415,17257],{"class":156},[143,17417,13950],{"class":149},[143,17419,3849],{"class":755},[143,17421,17388],{"class":149},[143,17423,17257],{"class":156},[143,17425,17426],{"class":149},"());\n",[143,17428,17429],{"class":145,"line":10744},[143,17430,348],{"class":149},[143,17432,17433,17435,17437],{"class":145,"line":10750},[143,17434,1052],{"class":755},[143,17436,2873],{"class":156},[143,17438,2876],{"class":149},[143,17440,17441],{"class":145,"line":10764},[143,17442,2449],{"class":149},[143,17444,17445],{"class":145,"line":10770},[143,17446,17447],{"class":149},"    Cube c1;\n",[143,17449,17450],{"class":145,"line":10797},[143,17451,17452],{"class":266},"    \u002F\u002F输入立方体的长宽高\n",[143,17454,17455,17457,17459,17462,17464],{"class":145,"line":10806},[143,17456,2454],{"class":149},[143,17458,2081],{"class":755},[143,17460,17461],{"class":163},"\"请输入第一个立方体的长、宽、高：\"",[143,17463,2081],{"class":755},[143,17465,2103],{"class":149},[143,17467,17468,17470],{"class":145,"line":10812},[143,17469,2885],{"class":755},[143,17471,17472],{"class":149}," l,w,h,l1,w1,h1;\n",[143,17474,17475,17477,17479,17481,17483,17485,17487],{"class":145,"line":10820},[143,17476,2912],{"class":149},[143,17478,2333],{"class":755},[143,17480,1559],{"class":149},[143,17482,2333],{"class":755},[143,17484,1836],{"class":149},[143,17486,2333],{"class":755},[143,17488,17025],{"class":149},[143,17490,17491,17494,17497],{"class":145,"line":10825},[143,17492,17493],{"class":149},"    c1.",[143,17495,17496],{"class":156},"setLwh",[143,17498,17499],{"class":149},"(l,w,h);\n",[143,17501,17503],{"class":145,"line":17502},66,[143,17504,17505],{"class":266},"    \u002F\u002F面积\n",[143,17507,17509,17511,17513,17516,17518,17520,17523,17525,17527],{"class":145,"line":17508},67,[143,17510,2454],{"class":149},[143,17512,2081],{"class":755},[143,17514,17515],{"class":163},"\"立方体的表面积为：\"",[143,17517,2081],{"class":755},[143,17519,15729],{"class":149},[143,17521,17522],{"class":156},"mianji",[143,17524,3327],{"class":149},[143,17526,2081],{"class":755},[143,17528,2103],{"class":149},[143,17530,17532],{"class":145,"line":17531},68,[143,17533,17534],{"class":266},"    \u002F\u002F体积\n",[143,17536,17538,17540,17542,17545,17547,17549,17552,17554,17556],{"class":145,"line":17537},69,[143,17539,2454],{"class":149},[143,17541,2081],{"class":755},[143,17543,17544],{"class":163},"\"立方体的体积为：\"",[143,17546,2081],{"class":755},[143,17548,15729],{"class":149},[143,17550,17551],{"class":156},"tiji",[143,17553,3327],{"class":149},[143,17555,2081],{"class":755},[143,17557,2103],{"class":149},[143,17559,17561,17563,17565,17568,17570],{"class":145,"line":17560},70,[143,17562,2454],{"class":149},[143,17564,2081],{"class":755},[143,17566,17567],{"class":163},"\"请输入第二个立方体的长、宽、高：\"",[143,17569,2081],{"class":755},[143,17571,2103],{"class":149},[143,17573,17575,17577,17579,17582,17584,17587,17589],{"class":145,"line":17574},71,[143,17576,2912],{"class":149},[143,17578,2333],{"class":755},[143,17580,17581],{"class":149},"l1",[143,17583,2333],{"class":755},[143,17585,17586],{"class":149},"w1",[143,17588,2333],{"class":755},[143,17590,17591],{"class":149},"h1;\n",[143,17593,17595],{"class":145,"line":17594},72,[143,17596,17597],{"class":149},"    Cube c2;\n",[143,17599,17601,17604,17606],{"class":145,"line":17600},73,[143,17602,17603],{"class":149},"    c2.",[143,17605,17496],{"class":156},[143,17607,17608],{"class":149},"(l1,w1,h1);\n",[143,17610,17612,17614,17616,17619,17621,17624,17626,17628,17630],{"class":145,"line":17611},74,[143,17613,2454],{"class":149},[143,17615,2081],{"class":755},[143,17617,17618],{"class":163},"\"第二个立方体的表面积为：\"",[143,17620,2081],{"class":755},[143,17622,17623],{"class":149},"c2.",[143,17625,17522],{"class":156},[143,17627,3327],{"class":149},[143,17629,2081],{"class":755},[143,17631,2103],{"class":149},[143,17633,17635,17637,17639,17642,17644,17646,17648,17650,17652],{"class":145,"line":17634},75,[143,17636,2454],{"class":149},[143,17638,2081],{"class":755},[143,17640,17641],{"class":163},"\"第二个立方体的体积为：\"",[143,17643,2081],{"class":755},[143,17645,17623],{"class":149},[143,17647,17551],{"class":156},[143,17649,3327],{"class":149},[143,17651,2081],{"class":755},[143,17653,2103],{"class":149},[143,17655,17657],{"class":145,"line":17656},76,[143,17658,3300],{"emptyLinePlaceholder":976},[143,17660,17662],{"class":145,"line":17661},77,[143,17663,17664],{"class":266},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[143,17666,17668,17670,17672,17675,17677],{"class":145,"line":17667},78,[143,17669,2454],{"class":149},[143,17671,2081],{"class":755},[143,17673,17674],{"class":163},"\"内部函数判断结果：\"",[143,17676,2081],{"class":755},[143,17678,2103],{"class":149},[143,17680,17682,17684,17686,17689],{"class":145,"line":17681},79,[143,17683,4001],{"class":755},[143,17685,17379],{"class":149},[143,17687,17688],{"class":156},"isEqual",[143,17690,17691],{"class":149},"(c2))\n",[143,17693,17695],{"class":145,"line":17694},80,[143,17696,2930],{"class":149},[143,17698,17700,17702,17704,17707,17709],{"class":145,"line":17699},81,[143,17701,4351],{"class":149},[143,17703,2081],{"class":755},[143,17705,17706],{"class":163},"\"两个立方体相等\"",[143,17708,2081],{"class":755},[143,17710,2103],{"class":149},[143,17712,17714],{"class":145,"line":17713},82,[143,17715,3087],{"class":149},[143,17717,17719],{"class":145,"line":17718},83,[143,17720,17721],{"class":755},"    else\n",[143,17723,17725],{"class":145,"line":17724},84,[143,17726,2930],{"class":149},[143,17728,17730,17732,17734,17737,17739],{"class":145,"line":17729},85,[143,17731,4351],{"class":149},[143,17733,2081],{"class":755},[143,17735,17736],{"class":163},"\"两个立方体不相等\"",[143,17738,2081],{"class":755},[143,17740,2103],{"class":149},[143,17742,17744],{"class":145,"line":17743},86,[143,17745,3087],{"class":149},[143,17747,17749],{"class":145,"line":17748},87,[143,17750,3300],{"emptyLinePlaceholder":976},[143,17752,17754,17756,17758,17761,17763],{"class":145,"line":17753},88,[143,17755,2454],{"class":149},[143,17757,2081],{"class":755},[143,17759,17760],{"class":163},"\"全局函数判断结果：\"",[143,17762,2081],{"class":755},[143,17764,2103],{"class":149},[143,17766,17768,17770,17772,17774],{"class":145,"line":17767},89,[143,17769,4001],{"class":755},[143,17771,2559],{"class":149},[143,17773,17688],{"class":156},[143,17775,17776],{"class":149},"(c1, c2))\n",[143,17778,17780],{"class":145,"line":17779},90,[143,17781,2930],{"class":149},[143,17783,17785,17787,17789,17791,17793],{"class":145,"line":17784},91,[143,17786,4351],{"class":149},[143,17788,2081],{"class":755},[143,17790,17706],{"class":163},[143,17792,2081],{"class":755},[143,17794,2103],{"class":149},[143,17796,17798],{"class":145,"line":17797},92,[143,17799,3087],{"class":149},[143,17801,17803],{"class":145,"line":17802},93,[143,17804,17721],{"class":755},[143,17806,17808],{"class":145,"line":17807},94,[143,17809,2930],{"class":149},[143,17811,17813,17815,17817,17819,17821],{"class":145,"line":17812},95,[143,17814,4351],{"class":149},[143,17816,2081],{"class":755},[143,17818,17736],{"class":163},[143,17820,2081],{"class":755},[143,17822,2103],{"class":149},[143,17824,17826],{"class":145,"line":17825},96,[143,17827,3087],{"class":149},[143,17829,17831],{"class":145,"line":17830},97,[143,17832,348],{"class":149},[19,17834,17835],{"start":35},[22,17836,17837],{},[25,17838,17839],{},"练习案例2：点和圆的关系",[232,17841,17842],{},[22,17843,17844],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[133,17846,17848],{"className":1037,"code":17847,"language":1039,"meta":138,"style":138},"#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",[140,17849,17850,17856,17866,17873,17880,17884,17888,17893,17927,17932,17948,17962,17966,17970,17977,17984,17988,17994,17998,18002,18006,18028,18051,18056,18070,18085,18089,18093,18099,18104,18109,18113,18139,18143,18173,18201,18229,18246,18250,18263,18267,18271,18275,18288,18292,18296,18304,18308,18312,18316,18321,18325,18336,18343,18352,18362,18373,18380,18393,18404,18414,18425,18432,18446,18451,18461,18469],{"__ignoreMap":138},[143,17851,17852,17854],{"class":145,"line":146},[143,17853,2850],{"class":755},[143,17855,2853],{"class":163},[143,17857,17858,17860,17862,17864],{"class":145,"line":35},[143,17859,2858],{"class":755},[143,17861,2861],{"class":755},[143,17863,2864],{"class":156},[143,17865,290],{"class":149},[143,17867,17868,17870],{"class":145,"line":46},[143,17869,2850],{"class":755},[143,17871,17872],{"class":163},"\u003Ccmath>\n",[143,17874,17875,17877],{"class":145,"line":293},[143,17876,15593],{"class":755},[143,17878,17879],{"class":156}," Point\n",[143,17881,17882],{"class":145,"line":306},[143,17883,2449],{"class":149},[143,17885,17886],{"class":145,"line":319},[143,17887,15615],{"class":755},[143,17889,17890],{"class":145,"line":332},[143,17891,17892],{"class":266},"    \u002F\u002F赋值\n",[143,17894,17895,17897,17900,17902,17904,17907,17909,17911,17914,17917,17919,17922,17924],{"class":145,"line":345},[143,17896,15808],{"class":755},[143,17898,17899],{"class":156}," setPoint",[143,17901,1049],{"class":149},[143,17903,14936],{"class":755},[143,17905,17906],{"class":6116}," x",[143,17908,13335],{"class":149},[143,17910,14936],{"class":755},[143,17912,17913],{"class":6116}," y",[143,17915,17916],{"class":149},") { m_x ",[143,17918,160],{"class":755},[143,17920,17921],{"class":149}," x; m_y ",[143,17923,160],{"class":755},[143,17925,17926],{"class":149}," y; }\n",[143,17928,17929],{"class":145,"line":701},[143,17930,17931],{"class":266},"    \u002F\u002F获取坐标\n",[143,17933,17934,17936,17939,17942,17945],{"class":145,"line":707},[143,17935,15637],{"class":755},[143,17937,17938],{"class":156}," getX",[143,17940,17941],{"class":149},"() { ",[143,17943,17944],{"class":755},"return",[143,17946,17947],{"class":149}," m_x; }\n",[143,17949,17950,17952,17955,17957,17959],{"class":145,"line":727},[143,17951,15637],{"class":755},[143,17953,17954],{"class":156}," getY",[143,17956,17941],{"class":149},[143,17958,17944],{"class":755},[143,17960,17961],{"class":149}," m_y; }\n",[143,17963,17964],{"class":145,"line":2518},[143,17965,3300],{"emptyLinePlaceholder":976},[143,17967,17968],{"class":145,"line":2524},[143,17969,16121],{"class":755},[143,17971,17972,17974],{"class":145,"line":2529},[143,17973,15637],{"class":755},[143,17975,17976],{"class":149}," m_x;\n",[143,17978,17979,17981],{"class":145,"line":2543},[143,17980,15637],{"class":755},[143,17982,17983],{"class":149}," m_y;\n",[143,17985,17986],{"class":145,"line":2548},[143,17987,4895],{"class":149},[143,17989,17990,17992],{"class":145,"line":2554},[143,17991,15593],{"class":755},[143,17993,15596],{"class":156},[143,17995,17996],{"class":145,"line":2575},[143,17997,2449],{"class":149},[143,17999,18000],{"class":145,"line":2580},[143,18001,15615],{"class":755},[143,18003,18004],{"class":145,"line":2594},[143,18005,17892],{"class":266},[143,18007,18008,18010,18013,18015,18017,18020,18023,18025],{"class":145,"line":2599},[143,18009,15808],{"class":755},[143,18011,18012],{"class":156}," setRadius",[143,18014,1049],{"class":149},[143,18016,14936],{"class":755},[143,18018,18019],{"class":6116}," r",[143,18021,18022],{"class":149},") { m_r ",[143,18024,160],{"class":755},[143,18026,18027],{"class":149}," r; }\n",[143,18029,18030,18032,18035,18037,18040,18043,18046,18048],{"class":145,"line":2628},[143,18031,15808],{"class":755},[143,18033,18034],{"class":156}," setCenter",[143,18036,1049],{"class":149},[143,18038,18039],{"class":156},"Point",[143,18041,18042],{"class":6116}," center",[143,18044,18045],{"class":149},") { m_center ",[143,18047,160],{"class":755},[143,18049,18050],{"class":149}," center; }\n",[143,18052,18053],{"class":145,"line":2633},[143,18054,18055],{"class":266},"    \u002F\u002F获取属性\n",[143,18057,18058,18060,18063,18065,18067],{"class":145,"line":2650},[143,18059,15637],{"class":755},[143,18061,18062],{"class":156}," getRadius",[143,18064,17941],{"class":149},[143,18066,17944],{"class":755},[143,18068,18069],{"class":149}," m_r; }\n",[143,18071,18072,18075,18078,18080,18082],{"class":145,"line":2655},[143,18073,18074],{"class":156},"    Point",[143,18076,18077],{"class":156}," getCenter",[143,18079,17941],{"class":149},[143,18081,17944],{"class":755},[143,18083,18084],{"class":149}," m_center; }\n",[143,18086,18087],{"class":145,"line":2660},[143,18088,3300],{"emptyLinePlaceholder":976},[143,18090,18091],{"class":145,"line":2665},[143,18092,16121],{"class":755},[143,18094,18095,18097],{"class":145,"line":2679},[143,18096,15637],{"class":755},[143,18098,15627],{"class":149},[143,18100,18101],{"class":145,"line":2684},[143,18102,18103],{"class":266},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[143,18105,18106],{"class":145,"line":3477},[143,18107,18108],{"class":149},"    Point m_center;\n",[143,18110,18111],{"class":145,"line":3491},[143,18112,4895],{"class":149},[143,18114,18115,18117,18120,18122,18125,18127,18129,18131,18133,18135,18137],{"class":145,"line":3499},[143,18116,6264],{"class":755},[143,18118,18119],{"class":156}," isInCircle",[143,18121,1049],{"class":149},[143,18123,18124],{"class":156},"Circle",[143,18126,11484],{"class":755},[143,18128,1329],{"class":6116},[143,18130,1419],{"class":149},[143,18132,18039],{"class":156},[143,18134,11484],{"class":755},[143,18136,63],{"class":6116},[143,18138,1055],{"class":149},[143,18140,18141],{"class":145,"line":3504},[143,18142,2449],{"class":149},[143,18144,18145,18147,18150,18152,18154,18157,18160,18163,18165,18167,18169,18171],{"class":145,"line":3510},[143,18146,15637],{"class":755},[143,18148,18149],{"class":149}," dx ",[143,18151,160],{"class":755},[143,18153,17240],{"class":149},[143,18155,18156],{"class":156},"getCenter",[143,18158,18159],{"class":149},"().",[143,18161,18162],{"class":156},"getX",[143,18164,13950],{"class":149},[143,18166,1573],{"class":755},[143,18168,16786],{"class":149},[143,18170,18162],{"class":156},[143,18172,6536],{"class":149},[143,18174,18175,18177,18180,18182,18184,18186,18188,18191,18193,18195,18197,18199],{"class":145,"line":3516},[143,18176,15637],{"class":755},[143,18178,18179],{"class":149}," dy ",[143,18181,160],{"class":755},[143,18183,17240],{"class":149},[143,18185,18156],{"class":156},[143,18187,18159],{"class":149},[143,18189,18190],{"class":156},"getY",[143,18192,13950],{"class":149},[143,18194,1573],{"class":755},[143,18196,16786],{"class":149},[143,18198,18190],{"class":156},[143,18200,6536],{"class":149},[143,18202,18203,18205,18208,18210,18213,18216,18218,18220,18222,18224,18226],{"class":145,"line":3521},[143,18204,15637],{"class":755},[143,18206,18207],{"class":149}," distance ",[143,18209,160],{"class":755},[143,18211,18212],{"class":156}," sqrt",[143,18214,18215],{"class":149},"(dx ",[143,18217,1496],{"class":755},[143,18219,18149],{"class":149},[143,18221,1522],{"class":755},[143,18223,18179],{"class":149},[143,18225,1496],{"class":755},[143,18227,18228],{"class":149}," dy);\n",[143,18230,18231,18233,18236,18238,18240,18243],{"class":145,"line":8848},[143,18232,4001],{"class":755},[143,18234,18235],{"class":149}," (distance ",[143,18237,150],{"class":755},[143,18239,17240],{"class":149},[143,18241,18242],{"class":156},"getRadius",[143,18244,18245],{"class":149},"())\n",[143,18247,18248],{"class":145,"line":8872},[143,18249,2930],{"class":149},[143,18251,18252,18254,18256,18259,18261],{"class":145,"line":8877},[143,18253,10569],{"class":149},[143,18255,2081],{"class":755},[143,18257,18258],{"class":163}," \"点在圆内\"",[143,18260,2348],{"class":755},[143,18262,9740],{"class":149},[143,18264,18265],{"class":145,"line":8883},[143,18266,3087],{"class":149},[143,18268,18269],{"class":145,"line":8910},[143,18270,17721],{"class":755},[143,18272,18273],{"class":145,"line":8915},[143,18274,2930],{"class":149},[143,18276,18277,18279,18281,18284,18286],{"class":145,"line":8921},[143,18278,10569],{"class":149},[143,18280,2081],{"class":755},[143,18282,18283],{"class":163}," \"点在圆外\"",[143,18285,2348],{"class":755},[143,18287,9740],{"class":149},[143,18289,18290],{"class":145,"line":8933},[143,18291,3087],{"class":149},[143,18293,18294],{"class":145,"line":8945},[143,18295,348],{"class":149},[143,18297,18298,18300,18302],{"class":145,"line":8957},[143,18299,1052],{"class":755},[143,18301,2873],{"class":156},[143,18303,2876],{"class":149},[143,18305,18306],{"class":145,"line":10616},[143,18307,2449],{"class":149},[143,18309,18310],{"class":145,"line":10641},[143,18311,15952],{"class":266},[143,18313,18314],{"class":145,"line":10664},[143,18315,15699],{"class":149},[143,18317,18318],{"class":145,"line":10688},[143,18319,18320],{"class":149},"    Point p1;\n",[143,18322,18323],{"class":145,"line":10693},[143,18324,17892],{"class":266},[143,18326,18327,18329,18331,18334],{"class":145,"line":10698},[143,18328,2454],{"class":149},[143,18330,2081],{"class":755},[143,18332,18333],{"class":163},"\"请输入圆的半径：\"",[143,18335,290],{"class":149},[143,18337,18338,18340],{"class":145,"line":10703},[143,18339,15637],{"class":755},[143,18341,18342],{"class":149}," r;\n",[143,18344,18345,18347,18349],{"class":145,"line":10712},[143,18346,2912],{"class":149},[143,18348,2333],{"class":755},[143,18350,18351],{"class":149},"r;\n",[143,18353,18354,18356,18359],{"class":145,"line":10717},[143,18355,17493],{"class":149},[143,18357,18358],{"class":156},"setRadius",[143,18360,18361],{"class":149},"(r);\n",[143,18363,18364,18366,18368,18371],{"class":145,"line":10723},[143,18365,2454],{"class":149},[143,18367,2081],{"class":755},[143,18369,18370],{"class":163},"\"请输入圆心坐标：\"",[143,18372,290],{"class":149},[143,18374,18375,18377],{"class":145,"line":10744},[143,18376,15637],{"class":755},[143,18378,18379],{"class":149}," x, y;\n",[143,18381,18382,18384,18386,18388,18390],{"class":145,"line":10750},[143,18383,2912],{"class":149},[143,18385,2333],{"class":755},[143,18387,1861],{"class":149},[143,18389,2333],{"class":755},[143,18391,18392],{"class":149},"y;\n",[143,18394,18395,18398,18401],{"class":145,"line":10764},[143,18396,18397],{"class":149},"    p1.",[143,18399,18400],{"class":156},"setPoint",[143,18402,18403],{"class":149},"(x, y);\n",[143,18405,18406,18408,18411],{"class":145,"line":10770},[143,18407,17493],{"class":149},[143,18409,18410],{"class":156},"setCenter",[143,18412,18413],{"class":149},"(p1);\n",[143,18415,18416,18418,18420,18423],{"class":145,"line":10797},[143,18417,2454],{"class":149},[143,18419,2081],{"class":755},[143,18421,18422],{"class":163},"\"请输入测试点坐标：\"",[143,18424,290],{"class":149},[143,18426,18427,18429],{"class":145,"line":10806},[143,18428,15637],{"class":755},[143,18430,18431],{"class":149}," x1, y1;\n",[143,18433,18434,18436,18438,18441,18443],{"class":145,"line":10812},[143,18435,2912],{"class":149},[143,18437,2333],{"class":755},[143,18439,18440],{"class":149},"x1",[143,18442,2333],{"class":755},[143,18444,18445],{"class":149},"y1;\n",[143,18447,18448],{"class":145,"line":10820},[143,18449,18450],{"class":149},"    Point p2;\n",[143,18452,18453,18456,18458],{"class":145,"line":10825},[143,18454,18455],{"class":149},"    p2.",[143,18457,18400],{"class":156},[143,18459,18460],{"class":149},"(x1, y1);\n",[143,18462,18463,18466],{"class":145,"line":17502},[143,18464,18465],{"class":156},"    isInCircle",[143,18467,18468],{"class":149},"(c1, p2);\n",[143,18470,18471],{"class":145,"line":17508},[143,18472,348],{"class":149},[63,18474,18475],{},"在类中可以让另一个类作为本来的成员",[63,18477,18478],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[63,18480,18481],{},"创建point.h",[133,18483,18485],{"className":1037,"code":18484,"language":1039,"meta":138,"style":138},"#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",[140,18486,18487,18498,18504,18514,18520,18524,18529,18533,18537,18557,18561,18569,18577,18581,18585,18591,18597],{"__ignoreMap":138},[143,18488,18489,18492,18495],{"class":145,"line":146},[143,18490,18491],{"class":755},"#pragma",[143,18493,18494],{"class":156}," once",[143,18496,18497],{"class":266}," \u002F\u002F防止头文件重复包含\n",[143,18499,18500,18502],{"class":145,"line":35},[143,18501,2850],{"class":755},[143,18503,2853],{"class":163},[143,18505,18506,18508,18510,18512],{"class":145,"line":46},[143,18507,2858],{"class":755},[143,18509,2861],{"class":755},[143,18511,2864],{"class":156},[143,18513,290],{"class":149},[143,18515,18516,18518],{"class":145,"line":293},[143,18517,15593],{"class":755},[143,18519,17879],{"class":156},[143,18521,18522],{"class":145,"line":306},[143,18523,2449],{"class":149},[143,18525,18526],{"class":145,"line":319},[143,18527,18528],{"class":266},"\u002F\u002F做好声明与变量定义就可以\n",[143,18530,18531],{"class":145,"line":332},[143,18532,15615],{"class":755},[143,18534,18535],{"class":145,"line":345},[143,18536,17892],{"class":266},[143,18538,18539,18541,18543,18545,18547,18549,18551,18553,18555],{"class":145,"line":701},[143,18540,15808],{"class":755},[143,18542,17899],{"class":156},[143,18544,1049],{"class":149},[143,18546,14936],{"class":755},[143,18548,17906],{"class":6116},[143,18550,13335],{"class":149},[143,18552,14936],{"class":755},[143,18554,17913],{"class":6116},[143,18556,3619],{"class":149},[143,18558,18559],{"class":145,"line":707},[143,18560,17931],{"class":266},[143,18562,18563,18565,18567],{"class":145,"line":727},[143,18564,15637],{"class":755},[143,18566,17938],{"class":156},[143,18568,6536],{"class":149},[143,18570,18571,18573,18575],{"class":145,"line":2518},[143,18572,15637],{"class":755},[143,18574,17954],{"class":156},[143,18576,6536],{"class":149},[143,18578,18579],{"class":145,"line":2524},[143,18580,3300],{"emptyLinePlaceholder":976},[143,18582,18583],{"class":145,"line":2529},[143,18584,16121],{"class":755},[143,18586,18587,18589],{"class":145,"line":2543},[143,18588,15637],{"class":755},[143,18590,17976],{"class":149},[143,18592,18593,18595],{"class":145,"line":2548},[143,18594,15637],{"class":755},[143,18596,17983],{"class":149},[143,18598,18599],{"class":145,"line":2554},[143,18600,4895],{"class":149},[63,18602,18603],{},"创建point.cpp",[133,18605,18607],{"className":1037,"code":18606,"language":1039,"meta":138,"style":138},"#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",[140,18608,18609,18616,18621,18655,18659,18675],{"__ignoreMap":138},[143,18610,18611,18613],{"class":145,"line":146},[143,18612,2850],{"class":755},[143,18614,18615],{"class":163},"\u003Cpoint.h>\n",[143,18617,18618],{"class":145,"line":35},[143,18619,18620],{"class":266},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[143,18622,18623,18625,18628,18631,18633,18635,18637,18639,18641,18643,18645,18647,18649,18651,18653],{"class":145,"line":46},[143,18624,15808],{"class":755},[143,18626,18627],{"class":156}," Point",[143,18629,18630],{"class":149},"::",[143,18632,18400],{"class":156},[143,18634,1049],{"class":149},[143,18636,14936],{"class":755},[143,18638,17906],{"class":6116},[143,18640,13335],{"class":149},[143,18642,14936],{"class":755},[143,18644,17913],{"class":6116},[143,18646,17916],{"class":149},[143,18648,160],{"class":755},[143,18650,17921],{"class":149},[143,18652,160],{"class":755},[143,18654,17926],{"class":149},[143,18656,18657],{"class":145,"line":293},[143,18658,17931],{"class":266},[143,18660,18661,18663,18665,18667,18669,18671,18673],{"class":145,"line":306},[143,18662,15637],{"class":755},[143,18664,18627],{"class":156},[143,18666,18630],{"class":149},[143,18668,18162],{"class":156},[143,18670,17941],{"class":149},[143,18672,17944],{"class":755},[143,18674,17947],{"class":149},[143,18676,18677,18679,18681,18683,18685,18687,18689],{"class":145,"line":319},[143,18678,15637],{"class":755},[143,18680,18627],{"class":156},[143,18682,18630],{"class":149},[143,18684,18190],{"class":156},[143,18686,17941],{"class":149},[143,18688,17944],{"class":755},[143,18690,17961],{"class":149},[63,18692,18693],{},"创建circle.h",[133,18695,18697],{"className":1037,"code":18696,"language":1039,"meta":138,"style":138},"#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",[140,18698,18699,18706,18712,18722,18728,18734,18738,18742,18746,18760,18774,18778,18786,18794,18798,18802,18808,18812,18816],{"__ignoreMap":138},[143,18700,18701,18703],{"class":145,"line":146},[143,18702,18491],{"class":755},[143,18704,18705],{"class":156}," once\n",[143,18707,18708,18710],{"class":145,"line":35},[143,18709,2850],{"class":755},[143,18711,2853],{"class":163},[143,18713,18714,18716,18718,18720],{"class":145,"line":46},[143,18715,2858],{"class":755},[143,18717,2861],{"class":755},[143,18719,2864],{"class":156},[143,18721,290],{"class":149},[143,18723,18724,18726],{"class":145,"line":293},[143,18725,2850],{"class":755},[143,18727,18615],{"class":163},[143,18729,18730,18732],{"class":145,"line":306},[143,18731,15593],{"class":755},[143,18733,15596],{"class":156},[143,18735,18736],{"class":145,"line":319},[143,18737,2449],{"class":149},[143,18739,18740],{"class":145,"line":332},[143,18741,15615],{"class":755},[143,18743,18744],{"class":145,"line":345},[143,18745,17892],{"class":266},[143,18747,18748,18750,18752,18754,18756,18758],{"class":145,"line":701},[143,18749,15808],{"class":755},[143,18751,18012],{"class":156},[143,18753,1049],{"class":149},[143,18755,14936],{"class":755},[143,18757,18019],{"class":6116},[143,18759,3619],{"class":149},[143,18761,18762,18764,18766,18768,18770,18772],{"class":145,"line":707},[143,18763,15808],{"class":755},[143,18765,18034],{"class":156},[143,18767,1049],{"class":149},[143,18769,18039],{"class":156},[143,18771,18042],{"class":6116},[143,18773,3619],{"class":149},[143,18775,18776],{"class":145,"line":727},[143,18777,18055],{"class":266},[143,18779,18780,18782,18784],{"class":145,"line":2518},[143,18781,15637],{"class":755},[143,18783,18062],{"class":156},[143,18785,6536],{"class":149},[143,18787,18788,18790,18792],{"class":145,"line":2524},[143,18789,18074],{"class":156},[143,18791,18077],{"class":156},[143,18793,6536],{"class":149},[143,18795,18796],{"class":145,"line":2529},[143,18797,3300],{"emptyLinePlaceholder":976},[143,18799,18800],{"class":145,"line":2543},[143,18801,16121],{"class":755},[143,18803,18804,18806],{"class":145,"line":2548},[143,18805,15637],{"class":755},[143,18807,15627],{"class":149},[143,18809,18810],{"class":145,"line":2554},[143,18811,18103],{"class":266},[143,18813,18814],{"class":145,"line":2575},[143,18815,18108],{"class":149},[143,18817,18818],{"class":145,"line":2580},[143,18819,4895],{"class":149},[63,18821,18822],{},"创建circle.cpp",[133,18824,18826],{"className":1037,"code":18825,"language":1039,"meta":138,"style":138},"#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",[140,18827,18828,18835,18858,18880,18885,18901],{"__ignoreMap":138},[143,18829,18830,18832],{"class":145,"line":146},[143,18831,2850],{"class":755},[143,18833,18834],{"class":163},"\u003Ccircle.h>\n",[143,18836,18837,18839,18842,18844,18846,18848,18850,18852,18854,18856],{"class":145,"line":35},[143,18838,6264],{"class":755},[143,18840,18841],{"class":156}," Circle",[143,18843,18630],{"class":149},[143,18845,18358],{"class":156},[143,18847,1049],{"class":149},[143,18849,14936],{"class":755},[143,18851,18019],{"class":6116},[143,18853,18022],{"class":149},[143,18855,160],{"class":755},[143,18857,18027],{"class":149},[143,18859,18860,18862,18864,18866,18868,18870,18872,18874,18876,18878],{"class":145,"line":46},[143,18861,6264],{"class":755},[143,18863,18841],{"class":156},[143,18865,18630],{"class":149},[143,18867,18410],{"class":156},[143,18869,1049],{"class":149},[143,18871,18039],{"class":156},[143,18873,18042],{"class":6116},[143,18875,18045],{"class":149},[143,18877,160],{"class":755},[143,18879,18050],{"class":149},[143,18881,18882],{"class":145,"line":293},[143,18883,18884],{"class":266},"\u002F\u002F获取属性\n",[143,18886,18887,18889,18891,18893,18895,18897,18899],{"class":145,"line":306},[143,18888,14936],{"class":755},[143,18890,18841],{"class":156},[143,18892,18630],{"class":149},[143,18894,18242],{"class":156},[143,18896,17941],{"class":149},[143,18898,17944],{"class":755},[143,18900,18069],{"class":149},[143,18902,18903,18905,18907,18909,18911,18913,18915],{"class":145,"line":319},[143,18904,18039],{"class":156},[143,18906,18841],{"class":156},[143,18908,18630],{"class":149},[143,18910,18156],{"class":156},[143,18912,17941],{"class":149},[143,18914,17944],{"class":755},[143,18916,18084],{"class":149},[63,18918,18919],{},"使用封装的类",[133,18921,18923],{"className":1037,"code":18922,"language":1039,"meta":138,"style":138},"#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",[140,18924,18925,18931,18941,18947,18953,18977,18981,19007,19033,19057,19071,19075,19087,19091,19095,19099,19111,19115,19119,19127,19131,19135,19139,19143,19147,19157,19163,19171,19179,19189,19195,19207,19215,19223,19233,19239,19251,19255,19263,19269],{"__ignoreMap":138},[143,18926,18927,18929],{"class":145,"line":146},[143,18928,2850],{"class":755},[143,18930,2853],{"class":163},[143,18932,18933,18935,18937,18939],{"class":145,"line":35},[143,18934,2858],{"class":755},[143,18936,2861],{"class":755},[143,18938,2864],{"class":156},[143,18940,290],{"class":149},[143,18942,18943,18945],{"class":145,"line":46},[143,18944,2850],{"class":755},[143,18946,18834],{"class":163},[143,18948,18949,18951],{"class":145,"line":293},[143,18950,2850],{"class":755},[143,18952,18615],{"class":163},[143,18954,18955,18957,18959,18961,18963,18965,18967,18969,18971,18973,18975],{"class":145,"line":306},[143,18956,6264],{"class":755},[143,18958,18119],{"class":156},[143,18960,1049],{"class":149},[143,18962,18124],{"class":156},[143,18964,11484],{"class":755},[143,18966,1329],{"class":6116},[143,18968,1419],{"class":149},[143,18970,18039],{"class":156},[143,18972,11484],{"class":755},[143,18974,63],{"class":6116},[143,18976,1055],{"class":149},[143,18978,18979],{"class":145,"line":319},[143,18980,2449],{"class":149},[143,18982,18983,18985,18987,18989,18991,18993,18995,18997,18999,19001,19003,19005],{"class":145,"line":332},[143,18984,15637],{"class":755},[143,18986,18149],{"class":149},[143,18988,160],{"class":755},[143,18990,17240],{"class":149},[143,18992,18156],{"class":156},[143,18994,18159],{"class":149},[143,18996,18162],{"class":156},[143,18998,13950],{"class":149},[143,19000,1573],{"class":755},[143,19002,16786],{"class":149},[143,19004,18162],{"class":156},[143,19006,6536],{"class":149},[143,19008,19009,19011,19013,19015,19017,19019,19021,19023,19025,19027,19029,19031],{"class":145,"line":345},[143,19010,15637],{"class":755},[143,19012,18179],{"class":149},[143,19014,160],{"class":755},[143,19016,17240],{"class":149},[143,19018,18156],{"class":156},[143,19020,18159],{"class":149},[143,19022,18190],{"class":156},[143,19024,13950],{"class":149},[143,19026,1573],{"class":755},[143,19028,16786],{"class":149},[143,19030,18190],{"class":156},[143,19032,6536],{"class":149},[143,19034,19035,19037,19039,19041,19043,19045,19047,19049,19051,19053,19055],{"class":145,"line":701},[143,19036,15637],{"class":755},[143,19038,18207],{"class":149},[143,19040,160],{"class":755},[143,19042,18212],{"class":156},[143,19044,18215],{"class":149},[143,19046,1496],{"class":755},[143,19048,18149],{"class":149},[143,19050,1522],{"class":755},[143,19052,18179],{"class":149},[143,19054,1496],{"class":755},[143,19056,18228],{"class":149},[143,19058,19059,19061,19063,19065,19067,19069],{"class":145,"line":707},[143,19060,4001],{"class":755},[143,19062,18235],{"class":149},[143,19064,150],{"class":755},[143,19066,17240],{"class":149},[143,19068,18242],{"class":156},[143,19070,18245],{"class":149},[143,19072,19073],{"class":145,"line":727},[143,19074,2930],{"class":149},[143,19076,19077,19079,19081,19083,19085],{"class":145,"line":2518},[143,19078,10569],{"class":149},[143,19080,2081],{"class":755},[143,19082,18258],{"class":163},[143,19084,2348],{"class":755},[143,19086,9740],{"class":149},[143,19088,19089],{"class":145,"line":2524},[143,19090,3087],{"class":149},[143,19092,19093],{"class":145,"line":2529},[143,19094,17721],{"class":755},[143,19096,19097],{"class":145,"line":2543},[143,19098,2930],{"class":149},[143,19100,19101,19103,19105,19107,19109],{"class":145,"line":2548},[143,19102,10569],{"class":149},[143,19104,2081],{"class":755},[143,19106,18283],{"class":163},[143,19108,2348],{"class":755},[143,19110,9740],{"class":149},[143,19112,19113],{"class":145,"line":2554},[143,19114,3087],{"class":149},[143,19116,19117],{"class":145,"line":2575},[143,19118,348],{"class":149},[143,19120,19121,19123,19125],{"class":145,"line":2580},[143,19122,1052],{"class":755},[143,19124,2873],{"class":156},[143,19126,2876],{"class":149},[143,19128,19129],{"class":145,"line":2594},[143,19130,2449],{"class":149},[143,19132,19133],{"class":145,"line":2599},[143,19134,15952],{"class":266},[143,19136,19137],{"class":145,"line":2628},[143,19138,15699],{"class":149},[143,19140,19141],{"class":145,"line":2633},[143,19142,18320],{"class":149},[143,19144,19145],{"class":145,"line":2650},[143,19146,17892],{"class":266},[143,19148,19149,19151,19153,19155],{"class":145,"line":2655},[143,19150,2454],{"class":149},[143,19152,2081],{"class":755},[143,19154,18333],{"class":163},[143,19156,290],{"class":149},[143,19158,19159,19161],{"class":145,"line":2660},[143,19160,15637],{"class":755},[143,19162,18342],{"class":149},[143,19164,19165,19167,19169],{"class":145,"line":2665},[143,19166,2912],{"class":149},[143,19168,2333],{"class":755},[143,19170,18351],{"class":149},[143,19172,19173,19175,19177],{"class":145,"line":2679},[143,19174,17493],{"class":149},[143,19176,18358],{"class":156},[143,19178,18361],{"class":149},[143,19180,19181,19183,19185,19187],{"class":145,"line":2684},[143,19182,2454],{"class":149},[143,19184,2081],{"class":755},[143,19186,18370],{"class":163},[143,19188,290],{"class":149},[143,19190,19191,19193],{"class":145,"line":3477},[143,19192,15637],{"class":755},[143,19194,18379],{"class":149},[143,19196,19197,19199,19201,19203,19205],{"class":145,"line":3491},[143,19198,2912],{"class":149},[143,19200,2333],{"class":755},[143,19202,1861],{"class":149},[143,19204,2333],{"class":755},[143,19206,18392],{"class":149},[143,19208,19209,19211,19213],{"class":145,"line":3499},[143,19210,18397],{"class":149},[143,19212,18400],{"class":156},[143,19214,18403],{"class":149},[143,19216,19217,19219,19221],{"class":145,"line":3504},[143,19218,17493],{"class":149},[143,19220,18410],{"class":156},[143,19222,18413],{"class":149},[143,19224,19225,19227,19229,19231],{"class":145,"line":3510},[143,19226,2454],{"class":149},[143,19228,2081],{"class":755},[143,19230,18422],{"class":163},[143,19232,290],{"class":149},[143,19234,19235,19237],{"class":145,"line":3516},[143,19236,15637],{"class":755},[143,19238,18431],{"class":149},[143,19240,19241,19243,19245,19247,19249],{"class":145,"line":3521},[143,19242,2912],{"class":149},[143,19244,2333],{"class":755},[143,19246,18440],{"class":149},[143,19248,2333],{"class":755},[143,19250,18445],{"class":149},[143,19252,19253],{"class":145,"line":8848},[143,19254,18450],{"class":149},[143,19256,19257,19259,19261],{"class":145,"line":8872},[143,19258,18455],{"class":149},[143,19260,18400],{"class":156},[143,19262,18460],{"class":149},[143,19264,19265,19267],{"class":145,"line":8877},[143,19266,18465],{"class":156},[143,19268,18468],{"class":149},[143,19270,19271],{"class":145,"line":8883},[143,19272,348],{"class":149},[14,19274,19276],{"id":19275},"_82对象的初始化清理","8.2对象的初始化清理",[232,19278,19279,19282],{},[22,19280,19281],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[22,19283,19284],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[58,19286,19288],{"id":19287},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[63,19290,19291,19292,19295],{},"对象的",[25,19293,19294],{},"初始化和清理","也是两个非常重要的安全问题",[63,19297,19298],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[63,19300,19301],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[63,19303,19304,19305,19308,19309,19312],{},"c++利用了",[25,19306,19307],{},"构造函数","和",[25,19310,19311],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[63,19314,19315,19316],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[25,19317,19318],{},"我们不提供构造和析构，编译器会提供",[63,19320,19321],{},[25,19322,19323],{},"编译器提供的构造函数和析构函数是空实现。",[232,19325,19326,19329],{},[22,19327,19328],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[22,19330,19331,19332,19335],{},"析构函数：主要作用在于对象",[25,19333,19334],{},"销毁前","系统自动调用，执行一些清理工作。",[63,19337,19338,19341],{},[25,19339,19340],{},"构造函数语法：",[140,19342,19343],{},"类名(){}",[19,19345,19346,19349,19352,19355,19358],{},[22,19347,19348],{},"构造函数，没有返回值也不写void",[22,19350,19351],{},"函数名称与类名相同",[22,19353,19354],{},"构造函数可以有参数，因此可以发生重载",[22,19356,19357],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[22,19359,19360,19361,1470],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[140,19362,19363],{},"Person(){}",[63,19365,19366,497,19369],{},[25,19367,19368],{},"析构函数语法：",[140,19370,19371],{},"~类名(){}",[19,19373,19374,19377,19380,19386],{},[22,19375,19376],{},"析构函数，没有返回值也不写void",[22,19378,19379],{},"函数名称与类名相同,在名称前加上符号  ~",[22,19381,19382,19383],{},"析构函数不可以有参数，因此",[25,19384,19385],{},"不可以发生重载",[22,19387,19388],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[133,19390,19392],{"className":1037,"code":19391,"language":1039,"meta":138,"style":138},"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",[140,19393,19394,19400,19404,19408,19413,19420,19424,19437,19441,19446,19453,19457,19470,19474,19478,19482,19486,19494,19498,19506,19510,19514,19522,19526,19531,19535,19542,19546,19559,19563,19571],{"__ignoreMap":138},[143,19395,19396,19398],{"class":145,"line":146},[143,19397,15593],{"class":755},[143,19399,16070],{"class":156},[143,19401,19402],{"class":145,"line":35},[143,19403,2449],{"class":149},[143,19405,19406],{"class":145,"line":46},[143,19407,15615],{"class":755},[143,19409,19410],{"class":145,"line":293},[143,19411,19412],{"class":266},"    \u002F\u002F构造函数\n",[143,19414,19415,19418],{"class":145,"line":306},[143,19416,19417],{"class":156},"    Person",[143,19419,2876],{"class":149},[143,19421,19422],{"class":145,"line":319},[143,19423,2930],{"class":149},[143,19425,19426,19428,19430,19433,19435],{"class":145,"line":332},[143,19427,10569],{"class":149},[143,19429,2081],{"class":755},[143,19431,19432],{"class":163}," \"Person的构造函数调用\"",[143,19434,2348],{"class":755},[143,19436,9740],{"class":149},[143,19438,19439],{"class":145,"line":345},[143,19440,3087],{"class":149},[143,19442,19443],{"class":145,"line":701},[143,19444,19445],{"class":266},"    \u002F\u002F析构函数\n",[143,19447,19448,19451],{"class":145,"line":707},[143,19449,19450],{"class":156},"    ~Person",[143,19452,2876],{"class":149},[143,19454,19455],{"class":145,"line":727},[143,19456,2930],{"class":149},[143,19458,19459,19461,19463,19466,19468],{"class":145,"line":2518},[143,19460,10569],{"class":149},[143,19462,2081],{"class":755},[143,19464,19465],{"class":163}," \"Person的析构函数调用\"",[143,19467,2348],{"class":755},[143,19469,9740],{"class":149},[143,19471,19472],{"class":145,"line":2524},[143,19473,3087],{"class":149},[143,19475,19476],{"class":145,"line":2529},[143,19477,3300],{"emptyLinePlaceholder":976},[143,19479,19480],{"class":145,"line":2543},[143,19481,4895],{"class":149},[143,19483,19484],{"class":145,"line":2548},[143,19485,3300],{"emptyLinePlaceholder":976},[143,19487,19488,19490,19492],{"class":145,"line":2554},[143,19489,6264],{"class":755},[143,19491,6488],{"class":156},[143,19493,2876],{"class":149},[143,19495,19496],{"class":145,"line":2575},[143,19497,2449],{"class":149},[143,19499,19500,19503],{"class":145,"line":2580},[143,19501,19502],{"class":149},"    Person p;",[143,19504,19505],{"class":266},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[143,19507,19508],{"class":145,"line":2594},[143,19509,348],{"class":149},[143,19511,19512],{"class":145,"line":2599},[143,19513,3300],{"emptyLinePlaceholder":976},[143,19515,19516,19518,19520],{"class":145,"line":2628},[143,19517,1052],{"class":755},[143,19519,2873],{"class":156},[143,19521,11753],{"class":149},[143,19523,19524],{"class":145,"line":2633},[143,19525,14110],{"class":149},[143,19527,19528],{"class":145,"line":2650},[143,19529,19530],{"class":266},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[143,19532,19533],{"class":145,"line":2655},[143,19534,3300],{"emptyLinePlaceholder":976},[143,19536,19537,19539],{"class":145,"line":2660},[143,19538,19502],{"class":149},[143,19540,19541],{"class":266},"\u002F\u002F只有构造函数\n",[143,19543,19544],{"class":145,"line":2665},[143,19545,3300],{"emptyLinePlaceholder":976},[143,19547,19548,19550,19552,19554,19556],{"class":145,"line":2679},[143,19549,3203],{"class":156},[143,19551,1049],{"class":149},[143,19553,3208],{"class":163},[143,19555,6866],{"class":149},[143,19557,19558],{"class":266},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[143,19560,19561],{"class":145,"line":2684},[143,19562,3300],{"emptyLinePlaceholder":976},[143,19564,19565,19567,19569],{"class":145,"line":3477},[143,19566,4990],{"class":755},[143,19568,4993],{"class":280},[143,19570,290],{"class":149},[143,19572,19573],{"class":145,"line":3491},[143,19574,348],{"class":149},[63,19576,19577],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[58,19579,19581],{"id":19580},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[63,19583,19584],{},"两种分类方式：",[63,19586,19587],{},"​\t按参数分为： 有参构造和无参构造",[63,19589,19590],{},"​\t按类型分为： 普通构造和拷贝构造",[63,19592,19593],{},"三种调用方式：",[63,19595,19596],{},"​\t括号法",[63,19598,19599],{},"​\t显示法",[63,19601,19602],{},"​\t隐式转换法",[133,19604,19606],{"className":1037,"code":19605,"language":1039,"meta":138,"style":138},"#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",[140,19607,19608,19614,19624,19629,19634,19639,19644,19648,19656,19660,19664,19668,19674,19678,19691,19695,19707,19711,19720,19733,19737,19741,19747,19751,19764,19768,19773,19789,19793,19798,19807,19820,19824,19830,19834,19839,19847,19851,19856,19860,19868,19872,19877,19882,19887,19892,19897,19901,19906,19911,19916,19921,19925,19930,19935,19951,19963,19968,19972,19977,19982,19987,19991,19996,20010,20023,20027,20035,20039,20045,20051,20059],{"__ignoreMap":138},[143,19609,19610,19612],{"class":145,"line":146},[143,19611,2850],{"class":755},[143,19613,2853],{"class":163},[143,19615,19616,19618,19620,19622],{"class":145,"line":35},[143,19617,2858],{"class":755},[143,19619,2861],{"class":755},[143,19621,2864],{"class":156},[143,19623,290],{"class":149},[143,19625,19626],{"class":145,"line":46},[143,19627,19628],{"class":266},"\u002F\u002F1.构造函数的分类及调用\n",[143,19630,19631],{"class":145,"line":293},[143,19632,19633],{"class":266},"\u002F\u002F分类\n",[143,19635,19636],{"class":145,"line":306},[143,19637,19638],{"class":266},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[143,19640,19641],{"class":145,"line":319},[143,19642,19643],{"class":266},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[143,19645,19646],{"class":145,"line":332},[143,19647,3300],{"emptyLinePlaceholder":976},[143,19649,19650,19652,19654],{"class":145,"line":345},[143,19651,15593],{"class":755},[143,19653,16468],{"class":156},[143,19655,3574],{"class":149},[143,19657,19658],{"class":145,"line":701},[143,19659,2449],{"class":149},[143,19661,19662],{"class":145,"line":707},[143,19663,15615],{"class":755},[143,19665,19666],{"class":145,"line":727},[143,19667,19412],{"class":266},[143,19669,19670,19672],{"class":145,"line":2518},[143,19671,19417],{"class":156},[143,19673,2876],{"class":149},[143,19675,19676],{"class":145,"line":2524},[143,19677,2930],{"class":149},[143,19679,19680,19682,19684,19687,19689],{"class":145,"line":2529},[143,19681,4351],{"class":149},[143,19683,2081],{"class":755},[143,19685,19686],{"class":163},"\"Person构造函数无参构造\"",[143,19688,2081],{"class":755},[143,19690,2103],{"class":149},[143,19692,19693],{"class":145,"line":2543},[143,19694,3087],{"class":149},[143,19696,19697,19699,19701,19703,19705],{"class":145,"line":2548},[143,19698,19417],{"class":156},[143,19700,1049],{"class":149},[143,19702,1052],{"class":755},[143,19704,2302],{"class":6116},[143,19706,1055],{"class":149},[143,19708,19709],{"class":145,"line":2554},[143,19710,2930],{"class":149},[143,19712,19713,19716,19718],{"class":145,"line":2575},[143,19714,19715],{"class":149},"        age",[143,19717,160],{"class":755},[143,19719,7097],{"class":149},[143,19721,19722,19724,19726,19729,19731],{"class":145,"line":2580},[143,19723,4351],{"class":149},[143,19725,2081],{"class":755},[143,19727,19728],{"class":163},"\"Person构造函数有参构造\"",[143,19730,2081],{"class":755},[143,19732,2103],{"class":149},[143,19734,19735],{"class":145,"line":2594},[143,19736,3087],{"class":149},[143,19738,19739],{"class":145,"line":2599},[143,19740,19445],{"class":266},[143,19742,19743,19745],{"class":145,"line":2628},[143,19744,19450],{"class":156},[143,19746,2876],{"class":149},[143,19748,19749],{"class":145,"line":2633},[143,19750,2930],{"class":149},[143,19752,19753,19755,19757,19760,19762],{"class":145,"line":2650},[143,19754,4351],{"class":149},[143,19756,2081],{"class":755},[143,19758,19759],{"class":163},"\"Person析构函数被调用\"",[143,19761,2081],{"class":755},[143,19763,2103],{"class":149},[143,19765,19766],{"class":145,"line":2655},[143,19767,3087],{"class":149},[143,19769,19770],{"class":145,"line":2660},[143,19771,19772],{"class":266},"    \u002F\u002F拷贝构造函数\n",[143,19774,19775,19777,19779,19781,19783,19785,19787],{"class":145,"line":2665},[143,19776,19417],{"class":156},[143,19778,1049],{"class":149},[143,19780,7692],{"class":755},[143,19782,16468],{"class":156},[143,19784,11484],{"class":755},[143,19786,63],{"class":6116},[143,19788,1055],{"class":149},[143,19790,19791],{"class":145,"line":2679},[143,19792,2930],{"class":149},[143,19794,19795],{"class":145,"line":2684},[143,19796,19797],{"class":266},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[143,19799,19800,19802,19804],{"class":145,"line":3477},[143,19801,19715],{"class":149},[143,19803,160],{"class":755},[143,19805,19806],{"class":149},"p.age;\n",[143,19808,19809,19811,19813,19816,19818],{"class":145,"line":3491},[143,19810,4351],{"class":149},[143,19812,2081],{"class":755},[143,19814,19815],{"class":163},"\"Person拷贝构造函数被调用\"",[143,19817,2081],{"class":755},[143,19819,2103],{"class":149},[143,19821,19822],{"class":145,"line":3499},[143,19823,3087],{"class":149},[143,19825,19826,19828],{"class":145,"line":3504},[143,19827,2885],{"class":755},[143,19829,8697],{"class":149},[143,19831,19832],{"class":145,"line":3510},[143,19833,4895],{"class":149},[143,19835,19836],{"class":145,"line":3516},[143,19837,19838],{"class":266},"\u002F\u002F调用\n",[143,19840,19841,19843,19845],{"class":145,"line":3521},[143,19842,6264],{"class":755},[143,19844,6488],{"class":156},[143,19846,2876],{"class":149},[143,19848,19849],{"class":145,"line":8848},[143,19850,2449],{"class":149},[143,19852,19853],{"class":145,"line":8872},[143,19854,19855],{"class":266},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[143,19857,19858],{"class":145,"line":8877},[143,19859,348],{"class":149},[143,19861,19862,19864,19866],{"class":145,"line":8883},[143,19863,6264],{"class":755},[143,19865,6557],{"class":156},[143,19867,2876],{"class":149},[143,19869,19870],{"class":145,"line":8910},[143,19871,2449],{"class":149},[143,19873,19874],{"class":145,"line":8915},[143,19875,19876],{"class":266},"    \u002F\u002F1.括号法\n",[143,19878,19879],{"class":145,"line":8921},[143,19880,19881],{"class":266},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[143,19883,19884],{"class":145,"line":8933},[143,19885,19886],{"class":266},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[143,19888,19889],{"class":145,"line":8945},[143,19890,19891],{"class":266},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[143,19893,19894],{"class":145,"line":8957},[143,19895,19896],{"class":266},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[143,19898,19899],{"class":145,"line":10616},[143,19900,3300],{"emptyLinePlaceholder":976},[143,19902,19903],{"class":145,"line":10641},[143,19904,19905],{"class":266},"    \u002F\u002F注意事项\n",[143,19907,19908],{"class":145,"line":10664},[143,19909,19910],{"class":266},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[143,19912,19913],{"class":145,"line":10688},[143,19914,19915],{"class":266},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[143,19917,19918],{"class":145,"line":10693},[143,19919,19920],{"class":266},"    \u002F\u002F Person p4();\n",[143,19922,19923],{"class":145,"line":10698},[143,19924,3300],{"emptyLinePlaceholder":976},[143,19926,19927],{"class":145,"line":10703},[143,19928,19929],{"class":266},"    \u002F\u002F2.显示法\n",[143,19931,19932],{"class":145,"line":10712},[143,19933,19934],{"class":149},"    Person p1;\n",[143,19936,19937,19940,19942,19945,19947,19949],{"class":145,"line":10717},[143,19938,19939],{"class":149},"    Person p2",[143,19941,160],{"class":755},[143,19943,19944],{"class":156},"Person",[143,19946,1049],{"class":149},[143,19948,1487],{"class":280},[143,19950,3619],{"class":149},[143,19952,19953,19956,19958,19960],{"class":145,"line":10723},[143,19954,19955],{"class":149},"    Person p3",[143,19957,160],{"class":755},[143,19959,19944],{"class":156},[143,19961,19962],{"class":149},"(p2);\n",[143,19964,19965],{"class":145,"line":10744},[143,19966,19967],{"class":266},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[143,19969,19970],{"class":145,"line":10750},[143,19971,3300],{"emptyLinePlaceholder":976},[143,19973,19974],{"class":145,"line":10764},[143,19975,19976],{"class":266},"    \u002F\u002F 注意事项2\n",[143,19978,19979],{"class":145,"line":10770},[143,19980,19981],{"class":266},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[143,19983,19984],{"class":145,"line":10797},[143,19985,19986],{"class":266},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[143,19988,19989],{"class":145,"line":10806},[143,19990,3300],{"emptyLinePlaceholder":976},[143,19992,19993],{"class":145,"line":10812},[143,19994,19995],{"class":266},"    \u002F\u002F3.隐士转换法\n",[143,19997,19998,20001,20003,20005,20007],{"class":145,"line":10820},[143,19999,20000],{"class":149},"    Person p4",[143,20002,160],{"class":755},[143,20004,1487],{"class":280},[143,20006,1101],{"class":149},[143,20008,20009],{"class":266},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[143,20011,20012,20015,20017,20020],{"class":145,"line":10825},[143,20013,20014],{"class":149},"    Person p5",[143,20016,160],{"class":755},[143,20018,20019],{"class":149},"p4;",[143,20021,20022],{"class":266}," \u002F\u002F 这里会调用拷贝构造函数\n",[143,20024,20025],{"class":145,"line":17502},[143,20026,348],{"class":149},[143,20028,20029,20031,20033],{"class":145,"line":17508},[143,20030,1052],{"class":755},[143,20032,2873],{"class":156},[143,20034,2876],{"class":149},[143,20036,20037],{"class":145,"line":17531},[143,20038,2449],{"class":149},[143,20040,20041,20043],{"class":145,"line":17537},[143,20042,6533],{"class":156},[143,20044,6536],{"class":149},[143,20046,20047,20049],{"class":145,"line":17560},[143,20048,6602],{"class":156},[143,20050,6536],{"class":149},[143,20052,20053,20055,20057],{"class":145,"line":17574},[143,20054,4990],{"class":755},[143,20056,4993],{"class":280},[143,20058,290],{"class":149},[143,20060,20061],{"class":145,"line":17594},[143,20062,348],{"class":149},[63,20064,20065,20068],{},[25,20066,20067],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[58,20070,20072],{"id":20071},"_823拷贝构造函数","8.2.3拷贝构造函数",[63,20074,20075],{},"C++中拷贝构造函数调用时机通常有三种情况",[232,20077,20078,20081,20084],{},[22,20079,20080],{},"使用一个已经创建完毕的对象来初始化一个新对象",[22,20082,20083],{},"值传递的方式给函数参数传值",[22,20085,20086],{},"以值方式返回局部对象",[133,20088,20090],{"className":1037,"code":20089,"language":1039,"meta":138,"style":138},"#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",[140,20091,20092,20098,20108,20112,20117,20121,20126,20131,20136,20142,20146,20150,20156,20160,20173,20177,20182,20194,20198,20206,20219,20223,20227,20243,20247,20256,20269,20273,20279,20283,20295,20299,20305,20309,20313,20321,20325,20338,20346,20364,20368,20373,20378,20393,20397,20410,20414,20422,20426,20430,20438,20442,20447,20456,20460,20464,20489,20499,20503,20511,20515,20526,20551,20555,20559,20563,20571,20575,20580,20585,20592,20597,20602,20607,20612,20616,20621,20625,20630,20634,20639,20644,20648,20652,20657,20662,20670],{"__ignoreMap":138},[143,20093,20094,20096],{"class":145,"line":146},[143,20095,2850],{"class":755},[143,20097,2853],{"class":163},[143,20099,20100,20102,20104,20106],{"class":145,"line":35},[143,20101,2858],{"class":755},[143,20103,2861],{"class":755},[143,20105,2864],{"class":156},[143,20107,290],{"class":149},[143,20109,20110],{"class":145,"line":46},[143,20111,3300],{"emptyLinePlaceholder":976},[143,20113,20114],{"class":145,"line":293},[143,20115,20116],{"class":266},"\u002F\u002F拷贝构造函数调用时机\n",[143,20118,20119],{"class":145,"line":306},[143,20120,3300],{"emptyLinePlaceholder":976},[143,20122,20123],{"class":145,"line":319},[143,20124,20125],{"class":266},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[143,20127,20128],{"class":145,"line":332},[143,20129,20130],{"class":266},"\u002F\u002F2.值传递的方式给函数参数传值\n",[143,20132,20133],{"class":145,"line":345},[143,20134,20135],{"class":266},"\u002F\u002F3.以值方式返回局部对象\n",[143,20137,20138,20140],{"class":145,"line":701},[143,20139,15593],{"class":755},[143,20141,16070],{"class":156},[143,20143,20144],{"class":145,"line":707},[143,20145,2449],{"class":149},[143,20147,20148],{"class":145,"line":727},[143,20149,15615],{"class":755},[143,20151,20152,20154],{"class":145,"line":2518},[143,20153,19417],{"class":156},[143,20155,2876],{"class":149},[143,20157,20158],{"class":145,"line":2524},[143,20159,2930],{"class":149},[143,20161,20162,20164,20166,20169,20171],{"class":145,"line":2529},[143,20163,10569],{"class":149},[143,20165,2081],{"class":755},[143,20167,20168],{"class":163}," \"Person的默认构造函数调用\"",[143,20170,2348],{"class":755},[143,20172,9740],{"class":149},[143,20174,20175],{"class":145,"line":2543},[143,20176,3087],{"class":149},[143,20178,20179],{"class":145,"line":2548},[143,20180,20181],{"class":266},"    \u002F\u002F有参构造\n",[143,20183,20184,20186,20188,20190,20192],{"class":145,"line":2554},[143,20185,19417],{"class":156},[143,20187,1049],{"class":149},[143,20189,1052],{"class":755},[143,20191,16587],{"class":6116},[143,20193,1055],{"class":149},[143,20195,20196],{"class":145,"line":2575},[143,20197,2930],{"class":149},[143,20199,20200,20202,20204],{"class":145,"line":2580},[143,20201,16641],{"class":149},[143,20203,160],{"class":755},[143,20205,8697],{"class":149},[143,20207,20208,20210,20212,20215,20217],{"class":145,"line":2594},[143,20209,10569],{"class":149},[143,20211,2081],{"class":755},[143,20213,20214],{"class":163}," \"Person的有参构造函数调用\"",[143,20216,2348],{"class":755},[143,20218,9740],{"class":149},[143,20220,20221],{"class":145,"line":2599},[143,20222,3087],{"class":149},[143,20224,20225],{"class":145,"line":2628},[143,20226,19772],{"class":266},[143,20228,20229,20231,20233,20235,20237,20239,20241],{"class":145,"line":2633},[143,20230,19417],{"class":156},[143,20232,1049],{"class":149},[143,20234,7692],{"class":755},[143,20236,16468],{"class":156},[143,20238,11484],{"class":755},[143,20240,63],{"class":6116},[143,20242,1055],{"class":149},[143,20244,20245],{"class":145,"line":2650},[143,20246,2930],{"class":149},[143,20248,20249,20251,20253],{"class":145,"line":2655},[143,20250,16641],{"class":149},[143,20252,160],{"class":755},[143,20254,20255],{"class":149}," p.m_Age;\n",[143,20257,20258,20260,20262,20265,20267],{"class":145,"line":2660},[143,20259,10569],{"class":149},[143,20261,2081],{"class":755},[143,20263,20264],{"class":163}," \"Person的拷贝构造函数调用\"",[143,20266,2348],{"class":755},[143,20268,9740],{"class":149},[143,20270,20271],{"class":145,"line":2665},[143,20272,3087],{"class":149},[143,20274,20275,20277],{"class":145,"line":2679},[143,20276,19450],{"class":156},[143,20278,2876],{"class":149},[143,20280,20281],{"class":145,"line":2684},[143,20282,2930],{"class":149},[143,20284,20285,20287,20289,20291,20293],{"class":145,"line":3477},[143,20286,10569],{"class":149},[143,20288,2081],{"class":755},[143,20290,19465],{"class":163},[143,20292,2348],{"class":755},[143,20294,9740],{"class":149},[143,20296,20297],{"class":145,"line":3491},[143,20298,3087],{"class":149},[143,20300,20301,20303],{"class":145,"line":3499},[143,20302,2885],{"class":755},[143,20304,16564],{"class":149},[143,20306,20307],{"class":145,"line":3504},[143,20308,4895],{"class":149},[143,20310,20311],{"class":145,"line":3510},[143,20312,20125],{"class":266},[143,20314,20315,20317,20319],{"class":145,"line":3516},[143,20316,6264],{"class":755},[143,20318,6488],{"class":156},[143,20320,2876],{"class":149},[143,20322,20323],{"class":145,"line":3521},[143,20324,2449],{"class":149},[143,20326,20327,20330,20332,20334,20336],{"class":145,"line":8848},[143,20328,20329],{"class":149},"    Person ",[143,20331,8030],{"class":156},[143,20333,1049],{"class":149},[143,20335,1741],{"class":280},[143,20337,3619],{"class":149},[143,20339,20340,20342,20344],{"class":145,"line":8872},[143,20341,20329],{"class":149},[143,20343,7933],{"class":156},[143,20345,18413],{"class":149},[143,20347,20348,20350,20352,20355,20357,20360,20362],{"class":145,"line":8877},[143,20349,2454],{"class":149},[143,20351,2081],{"class":755},[143,20353,20354],{"class":163},"\"P2的年龄为：\"",[143,20356,2081],{"class":755},[143,20358,20359],{"class":149},"p2.m_Age",[143,20361,2081],{"class":755},[143,20363,2103],{"class":149},[143,20365,20366],{"class":145,"line":8883},[143,20367,348],{"class":149},[143,20369,20370],{"class":145,"line":8910},[143,20371,20372],{"class":266},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[143,20374,20375],{"class":145,"line":8915},[143,20376,20377],{"class":266},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[143,20379,20380,20382,20385,20387,20389,20391],{"class":145,"line":8921},[143,20381,6264],{"class":755},[143,20383,20384],{"class":156}," doWork",[143,20386,1049],{"class":149},[143,20388,19944],{"class":156},[143,20390,7725],{"class":6116},[143,20392,1055],{"class":149},[143,20394,20395],{"class":145,"line":8933},[143,20396,2449],{"class":149},[143,20398,20399,20401,20403,20406,20408],{"class":145,"line":8945},[143,20400,7429],{"class":149},[143,20402,2081],{"class":755},[143,20404,20405],{"class":163}," \"doWork函数调用\"",[143,20407,2348],{"class":755},[143,20409,9740],{"class":149},[143,20411,20412],{"class":145,"line":8957},[143,20413,348],{"class":149},[143,20415,20416,20418,20420],{"class":145,"line":10616},[143,20417,6264],{"class":755},[143,20419,6557],{"class":156},[143,20421,2876],{"class":149},[143,20423,20424],{"class":145,"line":10641},[143,20425,2449],{"class":149},[143,20427,20428],{"class":145,"line":10664},[143,20429,16212],{"class":149},[143,20431,20432,20435],{"class":145,"line":10688},[143,20433,20434],{"class":156},"    doWork",[143,20436,20437],{"class":149},"(p);\n",[143,20439,20440],{"class":145,"line":10693},[143,20441,348],{"class":149},[143,20443,20444],{"class":145,"line":10698},[143,20445,20446],{"class":266},"\u002F\u002F 3.以值方式返回局部对象\n",[143,20448,20449,20451,20454],{"class":145,"line":10703},[143,20450,19944],{"class":156},[143,20452,20453],{"class":156}," doWork2",[143,20455,2876],{"class":149},[143,20457,20458],{"class":145,"line":10712},[143,20459,2449],{"class":149},[143,20461,20462],{"class":145,"line":10717},[143,20463,19934],{"class":149},[143,20465,20466,20468,20470,20472,20474,20476,20478,20480,20482,20484,20486],{"class":145,"line":10723},[143,20467,2454],{"class":149},[143,20469,2081],{"class":755},[143,20471,1049],{"class":149},[143,20473,1052],{"class":755},[143,20475,7418],{"class":755},[143,20477,1470],{"class":149},[143,20479,1394],{"class":755},[143,20481,8030],{"class":149},[143,20483,2081],{"class":755},[143,20485,2146],{"class":149},[143,20487,20488],{"class":266},"\u002F\u002F打印p1的地址\n",[143,20490,20491,20493,20496],{"class":145,"line":10744},[143,20492,4990],{"class":755},[143,20494,20495],{"class":149}," p1;",[143,20497,20498],{"class":266},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[143,20500,20501],{"class":145,"line":10750},[143,20502,348],{"class":149},[143,20504,20505,20507,20509],{"class":145,"line":10764},[143,20506,6264],{"class":755},[143,20508,6629],{"class":156},[143,20510,2876],{"class":149},[143,20512,20513],{"class":145,"line":10770},[143,20514,2449],{"class":149},[143,20516,20517,20520,20522,20524],{"class":145,"line":10797},[143,20518,20519],{"class":149},"    Person p ",[143,20521,160],{"class":755},[143,20523,20453],{"class":156},[143,20525,6536],{"class":149},[143,20527,20528,20530,20532,20534,20536,20538,20540,20542,20544,20546,20548],{"class":145,"line":10806},[143,20529,2454],{"class":149},[143,20531,2081],{"class":755},[143,20533,1049],{"class":149},[143,20535,1052],{"class":755},[143,20537,7418],{"class":755},[143,20539,1470],{"class":149},[143,20541,1394],{"class":755},[143,20543,63],{"class":149},[143,20545,2081],{"class":755},[143,20547,2146],{"class":149},[143,20549,20550],{"class":266},"\u002F\u002F打印p的地址\n",[143,20552,20553],{"class":145,"line":10812},[143,20554,348],{"class":149},[143,20556,20557],{"class":145,"line":10820},[143,20558,3300],{"emptyLinePlaceholder":976},[143,20560,20561],{"class":145,"line":10825},[143,20562,3300],{"emptyLinePlaceholder":976},[143,20564,20565,20567,20569],{"class":145,"line":17502},[143,20566,1052],{"class":755},[143,20568,2873],{"class":156},[143,20570,2876],{"class":149},[143,20572,20573],{"class":145,"line":17508},[143,20574,2449],{"class":149},[143,20576,20577],{"class":145,"line":17531},[143,20578,20579],{"class":266},"    \u002F\u002F test01();\n",[143,20581,20582],{"class":145,"line":17537},[143,20583,20584],{"class":266},"    \u002F\u002F test02();\n",[143,20586,20587,20590],{"class":145,"line":17560},[143,20588,20589],{"class":156},"    test03",[143,20591,6536],{"class":149},[143,20593,20594],{"class":145,"line":17574},[143,20595,20596],{"class":266},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[143,20598,20599],{"class":145,"line":17594},[143,20600,20601],{"class":266},"\u002F\u002F 输出结果如下：\n",[143,20603,20604],{"class":145,"line":17600},[143,20605,20606],{"class":266},"\u002F\u002F Person的默认构造函数调用\n",[143,20608,20609],{"class":145,"line":17611},[143,20610,20611],{"class":266},"\u002F\u002F 0x7fffffffceec\n",[143,20613,20614],{"class":145,"line":17634},[143,20615,20611],{"class":266},[143,20617,20618],{"class":145,"line":17656},[143,20619,20620],{"class":266},"\u002F\u002F Person的析构函数调用\n",[143,20622,20623],{"class":145,"line":17661},[143,20624,3300],{"emptyLinePlaceholder":976},[143,20626,20627],{"class":145,"line":17667},[143,20628,20629],{"class":266},"\u002F\u002F 之前的输出结果如下：\n",[143,20631,20632],{"class":145,"line":17681},[143,20633,20606],{"class":266},[143,20635,20636],{"class":145,"line":17694},[143,20637,20638],{"class":266},"\u002F\u002F 地址\n",[143,20640,20641],{"class":145,"line":17699},[143,20642,20643],{"class":266},"\u002F\u002F Person的拷贝构造函数调用\n",[143,20645,20646],{"class":145,"line":17713},[143,20647,20620],{"class":266},[143,20649,20650],{"class":145,"line":17718},[143,20651,20638],{"class":266},[143,20653,20654],{"class":145,"line":17724},[143,20655,20656],{"class":266},"\u002F\u002F (这两次输出的地址也是不同的) \n",[143,20658,20659],{"class":145,"line":17729},[143,20660,20661],{"class":266},"\u002F\u002F Person的析构函数调用     \n",[143,20663,20664,20666,20668],{"class":145,"line":17743},[143,20665,4990],{"class":755},[143,20667,4993],{"class":280},[143,20669,290],{"class":149},[143,20671,20672],{"class":145,"line":17748},[143,20673,348],{"class":149},[63,20675,20676],{},"简化版理解",[133,20678,20680],{"className":1037,"code":20679,"language":1039,"meta":138,"style":138},"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",[140,20681,20682,20690,20694,20700,20713,20724,20728,20740,20753,20761,20765,20781,20794,20803,20807,20812,20818,20831,20835,20839,20846,20850,20854,20859,20867,20871,20887,20900,20913,20917,20922,20930,20934,20938,20943,20948,20964,20972,20979,20985,20989,20993,20998,21006,21010,21014,21037,21044,21048,21052,21060,21064,21074,21096,21100,21104,21108,21116,21120,21125,21130,21136,21140,21150,21154,21162],{"__ignoreMap":138},[143,20683,20684,20686,20688],{"class":145,"line":146},[143,20685,15593],{"class":755},[143,20687,16468],{"class":156},[143,20689,275],{"class":149},[143,20691,20692],{"class":145,"line":35},[143,20693,15615],{"class":755},[143,20695,20696,20698],{"class":145,"line":46},[143,20697,19417],{"class":156},[143,20699,11753],{"class":149},[143,20701,20702,20704,20706,20709,20711],{"class":145,"line":293},[143,20703,10569],{"class":149},[143,20705,2081],{"class":755},[143,20707,20708],{"class":163}," \"无参构造函数!\"",[143,20710,2348],{"class":755},[143,20712,9740],{"class":149},[143,20714,20715,20718,20720,20722],{"class":145,"line":306},[143,20716,20717],{"class":149},"        mAge ",[143,20719,160],{"class":755},[143,20721,4993],{"class":280},[143,20723,290],{"class":149},[143,20725,20726],{"class":145,"line":319},[143,20727,3087],{"class":149},[143,20729,20730,20732,20734,20736,20738],{"class":145,"line":332},[143,20731,19417],{"class":156},[143,20733,1049],{"class":149},[143,20735,1052],{"class":755},[143,20737,16587],{"class":6116},[143,20739,13342],{"class":149},[143,20741,20742,20744,20746,20749,20751],{"class":145,"line":345},[143,20743,10569],{"class":149},[143,20745,2081],{"class":755},[143,20747,20748],{"class":163}," \"有参构造函数!\"",[143,20750,2348],{"class":755},[143,20752,9740],{"class":149},[143,20754,20755,20757,20759],{"class":145,"line":701},[143,20756,20717],{"class":149},[143,20758,160],{"class":755},[143,20760,8697],{"class":149},[143,20762,20763],{"class":145,"line":707},[143,20764,3087],{"class":149},[143,20766,20767,20769,20771,20773,20775,20777,20779],{"class":145,"line":727},[143,20768,19417],{"class":156},[143,20770,1049],{"class":149},[143,20772,7692],{"class":755},[143,20774,16468],{"class":156},[143,20776,1394],{"class":755},[143,20778,7725],{"class":6116},[143,20780,13342],{"class":149},[143,20782,20783,20785,20787,20790,20792],{"class":145,"line":2518},[143,20784,10569],{"class":149},[143,20786,2081],{"class":755},[143,20788,20789],{"class":163}," \"拷贝构造函数!\"",[143,20791,2348],{"class":755},[143,20793,9740],{"class":149},[143,20795,20796,20798,20800],{"class":145,"line":2524},[143,20797,20717],{"class":149},[143,20799,160],{"class":755},[143,20801,20802],{"class":149}," p.mAge;\n",[143,20804,20805],{"class":145,"line":2529},[143,20806,3087],{"class":149},[143,20808,20809],{"class":145,"line":2543},[143,20810,20811],{"class":266},"    \u002F\u002F析构函数在释放内存之前调用\n",[143,20813,20814,20816],{"class":145,"line":2548},[143,20815,19450],{"class":156},[143,20817,11753],{"class":149},[143,20819,20820,20822,20824,20827,20829],{"class":145,"line":2554},[143,20821,10569],{"class":149},[143,20823,2081],{"class":755},[143,20825,20826],{"class":163}," \"析构函数!\"",[143,20828,2348],{"class":755},[143,20830,9740],{"class":149},[143,20832,20833],{"class":145,"line":2575},[143,20834,3087],{"class":149},[143,20836,20837],{"class":145,"line":2580},[143,20838,15615],{"class":755},[143,20840,20841,20843],{"class":145,"line":2594},[143,20842,2885],{"class":755},[143,20844,20845],{"class":149}," mAge;\n",[143,20847,20848],{"class":145,"line":2599},[143,20849,4895],{"class":149},[143,20851,20852],{"class":145,"line":2628},[143,20853,3300],{"emptyLinePlaceholder":976},[143,20855,20856],{"class":145,"line":2633},[143,20857,20858],{"class":266},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[143,20860,20861,20863,20865],{"class":145,"line":2650},[143,20862,6264],{"class":755},[143,20864,6488],{"class":156},[143,20866,11753],{"class":149},[143,20868,20869],{"class":145,"line":2655},[143,20870,3300],{"emptyLinePlaceholder":976},[143,20872,20873,20875,20878,20880,20882,20884],{"class":145,"line":2660},[143,20874,20329],{"class":149},[143,20876,20877],{"class":156},"man",[143,20879,1049],{"class":149},[143,20881,1352],{"class":280},[143,20883,6866],{"class":149},[143,20885,20886],{"class":266}," \u002F\u002Fp对象已经创建完毕\n",[143,20888,20889,20891,20894,20897],{"class":145,"line":2665},[143,20890,20329],{"class":149},[143,20892,20893],{"class":156},"newman",[143,20895,20896],{"class":149},"(man);",[143,20898,20899],{"class":266}," \u002F\u002F调用拷贝构造函数\n",[143,20901,20902,20905,20907,20910],{"class":145,"line":2679},[143,20903,20904],{"class":149},"    Person newman2 ",[143,20906,160],{"class":755},[143,20908,20909],{"class":149}," man;",[143,20911,20912],{"class":266}," \u002F\u002F拷贝构造\n",[143,20914,20915],{"class":145,"line":2684},[143,20916,3300],{"emptyLinePlaceholder":976},[143,20918,20919],{"class":145,"line":3477},[143,20920,20921],{"class":266},"    \u002F\u002FPerson newman3;\n",[143,20923,20924,20927],{"class":145,"line":3491},[143,20925,20926],{"class":266},"    \u002F\u002Fnewman3 = man;",[143,20928,20929],{"class":266}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[143,20931,20932],{"class":145,"line":3499},[143,20933,348],{"class":149},[143,20935,20936],{"class":145,"line":3504},[143,20937,3300],{"emptyLinePlaceholder":976},[143,20939,20940],{"class":145,"line":3510},[143,20941,20942],{"class":266},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[143,20944,20945],{"class":145,"line":3516},[143,20946,20947],{"class":266},"\u002F\u002F相当于Person p1 = p;\n",[143,20949,20950,20952,20954,20956,20958,20961],{"class":145,"line":3521},[143,20951,6264],{"class":755},[143,20953,20384],{"class":156},[143,20955,1049],{"class":149},[143,20957,19944],{"class":156},[143,20959,20960],{"class":6116}," p1",[143,20962,20963],{"class":149},") {}\n",[143,20965,20966,20968,20970],{"class":145,"line":8848},[143,20967,6264],{"class":755},[143,20969,6557],{"class":156},[143,20971,11753],{"class":149},[143,20973,20974,20976],{"class":145,"line":8872},[143,20975,19502],{"class":149},[143,20977,20978],{"class":266}," \u002F\u002F无参构造函数\n",[143,20980,20981,20983],{"class":145,"line":8877},[143,20982,20434],{"class":156},[143,20984,20437],{"class":149},[143,20986,20987],{"class":145,"line":8883},[143,20988,348],{"class":149},[143,20990,20991],{"class":145,"line":8910},[143,20992,3300],{"emptyLinePlaceholder":976},[143,20994,20995],{"class":145,"line":8915},[143,20996,20997],{"class":266},"\u002F\u002F3. 以值方式返回局部对象\n",[143,20999,21000,21002,21004],{"class":145,"line":8921},[143,21001,19944],{"class":156},[143,21003,20453],{"class":156},[143,21005,2876],{"class":149},[143,21007,21008],{"class":145,"line":8933},[143,21009,2449],{"class":149},[143,21011,21012],{"class":145,"line":8945},[143,21013,19934],{"class":149},[143,21015,21016,21018,21020,21022,21024,21026,21028,21030,21033,21035],{"class":145,"line":8957},[143,21017,7429],{"class":149},[143,21019,2081],{"class":755},[143,21021,2559],{"class":149},[143,21023,1052],{"class":755},[143,21025,7418],{"class":755},[143,21027,1470],{"class":149},[143,21029,1394],{"class":755},[143,21031,21032],{"class":149},"p1 ",[143,21034,2081],{"class":755},[143,21036,9740],{"class":149},[143,21038,21039,21041],{"class":145,"line":10616},[143,21040,4990],{"class":755},[143,21042,21043],{"class":149}," p1;\n",[143,21045,21046],{"class":145,"line":10641},[143,21047,348],{"class":149},[143,21049,21050],{"class":145,"line":10664},[143,21051,3300],{"emptyLinePlaceholder":976},[143,21053,21054,21056,21058],{"class":145,"line":10688},[143,21055,6264],{"class":755},[143,21057,6629],{"class":156},[143,21059,2876],{"class":149},[143,21061,21062],{"class":145,"line":10693},[143,21063,2449],{"class":149},[143,21065,21066,21068,21070,21072],{"class":145,"line":10698},[143,21067,20519],{"class":149},[143,21069,160],{"class":755},[143,21071,20453],{"class":156},[143,21073,6536],{"class":149},[143,21075,21076,21078,21080,21082,21084,21086,21088,21090,21092,21094],{"class":145,"line":10703},[143,21077,7429],{"class":149},[143,21079,2081],{"class":755},[143,21081,2559],{"class":149},[143,21083,1052],{"class":755},[143,21085,7418],{"class":755},[143,21087,1470],{"class":149},[143,21089,1394],{"class":755},[143,21091,12348],{"class":149},[143,21093,2081],{"class":755},[143,21095,9740],{"class":149},[143,21097,21098],{"class":145,"line":10712},[143,21099,348],{"class":149},[143,21101,21102],{"class":145,"line":10717},[143,21103,3300],{"emptyLinePlaceholder":976},[143,21105,21106],{"class":145,"line":10723},[143,21107,3300],{"emptyLinePlaceholder":976},[143,21109,21110,21112,21114],{"class":145,"line":10744},[143,21111,1052],{"class":755},[143,21113,2873],{"class":156},[143,21115,11753],{"class":149},[143,21117,21118],{"class":145,"line":10750},[143,21119,3300],{"emptyLinePlaceholder":976},[143,21121,21122],{"class":145,"line":10764},[143,21123,21124],{"class":266},"    \u002F\u002Ftest01();\n",[143,21126,21127],{"class":145,"line":10770},[143,21128,21129],{"class":266},"    \u002F\u002Ftest02();\n",[143,21131,21132,21134],{"class":145,"line":10797},[143,21133,20589],{"class":156},[143,21135,6536],{"class":149},[143,21137,21138],{"class":145,"line":10806},[143,21139,3300],{"emptyLinePlaceholder":976},[143,21141,21142,21144,21146,21148],{"class":145,"line":10812},[143,21143,3203],{"class":156},[143,21145,1049],{"class":149},[143,21147,3208],{"class":163},[143,21149,3619],{"class":149},[143,21151,21152],{"class":145,"line":10820},[143,21153,3300],{"emptyLinePlaceholder":976},[143,21155,21156,21158,21160],{"class":145,"line":10825},[143,21157,4990],{"class":755},[143,21159,4993],{"class":280},[143,21161,290],{"class":149},[143,21163,21164],{"class":145,"line":17502},[143,21165,348],{"class":149},[58,21167,21169],{"id":21168},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[63,21171,21172],{},"默认情况下，c++编译器至少给一个类添加3个函数",[63,21174,21175],{},"1．默认构造函数(无参，函数体为空)",[63,21177,21178],{},"2．默认析构函数(无参，函数体为空)",[63,21180,21181],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[63,21183,21184],{},"构造函数调用规则如下：",[232,21186,21187,21190],{},[22,21188,21189],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[22,21191,21192],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[133,21194,21196],{"className":1037,"code":21195,"language":1039,"meta":138,"style":138},"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",[140,21197,21198,21206,21210,21215,21221,21233,21237,21242,21254,21263,21275,21279,21283,21299,21308,21320,21324,21328,21334,21346,21350,21354,21360,21364,21368,21376,21380,21392,21397,21405,21409,21427,21431,21435,21443,21447,21452,21460,21475,21488,21492,21497,21504,21520,21533,21537,21541,21549,21553,21559,21563,21573,21577,21585],{"__ignoreMap":138},[143,21199,21200,21202,21204],{"class":145,"line":146},[143,21201,15593],{"class":755},[143,21203,16468],{"class":156},[143,21205,275],{"class":149},[143,21207,21208],{"class":145,"line":35},[143,21209,15615],{"class":755},[143,21211,21212],{"class":145,"line":46},[143,21213,21214],{"class":266},"    \u002F\u002F无参（默认）构造函数\n",[143,21216,21217,21219],{"class":145,"line":293},[143,21218,19417],{"class":156},[143,21220,11753],{"class":149},[143,21222,21223,21225,21227,21229,21231],{"class":145,"line":306},[143,21224,10569],{"class":149},[143,21226,2081],{"class":755},[143,21228,20708],{"class":163},[143,21230,2348],{"class":755},[143,21232,9740],{"class":149},[143,21234,21235],{"class":145,"line":319},[143,21236,3087],{"class":149},[143,21238,21239],{"class":145,"line":332},[143,21240,21241],{"class":266},"    \u002F\u002F有参构造函数\n",[143,21243,21244,21246,21248,21250,21252],{"class":145,"line":345},[143,21245,19417],{"class":156},[143,21247,1049],{"class":149},[143,21249,1052],{"class":755},[143,21251,2302],{"class":6116},[143,21253,13342],{"class":149},[143,21255,21256,21259,21261],{"class":145,"line":701},[143,21257,21258],{"class":149},"        age ",[143,21260,160],{"class":755},[143,21262,2336],{"class":149},[143,21264,21265,21267,21269,21271,21273],{"class":145,"line":707},[143,21266,10569],{"class":149},[143,21268,2081],{"class":755},[143,21270,20748],{"class":163},[143,21272,2348],{"class":755},[143,21274,9740],{"class":149},[143,21276,21277],{"class":145,"line":727},[143,21278,3087],{"class":149},[143,21280,21281],{"class":145,"line":2518},[143,21282,19772],{"class":266},[143,21284,21285,21287,21289,21291,21293,21295,21297],{"class":145,"line":2524},[143,21286,19417],{"class":156},[143,21288,1049],{"class":149},[143,21290,7692],{"class":755},[143,21292,16468],{"class":156},[143,21294,1394],{"class":755},[143,21296,7725],{"class":6116},[143,21298,13342],{"class":149},[143,21300,21301,21303,21305],{"class":145,"line":2529},[143,21302,21258],{"class":149},[143,21304,160],{"class":755},[143,21306,21307],{"class":149}," p.age;\n",[143,21309,21310,21312,21314,21316,21318],{"class":145,"line":2543},[143,21311,10569],{"class":149},[143,21313,2081],{"class":755},[143,21315,20789],{"class":163},[143,21317,2348],{"class":755},[143,21319,9740],{"class":149},[143,21321,21322],{"class":145,"line":2548},[143,21323,3087],{"class":149},[143,21325,21326],{"class":145,"line":2554},[143,21327,19445],{"class":266},[143,21329,21330,21332],{"class":145,"line":2575},[143,21331,19450],{"class":156},[143,21333,11753],{"class":149},[143,21335,21336,21338,21340,21342,21344],{"class":145,"line":2580},[143,21337,10569],{"class":149},[143,21339,2081],{"class":755},[143,21341,20826],{"class":163},[143,21343,2348],{"class":755},[143,21345,9740],{"class":149},[143,21347,21348],{"class":145,"line":2594},[143,21349,3087],{"class":149},[143,21351,21352],{"class":145,"line":2599},[143,21353,15615],{"class":755},[143,21355,21356,21358],{"class":145,"line":2628},[143,21357,2885],{"class":755},[143,21359,8697],{"class":149},[143,21361,21362],{"class":145,"line":2633},[143,21363,4895],{"class":149},[143,21365,21366],{"class":145,"line":2650},[143,21367,3300],{"emptyLinePlaceholder":976},[143,21369,21370,21372,21374],{"class":145,"line":2655},[143,21371,6264],{"class":755},[143,21373,6488],{"class":156},[143,21375,2876],{"class":149},[143,21377,21378],{"class":145,"line":2660},[143,21379,2449],{"class":149},[143,21381,21382,21384,21386,21388,21390],{"class":145,"line":2665},[143,21383,20329],{"class":149},[143,21385,8030],{"class":156},[143,21387,1049],{"class":149},[143,21389,1691],{"class":280},[143,21391,3619],{"class":149},[143,21393,21394],{"class":145,"line":2679},[143,21395,21396],{"class":266},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[143,21398,21399,21401,21403],{"class":145,"line":2684},[143,21400,20329],{"class":149},[143,21402,7933],{"class":156},[143,21404,18413],{"class":149},[143,21406,21407],{"class":145,"line":3477},[143,21408,3300],{"emptyLinePlaceholder":976},[143,21410,21411,21413,21415,21418,21420,21423,21425],{"class":145,"line":3491},[143,21412,7429],{"class":149},[143,21414,2081],{"class":755},[143,21416,21417],{"class":163}," \"p2的年龄为： \"",[143,21419,2348],{"class":755},[143,21421,21422],{"class":149}," p2.age ",[143,21424,2081],{"class":755},[143,21426,9740],{"class":149},[143,21428,21429],{"class":145,"line":3499},[143,21430,348],{"class":149},[143,21432,21433],{"class":145,"line":3504},[143,21434,3300],{"emptyLinePlaceholder":976},[143,21436,21437,21439,21441],{"class":145,"line":3510},[143,21438,6264],{"class":755},[143,21440,6557],{"class":156},[143,21442,2876],{"class":149},[143,21444,21445],{"class":145,"line":3516},[143,21446,2449],{"class":149},[143,21448,21449],{"class":145,"line":3521},[143,21450,21451],{"class":266},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[143,21453,21454,21457],{"class":145,"line":8848},[143,21455,21456],{"class":149},"    Person p1;",[143,21458,21459],{"class":266}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[143,21461,21462,21464,21466,21468,21470,21472],{"class":145,"line":8872},[143,21463,20329],{"class":149},[143,21465,7933],{"class":156},[143,21467,1049],{"class":149},[143,21469,1487],{"class":280},[143,21471,6866],{"class":149},[143,21473,21474],{"class":266}," \u002F\u002F用户提供的有参\n",[143,21476,21477,21479,21482,21485],{"class":145,"line":8877},[143,21478,20329],{"class":149},[143,21480,21481],{"class":156},"p3",[143,21483,21484],{"class":149},"(p2);",[143,21486,21487],{"class":266}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[143,21489,21490],{"class":145,"line":8883},[143,21491,3300],{"emptyLinePlaceholder":976},[143,21493,21494],{"class":145,"line":8910},[143,21495,21496],{"class":266},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[143,21498,21499,21502],{"class":145,"line":8915},[143,21500,21501],{"class":149},"    Person p4;",[143,21503,21459],{"class":266},[143,21505,21506,21508,21511,21513,21515,21517],{"class":145,"line":8921},[143,21507,20329],{"class":149},[143,21509,21510],{"class":156},"p5",[143,21512,1049],{"class":149},[143,21514,1487],{"class":280},[143,21516,6866],{"class":149},[143,21518,21519],{"class":266}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[143,21521,21522,21524,21527,21530],{"class":145,"line":8933},[143,21523,20329],{"class":149},[143,21525,21526],{"class":156},"p6",[143,21528,21529],{"class":149},"(p5);",[143,21531,21532],{"class":266}," \u002F\u002F用户自己提供拷贝构造\n",[143,21534,21535],{"class":145,"line":8945},[143,21536,348],{"class":149},[143,21538,21539],{"class":145,"line":8957},[143,21540,3300],{"emptyLinePlaceholder":976},[143,21542,21543,21545,21547],{"class":145,"line":10616},[143,21544,1052],{"class":755},[143,21546,2873],{"class":156},[143,21548,11753],{"class":149},[143,21550,21551],{"class":145,"line":10641},[143,21552,3300],{"emptyLinePlaceholder":976},[143,21554,21555,21557],{"class":145,"line":10664},[143,21556,6533],{"class":156},[143,21558,6536],{"class":149},[143,21560,21561],{"class":145,"line":10688},[143,21562,3300],{"emptyLinePlaceholder":976},[143,21564,21565,21567,21569,21571],{"class":145,"line":10693},[143,21566,3203],{"class":156},[143,21568,1049],{"class":149},[143,21570,3208],{"class":163},[143,21572,3619],{"class":149},[143,21574,21575],{"class":145,"line":10698},[143,21576,3300],{"emptyLinePlaceholder":976},[143,21578,21579,21581,21583],{"class":145,"line":10703},[143,21580,4990],{"class":755},[143,21582,4993],{"class":280},[143,21584,290],{"class":149},[143,21586,21587],{"class":145,"line":10712},[143,21588,348],{"class":149},[58,21590,21592],{"id":21591},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[63,21594,21595],{},"浅拷贝：简单的赋值拷贝操作",[63,21597,21598],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[133,21600,21602],{"className":1037,"code":21601,"language":1039,"meta":138,"style":138},"#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",[140,21603,21604,21610,21620,21626,21630,21634,21639,21645,21649,21662,21666,21670,21677,21681,21691,21706,21719,21723,21728,21733,21749,21753,21766,21771,21776,21781,21790,21795,21810,21814,21818,21822,21828,21832,21837,21852,21856,21867,21881,21885,21894,21898,21904,21916,21920,21928,21932,21949,21980,21988,22016,22020,22024,22032,22036,22042],{"__ignoreMap":138},[143,21605,21606,21608],{"class":145,"line":146},[143,21607,2850],{"class":755},[143,21609,2853],{"class":163},[143,21611,21612,21614,21616,21618],{"class":145,"line":35},[143,21613,2858],{"class":755},[143,21615,2861],{"class":755},[143,21617,2864],{"class":156},[143,21619,290],{"class":149},[143,21621,21622,21624],{"class":145,"line":46},[143,21623,15593],{"class":755},[143,21625,16070],{"class":156},[143,21627,21628],{"class":145,"line":293},[143,21629,2449],{"class":149},[143,21631,21632],{"class":145,"line":306},[143,21633,15615],{"class":755},[143,21635,21636],{"class":145,"line":319},[143,21637,21638],{"class":266},"    \u002F\u002F默认构造函数\n",[143,21640,21641,21643],{"class":145,"line":332},[143,21642,19417],{"class":156},[143,21644,2876],{"class":149},[143,21646,21647],{"class":145,"line":345},[143,21648,2930],{"class":149},[143,21650,21651,21653,21655,21658,21660],{"class":145,"line":701},[143,21652,4351],{"class":149},[143,21654,2081],{"class":755},[143,21656,21657],{"class":163},"\"默认构造函数\"",[143,21659,2081],{"class":755},[143,21661,2103],{"class":149},[143,21663,21664],{"class":145,"line":707},[143,21665,3087],{"class":149},[143,21667,21668],{"class":145,"line":727},[143,21669,21241],{"class":266},[143,21671,21672,21674],{"class":145,"line":2518},[143,21673,19450],{"class":156},[143,21675,21676],{"class":149},"(int age,int height)\n",[143,21678,21679],{"class":145,"line":2524},[143,21680,2930],{"class":149},[143,21682,21683,21686,21688],{"class":145,"line":2529},[143,21684,21685],{"class":149},"        m_Age",[143,21687,160],{"class":755},[143,21689,21690],{"class":149},"age;\n",[143,21692,21693,21696,21698,21700,21703],{"class":145,"line":2543},[143,21694,21695],{"class":149},"        m_Height",[143,21697,12617],{"class":755},[143,21699,3282],{"class":755},[143,21701,21702],{"class":149},"(height);",[143,21704,21705],{"class":266},"\u002F\u002F放到堆区\n",[143,21707,21708,21710,21712,21715,21717],{"class":145,"line":2548},[143,21709,4351],{"class":149},[143,21711,2081],{"class":755},[143,21713,21714],{"class":163},"\"有参构造函数\"",[143,21716,2081],{"class":755},[143,21718,2103],{"class":149},[143,21720,21721],{"class":145,"line":2554},[143,21722,3087],{"class":149},[143,21724,21725],{"class":145,"line":2575},[143,21726,21727],{"class":266},"    \u002F\u002F深拷贝解决上述问题\n",[143,21729,21730],{"class":145,"line":2580},[143,21731,21732],{"class":266},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[143,21734,21735,21737,21739,21741,21743,21745,21747],{"class":145,"line":2594},[143,21736,19417],{"class":156},[143,21738,1049],{"class":149},[143,21740,7692],{"class":755},[143,21742,16468],{"class":156},[143,21744,11484],{"class":755},[143,21746,63],{"class":6116},[143,21748,1055],{"class":149},[143,21750,21751],{"class":145,"line":2599},[143,21752,2930],{"class":149},[143,21754,21755,21757,21759,21762,21764],{"class":145,"line":2628},[143,21756,4351],{"class":149},[143,21758,2081],{"class":755},[143,21760,21761],{"class":163},"\"拷贝构造函数\"",[143,21763,2081],{"class":755},[143,21765,2103],{"class":149},[143,21767,21768],{"class":145,"line":2633},[143,21769,21770],{"class":266},"        \u002F\u002F编译器默认的写如下注释部分\n",[143,21772,21773],{"class":145,"line":2650},[143,21774,21775],{"class":266},"        \u002F\u002Fm_Age=p.m_Age;\n",[143,21777,21778],{"class":145,"line":2655},[143,21779,21780],{"class":266},"        \u002F\u002Fm_Height=p.m_Height;\n",[143,21782,21783,21785,21787],{"class":145,"line":2660},[143,21784,21685],{"class":149},[143,21786,160],{"class":755},[143,21788,21789],{"class":149},"p.m_Age;\n",[143,21791,21792],{"class":145,"line":2665},[143,21793,21794],{"class":266},"        \u002F\u002F深拷贝操作\n",[143,21796,21797,21799,21801,21803,21805,21807],{"class":145,"line":2679},[143,21798,21695],{"class":149},[143,21800,12617],{"class":755},[143,21802,3282],{"class":755},[143,21804,1049],{"class":149},[143,21806,1496],{"class":755},[143,21808,21809],{"class":149},"p.m_Height);\n",[143,21811,21812],{"class":145,"line":2684},[143,21813,3087],{"class":149},[143,21815,21816],{"class":145,"line":3477},[143,21817,3300],{"emptyLinePlaceholder":976},[143,21819,21820],{"class":145,"line":3491},[143,21821,19445],{"class":266},[143,21823,21824,21826],{"class":145,"line":3499},[143,21825,19450],{"class":156},[143,21827,2876],{"class":149},[143,21829,21830],{"class":145,"line":3504},[143,21831,2930],{"class":149},[143,21833,21834],{"class":145,"line":3510},[143,21835,21836],{"class":266},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[143,21838,21839,21841,21844,21847,21850],{"class":145,"line":3516},[143,21840,3397],{"class":755},[143,21842,21843],{"class":149},"(m_Height ",[143,21845,21846],{"class":755},"!=",[143,21848,21849],{"class":280}," NULL",[143,21851,1055],{"class":149},[143,21853,21854],{"class":145,"line":3521},[143,21855,3410],{"class":149},[143,21857,21858,21861,21864],{"class":145,"line":8848},[143,21859,21860],{"class":755},"            delete",[143,21862,21863],{"class":149}," m_Height;",[143,21865,21866],{"class":266}," \u002F\u002F释放堆区内存\n",[143,21868,21869,21872,21874,21876,21878],{"class":145,"line":8872},[143,21870,21871],{"class":149},"            m_Height",[143,21873,160],{"class":755},[143,21875,3292],{"class":280},[143,21877,1101],{"class":149},[143,21879,21880],{"class":266}," \u002F\u002F防止野指针\n",[143,21882,21883],{"class":145,"line":8877},[143,21884,3429],{"class":149},[143,21886,21887,21889,21891],{"class":145,"line":8883},[143,21888,4351],{"class":149},[143,21890,2081],{"class":755},[143,21892,21893],{"class":163},"\"Person的析构函数调用\"\n",[143,21895,21896],{"class":145,"line":8910},[143,21897,3087],{"class":149},[143,21899,21900,21902],{"class":145,"line":8915},[143,21901,2885],{"class":755},[143,21903,16564],{"class":149},[143,21905,21906,21908,21910,21913],{"class":145,"line":8921},[143,21907,2885],{"class":755},[143,21909,7418],{"class":755},[143,21911,21912],{"class":149},"m_Height;",[143,21914,21915],{"class":266}," \u002F\u002F定义一个指针，指向身高\n",[143,21917,21918],{"class":145,"line":8933},[143,21919,4895],{"class":149},[143,21921,21922,21924,21926],{"class":145,"line":8945},[143,21923,6264],{"class":755},[143,21925,6488],{"class":156},[143,21927,2876],{"class":149},[143,21929,21930],{"class":145,"line":8957},[143,21931,2449],{"class":149},[143,21933,21934,21936,21938,21940,21942,21944,21947],{"class":145,"line":10616},[143,21935,20329],{"class":149},[143,21937,8030],{"class":156},[143,21939,1049],{"class":149},[143,21941,1691],{"class":280},[143,21943,1419],{"class":149},[143,21945,21946],{"class":280},"160",[143,21948,3619],{"class":149},[143,21950,21951,21953,21955,21958,21960,21963,21965,21968,21970,21973,21975,21977],{"class":145,"line":10641},[143,21952,2454],{"class":149},[143,21954,2081],{"class":755},[143,21956,21957],{"class":163},"\"p1的年龄为:\"",[143,21959,2081],{"class":755},[143,21961,21962],{"class":149},"p1.m_Age",[143,21964,2081],{"class":755},[143,21966,21967],{"class":163},"\"身高为：\"",[143,21969,7319],{"class":755},[143,21971,21972],{"class":149},"p1.m_Height",[143,21974,2081],{"class":755},[143,21976,2146],{"class":149},[143,21978,21979],{"class":266},"  \u002F\u002F18\n",[143,21981,21982,21984,21986],{"class":145,"line":10664},[143,21983,20329],{"class":149},[143,21985,7933],{"class":156},[143,21987,18413],{"class":149},[143,21989,21990,21992,21994,21997,21999,22001,22003,22005,22007,22010,22012,22014],{"class":145,"line":10688},[143,21991,2454],{"class":149},[143,21993,2081],{"class":755},[143,21995,21996],{"class":163},"\"p2的年龄为：\"",[143,21998,2081],{"class":755},[143,22000,20359],{"class":149},[143,22002,2081],{"class":755},[143,22004,21967],{"class":163},[143,22006,7319],{"class":755},[143,22008,22009],{"class":149},"p2.m_Height",[143,22011,2081],{"class":755},[143,22013,2146],{"class":149},[143,22015,21979],{"class":266},[143,22017,22018],{"class":145,"line":10693},[143,22019,14110],{"class":149},[143,22021,22022],{"class":145,"line":10698},[143,22023,348],{"class":149},[143,22025,22026,22028,22030],{"class":145,"line":10703},[143,22027,1052],{"class":755},[143,22029,2873],{"class":156},[143,22031,2876],{"class":149},[143,22033,22034],{"class":145,"line":10712},[143,22035,2449],{"class":149},[143,22037,22038,22040],{"class":145,"line":10717},[143,22039,6533],{"class":156},[143,22041,6536],{"class":149},[143,22043,22044],{"class":145,"line":10723},[143,22045,348],{"class":149},[63,22047,22048],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[63,22050,22051],{},"浅拷贝带来的问题是堆区的内存重复释放",[63,22053,22054],{},[29,22055],{"alt":138,"src":22056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[63,22058,22059],{},"浅拷贝问题要使用深拷贝来解决",[63,22061,22062],{},[29,22063],{"alt":138,"src":22064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[63,22066,22067],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[58,22069,22071],{"id":22070},"_826初始化列表","8.2.6初始化列表",[63,22073,22074],{},"作用：初始化属性",[63,22076,6081],{},[133,22078,22081],{"className":22079,"code":22080,"language":6087},[6085],"构造函数():属性1(值1),属性2(值2).....{}\n",[140,22082,22080],{"__ignoreMap":138},[63,22084,22085],{},"例子",[133,22087,22089],{"className":1037,"code":22088,"language":1039,"meta":138,"style":138},"#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",[140,22090,22091,22097,22107,22113,22117,22122,22126,22131,22136,22141,22146,22151,22156,22160,22165,22170,22213,22222,22240,22258,22276,22280,22284,22291,22298,22305,22309,22313,22321,22325,22329,22349,22358,22362,22366,22376,22380,22388],{"__ignoreMap":138},[143,22092,22093,22095],{"class":145,"line":146},[143,22094,2850],{"class":755},[143,22096,2853],{"class":163},[143,22098,22099,22101,22103,22105],{"class":145,"line":35},[143,22100,2858],{"class":755},[143,22102,2861],{"class":755},[143,22104,2864],{"class":156},[143,22106,290],{"class":149},[143,22108,22109,22111],{"class":145,"line":46},[143,22110,15593],{"class":755},[143,22112,16070],{"class":156},[143,22114,22115],{"class":145,"line":293},[143,22116,2449],{"class":149},[143,22118,22119],{"class":145,"line":306},[143,22120,22121],{"class":755},"    public:\n",[143,22123,22124],{"class":145,"line":319},[143,22125,3300],{"emptyLinePlaceholder":976},[143,22127,22128],{"class":145,"line":332},[143,22129,22130],{"class":266},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[143,22132,22133],{"class":145,"line":345},[143,22134,22135],{"class":266},"    \u002F\u002FPerson(int a, int b, int c) {\n",[143,22137,22138],{"class":145,"line":701},[143,22139,22140],{"class":266},"    \u002F\u002F  m_A = a;\n",[143,22142,22143],{"class":145,"line":707},[143,22144,22145],{"class":266},"    \u002F\u002F  m_B = b;\n",[143,22147,22148],{"class":145,"line":727},[143,22149,22150],{"class":266},"    \u002F\u002F  m_C = c;\n",[143,22152,22153],{"class":145,"line":2518},[143,22154,22155],{"class":266},"    \u002F\u002F}\n",[143,22157,22158],{"class":145,"line":2524},[143,22159,3300],{"emptyLinePlaceholder":976},[143,22161,22162],{"class":145,"line":2529},[143,22163,22164],{"class":266},"    \u002F\u002F初始化列表方式初始化\n",[143,22166,22167],{"class":145,"line":2543},[143,22168,22169],{"class":266},"    \u002F\u002F使用有参构造函数\n",[143,22171,22172,22174,22176,22178,22180,22182,22184,22186,22188,22190,22192,22195,22198,22201,22204,22207,22210],{"class":145,"line":2548},[143,22173,19417],{"class":156},[143,22175,1049],{"class":149},[143,22177,1052],{"class":755},[143,22179,2302],{"class":6116},[143,22181,13335],{"class":149},[143,22183,1052],{"class":755},[143,22185,3733],{"class":6116},[143,22187,13335],{"class":149},[143,22189,1052],{"class":755},[143,22191,3749],{"class":6116},[143,22193,22194],{"class":149},") :",[143,22196,22197],{"class":156},"m_A",[143,22199,22200],{"class":149},"(a), ",[143,22202,22203],{"class":156},"m_B",[143,22205,22206],{"class":149},"(b), ",[143,22208,22209],{"class":156},"m_C",[143,22211,22212],{"class":149},"(c) {}\n",[143,22214,22215,22217,22220],{"class":145,"line":2554},[143,22216,15808],{"class":755},[143,22218,22219],{"class":156}," PrintPerson",[143,22221,11753],{"class":149},[143,22223,22224,22226,22228,22231,22233,22236,22238],{"class":145,"line":2575},[143,22225,10569],{"class":149},[143,22227,2081],{"class":755},[143,22229,22230],{"class":163}," \"mA:\"",[143,22232,2348],{"class":755},[143,22234,22235],{"class":149}," m_A ",[143,22237,2081],{"class":755},[143,22239,9740],{"class":149},[143,22241,22242,22244,22246,22249,22251,22254,22256],{"class":145,"line":2580},[143,22243,10569],{"class":149},[143,22245,2081],{"class":755},[143,22247,22248],{"class":163}," \"mB:\"",[143,22250,2348],{"class":755},[143,22252,22253],{"class":149}," m_B ",[143,22255,2081],{"class":755},[143,22257,9740],{"class":149},[143,22259,22260,22262,22264,22267,22269,22272,22274],{"class":145,"line":2594},[143,22261,10569],{"class":149},[143,22263,2081],{"class":755},[143,22265,22266],{"class":163}," \"mC:\"",[143,22268,2348],{"class":755},[143,22270,22271],{"class":149}," m_C ",[143,22273,2081],{"class":755},[143,22275,9740],{"class":149},[143,22277,22278],{"class":145,"line":2599},[143,22279,3087],{"class":149},[143,22281,22282],{"class":145,"line":2628},[143,22283,16121],{"class":755},[143,22285,22286,22288],{"class":145,"line":2633},[143,22287,2885],{"class":755},[143,22289,22290],{"class":149}," m_A;\n",[143,22292,22293,22295],{"class":145,"line":2650},[143,22294,2885],{"class":755},[143,22296,22297],{"class":149}," m_B;\n",[143,22299,22300,22302],{"class":145,"line":2655},[143,22301,2885],{"class":755},[143,22303,22304],{"class":149}," m_C;\n",[143,22306,22307],{"class":145,"line":2660},[143,22308,4895],{"class":149},[143,22310,22311],{"class":145,"line":2665},[143,22312,3300],{"emptyLinePlaceholder":976},[143,22314,22315,22317,22319],{"class":145,"line":2679},[143,22316,1052],{"class":755},[143,22318,2873],{"class":156},[143,22320,6878],{"class":149},[143,22322,22323],{"class":145,"line":2684},[143,22324,2449],{"class":149},[143,22326,22327],{"class":145,"line":3477},[143,22328,3300],{"emptyLinePlaceholder":976},[143,22330,22331,22333,22335,22337,22339,22341,22343,22345,22347],{"class":145,"line":3491},[143,22332,20329],{"class":149},[143,22334,63],{"class":156},[143,22336,1049],{"class":149},[143,22338,771],{"class":280},[143,22340,13335],{"class":149},[143,22342,1122],{"class":280},[143,22344,13335],{"class":149},[143,22346,1116],{"class":280},[143,22348,3619],{"class":149},[143,22350,22351,22353,22356],{"class":145,"line":3499},[143,22352,16764],{"class":149},[143,22354,22355],{"class":156},"PrintPerson",[143,22357,6536],{"class":149},[143,22359,22360],{"class":145,"line":3504},[143,22361,3300],{"emptyLinePlaceholder":976},[143,22363,22364],{"class":145,"line":3510},[143,22365,3300],{"emptyLinePlaceholder":976},[143,22367,22368,22370,22372,22374],{"class":145,"line":3516},[143,22369,3203],{"class":156},[143,22371,1049],{"class":149},[143,22373,3208],{"class":163},[143,22375,3619],{"class":149},[143,22377,22378],{"class":145,"line":3521},[143,22379,3300],{"emptyLinePlaceholder":976},[143,22381,22382,22384,22386],{"class":145,"line":8848},[143,22383,4990],{"class":755},[143,22385,4993],{"class":280},[143,22387,290],{"class":149},[143,22389,22390],{"class":145,"line":8872},[143,22391,348],{"class":149},[63,22393,22394,22395,22398,22399],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[25,22396,22397],{},"参数名就是定义的对象属性","，",[25,22400,22401],{},"属性后面的值为有参构造函数的形参",[133,22403,22405],{"className":1037,"code":22404,"language":1039,"meta":138,"style":138},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[140,22406,22407],{"__ignoreMap":138},[143,22408,22409,22411,22413,22415,22418,22420,22423,22425,22428,22430,22433,22435,22438,22440],{"class":145,"line":146},[143,22410,19944],{"class":156},[143,22412,1049],{"class":149},[143,22414,1052],{"class":755},[143,22416,22417],{"class":149}," a.",[143,22419,1052],{"class":755},[143,22421,22422],{"class":149}," b,",[143,22424,1052],{"class":755},[143,22426,22427],{"class":149}," b):",[143,22429,22197],{"class":156},[143,22431,22432],{"class":149},"(a),",[143,22434,22203],{"class":156},[143,22436,22437],{"class":149},"(c),",[143,22439,22209],{"class":156},[143,22441,22442],{"class":149},"(b) {}\n",[58,22444,22446],{"id":22445},"_827类对象作为类成员","8.2.7类对象作为类成员",[63,22448,22449],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[63,22451,15532],{},[133,22453,22455],{"className":1037,"code":22454,"language":1039,"meta":138,"style":138},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[140,22456,22457,22462,22467,22471,22476,22480],{"__ignoreMap":138},[143,22458,22459],{"class":145,"line":146},[143,22460,22461],{"class":149},"A{};\n",[143,22463,22464],{"class":145,"line":35},[143,22465,22466],{"class":149},"B\n",[143,22468,22469],{"class":145,"line":46},[143,22470,2449],{"class":149},[143,22472,22473],{"class":145,"line":293},[143,22474,22475],{"class":149},"    A a;\n",[143,22477,22478],{"class":145,"line":306},[143,22479,348],{"class":149},[143,22481,22482],{"class":145,"line":319},[143,22483,22484],{"class":266},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[63,22486,22487],{},"案例",[133,22489,22491],{"className":1037,"code":22490,"language":1039,"meta":138,"style":138},"\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",[140,22492,22493,22498,22505,22509,22514,22519,22533,22537,22547,22558,22562,22569,22573,22586,22590,22595,22600,22604,22610,22614,22618,22622,22653,22657,22668,22672,22678,22682,22695,22699,22703,22707,22712,22717,22721,22729,22733,22750,22769,22773,22781,22785,22791],{"__ignoreMap":138},[143,22494,22495],{"class":145,"line":146},[143,22496,22497],{"class":266},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[143,22499,22500,22502],{"class":145,"line":35},[143,22501,15593],{"class":755},[143,22503,22504],{"class":156}," Phone\n",[143,22506,22507],{"class":145,"line":46},[143,22508,2449],{"class":149},[143,22510,22511],{"class":145,"line":293},[143,22512,22513],{"class":149},"public：\n",[143,22515,22516],{"class":145,"line":306},[143,22517,22518],{"class":266},"    \u002F\u002F 赋值(构造函数)\n",[143,22520,22521,22524,22526,22528,22531],{"class":145,"line":319},[143,22522,22523],{"class":156},"    Phone",[143,22525,1049],{"class":149},[143,22527,15816],{"class":156},[143,22529,22530],{"class":6116}," pName",[143,22532,1055],{"class":149},[143,22534,22535],{"class":145,"line":332},[143,22536,2930],{"class":149},[143,22538,22539,22542,22544],{"class":145,"line":345},[143,22540,22541],{"class":149},"        m_pName",[143,22543,160],{"class":755},[143,22545,22546],{"class":149},"pName;\n",[143,22548,22549,22551,22553,22556],{"class":145,"line":701},[143,22550,4351],{"class":149},[143,22552,2081],{"class":755},[143,22554,22555],{"class":163},"\"Phone的构造函数调用\"",[143,22557,290],{"class":149},[143,22559,22560],{"class":145,"line":707},[143,22561,3087],{"class":149},[143,22563,22564,22567],{"class":145,"line":727},[143,22565,22566],{"class":156},"    ~Phone",[143,22568,2876],{"class":149},[143,22570,22571],{"class":145,"line":2518},[143,22572,2930],{"class":149},[143,22574,22575,22577,22579,22582,22584],{"class":145,"line":2524},[143,22576,4351],{"class":149},[143,22578,2081],{"class":755},[143,22580,22581],{"class":163},"\"Phone析构函数调用\"",[143,22583,2081],{"class":755},[143,22585,2103],{"class":149},[143,22587,22588],{"class":145,"line":2529},[143,22589,3087],{"class":149},[143,22591,22592],{"class":145,"line":2543},[143,22593,22594],{"class":266},"    \u002F\u002F\n",[143,22596,22597],{"class":145,"line":2548},[143,22598,22599],{"class":149},"    string m_PName;\n",[143,22601,22602],{"class":145,"line":2554},[143,22603,4895],{"class":149},[143,22605,22606,22608],{"class":145,"line":2575},[143,22607,15593],{"class":755},[143,22609,16070],{"class":156},[143,22611,22612],{"class":145,"line":2580},[143,22613,2449],{"class":149},[143,22615,22616],{"class":145,"line":2594},[143,22617,15615],{"class":755},[143,22619,22620],{"class":145,"line":2599},[143,22621,17892],{"class":266},[143,22623,22624,22626,22628,22630,22632,22634,22636,22639,22642,22644,22647,22650],{"class":145,"line":2628},[143,22625,19417],{"class":156},[143,22627,1049],{"class":149},[143,22629,15816],{"class":156},[143,22631,15819],{"class":6116},[143,22633,1419],{"class":149},[143,22635,15816],{"class":156},[143,22637,22638],{"class":6116}," pname",[143,22640,22641],{"class":149},"):",[143,22643,15909],{"class":156},[143,22645,22646],{"class":149},"(name),m_phone.",[143,22648,22649],{"class":156},"m_PName",[143,22651,22652],{"class":149},"(pname) \n",[143,22654,22655],{"class":145,"line":2633},[143,22656,2930],{"class":149},[143,22658,22659,22661,22663,22666],{"class":145,"line":2650},[143,22660,4351],{"class":149},[143,22662,2081],{"class":755},[143,22664,22665],{"class":163},"\"Person的构造函数调用\"",[143,22667,290],{"class":149},[143,22669,22670],{"class":145,"line":2655},[143,22671,3087],{"class":149},[143,22673,22674,22676],{"class":145,"line":2660},[143,22675,19450],{"class":156},[143,22677,2876],{"class":149},[143,22679,22680],{"class":145,"line":2665},[143,22681,2930],{"class":149},[143,22683,22684,22686,22688,22691,22693],{"class":145,"line":2679},[143,22685,4351],{"class":149},[143,22687,2081],{"class":755},[143,22689,22690],{"class":163},"\"Person析构函数调用\"",[143,22692,2081],{"class":755},[143,22694,2103],{"class":149},[143,22696,22697],{"class":145,"line":2684},[143,22698,3087],{"class":149},[143,22700,22701],{"class":145,"line":3477},[143,22702,8680],{"class":266},[143,22704,22705],{"class":145,"line":3491},[143,22706,15791],{"class":149},[143,22708,22709],{"class":145,"line":3499},[143,22710,22711],{"class":266},"    \u002F\u002F手机\n",[143,22713,22714],{"class":145,"line":3504},[143,22715,22716],{"class":149},"    Phone m_Phone;\n",[143,22718,22719],{"class":145,"line":3510},[143,22720,4895],{"class":149},[143,22722,22723,22725,22727],{"class":145,"line":3516},[143,22724,6264],{"class":755},[143,22726,6488],{"class":156},[143,22728,2876],{"class":149},[143,22730,22731],{"class":145,"line":3521},[143,22732,2449],{"class":149},[143,22734,22735,22737,22739,22741,22743,22745,22748],{"class":145,"line":8848},[143,22736,20329],{"class":149},[143,22738,63],{"class":156},[143,22740,1049],{"class":149},[143,22742,8816],{"class":163},[143,22744,1419],{"class":149},[143,22746,22747],{"class":163},"\"安卓\"",[143,22749,3619],{"class":149},[143,22751,22752,22754,22756,22759,22761,22764,22766],{"class":145,"line":8872},[143,22753,2454],{"class":149},[143,22755,2081],{"class":755},[143,22757,22758],{"class":149},"p.Name",[143,22760,2081],{"class":755},[143,22762,22763],{"class":163},"\"拿着：\"",[143,22765,2081],{"class":755},[143,22767,22768],{"class":149},"p.m_phone.m_PName;\n",[143,22770,22771],{"class":145,"line":8877},[143,22772,348],{"class":149},[143,22774,22775,22777,22779],{"class":145,"line":8883},[143,22776,1052],{"class":755},[143,22778,2873],{"class":156},[143,22780,2876],{"class":149},[143,22782,22783],{"class":145,"line":8910},[143,22784,2449],{"class":149},[143,22786,22787,22789],{"class":145,"line":8915},[143,22788,6533],{"class":156},[143,22790,6536],{"class":149},[143,22792,22793],{"class":145,"line":8921},[143,22794,348],{"class":149},[63,22796,9925],{},[133,22798,22800],{"className":1037,"code":22799,"language":1039,"meta":138,"style":138},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[140,22801,22802,22807],{"__ignoreMap":138},[143,22803,22804],{"class":145,"line":146},[143,22805,22806],{"class":266},"    \u002F\u002F不需要写这个：\n",[143,22808,22809],{"class":145,"line":35},[143,22810,22811],{"class":266},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[63,22813,22814],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[133,22816,22818],{"className":1037,"code":22817,"language":1039,"meta":138,"style":138},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[140,22819,22820],{"__ignoreMap":138},[143,22821,22822,22824,22827,22829,22832,22835],{"class":145,"line":146},[143,22823,19944],{"class":156},[143,22825,22826],{"class":149},"(string name.string pname):",[143,22828,15909],{"class":156},[143,22830,22831],{"class":149},"(name),",[143,22833,22834],{"class":156},"m_phone",[143,22836,22837],{"class":149},"(pname) {}\n",[63,22839,22840,22841,160,22844],{},"采用的是隐式转换法，实际为如下：\n",[140,22842,22843],{},"m_phone(pname)",[140,22845,22846],{},"Phone m_phone=pname",[63,22848,22849,22852],{},[25,22850,22851],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[63,22854,22855],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[58,22857,22859],{"id":22858},"_828静态对象","8.2.8静态对象",[63,22861,22862],{},"静态对象在成员对象前static，称为静态对象",[63,22864,22865],{},"静态对象分为两类：",[19,22867,22868],{},[22,22869,22870],{},"静态成员变量",[232,22872,22873,22876,22879],{},[22,22874,22875],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[22,22877,22878],{},"②在编译阶段分配内存",[22,22880,22881],{},"③类内声明，类外初始化",[19,22883,22884],{"start":35},[22,22885,22886],{},"静态成员函数",[232,22888,22889,22892],{},[22,22890,22891],{},"①所有对象共享同一个函数",[22,22893,22894],{},"②静态成员函数只能访问静态成员变量",[22896,22897,22899],"h4",{"id":22898},"_8281静态成员变量","8.2.8.1静态成员变量",[133,22901,22903],{"className":1037,"code":22902,"language":1039,"meta":138,"style":138},"#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",[140,22904,22905,22911,22921,22927,22931,22935,22940,22945,22950,22958,22962,22966,22970,22978,22982,22986,22991,23004,23008,23016,23020,23026],{"__ignoreMap":138},[143,22906,22907,22909],{"class":145,"line":146},[143,22908,2850],{"class":755},[143,22910,2853],{"class":163},[143,22912,22913,22915,22917,22919],{"class":145,"line":35},[143,22914,2858],{"class":755},[143,22916,2861],{"class":755},[143,22918,2864],{"class":156},[143,22920,290],{"class":149},[143,22922,22923,22925],{"class":145,"line":46},[143,22924,15593],{"class":755},[143,22926,16070],{"class":156},[143,22928,22929],{"class":145,"line":293},[143,22930,2449],{"class":149},[143,22932,22933],{"class":145,"line":306},[143,22934,15615],{"class":755},[143,22936,22937],{"class":145,"line":319},[143,22938,22939],{"class":266},"    \u002F\u002F非静态成员变量\n",[143,22941,22942],{"class":145,"line":332},[143,22943,22944],{"class":266},"    \u002F\u002F int m_A;\n",[143,22946,22947],{"class":145,"line":345},[143,22948,22949],{"class":266},"    \u002F\u002F定义静态成员变量\n",[143,22951,22952,22954,22956],{"class":145,"line":701},[143,22953,11920],{"class":755},[143,22955,3282],{"class":755},[143,22957,22290],{"class":149},[143,22959,22960],{"class":145,"line":707},[143,22961,3300],{"emptyLinePlaceholder":976},[143,22963,22964],{"class":145,"line":727},[143,22965,3300],{"emptyLinePlaceholder":976},[143,22967,22968],{"class":145,"line":2518},[143,22969,4895],{"class":149},[143,22971,22972,22974,22976],{"class":145,"line":2524},[143,22973,6264],{"class":755},[143,22975,6488],{"class":156},[143,22977,2876],{"class":149},[143,22979,22980],{"class":145,"line":2529},[143,22981,2449],{"class":149},[143,22983,22984],{"class":145,"line":2543},[143,22985,16212],{"class":149},[143,22987,22988],{"class":145,"line":2548},[143,22989,22990],{"class":266},"    \u002F\u002F输出类成员变量这块内存\n",[143,22992,22993,22995,22997,23000,23002],{"class":145,"line":2554},[143,22994,2454],{"class":149},[143,22996,2081],{"class":755},[143,22998,22999],{"class":149},"p.m_A",[143,23001,2081],{"class":755},[143,23003,2103],{"class":149},[143,23005,23006],{"class":145,"line":2575},[143,23007,348],{"class":149},[143,23009,23010,23012,23014],{"class":145,"line":2580},[143,23011,1052],{"class":755},[143,23013,2873],{"class":156},[143,23015,2876],{"class":149},[143,23017,23018],{"class":145,"line":2594},[143,23019,2449],{"class":149},[143,23021,23022,23024],{"class":145,"line":2599},[143,23023,6533],{"class":156},[143,23025,2876],{"class":149},[143,23027,23028],{"class":145,"line":2628},[143,23029,348],{"class":149},[63,23031,23032],{},"此时输出是报错的：无法解析外部命令",[63,23034,23035],{},"解决这一问题：必须用到类内声明，类外初始化操作",[133,23037,23039],{"className":1037,"code":23038,"language":1039,"meta":138,"style":138},"#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",[140,23040,23041,23047,23057,23063,23067,23071,23076,23084,23088,23093,23108,23116,23120,23124,23129,23134,23146,23151,23162,23167,23172,23185,23189,23197,23201,23207],{"__ignoreMap":138},[143,23042,23043,23045],{"class":145,"line":146},[143,23044,2850],{"class":755},[143,23046,2853],{"class":163},[143,23048,23049,23051,23053,23055],{"class":145,"line":35},[143,23050,2858],{"class":755},[143,23052,2861],{"class":755},[143,23054,2864],{"class":156},[143,23056,290],{"class":149},[143,23058,23059,23061],{"class":145,"line":46},[143,23060,15593],{"class":755},[143,23062,16070],{"class":156},[143,23064,23065],{"class":145,"line":293},[143,23066,2449],{"class":149},[143,23068,23069],{"class":145,"line":306},[143,23070,15615],{"class":755},[143,23072,23073],{"class":145,"line":319},[143,23074,23075],{"class":266},"    \u002F\u002F类内声明\n",[143,23077,23078,23080,23082],{"class":145,"line":332},[143,23079,11920],{"class":755},[143,23081,3282],{"class":755},[143,23083,22290],{"class":149},[143,23085,23086],{"class":145,"line":345},[143,23087,4895],{"class":149},[143,23089,23090],{"class":145,"line":701},[143,23091,23092],{"class":266},"\u002F\u002F类外初始化\n",[143,23094,23095,23097,23099,23102,23104,23106],{"class":145,"line":707},[143,23096,1052],{"class":755},[143,23098,16468],{"class":156},[143,23100,23101],{"class":149},"::m_A",[143,23103,160],{"class":755},[143,23105,1487],{"class":280},[143,23107,290],{"class":149},[143,23109,23110,23112,23114],{"class":145,"line":727},[143,23111,6264],{"class":755},[143,23113,6488],{"class":156},[143,23115,2876],{"class":149},[143,23117,23118],{"class":145,"line":2518},[143,23119,2449],{"class":149},[143,23121,23122],{"class":145,"line":2524},[143,23123,16212],{"class":149},[143,23125,23126],{"class":145,"line":2529},[143,23127,23128],{"class":266},"    \u002F\u002F访问变量的原内存空间\n",[143,23130,23131],{"class":145,"line":2543},[143,23132,23133],{"class":266},"    \u002F\u002F100\n",[143,23135,23136,23138,23140,23142,23144],{"class":145,"line":2548},[143,23137,2454],{"class":149},[143,23139,2081],{"class":755},[143,23141,22999],{"class":149},[143,23143,2081],{"class":755},[143,23145,2103],{"class":149},[143,23147,23148],{"class":145,"line":2554},[143,23149,23150],{"class":149},"    Person p2;\n",[143,23152,23153,23156,23158,23160],{"class":145,"line":2575},[143,23154,23155],{"class":149},"    p2.m_A",[143,23157,160],{"class":755},[143,23159,2623],{"class":280},[143,23161,290],{"class":149},[143,23163,23164],{"class":145,"line":2580},[143,23165,23166],{"class":266},"    \u002F\u002F继续访问这片空间\n",[143,23168,23169],{"class":145,"line":2594},[143,23170,23171],{"class":266},"    \u002F\u002F200\n",[143,23173,23174,23176,23178,23181,23183],{"class":145,"line":2599},[143,23175,2454],{"class":149},[143,23177,2081],{"class":755},[143,23179,23180],{"class":149},"p2.m_A",[143,23182,2081],{"class":755},[143,23184,2103],{"class":149},[143,23186,23187],{"class":145,"line":2628},[143,23188,348],{"class":149},[143,23190,23191,23193,23195],{"class":145,"line":2633},[143,23192,1052],{"class":755},[143,23194,2873],{"class":156},[143,23196,2876],{"class":149},[143,23198,23199],{"class":145,"line":2650},[143,23200,2449],{"class":149},[143,23202,23203,23205],{"class":145,"line":2655},[143,23204,6533],{"class":156},[143,23206,6536],{"class":149},[143,23208,23209],{"class":145,"line":2660},[143,23210,348],{"class":149},[63,23212,23213],{},[25,23214,23215],{},"静态变量的访问",[133,23217,23219],{"className":1037,"code":23218,"language":1039,"meta":138,"style":138},"#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",[140,23220,23221,23227,23237,23243,23247,23251,23255,23263,23267,23272,23280,23284,23288,23302,23317,23325,23329,23334,23339,23344,23349,23361,23366,23371,23385,23402,23406,23414,23418,23424],{"__ignoreMap":138},[143,23222,23223,23225],{"class":145,"line":146},[143,23224,2850],{"class":755},[143,23226,2853],{"class":163},[143,23228,23229,23231,23233,23235],{"class":145,"line":35},[143,23230,2858],{"class":755},[143,23232,2861],{"class":755},[143,23234,2864],{"class":156},[143,23236,290],{"class":149},[143,23238,23239,23241],{"class":145,"line":46},[143,23240,15593],{"class":755},[143,23242,16070],{"class":156},[143,23244,23245],{"class":145,"line":293},[143,23246,2449],{"class":149},[143,23248,23249],{"class":145,"line":306},[143,23250,15615],{"class":755},[143,23252,23253],{"class":145,"line":319},[143,23254,23075],{"class":266},[143,23256,23257,23259,23261],{"class":145,"line":332},[143,23258,11920],{"class":755},[143,23260,3282],{"class":755},[143,23262,22290],{"class":149},[143,23264,23265],{"class":145,"line":345},[143,23266,16121],{"class":755},[143,23268,23269],{"class":145,"line":701},[143,23270,23271],{"class":266},"    \u002F\u002F静态成员变量也是有访问权限的\n",[143,23273,23274,23276,23278],{"class":145,"line":707},[143,23275,11920],{"class":755},[143,23277,3282],{"class":755},[143,23279,22297],{"class":149},[143,23281,23282],{"class":145,"line":727},[143,23283,4895],{"class":149},[143,23285,23286],{"class":145,"line":2518},[143,23287,23092],{"class":266},[143,23289,23290,23292,23294,23296,23298,23300],{"class":145,"line":2524},[143,23291,1052],{"class":755},[143,23293,16468],{"class":156},[143,23295,23101],{"class":149},[143,23297,160],{"class":755},[143,23299,1487],{"class":280},[143,23301,290],{"class":149},[143,23303,23304,23306,23308,23311,23313,23315],{"class":145,"line":2529},[143,23305,1052],{"class":755},[143,23307,16468],{"class":156},[143,23309,23310],{"class":149},"::m_B",[143,23312,160],{"class":755},[143,23314,1741],{"class":280},[143,23316,290],{"class":149},[143,23318,23319,23321,23323],{"class":145,"line":2543},[143,23320,6264],{"class":755},[143,23322,6557],{"class":156},[143,23324,2876],{"class":149},[143,23326,23327],{"class":145,"line":2548},[143,23328,2449],{"class":149},[143,23330,23331],{"class":145,"line":2554},[143,23332,23333],{"class":266},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[143,23335,23336],{"class":145,"line":2575},[143,23337,23338],{"class":266},"    \u002F\u002F静态成员变量有两种访问方式：\n",[143,23340,23341],{"class":145,"line":2580},[143,23342,23343],{"class":266},"    \u002F\u002F1.通过对象进行访问\n",[143,23345,23346],{"class":145,"line":2594},[143,23347,23348],{"class":149},"    Person p;  \n",[143,23350,23351,23353,23355,23357,23359],{"class":145,"line":2599},[143,23352,2454],{"class":149},[143,23354,2081],{"class":755},[143,23356,22999],{"class":149},[143,23358,2081],{"class":755},[143,23360,2103],{"class":149},[143,23362,23363],{"class":145,"line":2628},[143,23364,23365],{"class":266},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[143,23367,23368],{"class":145,"line":2633},[143,23369,23370],{"class":266},"    \u002F\u002F2.通过类名进行访问\n",[143,23372,23373,23375,23377,23379,23381,23383],{"class":145,"line":2650},[143,23374,2454],{"class":149},[143,23376,2081],{"class":755},[143,23378,19944],{"class":156},[143,23380,23101],{"class":149},[143,23382,2081],{"class":755},[143,23384,2103],{"class":149},[143,23386,23387,23389,23391,23393,23395,23397,23399],{"class":145,"line":2655},[143,23388,2454],{"class":149},[143,23390,2081],{"class":755},[143,23392,19944],{"class":156},[143,23394,23310],{"class":149},[143,23396,2081],{"class":755},[143,23398,2146],{"class":149},[143,23400,23401],{"class":266}," \u002F\u002F没有访问权限，报错\n",[143,23403,23404],{"class":145,"line":2660},[143,23405,348],{"class":149},[143,23407,23408,23410,23412],{"class":145,"line":2665},[143,23409,1052],{"class":755},[143,23411,2873],{"class":156},[143,23413,2876],{"class":149},[143,23415,23416],{"class":145,"line":2679},[143,23417,2449],{"class":149},[143,23419,23420,23422],{"class":145,"line":2684},[143,23421,6602],{"class":156},[143,23423,6536],{"class":149},[143,23425,23426],{"class":145,"line":3477},[143,23427,348],{"class":149},[22896,23429,23431],{"id":23430},"_8282静态成员函数","8.2.8.2静态成员函数",[63,23433,23434],{},"1.静态成员函数定义与访问",[133,23436,23438],{"className":1037,"code":23437,"language":1039,"meta":138,"style":138},"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",[140,23439,23440,23446,23450,23454,23459,23470,23474,23488,23492,23496,23504,23508,23513,23518,23522,23530,23535,23545],{"__ignoreMap":138},[143,23441,23442,23444],{"class":145,"line":146},[143,23443,15593],{"class":755},[143,23445,16070],{"class":156},[143,23447,23448],{"class":145,"line":35},[143,23449,2449],{"class":149},[143,23451,23452],{"class":145,"line":46},[143,23453,15615],{"class":755},[143,23455,23456],{"class":145,"line":293},[143,23457,23458],{"class":266},"    \u002F\u002F在公共权限下定义静态成员函数\n",[143,23460,23461,23463,23466,23468],{"class":145,"line":306},[143,23462,11920],{"class":755},[143,23464,23465],{"class":755}," void",[143,23467,12285],{"class":156},[143,23469,2876],{"class":149},[143,23471,23472],{"class":145,"line":319},[143,23473,2930],{"class":149},[143,23475,23476,23479,23481,23484,23486],{"class":145,"line":332},[143,23477,23478],{"class":149},"        coout",[143,23480,2081],{"class":755},[143,23482,23483],{"class":163},"\"静态成员函数的调用\"",[143,23485,2081],{"class":755},[143,23487,2103],{"class":149},[143,23489,23490],{"class":145,"line":345},[143,23491,3087],{"class":149},[143,23493,23494],{"class":145,"line":701},[143,23495,4895],{"class":149},[143,23497,23498,23500,23502],{"class":145,"line":707},[143,23499,6264],{"class":755},[143,23501,6488],{"class":156},[143,23503,2876],{"class":149},[143,23505,23506],{"class":145,"line":727},[143,23507,2449],{"class":149},[143,23509,23510],{"class":145,"line":2518},[143,23511,23512],{"class":266},"    \u002F\u002F静态成员函数的调用方式:\n",[143,23514,23515],{"class":145,"line":2524},[143,23516,23517],{"class":266},"    \u002F\u002F1.通过对象访问\n",[143,23519,23520],{"class":145,"line":2529},[143,23521,16212],{"class":149},[143,23523,23524,23526,23528],{"class":145,"line":2543},[143,23525,16764],{"class":149},[143,23527,12451],{"class":156},[143,23529,6536],{"class":149},[143,23531,23532],{"class":145,"line":2548},[143,23533,23534],{"class":266},"    \u002F\u002F2.通过类名访问\n",[143,23536,23537,23539,23541,23543],{"class":145,"line":2554},[143,23538,19417],{"class":156},[143,23540,18630],{"class":149},[143,23542,12451],{"class":156},[143,23544,6536],{"class":149},[143,23546,23547],{"class":145,"line":2575},[143,23548,348],{"class":149},[19,23550,23551],{"start":35},[22,23552,23553],{},"静态成员函数只能访问静态成员变量",[133,23555,23557],{"className":1037,"code":23556,"language":1039,"meta":138,"style":138},"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",[140,23558,23559,23565,23569,23573,23577,23587,23591,23605,23610,23622,23626,23637,23647,23651,23655,23659,23669,23673,23686,23690,23694,23698,23702,23716,23724,23728,23732,23736,23740,23748,23752,23762,23767,23771,23779,23783,23789],{"__ignoreMap":138},[143,23560,23561,23563],{"class":145,"line":146},[143,23562,15593],{"class":755},[143,23564,16070],{"class":156},[143,23566,23567],{"class":145,"line":35},[143,23568,2449],{"class":149},[143,23570,23571],{"class":145,"line":46},[143,23572,15615],{"class":755},[143,23574,23575],{"class":145,"line":293},[143,23576,23458],{"class":266},[143,23578,23579,23581,23583,23585],{"class":145,"line":306},[143,23580,11920],{"class":755},[143,23582,23465],{"class":755},[143,23584,12285],{"class":156},[143,23586,2876],{"class":149},[143,23588,23589],{"class":145,"line":319},[143,23590,2930],{"class":149},[143,23592,23593,23596,23598,23600,23602],{"class":145,"line":332},[143,23594,23595],{"class":149},"        m_A",[143,23597,160],{"class":755},[143,23599,1352],{"class":280},[143,23601,1101],{"class":149},[143,23603,23604],{"class":266}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[143,23606,23607],{"class":145,"line":345},[143,23608,23609],{"class":266},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[143,23611,23612,23614,23616,23618,23620],{"class":145,"line":701},[143,23613,23478],{"class":149},[143,23615,2081],{"class":755},[143,23617,23483],{"class":163},[143,23619,2081],{"class":755},[143,23621,2103],{"class":149},[143,23623,23624],{"class":145,"line":707},[143,23625,3087],{"class":149},[143,23627,23628,23630,23632,23634],{"class":145,"line":727},[143,23629,11920],{"class":755},[143,23631,3282],{"class":755},[143,23633,16347],{"class":149},[143,23635,23636],{"class":266}," \u002F\u002F静态成员变量\n",[143,23638,23639,23641,23644],{"class":145,"line":2518},[143,23640,2885],{"class":755},[143,23642,23643],{"class":149}," m_B;",[143,23645,23646],{"class":266}," \u002F\u002F非静态成员变量\n",[143,23648,23649],{"class":145,"line":2524},[143,23650,3300],{"emptyLinePlaceholder":976},[143,23652,23653],{"class":145,"line":2529},[143,23654,16121],{"class":755},[143,23656,23657],{"class":145,"line":2543},[143,23658,23271],{"class":266},[143,23660,23661,23663,23665,23667],{"class":145,"line":2548},[143,23662,11920],{"class":755},[143,23664,23465],{"class":755},[143,23666,14518],{"class":156},[143,23668,2876],{"class":149},[143,23670,23671],{"class":145,"line":2554},[143,23672,2930],{"class":149},[143,23674,23675,23677,23679,23682,23684],{"class":145,"line":2575},[143,23676,4351],{"class":149},[143,23678,2081],{"class":755},[143,23680,23681],{"class":163},"\"这是私有权限下的静态函数调用\"",[143,23683,2081],{"class":755},[143,23685,2103],{"class":149},[143,23687,23688],{"class":145,"line":2580},[143,23689,3087],{"class":149},[143,23691,23692],{"class":145,"line":2594},[143,23693,3300],{"emptyLinePlaceholder":976},[143,23695,23696],{"class":145,"line":2599},[143,23697,3300],{"emptyLinePlaceholder":976},[143,23699,23700],{"class":145,"line":2628},[143,23701,4895],{"class":149},[143,23703,23704,23706,23708,23710,23712,23714],{"class":145,"line":2633},[143,23705,1052],{"class":755},[143,23707,16468],{"class":156},[143,23709,23101],{"class":149},[143,23711,160],{"class":755},[143,23713,1234],{"class":280},[143,23715,290],{"class":149},[143,23717,23718,23720,23722],{"class":145,"line":2650},[143,23719,6264],{"class":755},[143,23721,6488],{"class":156},[143,23723,2876],{"class":149},[143,23725,23726],{"class":145,"line":2655},[143,23727,2449],{"class":149},[143,23729,23730],{"class":145,"line":2660},[143,23731,23512],{"class":266},[143,23733,23734],{"class":145,"line":2665},[143,23735,23517],{"class":266},[143,23737,23738],{"class":145,"line":2679},[143,23739,16212],{"class":149},[143,23741,23742,23744,23746],{"class":145,"line":2684},[143,23743,16764],{"class":149},[143,23745,12451],{"class":156},[143,23747,6536],{"class":149},[143,23749,23750],{"class":145,"line":3477},[143,23751,23534],{"class":266},[143,23753,23754,23756,23758,23760],{"class":145,"line":3491},[143,23755,19417],{"class":156},[143,23757,18630],{"class":149},[143,23759,12451],{"class":156},[143,23761,6536],{"class":149},[143,23763,23764],{"class":145,"line":3499},[143,23765,23766],{"class":266},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[143,23768,23769],{"class":145,"line":3504},[143,23770,348],{"class":149},[143,23772,23773,23775,23777],{"class":145,"line":3510},[143,23774,1052],{"class":755},[143,23776,2873],{"class":156},[143,23778,2876],{"class":149},[143,23780,23781],{"class":145,"line":3516},[143,23782,2449],{"class":149},[143,23784,23785,23787],{"class":145,"line":3521},[143,23786,6533],{"class":156},[143,23788,6536],{"class":149},[143,23790,23791],{"class":145,"line":8848},[143,23792,348],{"class":149},[58,23794,23796],{"id":23795},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22896,23798,23800],{"id":23799},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[63,23802,23803],{},"在c++中，类内的成员变量和成员函数分开存储",[63,23805,23806],{},"只有非静态成员变量才属于类的对象上",[23808,23809,23811],"h5",{"id":23810},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[133,23813,23815],{"className":1037,"code":23814,"language":1039,"meta":138,"style":138},"#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",[140,23816,23817,23824,23834,23840,23844,23848,23852,23860,23864,23868,23891,23895,23903,23907,23913],{"__ignoreMap":138},[143,23818,23819,23821],{"class":145,"line":146},[143,23820,2850],{"class":755},[143,23822,23823],{"class":163},"\u003Ciostraem>\n",[143,23825,23826,23828,23830,23832],{"class":145,"line":35},[143,23827,2858],{"class":755},[143,23829,2861],{"class":755},[143,23831,2864],{"class":156},[143,23833,290],{"class":149},[143,23835,23836,23838],{"class":145,"line":46},[143,23837,15593],{"class":755},[143,23839,16070],{"class":156},[143,23841,23842],{"class":145,"line":293},[143,23843,2449],{"class":149},[143,23845,23846],{"class":145,"line":306},[143,23847,3300],{"emptyLinePlaceholder":976},[143,23849,23850],{"class":145,"line":319},[143,23851,4895],{"class":149},[143,23853,23854,23856,23858],{"class":145,"line":332},[143,23855,6264],{"class":755},[143,23857,6488],{"class":156},[143,23859,2876],{"class":149},[143,23861,23862],{"class":145,"line":345},[143,23863,2449],{"class":149},[143,23865,23866],{"class":145,"line":701},[143,23867,16212],{"class":149},[143,23869,23870,23872,23874,23877,23879,23882,23884,23886,23888],{"class":145,"line":707},[143,23871,2454],{"class":149},[143,23873,2081],{"class":755},[143,23875,23876],{"class":163},"\"size of p=\"",[143,23878,2081],{"class":755},[143,23880,23881],{"class":156},"sizeoif",[143,23883,7439],{"class":149},[143,23885,2081],{"class":755},[143,23887,2146],{"class":149},[143,23889,23890],{"class":266}," \u002F\u002F查看这个空类的占用的内存空间\n",[143,23892,23893],{"class":145,"line":727},[143,23894,348],{"class":149},[143,23896,23897,23899,23901],{"class":145,"line":2518},[143,23898,1052],{"class":755},[143,23900,2873],{"class":156},[143,23902,2876],{"class":149},[143,23904,23905],{"class":145,"line":2524},[143,23906,2449],{"class":149},[143,23908,23909,23911],{"class":145,"line":2529},[143,23910,6533],{"class":156},[143,23912,6536],{"class":149},[143,23914,23915],{"class":145,"line":2543},[143,23916,348],{"class":149},[63,23918,23919],{},"输出结果为：size of p=1",[63,23921,23922],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[63,23924,23925],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23808,23927,23929],{"id":23928},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[133,23931,23933],{"className":1037,"code":23932,"language":1039,"meta":138,"style":138},"#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",[140,23934,23935,23941,23951,23959,23963,23972,23976,23984,23988,23992,24011,24015,24019,24027,24031,24037],{"__ignoreMap":138},[143,23936,23937,23939],{"class":145,"line":146},[143,23938,2850],{"class":755},[143,23940,2853],{"class":163},[143,23942,23943,23945,23947,23949],{"class":145,"line":35},[143,23944,2858],{"class":755},[143,23946,2861],{"class":755},[143,23948,2864],{"class":156},[143,23950,290],{"class":149},[143,23952,23953,23955,23957],{"class":145,"line":46},[143,23954,15593],{"class":755},[143,23956,16468],{"class":156},[143,23958,3574],{"class":149},[143,23960,23961],{"class":145,"line":293},[143,23962,2449],{"class":149},[143,23964,23965,23967,23969],{"class":145,"line":306},[143,23966,2885],{"class":755},[143,23968,16347],{"class":149},[143,23970,23971],{"class":266},"\u002F\u002F非静态成员变量\n",[143,23973,23974],{"class":145,"line":319},[143,23975,4895],{"class":149},[143,23977,23978,23980,23982],{"class":145,"line":332},[143,23979,6264],{"class":755},[143,23981,6488],{"class":156},[143,23983,2876],{"class":149},[143,23985,23986],{"class":145,"line":345},[143,23987,2449],{"class":149},[143,23989,23990],{"class":145,"line":701},[143,23991,16212],{"class":149},[143,23993,23994,23996,23998,24000,24002,24004,24006,24008],{"class":145,"line":707},[143,23995,2454],{"class":149},[143,23997,2081],{"class":755},[143,23999,23876],{"class":163},[143,24001,2276],{"class":755},[143,24003,7439],{"class":149},[143,24005,2081],{"class":755},[143,24007,2146],{"class":149},[143,24009,24010],{"class":266}," \u002F\u002F查看不是空对象时占用多少内存\n",[143,24012,24013],{"class":145,"line":727},[143,24014,3300],{"emptyLinePlaceholder":976},[143,24016,24017],{"class":145,"line":2518},[143,24018,348],{"class":149},[143,24020,24021,24023,24025],{"class":145,"line":2524},[143,24022,1052],{"class":755},[143,24024,2873],{"class":156},[143,24026,2876],{"class":149},[143,24028,24029],{"class":145,"line":2529},[143,24030,2449],{"class":149},[143,24032,24033,24035],{"class":145,"line":2543},[143,24034,6533],{"class":156},[143,24036,6536],{"class":149},[143,24038,24039],{"class":145,"line":2548},[143,24040,348],{"class":149},[63,24042,24043],{},"输出结果：size of p=4",[63,24045,24046],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[19,24048,24049],{},[22,24050,24051],{},"如果加上非静态成员变量，Person类修改如下",[133,24053,24055],{"className":1037,"code":24054,"language":1039,"meta":138,"style":138},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[140,24056,24057,24063,24067,24073,24081,24085,24090],{"__ignoreMap":138},[143,24058,24059,24061],{"class":145,"line":146},[143,24060,15593],{"class":755},[143,24062,16070],{"class":156},[143,24064,24065],{"class":145,"line":35},[143,24066,2449],{"class":149},[143,24068,24069,24071],{"class":145,"line":46},[143,24070,2885],{"class":755},[143,24072,22290],{"class":149},[143,24074,24075,24077,24079],{"class":145,"line":293},[143,24076,11920],{"class":755},[143,24078,3282],{"class":755},[143,24080,22297],{"class":149},[143,24082,24083],{"class":145,"line":306},[143,24084,4895],{"class":149},[143,24086,24087],{"class":145,"line":319},[143,24088,24089],{"class":266},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[143,24091,24092,24094,24096,24098,24100,24102],{"class":145,"line":332},[143,24093,1052],{"class":755},[143,24095,16468],{"class":156},[143,24097,23310],{"class":149},[143,24099,160],{"class":755},[143,24101,1234],{"class":280},[143,24103,290],{"class":149},[63,24105,24106],{},"输出结果：4",[63,24108,24109],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[19,24111,24112],{"start":35},[22,24113,24114],{},"加上非静态成员函数",[133,24116,24118],{"className":1037,"code":24117,"language":1039,"meta":138,"style":138},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[140,24119,24120,24127,24131,24137,24145,24149,24153,24157],{"__ignoreMap":138},[143,24121,24122,24124],{"class":145,"line":146},[143,24123,15593],{"class":755},[143,24125,24126],{"class":156},"  Person\n",[143,24128,24129],{"class":145,"line":35},[143,24130,2449],{"class":149},[143,24132,24133,24135],{"class":145,"line":46},[143,24134,2885],{"class":755},[143,24136,22290],{"class":149},[143,24138,24139,24141,24143],{"class":145,"line":293},[143,24140,15808],{"class":755},[143,24142,12285],{"class":156},[143,24144,2876],{"class":149},[143,24146,24147],{"class":145,"line":306},[143,24148,2930],{"class":149},[143,24150,24151],{"class":145,"line":319},[143,24152,3300],{"emptyLinePlaceholder":976},[143,24154,24155],{"class":145,"line":332},[143,24156,3087],{"class":149},[143,24158,24159],{"class":145,"line":345},[143,24160,4895],{"class":149},[63,24162,24163],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[19,24165,24166],{"start":46},[22,24167,24168],{},"加上静态成员函数",[133,24170,24172],{"className":1037,"code":24171,"language":1039,"meta":138,"style":138},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[140,24173,24174,24180,24184,24190,24198,24202,24206,24210,24221,24225,24229,24233],{"__ignoreMap":138},[143,24175,24176,24178],{"class":145,"line":146},[143,24177,15593],{"class":755},[143,24179,24126],{"class":156},[143,24181,24182],{"class":145,"line":35},[143,24183,2449],{"class":149},[143,24185,24186,24188],{"class":145,"line":46},[143,24187,2885],{"class":755},[143,24189,22290],{"class":149},[143,24191,24192,24194,24196],{"class":145,"line":293},[143,24193,15808],{"class":755},[143,24195,12285],{"class":156},[143,24197,2876],{"class":149},[143,24199,24200],{"class":145,"line":306},[143,24201,2930],{"class":149},[143,24203,24204],{"class":145,"line":319},[143,24205,3300],{"emptyLinePlaceholder":976},[143,24207,24208],{"class":145,"line":332},[143,24209,3087],{"class":149},[143,24211,24212,24214,24216,24219],{"class":145,"line":345},[143,24213,11920],{"class":755},[143,24215,23465],{"class":755},[143,24217,24218],{"class":156}," func1",[143,24220,2876],{"class":149},[143,24222,24223],{"class":145,"line":701},[143,24224,2930],{"class":149},[143,24226,24227],{"class":145,"line":707},[143,24228,3300],{"emptyLinePlaceholder":976},[143,24230,24231],{"class":145,"line":727},[143,24232,3087],{"class":149},[143,24234,24235],{"class":145,"line":2518},[143,24236,4895],{"class":149},[63,24238,24106],{},[63,24240,24241],{},"解释：静态成员函数也不属于类上",[954,24243,8574],{},{"title":138,"searchDepth":35,"depth":35,"links":24245},[24246,24252],{"id":15544,"depth":35,"text":15545,"children":24247},[24248,24249,24250,24251],{"id":15548,"depth":46,"text":15549},{"id":16273,"depth":46,"text":16274},{"id":16445,"depth":46,"text":16446},{"id":16903,"depth":46,"text":16904},{"id":19275,"depth":35,"text":19276,"children":24253},[24254,24255,24256,24257,24258,24259,24260,24261,24262],{"id":19287,"depth":46,"text":19288},{"id":19580,"depth":46,"text":19581},{"id":20071,"depth":46,"text":20072},{"id":21168,"depth":46,"text":21169},{"id":21591,"depth":46,"text":21592},{"id":22070,"depth":46,"text":22071},{"id":22445,"depth":46,"text":22446},{"id":22858,"depth":46,"text":22859},{"id":23795,"depth":46,"text":23796},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15509,"description":24263},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24270,"title":1039,"body":24271,"description":973,"extension":974,"meta":24275,"navigation":976,"path":24277,"seo":24278,"stem":24279,"__hash__":24280},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24272,"toc":24273},[],{"title":138,"searchDepth":35,"depth":35,"links":24274},[],{"category":24276},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1039,"description":973},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24282,"title":24283,"body":24284,"description":138,"extension":974,"meta":24874,"navigation":976,"path":24875,"seo":24876,"stem":24877,"__hash__":24878},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24285,"toc":24856},[24286,24289,24293,24296,24299,24302,24320,24325,24328,24331,24334,24337,24342,24345,24350,24353,24356,24360,24363,24366,24372,24375,24393,24397,24401,24404,24409,24412,24416,24419,24432,24435,24439,24442,24445,24448,24473,24476,24485,24496,24511,24543,24547,24554,24562,24566,24569,24572,24577,24581,24584,24587,24592,24595,24599,24602,24605,24610,24613,24617,24622,24626,24693,24697,24700,24703,24706,24709,24712,24718,24739,24742,24756,24764,24768,24771,24774,24779,24782,24787,24792,24795,24798,24803,24808,24811,24816,24821,24824,24829,24834,24837,24840,24845,24848,24853],[10,24287,24283],{"id":24288},"_1强化学习基本认识",[14,24290,24292],{"id":24291},"_11什么是强化学习","1.1.什么是强化学习",[63,24294,24295],{},"强化学习有两部分组成：智能体和环境；",[63,24297,24298],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[63,24300,24301],{},"强化学习与监督学习的区别:",[19,24303,24304,24307,24310,24313],{},[22,24305,24306],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[22,24308,24309],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[22,24311,24312],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[22,24314,24315,24316,24319],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[25,24317,24318],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[63,24321,24322],{},[29,24323],{"alt":138,"src":24324},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[63,24326,24327],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[63,24329,24330],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[63,24332,24333],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[63,24335,24336],{},"获取奖励",[63,24338,24339],{},[29,24340],{"alt":138,"src":24341},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[63,24343,24344],{},"强化学习可以分成标准强化学习和深度强化学习",[63,24346,24347],{},[29,24348],{"alt":138,"src":24349},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[63,24351,24352],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[63,24354,24355],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,24357,24359],{"id":24358},"_12强化学习应用场景","1.2.强化学习应用场景",[63,24361,24362],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[63,24364,24365],{},"具身智能中的应用",[63,24367,24368,24371],{},[25,24369,24370],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[63,24373,24374],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[63,24376,24377,24378,24381,24382,24385,24386,24389,24390],{},"机器人是",[25,24379,24380],{},"躯体","，深度学习是",[25,24383,24384],{},"神经元****网络","，VLA是",[25,24387,24388],{},"通用的行为逻辑","，而强化学习是",[25,24391,24392],{},"教练",[14,24394,24396],{"id":24395},"_13序列决策","1.3.序列决策",[58,24398,24400],{"id":24399},"_131智能体与环境","1.3.1.智能体与环境",[63,24402,24403],{},"强化学习研究的问题是智能体agent与环境交互的问题",[63,24405,24406],{},[29,24407],{"alt":138,"src":24408},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[63,24410,24411],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[58,24413,24415],{"id":24414},"_132奖励","1.3.2.奖励",[63,24417,24418],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[63,24420,24421,24422,24431],{},"取某个策略的表现如何。强化学习的目的就是",[25,24423,24424,24425,24430],{},"最大化",[25,24426,24427],{},[25,24428,24429],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[63,24433,24434],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[58,24436,24438],{"id":24437},"_133序列决策","1.3.3.序列决策",[63,24440,24441],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[63,24443,24444],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[63,24446,24447],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[63,24449,24450,24454,24455,24457,24458,24460,24461,24463,24464,497,24467,497,24470],{},[24451,24452,24453],"em",{},"Ht"," = ",[24451,24456,1637],{},"1*, a",[24451,24459,771],{},", r",[24451,24462,771],{},", . . . ,* ",[24451,24465,24466],{},"ot",[24451,24468,24469],{},", at ,",[24451,24471,24472],{},"rt",[63,24474,24475],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[63,24477,24478,24454,24481,2559,24483,1470],{},[24451,24479,24480],{},"st",[24451,24482,1098],{},[24451,24484,24453],{},[63,24486,24487,24488,24491,24492,24495],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[25,24489,24490],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[25,24493,24494],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[63,24497,24498,24499,24502,24503,24506,24507,24510],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[25,24500,24501],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[25,24504,24505],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24451,24508,24509],{},"S, A, T, R, Ω, O, γ",")。",[63,24512,24513,24514,24516,24517,24519,24520,1049,24522,24525,24526,24528,24529,1049,24532,24535,24536,24538,24539,24542],{},"其中 ",[24451,24515,1730],{}," 表示状态空间，为隐变量，",[24451,24518,1274],{}," 为动作空间，",[24451,24521,1755],{},[24451,24523,24524],{},"s ′ |s, a",") 为状态转移概率，",[24451,24527,1705],{}," 为奖励函数，",[24451,24530,24531],{},"Ω",[24451,24533,24534],{},"o|s, a",") 为观测概率，",[24451,24537,1631],{}," 为观测空间，",[24451,24540,24541],{},"γ"," 为折扣因子。",[14,24544,24546],{"id":24545},"_14动作空间","1.4.动作空间",[63,24548,24549,24550,24553],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[25,24551,24552],{},"动作空间"," ，动作空间分为:",[19,24555,24556,24559],{},[22,24557,24558],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[22,24560,24561],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,24563,24565],{"id":24564},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[63,24567,24568],{},"由策略、价值函数、模型三部分组成",[63,24570,24571],{},"这三者组成马尔可夫决策过程",[63,24573,24574],{},[29,24575],{"alt":138,"src":24576},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[58,24578,24580],{"id":24579},"_151策略","1.5.1.策略",[63,24582,24583],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[63,24585,24586],{},"策略可分为两种：",[63,24588,24589],{},[29,24590],{"alt":138,"src":24591},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[63,24593,24594],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[58,24596,24598],{"id":24597},"_152价值函数","1.5.2.价值函数",[63,24600,24601],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[63,24603,24604],{},"价值函数中有一个折扣因子，类似于存款利息",[63,24606,24607],{},[29,24608],{"alt":138,"src":24609},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[63,24611,24612],{},"进入某个状态采取的最优动作可以通过Q函数得到",[58,24614,24616],{"id":24615},"_153模型","1.5.3.模型",[63,24618,24619],{},[29,24620],{"alt":138,"src":24621},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,24623,24625],{"id":24624},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[1181,24627,24628,24639],{},[1184,24629,24630],{},[1187,24631,24632,24636],{},[1190,24633,24635],{"align":24634},"left","类型",[1190,24637,24638],{"align":24634},"特点",[1227,24640,24641,24651,24661,24671,24683],{},[1187,24642,24643,24648],{},[1232,24644,24645],{"align":24634},[25,24646,24647],{},"基于价值的智能体",[1232,24649,24650],{"align":24634},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[1187,24652,24653,24658],{},[1232,24654,24655],{"align":24634},[25,24656,24657],{},"基于策略的智能体",[1232,24659,24660],{"align":24634},"直接学习策略，没有学习价值函数",[1187,24662,24663,24668],{},[1232,24664,24665],{"align":24634},[25,24666,24667],{},"演员-评论员智能体",[1232,24669,24670],{"align":24634},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[1187,24672,24673,24678],{},[1232,24674,24675],{"align":24634},[25,24676,24677],{},"有模型强化学习智能体",[1232,24679,24680],{"align":24634},[29,24681],{"alt":138,"src":24682},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[1187,24684,24685,24690],{},[1232,24686,24687],{"align":24634},[25,24688,24689],{},"免模型强化学习智能体",[1232,24691,24692],{"align":24634},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,24694,24696],{"id":24695},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[63,24698,24699],{},"学习和规划是序列决策的两个基本问题",[63,24701,24702],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[63,24704,24705],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[63,24707,24708],{},"强化学习用到的库：Gym",[63,24710,24711],{},"Gym可以检验强化学习算法的优劣",[63,24713,24714,24717],{},[25,24715,24716],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[133,24719,24723],{"className":24720,"code":24721,"language":24722,"meta":138,"style":138},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[140,24724,24725],{"__ignoreMap":138},[143,24726,24727,24730,24733,24736],{"class":145,"line":146},[143,24728,24729],{"class":156},"pip",[143,24731,24732],{"class":163}," install",[143,24734,24735],{"class":163}," gym==",[143,24737,24738],{"class":280},"0.25.2\n",[63,24740,24741],{},"显示图形界面需要",[133,24743,24745],{"className":24720,"code":24744,"language":24722,"meta":138,"style":138},"pip install pygame\n",[140,24746,24747],{"__ignoreMap":138},[143,24748,24749,24751,24753],{"class":145,"line":146},[143,24750,24729],{"class":156},[143,24752,24732],{"class":163},[143,24754,24755],{"class":163}," pygame\n",[63,24757,24758,24759],{},"有关Gym库的相关文档介绍：",[67,24760,24763],{"href":24761,"rel":24762},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[71],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24765,24767],{"id":24766},"_18一些补充基础概念","1.8.一些补充基础概念",[63,24769,24770],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[63,24772,24773],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[63,24775,24776],{},[29,24777],{"alt":138,"src":24778},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[63,24780,24781],{},"折扣率需要自己来设定",[63,24783,24784],{},[29,24785],{"alt":138,"src":24786},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[19,24788,24789],{},[22,24790,24791],{},"状态转移函数：",[63,24793,24794],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[63,24796,24797],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[63,24799,24800],{},[29,24801],{"alt":138,"src":24802},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[19,24804,24805],{"start":35},[22,24806,24807],{},"动作价值函数：",[63,24809,24810],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[63,24812,24813],{},[29,24814],{"alt":138,"src":24815},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[19,24817,24818],{"start":46},[22,24819,24820],{},"最优动作价值函数：",[63,24822,24823],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[63,24825,24826],{},[29,24827],{"alt":138,"src":24828},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[19,24830,24831],{"start":293},[22,24832,24833],{},"状态价值函数:",[63,24835,24836],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[63,24838,24839],{},"它衡量的是“一个具体动作”的长期价值",[63,24841,24842],{},[29,24843],{"alt":138,"src":24844},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[63,24846,24847],{},"几个价值函数之间的比较：",[63,24849,24850],{},[29,24851],{"alt":138,"src":24852},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[954,24854,24855],{},"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":138,"searchDepth":35,"depth":35,"links":24857},[24858,24859,24860,24865,24866,24871,24872,24873],{"id":24291,"depth":35,"text":24292},{"id":24358,"depth":35,"text":24359},{"id":24395,"depth":35,"text":24396,"children":24861},[24862,24863,24864],{"id":24399,"depth":46,"text":24400},{"id":24414,"depth":46,"text":24415},{"id":24437,"depth":46,"text":24438},{"id":24545,"depth":35,"text":24546},{"id":24564,"depth":35,"text":24565,"children":24867},[24868,24869,24870],{"id":24579,"depth":46,"text":24580},{"id":24597,"depth":46,"text":24598},{"id":24615,"depth":46,"text":24616},{"id":24624,"depth":35,"text":24625},{"id":24695,"depth":35,"text":24696},{"id":24766,"depth":35,"text":24767},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24283,"description":138},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24880,"title":24881,"body":24882,"description":24889,"extension":974,"meta":24900,"navigation":976,"path":24901,"seo":24902,"stem":24903,"__hash__":24904},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24883,"toc":24898},[24884,24887,24890,24895],[10,24885,24881],{"id":24886},"_2马尔可夫决策过程",[63,24888,24889],{},"这是强化学习的基本框架",[63,24891,24892],{},[29,24893],{"alt":138,"src":24894},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[63,24896,24897],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":138,"searchDepth":35,"depth":35,"links":24899},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24881,"description":24889},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24906,"title":24907,"body":24908,"description":138,"extension":974,"meta":25024,"navigation":976,"path":25025,"seo":25026,"stem":25027,"__hash__":25028},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24909,"toc":25019},[24910,24913,24917,24920,24925,24930,24933,24938,24941,24946,24949,24953,24958,24961,24966,24971,24976,24979,24983,24988,24991,24996,25001,25006,25011,25014],[10,24911,24907],{"id":24912},"_3动作价值函数",[14,24914,24916],{"id":24915},"_31dqn","3.1.DQN",[63,24918,24919],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[63,24921,24922],{},[29,24923],{"alt":138,"src":24924},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[63,24926,24927],{},[29,24928],{"alt":138,"src":24929},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[63,24931,24932],{},"DQN算法的描述：",[63,24934,24935],{},[29,24936],{"alt":138,"src":24937},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[63,24939,24940],{},"这里的Dense指的是全连接层",[63,24942,24943],{},[29,24944],{"alt":138,"src":24945},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[63,24947,24948],{},"当前观测的状态为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,24950,24952],{"id":24951},"_32dqn的举例","3.2.DQN的举例",[63,24954,24955],{},[29,24956],{"alt":138,"src":24957},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[63,24959,24960],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[63,24962,24963],{},[29,24964],{"alt":138,"src":24965},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[63,24967,24968],{},[29,24969],{"alt":138,"src":24970},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[63,24972,24973],{},[29,24974],{"alt":138,"src":24975},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[63,24977,24978],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24980,24982],{"id":24981},"_33td算法","3.3.TD算法",[63,24984,24985],{},[29,24986],{"alt":138,"src":24987},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[63,24989,24990],{},"强化学习TD算法公式的粗略解释：",[63,24992,24993],{},[29,24994],{"alt":138,"src":24995},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[63,24997,24998],{},[29,24999],{"alt":138,"src":25000},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[63,25002,25003],{},[29,25004],{"alt":138,"src":25005},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[63,25007,25008],{},[29,25009],{"alt":138,"src":25010},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[63,25012,25013],{},"TD算法总结：",[63,25015,25016],{},[29,25017],{"alt":138,"src":25018},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":138,"searchDepth":35,"depth":35,"links":25020},[25021,25022,25023],{"id":24915,"depth":35,"text":24916},{"id":24951,"depth":35,"text":24952},{"id":24981,"depth":35,"text":24982},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24907,"description":138},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25030,"title":25031,"body":25032,"description":138,"extension":974,"meta":25265,"navigation":976,"path":25266,"seo":25267,"stem":25268,"__hash__":25269},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25033,"toc":25261},[25034,25037,25041,25044,25047,25052,25057,25060,25065,25070,25073,25078,25081,25086,25089,25094,25097,25102,25105,25110,25115,25118,25123,25126,25129,25134,25137,25142,25147,25151,25154,25157,25162,25167,25170,25175,25180,25183,25188,25191,25194,25199,25202,25207,25210,25215,25220,25223,25228,25233,25236,25241,25244,25249,25252],[10,25035,25031],{"id":25036},"_4策略学习",[14,25038,25040],{"id":25039},"_41概念描述","4.1.概念描述",[63,25042,25043],{},"用神经网络（策略网络）近似策略函数",[63,25045,25046],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[63,25048,25049],{},[29,25050],{"alt":138,"src":25051},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[63,25053,25054],{},[29,25055],{"alt":138,"src":25056},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[63,25058,25059],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[63,25061,25062],{},[29,25063],{"alt":138,"src":25064},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[63,25066,25067],{},[29,25068],{"alt":138,"src":25069},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[63,25071,25072],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[63,25074,25075],{},[29,25076],{"alt":138,"src":25077},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[63,25079,25080],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[63,25082,25083],{},[29,25084],{"alt":138,"src":25085},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[63,25087,25088],{},"改进theta要用到策略梯度算法",[63,25090,25091],{},[29,25092],{"alt":138,"src":25093},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[63,25095,25096],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[63,25098,25099],{},[29,25100],{"alt":138,"src":25101},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[63,25103,25104],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[63,25106,25107],{},[29,25108],{"alt":138,"src":25109},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[63,25111,25112],{},[29,25113],{"alt":138,"src":25114},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[63,25116,25117],{},"梯度公式总结：",[63,25119,25120],{},[29,25121],{"alt":138,"src":25122},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[63,25124,25125],{},"两个公式的分别应用场景：",[63,25127,25128],{},"对于离散的动作：",[63,25130,25131],{},[29,25132],{"alt":138,"src":25133},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[63,25135,25136],{},"对于连续的动作：",[63,25138,25139],{},[29,25140],{"alt":138,"src":25141},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[63,25143,25144],{},[29,25145],{"alt":138,"src":25146},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,25148,25150],{"id":25149},"_42概率梯度算法总结","4.2.概率梯度算法总结",[63,25152,25153],{},"使用蒙特卡洛来近似计算策略梯度",[63,25155,25156],{},"蒙特卡洛法的解释如下：",[63,25158,25159],{},[29,25160],{"alt":138,"src":25161},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[63,25163,25164],{},[29,25165],{"alt":138,"src":25166},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[63,25168,25169],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[19,25171,25172],{},[22,25173,25174],{},"方法一：reinforce算法",[63,25176,25177],{},[29,25178],{"alt":138,"src":25179},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[63,25181,25182],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[19,25184,25185],{"start":35},[22,25186,25187],{},"方法二：actor-critic算法",[63,25189,25190],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[63,25192,25193],{},"两个网络的构建：",[63,25195,25196],{},[29,25197],{"alt":138,"src":25198},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[63,25200,25201],{},"actor网路：",[63,25203,25204],{},[29,25205],{"alt":138,"src":25206},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[63,25208,25209],{},"critic网络",[63,25211,25212],{},[29,25213],{"alt":138,"src":25214},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[19,25216,25217],{"start":46},[22,25218,25219],{},"网络的训练",[63,25221,25222],{},"网络描述",[63,25224,25225],{},[29,25226],{"alt":138,"src":25227},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[63,25229,25230],{},[29,25231],{"alt":138,"src":25232},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[63,25234,25235],{},"TD算法更新梯度：",[63,25237,25238],{},[29,25239],{"alt":138,"src":25240},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[63,25242,25243],{},"策略网络更新梯度：",[63,25245,25246],{},[29,25247],{"alt":138,"src":25248},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[63,25250,25251],{},"训练整个流程的具体描述：",[63,25253,25254,25257,25258],{},[29,25255],{"alt":138,"src":25256},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[29,25259],{"alt":138,"src":25260},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":138,"searchDepth":35,"depth":35,"links":25262},[25263,25264],{"id":25039,"depth":35,"text":25040},{"id":25149,"depth":35,"text":25150},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25031,"description":138},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25271,"title":25272,"body":25273,"description":25280,"extension":974,"meta":25330,"navigation":976,"path":25331,"seo":25332,"stem":25333,"__hash__":25334},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25274,"toc":25326},[25275,25278,25281,25285,25288,25293,25297,25300,25305,25308,25313,25318,25321],[10,25276,25272],{"id":25277},"_5alphago算法",[63,25279,25280],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25282,25284],{"id":25283},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[63,25286,25287],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[63,25289,25290],{},[29,25291],{"alt":138,"src":25292},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25294,25296],{"id":25295},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[63,25298,25299],{},"采用强化学习的方式训练策略网络",[63,25301,25302],{},[29,25303],{"alt":138,"src":25304},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[63,25306,25307],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[63,25309,25310],{},[29,25311],{"alt":138,"src":25312},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[63,25314,25315],{},[29,25316],{"alt":138,"src":25317},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[63,25319,25320],{},"强化学习训练策略网络的总结：",[63,25322,25323],{},[29,25324],{"alt":138,"src":25325},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":138,"searchDepth":35,"depth":35,"links":25327},[25328,25329],{"id":25283,"depth":35,"text":25284},{"id":25295,"depth":35,"text":25296},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25272,"description":25280},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25336,"title":25337,"body":25338,"description":25345,"extension":974,"meta":25348,"navigation":976,"path":25349,"seo":25350,"stem":25351,"__hash__":25352},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25339,"toc":25346},[25340,25343],[10,25341,25337],{"id":25342},"_6价值网络",[63,25344,25345],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":138,"searchDepth":35,"depth":35,"links":25347},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25337,"description":25345},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25354,"title":25355,"body":25356,"description":25360,"extension":974,"meta":25361,"navigation":976,"path":25362,"seo":25363,"stem":25364,"__hash__":25365},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25357,"toc":25358},[],{"title":138,"searchDepth":35,"depth":35,"links":25359},[],"记录自己的强化学习笔记。",{"category":24276},"\u002Fwiki\u002F2025-12-04",{"title":25355,"description":25360},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25367,"title":25368,"body":25369,"description":973,"extension":974,"meta":25408,"navigation":976,"path":25409,"seo":25410,"stem":25411,"__hash__":25412},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25370,"toc":25406},[25371,25374,25377,25383,25386,25392,25395,25400,25403],[10,25372,25368],{"id":25373},"_1-项目概览与官方资源",[63,25375,25376],{},"官方文档：",[63,25378,25379],{},[67,25380,25381],{"href":25381,"rel":25382},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[71],[63,25384,25385],{},"官方代码仓库：",[63,25387,25388],{},[67,25389,25390],{"href":25390,"rel":25391},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[71],[63,25393,25394],{},"复现大体流程：",[63,25396,25397],{},[29,25398],{"alt":138,"src":25399},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[63,25401,25402],{},"本教程的目标是打通这条链路：",[63,25404,25405],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":138,"searchDepth":35,"depth":35,"links":25407},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25368,"description":973},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25414,"title":25415,"body":25416,"description":973,"extension":974,"meta":25532,"navigation":976,"path":25533,"seo":25534,"stem":25535,"__hash__":25536},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25417,"toc":25527},[25418,25421,25425,25428,25435,25439,25442,25451,25461,25465,25495,25498,25524],[10,25419,25415],{"id":25420},"_2-环境准备与设备连接",[14,25422,25424],{"id":25423},"_21-系统与环境","2.1 系统与环境",[63,25426,25427],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[63,25429,25430,25431,25434],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[140,25432,25433],{},"lerobot"," 依赖。",[14,25436,25438],{"id":25437},"_22-机械臂串口识别","2.2 机械臂串口识别",[63,25440,25441],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[133,25443,25445],{"className":24720,"code":25444,"language":24722,"meta":138,"style":138},"lerobot-find-out\n",[140,25446,25447],{"__ignoreMap":138},[143,25448,25449],{"class":145,"line":146},[143,25450,25444],{"class":156},[63,25452,25453,25454,1255,25457,25460],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[140,25455,25456],{},"\u002Fdev\u002FttyACM0",[140,25458,25459],{},"\u002Fdev\u002FttyACM1","）。",[14,25462,25464],{"id":25463},"_23-串口授权","2.3 串口授权",[133,25466,25468],{"className":24720,"code":25467,"language":24722,"meta":138,"style":138},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[140,25469,25470,25484],{"__ignoreMap":138},[143,25471,25472,25475,25478,25481],{"class":145,"line":146},[143,25473,25474],{"class":156},"sudo",[143,25476,25477],{"class":163}," chmod",[143,25479,25480],{"class":280}," 666",[143,25482,25483],{"class":163}," \u002Fdev\u002FttyACM0\n",[143,25485,25486,25488,25490,25492],{"class":145,"line":35},[143,25487,25474],{"class":156},[143,25489,25477],{"class":163},[143,25491,25480],{"class":280},[143,25493,25494],{"class":163}," \u002Fdev\u002FttyACM1\n",[63,25496,25497],{},"说明：",[232,25499,25500,25505,25511,25521],{},[22,25501,25502,25504],{},[140,25503,25474],{},"：以 root 权限执行命令。",[22,25506,25507,25510],{},[140,25508,25509],{},"chmod","：修改设备节点权限。",[22,25512,25513,25516,25517,25520],{},[140,25514,25515],{},"666","：",[140,25518,25519],{},"rw-rw-rw-","，所有用户可读写。",[22,25522,25523],{},"串口号必须替换为你机器上的真实端口。",[954,25525,25526],{},"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":138,"searchDepth":35,"depth":35,"links":25528},[25529,25530,25531],{"id":25423,"depth":35,"text":25424},{"id":25437,"depth":35,"text":25438},{"id":25463,"depth":35,"text":25464},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25415,"description":973},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25538,"title":25539,"body":25540,"description":973,"extension":974,"meta":25701,"navigation":976,"path":25702,"seo":25703,"stem":25704,"__hash__":25705},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25541,"toc":25697},[25542,25546,25550,25556,25559,25616,25619,25623,25626,25694],[10,25543,25545],{"id":25544},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,25547,25549],{"id":25548},"_31-配置电机-id","3.1 配置电机 ID",[63,25551,25552,25553,25555],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[140,25554,771],{},"，需要改成机械臂链路里不冲突的编号。",[63,25557,25558],{},"方式一：用 LeRobot 命令逐步写入。",[133,25560,25562],{"className":24720,"code":25561,"language":24722,"meta":138,"style":138},"# 主臂舵机配置 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",[140,25563,25564,25569,25577,25584,25589,25593,25598,25604,25611],{"__ignoreMap":138},[143,25565,25566],{"class":145,"line":146},[143,25567,25568],{"class":266},"# 主臂舵机配置 ID\n",[143,25570,25571,25574],{"class":145,"line":35},[143,25572,25573],{"class":156},"lerobot-setup-motors",[143,25575,25576],{"class":280}," \\\n",[143,25578,25579,25582],{"class":145,"line":46},[143,25580,25581],{"class":280},"  --teleop.type=so101_leader",[143,25583,25576],{"class":280},[143,25585,25586],{"class":145,"line":293},[143,25587,25588],{"class":280},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[143,25590,25591],{"class":145,"line":306},[143,25592,3300],{"emptyLinePlaceholder":976},[143,25594,25595],{"class":145,"line":319},[143,25596,25597],{"class":266},"# 从臂舵机配置 ID\n",[143,25599,25600,25602],{"class":145,"line":332},[143,25601,25573],{"class":156},[143,25603,25576],{"class":280},[143,25605,25606,25609],{"class":145,"line":345},[143,25607,25608],{"class":280},"  --robot.type=so101_follower",[143,25610,25576],{"class":280},[143,25612,25613],{"class":145,"line":701},[143,25614,25615],{"class":280},"  --robot.port=\u002Fdev\u002FttyACM1\n",[63,25617,25618],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,25620,25622],{"id":25621},"_32-机械臂校准","3.2 机械臂校准",[63,25624,25625],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[133,25627,25629],{"className":24720,"code":25628,"language":24722,"meta":138,"style":138},"# 主臂校准\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",[140,25630,25631,25636,25643,25649,25656,25661,25665,25670,25676,25682,25689],{"__ignoreMap":138},[143,25632,25633],{"class":145,"line":146},[143,25634,25635],{"class":266},"# 主臂校准\n",[143,25637,25638,25641],{"class":145,"line":35},[143,25639,25640],{"class":156},"lerobot-calibrate",[143,25642,25576],{"class":280},[143,25644,25645,25647],{"class":145,"line":46},[143,25646,25581],{"class":280},[143,25648,25576],{"class":280},[143,25650,25651,25654],{"class":145,"line":293},[143,25652,25653],{"class":280},"  --teleop.port=\u002Fdev\u002FttyACM0",[143,25655,25576],{"class":280},[143,25657,25658],{"class":145,"line":306},[143,25659,25660],{"class":280},"  --teleop.id=my_awesome_leader_arm\n",[143,25662,25663],{"class":145,"line":319},[143,25664,3300],{"emptyLinePlaceholder":976},[143,25666,25667],{"class":145,"line":332},[143,25668,25669],{"class":266},"# 从臂校准\n",[143,25671,25672,25674],{"class":145,"line":345},[143,25673,25640],{"class":156},[143,25675,25576],{"class":280},[143,25677,25678,25680],{"class":145,"line":701},[143,25679,25608],{"class":280},[143,25681,25576],{"class":280},[143,25683,25684,25687],{"class":145,"line":707},[143,25685,25686],{"class":280},"  --robot.port=\u002Fdev\u002FttyACM1",[143,25688,25576],{"class":280},[143,25690,25691],{"class":145,"line":727},[143,25692,25693],{"class":280},"  --robot.id=my_awesome_follower_arm\n",[954,25695,25696],{},"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":138,"searchDepth":35,"depth":35,"links":25698},[25699,25700],{"id":25548,"depth":35,"text":25549},{"id":25621,"depth":35,"text":25622},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25539,"description":973},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25707,"title":25708,"body":25709,"description":973,"extension":974,"meta":25900,"navigation":976,"path":25901,"seo":25902,"stem":25903,"__hash__":25904},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25710,"toc":25896},[25711,25714,25718,25765,25769,25782,25845,25848,25893],[10,25712,25708],{"id":25713},"_4-遥操与相机接入",[14,25715,25717],{"id":25716},"_41-不带相机遥操","4.1 不带相机遥操",[133,25719,25721],{"className":24720,"code":25720,"language":24722,"meta":138,"style":138},"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",[140,25722,25723,25730,25736,25742,25749,25755,25761],{"__ignoreMap":138},[143,25724,25725,25728],{"class":145,"line":146},[143,25726,25727],{"class":156},"lerobot-teleoperate",[143,25729,25576],{"class":280},[143,25731,25732,25734],{"class":145,"line":35},[143,25733,25608],{"class":280},[143,25735,25576],{"class":280},[143,25737,25738,25740],{"class":145,"line":46},[143,25739,25686],{"class":280},[143,25741,25576],{"class":280},[143,25743,25744,25747],{"class":145,"line":293},[143,25745,25746],{"class":280},"  --robot.id=my_awesome_follower_arm",[143,25748,25576],{"class":280},[143,25750,25751,25753],{"class":145,"line":306},[143,25752,25581],{"class":280},[143,25754,25576],{"class":280},[143,25756,25757,25759],{"class":145,"line":319},[143,25758,25653],{"class":280},[143,25760,25576],{"class":280},[143,25762,25763],{"class":145,"line":332},[143,25764,25660],{"class":280},[14,25766,25768],{"id":25767},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[133,25770,25772],{"className":24720,"code":25771,"language":24722,"meta":138,"style":138},"lerobot-find-cameras opencv\n",[140,25773,25774],{"__ignoreMap":138},[143,25775,25776,25779],{"class":145,"line":146},[143,25777,25778],{"class":156},"lerobot-find-cameras",[143,25780,25781],{"class":163}," opencv\n",[133,25783,25785],{"className":24720,"code":25784,"language":24722,"meta":138,"style":138},"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",[140,25786,25787,25793,25799,25805,25811,25821,25827,25833,25840],{"__ignoreMap":138},[143,25788,25789,25791],{"class":145,"line":146},[143,25790,25727],{"class":156},[143,25792,25576],{"class":280},[143,25794,25795,25797],{"class":145,"line":35},[143,25796,25608],{"class":280},[143,25798,25576],{"class":280},[143,25800,25801,25803],{"class":145,"line":46},[143,25802,25686],{"class":280},[143,25804,25576],{"class":280},[143,25806,25807,25809],{"class":145,"line":293},[143,25808,25746],{"class":280},[143,25810,25576],{"class":280},[143,25812,25813,25816,25819],{"class":145,"line":306},[143,25814,25815],{"class":280},"  --robot.cameras=",[143,25817,25818],{"class":163},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[143,25820,25576],{"class":280},[143,25822,25823,25825],{"class":145,"line":319},[143,25824,25581],{"class":280},[143,25826,25576],{"class":280},[143,25828,25829,25831],{"class":145,"line":332},[143,25830,25653],{"class":280},[143,25832,25576],{"class":280},[143,25834,25835,25838],{"class":145,"line":345},[143,25836,25837],{"class":280},"  --teleop.id=my_awesome_leader_arm",[143,25839,25576],{"class":280},[143,25841,25842],{"class":145,"line":701},[143,25843,25844],{"class":280},"  --display_data=true\n",[63,25846,25847],{},"相机参数说明：",[232,25849,25850,25856,25862,25871,25881,25887],{},[22,25851,25852,25855],{},[140,25853,25854],{},"front","：相机名称。",[22,25857,25858,25861],{},[140,25859,25860],{},"type: opencv","：相机驱动类型。",[22,25863,25864,25867,25868,25460],{},[140,25865,25866],{},"index_or_path","：设备编号或设备路径（如 ",[140,25869,25870],{},"\u002Fdev\u002Fvideo4",[22,25872,25873,25876,25877,25880],{},[140,25874,25875],{},"width"," \u002F ",[140,25878,25879],{},"height","：图像分辨率。",[22,25882,25883,25886],{},[140,25884,25885],{},"fps","：采样帧率。",[22,25888,25889,25892],{},[140,25890,25891],{},"--display_data=true","：启用实时可视化。",[954,25894,25895],{},"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":138,"searchDepth":35,"depth":35,"links":25897},[25898,25899],{"id":25716,"depth":35,"text":25717},{"id":25767,"depth":35,"text":25768},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25708,"description":973},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25906,"title":25907,"body":25908,"description":973,"extension":974,"meta":26080,"navigation":976,"path":26081,"seo":26082,"stem":26083,"__hash__":26084},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25909,"toc":26075},[25910,25914,25918,25923,25928,25931,25973,25979,25983,26032,26037,26041,26044,26052,26057,26062,26067,26072],[10,25911,25913],{"id":25912},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25915,25917],{"id":25916},"_51-生成访问令牌","5.1 生成访问令牌",[63,25919,25920],{},[29,25921],{"alt":138,"src":25922},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[63,25924,25925],{},[29,25926],{"alt":138,"src":25927},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[63,25929,25930],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[133,25932,25934],{"className":24720,"code":25933,"language":24722,"meta":138,"style":138},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[140,25935,25936,25949],{"__ignoreMap":138},[143,25937,25938,25941,25944,25946],{"class":145,"line":146},[143,25939,25940],{"class":755},"export",[143,25942,25943],{"class":149}," HF_TOKEN",[143,25945,160],{"class":755},[143,25947,25948],{"class":163},"\"your_huggingface_token\"\n",[143,25950,25951,25954,25957,25960,25963,25965,25968,25970],{"class":145,"line":35},[143,25952,25953],{"class":156},"hf",[143,25955,25956],{"class":163}," auth",[143,25958,25959],{"class":163}," login",[143,25961,25962],{"class":280}," --token",[143,25964,10624],{"class":163},[143,25966,25967],{"class":149},"$HF_TOKEN",[143,25969,1292],{"class":163},[143,25971,25972],{"class":280}," --add-to-git-credential\n",[63,25974,25975,25978],{},[140,25976,25977],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25980,25982],{"id":25981},"_52-验证登录","5.2 验证登录",[133,25984,25986],{"className":24720,"code":25985,"language":24722,"meta":138,"style":138},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[140,25987,25988,26019],{"__ignoreMap":138},[143,25989,25990,25993,25995,25998,26000,26002,26005,26008,26011,26014,26017],{"class":145,"line":146},[143,25991,25992],{"class":149},"HF_USER",[143,25994,160],{"class":755},[143,25996,25997],{"class":149},"$(",[143,25999,25953],{"class":156},[143,26001,25956],{"class":163},[143,26003,26004],{"class":163}," whoami",[143,26006,26007],{"class":755}," |",[143,26009,26010],{"class":156}," head",[143,26012,26013],{"class":280}," -n",[143,26015,26016],{"class":280}," 1",[143,26018,1055],{"class":149},[143,26020,26021,26024,26026,26029],{"class":145,"line":35},[143,26022,26023],{"class":280},"echo",[143,26025,10624],{"class":163},[143,26027,26028],{"class":149},"$HF_USER",[143,26030,26031],{"class":163},"\"\n",[63,26033,26034],{},[29,26035],{"alt":138,"src":26036},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26038,26040],{"id":26039},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[63,26042,26043],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[232,26045,26046,26049],{},[22,26047,26048],{},"Dataset Repo（用于上传演示数据）",[22,26050,26051],{},"Model Repo（用于上传训练后的 ACT 权重）",[63,26053,26054],{},[29,26055],{"alt":138,"src":26056},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[63,26058,26059],{},[29,26060],{"alt":138,"src":26061},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[63,26063,26064],{},[29,26065],{"alt":138,"src":26066},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[63,26068,26069],{},[29,26070],{"alt":138,"src":26071},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[954,26073,26074],{},"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":138,"searchDepth":35,"depth":35,"links":26076},[26077,26078,26079],{"id":25916,"depth":35,"text":25917},{"id":25981,"depth":35,"text":25982},{"id":26039,"depth":35,"text":26040},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25907,"description":973},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26086,"title":26087,"body":26088,"description":973,"extension":974,"meta":26285,"navigation":976,"path":26286,"seo":26287,"stem":26288,"__hash__":26289},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26089,"toc":26280},[26090,26094,26098,26194,26202,26207,26211,26227,26230,26234,26277],[10,26091,26093],{"id":26092},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26095,26097],{"id":26096},"_61-录制示教数据","6.1 录制示教数据",[133,26099,26101],{"className":24720,"code":26100,"language":24722,"meta":138,"style":138},"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",[140,26102,26103,26110,26116,26122,26128,26137,26143,26149,26155,26162,26172,26179,26189],{"__ignoreMap":138},[143,26104,26105,26108],{"class":145,"line":146},[143,26106,26107],{"class":156},"lerobot-record",[143,26109,25576],{"class":280},[143,26111,26112,26114],{"class":145,"line":35},[143,26113,25608],{"class":280},[143,26115,25576],{"class":280},[143,26117,26118,26120],{"class":145,"line":46},[143,26119,25686],{"class":280},[143,26121,25576],{"class":280},[143,26123,26124,26126],{"class":145,"line":293},[143,26125,25746],{"class":280},[143,26127,25576],{"class":280},[143,26129,26130,26132,26135],{"class":145,"line":306},[143,26131,25815],{"class":280},[143,26133,26134],{"class":163},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[143,26136,25576],{"class":280},[143,26138,26139,26141],{"class":145,"line":319},[143,26140,25581],{"class":280},[143,26142,25576],{"class":280},[143,26144,26145,26147],{"class":145,"line":332},[143,26146,25653],{"class":280},[143,26148,25576],{"class":280},[143,26150,26151,26153],{"class":145,"line":345},[143,26152,25837],{"class":280},[143,26154,25576],{"class":280},[143,26156,26157,26160],{"class":145,"line":701},[143,26158,26159],{"class":280},"  --display_data=true",[143,26161,25576],{"class":280},[143,26163,26164,26167,26170],{"class":145,"line":707},[143,26165,26166],{"class":280},"  --dataset.repo_id=",[143,26168,26169],{"class":163},"\"Embodied-AI-6\u002Fso101_test\"",[143,26171,25576],{"class":280},[143,26173,26174,26177],{"class":145,"line":727},[143,26175,26176],{"class":280},"  --dataset.num_episodes=10",[143,26178,25576],{"class":280},[143,26180,26181,26184,26187],{"class":145,"line":2518},[143,26182,26183],{"class":280},"  --dataset.single_task=",[143,26185,26186],{"class":163},"\"Grab the green cube\"",[143,26188,25576],{"class":280},[143,26190,26191],{"class":145,"line":2524},[143,26192,26193],{"class":280},"  --resume=true\n",[232,26195,26196],{},[22,26197,26198,26201],{},[140,26199,26200],{},"--resume=true","：已有同一数据集时继续追加 episode。",[63,26203,26204],{},[29,26205],{"alt":138,"src":26206},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,26208,26210],{"id":26209},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[133,26212,26214],{"className":24720,"code":26213,"language":24722,"meta":138,"style":138},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[140,26215,26216],{"__ignoreMap":138},[143,26217,26218,26221,26224],{"class":145,"line":146},[143,26219,26220],{"class":156},"rm",[143,26222,26223],{"class":280}," -rf",[143,26225,26226],{"class":163}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[63,26228,26229],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,26231,26233],{"id":26232},"_63-回放指定-episode","6.3 回放指定 episode",[133,26235,26237],{"className":24720,"code":26236,"language":24722,"meta":138,"style":138},"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",[140,26238,26239,26246,26252,26258,26264,26272],{"__ignoreMap":138},[143,26240,26241,26244],{"class":145,"line":146},[143,26242,26243],{"class":156},"lerobot-replay",[143,26245,25576],{"class":280},[143,26247,26248,26250],{"class":145,"line":35},[143,26249,25608],{"class":280},[143,26251,25576],{"class":280},[143,26253,26254,26256],{"class":145,"line":46},[143,26255,25686],{"class":280},[143,26257,25576],{"class":280},[143,26259,26260,26262],{"class":145,"line":293},[143,26261,25746],{"class":280},[143,26263,25576],{"class":280},[143,26265,26266,26268,26270],{"class":145,"line":306},[143,26267,26166],{"class":280},[143,26269,26169],{"class":163},[143,26271,25576],{"class":280},[143,26273,26274],{"class":145,"line":319},[143,26275,26276],{"class":280},"  --dataset.episode=0\n",[954,26278,26279],{},"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":138,"searchDepth":35,"depth":35,"links":26281},[26282,26283,26284],{"id":26096,"depth":35,"text":26097},{"id":26209,"depth":35,"text":26210},{"id":26232,"depth":35,"text":26233},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26087,"description":973},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26291,"title":26292,"body":26293,"description":973,"extension":974,"meta":26421,"navigation":976,"path":26422,"seo":26423,"stem":26424,"__hash__":26425},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26294,"toc":26419},[26295,26299,26362,26365,26412,26417],[10,26296,26298],{"id":26297},"_7-act-模型训练","7. ACT 模型训练",[133,26300,26302],{"className":24720,"code":26301,"language":24722,"meta":138,"style":138},"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",[140,26303,26304,26311,26319,26326,26333,26340,26347,26354],{"__ignoreMap":138},[143,26305,26306,26309],{"class":145,"line":146},[143,26307,26308],{"class":156},"lerobot-train",[143,26310,25576],{"class":280},[143,26312,26313,26315,26317],{"class":145,"line":35},[143,26314,26166],{"class":280},[143,26316,26169],{"class":163},[143,26318,25576],{"class":280},[143,26320,26321,26324],{"class":145,"line":46},[143,26322,26323],{"class":280},"  --policy.type=act",[143,26325,25576],{"class":280},[143,26327,26328,26331],{"class":145,"line":293},[143,26329,26330],{"class":280},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[143,26332,25576],{"class":280},[143,26334,26335,26338],{"class":145,"line":306},[143,26336,26337],{"class":280},"  --job_name=act_so101_test",[143,26339,25576],{"class":280},[143,26341,26342,26345],{"class":145,"line":319},[143,26343,26344],{"class":280},"  --policy.device=cuda",[143,26346,25576],{"class":280},[143,26348,26349,26352],{"class":145,"line":332},[143,26350,26351],{"class":280},"  --wandb.enable=false",[143,26353,25576],{"class":280},[143,26355,26356,26359],{"class":145,"line":345},[143,26357,26358],{"class":280},"  --policy.repo_id=",[143,26360,26361],{"class":163},"\"Embodied-AI-6\u002Flerobot_new\"\n",[63,26363,26364],{},"参数说明：",[232,26366,26367,26373,26379,26385,26391,26400,26406],{},[22,26368,26369,26372],{},[140,26370,26371],{},"--dataset.repo_id","：训练数据集仓库。",[22,26374,26375,26378],{},[140,26376,26377],{},"--policy.type=act","：策略模型类型为 ACT。",[22,26380,26381,26384],{},[140,26382,26383],{},"--output_dir","：本地训练输出目录。",[22,26386,26387,26390],{},[140,26388,26389],{},"--job_name","：训练任务名称。",[22,26392,26393,26396,26397,25460],{},[140,26394,26395],{},"--policy.device","：训练设备（如 ",[140,26398,26399],{},"cuda",[22,26401,26402,26405],{},[140,26403,26404],{},"--wandb.enable","：是否启用 WandB 可视化。",[22,26407,26408,26411],{},[140,26409,26410],{},"--policy.repo_id","：训练后模型推送目标仓库。",[63,26413,26414],{},[29,26415],{"alt":138,"src":26416},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[954,26418,26279],{},{"title":138,"searchDepth":35,"depth":35,"links":26420},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26292,"description":973},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26427,"title":26428,"body":26429,"description":973,"extension":974,"meta":26516,"navigation":976,"path":26517,"seo":26518,"stem":26519,"__hash__":26520},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26430,"toc":26514},[26431,26434,26437,26504,26512],[10,26432,26428],{"id":26433},"_8-策略部署与自动采集",[63,26435,26436],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[133,26438,26440],{"className":24720,"code":26439,"language":24722,"meta":138,"style":138},"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",[140,26441,26442,26448,26454,26460,26468,26474,26481,26489,26497],{"__ignoreMap":138},[143,26443,26444,26446],{"class":145,"line":146},[143,26445,26107],{"class":156},[143,26447,25576],{"class":280},[143,26449,26450,26452],{"class":145,"line":35},[143,26451,25608],{"class":280},[143,26453,25576],{"class":280},[143,26455,26456,26458],{"class":145,"line":46},[143,26457,25686],{"class":280},[143,26459,25576],{"class":280},[143,26461,26462,26464,26466],{"class":145,"line":293},[143,26463,25815],{"class":280},[143,26465,26134],{"class":163},[143,26467,25576],{"class":280},[143,26469,26470,26472],{"class":145,"line":306},[143,26471,25746],{"class":280},[143,26473,25576],{"class":280},[143,26475,26476,26479],{"class":145,"line":319},[143,26477,26478],{"class":280},"  --display_data=false",[143,26480,25576],{"class":280},[143,26482,26483,26485,26487],{"class":145,"line":332},[143,26484,26166],{"class":280},[143,26486,26169],{"class":163},[143,26488,25576],{"class":280},[143,26490,26491,26493,26495],{"class":145,"line":345},[143,26492,26183],{"class":280},[143,26494,26186],{"class":163},[143,26496,25576],{"class":280},[143,26498,26499,26502],{"class":145,"line":701},[143,26500,26501],{"class":280},"  --policy.path=",[143,26503,26361],{"class":163},[232,26505,26506],{},[22,26507,26508,26511],{},[140,26509,26510],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[954,26513,26279],{},{"title":138,"searchDepth":35,"depth":35,"links":26515},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26428,"description":973},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26522,"title":26523,"body":26524,"description":973,"extension":974,"meta":26553,"navigation":976,"path":26554,"seo":26555,"stem":26556,"__hash__":26557},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26525,"toc":26551},[26526,26530,26533,26539,26542,26548],[10,26527,26529],{"id":26528},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[63,26531,26532],{},"项目地址：",[63,26534,26535],{},[67,26536,26537],{"href":26537,"rel":26538},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[71],[63,26540,26541],{},"参考教程：",[63,26543,26544],{},[67,26545,26546],{"href":26546,"rel":26547},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[71],[63,26549,26550],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":138,"searchDepth":35,"depth":35,"links":26552},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26523,"description":973},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26559,"title":26560,"body":26561,"description":26565,"extension":974,"meta":26566,"navigation":976,"path":26567,"seo":26568,"stem":26569,"__hash__":26570},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26562,"toc":26563},[],{"title":138,"searchDepth":35,"depth":35,"links":26564},[],"act复现",{"category":24276},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26560,"description":26565},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26572,"title":26573,"body":26574,"description":138,"extension":974,"meta":26876,"navigation":976,"path":26877,"seo":26878,"stem":26879,"__hash__":26880},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26575,"toc":26868},[26576,26579,26583,26593,26600,26607,26610,26617,26620,26623,26627,26639,26643,26689,26692,26695,26698,26701,26704,26708,26746,26752,26756,26810,26815,26818,26821,26826,26829,26834,26837,26840,26844,26847,26850,26854],[10,26577,26573],{"id":26578},"_1简介",[58,26580,26582],{"id":26581},"_11什么是-docker","1.1什么是 Docker？",[63,26584,26585,26586,26589,26590],{},"Docker 是一个开源的 ",[25,26587,26588],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[25,26591,26592],{},"一次构建，到处运行。",[63,26594,26595,26596,26599],{},"“ ",[25,26597,26598],{},"一次构建，到处运行"," ”也就是说：",[19,26601,26602],{},[22,26603,26604],{},[25,26605,26606],{},"之前：",[63,26608,26609],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[19,26611,26612],{},[22,26613,26614],{},[25,26615,26616],{},"使用docker后：",[63,26618,26619],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[63,26621,26622],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[58,26624,26626],{"id":26625},"_12它是怎么工作的","1.2.它是怎么工作的？",[232,26628,26629,26632],{},[22,26630,26631],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[22,26633,26634,26635,26638],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[25,26636,26637],{},"无论在哪运行都一样稳定"," 。",[58,26640,26642],{"id":26641},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[1181,26644,26645,26655],{},[1184,26646,26647],{},[1187,26648,26649,26652],{},[1190,26650,26651],{"align":24634},"概念",[1190,26653,26654],{"align":24634},"解释",[1227,26656,26657,26665,26673,26681],{},[1187,26658,26659,26662],{},[1232,26660,26661],{"align":24634},"镜像",[1232,26663,26664],{"align":24634},"Image，运行容器的模板，像是一个应用快照",[1187,26666,26667,26670],{},[1232,26668,26669],{"align":24634},"容器",[1232,26671,26672],{"align":24634},"Container，运行中的镜像实例，有自己的文件系统、网络等",[1187,26674,26675,26678],{},[1232,26676,26677],{"align":24634},"Dockerfile",[1232,26679,26680],{"align":24634},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[1187,26682,26683,26686],{},[1232,26684,26685],{"align":24634},"仓库",[1232,26687,26688],{"align":24634},"Registry，存放镜像的地方，比如 Docker Hub",[63,26690,26691],{},"抽象化理解:",[63,26693,26694],{},"Docker镜像≈C++类",[63,26696,26697],{},"Docker容器≈C++类实例(即对象)",[63,26699,26700],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[63,26702,26703],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[58,26705,26707],{"id":26706},"_14类比理解","1.4.类比理解",[1181,26709,26710,26720],{},[1184,26711,26712],{},[1187,26713,26714,26717],{},[1190,26715,26716],{"align":24634},"传统部署",[1190,26718,26719],{"align":24634},"Docker部署",[1227,26721,26722,26730,26738],{},[1187,26723,26724,26727],{},[1232,26725,26726],{"align":24634},"手动安装依赖、调试版本不一致问题",[1232,26728,26729],{"align":24634},"一次打包环境和代码",[1187,26731,26732,26735],{},[1232,26733,26734],{"align":24634},"程序“裸奔”跑在系统上",[1232,26736,26737],{"align":24634},"程序“穿着容器”隔离运行",[1187,26739,26740,26743],{},[1232,26741,26742],{"align":24634},"容易“在我电脑上能跑”",[1232,26744,26745],{"align":24634},"保证“无论在哪都能跑”",[63,26747,26748,26749],{},"就像快递包裹： ",[25,26750,26751],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[58,26753,26755],{"id":26754},"_15docker-的核心优势","1.5.Docker 的核心优势",[1181,26757,26758,26768],{},[1184,26759,26760],{},[1187,26761,26762,26765],{},[1190,26763,26764],{"align":24634},"优势",[1190,26766,26767],{"align":24634},"说明",[1227,26769,26770,26778,26786,26794,26802],{},[1187,26771,26772,26775],{},[1232,26773,26774],{"align":24634},"轻量级",[1232,26776,26777],{"align":24634},"基于系统内核共享，启动速度快，占资源少",[1187,26779,26780,26783],{},[1232,26781,26782],{"align":24634},"跨平台",[1232,26784,26785],{"align":24634},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[1187,26787,26788,26791],{},[1232,26789,26790],{"align":24634},"易于迁移部署",[1232,26792,26793],{"align":24634},"应用和环境一起封装，不怕依赖不一致",[1187,26795,26796,26799],{},[1232,26797,26798],{"align":24634},"易于版本控制",[1232,26800,26801],{"align":24634},"镜像版本可控，支持回滚",[1187,26803,26804,26807],{},[1232,26805,26806],{"align":24634},"生态丰富",[1232,26808,26809],{"align":24634},"Docker Hub 上有成千上万的现成镜像可用",[19,26811,26812],{},[22,26813,26814],{},"在Linux上可以几乎实现无性能损失。",[63,26816,26817],{},"docker里的发行版和本机共用Linux内核。",[63,26819,26820],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[19,26822,26823],{},[22,26824,26825],{},"可以快速部署在绝大多数Linux发行版",[63,26827,26828],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[19,26830,26831],{},[22,26832,26833],{},"配置环境简单",[63,26835,26836],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[63,26838,26839],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[19,26841,26842],{},[22,26843,26806],{},[63,26845,26846],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[63,26848,26849],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[58,26851,26853],{"id":26852},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[232,26855,26856,26859,26862,26865],{},[22,26857,26858],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[22,26860,26861],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[22,26863,26864],{},"微服务架构：每个服务一个容器，灵活组合",[22,26866,26867],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":138,"searchDepth":35,"depth":35,"links":26869},[26870,26871,26872,26873,26874,26875],{"id":26581,"depth":46,"text":26582},{"id":26625,"depth":46,"text":26626},{"id":26641,"depth":46,"text":26642},{"id":26706,"depth":46,"text":26707},{"id":26754,"depth":46,"text":26755},{"id":26852,"depth":46,"text":26853},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26573,"description":138},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26882,"title":26883,"body":26884,"description":138,"extension":974,"meta":27617,"navigation":976,"path":27618,"seo":27619,"stem":27620,"__hash__":27621},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26885,"toc":27612},[26886,26889,26893,26896,26899,26905,26911,26915,26924,26927,26984,26987,27038,27041,27124,27127,27164,27168,27179,27192,27199,27202,27282,27285,27335,27338,27361,27365,27372,27375,27391,27397,27400,27416,27422,27425,27441,27455,27461,27481,27487,27490,27502,27508,27511,27525,27531,27534,27554,27559,27562,27565,27569,27572,27575,27578,27585,27588,27591,27594,27599,27604,27609],[10,26887,26883],{"id":26888},"_2安装docker",[58,26890,26892],{"id":26891},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[63,26894,26895],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[63,26897,26898],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[63,26900,26901],{},[67,26902,26903],{"href":26903,"rel":26904},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[71],[63,26906,26907],{},[67,26908,26909],{"href":26909,"rel":26910},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[71],[22896,26912,26914],{"id":26913},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[63,26916,26917,26918,26923],{},"以下内容根据 ",[67,26919,26922],{"href":26920,"rel":26921},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[71],"官方文档"," 修改而来。",[63,26925,26926],{},"如果你过去安装过 docker，先删掉：",[133,26928,26930],{"className":24720,"code":26929,"language":24722,"meta":138,"style":138},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[140,26931,26932],{"__ignoreMap":138},[143,26933,26934,26936,26939,26942,26945,26948,26951,26954,26957,26960,26963,26966,26969,26972,26975,26978,26981],{"class":145,"line":146},[143,26935,3925],{"class":755},[143,26937,26938],{"class":149}," pkg ",[143,26940,26941],{"class":755},"in",[143,26943,26944],{"class":163}," docker.io",[143,26946,26947],{"class":163}," docker-doc",[143,26949,26950],{"class":163}," docker-compose",[143,26952,26953],{"class":163}," docker-compose-v2",[143,26955,26956],{"class":163}," podman-docker",[143,26958,26959],{"class":163}," containerd",[143,26961,26962],{"class":163}," runc",[143,26964,26965],{"class":149},"; ",[143,26967,26968],{"class":755},"do",[143,26970,26971],{"class":156}," sudo",[143,26973,26974],{"class":163}," apt-get",[143,26976,26977],{"class":163}," remove",[143,26979,26980],{"class":149}," $pkg; ",[143,26982,26983],{"class":755},"done\n",[63,26985,26986],{},"首先安装依赖和GPG：",[133,26988,26992],{"className":26989,"code":26990,"language":26991,"meta":138,"style":138},"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",[140,26993,26994,26999,27004,27009,27014,27019,27024,27028,27033],{"__ignoreMap":138},[143,26995,26996],{"class":145,"line":146},[143,26997,26998],{},"# Add Docker's official GPG key:\n",[143,27000,27001],{"class":145,"line":35},[143,27002,27003],{},"sudo apt-get update\n",[143,27005,27006],{"class":145,"line":46},[143,27007,27008],{},"sudo apt-get install ca-certificates curl\n",[143,27010,27011],{"class":145,"line":293},[143,27012,27013],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[143,27015,27016],{"class":145,"line":306},[143,27017,27018],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[143,27020,27021],{"class":145,"line":319},[143,27022,27023],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[143,27025,27026],{"class":145,"line":332},[143,27027,3300],{"emptyLinePlaceholder":976},[143,27029,27030],{"class":145,"line":345},[143,27031,27032],{},"# 如果上面这行报错就弄下面这行\n",[143,27034,27035],{"class":145,"line":701},[143,27036,27037],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[63,27039,27040],{},"信任 Docker 的 GPG 公钥并添加仓库：",[133,27042,27044],{"className":24720,"code":27043,"language":24722,"meta":138,"style":138},"# 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",[140,27045,27046,27051,27057,27074,27107],{"__ignoreMap":138},[143,27047,27048],{"class":145,"line":146},[143,27049,27050],{"class":266},"# Add the repository to Apt sources:\n",[143,27052,27053,27055],{"class":145,"line":35},[143,27054,26023],{"class":280},[143,27056,25576],{"class":280},[143,27058,27059,27062,27065,27068,27071],{"class":145,"line":46},[143,27060,27061],{"class":163},"  \"deb [arch=$(",[143,27063,27064],{"class":156},"dpkg",[143,27066,27067],{"class":280}," --print-architecture",[143,27069,27070],{"class":163},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[143,27072,27073],{"class":280},"\\\n",[143,27075,27076,27079,27081,27083,27086,27089,27091,27093,27096,27098,27100,27103,27105],{"class":145,"line":293},[143,27077,27078],{"class":163},"  \"",[143,27080,25997],{"class":149},[143,27082,1599],{"class":280},[143,27084,27085],{"class":163}," \u002Fetc\u002Fos-release",[143,27087,27088],{"class":149}," && ",[143,27090,26023],{"class":280},[143,27092,10624],{"class":163},[143,27094,27095],{"class":149},"$VERSION_CODENAME",[143,27097,1292],{"class":163},[143,27099,1470],{"class":149},[143,27101,27102],{"class":163},"\" stable\"",[143,27104,26007],{"class":755},[143,27106,25576],{"class":280},[143,27108,27109,27112,27115,27118,27121],{"class":145,"line":306},[143,27110,27111],{"class":156},"  sudo",[143,27113,27114],{"class":163}," tee",[143,27116,27117],{"class":163}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[143,27119,27120],{"class":755}," >",[143,27122,27123],{"class":163}," \u002Fdev\u002Fnull\n",[63,27125,27126],{},"最后安装",[133,27128,27130],{"className":24720,"code":27129,"language":24722,"meta":138,"style":138},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[140,27131,27132,27141],{"__ignoreMap":138},[143,27133,27134,27136,27138],{"class":145,"line":146},[143,27135,25474],{"class":156},[143,27137,26974],{"class":163},[143,27139,27140],{"class":163}," update\n",[143,27142,27143,27145,27147,27149,27152,27155,27158,27161],{"class":145,"line":35},[143,27144,25474],{"class":156},[143,27146,26974],{"class":163},[143,27148,24732],{"class":163},[143,27150,27151],{"class":163}," docker-ce",[143,27153,27154],{"class":163}," docker-ce-cli",[143,27156,27157],{"class":163}," containerd.io",[143,27159,27160],{"class":163}," docker-buildx-plugin",[143,27162,27163],{"class":163}," docker-compose-plugin\n",[22896,27165,27167],{"id":27166},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[63,27169,27170,27171,27174,27175,27178],{},"查看自己自己包管理工具版本（dnf是 ",[25,27172,27173],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[25,27176,27177],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[133,27180,27182],{"className":24720,"code":27181,"language":24722,"meta":138,"style":138},"dnf --version\n",[140,27183,27184],{"__ignoreMap":138},[143,27185,27186,27189],{"class":145,"line":146},[143,27187,27188],{"class":156},"dnf",[143,27190,27191],{"class":280}," --version\n",[63,27193,26917,27194,27198],{},[67,27195,26922],{"href":27196,"rel":27197},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[71]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[63,27200,27201],{},"如果你之前安装过 docker，请先删掉",[133,27203,27205],{"className":24720,"code":27204,"language":24722,"meta":138,"style":138},"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",[140,27206,27207,27221,27228,27235,27242,27249,27256,27263,27270,27277],{"__ignoreMap":138},[143,27208,27209,27211,27214,27216,27219],{"class":145,"line":146},[143,27210,25474],{"class":156},[143,27212,27213],{"class":163}," dnf",[143,27215,26977],{"class":163},[143,27217,27218],{"class":163}," docker",[143,27220,25576],{"class":280},[143,27222,27223,27226],{"class":145,"line":35},[143,27224,27225],{"class":163},"                  docker-client",[143,27227,25576],{"class":280},[143,27229,27230,27233],{"class":145,"line":46},[143,27231,27232],{"class":163},"                  docker-client-latest",[143,27234,25576],{"class":280},[143,27236,27237,27240],{"class":145,"line":293},[143,27238,27239],{"class":163},"                  docker-common",[143,27241,25576],{"class":280},[143,27243,27244,27247],{"class":145,"line":306},[143,27245,27246],{"class":163},"                  docker-latest",[143,27248,25576],{"class":280},[143,27250,27251,27254],{"class":145,"line":319},[143,27252,27253],{"class":163},"                  docker-latest-logrotate",[143,27255,25576],{"class":280},[143,27257,27258,27261],{"class":145,"line":332},[143,27259,27260],{"class":163},"                  docker-logrotate",[143,27262,25576],{"class":280},[143,27264,27265,27268],{"class":145,"line":345},[143,27266,27267],{"class":163},"                  docker-selinux",[143,27269,25576],{"class":280},[143,27271,27272,27275],{"class":145,"line":701},[143,27273,27274],{"class":163},"                  docker-engine-selinux",[143,27276,25576],{"class":280},[143,27278,27279],{"class":145,"line":707},[143,27280,27281],{"class":163},"                  docker-engine\n",[63,27283,27284],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[133,27286,27288],{"className":24720,"code":27287,"language":24722,"meta":138,"style":138},"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",[140,27289,27290,27304,27319],{"__ignoreMap":138},[143,27291,27292,27294,27296,27299,27301],{"class":145,"line":146},[143,27293,25474],{"class":156},[143,27295,27213],{"class":163},[143,27297,27298],{"class":280}," -y",[143,27300,24732],{"class":163},[143,27302,27303],{"class":163}," dnf-plugins-core\n",[143,27305,27306,27308,27310,27313,27316],{"class":145,"line":35},[143,27307,25474],{"class":156},[143,27309,27213],{"class":163},[143,27311,27312],{"class":163}," config-manager",[143,27314,27315],{"class":163}," addrepo",[143,27317,27318],{"class":280}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[143,27320,27321,27323,27326,27329,27332],{"class":145,"line":46},[143,27322,25474],{"class":156},[143,27324,27325],{"class":163}," sed",[143,27327,27328],{"class":280}," -i",[143,27330,27331],{"class":163}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[143,27333,27334],{"class":163}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[63,27336,27337],{},"最后安装：",[133,27339,27341],{"className":24720,"code":27340,"language":24722,"meta":138,"style":138},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[140,27342,27343],{"__ignoreMap":138},[143,27344,27345,27347,27349,27351,27353,27355,27357,27359],{"class":145,"line":146},[143,27346,25474],{"class":156},[143,27348,27213],{"class":163},[143,27350,24732],{"class":163},[143,27352,27151],{"class":163},[143,27354,27154],{"class":163},[143,27356,27157],{"class":163},[143,27358,27160],{"class":163},[143,27360,27163],{"class":163},[58,27362,27364],{"id":27363},"_22配置环境","2.2.配置环境",[22896,27366,27368,27371],{"id":27367},"_221检查-docker-服务状态",[25,27369,27370],{},"2.2.1.检查 Docker 服务状态"," ：",[63,27373,27374],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[133,27376,27378],{"className":24720,"code":27377,"language":24722,"meta":138,"style":138},"systemctl status docker\n",[140,27379,27380],{"__ignoreMap":138},[143,27381,27382,27385,27388],{"class":145,"line":146},[143,27383,27384],{"class":156},"systemctl",[143,27386,27387],{"class":163}," status",[143,27389,27390],{"class":163}," docker\n",[22896,27392,27394,27371],{"id":27393},"_222启动-docker-服务",[25,27395,27396],{},"2.2.2.启动 Docker 服务",[63,27398,27399],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[133,27401,27403],{"className":24720,"code":27402,"language":24722,"meta":138,"style":138},"sudo systemctl start docker\n",[140,27404,27405],{"__ignoreMap":138},[143,27406,27407,27409,27412,27414],{"class":145,"line":146},[143,27408,25474],{"class":156},[143,27410,27411],{"class":163}," systemctl",[143,27413,5084],{"class":163},[143,27415,27390],{"class":163},[22896,27417,27419,27371],{"id":27418},"_223设置-docker-开机自启",[25,27420,27421],{},"2.2.3.设置 Docker 开机自启",[63,27423,27424],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[133,27426,27428],{"className":24720,"code":27427,"language":24722,"meta":138,"style":138},"sudo systemctl enable docker\n",[140,27429,27430],{"__ignoreMap":138},[143,27431,27432,27434,27436,27439],{"class":145,"line":146},[143,27433,25474],{"class":156},[143,27435,27411],{"class":163},[143,27437,27438],{"class":163}," enable",[143,27440,27390],{"class":163},[22896,27442,27444,497,27447,497,27452,27371],{"id":27443},"_224将用户添加到-docker-组",[25,27445,27446],{},"2.2.4.将用户添加到",[25,27448,27449],{},[140,27450,27451],{},"docker",[25,27453,27454],{},"组",[63,27456,27457,27458,27460],{},"使用以下命令将当前用户添加到 ",[140,27459,27451],{}," 组：",[133,27462,27464],{"className":24720,"code":27463,"language":24722,"meta":138,"style":138},"sudo usermod -aG docker $USER\n",[140,27465,27466],{"__ignoreMap":138},[143,27467,27468,27470,27473,27476,27478],{"class":145,"line":146},[143,27469,25474],{"class":156},[143,27471,27472],{"class":163}," usermod",[143,27474,27475],{"class":280}," -aG",[143,27477,27218],{"class":163},[143,27479,27480],{"class":149}," $USER\n",[22896,27482,27484,27371],{"id":27483},"_225退出并重新登录",[25,27485,27486],{},"2.2.5.退出并重新登录",[63,27488,27489],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[133,27491,27493],{"className":24720,"code":27492,"language":24722,"meta":138,"style":138},"newgrp docker\n",[140,27494,27495],{"__ignoreMap":138},[143,27496,27497,27500],{"class":145,"line":146},[143,27498,27499],{"class":156},"newgrp",[143,27501,27390],{"class":163},[22896,27503,27505,27371],{"id":27504},"_226重新启动-docker-服务如果需要",[25,27506,27507],{},"2.2.6.重新启动 Docker 服务（如果需要）",[63,27509,27510],{},"确保 Docker 服务正在运行，可以使用以下命令：",[133,27512,27513],{"className":24720,"code":27402,"language":24722,"meta":138,"style":138},[140,27514,27515],{"__ignoreMap":138},[143,27516,27517,27519,27521,27523],{"class":145,"line":146},[143,27518,25474],{"class":156},[143,27520,27411],{"class":163},[143,27522,5084],{"class":163},[143,27524,27390],{"class":163},[22896,27526,27528,27371],{"id":27527},"_227重启电脑后检查-docker-服务状态",[25,27529,27530],{},"2.2.7.重启电脑后检查 Docker 服务状态",[63,27532,27533],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[133,27535,27537],{"className":24720,"code":27536,"language":24722,"meta":138,"style":138},"sudo reboot\nsystemctl status docker\n",[140,27538,27539,27546],{"__ignoreMap":138},[143,27540,27541,27543],{"class":145,"line":146},[143,27542,25474],{"class":156},[143,27544,27545],{"class":163}," reboot\n",[143,27547,27548,27550,27552],{"class":145,"line":35},[143,27549,27384],{"class":156},[143,27551,27387],{"class":163},[143,27553,27390],{"class":163},[63,27555,27556],{},[29,27557],{"alt":138,"src":27558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[63,27560,27561],{},"第三行显示enabled说明开机自启动成功",[63,27563,27564],{},"按q退出",[58,27566,27568],{"id":27567},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[63,27570,27571],{},"优先使用linux来使用docker是比较好的",[63,27573,27574],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[63,27576,27577],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[63,27579,27580,27581],{},"官方下载安装:",[67,27582,27583],{"href":27583,"rel":27584},"https:\u002F\u002Fwww.docker.com\u002F",[71],[63,27586,27587],{},"Windows的Docker显卡直通与USB直通:",[63,27589,27590],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[63,27592,27593],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[63,27595,27596],{},[29,27597],{"alt":138,"src":27598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[63,27600,27601],{},[29,27602],{"alt":138,"src":27603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[63,27605,27606],{},[29,27607],{"alt":138,"src":27608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[954,27610,27611],{},"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":138,"searchDepth":35,"depth":35,"links":27613},[27614,27615,27616],{"id":26891,"depth":46,"text":26892},{"id":27363,"depth":46,"text":27364},{"id":27567,"depth":46,"text":27568},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26883,"description":138},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27623,"title":27624,"body":27625,"description":27632,"extension":974,"meta":28325,"navigation":976,"path":28326,"seo":28327,"stem":28328,"__hash__":28329},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27626,"toc":28319},[27627,27630,27633,27637,27642,27647,27650,27678,27683,27692,27695,27700,27704,27711,27716,27722,27726,27729,27733,27738,27830,27835,27853,27858,27879,27884,27900,27904,27909,27938,27943,27989,27994,28038,28046,28063,28068,28084,28089,28103,28106,28109,28112,28115,28144,28147,28152,28156,28159,28162,28168,28171,28174,28177,28239,28246,28251,28254,28272,28276,28279,28296,28299,28302,28316],[10,27628,27624],{"id":27629},"_3docker直通",[63,27631,27632],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[58,27634,27636],{"id":27635},"_31usb直通","3.1.USB直通",[63,27638,27639],{},[29,27640],{"alt":138,"src":27641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[19,27643,27644],{},[22,27645,27646],{},"方法一(不是很推荐新手)：",[63,27648,27649],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[133,27651,27653],{"className":24720,"code":27652,"language":24722,"meta":138,"style":138},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[140,27654,27655,27663,27668],{"__ignoreMap":138},[143,27656,27657,27660],{"class":145,"line":146},[143,27658,27659],{"class":156},"ls",[143,27661,27662],{"class":163}," \u002Fdev\n",[143,27664,27665],{"class":145,"line":35},[143,27666,27667],{"class":266},"#例如\n",[143,27669,27670,27673,27675],{"class":145,"line":46},[143,27671,27672],{"class":149},"--device",[143,27674,160],{"class":755},[143,27676,27677],{"class":163},"\u002Fdev\u002Ftty_USB0\n",[19,27679,27680],{"start":35},[22,27681,27682],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[133,27684,27686],{"className":24720,"code":27685,"language":24722,"meta":138,"style":138},"--privileged\n",[140,27687,27688],{"__ignoreMap":138},[143,27689,27690],{"class":145,"line":146},[143,27691,27685],{"class":156},[63,27693,27694],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[63,27696,27697],{},[29,27698],{"alt":138,"src":27699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[58,27701,27703],{"id":27702},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[63,27705,27706,27707,27710],{},"NVIDIA Container Toolkit使用户 ",[25,27708,27709],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[63,27712,27713],{},[29,27714],{"alt":138,"src":27715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[63,27717,27718],{},[67,27719,27720],{"href":27720,"rel":27721},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[71],[22896,27723,27725],{"id":27724},"_321安装","3.2.1.安装",[63,27727,27728],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23808,27730,27732],{"id":27731},"_3211ubuntu","3.2.1.1.Ubuntu",[19,27734,27735],{},[22,27736,27737],{},"配置存储库 并更新",[133,27739,27741],{"className":24720,"code":27740,"language":24722,"meta":138,"style":138},"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",[140,27742,27743,27772,27792,27804,27816,27822],{"__ignoreMap":138},[143,27744,27745,27748,27751,27754,27756,27758,27761,27764,27767,27770],{"class":145,"line":146},[143,27746,27747],{"class":156},"curl",[143,27749,27750],{"class":280}," -fsSL",[143,27752,27753],{"class":163}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[143,27755,26007],{"class":755},[143,27757,26971],{"class":156},[143,27759,27760],{"class":163}," gpg",[143,27762,27763],{"class":280}," --dearmor",[143,27765,27766],{"class":280}," -o",[143,27768,27769],{"class":163}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[143,27771,25576],{"class":280},[143,27773,27774,27777,27779,27782,27785,27788,27790],{"class":145,"line":35},[143,27775,27776],{"class":149},"  && ",[143,27778,27747],{"class":156},[143,27780,27781],{"class":280}," -s",[143,27783,27784],{"class":280}," -L",[143,27786,27787],{"class":163}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[143,27789,26007],{"class":755},[143,27791,25576],{"class":280},[143,27793,27794,27797,27800,27802],{"class":145,"line":46},[143,27795,27796],{"class":156},"    sed",[143,27798,27799],{"class":163}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[143,27801,26007],{"class":755},[143,27803,25576],{"class":280},[143,27805,27806,27809,27811,27814],{"class":145,"line":293},[143,27807,27808],{"class":156},"    sudo",[143,27810,27114],{"class":163},[143,27812,27813],{"class":163}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[143,27815,25576],{"class":280},[143,27817,27818,27820],{"class":145,"line":306},[143,27819,27776],{"class":149},[143,27821,27073],{"class":280},[143,27823,27824,27826,27828],{"class":145,"line":319},[143,27825,27808],{"class":156},[143,27827,26974],{"class":163},[143,27829,27140],{"class":163},[19,27831,27832],{"start":35},[22,27833,27834],{},"安装nvidia-docker2",[133,27836,27838],{"className":24720,"code":27837,"language":24722,"meta":138,"style":138},"sudo apt-get install -y nvidia-docker2\n",[140,27839,27840],{"__ignoreMap":138},[143,27841,27842,27844,27846,27848,27850],{"class":145,"line":146},[143,27843,25474],{"class":156},[143,27845,26974],{"class":163},[143,27847,24732],{"class":163},[143,27849,27298],{"class":280},[143,27851,27852],{"class":163}," nvidia-docker2\n",[19,27854,27855],{"start":46},[22,27856,27857],{},"使用nvidia-ctk命令配置container runtime",[133,27859,27861],{"className":24720,"code":27860,"language":24722,"meta":138,"style":138},"sudo nvidia-ctk runtime configure --runtime=docker\n",[140,27862,27863],{"__ignoreMap":138},[143,27864,27865,27867,27870,27873,27876],{"class":145,"line":146},[143,27866,25474],{"class":156},[143,27868,27869],{"class":163}," nvidia-ctk",[143,27871,27872],{"class":163}," runtime",[143,27874,27875],{"class":163}," configure",[143,27877,27878],{"class":280}," --runtime=docker\n",[19,27880,27881],{"start":293},[22,27882,27883],{},"重启docker服务:",[133,27885,27887],{"className":24720,"code":27886,"language":24722,"meta":138,"style":138},"sudo systemctl restart docker\n",[140,27888,27889],{"__ignoreMap":138},[143,27890,27891,27893,27895,27898],{"class":145,"line":146},[143,27892,25474],{"class":156},[143,27894,27411],{"class":163},[143,27896,27897],{"class":163}," restart",[143,27899,27390],{"class":163},[23808,27901,27903],{"id":27902},"_3212fedora","3.2.1.2.Fedora",[19,27905,27906],{},[22,27907,27908],{},"配置存储库",[133,27910,27912],{"className":24720,"code":27911,"language":24722,"meta":138,"style":138},"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",[140,27913,27914,27929],{"__ignoreMap":138},[143,27915,27916,27918,27920,27922,27925,27927],{"class":145,"line":146},[143,27917,27747],{"class":156},[143,27919,27781],{"class":280},[143,27921,27784],{"class":280},[143,27923,27924],{"class":163}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[143,27926,26007],{"class":755},[143,27928,25576],{"class":280},[143,27930,27931,27933,27935],{"class":145,"line":35},[143,27932,25474],{"class":156},[143,27934,27114],{"class":163},[143,27936,27937],{"class":163}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[19,27939,27940],{"start":35},[22,27941,27942],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[133,27944,27946],{"className":24720,"code":27945,"language":24722,"meta":138,"style":138},"# 如果是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",[140,27947,27948,27953,27967,27971,27976],{"__ignoreMap":138},[143,27949,27950],{"class":145,"line":146},[143,27951,27952],{"class":266},"# 如果是RHEL或者Rocky（DNF4）\n",[143,27954,27955,27957,27959,27961,27964],{"class":145,"line":35},[143,27956,25474],{"class":156},[143,27958,27213],{"class":163},[143,27960,27312],{"class":163},[143,27962,27963],{"class":280}," --add-repo",[143,27965,27966],{"class":163}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[143,27968,27969],{"class":145,"line":46},[143,27970,3300],{"emptyLinePlaceholder":976},[143,27972,27973],{"class":145,"line":293},[143,27974,27975],{"class":266},"# 如果是Feodra41+（DNF5）\n",[143,27977,27978,27980,27982,27984,27986],{"class":145,"line":306},[143,27979,25474],{"class":156},[143,27981,27213],{"class":163},[143,27983,27312],{"class":163},[143,27985,27315],{"class":163},[143,27987,27988],{"class":280}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[19,27990,27991],{"start":46},[22,27992,27993],{},"安装NVIDIA Container Toolki包",[133,27995,27997],{"className":24720,"code":27996,"language":24722,"meta":138,"style":138},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[140,27998,27999,28004,28017,28021,28026],{"__ignoreMap":138},[143,28000,28001],{"class":145,"line":146},[143,28002,28003],{"class":266},"# 如果是RHEL或者Rocky\n",[143,28005,28006,28008,28010,28012,28014],{"class":145,"line":35},[143,28007,25474],{"class":156},[143,28009,27213],{"class":163},[143,28011,24732],{"class":163},[143,28013,27298],{"class":280},[143,28015,28016],{"class":163}," nvidia-container-toolkit\n",[143,28018,28019],{"class":145,"line":46},[143,28020,3300],{"emptyLinePlaceholder":976},[143,28022,28023],{"class":145,"line":293},[143,28024,28025],{"class":266},"# 如果是Fedora\n",[143,28027,28028,28030,28032,28034,28036],{"class":145,"line":306},[143,28029,25474],{"class":156},[143,28031,27213],{"class":163},[143,28033,24732],{"class":163},[143,28035,27298],{"class":280},[143,28037,28016],{"class":163},[19,28039,28040],{"start":293},[22,28041,28042,28043,28045],{},"安装nvidia-docker2 ： 在Fedora上使用",[140,28044,27188],{},"进行安装",[133,28047,28049],{"className":24720,"code":28048,"language":24722,"meta":138,"style":138},"sudo dnf install -y nvidia-docker2\n",[140,28050,28051],{"__ignoreMap":138},[143,28052,28053,28055,28057,28059,28061],{"class":145,"line":146},[143,28054,25474],{"class":156},[143,28056,27213],{"class":163},[143,28058,24732],{"class":163},[143,28060,27298],{"class":280},[143,28062,27852],{"class":163},[19,28064,28065],{"start":306},[22,28066,28067],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[133,28069,28070],{"className":24720,"code":27860,"language":24722,"meta":138,"style":138},[140,28071,28072],{"__ignoreMap":138},[143,28073,28074,28076,28078,28080,28082],{"class":145,"line":146},[143,28075,25474],{"class":156},[143,28077,27869],{"class":163},[143,28079,27872],{"class":163},[143,28081,27875],{"class":163},[143,28083,27878],{"class":280},[19,28085,28086],{"start":319},[22,28087,28088],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[133,28090,28091],{"className":24720,"code":27886,"language":24722,"meta":138,"style":138},[140,28092,28093],{"__ignoreMap":138},[143,28094,28095,28097,28099,28101],{"class":145,"line":146},[143,28096,25474],{"class":156},[143,28098,27411],{"class":163},[143,28100,27897],{"class":163},[143,28102,27390],{"class":163},[63,28104,28105],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[63,28107,28108],{},"方法：",[63,28110,28111],{},"1️⃣nvidia-smi",[63,28113,28114],{},"2️⃣运行nvidia cuda 容器进行测试",[133,28116,28118],{"className":24720,"code":28117,"language":24722,"meta":138,"style":138},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[140,28119,28120],{"__ignoreMap":138},[143,28121,28122,28124,28126,28129,28132,28135,28138,28141],{"class":145,"line":146},[143,28123,25474],{"class":156},[143,28125,27218],{"class":163},[143,28127,28128],{"class":163}," run",[143,28130,28131],{"class":280}," --rm",[143,28133,28134],{"class":280}," --gpus",[143,28136,28137],{"class":163}," all",[143,28139,28140],{"class":163}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[143,28142,28143],{"class":163}," nvidia-smi\n",[63,28145,28146],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[63,28148,28149],{},[29,28150],{"alt":138,"src":28151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[58,28153,28155],{"id":28154},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[63,28157,28158],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[63,28160,28161],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[63,28163,28164],{},[67,28165,28166],{"href":28166,"rel":28167},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[71],[63,28169,28170],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[63,28172,28173],{},"我们只需要找到对应的Docker镜像当底包即可。",[63,28175,28176],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[1181,28178,28179,28195],{},[1184,28180,28181],{},[1187,28182,28183,28186,28189,28192],{},[1190,28184,28185],{"align":24634},"镜像类型",[1190,28187,28188],{"align":24634},"适用场景",[1190,28190,28191],{"align":24634},"示例标签",[1190,28193,28194],{"align":24634},"大小",[1227,28196,28197,28211,28225],{},[1187,28198,28199,28202,28205,28208],{},[1232,28200,28201],{"align":24634},"base",[1232,28203,28204],{"align":24634},"仅需 CUDA 运行时库",[1232,28206,28207],{"align":24634},"12.4.0-base-ubuntu22.04",[1232,28209,28210],{"align":24634},"~240MB",[1187,28212,28213,28216,28219,28222],{},[1232,28214,28215],{"align":24634},"runtime",[1232,28217,28218],{"align":24634},"部署编译后的应用（含数学库）",[1232,28220,28221],{"align":24634},"12.4.0-runtime-ubuntu22.04",[1232,28223,28224],{"align":24634},"~2GB",[1187,28226,28227,28230,28233,28236],{},[1232,28228,28229],{"align":24634},"devel",[1232,28231,28232],{"align":24634},"开发环境（含编译工具）",[1232,28234,28235],{"align":24634},"12.4.0-devel-ubuntu22.04",[1232,28237,28238],{"align":24634},"~3GB",[63,28240,28241,28242,28245],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[140,28243,28244],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[63,28247,28248],{},[29,28249],{"alt":138,"src":28250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[63,28252,28253],{},"在dockerfile里就可以开头这么写：",[133,28255,28257],{"className":24720,"code":28256,"language":24722,"meta":138,"style":138},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[140,28258,28259,28264],{"__ignoreMap":138},[143,28260,28261],{"class":145,"line":146},[143,28262,28263],{"class":266},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[143,28265,28266,28269],{"class":145,"line":35},[143,28267,28268],{"class":156},"FROM",[143,28270,28271],{"class":163}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[58,28273,28275],{"id":28274},"_34配置以太网","3.4.配置以太网",[63,28277,28278],{},"指定网络模式",[133,28280,28282],{"className":24720,"code":28281,"language":24722,"meta":138,"style":138},"--net=host \\\n",[140,28283,28284],{"__ignoreMap":138},[143,28285,28286,28289,28291,28294],{"class":145,"line":146},[143,28287,28288],{"class":149},"--net",[143,28290,160],{"class":755},[143,28292,28293],{"class":163},"host",[143,28295,25576],{"class":156},[63,28297,28298],{},"启动参数里加上这行即可。具体在下方",[63,28300,28301],{},"--net选项：指定网络模式，该选项有以下参数可选：",[232,28303,28304,28307,28310,28313],{},[22,28305,28306],{},"--net=bridge:默认选项，表示连接到默认的网桥",[22,28308,28309],{},"--net=host:容器使用宿主机的网络",[22,28311,28312],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[22,28314,28315],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[954,28317,28318],{},"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":138,"searchDepth":35,"depth":35,"links":28320},[28321,28322,28323,28324],{"id":27635,"depth":46,"text":27636},{"id":27702,"depth":46,"text":27703},{"id":28154,"depth":46,"text":28155},{"id":28274,"depth":46,"text":28275},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27624,"description":27632},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28331,"title":28332,"body":28333,"description":28340,"extension":974,"meta":28346,"navigation":976,"path":28347,"seo":28348,"stem":28349,"__hash__":28350},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28334,"toc":28344},[28335,28338,28341],[10,28336,28332],{"id":28337},"_4dockerhub换源",[63,28339,28340],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[63,28342,28343],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":138,"searchDepth":35,"depth":35,"links":28345},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28332,"description":28340},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28352,"title":28353,"body":28354,"description":138,"extension":974,"meta":29366,"navigation":976,"path":29367,"seo":29368,"stem":29369,"__hash__":29370},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28355,"toc":29361},[28356,28359,28363,28369,28373,28376,28716,28719,28722,28725,28730,28735,28738,28741,28744,28747,28766,28769,28780,28786,28968,28978,28994,29257,29259,29284,29299,29308,29358],[10,28357,28353],{"id":28358},"_5docker命令学习",[58,28360,28362],{"id":28361},"_51参考文档","5.1.参考文档",[63,28364,28365],{},[67,28366,28367],{"href":28367,"rel":28368},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[71],[58,28370,28372],{"id":28371},"_52常用命令","5.2.常用命令",[63,28374,28375],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[1181,28377,28378,28391],{},[1184,28379,28380],{},[1187,28381,28382,28385,28388],{},[1190,28383,28384],{"align":24634},"命令",[1190,28386,28387],{"align":24634},"描述",[1190,28389,28390],{"align":24634},"示例",[1227,28392,28393,28404,28415,28426,28437,28448,28459,28470,28480,28491,28502,28513,28523,28534,28545,28556,28566,28576,28586,28596,28607,28618,28629,28640,28651,28662,28672,28683,28694,28705],{},[1187,28394,28395,28398,28401],{},[1232,28396,28397],{"align":24634},"docker run",[1232,28399,28400],{"align":24634},"创建并启动一个新的容器。",[1232,28402,28403],{"align":24634},"docker run -it ubuntu bash",[1187,28405,28406,28409,28412],{},[1232,28407,28408],{"align":24634},"docker build",[1232,28410,28411],{"align":24634},"通过指定的 Dockerfile 创建一个新的镜像。",[1232,28413,28414],{"align":24634},"docker build -t myimage .",[1187,28416,28417,28420,28423],{},[1232,28418,28419],{"align":24634},"docker pull",[1232,28421,28422],{"align":24634},"从 Docker 仓库拉取镜像。",[1232,28424,28425],{"align":24634},"docker pull ubuntu",[1187,28427,28428,28431,28434],{},[1232,28429,28430],{"align":24634},"docker push",[1232,28432,28433],{"align":24634},"将本地镜像推送到 Docker 仓库。",[1232,28435,28436],{"align":24634},"docker push myimage",[1187,28438,28439,28442,28445],{},[1232,28440,28441],{"align":24634},"docker stop",[1232,28443,28444],{"align":24634},"停止一个正在运行的容器。",[1232,28446,28447],{"align":24634},"docker stop container_id",[1187,28449,28450,28453,28456],{},[1232,28451,28452],{"align":24634},"docker start",[1232,28454,28455],{"align":24634},"启动一个已经存在的容器。",[1232,28457,28458],{"align":24634},"docker start container_id",[1187,28460,28461,28464,28467],{},[1232,28462,28463],{"align":24634},"docker restart",[1232,28465,28466],{"align":24634},"重新启动容器。",[1232,28468,28469],{"align":24634},"docker restart container_id",[1187,28471,28472,28475,28478],{},[1232,28473,28474],{"align":24634},"docker ps",[1232,28476,28477],{"align":24634},"列出当前正在运行的容器。",[1232,28479,28474],{"align":24634},[1187,28481,28482,28485,28488],{},[1232,28483,28484],{"align":24634},"docker rm",[1232,28486,28487],{"align":24634},"删除一个或多个停止的容器。",[1232,28489,28490],{"align":24634},"docker rm container_id",[1187,28492,28493,28496,28499],{},[1232,28494,28495],{"align":24634},"docker exec",[1232,28497,28498],{"align":24634},"在一个正在运行的容器中执行命令。",[1232,28500,28501],{"align":24634},"docker exec -it container_id bash",[1187,28503,28504,28507,28510],{},[1232,28505,28506],{"align":24634},"docker logs",[1232,28508,28509],{"align":24634},"查看容器的日志输出。",[1232,28511,28512],{"align":24634},"docker logs container_id",[1187,28514,28515,28518,28521],{},[1232,28516,28517],{"align":24634},"docker images",[1232,28519,28520],{"align":24634},"列出本地所有镜像。",[1232,28522,28517],{"align":24634},[1187,28524,28525,28528,28531],{},[1232,28526,28527],{"align":24634},"docker rmi",[1232,28529,28530],{"align":24634},"删除一个或多个镜像。",[1232,28532,28533],{"align":24634},"docker rmi myimage",[1187,28535,28536,28539,28542],{},[1232,28537,28538],{"align":24634},"docker network",[1232,28540,28541],{"align":24634},"管理 Docker 网络。",[1232,28543,28544],{"align":24634},"docker network ls",[1187,28546,28547,28550,28553],{},[1232,28548,28549],{"align":24634},"docker volume",[1232,28551,28552],{"align":24634},"管理 Docker 数据卷。",[1232,28554,28555],{"align":24634},"docker volume ls",[1187,28557,28558,28561,28564],{},[1232,28559,28560],{"align":24634},"docker-compose up",[1232,28562,28563],{"align":24634},"启动 docker-compose.yml 中定义的所有服务。",[1232,28565,28560],{"align":24634},[1187,28567,28568,28571,28574],{},[1232,28569,28570],{"align":24634},"docker-compose down",[1232,28572,28573],{"align":24634},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[1232,28575,28570],{"align":24634},[1187,28577,28578,28581,28584],{},[1232,28579,28580],{"align":24634},"docker info",[1232,28582,28583],{"align":24634},"显示 Docker 系统的详细信息。",[1232,28585,28580],{"align":24634},[1187,28587,28588,28591,28594],{},[1232,28589,28590],{"align":24634},"docker stats",[1232,28592,28593],{"align":24634},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[1232,28595,28590],{"align":24634},[1187,28597,28598,28601,28604],{},[1232,28599,28600],{"align":24634},"docker inspect",[1232,28602,28603],{"align":24634},"查看容器或镜像的详细信息（JSON 格式）。",[1232,28605,28606],{"align":24634},"docker inspect container_id",[1187,28608,28609,28612,28615],{},[1232,28610,28611],{"align":24634},"docker save",[1232,28613,28614],{"align":24634},"将一个镜像保存为 tar 文件。",[1232,28616,28617],{"align":24634},"docker save -o myimage.tar myimage",[1187,28619,28620,28623,28626],{},[1232,28621,28622],{"align":24634},"docker load",[1232,28624,28625],{"align":24634},"从 tar 文件中加载镜像。",[1232,28627,28628],{"align":24634},"docker load -i myimage.tar",[1187,28630,28631,28634,28637],{},[1232,28632,28633],{"align":24634},"docker tag",[1232,28635,28636],{"align":24634},"为镜像添加标签（tag）。",[1232,28638,28639],{"align":24634},"docker tag myimage myimage:v1",[1187,28641,28642,28645,28648],{},[1232,28643,28644],{"align":24634},"docker buildx build",[1232,28646,28647],{"align":24634},"使用 Buildx 构建多架构镜像。",[1232,28649,28650],{"align":24634},"docker buildx build -t myimage .",[1187,28652,28653,28656,28659],{},[1232,28654,28655],{"align":24634},"docker buildx create",[1232,28657,28658],{"align":24634},"创建一个新的 Buildx 构建实例。",[1232,28660,28661],{"align":24634},"docker buildx create –use",[1187,28663,28664,28667,28670],{},[1232,28665,28666],{"align":24634},"docker buildx ls",[1232,28668,28669],{"align":24634},"列出所有可用的 Buildx 构建实例。",[1232,28671,28666],{"align":24634},[1187,28673,28674,28677,28680],{},[1232,28675,28676],{"align":24634},"docker buildx use",[1232,28678,28679],{"align":24634},"设置当前的 Buildx 构建实例。",[1232,28681,28682],{"align":24634},"docker buildx use mybuilder",[1187,28684,28685,28688,28691],{},[1232,28686,28687],{"align":24634},"docker buildx bake",[1232,28689,28690],{"align":24634},"使用 Bake 文件批量构建镜像。",[1232,28692,28693],{"align":24634},"docker buildx bake -f bake.hcl",[1187,28695,28696,28699,28702],{},[1232,28697,28698],{"align":24634},"docker buildx build –push",[1232,28700,28701],{"align":24634},"构建镜像并推送到镜像仓库。",[1232,28703,28704],{"align":24634},"docker buildx build –push -t myimage .",[1187,28706,28707,28710,28713],{},[1232,28708,28709],{"align":24634},"docker buildx build –platform",[1232,28711,28712],{"align":24634},"构建镜像并为多个平台生成支持。",[1232,28714,28715],{"align":24634},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[63,28717,28718],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[63,28720,28721],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[63,28723,28724],{},"docker images 可以查看已经下载的镜像",[63,28726,28727],{},[29,28728],{"alt":138,"src":28729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[63,28731,28732],{},[25,28733,28734],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[63,28736,28737],{},"docker rmi $(docker images -q) 删除所有的镜像",[63,28739,28740],{},"docker container logs 查看容器日志",[63,28742,28743],{},"docker top 查看容器里的进程",[63,28745,28746],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[133,28748,28750],{"className":24720,"code":28749,"language":24722,"meta":138,"style":138},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[140,28751,28752],{"__ignoreMap":138},[143,28753,28754,28757,28760,28763],{"class":145,"line":146},[143,28755,28756],{"class":156},"如：docker",[143,28758,28759],{"class":163}," cp",[143,28761,28762],{"class":163}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[143,28764,28765],{"class":163}," \u002Fmydata\u002Fnginx\n",[63,28767,28768],{},"docker run时在启动容器的时候会有几个常用的选项：",[232,28770,28771,28774,28777],{},[22,28772,28773],{},"-d选项：表示后台运行",[22,28775,28776],{},"-P选项：随机端口映射",[22,28778,28779],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[58,28781,28783],{"id":28782},"_53run命令的参数非常重要",[25,28784,28785],{},"5.3.run命令的参数（非常重要）",[1181,28787,28788,28801],{},[1184,28789,28790],{},[1187,28791,28792,28795,28798],{},[1190,28793,28794],{"align":24634},"参数\u002F配置",[1190,28796,28797],{"align":24634},"功能说明",[1190,28799,28800],{"align":24634},"重要性与参考依据",[1227,28802,28803,28814,28825,28836,28847,28858,28869,28880,28891,28902,28913,28924,28935,28946,28957],{},[1187,28804,28805,28808,28811],{},[1232,28806,28807],{"align":24634},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[1232,28809,28810],{"align":24634},"指定容器名称，便于后续管理",[1232,28812,28813],{"align":24634},"替代随机生成的容器名。",[1187,28815,28816,28819,28822],{},[1232,28817,28818],{"align":24634},"–gpus all",[1232,28820,28821],{"align":24634},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[1232,28823,28824],{"align":24634},"用于CUDA加速等GPU依赖任务。",[1187,28826,28827,28830,28833],{},[1232,28828,28829],{"align":24634},"-e NVIDIA_DRIVER_CAPABILITIES=all",[1232,28831,28832],{"align":24634},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[1232,28834,28835],{"align":24634},"确保容器内GPU功能完整67。",[1187,28837,28838,28841,28844],{},[1232,28839,28840],{"align":24634},"-dit",[1232,28842,28843],{"align":24634},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[1232,28845,28846],{"align":24634},"允许容器在后台运行并支持交互操作。",[1187,28848,28849,28852,28855],{},[1232,28850,28851],{"align":24634},"–privileged",[1232,28853,28854],{"align":24634},"赋予容器完全主机权限（可访问设备、内核模块等）",[1232,28856,28857],{"align":24634},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[1187,28859,28860,28863,28866],{},[1232,28861,28862],{"align":24634},"–net=host",[1232,28864,28865],{"align":24634},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[1232,28867,28868],{"align":24634},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[1187,28870,28871,28874,28877],{},[1232,28872,28873],{"align":24634},"–group-add audio–group-add video–group-add dialout",[1232,28875,28876],{"align":24634},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[1232,28878,28879],{"align":24634},"避免权限问题（如避免无法调用摄像头、麦克风）。",[1187,28881,28882,28885,28888],{},[1232,28883,28884],{"align":24634},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[1232,28886,28887],{"align":24634},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[1232,28889,28890],{"align":24634},"支持容器内运行图形界面应用（如OpenCV可视化）。",[1187,28892,28893,28896,28899],{},[1232,28894,28895],{"align":24634},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[1232,28897,28898],{"align":24634},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[1232,28900,28901],{"align":24634},"实现容器内图形显示。",[1187,28903,28904,28907,28910],{},[1232,28905,28906],{"align":24634},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[1232,28908,28909],{"align":24634},"挂载X11认证文件（只读）",[1232,28911,28912],{"align":24634},"确保容器有权连接宿主机显示服务。",[1187,28914,28915,28918,28921],{},[1232,28916,28917],{"align":24634},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[1232,28919,28920],{"align":24634},"挂载Wayland显示协议相关目录",[1232,28922,28923],{"align":24634},"支持Wayland协议的图形显示。",[1187,28925,28926,28929,28932],{},[1232,28927,28928],{"align":24634},"–ulimit nofile=1024:524288",[1232,28930,28931],{"align":24634},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[1232,28933,28934],{"align":24634},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[1187,28936,28937,28940,28943],{},[1232,28938,28939],{"align":24634},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[1232,28941,28942],{"align":24634},"挂载宿主机用户目录到容器内同名路径",[1232,28944,28945],{"align":24634},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[1187,28947,28948,28951,28954],{},[1232,28949,28950],{"align":24634},"-w \u002Fhome\u002Ftungchiahui",[1232,28952,28953],{"align":24634},"设置容器启动后的默认工作目录",[1232,28955,28956],{"align":24634},"直接进入项目路径，方便执行命令2324。",[1187,28958,28959,28962,28965],{},[1232,28960,28961],{"align":24634},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[1232,28963,28964],{"align":24634},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[1232,28966,28967],{"align":24634},"提供预配置的深度学习与机器人开发环境。",[63,28969,28970,28971,28973,28974,28977],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[140,28972,25474],{},"加不加",[140,28975,28976],{},"sudo -E","都无所谓。",[63,28979,28980,28981,28983,28984,28986,28987,28990,28991,28993],{},"用户已经被加到docker组了，不用",[140,28982,25474],{},"也行跑，其次，",[140,28985,25474],{},"运行的话，你的",[140,28988,28989],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[140,28992,28989],{},"更不可能变了。",[133,28995,28997],{"className":24720,"code":28996,"language":24722,"meta":138,"style":138},"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",[140,28998,28999,29012,29022,29032,29044,29051,29058,29065,29075,29084,29093,29107,29119,29131,29140,29150,29159,29174,29207,29234,29245,29252],{"__ignoreMap":138},[143,29000,29001,29003,29005,29007,29010],{"class":145,"line":146},[143,29002,25474],{"class":156},[143,29004,27218],{"class":163},[143,29006,28128],{"class":163},[143,29008,29009],{"class":280}," --name=ros_opencv_cuda",[143,29011,25576],{"class":280},[143,29013,29014,29017,29020],{"class":145,"line":35},[143,29015,29016],{"class":149},"--gpus ",[143,29018,29019],{"class":163},"all",[143,29021,25576],{"class":280},[143,29023,29024,29027,29030],{"class":145,"line":46},[143,29025,29026],{"class":149},"-e ",[143,29028,29029],{"class":163},"NVIDIA_DRIVER_CAPABILITIES=all",[143,29031,25576],{"class":280},[143,29033,29034,29036,29039,29042],{"class":145,"line":293},[143,29035,29026],{"class":149},[143,29037,29038],{"class":163},"DISPLAY=",[143,29040,29041],{"class":149},"$DISPLAY ",[143,29043,27073],{"class":280},[143,29045,29046,29049],{"class":145,"line":306},[143,29047,29048],{"class":149},"-dit ",[143,29050,27073],{"class":280},[143,29052,29053,29056],{"class":145,"line":319},[143,29054,29055],{"class":149},"--privileged ",[143,29057,27073],{"class":280},[143,29059,29060,29063],{"class":145,"line":332},[143,29061,29062],{"class":149},"--net=host ",[143,29064,27073],{"class":280},[143,29066,29067,29070,29073],{"class":145,"line":345},[143,29068,29069],{"class":149},"--group-add ",[143,29071,29072],{"class":163},"audio",[143,29074,25576],{"class":280},[143,29076,29077,29079,29082],{"class":145,"line":701},[143,29078,29069],{"class":149},[143,29080,29081],{"class":163},"video",[143,29083,25576],{"class":280},[143,29085,29086,29088,29091],{"class":145,"line":707},[143,29087,29069],{"class":149},[143,29089,29090],{"class":163},"dialout",[143,29092,25576],{"class":280},[143,29094,29095,29097,29100,29102,29105],{"class":145,"line":727},[143,29096,29026],{"class":149},[143,29098,29099],{"class":163},"XAUTHORITY=",[143,29101,28989],{"class":149},[143,29103,29104],{"class":163},"\u002F.Xauthority",[143,29106,25576],{"class":280},[143,29108,29109,29111,29114,29117],{"class":145,"line":2518},[143,29110,29026],{"class":149},[143,29112,29113],{"class":163},"WAYLAND_DISPLAY=",[143,29115,29116],{"class":149},"$WAYLAND_DISPLAY ",[143,29118,27073],{"class":280},[143,29120,29121,29123,29126,29129],{"class":145,"line":2524},[143,29122,29026],{"class":149},[143,29124,29125],{"class":163},"XDG_RUNTIME_DIR=",[143,29127,29128],{"class":149},"$XDG_RUNTIME_DIR ",[143,29130,27073],{"class":280},[143,29132,29133,29135,29138],{"class":145,"line":2529},[143,29134,29026],{"class":149},[143,29136,29137],{"class":163},"QT_QPA_PLATFORM=xcb",[143,29139,25576],{"class":280},[143,29141,29142,29145,29148],{"class":145,"line":2543},[143,29143,29144],{"class":149},"-v ",[143,29146,29147],{"class":163},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[143,29149,25576],{"class":280},[143,29151,29152,29154,29157],{"class":145,"line":2548},[143,29153,29144],{"class":149},[143,29155,29156],{"class":163},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[143,29158,25576],{"class":280},[143,29160,29161,29164,29167,29169,29172],{"class":145,"line":2554},[143,29162,29163],{"class":149},"-v $HOME",[143,29165,29166],{"class":163},"\u002F.Xauthority:",[143,29168,28989],{"class":149},[143,29170,29171],{"class":163},"\u002F.Xauthority:ro",[143,29173,25576],{"class":280},[143,29175,29176,29178,29181,29183,29186,29189,29191,29194,29196,29198,29200,29202,29205],{"class":145,"line":2575},[143,29177,29144],{"class":149},[143,29179,29180],{"class":163},"\u002Frun\u002Fuser\u002F",[143,29182,25997],{"class":149},[143,29184,29185],{"class":156},"id",[143,29187,29188],{"class":280}," -u",[143,29190,1470],{"class":149},[143,29192,29193],{"class":163},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[143,29195,25997],{"class":149},[143,29197,29185],{"class":156},[143,29199,29188],{"class":280},[143,29201,1470],{"class":149},[143,29203,29204],{"class":163},"\u002Fwayland-0",[143,29206,25576],{"class":280},[143,29208,29209,29211,29213,29215,29217,29219,29221,29224,29226,29228,29230,29232],{"class":145,"line":2580},[143,29210,29144],{"class":149},[143,29212,29180],{"class":163},[143,29214,25997],{"class":149},[143,29216,29185],{"class":156},[143,29218,29188],{"class":280},[143,29220,1470],{"class":149},[143,29222,29223],{"class":163},":\u002Frun\u002Fuser\u002F",[143,29225,25997],{"class":149},[143,29227,29185],{"class":156},[143,29229,29188],{"class":280},[143,29231,14614],{"class":149},[143,29233,27073],{"class":280},[143,29235,29236,29238,29240,29243],{"class":145,"line":2594},[143,29237,29163],{"class":149},[143,29239,1900],{"class":163},[143,29241,29242],{"class":149},"$HOME ",[143,29244,27073],{"class":280},[143,29246,29247,29250],{"class":145,"line":2599},[143,29248,29249],{"class":149},"-w $HOME ",[143,29251,27073],{"class":280},[143,29253,29254],{"class":145,"line":2628},[143,29255,29256],{"class":149},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[63,29258,9925],{},[19,29260,29261,29269,29272,29275],{},[22,29262,29263,497,29265,29268],{},[140,29264,29029],{},[140,29266,29267],{},"--gpus all","没有英伟达显卡请注释。",[22,29270,29271],{},"--name后面请自己为容器起名。",[22,29273,29274],{},"最后一行仓库名称请你自己找对应的镜像填上。",[22,29276,29277,29278,29283],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24451,29279,29280],{},[25,29281,29282],{},"请不要加","。",[133,29285,29287],{"className":24720,"code":29286,"language":24722,"meta":138,"style":138},"--ulimit nofile=1024:524288 \\\n",[140,29288,29289],{"__ignoreMap":138},[143,29290,29291,29294,29297],{"class":145,"line":146},[143,29292,29293],{"class":156},"--ulimit",[143,29295,29296],{"class":163}," nofile=1024:524288",[143,29298,25576],{"class":280},[63,29300,29301,29302,29307],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24451,29303,29304],{},[25,29305,29306],{},"不建议","**.**",[133,29309,29311],{"className":24720,"code":29310,"language":24722,"meta":138,"style":138},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[140,29312,29313,29340,29349],{"__ignoreMap":138},[143,29314,29315,29318,29321,29323,29325,29327,29329,29331,29333,29336,29338],{"class":145,"line":146},[143,29316,29317],{"class":156},"--user",[143,29319,29320],{"class":149}," $(",[143,29322,29185],{"class":156},[143,29324,29188],{"class":280},[143,29326,1470],{"class":149},[143,29328,1900],{"class":163},[143,29330,25997],{"class":149},[143,29332,29185],{"class":156},[143,29334,29335],{"class":280}," -g",[143,29337,14614],{"class":149},[143,29339,27073],{"class":280},[143,29341,29342,29344,29347],{"class":145,"line":35},[143,29343,29144],{"class":149},[143,29345,29346],{"class":163},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[143,29348,25576],{"class":280},[143,29350,29351,29353,29356],{"class":145,"line":46},[143,29352,29144],{"class":149},[143,29354,29355],{"class":163},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[143,29357,25576],{"class":280},[954,29359,29360],{},"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":138,"searchDepth":35,"depth":35,"links":29362},[29363,29364,29365],{"id":28361,"depth":46,"text":28362},{"id":28371,"depth":46,"text":28372},{"id":28782,"depth":46,"text":28785},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28353,"description":138},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29372,"title":29373,"body":29374,"description":138,"extension":974,"meta":30997,"navigation":976,"path":30998,"seo":30999,"stem":31000,"__hash__":31001},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29375,"toc":30992},[29376,29379,29383,29386,29608,29612,29616,29619,29725,29730,29733,29738,29741,29746,29749,29754,29757,29769,29772,29777,29784,29812,29819,29895,29900,29903,29926,29928,30003,30008,30011,30015,30023,30028,30033,30037,30048,30054,30057,30060,30084,30087,30090,30118,30121,30124,30589,30592,30597,30602,30606,30629,30634,30638,30642,30645,30648,30651,30678,30681,30684,30702,30705,30708,30730,30738,30743,30748,30752,30755,30758,30761,30764,30809,30812,30830,30833,30838,30841,30862,30865,30921,30924,30929,30933,30936,30943,30946,30949,30954,30957,30973,30976,30989],[10,29377,29373],{"id":29378},"_6手动创建docker镜像",[58,29380,29382],{"id":29381},"_61dockerfile","6.1.DockerFile",[63,29384,29385],{},"常用命令：",[1181,29387,29388,29399],{},[1184,29389,29390],{},[1187,29391,29392,29395,29397],{},[1190,29393,29394],{"align":24634},"指令",[1190,29396,26767],{"align":24634},[1190,29398,28390],{"align":24634},[1227,29400,29401,29411,29427,29438,29449,29460,29471,29482,29493,29507,29521,29532,29546,29557,29568,29582,29597],{},[1187,29402,29403,29405,29408],{},[1232,29404,28268],{"align":24634},[1232,29406,29407],{"align":24634},"指定基础镜像，是 Dockerfile 的起点",[1232,29409,29410],{"align":24634},"FROM ubuntu:22.04",[1187,29412,29413,29416,29419],{},[1232,29414,29415],{"align":24634},"LABEL",[1232,29417,29418],{"align":24634},"添加元数据（如作者、版本等）",[1232,29420,29421,29422,29426],{"align":24634},"LABEL maintainer=”",[67,29423,29425],{"href":29424},"mailto:you@example.com","you@example.com","”",[1187,29428,29429,29432,29435],{},[1232,29430,29431],{"align":24634},"ENV",[1232,29433,29434],{"align":24634},"设置环境变量",[1232,29436,29437],{"align":24634},"ENV PORT=8080",[1187,29439,29440,29443,29446],{},[1232,29441,29442],{"align":24634},"ARG",[1232,29444,29445],{"align":24634},"构建参数，只在构建期间可用",[1232,29447,29448],{"align":24634},"ARG VERSION=1.0",[1187,29450,29451,29454,29457],{},[1232,29452,29453],{"align":24634},"RUN",[1232,29455,29456],{"align":24634},"构建镜像时运行命令",[1232,29458,29459],{"align":24634},"RUN apt-get update && apt-get install -y curl",[1187,29461,29462,29465,29468],{},[1232,29463,29464],{"align":24634},"COPY",[1232,29466,29467],{"align":24634},"复制文件到镜像中",[1232,29469,29470],{"align":24634},"COPY . \u002Fapp",[1187,29472,29473,29476,29479],{},[1232,29474,29475],{"align":24634},"ADD",[1232,29477,29478],{"align":24634},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[1232,29480,29481],{"align":24634},"ADD archive.tar.gz \u002Fdata\u002F",[1187,29483,29484,29487,29490],{},[1232,29485,29486],{"align":24634},"WORKDIR",[1232,29488,29489],{"align":24634},"设置工作目录",[1232,29491,29492],{"align":24634},"WORKDIR \u002Fopt",[1187,29494,29495,29498,29501],{},[1232,29496,29497],{"align":24634},"CMD",[1232,29499,29500],{"align":24634},"设置容器启动时默认命令（可被 docker run 覆盖）",[1232,29502,29503,29504],{"align":24634},"CMD ",[143,29505,29506],{},"“node”, “index.js”",[1187,29508,29509,29512,29515],{},[1232,29510,29511],{"align":24634},"ENTRYPOINT",[1232,29513,29514],{"align":24634},"设置容器启动时固定命令（通常用于 CLI 工具等）",[1232,29516,29517,29518],{"align":24634},"ENTRYPOINT ",[143,29519,29520],{},"“python3”",[1187,29522,29523,29526,29529],{},[1232,29524,29525],{"align":24634},"EXPOSE",[1232,29527,29528],{"align":24634},"声明镜像内服务监听的端口（不会自动映射）",[1232,29530,29531],{"align":24634},"EXPOSE 80",[1187,29533,29534,29537,29540],{},[1232,29535,29536],{"align":24634},"VOLUME",[1232,29538,29539],{"align":24634},"声明数据卷挂载点",[1232,29541,29542,29543],{"align":24634},"VOLUME ",[143,29544,29545],{},"“\u002Fdata”",[1187,29547,29548,29551,29554],{},[1232,29549,29550],{"align":24634},"USER",[1232,29552,29553],{"align":24634},"设置后续命令执行的用户",[1232,29555,29556],{"align":24634},"USER appuser",[1187,29558,29559,29562,29565],{},[1232,29560,29561],{"align":24634},"ONBUILD",[1232,29563,29564],{"align":24634},"当镜像作为其他镜像基础镜像时触发的构建指令",[1232,29566,29567],{"align":24634},"ONBUILD COPY . \u002Fsrc",[1187,29569,29570,29573,29576],{},[1232,29571,29572],{"align":24634},"SHELL",[1232,29574,29575],{"align":24634},"更改默认 shell，比如将 sh -c 改为 bash -c",[1232,29577,29578,29579],{"align":24634},"SHELL ",[143,29580,29581],{},"“\u002Fbin\u002Fbash”, “-c”",[1187,29583,29584,29587,29590],{},[1232,29585,29586],{"align":24634},"HEALTHCHECK",[1232,29588,29589],{"align":24634},"定义容器运行时的健康检查命令",[1232,29591,29592,29593],{"align":24634},"`HEALTHCHECK CMD curl –fail ",[67,29594,29595],{"href":29595,"rel":29596},"http:\u002F\u002Flocalhost:8080",[71],[1187,29598,29599,29602,29605],{},[1232,29600,29601],{"align":24634},"STOPSIGNAL",[1232,29603,29604],{"align":24634},"容器停止时发送的信号",[1232,29606,29607],{"align":24634},"STOPSIGNAL SIGKILL",[58,29609,29611],{"id":29610},"_62自己创建容器","6.2.自己创建容器",[22896,29613,29615],{"id":29614},"_621手动创建","6.2.1.手动创建",[63,29617,29618],{},"在x86电脑上编译x86的：",[133,29620,29622],{"className":24720,"code":29621,"language":24722,"meta":138,"style":138},"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",[140,29623,29624,29640,29644,29657,29661,29674,29678,29691,29695,29708,29712],{"__ignoreMap":138},[143,29625,29626,29628,29631,29634,29637],{"class":145,"line":146},[143,29627,27451],{"class":156},[143,29629,29630],{"class":163}," build",[143,29632,29633],{"class":280}," -t",[143,29635,29636],{"class":163}," ros-melodic-cuda118-cudnn8-bionic:latest",[143,29638,29639],{"class":163}," .\n",[143,29641,29642],{"class":145,"line":35},[143,29643,3300],{"emptyLinePlaceholder":976},[143,29645,29646,29648,29650,29652,29655],{"class":145,"line":46},[143,29647,27451],{"class":156},[143,29649,29630],{"class":163},[143,29651,29633],{"class":280},[143,29653,29654],{"class":163}," ros-noetic-focal:latest",[143,29656,29639],{"class":163},[143,29658,29659],{"class":145,"line":293},[143,29660,3300],{"emptyLinePlaceholder":976},[143,29662,29663,29665,29667,29669,29672],{"class":145,"line":306},[143,29664,27451],{"class":156},[143,29666,29630],{"class":163},[143,29668,29633],{"class":280},[143,29670,29671],{"class":163}," ros-humble-jammy:latest",[143,29673,29639],{"class":163},[143,29675,29676],{"class":145,"line":319},[143,29677,3300],{"emptyLinePlaceholder":976},[143,29679,29680,29682,29684,29686,29689],{"class":145,"line":332},[143,29681,27451],{"class":156},[143,29683,29630],{"class":163},[143,29685,29633],{"class":280},[143,29687,29688],{"class":163}," ros-jazzy-noble:latest",[143,29690,29639],{"class":163},[143,29692,29693],{"class":145,"line":345},[143,29694,3300],{"emptyLinePlaceholder":976},[143,29696,29697,29699,29701,29703,29706],{"class":145,"line":701},[143,29698,27451],{"class":156},[143,29700,29630],{"class":163},[143,29702,29633],{"class":280},[143,29704,29705],{"class":163}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[143,29707,29639],{"class":163},[143,29709,29710],{"class":145,"line":707},[143,29711,3300],{"emptyLinePlaceholder":976},[143,29713,29714,29716,29718,29720,29723],{"class":145,"line":727},[143,29715,27451],{"class":156},[143,29717,29630],{"class":163},[143,29719,29633],{"class":280},[143,29721,29722],{"class":163}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[143,29724,29639],{"class":163},[63,29726,29727],{},[29,29728],{"alt":138,"src":29729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[63,29731,29732],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[63,29734,29735],{},[29,29736],{"alt":138,"src":29737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[63,29739,29740],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[19,29742,29743],{},[22,29744,29745],{},"创建 Docker Hub 账户",[63,29747,29748],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[19,29750,29751],{"start":35},[22,29752,29753],{},"登录 Docker Hub",[63,29755,29756],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[133,29758,29760],{"className":24720,"code":29759,"language":24722,"meta":138,"style":138},"docker login\n",[140,29761,29762],{"__ignoreMap":138},[143,29763,29764,29766],{"class":145,"line":146},[143,29765,27451],{"class":156},[143,29767,29768],{"class":163}," login\n",[63,29770,29771],{},"输入你的 Docker Hub 用户名和密码进行验证。",[19,29773,29774],{},[22,29775,29776],{},"为你的镜像打标签",[63,29778,29779,29780,29783],{},"Docker Hub 使用 ",[140,29781,29782],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[133,29785,29787],{"className":24720,"code":29786,"language":24722,"meta":138,"style":138},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[140,29788,29789],{"__ignoreMap":138},[143,29790,29791,29793,29796,29798,29801,29804,29807,29809],{"class":145,"line":146},[143,29792,27451],{"class":156},[143,29794,29795],{"class":163}," tag",[143,29797,29688],{"class":163},[143,29799,29800],{"class":755}," \u003C",[143,29802,29803],{"class":163},"你的用户",[143,29805,29806],{"class":149},"名",[143,29808,1998],{"class":755},[143,29810,29811],{"class":163},"\u002Fros-jazzy-noble:latest\n",[63,29813,29814,29815,29818],{},"例如，如果你的 Docker Hub 用户名是 ",[140,29816,29817],{},"tungchiahui","，你应该执行：",[133,29820,29822],{"className":24720,"code":29821,"language":24722,"meta":138,"style":138},"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",[140,29823,29824,29835,29839,29850,29854,29865,29869,29880,29884],{"__ignoreMap":138},[143,29825,29826,29828,29830,29832],{"class":145,"line":146},[143,29827,27451],{"class":156},[143,29829,29795],{"class":163},[143,29831,29654],{"class":163},[143,29833,29834],{"class":163}," tungchiahui\u002Fros-noetic-focal:latest\n",[143,29836,29837],{"class":145,"line":35},[143,29838,3300],{"emptyLinePlaceholder":976},[143,29840,29841,29843,29845,29847],{"class":145,"line":46},[143,29842,27451],{"class":156},[143,29844,29795],{"class":163},[143,29846,29671],{"class":163},[143,29848,29849],{"class":163}," tungchiahui\u002Fros-humble-jammy:latest\n",[143,29851,29852],{"class":145,"line":293},[143,29853,3300],{"emptyLinePlaceholder":976},[143,29855,29856,29858,29860,29862],{"class":145,"line":306},[143,29857,27451],{"class":156},[143,29859,29795],{"class":163},[143,29861,29688],{"class":163},[143,29863,29864],{"class":163}," tungchiahui\u002Fros-jazzy-noble:latest\n",[143,29866,29867],{"class":145,"line":319},[143,29868,3300],{"emptyLinePlaceholder":976},[143,29870,29871,29873,29875,29877],{"class":145,"line":332},[143,29872,27451],{"class":156},[143,29874,29795],{"class":163},[143,29876,29705],{"class":163},[143,29878,29879],{"class":163}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[143,29881,29882],{"class":145,"line":345},[143,29883,3300],{"emptyLinePlaceholder":976},[143,29885,29886,29888,29890,29892],{"class":145,"line":701},[143,29887,27451],{"class":156},[143,29889,29795],{"class":163},[143,29891,29722],{"class":163},[143,29893,29894],{"class":163}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[19,29896,29897],{"start":35},[22,29898,29899],{},"推送镜像到 Docker Hub",[63,29901,29902],{},"使用以下命令将镜像推送到 Docker Hub：",[133,29904,29906],{"className":24720,"code":29905,"language":24722,"meta":138,"style":138},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[140,29907,29908],{"__ignoreMap":138},[143,29909,29910,29912,29915,29917,29919,29921,29923],{"class":145,"line":146},[143,29911,27451],{"class":156},[143,29913,29914],{"class":163}," push",[143,29916,29800],{"class":755},[143,29918,29803],{"class":163},[143,29920,29806],{"class":149},[143,29922,1998],{"class":755},[143,29924,29925],{"class":163},"\u002Fros-noetic-jazzy-noble:latest\n",[63,29927,15532],{},[133,29929,29931],{"className":24720,"code":29930,"language":24722,"meta":138,"style":138},"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",[140,29932,29933,29941,29945,29953,29957,29965,29969,29978,29982,29990,29994],{"__ignoreMap":138},[143,29934,29935,29937,29939],{"class":145,"line":146},[143,29936,27451],{"class":156},[143,29938,29914],{"class":163},[143,29940,29834],{"class":163},[143,29942,29943],{"class":145,"line":35},[143,29944,3300],{"emptyLinePlaceholder":976},[143,29946,29947,29949,29951],{"class":145,"line":46},[143,29948,27451],{"class":156},[143,29950,29914],{"class":163},[143,29952,29849],{"class":163},[143,29954,29955],{"class":145,"line":293},[143,29956,3300],{"emptyLinePlaceholder":976},[143,29958,29959,29961,29963],{"class":145,"line":306},[143,29960,27451],{"class":156},[143,29962,29914],{"class":163},[143,29964,29864],{"class":163},[143,29966,29967],{"class":145,"line":319},[143,29968,3300],{"emptyLinePlaceholder":976},[143,29970,29971,29973,29975],{"class":145,"line":332},[143,29972,27451],{"class":156},[143,29974,29914],{"class":163},[143,29976,29977],{"class":163}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[143,29979,29980],{"class":145,"line":345},[143,29981,3300],{"emptyLinePlaceholder":976},[143,29983,29984,29986,29988],{"class":145,"line":701},[143,29985,27451],{"class":156},[143,29987,29914],{"class":163},[143,29989,29894],{"class":163},[143,29991,29992],{"class":145,"line":707},[143,29993,3300],{"emptyLinePlaceholder":976},[143,29995,29996,29998,30000],{"class":145,"line":727},[143,29997,27451],{"class":156},[143,29999,29914],{"class":163},[143,30001,30002],{"class":163}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[19,30004,30005],{"start":46},[22,30006,30007],{},"验证推送成功",[63,30009,30010],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[63,30012,30013],{},[25,30014,4684],{},[232,30016,30017,30020],{},[22,30018,30019],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[22,30021,30022],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[63,30024,30025],{},[29,30026],{"alt":138,"src":30027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[63,30029,30030],{},[29,30031],{"alt":138,"src":30032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22896,30034,30036],{"id":30035},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[63,30038,30039,30040,30043,30044,30047],{},"如果您想在 ",[25,30041,30042],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[25,30045,30046],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[63,30049,30050,30051],{},"1. ",[25,30052,30053],{},"启用 Docker 跨平台构建",[63,30055,30056],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[63,30058,30059],{},"第一步：启用 buildx（只需执行一次）",[133,30061,30063],{"className":24720,"code":30062,"language":24722,"meta":138,"style":138},"docker buildx create --name multiarch_builder --use\n",[140,30064,30065],{"__ignoreMap":138},[143,30066,30067,30069,30072,30075,30078,30081],{"class":145,"line":146},[143,30068,27451],{"class":156},[143,30070,30071],{"class":163}," buildx",[143,30073,30074],{"class":163}," create",[143,30076,30077],{"class":280}," --name",[143,30079,30080],{"class":163}," multiarch_builder",[143,30082,30083],{"class":280}," --use\n",[63,30085,30086],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[63,30088,30089],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[133,30091,30093],{"className":24720,"code":30092,"language":24722,"meta":138,"style":138},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[140,30094,30095],{"__ignoreMap":138},[143,30096,30097,30099,30101,30103,30106,30109,30112,30115],{"class":145,"line":146},[143,30098,27451],{"class":156},[143,30100,28128],{"class":163},[143,30102,28131],{"class":280},[143,30104,30105],{"class":280}," --privileged",[143,30107,30108],{"class":163}," multiarch\u002Fqemu-user-static",[143,30110,30111],{"class":280}," --reset",[143,30113,30114],{"class":280}," -p",[143,30116,30117],{"class":163}," yes\n",[63,30119,30120],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[63,30122,30123],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[133,30125,30127],{"className":24720,"code":30126,"language":24722,"meta":138,"style":138},"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",[140,30128,30129,30171,30175,30180,30190,30200,30209,30215,30219,30223,30233,30241,30250,30256,30260,30264,30274,30282,30291,30297,30301,30305,30315,30323,30332,30338,30342,30346,30356,30364,30373,30379,30383,30387,30397,30405,30414,30420,30424,30428,30438,30446,30455,30461,30465,30469,30479,30487,30496,30502,30506,30510,30520,30528,30537,30543,30547,30551,30562,30570,30579,30585],{"__ignoreMap":138},[143,30130,30131,30133,30135,30137,30140,30143,30145,30147,30150,30152,30154,30156,30158,30161,30164,30166,30169],{"class":145,"line":146},[143,30132,27451],{"class":156},[143,30134,30071],{"class":163},[143,30136,29630],{"class":163},[143,30138,30139],{"class":280}," --platform",[143,30141,30142],{"class":163}," linux\u002Famd64,linux\u002Farm64",[143,30144,29633],{"class":280},[143,30146,29800],{"class":755},[143,30148,30149],{"class":163},"你的镜像",[143,30151,29806],{"class":149},[143,30153,1998],{"class":755},[143,30155,1900],{"class":163},[143,30157,150],{"class":755},[143,30159,30160],{"class":163},"标",[143,30162,30163],{"class":149},"签",[143,30165,1998],{"class":755},[143,30167,30168],{"class":280}," --push",[143,30170,29639],{"class":163},[143,30172,30173],{"class":145,"line":35},[143,30174,3300],{"emptyLinePlaceholder":976},[143,30176,30177],{"class":145,"line":46},[143,30178,30179],{"class":266},"# 例子：\n",[143,30181,30182,30184,30186,30188],{"class":145,"line":293},[143,30183,27451],{"class":156},[143,30185,30071],{"class":163},[143,30187,29630],{"class":163},[143,30189,25576],{"class":280},[143,30191,30192,30195,30198],{"class":145,"line":306},[143,30193,30194],{"class":149},"--platform ",[143,30196,30197],{"class":163},"linux\u002Famd64,linux\u002Farm64",[143,30199,25576],{"class":280},[143,30201,30202,30204,30207],{"class":145,"line":319},[143,30203,29633],{"class":280},[143,30205,30206],{"class":163}," tungchiahui\u002Fros:noetic-focal",[143,30208,25576],{"class":280},[143,30210,30211,30213],{"class":145,"line":332},[143,30212,30168],{"class":280},[143,30214,25576],{"class":280},[143,30216,30217],{"class":145,"line":345},[143,30218,29639],{"class":163},[143,30220,30221],{"class":145,"line":701},[143,30222,3300],{"emptyLinePlaceholder":976},[143,30224,30225,30227,30229,30231],{"class":145,"line":707},[143,30226,27451],{"class":156},[143,30228,30071],{"class":163},[143,30230,29630],{"class":163},[143,30232,25576],{"class":280},[143,30234,30235,30237,30239],{"class":145,"line":727},[143,30236,30194],{"class":149},[143,30238,30197],{"class":163},[143,30240,25576],{"class":280},[143,30242,30243,30245,30248],{"class":145,"line":2518},[143,30244,29633],{"class":280},[143,30246,30247],{"class":163}," tungchiahui\u002Fros:humble-jammy",[143,30249,25576],{"class":280},[143,30251,30252,30254],{"class":145,"line":2524},[143,30253,30168],{"class":280},[143,30255,25576],{"class":280},[143,30257,30258],{"class":145,"line":2529},[143,30259,29639],{"class":163},[143,30261,30262],{"class":145,"line":2543},[143,30263,3300],{"emptyLinePlaceholder":976},[143,30265,30266,30268,30270,30272],{"class":145,"line":2548},[143,30267,27451],{"class":156},[143,30269,30071],{"class":163},[143,30271,29630],{"class":163},[143,30273,25576],{"class":280},[143,30275,30276,30278,30280],{"class":145,"line":2554},[143,30277,30194],{"class":149},[143,30279,30197],{"class":163},[143,30281,25576],{"class":280},[143,30283,30284,30286,30289],{"class":145,"line":2575},[143,30285,29633],{"class":280},[143,30287,30288],{"class":163}," tungchiahui\u002Fros:jazzy-noble",[143,30290,25576],{"class":280},[143,30292,30293,30295],{"class":145,"line":2580},[143,30294,30168],{"class":280},[143,30296,25576],{"class":280},[143,30298,30299],{"class":145,"line":2594},[143,30300,29639],{"class":163},[143,30302,30303],{"class":145,"line":2599},[143,30304,3300],{"emptyLinePlaceholder":976},[143,30306,30307,30309,30311,30313],{"class":145,"line":2628},[143,30308,27218],{"class":156},[143,30310,30071],{"class":163},[143,30312,29630],{"class":163},[143,30314,25576],{"class":280},[143,30316,30317,30319,30321],{"class":145,"line":2633},[143,30318,30194],{"class":149},[143,30320,30197],{"class":163},[143,30322,25576],{"class":280},[143,30324,30325,30327,30330],{"class":145,"line":2650},[143,30326,29633],{"class":280},[143,30328,30329],{"class":163}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[143,30331,25576],{"class":280},[143,30333,30334,30336],{"class":145,"line":2655},[143,30335,30168],{"class":280},[143,30337,25576],{"class":280},[143,30339,30340],{"class":145,"line":2660},[143,30341,29639],{"class":163},[143,30343,30344],{"class":145,"line":2665},[143,30345,3300],{"emptyLinePlaceholder":976},[143,30347,30348,30350,30352,30354],{"class":145,"line":2679},[143,30349,27451],{"class":156},[143,30351,30071],{"class":163},[143,30353,29630],{"class":163},[143,30355,25576],{"class":280},[143,30357,30358,30360,30362],{"class":145,"line":2684},[143,30359,30194],{"class":149},[143,30361,30197],{"class":163},[143,30363,25576],{"class":280},[143,30365,30366,30368,30371],{"class":145,"line":3477},[143,30367,29633],{"class":280},[143,30369,30370],{"class":163}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[143,30372,25576],{"class":280},[143,30374,30375,30377],{"class":145,"line":3491},[143,30376,30168],{"class":280},[143,30378,25576],{"class":280},[143,30380,30381],{"class":145,"line":3499},[143,30382,29639],{"class":163},[143,30384,30385],{"class":145,"line":3504},[143,30386,3300],{"emptyLinePlaceholder":976},[143,30388,30389,30391,30393,30395],{"class":145,"line":3510},[143,30390,27218],{"class":156},[143,30392,30071],{"class":163},[143,30394,29630],{"class":163},[143,30396,25576],{"class":280},[143,30398,30399,30401,30403],{"class":145,"line":3516},[143,30400,30194],{"class":149},[143,30402,30197],{"class":163},[143,30404,25576],{"class":280},[143,30406,30407,30409,30412],{"class":145,"line":3521},[143,30408,29633],{"class":280},[143,30410,30411],{"class":163}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[143,30413,25576],{"class":280},[143,30415,30416,30418],{"class":145,"line":8848},[143,30417,30168],{"class":280},[143,30419,25576],{"class":280},[143,30421,30422],{"class":145,"line":8872},[143,30423,29639],{"class":163},[143,30425,30426],{"class":145,"line":8877},[143,30427,3300],{"emptyLinePlaceholder":976},[143,30429,30430,30432,30434,30436],{"class":145,"line":8883},[143,30431,27451],{"class":156},[143,30433,30071],{"class":163},[143,30435,29630],{"class":163},[143,30437,25576],{"class":280},[143,30439,30440,30442,30444],{"class":145,"line":8910},[143,30441,30194],{"class":149},[143,30443,30197],{"class":163},[143,30445,25576],{"class":280},[143,30447,30448,30450,30453],{"class":145,"line":8915},[143,30449,29633],{"class":280},[143,30451,30452],{"class":163}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[143,30454,25576],{"class":280},[143,30456,30457,30459],{"class":145,"line":8921},[143,30458,30168],{"class":280},[143,30460,25576],{"class":280},[143,30462,30463],{"class":145,"line":8933},[143,30464,29639],{"class":163},[143,30466,30467],{"class":145,"line":8945},[143,30468,3300],{"emptyLinePlaceholder":976},[143,30470,30471,30473,30475,30477],{"class":145,"line":8957},[143,30472,27451],{"class":156},[143,30474,30071],{"class":163},[143,30476,29630],{"class":163},[143,30478,25576],{"class":280},[143,30480,30481,30483,30485],{"class":145,"line":10616},[143,30482,30194],{"class":149},[143,30484,30197],{"class":163},[143,30486,25576],{"class":280},[143,30488,30489,30491,30494],{"class":145,"line":10641},[143,30490,29633],{"class":280},[143,30492,30493],{"class":163}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[143,30495,25576],{"class":280},[143,30497,30498,30500],{"class":145,"line":10664},[143,30499,30168],{"class":280},[143,30501,25576],{"class":280},[143,30503,30504],{"class":145,"line":10688},[143,30505,29639],{"class":163},[143,30507,30508],{"class":145,"line":10693},[143,30509,3300],{"emptyLinePlaceholder":976},[143,30511,30512,30514,30516,30518],{"class":145,"line":10698},[143,30513,27218],{"class":156},[143,30515,30071],{"class":163},[143,30517,29630],{"class":163},[143,30519,25576],{"class":280},[143,30521,30522,30524,30526],{"class":145,"line":10703},[143,30523,30194],{"class":149},[143,30525,30197],{"class":163},[143,30527,25576],{"class":280},[143,30529,30530,30532,30535],{"class":145,"line":10712},[143,30531,29633],{"class":280},[143,30533,30534],{"class":163}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[143,30536,25576],{"class":280},[143,30538,30539,30541],{"class":145,"line":10717},[143,30540,30168],{"class":280},[143,30542,25576],{"class":280},[143,30544,30545],{"class":145,"line":10723},[143,30546,29639],{"class":163},[143,30548,30549],{"class":145,"line":10744},[143,30550,3300],{"emptyLinePlaceholder":976},[143,30552,30553,30556,30558,30560],{"class":145,"line":10750},[143,30554,30555],{"class":156},"  docker",[143,30557,30071],{"class":163},[143,30559,29630],{"class":163},[143,30561,25576],{"class":280},[143,30563,30564,30566,30568],{"class":145,"line":10764},[143,30565,30194],{"class":149},[143,30567,30197],{"class":163},[143,30569,25576],{"class":280},[143,30571,30572,30574,30577],{"class":145,"line":10770},[143,30573,29633],{"class":280},[143,30575,30576],{"class":163}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[143,30578,25576],{"class":280},[143,30580,30581,30583],{"class":145,"line":10797},[143,30582,30168],{"class":280},[143,30584,25576],{"class":280},[143,30586,30587],{"class":145,"line":10806},[143,30588,29639],{"class":163},[63,30590,30591],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[63,30593,30594],{},[29,30595],{"alt":138,"src":30596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[63,30598,30599],{},[29,30600],{"alt":138,"src":30601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22896,30603,30605],{"id":30604},"_623清除构建缓存","6.2.3.清除构建缓存",[133,30607,30609],{"className":24720,"code":30608,"language":24722,"meta":138,"style":138},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[140,30610,30611,30616],{"__ignoreMap":138},[143,30612,30613],{"class":145,"line":146},[143,30614,30615],{"class":266},"# 清理BuildKit构建缓存\n",[143,30617,30618,30620,30623,30626],{"class":145,"line":35},[143,30619,27451],{"class":156},[143,30621,30622],{"class":163}," builder",[143,30624,30625],{"class":163}," prune",[143,30627,30628],{"class":280}," -f\n",[63,30630,30631],{},[29,30632],{"alt":138,"src":30633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[58,30635,30637],{"id":30636},"_63补充","6.3.补充",[22896,30639,30641],{"id":30640},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[63,30643,30644],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[63,30646,30647],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[63,30649,30650],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[133,30652,30654],{"className":24720,"code":30653,"language":24722,"meta":138,"style":138},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[140,30655,30656,30663],{"__ignoreMap":138},[143,30657,30658,30660],{"class":145,"line":146},[143,30659,28268],{"class":156},[143,30661,30662],{"class":163}," nginx\n",[143,30664,30665,30667,30670,30673,30675],{"class":145,"line":35},[143,30666,29453],{"class":156},[143,30668,30669],{"class":163}," echo",[143,30671,30672],{"class":163}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[143,30674,27120],{"class":755},[143,30676,30677],{"class":163}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[63,30679,30680],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[63,30682,30683],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[133,30685,30687],{"className":24720,"code":30686,"language":24722,"meta":138,"style":138},"docker build -t nginx:tuling .\n",[140,30688,30689],{"__ignoreMap":138},[143,30690,30691,30693,30695,30697,30700],{"class":145,"line":146},[143,30692,27451],{"class":156},[143,30694,29630],{"class":163},[143,30696,29633],{"class":280},[143,30698,30699],{"class":163}," nginx:tuling",[143,30701,29639],{"class":163},[63,30703,30704],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[63,30706,30707],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[133,30709,30711],{"className":24720,"code":30710,"language":24722,"meta":138,"style":138},"docker run -d -p 92:80 nginx:tuling\n",[140,30712,30713],{"__ignoreMap":138},[143,30714,30715,30717,30719,30722,30724,30727],{"class":145,"line":146},[143,30716,27451],{"class":156},[143,30718,28128],{"class":163},[143,30720,30721],{"class":280}," -d",[143,30723,30114],{"class":280},[143,30725,30726],{"class":163}," 92:80",[143,30728,30729],{"class":163}," nginx:tuling\n",[63,30731,30732,30733],{},"4、访问 ",[67,30734,30737],{"href":30735,"rel":30736},"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",[71],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[63,30739,30740],{},[29,30741],{"alt":138,"src":30742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[63,30744,30745],{},[29,30746],{"alt":138,"src":30747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22896,30749,30751],{"id":30750},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[63,30753,30754],{},"只需要知道大体流程即可",[63,30756,30757],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[63,30759,30760],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[63,30762,30763],{},"2、在Dockerfile中添加以下内容",[133,30765,30767],{"className":26989,"code":30766,"language":26991,"meta":138,"style":138},"# 基于哪个镜像\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",[140,30768,30769,30774,30779,30784,30789,30794,30799,30804],{"__ignoreMap":138},[143,30770,30771],{"class":145,"line":146},[143,30772,30773],{},"# 基于哪个镜像\n",[143,30775,30776],{"class":145,"line":35},[143,30777,30778],{},"From java:8\n",[143,30780,30781],{"class":145,"line":46},[143,30782,30783],{},"# 复制文件到容器\n",[143,30785,30786],{"class":145,"line":293},[143,30787,30788],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[143,30790,30791],{"class":145,"line":306},[143,30792,30793],{},"# 声明需要暴露的端口\n",[143,30795,30796],{"class":145,"line":319},[143,30797,30798],{},"EXPOSE 8877\n",[143,30800,30801],{"class":145,"line":332},[143,30802,30803],{},"# 配置容器启动后执行的命令\n",[143,30805,30806],{"class":145,"line":345},[143,30807,30808],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[63,30810,30811],{},"3、使用docker build命令构建镜像",[133,30813,30815],{"className":24720,"code":30814,"language":24722,"meta":138,"style":138},"docker build -t tulingmall-member:0.0.5 .\n",[140,30816,30817],{"__ignoreMap":138},[143,30818,30819,30821,30823,30825,30828],{"class":145,"line":146},[143,30820,27451],{"class":156},[143,30822,29630],{"class":163},[143,30824,29633],{"class":280},[143,30826,30827],{"class":163}," tulingmall-member:0.0.5",[143,30829,29639],{"class":163},[63,30831,30832],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[63,30834,30835],{},[29,30836],{"alt":138,"src":30837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[63,30839,30840],{},"4、启动镜像，加-d可在后台启动",[133,30842,30844],{"className":24720,"code":30843,"language":24722,"meta":138,"style":138},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[140,30845,30846],{"__ignoreMap":138},[143,30847,30848,30850,30852,30854,30856,30859],{"class":145,"line":146},[143,30849,27451],{"class":156},[143,30851,28128],{"class":163},[143,30853,30721],{"class":280},[143,30855,30114],{"class":280},[143,30857,30858],{"class":163}," 8877:8877",[143,30860,30861],{"class":163}," tulingmall-member:0.0.5\n",[63,30863,30864],{},"加上JVM参数：",[133,30866,30868],{"className":24720,"code":30867,"language":24722,"meta":138,"style":138},"# --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",[140,30869,30870,30875,30890,30900,30909,30916],{"__ignoreMap":138},[143,30871,30872],{"class":145,"line":146},[143,30873,30874],{"class":266},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[143,30876,30877,30879,30881,30884,30886,30888],{"class":145,"line":35},[143,30878,27451],{"class":156},[143,30880,28128],{"class":163},[143,30882,30883],{"class":280},"  -d",[143,30885,30114],{"class":280},[143,30887,30858],{"class":163},[143,30889,25576],{"class":280},[143,30891,30892,30894,30897],{"class":145,"line":46},[143,30893,29026],{"class":149},[143,30895,30896],{"class":163},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[143,30898,30899],{"class":280},"  \\\n",[143,30901,30902,30904,30907],{"class":145,"line":293},[143,30903,29026],{"class":149},[143,30905,30906],{"class":163},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[143,30908,30899],{"class":280},[143,30910,30911,30914],{"class":145,"line":306},[143,30912,30913],{"class":149},"--cap-add=SYS_PTRACE  ",[143,30915,27073],{"class":280},[143,30917,30918],{"class":145,"line":319},[143,30919,30920],{"class":149},"tulingmall-member:0.0.5\n",[63,30922,30923],{},"5、访问会员服务接口",[63,30925,30926],{},[29,30927],{"alt":138,"src":30928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22896,30930,30932],{"id":30931},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[63,30934,30935],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[63,30937,30938,30939],{},"阿里云docker镜像仓库：",[67,30940,30941],{"href":30941,"rel":30942},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[71],[63,30944,30945],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[63,30947,30948],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[63,30950,30951],{},[29,30952],{"alt":138,"src":30953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[63,30955,30956],{},"要把镜像推送到镜像仓库",[133,30958,30960],{"className":24720,"code":30959,"language":24722,"meta":138,"style":138},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[140,30961,30962],{"__ignoreMap":138},[143,30963,30964,30966,30968,30970],{"class":145,"line":146},[143,30965,27451],{"class":156},[143,30967,29795],{"class":163},[143,30969,30827],{"class":163},[143,30971,30972],{"class":163}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[63,30974,30975],{},"最后将镜像推送到远程仓库",[133,30977,30979],{"className":24720,"code":30978,"language":24722,"meta":138,"style":138},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[140,30980,30981],{"__ignoreMap":138},[143,30982,30983,30985,30987],{"class":145,"line":146},[143,30984,27451],{"class":156},[143,30986,29914],{"class":163},[143,30988,30972],{"class":163},[954,30990,30991],{},"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":138,"searchDepth":35,"depth":35,"links":30993},[30994,30995,30996],{"id":29381,"depth":46,"text":29382},{"id":29610,"depth":46,"text":29611},{"id":30636,"depth":46,"text":30637},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29373,"description":138},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31003,"title":31004,"body":31005,"description":138,"extension":974,"meta":31148,"navigation":976,"path":31149,"seo":31150,"stem":31151,"__hash__":31152},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31006,"toc":31146},[31007,31010,31015,31020,31023,31028,31033,31036,31041,31046,31049,31054,31057,31060,31063,31066,31069,31072,31092,31114,31117,31120,31140,31143],[10,31008,31004],{"id":31009},"_7vscode远程开发",[19,31011,31012],{},[22,31013,31014],{},"插件1：微软Docker工具",[63,31016,31017],{},[29,31018],{"alt":138,"src":31019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[63,31021,31022],{},"docker扩展插件已经进化为container tools了，请安装container tools",[63,31024,31025],{},[29,31026],{"alt":138,"src":31027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[19,31029,31030],{"start":35},[22,31031,31032],{},"插件2：微软Docker远程开发工具",[63,31034,31035],{},"下面这是远程开发的插件。",[63,31037,31038],{},[29,31039],{"alt":138,"src":31040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[63,31042,31043],{},[29,31044],{"alt":138,"src":31045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[63,31047,31048],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[63,31050,31051],{},[29,31052],{"alt":138,"src":31053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[63,31055,31056],{},"安装完拓展之后，vscode进行链接：",[63,31058,31059],{},"1.按ctrl+shift+p",[63,31061,31062],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[63,31064,31065],{},"3.选择目前运行的容器",[63,31067,31068],{},"4.VS Code 会在新窗口中打开并连接到容器",[63,31070,31071],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[133,31073,31075],{"className":24720,"code":31074,"language":24722,"meta":138,"style":138},"docker run -v 主机目录:容器目录 image-name\n",[140,31076,31077],{"__ignoreMap":138},[143,31078,31079,31081,31083,31086,31089],{"class":145,"line":146},[143,31080,27451],{"class":156},[143,31082,28128],{"class":163},[143,31084,31085],{"class":280}," -v",[143,31087,31088],{"class":163}," 主机目录:容器目录",[143,31090,31091],{"class":163}," image-name\n",[133,31093,31095],{"className":24720,"code":31094,"language":24722,"meta":138,"style":138},"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",[140,31096,31097],{"__ignoreMap":138},[143,31098,31099,31101,31103,31106,31108,31111],{"class":145,"line":146},[143,31100,27451],{"class":156},[143,31102,28128],{"class":163},[143,31104,31105],{"class":280}," -it",[143,31107,31085],{"class":280},[143,31109,31110],{"class":163}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[143,31112,31113],{"class":163}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[63,31115,31116],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[63,31118,31119],{},"查看挂载情况：",[133,31121,31123],{"className":24720,"code":31122,"language":24722,"meta":138,"style":138},"mount | grep -i project\n",[140,31124,31125],{"__ignoreMap":138},[143,31126,31127,31130,31132,31135,31137],{"class":145,"line":146},[143,31128,31129],{"class":156},"mount",[143,31131,26007],{"class":755},[143,31133,31134],{"class":156}," grep",[143,31136,27328],{"class":280},[143,31138,31139],{"class":163}," project\n",[63,31141,31142],{},"也可以通过ls来进行查看",[954,31144,31145],{},"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":138,"searchDepth":35,"depth":35,"links":31147},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31004,"description":138},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31154,"title":31155,"body":31156,"description":973,"extension":974,"meta":31160,"navigation":976,"path":31162,"seo":31163,"stem":31164,"__hash__":31165},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31157,"toc":31158},[],{"title":138,"searchDepth":35,"depth":35,"links":31159},[],{"category":31161},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31155,"description":973},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31167,"title":31168,"body":31169,"description":973,"extension":974,"meta":31173,"navigation":976,"path":31174,"seo":31175,"stem":31176,"__hash__":31177},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31170,"toc":31171},[],{"title":138,"searchDepth":35,"depth":35,"links":31172},[],{"category":31161},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31168,"description":973},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31179,"title":31180,"body":31181,"description":973,"extension":974,"meta":31474,"navigation":976,"path":31475,"seo":31476,"stem":31477,"__hash__":31478},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31182,"toc":31472},[31183,31186,31194,31209,31214,31265,31268,31274,31461,31466,31469],[10,31184,31180],{"id":31185},"_1验证深度学习环境",[63,31187,31188,31189],{},"关于环境的安装，看",[67,31190,31193],{"href":31191,"rel":31192},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[71],"Pytorch-->深度学习",[63,31195,31196,31197,31200,31201,31204,31205,31208],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[140,31198,31199],{},"pytorch-cuda=12.4"," 是一个“ ",[25,31202,31203],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[25,31206,31207],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[63,31210,31211],{},[29,31212],{"alt":138,"src":31213},"\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",[133,31215,31217],{"className":24720,"code":31216,"language":24722,"meta":138,"style":138},"# 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",[140,31218,31219,31224],{"__ignoreMap":138},[143,31220,31221],{"class":145,"line":146},[143,31222,31223],{"class":266},"# CUDA 12.4\n",[143,31225,31226,31229,31231,31234,31237,31240,31243,31246,31248,31251,31254,31257,31260,31262],{"class":145,"line":35},[143,31227,31228],{"class":156},"conda",[143,31230,24732],{"class":163},[143,31232,31233],{"class":163}," pytorch==",[143,31235,31236],{"class":280},"2.5.1",[143,31238,31239],{"class":163}," torchvision==",[143,31241,31242],{"class":280},"0.20.1",[143,31244,31245],{"class":163}," torchaudio==",[143,31247,31236],{"class":280},[143,31249,31250],{"class":163}," pytorch-cuda=",[143,31252,31253],{"class":280},"12.4",[143,31255,31256],{"class":280}," -c",[143,31258,31259],{"class":163}," pytorch",[143,31261,31256],{"class":280},[143,31263,31264],{"class":163}," nvidia\n",[63,31266,31267],{},"）：",[63,31269,31270],{},[67,31271,31272],{"href":31272,"rel":31273},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[71],[133,31275,31279],{"className":31276,"code":31277,"language":31278,"meta":138,"style":138},"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",[140,31280,31281,31286,31294,31299,31309,31325,31330,31340,31377,31384,31396,31412,31417,31427,31439,31449],{"__ignoreMap":138},[143,31282,31283],{"class":145,"line":146},[143,31284,31285],{"class":266},"# 对深度学习环境进行测试\n",[143,31287,31288,31291],{"class":145,"line":35},[143,31289,31290],{"class":755},"import",[143,31292,31293],{"class":149}," torch\n",[143,31295,31296],{"class":145,"line":46},[143,31297,31298],{"class":266},"# 查看cuda是否被激活\n",[143,31300,31301,31304,31306],{"class":145,"line":293},[143,31302,31303],{"class":149},"flag",[143,31305,160],{"class":755},[143,31307,31308],{"class":149},"torch.cuda.is_available()\n",[143,31310,31311,31314,31316,31319,31322],{"class":145,"line":306},[143,31312,31313],{"class":280},"print",[143,31315,1049],{"class":149},[143,31317,31318],{"class":163},"\"cuda:\"",[143,31320,31321],{"class":149},", flag)   ",[143,31323,31324],{"class":266},"#返回true的话说明被激活\n",[143,31326,31327],{"class":145,"line":319},[143,31328,31329],{"class":266},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[143,31331,31332,31335,31337],{"class":145,"line":332},[143,31333,31334],{"class":149},"ngpu",[143,31336,160],{"class":755},[143,31338,31339],{"class":280},"1\n",[143,31341,31342,31345,31347,31350,31353,31355,31358,31361,31364,31366,31368,31370,31372,31375],{"class":145,"line":345},[143,31343,31344],{"class":149},"device",[143,31346,160],{"class":755},[143,31348,31349],{"class":149},"torch.device(",[143,31351,31352],{"class":163},"\"cuda:0\"",[143,31354,2605],{"class":755},[143,31356,31357],{"class":149},"(torch.cuda.is_available() ",[143,31359,31360],{"class":755},"and",[143,31362,31363],{"class":149}," ngpu",[143,31365,1998],{"class":755},[143,31367,1234],{"class":280},[143,31369,14614],{"class":149},[143,31371,2602],{"class":755},[143,31373,31374],{"class":163}," \"cpu\"",[143,31376,1055],{"class":149},[143,31378,31379,31381],{"class":145,"line":701},[143,31380,31313],{"class":280},[143,31382,31383],{"class":149},"(device)\n",[143,31385,31386,31388,31391,31393],{"class":145,"line":707},[143,31387,31313],{"class":280},[143,31389,31390],{"class":149},"(torch.cuda.get_device_name(",[143,31392,1234],{"class":280},[143,31394,31395],{"class":149},"))\n",[143,31397,31398,31400,31403,31405,31407,31409],{"class":145,"line":727},[143,31399,31313],{"class":280},[143,31401,31402],{"class":149},"(torch.rand(",[143,31404,1116],{"class":280},[143,31406,1419],{"class":149},[143,31408,1116],{"class":280},[143,31410,31411],{"class":149},").cuda())\n",[143,31413,31414],{"class":145,"line":2518},[143,31415,31416],{"class":266},"# 查看cuda和cudnn的版本\n",[143,31418,31419,31422,31424],{"class":145,"line":2524},[143,31420,31421],{"class":149},"cuda_version",[143,31423,160],{"class":755},[143,31425,31426],{"class":149},"torch.version.cuda\n",[143,31428,31429,31431,31433,31436],{"class":145,"line":2529},[143,31430,31313],{"class":280},[143,31432,1049],{"class":149},[143,31434,31435],{"class":163},"\"cuda version\"",[143,31437,31438],{"class":149},",cuda_version)\n",[143,31440,31441,31444,31446],{"class":145,"line":2543},[143,31442,31443],{"class":149},"cudnn_version",[143,31445,160],{"class":755},[143,31447,31448],{"class":149},"torch.backends.cudnn.version()\n",[143,31450,31451,31453,31455,31458],{"class":145,"line":2548},[143,31452,31313],{"class":280},[143,31454,1049],{"class":149},[143,31456,31457],{"class":163},"\"cudnn version\"",[143,31459,31460],{"class":149},",cudnn_version)\n",[63,31462,31463],{},[29,31464],{"alt":138,"src":31465},"\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",[63,31467,31468],{},"cuda:0 指的是一块显卡",[954,31470,31471],{},"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":138,"searchDepth":35,"depth":35,"links":31473},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31180,"description":973},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31480,"title":31481,"body":31482,"description":973,"extension":974,"meta":51286,"navigation":976,"path":51287,"seo":51288,"stem":51289,"__hash__":51290},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31483,"toc":51280},[31484,31487,31491,31495,31498,31503,31508,31511,31516,31521,31526,31529,31533,31538,31542,31547,31550,31555,31558,31561,31564,31567,31572,31575,31580,31585,31590,31595,31598,31602,31605,31610,32214,32219,32222,32227,32230,32233,32697,32700,32703,32706,32709,34760,34763,34768,34773,35568,35571,35576,36354,36358,38017,38021,38735,38739,38743,38748,38753,38758,38761,38766,38771,38776,38781,38786,38790,38795,40077,40082,40085,40088,40091,40246,40249,40252,41468,41473,42168,42172,42176,42181,42186,42189,42194,42199,42204,42209,42214,42219,42224,42229,42234,42239,42244,42249,42254,42259,42264,42269,42274,42279,42284,42289,42294,42299,42304,42309,42314,42319,42324,42329,42334,42339,42343,42347,42350,43828,43832,45479,45483,46177,46181,46184,46187,46731,46734,46738,46741,48138,48142,48145,48723,50510,50514,50517,51277],[10,31485,31481],{"id":31486},"_2经典神经网络",[58,31488,31490],{"id":31489},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22896,31492,31494],{"id":31493},"_211原理介绍","2.1.1.原理介绍",[63,31496,31497],{},"LeNet-5",[19,31499,31500],{},[22,31501,31502],{},"原理",[63,31504,31505],{},[29,31506],{"alt":138,"src":31507},"\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",[63,31509,31510],{},"B是batch批次；C是channel通道",[19,31512,31513],{"start":35},[22,31514,31515],{},"网络参数详细",[63,31517,31518],{},[29,31519],{"alt":138,"src":31520},"\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",[63,31522,31523],{},[29,31524],{"alt":138,"src":31525},"\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",[63,31527,31528],{},"AlexNet",[19,31530,31531],{},[22,31532,31502],{},[63,31534,31535],{},[29,31536],{"alt":138,"src":31537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-006.png",[19,31539,31540],{"start":35},[22,31541,31515],{},[63,31543,31544],{},[29,31545],{"alt":138,"src":31546},"\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",[63,31548,31549],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[63,31551,31552],{},[29,31553],{"alt":138,"src":31554},"\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",[63,31556,31557],{},"数据处理中的图像增强操作:",[63,31559,31560],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[63,31562,31563],{},"①增加数据量，保证训练数据充足；②防止过拟合",[63,31565,31566],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[63,31568,31569],{},[29,31570],{"alt":138,"src":31571},"\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",[63,31573,31574],{},"提升网络精确度的方法：LRN正则化",[63,31576,31577],{},[29,31578],{"alt":138,"src":31579},"\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",[63,31581,31582],{},[29,31583],{"alt":138,"src":31584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[19,31586,31587],{"start":46},[22,31588,31589],{},"AlexNet的总结",[63,31591,31592],{},[29,31593],{"alt":138,"src":31594},"\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",[63,31596,31597],{},"比LeNet模型要深一丢丢",[22896,31599,31601],{"id":31600},"_212代码实现","2.1.2.代码实现",[63,31603,31604],{},"（1）LeNet",[19,31606,31607],{},[22,31608,31609],{},"模型搭建",[133,31611,31613],{"className":31276,"code":31612,"language":31278,"meta":138,"style":138},"# 导入库\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",[140,31614,31615,31620,31626,31631,31644,31649,31661,31665,31685,31690,31695,31706,31711,31730,31734,31739,31788,31800,31805,31834,31869,31896,31901,31913,31918,31938,31957,31976,31980,31985,31995,32012,32023,32038,32049,32060,32075,32090,32101,32108,32112,32126,32131,32154,32159,32164,32169,32173,32178,32183,32193],{"__ignoreMap":138},[143,31616,31617],{"class":145,"line":146},[143,31618,31619],{"class":266},"# 导入库\n",[143,31621,31622,31624],{"class":145,"line":35},[143,31623,31290],{"class":755},[143,31625,31293],{"class":149},[143,31627,31628],{"class":145,"line":46},[143,31629,31630],{"class":266},"# 导入神经网络层\n",[143,31632,31633,31636,31639,31641],{"class":145,"line":293},[143,31634,31635],{"class":755},"from",[143,31637,31638],{"class":149}," torch ",[143,31640,31290],{"class":755},[143,31642,31643],{"class":149}," nn\n",[143,31645,31646],{"class":145,"line":306},[143,31647,31648],{"class":266},"# 导入展示神经网络参数的包\n",[143,31650,31651,31653,31656,31658],{"class":145,"line":319},[143,31652,31635],{"class":755},[143,31654,31655],{"class":149}," torchsummary ",[143,31657,31290],{"class":755},[143,31659,31660],{"class":149}," summary\n",[143,31662,31663],{"class":145,"line":332},[143,31664,3300],{"emptyLinePlaceholder":976},[143,31666,31667,31669,31672,31674,31677,31679,31682],{"class":145,"line":345},[143,31668,15593],{"class":755},[143,31670,31671],{"class":156}," LeNet",[143,31673,1049],{"class":149},[143,31675,31676],{"class":156},"nn",[143,31678,1599],{"class":149},[143,31680,31681],{"class":156},"Module",[143,31683,31684],{"class":149},"):\n",[143,31686,31687],{"class":145,"line":701},[143,31688,31689],{"class":266},"    # 模型初始化:\n",[143,31691,31692],{"class":145,"line":707},[143,31693,31694],{"class":266},"    # 定义一些网络层和激活函数\n",[143,31696,31697,31700,31703],{"class":145,"line":727},[143,31698,31699],{"class":755},"    def",[143,31701,31702],{"class":280}," __init__",[143,31704,31705],{"class":149},"(self):\n",[143,31707,31708],{"class":145,"line":2518},[143,31709,31710],{"class":266},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[143,31712,31713,31716,31719,31722,31725,31728],{"class":145,"line":2524},[143,31714,31715],{"class":280},"        super",[143,31717,31718],{"class":149},"(LeNet,",[143,31720,31721],{"class":280},"self",[143,31723,31724],{"class":149},").",[143,31726,31727],{"class":280},"__init__",[143,31729,2876],{"class":149},[143,31731,31732],{"class":145,"line":2529},[143,31733,3300],{"emptyLinePlaceholder":976},[143,31735,31736],{"class":145,"line":2543},[143,31737,31738],{"class":266},"        # 定义网络层\n",[143,31740,31741,31744,31747,31749,31752,31755,31757,31759,31761,31764,31766,31768,31770,31773,31775,31777,31779,31782,31784,31786],{"class":145,"line":2548},[143,31742,31743],{"class":280},"        self",[143,31745,31746],{"class":149},".c1",[143,31748,160],{"class":755},[143,31750,31751],{"class":149},"nn.Conv2d(",[143,31753,31754],{"class":6116},"in_channels",[143,31756,160],{"class":755},[143,31758,771],{"class":280},[143,31760,1419],{"class":149},[143,31762,31763],{"class":6116},"out_channels",[143,31765,160],{"class":755},[143,31767,1385],{"class":280},[143,31769,1419],{"class":149},[143,31771,31772],{"class":6116},"kernel_size",[143,31774,160],{"class":755},[143,31776,1360],{"class":280},[143,31778,1419],{"class":149},[143,31780,31781],{"class":6116},"padding",[143,31783,160],{"class":755},[143,31785,1122],{"class":280},[143,31787,1055],{"class":149},[143,31789,31790,31792,31795,31797],{"class":145,"line":2554},[143,31791,31743],{"class":280},[143,31793,31794],{"class":149},".sig",[143,31796,160],{"class":755},[143,31798,31799],{"class":149},"nn.Sigmoid()\n",[143,31801,31802],{"class":145,"line":2575},[143,31803,31804],{"class":266},"        # 定义池化\n",[143,31806,31807,31809,31812,31814,31817,31819,31821,31823,31825,31828,31830,31832],{"class":145,"line":2580},[143,31808,31743],{"class":280},[143,31810,31811],{"class":149},".s2",[143,31813,160],{"class":755},[143,31815,31816],{"class":149},"nn.AvgPool2d(",[143,31818,31772],{"class":6116},[143,31820,160],{"class":755},[143,31822,1122],{"class":280},[143,31824,1419],{"class":149},[143,31826,31827],{"class":6116},"stride",[143,31829,160],{"class":755},[143,31831,1122],{"class":280},[143,31833,1055],{"class":149},[143,31835,31836,31838,31841,31843,31845,31847,31849,31851,31853,31855,31857,31859,31861,31863,31865,31867],{"class":145,"line":2594},[143,31837,31743],{"class":280},[143,31839,31840],{"class":149},".c3",[143,31842,160],{"class":755},[143,31844,31751],{"class":149},[143,31846,31754],{"class":6116},[143,31848,160],{"class":755},[143,31850,1385],{"class":280},[143,31852,1419],{"class":149},[143,31854,31763],{"class":6116},[143,31856,160],{"class":755},[143,31858,1642],{"class":280},[143,31860,1419],{"class":149},[143,31862,31772],{"class":6116},[143,31864,160],{"class":755},[143,31866,1360],{"class":280},[143,31868,1055],{"class":149},[143,31870,31871,31873,31876,31878,31880,31882,31884,31886,31888,31890,31892,31894],{"class":145,"line":2599},[143,31872,31743],{"class":280},[143,31874,31875],{"class":149},".s4",[143,31877,160],{"class":755},[143,31879,31816],{"class":149},[143,31881,31772],{"class":6116},[143,31883,160],{"class":755},[143,31885,1122],{"class":280},[143,31887,1419],{"class":149},[143,31889,31827],{"class":6116},[143,31891,160],{"class":755},[143,31893,1122],{"class":280},[143,31895,1055],{"class":149},[143,31897,31898],{"class":145,"line":2628},[143,31899,31900],{"class":266},"        # 定义平展层\n",[143,31902,31903,31905,31908,31910],{"class":145,"line":2633},[143,31904,31743],{"class":280},[143,31906,31907],{"class":149},".flatten",[143,31909,160],{"class":755},[143,31911,31912],{"class":149},"nn.Flatten()\n",[143,31914,31915],{"class":145,"line":2650},[143,31916,31917],{"class":266},"        # 定义全连接层\n",[143,31919,31920,31922,31925,31927,31930,31932,31934,31936],{"class":145,"line":2655},[143,31921,31743],{"class":280},[143,31923,31924],{"class":149},".f5",[143,31926,160],{"class":755},[143,31928,31929],{"class":149},"nn.Linear(",[143,31931,4887],{"class":280},[143,31933,1419],{"class":149},[143,31935,1858],{"class":280},[143,31937,1055],{"class":149},[143,31939,31940,31942,31945,31947,31949,31951,31953,31955],{"class":145,"line":2660},[143,31941,31743],{"class":280},[143,31943,31944],{"class":149},".f6",[143,31946,160],{"class":755},[143,31948,31929],{"class":149},[143,31950,1858],{"class":280},[143,31952,1419],{"class":149},[143,31954,1752],{"class":280},[143,31956,1055],{"class":149},[143,31958,31959,31961,31964,31966,31968,31970,31972,31974],{"class":145,"line":2665},[143,31960,31743],{"class":280},[143,31962,31963],{"class":149},".f7",[143,31965,160],{"class":755},[143,31967,31929],{"class":149},[143,31969,1752],{"class":280},[143,31971,1419],{"class":149},[143,31973,1487],{"class":280},[143,31975,1055],{"class":149},[143,31977,31978],{"class":145,"line":2679},[143,31979,3300],{"emptyLinePlaceholder":976},[143,31981,31982],{"class":145,"line":2684},[143,31983,31984],{"class":266},"    # 写工具->写前向传播\n",[143,31986,31987,31989,31992],{"class":145,"line":3477},[143,31988,31699],{"class":755},[143,31990,31991],{"class":156}," forward",[143,31993,31994],{"class":149},"(self,x):\n",[143,31996,31997,32000,32002,32004,32007,32009],{"class":145,"line":3491},[143,31998,31999],{"class":149},"        x",[143,32001,160],{"class":755},[143,32003,31721],{"class":280},[143,32005,32006],{"class":149},".sig(",[143,32008,31721],{"class":280},[143,32010,32011],{"class":149},".c1(x))\n",[143,32013,32014,32016,32018,32020],{"class":145,"line":3499},[143,32015,31999],{"class":149},[143,32017,160],{"class":755},[143,32019,31721],{"class":280},[143,32021,32022],{"class":149},".s2(x)\n",[143,32024,32025,32027,32029,32031,32033,32035],{"class":145,"line":3504},[143,32026,31999],{"class":149},[143,32028,160],{"class":755},[143,32030,31721],{"class":280},[143,32032,32006],{"class":149},[143,32034,31721],{"class":280},[143,32036,32037],{"class":149},".c3(x))\n",[143,32039,32040,32042,32044,32046],{"class":145,"line":3510},[143,32041,31999],{"class":149},[143,32043,160],{"class":755},[143,32045,31721],{"class":280},[143,32047,32048],{"class":149},".s4(x)\n",[143,32050,32051,32053,32055,32057],{"class":145,"line":3516},[143,32052,31999],{"class":149},[143,32054,160],{"class":755},[143,32056,31721],{"class":280},[143,32058,32059],{"class":149},".flatten(x)\n",[143,32061,32062,32064,32066,32068,32070,32072],{"class":145,"line":3521},[143,32063,31999],{"class":149},[143,32065,160],{"class":755},[143,32067,31721],{"class":280},[143,32069,32006],{"class":149},[143,32071,31721],{"class":280},[143,32073,32074],{"class":149},".f5(x))\n",[143,32076,32077,32079,32081,32083,32085,32087],{"class":145,"line":8848},[143,32078,31999],{"class":149},[143,32080,160],{"class":755},[143,32082,31721],{"class":280},[143,32084,32006],{"class":149},[143,32086,31721],{"class":280},[143,32088,32089],{"class":149},".f6(x))\n",[143,32091,32092,32094,32096,32098],{"class":145,"line":8872},[143,32093,31999],{"class":149},[143,32095,160],{"class":755},[143,32097,31721],{"class":280},[143,32099,32100],{"class":149},".f7(x)\n",[143,32102,32103,32105],{"class":145,"line":8877},[143,32104,15651],{"class":755},[143,32106,32107],{"class":149}," x\n",[143,32109,32110],{"class":145,"line":8883},[143,32111,3300],{"emptyLinePlaceholder":976},[143,32113,32114,32116,32119,32121,32124],{"class":145,"line":8910},[143,32115,2434],{"class":755},[143,32117,32118],{"class":280}," __name__",[143,32120,3849],{"class":755},[143,32122,32123],{"class":163},"\"__main__\"",[143,32125,4639],{"class":149},[143,32127,32128],{"class":145,"line":8915},[143,32129,32130],{"class":266},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[143,32132,32133,32136,32138,32140,32143,32145,32148,32150,32152],{"class":145,"line":8921},[143,32134,32135],{"class":149},"    device",[143,32137,160],{"class":755},[143,32139,31349],{"class":149},[143,32141,32142],{"class":163},"\"cuda\"",[143,32144,2605],{"class":755},[143,32146,32147],{"class":149}," torch.cuda.is_available() ",[143,32149,2602],{"class":755},[143,32151,31374],{"class":163},[143,32153,1055],{"class":149},[143,32155,32156],{"class":145,"line":8933},[143,32157,32158],{"class":266},"    # 如果就是想指定用cpu用下方代码:\n",[143,32160,32161],{"class":145,"line":8945},[143,32162,32163],{"class":266},"    # device=\"cpu\"\n",[143,32165,32166],{"class":145,"line":8957},[143,32167,32168],{"class":266},"    # print(device)\n",[143,32170,32171],{"class":145,"line":10616},[143,32172,3300],{"emptyLinePlaceholder":976},[143,32174,32175],{"class":145,"line":10641},[143,32176,32177],{"class":266},"    # 实例化模型\n",[143,32179,32180],{"class":145,"line":10664},[143,32181,32182],{"class":266},"    # 将模型放到设备中去运行\n",[143,32184,32185,32188,32190],{"class":145,"line":10688},[143,32186,32187],{"class":149},"    model",[143,32189,160],{"class":755},[143,32191,32192],{"class":149},"LeNet().to(device)\n",[143,32194,32195,32198,32201,32203,32205,32207,32209,32211],{"class":145,"line":10693},[143,32196,32197],{"class":280},"    print",[143,32199,32200],{"class":149},"(summary(model,(",[143,32202,771],{"class":280},[143,32204,1419],{"class":149},[143,32206,1941],{"class":280},[143,32208,1419],{"class":149},[143,32210,1941],{"class":280},[143,32212,32213],{"class":149},")))\n",[63,32215,32216],{},[29,32217],{"alt":138,"src":32218},"\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",[63,32220,32221],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[19,32223,32224],{"start":35},[22,32225,32226],{},"训练",[63,32228,32229],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[63,32231,32232],{},"在训练之前可以将数据展示看一下",[133,32234,32236],{"className":31276,"code":32235,"language":31278,"meta":138,"style":138},"# 建立画图的函数，用于展示数据\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",[140,32237,32238,32243,32248,32260,32272,32285,32290,32302,32307,32319,32324,32336,32340,32344,32365,32377,32382,32403,32414,32418,32423,32441,32452,32457,32468,32473,32484,32488,32493,32508,32521,32526,32531,32544,32557,32570,32575,32579,32584,32604,32621,32641,32654,32667,32677,32692],{"__ignoreMap":138},[143,32239,32240],{"class":145,"line":146},[143,32241,32242],{"class":266},"# 建立画图的函数，用于展示数据\n",[143,32244,32245],{"class":145,"line":35},[143,32246,32247],{"class":266},"# torchvision中包含很多内置的数据集\n",[143,32249,32250,32252,32255,32257],{"class":145,"line":46},[143,32251,31635],{"class":755},[143,32253,32254],{"class":149}," sklearn.externals.array_api_compat.torch ",[143,32256,31290],{"class":755},[143,32258,32259],{"class":149}," squeeze\n",[143,32261,32262,32264,32267,32269],{"class":145,"line":293},[143,32263,31635],{"class":755},[143,32265,32266],{"class":149}," torchvision.datasets ",[143,32268,31290],{"class":755},[143,32270,32271],{"class":149}," FashionMNIST\n",[143,32273,32274,32276,32279,32282],{"class":145,"line":306},[143,32275,31290],{"class":755},[143,32277,32278],{"class":149}," numpy ",[143,32280,32281],{"class":755},"as",[143,32283,32284],{"class":149}," np\n",[143,32286,32287],{"class":145,"line":319},[143,32288,32289],{"class":266},"# 引入处理数据集的包\n",[143,32291,32292,32294,32297,32299],{"class":145,"line":332},[143,32293,31635],{"class":755},[143,32295,32296],{"class":149}," torchvision ",[143,32298,31290],{"class":755},[143,32300,32301],{"class":149}," transforms\n",[143,32303,32304],{"class":145,"line":345},[143,32305,32306],{"class":266},"# 从torch库中引入数据处理的包\n",[143,32308,32309,32311,32314,32316],{"class":145,"line":701},[143,32310,31290],{"class":755},[143,32312,32313],{"class":149}," torch.utils.data ",[143,32315,32281],{"class":755},[143,32317,32318],{"class":149}," Data\n",[143,32320,32321],{"class":145,"line":707},[143,32322,32323],{"class":266},"# 导入画图的库\n",[143,32325,32326,32328,32331,32333],{"class":145,"line":727},[143,32327,31290],{"class":755},[143,32329,32330],{"class":149}," matplotlib.pyplot ",[143,32332,32281],{"class":755},[143,32334,32335],{"class":149}," plt\n",[143,32337,32338],{"class":145,"line":2518},[143,32339,3300],{"emptyLinePlaceholder":976},[143,32341,32342],{"class":145,"line":2524},[143,32343,3300],{"emptyLinePlaceholder":976},[143,32345,32346,32349,32351,32354,32357,32359,32362],{"class":145,"line":2529},[143,32347,32348],{"class":149},"train_data",[143,32350,160],{"class":755},[143,32352,32353],{"class":149},"FashionMNIST(",[143,32355,32356],{"class":6116},"root",[143,32358,160],{"class":755},[143,32360,32361],{"class":163},"'.\u002Fdata'",[143,32363,32364],{"class":149},",\n",[143,32366,32367,32370,32372,32375],{"class":145,"line":2543},[143,32368,32369],{"class":6116},"                        train",[143,32371,160],{"class":755},[143,32373,32374],{"class":280},"True",[143,32376,32364],{"class":149},[143,32378,32379],{"class":145,"line":2548},[143,32380,32381],{"class":266},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[143,32383,32384,32387,32389,32392,32395,32397,32400],{"class":145,"line":2554},[143,32385,32386],{"class":6116},"                        transform",[143,32388,160],{"class":755},[143,32390,32391],{"class":149},"transforms.Compose([transforms.Resize(",[143,32393,32394],{"class":6116},"size",[143,32396,160],{"class":755},[143,32398,32399],{"class":280},"224",[143,32401,32402],{"class":149},"),transforms.ToTensor()]),\n",[143,32404,32405,32408,32410,32412],{"class":145,"line":2575},[143,32406,32407],{"class":6116},"                        download",[143,32409,160],{"class":755},[143,32411,32374],{"class":280},[143,32413,1055],{"class":149},[143,32415,32416],{"class":145,"line":2580},[143,32417,3300],{"emptyLinePlaceholder":976},[143,32419,32420],{"class":145,"line":2594},[143,32421,32422],{"class":266},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[143,32424,32425,32428,32430,32433,32436,32438],{"class":145,"line":2599},[143,32426,32427],{"class":149},"train_loader",[143,32429,160],{"class":755},[143,32431,32432],{"class":149},"Data.DataLoader(",[143,32434,32435],{"class":6116},"dataset",[143,32437,160],{"class":755},[143,32439,32440],{"class":149},"train_data,\n",[143,32442,32443,32446,32448,32450],{"class":145,"line":2628},[143,32444,32445],{"class":6116},"                             batch_size",[143,32447,160],{"class":755},[143,32449,1246],{"class":280},[143,32451,32364],{"class":149},[143,32453,32454],{"class":145,"line":2633},[143,32455,32456],{"class":266},"                             # 数据是否打乱\n",[143,32458,32459,32462,32464,32466],{"class":145,"line":2650},[143,32460,32461],{"class":6116},"                             shuffle",[143,32463,160],{"class":755},[143,32465,32374],{"class":280},[143,32467,32364],{"class":149},[143,32469,32470],{"class":145,"line":2655},[143,32471,32472],{"class":266},"                             # 规定加载数据的进程\n",[143,32474,32475,32478,32480,32482],{"class":145,"line":2660},[143,32476,32477],{"class":6116},"                             num_workers",[143,32479,160],{"class":755},[143,32481,1234],{"class":280},[143,32483,1055],{"class":149},[143,32485,32486],{"class":145,"line":2665},[143,32487,3300],{"emptyLinePlaceholder":976},[143,32489,32490],{"class":145,"line":2679},[143,32491,32492],{"class":266},"# 获得一个batch的数据\n",[143,32494,32495,32497,32500,32502,32505],{"class":145,"line":2684},[143,32496,3925],{"class":755},[143,32498,32499],{"class":149}," step,(b_x,b_y) ",[143,32501,26941],{"class":755},[143,32503,32504],{"class":280}," enumerate",[143,32506,32507],{"class":149},"(train_loader):\n",[143,32509,32510,32512,32515,32517,32519],{"class":145,"line":3477},[143,32511,4001],{"class":755},[143,32513,32514],{"class":149}," step ",[143,32516,1998],{"class":755},[143,32518,4993],{"class":280},[143,32520,4639],{"class":149},[143,32522,32523],{"class":145,"line":3491},[143,32524,32525],{"class":755},"        break\n",[143,32527,32528],{"class":145,"line":3499},[143,32529,32530],{"class":266},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[143,32532,32533,32536,32538,32541],{"class":145,"line":3504},[143,32534,32535],{"class":149},"batch_x",[143,32537,160],{"class":755},[143,32539,32540],{"class":149},"b_x.squeeze().numpy()  ",[143,32542,32543],{"class":266},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[143,32545,32546,32549,32551,32554],{"class":145,"line":3510},[143,32547,32548],{"class":149},"batch_y",[143,32550,160],{"class":755},[143,32552,32553],{"class":149},"b_y.numpy()   ",[143,32555,32556],{"class":266},"#将张量转换成功numpy数组\n",[143,32558,32559,32562,32564,32567],{"class":145,"line":3516},[143,32560,32561],{"class":149},"class_label",[143,32563,160],{"class":755},[143,32565,32566],{"class":149},"train_data.classes  ",[143,32568,32569],{"class":266},"#训练集标签\n",[143,32571,32572],{"class":145,"line":3521},[143,32573,32574],{"class":266},"# print(class_label)\n",[143,32576,32577],{"class":145,"line":8848},[143,32578,3300],{"emptyLinePlaceholder":976},[143,32580,32581],{"class":145,"line":8872},[143,32582,32583],{"class":266},"# 可视化一个batch的图像\n",[143,32585,32586,32589,32592,32594,32596,32598,32600,32602],{"class":145,"line":8877},[143,32587,32588],{"class":149},"plt.figure(",[143,32590,32591],{"class":6116},"figsize",[143,32593,160],{"class":755},[143,32595,1049],{"class":149},[143,32597,1539],{"class":280},[143,32599,1419],{"class":149},[143,32601,1360],{"class":280},[143,32603,31395],{"class":149},[143,32605,32606,32608,32611,32613,32616,32618],{"class":145,"line":8883},[143,32607,3925],{"class":755},[143,32609,32610],{"class":149}," ii ",[143,32612,26941],{"class":755},[143,32614,32615],{"class":149}," np.arange(",[143,32617,8258],{"class":280},[143,32619,32620],{"class":149},"(batch_y)):\n",[143,32622,32623,32626,32628,32630,32632,32635,32637,32639],{"class":145,"line":8910},[143,32624,32625],{"class":149},"    plt.subplot(",[143,32627,1334],{"class":280},[143,32629,1419],{"class":149},[143,32631,1642],{"class":280},[143,32633,32634],{"class":149},",ii ",[143,32636,1522],{"class":755},[143,32638,26016],{"class":280},[143,32640,1055],{"class":149},[143,32642,32643,32646,32649,32651],{"class":145,"line":8915},[143,32644,32645],{"class":149},"    plt.imshow(batch_x[ii,:,:],",[143,32647,32648],{"class":6116},"cmap",[143,32650,160],{"class":755},[143,32652,32653],{"class":149},"plt.cm.gray)\n",[143,32655,32656,32659,32661,32663,32665],{"class":145,"line":8921},[143,32657,32658],{"class":149},"    plt.title(class_label[batch_y[ii]],",[143,32660,32394],{"class":6116},[143,32662,160],{"class":755},[143,32664,1487],{"class":280},[143,32666,1055],{"class":149},[143,32668,32669,32672,32675],{"class":145,"line":8933},[143,32670,32671],{"class":149},"    plt.axis(",[143,32673,32674],{"class":163},"\"off\"",[143,32676,1055],{"class":149},[143,32678,32679,32682,32685,32687,32690],{"class":145,"line":8945},[143,32680,32681],{"class":149},"    plt.subplots_adjust(",[143,32683,32684],{"class":6116},"wspace",[143,32686,160],{"class":755},[143,32688,32689],{"class":280},"0.05",[143,32691,1055],{"class":149},[143,32693,32694],{"class":145,"line":8957},[143,32695,32696],{"class":149},"plt.show()\n",[63,32698,32699],{},"用matplotlib进行展示的过程可以后续再补",[63,32701,32702],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[63,32704,32705],{},"训练次数就是按照批次过整个训练集数据的次数",[63,32707,32708],{},"模型训练：",[133,32710,32712],{"className":31276,"code":32711,"language":31278,"meta":138,"style":138},"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",[140,32713,32714,32721,32728,32732,32744,32750,32761,32771,32781,32791,32801,32806,32818,32828,32832,32836,32841,32852,32865,32876,32893,32904,32943,32959,32971,32982,32987,32998,33014,33025,33036,33047,33054,33058,33063,33068,33072,33077,33087,33108,33112,33116,33121,33126,33131,33151,33155,33160,33170,33174,33179,33188,33193,33198,33203,33213,33217,33221,33226,33231,33241,33246,33256,33261,33270,33275,33284,33289,33298,33302,33307,33317,33321,33325,33330,33345,33373,33388,33392,33397,33402,33411,33416,33425,33430,33439,33444,33453,33458,33467,33472,33481,33486,33499,33504,33514,33519,33529,33535,33541,33547,33553,33564,33570,33590,33596,33607,33613,33619,33625,33631,33637,33643,33649,33669,33675,33691,33697,33711,33717,33732,33738,33747,33753,33762,33768,33774,33783,33789,33800,33806,33825,33831,33842,33848,33868,33884,33890,33904,33910,33916,33927,33933,33939,33949,33955,33966,33972,33982,33987,33993,34042,34089,34094,34100,34119,34125,34145,34151,34157,34167,34172,34178,34194,34239,34245,34251,34257,34268,34274,34280,34286,34304,34318,34327,34336,34345,34354,34360,34366,34374,34379,34385,34396,34402,34422,34428,34434,34440,34457,34463,34469,34475,34481,34487,34514,34538,34544,34550,34556,34567,34578,34584,34601,34624,34647,34653,34658,34667,34677,34683,34688,34694,34707,34713,34724,34735,34754],{"__ignoreMap":138},[143,32715,32716,32718],{"class":145,"line":146},[143,32717,31290],{"class":755},[143,32719,32720],{"class":149}," copy\n",[143,32722,32723,32725],{"class":145,"line":35},[143,32724,31290],{"class":755},[143,32726,32727],{"class":149}," time\n",[143,32729,32730],{"class":145,"line":46},[143,32731,3300],{"emptyLinePlaceholder":976},[143,32733,32734,32736,32739,32741],{"class":145,"line":293},[143,32735,31290],{"class":755},[143,32737,32738],{"class":149}," pandas ",[143,32740,32281],{"class":755},[143,32742,32743],{"class":149}," pd\n",[143,32745,32746,32748],{"class":145,"line":306},[143,32747,31290],{"class":755},[143,32749,31293],{"class":149},[143,32751,32752,32754,32756,32758],{"class":145,"line":319},[143,32753,31635],{"class":755},[143,32755,32313],{"class":149},[143,32757,31290],{"class":755},[143,32759,32760],{"class":149}," Dataset\n",[143,32762,32763,32765,32767,32769],{"class":145,"line":332},[143,32764,31635],{"class":755},[143,32766,32266],{"class":149},[143,32768,31290],{"class":755},[143,32770,32271],{"class":149},[143,32772,32773,32775,32777,32779],{"class":145,"line":345},[143,32774,31635],{"class":755},[143,32776,32296],{"class":149},[143,32778,31290],{"class":755},[143,32780,32301],{"class":149},[143,32782,32783,32785,32787,32789],{"class":145,"line":701},[143,32784,31290],{"class":755},[143,32786,32313],{"class":149},[143,32788,32281],{"class":755},[143,32790,32318],{"class":149},[143,32792,32793,32795,32797,32799],{"class":145,"line":707},[143,32794,31290],{"class":755},[143,32796,32330],{"class":149},[143,32798,32281],{"class":755},[143,32800,32335],{"class":149},[143,32802,32803],{"class":145,"line":727},[143,32804,32805],{"class":266},"# 导入模型\n",[143,32807,32808,32810,32813,32815],{"class":145,"line":2518},[143,32809,31635],{"class":755},[143,32811,32812],{"class":149}," model ",[143,32814,31290],{"class":755},[143,32816,32817],{"class":149}," LeNet\n",[143,32819,32820,32822,32824,32826],{"class":145,"line":2524},[143,32821,31635],{"class":755},[143,32823,31638],{"class":149},[143,32825,31290],{"class":755},[143,32827,31643],{"class":149},[143,32829,32830],{"class":145,"line":2529},[143,32831,3300],{"emptyLinePlaceholder":976},[143,32833,32834],{"class":145,"line":2543},[143,32835,3300],{"emptyLinePlaceholder":976},[143,32837,32838],{"class":145,"line":2548},[143,32839,32840],{"class":266},"# 处理训练集与验证集函数--->划分数据集\n",[143,32842,32843,32846,32849],{"class":145,"line":2554},[143,32844,32845],{"class":755},"def",[143,32847,32848],{"class":156}," train_val_data_process",[143,32850,32851],{"class":149},"():\n",[143,32853,32854,32857,32859,32861,32863],{"class":145,"line":2575},[143,32855,32856],{"class":149},"    train_data",[143,32858,160],{"class":755},[143,32860,32353],{"class":149},[143,32862,32361],{"class":163},[143,32864,32364],{"class":149},[143,32866,32867,32870,32872,32874],{"class":145,"line":2580},[143,32868,32869],{"class":6116},"                            train",[143,32871,160],{"class":755},[143,32873,32374],{"class":280},[143,32875,32364],{"class":149},[143,32877,32878,32881,32883,32885,32887,32889,32891],{"class":145,"line":2594},[143,32879,32880],{"class":6116},"                            transform",[143,32882,160],{"class":755},[143,32884,32391],{"class":149},[143,32886,32394],{"class":6116},[143,32888,160],{"class":755},[143,32890,1941],{"class":280},[143,32892,32402],{"class":149},[143,32894,32895,32898,32900,32902],{"class":145,"line":2599},[143,32896,32897],{"class":6116},"                            download",[143,32899,160],{"class":755},[143,32901,32374],{"class":280},[143,32903,1055],{"class":149},[143,32905,32906,32909,32911,32914,32917,32919,32922,32924,32926,32929,32931,32933,32936,32938,32940],{"class":145,"line":2628},[143,32907,32908],{"class":149},"    train_data,val_data",[143,32910,160],{"class":755},[143,32912,32913],{"class":149},"Data.random_split(train_data,[",[143,32915,32916],{"class":280},"round",[143,32918,1049],{"class":149},[143,32920,32921],{"class":280},"0.8",[143,32923,1496],{"class":755},[143,32925,8258],{"class":280},[143,32927,32928],{"class":149},"(train_data)),",[143,32930,32916],{"class":280},[143,32932,1049],{"class":149},[143,32934,32935],{"class":280},"0.2",[143,32937,1496],{"class":755},[143,32939,8258],{"class":280},[143,32941,32942],{"class":149},"(train_data))])\n",[143,32944,32945,32948,32950,32953,32955,32957],{"class":145,"line":2633},[143,32946,32947],{"class":149},"    train_dataloader ",[143,32949,160],{"class":755},[143,32951,32952],{"class":149}," Data.DataLoader(",[143,32954,32435],{"class":6116},[143,32956,160],{"class":755},[143,32958,32440],{"class":149},[143,32960,32961,32964,32966,32969],{"class":145,"line":2650},[143,32962,32963],{"class":6116},"                                       batch_size",[143,32965,160],{"class":755},[143,32967,32968],{"class":280},"128",[143,32970,32364],{"class":149},[143,32972,32973,32976,32978,32980],{"class":145,"line":2655},[143,32974,32975],{"class":6116},"                                       shuffle",[143,32977,160],{"class":755},[143,32979,32374],{"class":280},[143,32981,32364],{"class":149},[143,32983,32984],{"class":145,"line":2660},[143,32985,32986],{"class":266},"                                       # 规定8个进程\n",[143,32988,32989,32992,32994,32996],{"class":145,"line":2665},[143,32990,32991],{"class":6116},"                                       num_workers",[143,32993,160],{"class":755},[143,32995,1436],{"class":280},[143,32997,1055],{"class":149},[143,32999,33000,33003,33005,33007,33009,33011],{"class":145,"line":2679},[143,33001,33002],{"class":149},"    val_dataloader",[143,33004,160],{"class":755},[143,33006,32432],{"class":149},[143,33008,32435],{"class":6116},[143,33010,160],{"class":755},[143,33012,33013],{"class":149},"val_data,\n",[143,33015,33016,33019,33021,33023],{"class":145,"line":2684},[143,33017,33018],{"class":6116},"                                   batch_size",[143,33020,160],{"class":755},[143,33022,32968],{"class":280},[143,33024,32364],{"class":149},[143,33026,33027,33030,33032,33034],{"class":145,"line":3477},[143,33028,33029],{"class":6116},"                                   shuffle",[143,33031,160],{"class":755},[143,33033,32374],{"class":280},[143,33035,32364],{"class":149},[143,33037,33038,33041,33043,33045],{"class":145,"line":3491},[143,33039,33040],{"class":6116},"                                   num_workers",[143,33042,160],{"class":755},[143,33044,1436],{"class":280},[143,33046,1055],{"class":149},[143,33048,33049,33051],{"class":145,"line":3499},[143,33050,4990],{"class":755},[143,33052,33053],{"class":149}," train_dataloader,val_dataloader\n",[143,33055,33056],{"class":145,"line":3504},[143,33057,3300],{"emptyLinePlaceholder":976},[143,33059,33060],{"class":145,"line":3510},[143,33061,33062],{"class":266},"# 验证是否出错\n",[143,33064,33065],{"class":145,"line":3516},[143,33066,33067],{"class":266},"# train_val_data_process()\n",[143,33069,33070],{"class":145,"line":3521},[143,33071,3300],{"emptyLinePlaceholder":976},[143,33073,33074],{"class":145,"line":8848},[143,33075,33076],{"class":266},"# 定义模型训练函数\n",[143,33078,33079,33081,33084],{"class":145,"line":8872},[143,33080,32845],{"class":755},[143,33082,33083],{"class":156}," train_model_process",[143,33085,33086],{"class":149},"(model,train_dataloader,val_dataloader,num_epochs):\n",[143,33088,33089,33091,33093,33095,33097,33099,33101,33103,33106],{"class":145,"line":8877},[143,33090,32135],{"class":149},[143,33092,160],{"class":755},[143,33094,31349],{"class":149},[143,33096,32142],{"class":163},[143,33098,2605],{"class":755},[143,33100,32147],{"class":149},[143,33102,2602],{"class":755},[143,33104,33105],{"class":163}," 'cpu'",[143,33107,1055],{"class":149},[143,33109,33110],{"class":145,"line":8883},[143,33111,3300],{"emptyLinePlaceholder":976},[143,33113,33114],{"class":145,"line":8910},[143,33115,3300],{"emptyLinePlaceholder":976},[143,33117,33118],{"class":145,"line":8915},[143,33119,33120],{"class":266},"    # 定义优化器\n",[143,33122,33123],{"class":145,"line":8921},[143,33124,33125],{"class":266},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[143,33127,33128],{"class":145,"line":8933},[143,33129,33130],{"class":266},"    # lr为学习率\n",[143,33132,33133,33136,33138,33141,33144,33146,33149],{"class":145,"line":8945},[143,33134,33135],{"class":149},"    optimizer",[143,33137,160],{"class":755},[143,33139,33140],{"class":149},"torch.optim.Adam(model.parameters(),",[143,33142,33143],{"class":6116},"lr",[143,33145,160],{"class":755},[143,33147,33148],{"class":280},"0.001",[143,33150,1055],{"class":149},[143,33152,33153],{"class":145,"line":8957},[143,33154,3300],{"emptyLinePlaceholder":976},[143,33156,33157],{"class":145,"line":10616},[143,33158,33159],{"class":266},"    # 定义损失函数使用交叉熵损失函数\n",[143,33161,33162,33165,33167],{"class":145,"line":10641},[143,33163,33164],{"class":149},"    criterion",[143,33166,160],{"class":755},[143,33168,33169],{"class":149},"nn.CrossEntropyLoss()\n",[143,33171,33172],{"class":145,"line":10664},[143,33173,3300],{"emptyLinePlaceholder":976},[143,33175,33176],{"class":145,"line":10688},[143,33177,33178],{"class":266},"    # 将模型放到GPU中进行训练\n",[143,33180,33181,33183,33185],{"class":145,"line":10693},[143,33182,32187],{"class":149},[143,33184,160],{"class":755},[143,33186,33187],{"class":149},"model.to(device)\n",[143,33189,33190],{"class":145,"line":10698},[143,33191,33192],{"class":266},"    # 复制当前模型的参数\n",[143,33194,33195],{"class":145,"line":10703},[143,33196,33197],{"class":266},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[143,33199,33200],{"class":145,"line":10712},[143,33201,33202],{"class":266},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[143,33204,33205,33208,33210],{"class":145,"line":10717},[143,33206,33207],{"class":149},"    best_model_wts",[143,33209,160],{"class":755},[143,33211,33212],{"class":149},"copy.deepcopy(model.state_dict())\n",[143,33214,33215],{"class":145,"line":10723},[143,33216,3300],{"emptyLinePlaceholder":976},[143,33218,33219],{"class":145,"line":10744},[143,33220,3300],{"emptyLinePlaceholder":976},[143,33222,33223],{"class":145,"line":10750},[143,33224,33225],{"class":266},"    # 初始化参数\n",[143,33227,33228],{"class":145,"line":10764},[143,33229,33230],{"class":266},"    # 最高准确度\n",[143,33232,33233,33236,33238],{"class":145,"line":10770},[143,33234,33235],{"class":149},"    best_acc",[143,33237,160],{"class":755},[143,33239,33240],{"class":280},"0.0\n",[143,33242,33243],{"class":145,"line":10797},[143,33244,33245],{"class":266},"    # 训练集损失列表\n",[143,33247,33248,33251,33253],{"class":145,"line":10806},[143,33249,33250],{"class":149},"    train_loss_all",[143,33252,160],{"class":755},[143,33254,33255],{"class":149},"[]\n",[143,33257,33258],{"class":145,"line":10812},[143,33259,33260],{"class":266},"    # 验证集函数列表\n",[143,33262,33263,33266,33268],{"class":145,"line":10820},[143,33264,33265],{"class":149},"    val_loss_all",[143,33267,160],{"class":755},[143,33269,33255],{"class":149},[143,33271,33272],{"class":145,"line":10825},[143,33273,33274],{"class":266},"    # 训练集准确度列表\n",[143,33276,33277,33280,33282],{"class":145,"line":17502},[143,33278,33279],{"class":149},"    train_acc_all",[143,33281,160],{"class":755},[143,33283,33255],{"class":149},[143,33285,33286],{"class":145,"line":17508},[143,33287,33288],{"class":266},"    # 验证集准确度列表\n",[143,33290,33291,33294,33296],{"class":145,"line":17531},[143,33292,33293],{"class":149},"    val_acc_all",[143,33295,160],{"class":755},[143,33297,33255],{"class":149},[143,33299,33300],{"class":145,"line":17537},[143,33301,3300],{"emptyLinePlaceholder":976},[143,33303,33304],{"class":145,"line":17560},[143,33305,33306],{"class":266},"    # 保存当前时间--->方便看每轮训练的时间\n",[143,33308,33309,33312,33314],{"class":145,"line":17574},[143,33310,33311],{"class":149},"    since",[143,33313,160],{"class":755},[143,33315,33316],{"class":149},"time.time()\n",[143,33318,33319],{"class":145,"line":17594},[143,33320,3300],{"emptyLinePlaceholder":976},[143,33322,33323],{"class":145,"line":17600},[143,33324,3300],{"emptyLinePlaceholder":976},[143,33326,33327],{"class":145,"line":17611},[143,33328,33329],{"class":266},"    # 准备工作完成--->开始训练模型\n",[143,33331,33332,33334,33337,33339,33342],{"class":145,"line":17634},[143,33333,4101],{"class":755},[143,33335,33336],{"class":149}," epoch ",[143,33338,26941],{"class":755},[143,33340,33341],{"class":280}," range",[143,33343,33344],{"class":149},"(num_epochs):\n",[143,33346,33347,33350,33352,33355,33358,33360,33362,33364,33367,33369,33371],{"class":145,"line":17656},[143,33348,33349],{"class":280},"        print",[143,33351,1049],{"class":149},[143,33353,33354],{"class":163},"\"Epoch ",[143,33356,33357],{"class":280},"{}",[143,33359,1625],{"class":163},[143,33361,33357],{"class":280},[143,33363,1292],{"class":163},[143,33365,33366],{"class":149},".format(epoch,num_epochs",[143,33368,1573],{"class":755},[143,33370,771],{"class":280},[143,33372,31395],{"class":149},[143,33374,33375,33377,33379,33382,33384,33386],{"class":145,"line":17661},[143,33376,33349],{"class":280},[143,33378,1049],{"class":149},[143,33380,33381],{"class":163},"\"-\"",[143,33383,1496],{"class":755},[143,33385,1487],{"class":280},[143,33387,1055],{"class":149},[143,33389,33390],{"class":145,"line":17667},[143,33391,3300],{"emptyLinePlaceholder":976},[143,33393,33394],{"class":145,"line":17681},[143,33395,33396],{"class":266},"        # 初始化参数\n",[143,33398,33399],{"class":145,"line":17694},[143,33400,33401],{"class":266},"        # 训练集损失函数\n",[143,33403,33404,33407,33409],{"class":145,"line":17699},[143,33405,33406],{"class":149},"        train_loss",[143,33408,160],{"class":755},[143,33410,33240],{"class":280},[143,33412,33413],{"class":145,"line":17713},[143,33414,33415],{"class":266},"        # 训练集准确度\n",[143,33417,33418,33421,33423],{"class":145,"line":17718},[143,33419,33420],{"class":149},"        train_corrects",[143,33422,160],{"class":755},[143,33424,3985],{"class":280},[143,33426,33427],{"class":145,"line":17724},[143,33428,33429],{"class":266},"        # 验证集损失函数\n",[143,33431,33432,33435,33437],{"class":145,"line":17729},[143,33433,33434],{"class":149},"        val_loss",[143,33436,160],{"class":755},[143,33438,33240],{"class":280},[143,33440,33441],{"class":145,"line":17743},[143,33442,33443],{"class":266},"        # 验证集准确度\n",[143,33445,33446,33449,33451],{"class":145,"line":17748},[143,33447,33448],{"class":149},"        val_corrects",[143,33450,160],{"class":755},[143,33452,3985],{"class":280},[143,33454,33455],{"class":145,"line":17753},[143,33456,33457],{"class":266},"        # 训练集样本数量\n",[143,33459,33460,33463,33465],{"class":145,"line":17767},[143,33461,33462],{"class":149},"        train_num",[143,33464,160],{"class":755},[143,33466,3985],{"class":280},[143,33468,33469],{"class":145,"line":17779},[143,33470,33471],{"class":266},"        # 验证集样本数量\n",[143,33473,33474,33477,33479],{"class":145,"line":17784},[143,33475,33476],{"class":149},"        val_num",[143,33478,160],{"class":755},[143,33480,3985],{"class":280},[143,33482,33483],{"class":145,"line":17797},[143,33484,33485],{"class":266},"        # 将数据放到设备,并开始训练\n",[143,33487,33488,33490,33492,33494,33496],{"class":145,"line":17802},[143,33489,4303],{"class":755},[143,33491,32499],{"class":149},[143,33493,26941],{"class":755},[143,33495,32504],{"class":280},[143,33497,33498],{"class":149},"(train_dataloader):\n",[143,33500,33501],{"class":145,"line":17807},[143,33502,33503],{"class":266},"            # 将特征放入到训练设备\n",[143,33505,33506,33509,33511],{"class":145,"line":17812},[143,33507,33508],{"class":149},"            b_x",[143,33510,160],{"class":755},[143,33512,33513],{"class":149},"b_x.to(device)\n",[143,33515,33516],{"class":145,"line":17825},[143,33517,33518],{"class":266},"            # 将标签放入到训练设备当中\n",[143,33520,33521,33524,33526],{"class":145,"line":17830},[143,33522,33523],{"class":149},"            b_y",[143,33525,160],{"class":755},[143,33527,33528],{"class":149},"b_y.to(device)\n",[143,33530,33532],{"class":145,"line":33531},98,[143,33533,33534],{"class":266},"            # 设置模型为训练模式\n",[143,33536,33538],{"class":145,"line":33537},99,[143,33539,33540],{"class":149},"            model.train()\n",[143,33542,33544],{"class":145,"line":33543},100,[143,33545,33546],{"class":266},"            # 将数据放到模型当中,开始前向传播\n",[143,33548,33550],{"class":145,"line":33549},101,[143,33551,33552],{"class":266},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[143,33554,33556,33559,33561],{"class":145,"line":33555},102,[143,33557,33558],{"class":149},"            output",[143,33560,160],{"class":755},[143,33562,33563],{"class":149},"model(b_x)\n",[143,33565,33567],{"class":145,"line":33566},103,[143,33568,33569],{"class":266},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[143,33571,33573,33576,33578,33581,33584,33586,33588],{"class":145,"line":33572},104,[143,33574,33575],{"class":149},"            pre_lab",[143,33577,160],{"class":755},[143,33579,33580],{"class":149},"torch.argmax(output,",[143,33582,33583],{"class":6116},"dim",[143,33585,160],{"class":755},[143,33587,771],{"class":280},[143,33589,1055],{"class":149},[143,33591,33593],{"class":145,"line":33592},105,[143,33594,33595],{"class":266},"            # 计算每一个batch的损失函数\n",[143,33597,33599,33602,33604],{"class":145,"line":33598},106,[143,33600,33601],{"class":149},"            loss",[143,33603,160],{"class":755},[143,33605,33606],{"class":149},"criterion(output,b_y)\n",[143,33608,33610],{"class":145,"line":33609},107,[143,33611,33612],{"class":266},"            # 将梯度初始化为0\n",[143,33614,33616],{"class":145,"line":33615},108,[143,33617,33618],{"class":149},"            optimizer.zero_grad()\n",[143,33620,33622],{"class":145,"line":33621},109,[143,33623,33624],{"class":266},"            # 梯度置为0后再进行反向传播\n",[143,33626,33628],{"class":145,"line":33627},110,[143,33629,33630],{"class":149},"            loss.backward()\n",[143,33632,33634],{"class":145,"line":33633},111,[143,33635,33636],{"class":266},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[143,33638,33640],{"class":145,"line":33639},112,[143,33641,33642],{"class":149},"            optimizer.step()\n",[143,33644,33646],{"class":145,"line":33645},113,[143,33647,33648],{"class":266},"            # loss.item()指的是batch的平均损失\n",[143,33650,33652,33655,33657,33660,33662,33665,33667],{"class":145,"line":33651},114,[143,33653,33654],{"class":149},"            train_loss",[143,33656,10377],{"class":755},[143,33658,33659],{"class":149},"loss.item()",[143,33661,1496],{"class":755},[143,33663,33664],{"class":149},"b_x.size(",[143,33666,1234],{"class":280},[143,33668,1055],{"class":149},[143,33670,33672],{"class":145,"line":33671},115,[143,33673,33674],{"class":266},"            # 计算每个批次中正确预测的数量\n",[143,33676,33678,33681,33683,33686,33688],{"class":145,"line":33677},116,[143,33679,33680],{"class":149},"            train_corrects",[143,33682,10377],{"class":755},[143,33684,33685],{"class":149},"torch.sum(pre_lab",[143,33687,3849],{"class":755},[143,33689,33690],{"class":149},"b_y.data)\n",[143,33692,33694],{"class":145,"line":33693},117,[143,33695,33696],{"class":266},"            # 计算目前为止一共处理了多少样本\n",[143,33698,33700,33703,33705,33707,33709],{"class":145,"line":33699},118,[143,33701,33702],{"class":149},"            train_num",[143,33704,10377],{"class":755},[143,33706,33664],{"class":149},[143,33708,1234],{"class":280},[143,33710,1055],{"class":149},[143,33712,33714],{"class":145,"line":33713},119,[143,33715,33716],{"class":266},"        # 验证数据\n",[143,33718,33720,33722,33725,33727,33729],{"class":145,"line":33719},120,[143,33721,4303],{"class":755},[143,33723,33724],{"class":149}," step ,(b_x,b_y) ",[143,33726,26941],{"class":755},[143,33728,32504],{"class":280},[143,33730,33731],{"class":149},"(val_dataloader):\n",[143,33733,33735],{"class":145,"line":33734},121,[143,33736,33737],{"class":266},"            # 将特征放到验证设备当中\n",[143,33739,33741,33743,33745],{"class":145,"line":33740},122,[143,33742,33508],{"class":149},[143,33744,160],{"class":755},[143,33746,33513],{"class":149},[143,33748,33750],{"class":145,"line":33749},123,[143,33751,33752],{"class":266},"            # 将标签放到放到训练设备当中\n",[143,33754,33756,33758,33760],{"class":145,"line":33755},124,[143,33757,33523],{"class":149},[143,33759,160],{"class":755},[143,33761,33528],{"class":149},[143,33763,33765],{"class":145,"line":33764},125,[143,33766,33767],{"class":266},"            # 开启验证模式，设置模型为评估模式\n",[143,33769,33771],{"class":145,"line":33770},126,[143,33772,33773],{"class":149},"            model.eval()\n",[143,33775,33777,33780],{"class":145,"line":33776},127,[143,33778,33779],{"class":755},"            with",[143,33781,33782],{"class":149}," torch.no_grad():\n",[143,33784,33786],{"class":145,"line":33785},128,[143,33787,33788],{"class":266},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[143,33790,33792,33795,33797],{"class":145,"line":33791},129,[143,33793,33794],{"class":149},"                output ",[143,33796,160],{"class":755},[143,33798,33799],{"class":149}," model(b_x)\n",[143,33801,33803],{"class":145,"line":33802},130,[143,33804,33805],{"class":266},"                # 查找每一行中最大值对应的下标\n",[143,33807,33809,33812,33814,33817,33819,33821,33823],{"class":145,"line":33808},131,[143,33810,33811],{"class":149},"                pre_lab ",[143,33813,160],{"class":755},[143,33815,33816],{"class":149}," torch.argmax(output, ",[143,33818,33583],{"class":6116},[143,33820,160],{"class":755},[143,33822,771],{"class":280},[143,33824,1055],{"class":149},[143,33826,33828],{"class":145,"line":33827},132,[143,33829,33830],{"class":266},"                # 计算验证集上的当前 batch 损失\n",[143,33832,33834,33837,33839],{"class":145,"line":33833},133,[143,33835,33836],{"class":149},"                val_batch_loss ",[143,33838,160],{"class":755},[143,33840,33841],{"class":149}," criterion(output, b_y)\n",[143,33843,33845],{"class":145,"line":33844},134,[143,33846,33847],{"class":266},"                # 对损失函数进行累加（按样本数加权）\n",[143,33849,33851,33854,33856,33859,33861,33864,33866],{"class":145,"line":33850},135,[143,33852,33853],{"class":149},"                val_loss ",[143,33855,10377],{"class":755},[143,33857,33858],{"class":149}," val_batch_loss.item() ",[143,33860,1496],{"class":755},[143,33862,33863],{"class":149}," b_x.size(",[143,33865,1234],{"class":280},[143,33867,1055],{"class":149},[143,33869,33871,33874,33876,33879,33881],{"class":145,"line":33870},136,[143,33872,33873],{"class":149},"                val_corrects ",[143,33875,10377],{"class":755},[143,33877,33878],{"class":149}," torch.sum(pre_lab ",[143,33880,3849],{"class":755},[143,33882,33883],{"class":149}," b_y.data)\n",[143,33885,33887],{"class":145,"line":33886},137,[143,33888,33889],{"class":266},"                # 当前用于验证的样本数量\n",[143,33891,33893,33896,33898,33900,33902],{"class":145,"line":33892},138,[143,33894,33895],{"class":149},"            val_num ",[143,33897,10377],{"class":755},[143,33899,33863],{"class":149},[143,33901,1234],{"class":280},[143,33903,1055],{"class":149},[143,33905,33907],{"class":145,"line":33906},139,[143,33908,33909],{"class":266},"        # 计算并保存每一次迭代的loss值和准确率\n",[143,33911,33913],{"class":145,"line":33912},140,[143,33914,33915],{"class":266},"        # 计算并保存训练集的loss值\n",[143,33917,33919,33922,33924],{"class":145,"line":33918},141,[143,33920,33921],{"class":149},"        train_loss_all.append(train_loss",[143,33923,1625],{"class":755},[143,33925,33926],{"class":149},"train_num)\n",[143,33928,33930],{"class":145,"line":33929},142,[143,33931,33932],{"class":266},"        # 取双精度\n",[143,33934,33936],{"class":145,"line":33935},143,[143,33937,33938],{"class":266},"        # 计算并保存训练集的准确率\n",[143,33940,33942,33945,33947],{"class":145,"line":33941},144,[143,33943,33944],{"class":149},"        train_acc_all.append(train_corrects.double().item()",[143,33946,1625],{"class":755},[143,33948,33926],{"class":149},[143,33950,33952],{"class":145,"line":33951},145,[143,33953,33954],{"class":266},"        # 计算并保存验证集的loss值\n",[143,33956,33958,33961,33963],{"class":145,"line":33957},146,[143,33959,33960],{"class":149},"        val_loss_all.append(val_loss",[143,33962,1625],{"class":755},[143,33964,33965],{"class":149},"val_num)\n",[143,33967,33969],{"class":145,"line":33968},147,[143,33970,33971],{"class":266},"        # 计算并保存验证集的准确率\n",[143,33973,33975,33978,33980],{"class":145,"line":33974},148,[143,33976,33977],{"class":149},"        val_acc_all.append(val_corrects.double().item()",[143,33979,1625],{"class":755},[143,33981,33965],{"class":149},[143,33983,33985],{"class":145,"line":33984},149,[143,33986,3300],{"emptyLinePlaceholder":976},[143,33988,33990],{"class":145,"line":33989},150,[143,33991,33992],{"class":266},"        # 打印训练一轮的loss值和准确率\n",[143,33994,33996,33998,34000,34002,34004,34007,34009,34012,34014,34017,34019,34021,34023,34025,34028,34030,34032,34035,34037,34039],{"class":145,"line":33995},151,[143,33997,33349],{"class":280},[143,33999,1049],{"class":149},[143,34001,4492],{"class":163},[143,34003,33357],{"class":280},[143,34005,34006],{"class":163},"train loss:",[143,34008,1936],{"class":280},[143,34010,34011],{"class":755},":.4f",[143,34013,366],{"class":280},[143,34015,34016],{"class":163}," train acc:",[143,34018,1936],{"class":280},[143,34020,34011],{"class":755},[143,34022,366],{"class":280},[143,34024,4492],{"class":163},[143,34026,34027],{"class":149},".format(epoch,train_loss_all[",[143,34029,1573],{"class":755},[143,34031,771],{"class":280},[143,34033,34034],{"class":149},"],train_acc_all[",[143,34036,1573],{"class":755},[143,34038,771],{"class":280},[143,34040,34041],{"class":149},"]))\n",[143,34043,34045,34047,34049,34051,34053,34056,34058,34060,34062,34065,34067,34069,34071,34073,34076,34078,34080,34083,34085,34087],{"class":145,"line":34044},152,[143,34046,33349],{"class":280},[143,34048,1049],{"class":149},[143,34050,4492],{"class":163},[143,34052,33357],{"class":280},[143,34054,34055],{"class":163},"val loss:",[143,34057,1936],{"class":280},[143,34059,34011],{"class":755},[143,34061,366],{"class":280},[143,34063,34064],{"class":163}," val acc:",[143,34066,1936],{"class":280},[143,34068,34011],{"class":755},[143,34070,366],{"class":280},[143,34072,4492],{"class":163},[143,34074,34075],{"class":149},".format(epoch,val_loss_all[",[143,34077,1573],{"class":755},[143,34079,771],{"class":280},[143,34081,34082],{"class":149},"],val_acc_all[",[143,34084,1573],{"class":755},[143,34086,771],{"class":280},[143,34088,34041],{"class":149},[143,34090,34092],{"class":145,"line":34091},153,[143,34093,3300],{"emptyLinePlaceholder":976},[143,34095,34097],{"class":145,"line":34096},154,[143,34098,34099],{"class":266},"        # 判断准确度--->保存最优模型\n",[143,34101,34103,34105,34108,34110,34112,34114,34116],{"class":145,"line":34102},155,[143,34104,3397],{"class":755},[143,34106,34107],{"class":149}," val_acc_all[",[143,34109,1573],{"class":755},[143,34111,771],{"class":280},[143,34113,1979],{"class":149},[143,34115,1998],{"class":755},[143,34117,34118],{"class":149},"best_acc:\n",[143,34120,34122],{"class":145,"line":34121},156,[143,34123,34124],{"class":266},"            # 保存当前模型准确度\n",[143,34126,34128,34131,34133,34135,34138,34140,34142],{"class":145,"line":34127},157,[143,34129,34130],{"class":149},"            best_acc:",[143,34132,1087],{"class":280},[143,34134,160],{"class":755},[143,34136,34137],{"class":149},"val_acc_all[",[143,34139,1573],{"class":755},[143,34141,771],{"class":280},[143,34143,34144],{"class":149},"]\n",[143,34146,34148],{"class":145,"line":34147},158,[143,34149,34150],{"class":266},"            # 保存当前的准确度\n",[143,34152,34154],{"class":145,"line":34153},159,[143,34155,34156],{"class":266},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[143,34158,34160,34163,34165],{"class":145,"line":34159},160,[143,34161,34162],{"class":149},"            best_model_wts",[143,34164,160],{"class":755},[143,34166,33212],{"class":149},[143,34168,34170],{"class":145,"line":34169},161,[143,34171,3300],{"emptyLinePlaceholder":976},[143,34173,34175],{"class":145,"line":34174},162,[143,34176,34177],{"class":266},"        # 计算耗时\n",[143,34179,34181,34184,34186,34189,34191],{"class":145,"line":34180},163,[143,34182,34183],{"class":149},"        time_use",[143,34185,160],{"class":755},[143,34187,34188],{"class":149},"time.time()",[143,34190,1573],{"class":755},[143,34192,34193],{"class":149},"since\n",[143,34195,34197,34199,34201,34204,34206,34209,34211,34213,34215,34217,34219,34222,34225,34228,34230,34233,34235,34237],{"class":145,"line":34196},164,[143,34198,33349],{"class":280},[143,34200,1049],{"class":149},[143,34202,34203],{"class":163},"'训练和验证耗费的时间",[143,34205,1936],{"class":280},[143,34207,34208],{"class":755},":.0f",[143,34210,366],{"class":280},[143,34212,1585],{"class":163},[143,34214,1936],{"class":280},[143,34216,34208],{"class":755},[143,34218,366],{"class":280},[143,34220,34221],{"class":163},"s'",[143,34223,34224],{"class":149},".format(time_use",[143,34226,34227],{"class":755},"\u002F\u002F",[143,34229,1947],{"class":280},[143,34231,34232],{"class":149},",time_use",[143,34234,1369],{"class":755},[143,34236,1947],{"class":280},[143,34238,31395],{"class":149},[143,34240,34242],{"class":145,"line":34241},165,[143,34243,34244],{"class":266},"    # 选择最优参数\n",[143,34246,34248],{"class":145,"line":34247},166,[143,34249,34250],{"class":266},"    # 加载最高准确率下的模型参数\n",[143,34252,34254],{"class":145,"line":34253},167,[143,34255,34256],{"class":266},"    # model.load_state_dict(best_model_wts)\n",[143,34258,34260,34263,34266],{"class":145,"line":34259},168,[143,34261,34262],{"class":149},"    torch.save(model.state_dict(best_model_wts), ",[143,34264,34265],{"class":163},"'.\u002Fbest_model.pth'",[143,34267,1055],{"class":149},[143,34269,34271],{"class":145,"line":34270},169,[143,34272,34273],{"class":266},"    # 或者写成\n",[143,34275,34277],{"class":145,"line":34276},170,[143,34278,34279],{"class":266},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[143,34281,34283],{"class":145,"line":34282},171,[143,34284,34285],{"class":266},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[143,34287,34289,34292,34294,34297,34300,34302],{"class":145,"line":34288},172,[143,34290,34291],{"class":149},"    train_process",[143,34293,160],{"class":755},[143,34295,34296],{"class":149},"pd.DataFrame(",[143,34298,34299],{"class":6116},"data",[143,34301,160],{"class":755},[143,34303,2449],{"class":149},[143,34305,34307,34310,34312,34315],{"class":145,"line":34306},173,[143,34308,34309],{"class":163},"        \"epoch\"",[143,34311,1900],{"class":149},[143,34313,34314],{"class":280},"range",[143,34316,34317],{"class":149},"(num_epochs),\n",[143,34319,34321,34324],{"class":145,"line":34320},174,[143,34322,34323],{"class":163},"        \"train_loss_all\"",[143,34325,34326],{"class":149},":train_loss_all,\n",[143,34328,34330,34333],{"class":145,"line":34329},175,[143,34331,34332],{"class":163},"        \"val_loss_all\"",[143,34334,34335],{"class":149},":val_loss_all,\n",[143,34337,34339,34342],{"class":145,"line":34338},176,[143,34340,34341],{"class":163},"        \"train_acc_all\"",[143,34343,34344],{"class":149},":train_acc_all,\n",[143,34346,34348,34351],{"class":145,"line":34347},177,[143,34349,34350],{"class":163},"        \"val_acc_all\"",[143,34352,34353],{"class":149},":val_acc_all\n",[143,34355,34357],{"class":145,"line":34356},178,[143,34358,34359],{"class":149},"    })\n",[143,34361,34363],{"class":145,"line":34362},179,[143,34364,34365],{"class":266},"    # 返回训练保存的过程\n",[143,34367,34369,34371],{"class":145,"line":34368},180,[143,34370,4990],{"class":755},[143,34372,34373],{"class":149}," train_process\n",[143,34375,34377],{"class":145,"line":34376},181,[143,34378,3300],{"emptyLinePlaceholder":976},[143,34380,34382],{"class":145,"line":34381},182,[143,34383,34384],{"class":266},"# 将loss值和精度按照图片的形式展示出来\n",[143,34386,34388,34390,34393],{"class":145,"line":34387},183,[143,34389,32845],{"class":755},[143,34391,34392],{"class":156}," matplot_acc_loss",[143,34394,34395],{"class":149},"(train_process):\n",[143,34397,34399],{"class":145,"line":34398},184,[143,34400,34401],{"class":266},"    # 设置图的大小\n",[143,34403,34405,34408,34410,34412,34414,34416,34418,34420],{"class":145,"line":34404},185,[143,34406,34407],{"class":149},"    plt.figure(",[143,34409,32591],{"class":6116},[143,34411,160],{"class":755},[143,34413,1049],{"class":149},[143,34415,1539],{"class":280},[143,34417,1419],{"class":149},[143,34419,1334],{"class":280},[143,34421,31395],{"class":149},[143,34423,34425],{"class":145,"line":34424},186,[143,34426,34427],{"class":266},"    # 设置图中有几张图\n",[143,34429,34431],{"class":145,"line":34430},187,[143,34432,34433],{"class":266},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[143,34435,34437],{"class":145,"line":34436},188,[143,34438,34439],{"class":266},"    # ①loss图\n",[143,34441,34443,34445,34447,34449,34451,34453,34455],{"class":145,"line":34442},189,[143,34444,32625],{"class":149},[143,34446,771],{"class":280},[143,34448,1419],{"class":149},[143,34450,1122],{"class":280},[143,34452,1419],{"class":149},[143,34454,771],{"class":280},[143,34456,1055],{"class":149},[143,34458,34460],{"class":145,"line":34459},190,[143,34461,34462],{"class":266},"    # 补充:\n",[143,34464,34466],{"class":145,"line":34465},191,[143,34467,34468],{"class":266},"    # plt.subplot(nrows, ncols, index)\n",[143,34470,34472],{"class":145,"line":34471},192,[143,34473,34474],{"class":266},"    # nrows：行数\n",[143,34476,34478],{"class":145,"line":34477},193,[143,34479,34480],{"class":266},"    # ncols：列数\n",[143,34482,34484],{"class":145,"line":34483},194,[143,34485,34486],{"class":266},"    # index：目前选中第几个子图（从1开始）\n",[143,34488,34490,34493,34496,34499,34502,34504,34507,34509,34512],{"class":145,"line":34489},195,[143,34491,34492],{"class":149},"    plt.plot(train_process[",[143,34494,34495],{"class":163},"\"epoch\"",[143,34497,34498],{"class":149},"],train_process.train_loss_all,",[143,34500,34501],{"class":163},"'ro-'",[143,34503,1419],{"class":149},[143,34505,34506],{"class":6116},"label",[143,34508,160],{"class":755},[143,34510,34511],{"class":163},"'train loss'",[143,34513,1055],{"class":149},[143,34515,34517,34519,34521,34524,34527,34529,34531,34533,34536],{"class":145,"line":34516},196,[143,34518,34492],{"class":149},[143,34520,34495],{"class":163},[143,34522,34523],{"class":149},"],train_process.val_loss_all,",[143,34525,34526],{"class":163},"'bs--'",[143,34528,1419],{"class":149},[143,34530,34506],{"class":6116},[143,34532,160],{"class":755},[143,34534,34535],{"class":163},"'val loss'",[143,34537,1055],{"class":149},[143,34539,34541],{"class":145,"line":34540},197,[143,34542,34543],{"class":266},"    # 添加一个图例\n",[143,34545,34547],{"class":145,"line":34546},198,[143,34548,34549],{"class":149},"    plt.legend()\n",[143,34551,34553],{"class":145,"line":34552},199,[143,34554,34555],{"class":266},"    # 给轴添加标签\n",[143,34557,34559,34562,34565],{"class":145,"line":34558},200,[143,34560,34561],{"class":149},"    plt.xlabel(",[143,34563,34564],{"class":163},"'epoch'",[143,34566,1055],{"class":149},[143,34568,34570,34573,34576],{"class":145,"line":34569},201,[143,34571,34572],{"class":149},"    plt.ylabel(",[143,34574,34575],{"class":163},"'loss'",[143,34577,1055],{"class":149},[143,34579,34581],{"class":145,"line":34580},202,[143,34582,34583],{"class":266},"    # ②准确度图\n",[143,34585,34587,34589,34591,34593,34595,34597,34599],{"class":145,"line":34586},203,[143,34588,32625],{"class":149},[143,34590,771],{"class":280},[143,34592,1419],{"class":149},[143,34594,1122],{"class":280},[143,34596,1419],{"class":149},[143,34598,1122],{"class":280},[143,34600,1055],{"class":149},[143,34602,34604,34606,34608,34611,34613,34615,34617,34619,34622],{"class":145,"line":34603},204,[143,34605,34492],{"class":149},[143,34607,34495],{"class":163},[143,34609,34610],{"class":149},"],train_process.train_acc_all,",[143,34612,34501],{"class":163},[143,34614,1419],{"class":149},[143,34616,34506],{"class":6116},[143,34618,160],{"class":755},[143,34620,34621],{"class":163},"'train acc'",[143,34623,1055],{"class":149},[143,34625,34627,34629,34631,34634,34636,34638,34640,34642,34645],{"class":145,"line":34626},205,[143,34628,34492],{"class":149},[143,34630,34495],{"class":163},[143,34632,34633],{"class":149},"],train_process.val_acc_all,",[143,34635,34526],{"class":163},[143,34637,1419],{"class":149},[143,34639,34506],{"class":6116},[143,34641,160],{"class":755},[143,34643,34644],{"class":163},"'val acc'",[143,34646,1055],{"class":149},[143,34648,34650],{"class":145,"line":34649},206,[143,34651,34652],{"class":266},"    # 添加图例\n",[143,34654,34656],{"class":145,"line":34655},207,[143,34657,34549],{"class":149},[143,34659,34661,34663,34665],{"class":145,"line":34660},208,[143,34662,34561],{"class":149},[143,34664,34495],{"class":163},[143,34666,1055],{"class":149},[143,34668,34670,34672,34675],{"class":145,"line":34669},209,[143,34671,34572],{"class":149},[143,34673,34674],{"class":163},"\"acc\"",[143,34676,1055],{"class":149},[143,34678,34680],{"class":145,"line":34679},210,[143,34681,34682],{"class":149},"    plt.show()\n",[143,34684,34686],{"class":145,"line":34685},211,[143,34687,3300],{"emptyLinePlaceholder":976},[143,34689,34691],{"class":145,"line":34690},212,[143,34692,34693],{"class":266},"# 正式开始训练:\n",[143,34695,34697,34699,34701,34703,34705],{"class":145,"line":34696},213,[143,34698,2434],{"class":755},[143,34700,32118],{"class":280},[143,34702,3849],{"class":755},[143,34704,32123],{"class":163},[143,34706,4639],{"class":149},[143,34708,34710],{"class":145,"line":34709},214,[143,34711,34712],{"class":266},"    # 将模型实例化\n",[143,34714,34716,34719,34721],{"class":145,"line":34715},215,[143,34717,34718],{"class":149},"    LeNet",[143,34720,160],{"class":755},[143,34722,34723],{"class":149},"LeNet()\n",[143,34725,34727,34730,34732],{"class":145,"line":34726},216,[143,34728,34729],{"class":149},"    train_dataloader,val_dataloader",[143,34731,160],{"class":755},[143,34733,34734],{"class":149},"train_val_data_process()\n",[143,34736,34738,34740,34742,34745,34748,34750,34752],{"class":145,"line":34737},217,[143,34739,34291],{"class":149},[143,34741,160],{"class":755},[143,34743,34744],{"class":149},"train_model_process(LeNet,train_dataloader,val_dataloader,",[143,34746,34747],{"class":6116},"num_epochs",[143,34749,160],{"class":755},[143,34751,1741],{"class":280},[143,34753,1055],{"class":149},[143,34755,34757],{"class":145,"line":34756},218,[143,34758,34759],{"class":149},"    matplot_acc_loss(train_process)\n",[63,34761,34762],{},"画图的补充点学习：",[63,34764,34765],{},[29,34766],{"alt":138,"src":34767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-014.png",[19,34769,34770],{"start":46},[22,34771,34772],{},"测试",[133,34774,34776],{"className":31276,"code":34775,"language":31278,"meta":138,"style":138},"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",[140,34777,34778,34784,34794,34806,34816,34821,34831,34841,34845,34850,34859,34876,34888,34905,34916,34932,34937,34948,34959,34970,34977,34981,34986,34996,35001,35018,35026,35030,35035,35044,35053,35057,35062,35067,35072,35079,35084,35096,35106,35116,35121,35125,35130,35139,35144,35160,35165,35170,35175,35189,35194,35208,35212,35217,35232,35237,35249,35253,35258,35270,35275,35283,35288,35293,35303,35308,35317,35322,35327,35331,35336,35341,35357,35365,35370,35375,35434,35440,35445,35456,35464,35472,35476,35481,35485,35490,35498,35503,35519,35524,35534,35544],{"__ignoreMap":138},[143,34779,34780,34782],{"class":145,"line":146},[143,34781,31290],{"class":755},[143,34783,31293],{"class":149},[143,34785,34786,34788,34790,34792],{"class":145,"line":35},[143,34787,31290],{"class":755},[143,34789,32313],{"class":149},[143,34791,32281],{"class":755},[143,34793,32318],{"class":149},[143,34795,34796,34798,34801,34803],{"class":145,"line":46},[143,34797,31635],{"class":755},[143,34799,34800],{"class":149}," jupyter_client.consoleapp ",[143,34802,31290],{"class":755},[143,34804,34805],{"class":149}," classes\n",[143,34807,34808,34810,34812,34814],{"class":145,"line":293},[143,34809,31635],{"class":755},[143,34811,32296],{"class":149},[143,34813,31290],{"class":755},[143,34815,32301],{"class":149},[143,34817,34818],{"class":145,"line":306},[143,34819,34820],{"class":266},"# 导入数据集\n",[143,34822,34823,34825,34827,34829],{"class":145,"line":319},[143,34824,31635],{"class":755},[143,34826,32266],{"class":149},[143,34828,31290],{"class":755},[143,34830,32271],{"class":149},[143,34832,34833,34835,34837,34839],{"class":145,"line":332},[143,34834,31635],{"class":755},[143,34836,32812],{"class":149},[143,34838,31290],{"class":755},[143,34840,32817],{"class":149},[143,34842,34843],{"class":145,"line":345},[143,34844,3300],{"emptyLinePlaceholder":976},[143,34846,34847],{"class":145,"line":701},[143,34848,34849],{"class":266},"# 测试数据处理\n",[143,34851,34852,34854,34857],{"class":145,"line":707},[143,34853,32845],{"class":755},[143,34855,34856],{"class":156}," test_data_process",[143,34858,32851],{"class":149},[143,34860,34861,34864,34866,34868,34870,34872,34874],{"class":145,"line":727},[143,34862,34863],{"class":149},"    test_data",[143,34865,160],{"class":755},[143,34867,32353],{"class":149},[143,34869,32356],{"class":6116},[143,34871,160],{"class":755},[143,34873,32361],{"class":163},[143,34875,32364],{"class":149},[143,34877,34878,34881,34883,34886],{"class":145,"line":2518},[143,34879,34880],{"class":6116},"                           train",[143,34882,160],{"class":755},[143,34884,34885],{"class":280},"False",[143,34887,32364],{"class":149},[143,34889,34890,34893,34895,34897,34899,34901,34903],{"class":145,"line":2524},[143,34891,34892],{"class":6116},"                           transform",[143,34894,160],{"class":755},[143,34896,32391],{"class":149},[143,34898,32394],{"class":6116},[143,34900,160],{"class":755},[143,34902,1941],{"class":280},[143,34904,32402],{"class":149},[143,34906,34907,34910,34912,34914],{"class":145,"line":2529},[143,34908,34909],{"class":6116},"                           download",[143,34911,160],{"class":755},[143,34913,32374],{"class":280},[143,34915,1055],{"class":149},[143,34917,34918,34921,34923,34925,34927,34929],{"class":145,"line":2543},[143,34919,34920],{"class":149},"    test_dataloader",[143,34922,160],{"class":755},[143,34924,32432],{"class":149},[143,34926,32435],{"class":6116},[143,34928,160],{"class":755},[143,34930,34931],{"class":149},"test_data,\n",[143,34933,34934],{"class":145,"line":2548},[143,34935,34936],{"class":266},"                                    # 这里是一张一张进行测试\n",[143,34938,34939,34942,34944,34946],{"class":145,"line":2554},[143,34940,34941],{"class":6116},"                                    batch_size",[143,34943,160],{"class":755},[143,34945,771],{"class":280},[143,34947,32364],{"class":149},[143,34949,34950,34953,34955,34957],{"class":145,"line":2575},[143,34951,34952],{"class":6116},"                                    shuffle",[143,34954,160],{"class":755},[143,34956,32374],{"class":280},[143,34958,32364],{"class":149},[143,34960,34961,34964,34966,34968],{"class":145,"line":2580},[143,34962,34963],{"class":6116},"                                    num_workers",[143,34965,160],{"class":755},[143,34967,1234],{"class":280},[143,34969,1055],{"class":149},[143,34971,34972,34974],{"class":145,"line":2594},[143,34973,4990],{"class":755},[143,34975,34976],{"class":149}," test_dataloader\n",[143,34978,34979],{"class":145,"line":2599},[143,34980,3300],{"emptyLinePlaceholder":976},[143,34982,34983],{"class":145,"line":2628},[143,34984,34985],{"class":266},"# 定义模型测试函数\n",[143,34987,34988,34990,34993],{"class":145,"line":2633},[143,34989,32845],{"class":755},[143,34991,34992],{"class":156}," test_model_process",[143,34994,34995],{"class":149},"(model,test_dataloader):\n",[143,34997,34998],{"class":145,"line":2650},[143,34999,35000],{"class":266},"    # 将模型放到设备当中，先进行判断\n",[143,35002,35003,35005,35007,35009,35011,35013,35015],{"class":145,"line":2655},[143,35004,32135],{"class":149},[143,35006,160],{"class":755},[143,35008,32142],{"class":163},[143,35010,2605],{"class":755},[143,35012,32147],{"class":149},[143,35014,2602],{"class":755},[143,35016,35017],{"class":163}," \"cpu\"\n",[143,35019,35020,35022,35024],{"class":145,"line":2660},[143,35021,32187],{"class":149},[143,35023,160],{"class":755},[143,35025,33187],{"class":149},[143,35027,35028],{"class":145,"line":2665},[143,35029,3300],{"emptyLinePlaceholder":976},[143,35031,35032],{"class":145,"line":2679},[143,35033,35034],{"class":266},"    # 设置初始化参数\n",[143,35036,35037,35040,35042],{"class":145,"line":2684},[143,35038,35039],{"class":149},"    test_corrects",[143,35041,160],{"class":755},[143,35043,33240],{"class":280},[143,35045,35046,35049,35051],{"class":145,"line":3477},[143,35047,35048],{"class":149},"    test_num",[143,35050,160],{"class":755},[143,35052,3985],{"class":280},[143,35054,35055],{"class":145,"line":3491},[143,35056,3300],{"emptyLinePlaceholder":976},[143,35058,35059],{"class":145,"line":3499},[143,35060,35061],{"class":266},"    # 进行模型测试\n",[143,35063,35064],{"class":145,"line":3504},[143,35065,35066],{"class":266},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[143,35068,35069],{"class":145,"line":3510},[143,35070,35071],{"class":266},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[143,35073,35074,35077],{"class":145,"line":3516},[143,35075,35076],{"class":755},"    with",[143,35078,33782],{"class":149},[143,35080,35081],{"class":145,"line":3521},[143,35082,35083],{"class":266},"        # 从数据中进行\n",[143,35085,35086,35088,35091,35093],{"class":145,"line":8848},[143,35087,4303],{"class":755},[143,35089,35090],{"class":149}," test_data_x,test_data_y ",[143,35092,26941],{"class":755},[143,35094,35095],{"class":149}," test_dataloader:\n",[143,35097,35098,35101,35103],{"class":145,"line":8872},[143,35099,35100],{"class":149},"            test_data_x",[143,35102,160],{"class":755},[143,35104,35105],{"class":149},"test_data_x.to(device)\n",[143,35107,35108,35111,35113],{"class":145,"line":8877},[143,35109,35110],{"class":149},"            test_data_y",[143,35112,160],{"class":755},[143,35114,35115],{"class":149},"test_data_y.to(device)\n",[143,35117,35118],{"class":145,"line":8883},[143,35119,35120],{"class":266},"            # 设置为验证模式\n",[143,35122,35123],{"class":145,"line":8910},[143,35124,33773],{"class":149},[143,35126,35127],{"class":145,"line":8915},[143,35128,35129],{"class":266},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[143,35131,35132,35134,35136],{"class":145,"line":8921},[143,35133,33558],{"class":149},[143,35135,160],{"class":755},[143,35137,35138],{"class":149},"model(test_data_x)\n",[143,35140,35141],{"class":145,"line":8933},[143,35142,35143],{"class":266},"            # 查找每一行中最大值对应的下标\n",[143,35145,35146,35148,35150,35152,35154,35156,35158],{"class":145,"line":8945},[143,35147,33575],{"class":149},[143,35149,160],{"class":755},[143,35151,33580],{"class":149},[143,35153,33583],{"class":6116},[143,35155,160],{"class":755},[143,35157,771],{"class":280},[143,35159,1055],{"class":149},[143,35161,35162],{"class":145,"line":8957},[143,35163,35164],{"class":266},"            # 计算正确率\n",[143,35166,35167],{"class":145,"line":10616},[143,35168,35169],{"class":266},"            # .data表示是一个不带梯度信息的tensor\n",[143,35171,35172],{"class":145,"line":10641},[143,35173,35174],{"class":266},"            # 如果预测正确，则准确度test_corrects加1\n",[143,35176,35177,35180,35182,35184,35186],{"class":145,"line":10664},[143,35178,35179],{"class":149},"            test_corrects",[143,35181,10377],{"class":755},[143,35183,33685],{"class":149},[143,35185,3849],{"class":755},[143,35187,35188],{"class":149},"test_data_y.data)\n",[143,35190,35191],{"class":145,"line":10688},[143,35192,35193],{"class":266},"            # 将所有的测试样本进行累计\n",[143,35195,35196,35199,35201,35204,35206],{"class":145,"line":10693},[143,35197,35198],{"class":149},"            test_num",[143,35200,10377],{"class":755},[143,35202,35203],{"class":149},"test_data_x.size(",[143,35205,1234],{"class":280},[143,35207,1055],{"class":149},[143,35209,35210],{"class":145,"line":10698},[143,35211,3300],{"emptyLinePlaceholder":976},[143,35213,35214],{"class":145,"line":10703},[143,35215,35216],{"class":266},"        # 计算准确度\n",[143,35218,35219,35222,35224,35227,35229],{"class":145,"line":10712},[143,35220,35221],{"class":149},"        test_acc",[143,35223,160],{"class":755},[143,35225,35226],{"class":149},"test_corrects.double().item()",[143,35228,1625],{"class":755},[143,35230,35231],{"class":149},"test_num\n",[143,35233,35234],{"class":145,"line":10717},[143,35235,35236],{"class":266},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[143,35238,35239,35241,35243,35246],{"class":145,"line":10723},[143,35240,33349],{"class":280},[143,35242,1049],{"class":149},[143,35244,35245],{"class":163},"\"测试的准确率：\"",[143,35247,35248],{"class":149},",test_acc)\n",[143,35250,35251],{"class":145,"line":10744},[143,35252,3300],{"emptyLinePlaceholder":976},[143,35254,35255],{"class":145,"line":10750},[143,35256,35257],{"class":266},"# 实现模型的测试功能\n",[143,35259,35260,35262,35264,35266,35268],{"class":145,"line":10764},[143,35261,2434],{"class":755},[143,35263,32118],{"class":280},[143,35265,3849],{"class":755},[143,35267,32123],{"class":163},[143,35269,4639],{"class":149},[143,35271,35272],{"class":145,"line":10770},[143,35273,35274],{"class":266},"    # 加载模型\n",[143,35276,35277,35279,35281],{"class":145,"line":10797},[143,35278,32187],{"class":149},[143,35280,160],{"class":755},[143,35282,34723],{"class":149},[143,35284,35285],{"class":145,"line":10806},[143,35286,35287],{"class":266},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[143,35289,35290],{"class":145,"line":10812},[143,35291,35292],{"class":266},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[143,35294,35295,35298,35301],{"class":145,"line":10820},[143,35296,35297],{"class":149},"    model.load_state_dict(torch.load(",[143,35299,35300],{"class":163},"'best_model.pth'",[143,35302,31395],{"class":149},[143,35304,35305],{"class":145,"line":10825},[143,35306,35307],{"class":266},"    # 数据加载\n",[143,35309,35310,35312,35314],{"class":145,"line":17502},[143,35311,34920],{"class":149},[143,35313,160],{"class":755},[143,35315,35316],{"class":149},"test_data_process()\n",[143,35318,35319],{"class":145,"line":17508},[143,35320,35321],{"class":266},"    # 加载模型测试的函数\n",[143,35323,35324],{"class":145,"line":17531},[143,35325,35326],{"class":149},"    test_model_process(model,test_dataloader)\n",[143,35328,35329],{"class":145,"line":17537},[143,35330,3300],{"emptyLinePlaceholder":976},[143,35332,35333],{"class":145,"line":17560},[143,35334,35335],{"class":266},"    # 验证集推理实现：\n",[143,35337,35338],{"class":145,"line":17574},[143,35339,35340],{"class":266},"    # 加载数据加载的更详细一些\n",[143,35342,35343,35345,35347,35349,35351,35353,35355],{"class":145,"line":17594},[143,35344,32135],{"class":149},[143,35346,160],{"class":755},[143,35348,32142],{"class":163},[143,35350,2605],{"class":755},[143,35352,32147],{"class":149},[143,35354,2602],{"class":755},[143,35356,35017],{"class":163},[143,35358,35359,35361,35363],{"class":145,"line":17600},[143,35360,32187],{"class":149},[143,35362,160],{"class":755},[143,35364,33187],{"class":149},[143,35366,35367],{"class":145,"line":17611},[143,35368,35369],{"class":266},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[143,35371,35372],{"class":145,"line":17634},[143,35373,35374],{"class":266},"    # 顺序不可改变\n",[143,35376,35377,35380,35382,35384,35387,35389,35392,35394,35397,35399,35402,35404,35407,35409,35412,35414,35417,35419,35422,35424,35427,35429,35432],{"class":145,"line":17656},[143,35378,35379],{"class":149},"    classes",[143,35381,160],{"class":755},[143,35383,749],{"class":149},[143,35385,35386],{"class":163},"'T-shirt\u002Ftop'",[143,35388,1419],{"class":149},[143,35390,35391],{"class":163},"'Trouser'",[143,35393,1419],{"class":149},[143,35395,35396],{"class":163},"'Pullover'",[143,35398,1419],{"class":149},[143,35400,35401],{"class":163},"'Dress'",[143,35403,1419],{"class":149},[143,35405,35406],{"class":163},"'Coat'",[143,35408,1419],{"class":149},[143,35410,35411],{"class":163},"'Sandal'",[143,35413,1419],{"class":149},[143,35415,35416],{"class":163},"'Shirt'",[143,35418,1419],{"class":149},[143,35420,35421],{"class":163},"'Sneaker'",[143,35423,1419],{"class":149},[143,35425,35426],{"class":163},"'Bag'",[143,35428,1419],{"class":149},[143,35430,35431],{"class":163},"'Ankle boot'",[143,35433,34144],{"class":149},[143,35435,35436,35438],{"class":145,"line":17661},[143,35437,35076],{"class":755},[143,35439,33782],{"class":149},[143,35441,35442],{"class":145,"line":17667},[143,35443,35444],{"class":266},"        # 将数据和标签都放到设备当中\n",[143,35446,35447,35449,35452,35454],{"class":145,"line":17681},[143,35448,4303],{"class":755},[143,35450,35451],{"class":149}," b_x,b_y ",[143,35453,26941],{"class":755},[143,35455,35095],{"class":149},[143,35457,35458,35460,35462],{"class":145,"line":17694},[143,35459,33508],{"class":149},[143,35461,160],{"class":755},[143,35463,33513],{"class":149},[143,35465,35466,35468,35470],{"class":145,"line":17699},[143,35467,33523],{"class":149},[143,35469,160],{"class":755},[143,35471,33528],{"class":149},[143,35473,35474],{"class":145,"line":17713},[143,35475,3300],{"emptyLinePlaceholder":976},[143,35477,35478],{"class":145,"line":17718},[143,35479,35480],{"class":266},"            # 设置模型为验证模式\n",[143,35482,35483],{"class":145,"line":17724},[143,35484,33773],{"class":149},[143,35486,35487],{"class":145,"line":17729},[143,35488,35489],{"class":266},"            # 模型推理结果\n",[143,35491,35492,35494,35496],{"class":145,"line":17743},[143,35493,33558],{"class":149},[143,35495,160],{"class":755},[143,35497,33563],{"class":149},[143,35499,35500],{"class":145,"line":17748},[143,35501,35502],{"class":266},"            # 获取最大下标，最大下标就是类别号\n",[143,35504,35505,35507,35509,35511,35513,35515,35517],{"class":145,"line":17753},[143,35506,33575],{"class":149},[143,35508,160],{"class":755},[143,35510,33580],{"class":149},[143,35512,33583],{"class":6116},[143,35514,160],{"class":755},[143,35516,771],{"class":280},[143,35518,1055],{"class":149},[143,35520,35521],{"class":145,"line":17767},[143,35522,35523],{"class":266},"            # 取出张量中的数值\n",[143,35525,35526,35529,35531],{"class":145,"line":17779},[143,35527,35528],{"class":149},"            result",[143,35530,160],{"class":755},[143,35532,35533],{"class":149},"pre_lab.item()\n",[143,35535,35536,35539,35541],{"class":145,"line":17784},[143,35537,35538],{"class":149},"            label",[143,35540,160],{"class":755},[143,35542,35543],{"class":149},"b_y.item()\n",[143,35545,35546,35549,35551,35554,35557,35560,35562,35565],{"class":145,"line":17797},[143,35547,35548],{"class":280},"            print",[143,35550,1049],{"class":149},[143,35552,35553],{"class":163},"\"预测值：\"",[143,35555,35556],{"class":149},",classes[result],",[143,35558,35559],{"class":163},"\"------\"",[143,35561,1419],{"class":149},[143,35563,35564],{"class":163},"\"真实值：\"",[143,35566,35567],{"class":149},",classes[label])\n",[63,35569,35570],{},"（2）AlexNet",[19,35572,35573],{},[22,35574,35575],{},"神经网络构建",[133,35577,35579],{"className":31276,"code":35578,"language":31278,"meta":138,"style":138},"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",[140,35580,35581,35587,35597,35607,35619,35623,35640,35648,35663,35675,35717,35744,35787,35813,35857,35900,35943,35970,35974,35984,35989,36017,36036,36055,36059,36064,36072,36087,36097,36111,36121,36136,36151,36166,36177,36181,36186,36196,36211,36216,36230,36245,36257,36262,36273,36278,36284,36289,36301,36321,36326,36335],{"__ignoreMap":138},[143,35582,35583,35585],{"class":145,"line":146},[143,35584,31290],{"class":755},[143,35586,31293],{"class":149},[143,35588,35589,35591,35593,35595],{"class":145,"line":35},[143,35590,31635],{"class":755},[143,35592,31638],{"class":149},[143,35594,31290],{"class":755},[143,35596,31643],{"class":149},[143,35598,35599,35601,35603,35605],{"class":145,"line":46},[143,35600,31635],{"class":755},[143,35602,31655],{"class":149},[143,35604,31290],{"class":755},[143,35606,31660],{"class":149},[143,35608,35609,35611,35614,35616],{"class":145,"line":293},[143,35610,31290],{"class":755},[143,35612,35613],{"class":149}," torch.nn.functional ",[143,35615,32281],{"class":755},[143,35617,35618],{"class":149}," F\n",[143,35620,35621],{"class":145,"line":306},[143,35622,3300],{"emptyLinePlaceholder":976},[143,35624,35625,35627,35630,35632,35634,35636,35638],{"class":145,"line":319},[143,35626,15593],{"class":755},[143,35628,35629],{"class":156}," AlexNet",[143,35631,1049],{"class":149},[143,35633,31676],{"class":156},[143,35635,1599],{"class":149},[143,35637,31681],{"class":156},[143,35639,31684],{"class":149},[143,35641,35642,35644,35646],{"class":145,"line":332},[143,35643,31699],{"class":755},[143,35645,31702],{"class":280},[143,35647,31705],{"class":149},[143,35649,35650,35652,35655,35657,35659,35661],{"class":145,"line":345},[143,35651,31715],{"class":280},[143,35653,35654],{"class":149},"(AlexNet,",[143,35656,31721],{"class":280},[143,35658,31724],{"class":149},[143,35660,31727],{"class":280},[143,35662,2876],{"class":149},[143,35664,35665,35667,35670,35672],{"class":145,"line":701},[143,35666,31743],{"class":280},[143,35668,35669],{"class":149},".ReLu",[143,35671,160],{"class":755},[143,35673,35674],{"class":149},"nn.ReLU()\n",[143,35676,35677,35679,35681,35683,35685,35687,35689,35691,35693,35695,35697,35699,35701,35703,35705,35707,35709,35711,35713,35715],{"class":145,"line":707},[143,35678,31743],{"class":280},[143,35680,31746],{"class":149},[143,35682,160],{"class":755},[143,35684,31751],{"class":149},[143,35686,31754],{"class":6116},[143,35688,160],{"class":755},[143,35690,771],{"class":280},[143,35692,1419],{"class":149},[143,35694,31763],{"class":6116},[143,35696,160],{"class":755},[143,35698,1252],{"class":280},[143,35700,1419],{"class":149},[143,35702,31772],{"class":6116},[143,35704,160],{"class":755},[143,35706,1513],{"class":280},[143,35708,1419],{"class":149},[143,35710,31827],{"class":6116},[143,35712,160],{"class":755},[143,35714,1334],{"class":280},[143,35716,1055],{"class":149},[143,35718,35719,35721,35723,35725,35728,35730,35732,35734,35736,35738,35740,35742],{"class":145,"line":727},[143,35720,31743],{"class":280},[143,35722,31811],{"class":149},[143,35724,160],{"class":755},[143,35726,35727],{"class":149},"nn.MaxPool2d(",[143,35729,31772],{"class":6116},[143,35731,160],{"class":755},[143,35733,1116],{"class":280},[143,35735,1419],{"class":149},[143,35737,31827],{"class":6116},[143,35739,160],{"class":755},[143,35741,1122],{"class":280},[143,35743,1055],{"class":149},[143,35745,35746,35748,35750,35752,35754,35756,35758,35760,35762,35764,35766,35769,35771,35773,35775,35777,35779,35781,35783,35785],{"class":145,"line":2518},[143,35747,31743],{"class":280},[143,35749,31840],{"class":149},[143,35751,160],{"class":755},[143,35753,31751],{"class":149},[143,35755,31754],{"class":6116},[143,35757,160],{"class":755},[143,35759,1252],{"class":280},[143,35761,1419],{"class":149},[143,35763,31763],{"class":6116},[143,35765,160],{"class":755},[143,35767,35768],{"class":280},"256",[143,35770,1419],{"class":149},[143,35772,31772],{"class":6116},[143,35774,160],{"class":755},[143,35776,1360],{"class":280},[143,35778,1419],{"class":149},[143,35780,31781],{"class":6116},[143,35782,160],{"class":755},[143,35784,1122],{"class":280},[143,35786,1055],{"class":149},[143,35788,35789,35791,35793,35795,35797,35799,35801,35803,35805,35807,35809,35811],{"class":145,"line":2524},[143,35790,31743],{"class":280},[143,35792,31875],{"class":149},[143,35794,160],{"class":755},[143,35796,35727],{"class":149},[143,35798,31772],{"class":6116},[143,35800,160],{"class":755},[143,35802,1116],{"class":280},[143,35804,1419],{"class":149},[143,35806,31827],{"class":6116},[143,35808,160],{"class":755},[143,35810,1122],{"class":280},[143,35812,1055],{"class":149},[143,35814,35815,35817,35820,35822,35824,35826,35828,35830,35832,35834,35836,35839,35841,35843,35845,35847,35849,35851,35853,35855],{"class":145,"line":2529},[143,35816,31743],{"class":280},[143,35818,35819],{"class":149},".c5",[143,35821,160],{"class":755},[143,35823,31751],{"class":149},[143,35825,31754],{"class":6116},[143,35827,160],{"class":755},[143,35829,35768],{"class":280},[143,35831,1419],{"class":149},[143,35833,31763],{"class":6116},[143,35835,160],{"class":755},[143,35837,35838],{"class":280},"384",[143,35840,1419],{"class":149},[143,35842,31772],{"class":6116},[143,35844,160],{"class":755},[143,35846,1116],{"class":280},[143,35848,1419],{"class":149},[143,35850,31781],{"class":6116},[143,35852,160],{"class":755},[143,35854,771],{"class":280},[143,35856,1055],{"class":149},[143,35858,35859,35861,35864,35866,35868,35870,35872,35874,35876,35878,35880,35882,35884,35886,35888,35890,35892,35894,35896,35898],{"class":145,"line":2543},[143,35860,31743],{"class":280},[143,35862,35863],{"class":149},".c6",[143,35865,160],{"class":755},[143,35867,31751],{"class":149},[143,35869,31754],{"class":6116},[143,35871,160],{"class":755},[143,35873,35838],{"class":280},[143,35875,1419],{"class":149},[143,35877,31763],{"class":6116},[143,35879,160],{"class":755},[143,35881,35838],{"class":280},[143,35883,1419],{"class":149},[143,35885,31772],{"class":6116},[143,35887,160],{"class":755},[143,35889,1116],{"class":280},[143,35891,1419],{"class":149},[143,35893,31781],{"class":6116},[143,35895,160],{"class":755},[143,35897,771],{"class":280},[143,35899,1055],{"class":149},[143,35901,35902,35904,35907,35909,35911,35913,35915,35917,35919,35921,35923,35925,35927,35929,35931,35933,35935,35937,35939,35941],{"class":145,"line":2548},[143,35903,31743],{"class":280},[143,35905,35906],{"class":149},".c7",[143,35908,160],{"class":755},[143,35910,31751],{"class":149},[143,35912,31754],{"class":6116},[143,35914,160],{"class":755},[143,35916,35838],{"class":280},[143,35918,1419],{"class":149},[143,35920,31763],{"class":6116},[143,35922,160],{"class":755},[143,35924,35768],{"class":280},[143,35926,1419],{"class":149},[143,35928,31772],{"class":6116},[143,35930,160],{"class":755},[143,35932,1116],{"class":280},[143,35934,1419],{"class":149},[143,35936,31781],{"class":6116},[143,35938,160],{"class":755},[143,35940,771],{"class":280},[143,35942,1055],{"class":149},[143,35944,35945,35947,35950,35952,35954,35956,35958,35960,35962,35964,35966,35968],{"class":145,"line":2554},[143,35946,31743],{"class":280},[143,35948,35949],{"class":149},".s8",[143,35951,160],{"class":755},[143,35953,35727],{"class":149},[143,35955,31772],{"class":6116},[143,35957,160],{"class":755},[143,35959,1116],{"class":280},[143,35961,1419],{"class":149},[143,35963,31827],{"class":6116},[143,35965,160],{"class":755},[143,35967,1122],{"class":280},[143,35969,1055],{"class":149},[143,35971,35972],{"class":145,"line":2575},[143,35973,31900],{"class":266},[143,35975,35976,35978,35980,35982],{"class":145,"line":2580},[143,35977,31743],{"class":280},[143,35979,31907],{"class":149},[143,35981,160],{"class":755},[143,35983,31912],{"class":149},[143,35985,35986],{"class":145,"line":2594},[143,35987,35988],{"class":266},"       # 定义全连接层\n",[143,35990,35991,35993,35996,35998,36000,36002,36004,36006,36008,36010,36012,36015],{"class":145,"line":2599},[143,35992,31743],{"class":280},[143,35994,35995],{"class":149},".f1",[143,35997,160],{"class":755},[143,35999,31929],{"class":149},[143,36001,1385],{"class":280},[143,36003,1496],{"class":755},[143,36005,1385],{"class":280},[143,36007,1496],{"class":755},[143,36009,35768],{"class":280},[143,36011,1419],{"class":149},[143,36013,36014],{"class":280},"4096",[143,36016,1055],{"class":149},[143,36018,36019,36021,36024,36026,36028,36030,36032,36034],{"class":145,"line":2628},[143,36020,31743],{"class":280},[143,36022,36023],{"class":149},".f2",[143,36025,160],{"class":755},[143,36027,31929],{"class":149},[143,36029,36014],{"class":280},[143,36031,1419],{"class":149},[143,36033,36014],{"class":280},[143,36035,1055],{"class":149},[143,36037,36038,36040,36043,36045,36047,36049,36051,36053],{"class":145,"line":2633},[143,36039,31743],{"class":280},[143,36041,36042],{"class":149},".f3",[143,36044,160],{"class":755},[143,36046,31929],{"class":149},[143,36048,36014],{"class":280},[143,36050,1419],{"class":149},[143,36052,1487],{"class":280},[143,36054,1055],{"class":149},[143,36056,36057],{"class":145,"line":2650},[143,36058,3300],{"emptyLinePlaceholder":976},[143,36060,36061],{"class":145,"line":2655},[143,36062,36063],{"class":266},"    # 定义前向传播\n",[143,36065,36066,36068,36070],{"class":145,"line":2660},[143,36067,31699],{"class":755},[143,36069,31991],{"class":156},[143,36071,31994],{"class":149},[143,36073,36074,36076,36078,36080,36083,36085],{"class":145,"line":2665},[143,36075,31999],{"class":149},[143,36077,160],{"class":755},[143,36079,31721],{"class":280},[143,36081,36082],{"class":149},".ReLu(",[143,36084,31721],{"class":280},[143,36086,32011],{"class":149},[143,36088,36089,36091,36093,36095],{"class":145,"line":2679},[143,36090,31999],{"class":149},[143,36092,160],{"class":755},[143,36094,31721],{"class":280},[143,36096,32022],{"class":149},[143,36098,36099,36101,36103,36105,36107,36109],{"class":145,"line":2684},[143,36100,31999],{"class":149},[143,36102,160],{"class":755},[143,36104,31721],{"class":280},[143,36106,36082],{"class":149},[143,36108,31721],{"class":280},[143,36110,32037],{"class":149},[143,36112,36113,36115,36117,36119],{"class":145,"line":3477},[143,36114,31999],{"class":149},[143,36116,160],{"class":755},[143,36118,31721],{"class":280},[143,36120,32048],{"class":149},[143,36122,36123,36125,36127,36129,36131,36133],{"class":145,"line":3491},[143,36124,31999],{"class":149},[143,36126,160],{"class":755},[143,36128,31721],{"class":280},[143,36130,36082],{"class":149},[143,36132,31721],{"class":280},[143,36134,36135],{"class":149},".c5(x))\n",[143,36137,36138,36140,36142,36144,36146,36148],{"class":145,"line":3499},[143,36139,31999],{"class":149},[143,36141,160],{"class":755},[143,36143,31721],{"class":280},[143,36145,36082],{"class":149},[143,36147,31721],{"class":280},[143,36149,36150],{"class":149},".c6(x))\n",[143,36152,36153,36155,36157,36159,36161,36163],{"class":145,"line":3504},[143,36154,31999],{"class":149},[143,36156,160],{"class":755},[143,36158,31721],{"class":280},[143,36160,36082],{"class":149},[143,36162,31721],{"class":280},[143,36164,36165],{"class":149},".c7(x))\n",[143,36167,36168,36170,36172,36174],{"class":145,"line":3510},[143,36169,31999],{"class":149},[143,36171,160],{"class":755},[143,36173,31721],{"class":280},[143,36175,36176],{"class":149},".s8(x)\n",[143,36178,36179],{"class":145,"line":3516},[143,36180,3300],{"emptyLinePlaceholder":976},[143,36182,36183],{"class":145,"line":3521},[143,36184,36185],{"class":266},"        # 展平加线性全连接层\n",[143,36187,36188,36190,36192,36194],{"class":145,"line":8848},[143,36189,31999],{"class":149},[143,36191,160],{"class":755},[143,36193,31721],{"class":280},[143,36195,32059],{"class":149},[143,36197,36198,36200,36202,36204,36206,36208],{"class":145,"line":8872},[143,36199,31999],{"class":149},[143,36201,160],{"class":755},[143,36203,31721],{"class":280},[143,36205,36082],{"class":149},[143,36207,31721],{"class":280},[143,36209,36210],{"class":149},".f1(x))\n",[143,36212,36213],{"class":145,"line":8877},[143,36214,36215],{"class":266},"        # 还需要dropout对神经元随机进行失活\n",[143,36217,36218,36220,36222,36225,36228],{"class":145,"line":8883},[143,36219,31999],{"class":149},[143,36221,160],{"class":755},[143,36223,36224],{"class":149},"F.dropout(x,",[143,36226,36227],{"class":280},"0.5",[143,36229,1055],{"class":149},[143,36231,36232,36234,36236,36238,36240,36242],{"class":145,"line":8910},[143,36233,31999],{"class":149},[143,36235,160],{"class":755},[143,36237,31721],{"class":280},[143,36239,36082],{"class":149},[143,36241,31721],{"class":280},[143,36243,36244],{"class":149},".f2(x))\n",[143,36246,36247,36249,36251,36253,36255],{"class":145,"line":8915},[143,36248,31999],{"class":149},[143,36250,160],{"class":755},[143,36252,36224],{"class":149},[143,36254,36227],{"class":280},[143,36256,1055],{"class":149},[143,36258,36259],{"class":145,"line":8921},[143,36260,36261],{"class":266},"        # 直接输出\n",[143,36263,36264,36266,36268,36270],{"class":145,"line":8933},[143,36265,31999],{"class":149},[143,36267,160],{"class":755},[143,36269,31721],{"class":280},[143,36271,36272],{"class":149},".f3(x)\n",[143,36274,36275],{"class":145,"line":8945},[143,36276,36277],{"class":266},"        # 前向传播输出\n",[143,36279,36280,36282],{"class":145,"line":8957},[143,36281,15651],{"class":755},[143,36283,32107],{"class":149},[143,36285,36286],{"class":145,"line":10616},[143,36287,36288],{"class":266},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[143,36290,36291,36293,36295,36297,36299],{"class":145,"line":10641},[143,36292,2434],{"class":755},[143,36294,32118],{"class":280},[143,36296,3849],{"class":755},[143,36298,32123],{"class":163},[143,36300,4639],{"class":149},[143,36302,36303,36305,36307,36309,36311,36313,36315,36317,36319],{"class":145,"line":10664},[143,36304,32135],{"class":149},[143,36306,160],{"class":755},[143,36308,31349],{"class":149},[143,36310,32142],{"class":163},[143,36312,2605],{"class":755},[143,36314,32147],{"class":149},[143,36316,2602],{"class":755},[143,36318,31374],{"class":163},[143,36320,1055],{"class":149},[143,36322,36323],{"class":145,"line":10688},[143,36324,36325],{"class":266},"    # 模型实例化，然后将实例化的模型放到设备中\n",[143,36327,36328,36330,36332],{"class":145,"line":10693},[143,36329,32187],{"class":149},[143,36331,160],{"class":755},[143,36333,36334],{"class":149},"AlexNet().to(device)\n",[143,36336,36337,36339,36341,36343,36345,36348,36350,36352],{"class":145,"line":10698},[143,36338,32197],{"class":280},[143,36340,32200],{"class":149},[143,36342,771],{"class":280},[143,36344,1419],{"class":149},[143,36346,36347],{"class":280},"227",[143,36349,1419],{"class":149},[143,36351,36347],{"class":280},[143,36353,32213],{"class":149},[19,36355,36356],{"start":35},[22,36357,32226],{},[133,36359,36361],{"className":31276,"code":36360,"language":31278,"meta":138,"style":138},"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",[140,36362,36363,36369,36375,36385,36391,36401,36411,36421,36431,36441,36445,36456,36466,36470,36474,36478,36486,36498,36508,36524,36534,36566,36580,36590,36600,36604,36614,36628,36638,36648,36658,36664,36668,36672,36676,36680,36684,36692,36712,36716,36720,36724,36728,36732,36748,36752,36756,36764,36768,36772,36780,36784,36788,36792,36800,36804,36808,36812,36816,36824,36828,36836,36840,36848,36852,36860,36864,36872,36876,36880,36888,36892,36896,36900,36912,36936,36950,36954,36958,36962,36970,36974,36982,36986,36994,36998,37006,37010,37018,37022,37030,37034,37046,37050,37058,37062,37070,37074,37078,37082,37086,37094,37098,37114,37118,37126,37130,37134,37138,37142,37146,37150,37154,37170,37174,37186,37190,37202,37206,37218,37222,37230,37234,37242,37246,37250,37255,37261,37265,37274,37278,37295,37299,37308,37312,37330,37343,37348,37361,37365,37369,37377,37381,37385,37393,37397,37405,37409,37417,37421,37425,37467,37509,37513,37517,37533,37537,37553,37557,37561,37569,37573,37577,37589,37627,37632,37637,37646,37650,37664,37674,37680,37686,37692,37698,37702,37706,37712,37716,37720,37728,37732,37750,37754,37758,37762,37778,37782,37786,37790,37794,37798,37818,37838,37842,37846,37850,37858,37866,37870,37886,37906,37926,37930,37934,37942,37950,37954,37958,37962,37974,37978,37988,37996,38013],{"__ignoreMap":138},[143,36364,36365,36367],{"class":145,"line":146},[143,36366,31290],{"class":755},[143,36368,32720],{"class":149},[143,36370,36371,36373],{"class":145,"line":35},[143,36372,31290],{"class":755},[143,36374,32727],{"class":149},[143,36376,36377,36379,36381,36383],{"class":145,"line":46},[143,36378,31290],{"class":755},[143,36380,32738],{"class":149},[143,36382,32281],{"class":755},[143,36384,32743],{"class":149},[143,36386,36387,36389],{"class":145,"line":293},[143,36388,31290],{"class":755},[143,36390,31293],{"class":149},[143,36392,36393,36395,36397,36399],{"class":145,"line":306},[143,36394,31635],{"class":755},[143,36396,32313],{"class":149},[143,36398,31290],{"class":755},[143,36400,32760],{"class":149},[143,36402,36403,36405,36407,36409],{"class":145,"line":319},[143,36404,31635],{"class":755},[143,36406,32266],{"class":149},[143,36408,31290],{"class":755},[143,36410,32271],{"class":149},[143,36412,36413,36415,36417,36419],{"class":145,"line":332},[143,36414,31635],{"class":755},[143,36416,32296],{"class":149},[143,36418,31290],{"class":755},[143,36420,32301],{"class":149},[143,36422,36423,36425,36427,36429],{"class":145,"line":345},[143,36424,31290],{"class":755},[143,36426,32313],{"class":149},[143,36428,32281],{"class":755},[143,36430,32318],{"class":149},[143,36432,36433,36435,36437,36439],{"class":145,"line":701},[143,36434,31290],{"class":755},[143,36436,32330],{"class":149},[143,36438,32281],{"class":755},[143,36440,32335],{"class":149},[143,36442,36443],{"class":145,"line":707},[143,36444,32805],{"class":266},[143,36446,36447,36449,36451,36453],{"class":145,"line":727},[143,36448,31635],{"class":755},[143,36450,32812],{"class":149},[143,36452,31290],{"class":755},[143,36454,36455],{"class":149}," AlexNet\n",[143,36457,36458,36460,36462,36464],{"class":145,"line":2518},[143,36459,31635],{"class":755},[143,36461,31638],{"class":149},[143,36463,31290],{"class":755},[143,36465,31643],{"class":149},[143,36467,36468],{"class":145,"line":2524},[143,36469,3300],{"emptyLinePlaceholder":976},[143,36471,36472],{"class":145,"line":2529},[143,36473,3300],{"emptyLinePlaceholder":976},[143,36475,36476],{"class":145,"line":2543},[143,36477,32840],{"class":266},[143,36479,36480,36482,36484],{"class":145,"line":2548},[143,36481,32845],{"class":755},[143,36483,32848],{"class":156},[143,36485,32851],{"class":149},[143,36487,36488,36490,36492,36494,36496],{"class":145,"line":2554},[143,36489,32856],{"class":149},[143,36491,160],{"class":755},[143,36493,32353],{"class":149},[143,36495,32361],{"class":163},[143,36497,32364],{"class":149},[143,36499,36500,36502,36504,36506],{"class":145,"line":2575},[143,36501,32869],{"class":6116},[143,36503,160],{"class":755},[143,36505,32374],{"class":280},[143,36507,32364],{"class":149},[143,36509,36510,36512,36514,36516,36518,36520,36522],{"class":145,"line":2580},[143,36511,32880],{"class":6116},[143,36513,160],{"class":755},[143,36515,32391],{"class":149},[143,36517,32394],{"class":6116},[143,36519,160],{"class":755},[143,36521,36347],{"class":280},[143,36523,32402],{"class":149},[143,36525,36526,36528,36530,36532],{"class":145,"line":2594},[143,36527,32897],{"class":6116},[143,36529,160],{"class":755},[143,36531,32374],{"class":280},[143,36533,1055],{"class":149},[143,36535,36536,36538,36540,36542,36544,36546,36548,36550,36552,36554,36556,36558,36560,36562,36564],{"class":145,"line":2599},[143,36537,32908],{"class":149},[143,36539,160],{"class":755},[143,36541,32913],{"class":149},[143,36543,32916],{"class":280},[143,36545,1049],{"class":149},[143,36547,32921],{"class":280},[143,36549,1496],{"class":755},[143,36551,8258],{"class":280},[143,36553,32928],{"class":149},[143,36555,32916],{"class":280},[143,36557,1049],{"class":149},[143,36559,32935],{"class":280},[143,36561,1496],{"class":755},[143,36563,8258],{"class":280},[143,36565,32942],{"class":149},[143,36567,36568,36570,36572,36574,36576,36578],{"class":145,"line":2628},[143,36569,32947],{"class":149},[143,36571,160],{"class":755},[143,36573,32952],{"class":149},[143,36575,32435],{"class":6116},[143,36577,160],{"class":755},[143,36579,32440],{"class":149},[143,36581,36582,36584,36586,36588],{"class":145,"line":2633},[143,36583,32963],{"class":6116},[143,36585,160],{"class":755},[143,36587,32968],{"class":280},[143,36589,32364],{"class":149},[143,36591,36592,36594,36596,36598],{"class":145,"line":2650},[143,36593,32975],{"class":6116},[143,36595,160],{"class":755},[143,36597,32374],{"class":280},[143,36599,32364],{"class":149},[143,36601,36602],{"class":145,"line":2655},[143,36603,32986],{"class":266},[143,36605,36606,36608,36610,36612],{"class":145,"line":2660},[143,36607,32991],{"class":6116},[143,36609,160],{"class":755},[143,36611,1436],{"class":280},[143,36613,1055],{"class":149},[143,36615,36616,36618,36620,36622,36624,36626],{"class":145,"line":2665},[143,36617,33002],{"class":149},[143,36619,160],{"class":755},[143,36621,32432],{"class":149},[143,36623,32435],{"class":6116},[143,36625,160],{"class":755},[143,36627,33013],{"class":149},[143,36629,36630,36632,36634,36636],{"class":145,"line":2679},[143,36631,33018],{"class":6116},[143,36633,160],{"class":755},[143,36635,32968],{"class":280},[143,36637,32364],{"class":149},[143,36639,36640,36642,36644,36646],{"class":145,"line":2684},[143,36641,33029],{"class":6116},[143,36643,160],{"class":755},[143,36645,32374],{"class":280},[143,36647,32364],{"class":149},[143,36649,36650,36652,36654,36656],{"class":145,"line":3477},[143,36651,33040],{"class":6116},[143,36653,160],{"class":755},[143,36655,1436],{"class":280},[143,36657,1055],{"class":149},[143,36659,36660,36662],{"class":145,"line":3491},[143,36661,4990],{"class":755},[143,36663,33053],{"class":149},[143,36665,36666],{"class":145,"line":3499},[143,36667,3300],{"emptyLinePlaceholder":976},[143,36669,36670],{"class":145,"line":3504},[143,36671,33062],{"class":266},[143,36673,36674],{"class":145,"line":3510},[143,36675,33067],{"class":266},[143,36677,36678],{"class":145,"line":3516},[143,36679,3300],{"emptyLinePlaceholder":976},[143,36681,36682],{"class":145,"line":3521},[143,36683,33076],{"class":266},[143,36685,36686,36688,36690],{"class":145,"line":8848},[143,36687,32845],{"class":755},[143,36689,33083],{"class":156},[143,36691,33086],{"class":149},[143,36693,36694,36696,36698,36700,36702,36704,36706,36708,36710],{"class":145,"line":8872},[143,36695,32135],{"class":149},[143,36697,160],{"class":755},[143,36699,31349],{"class":149},[143,36701,32142],{"class":163},[143,36703,2605],{"class":755},[143,36705,32147],{"class":149},[143,36707,2602],{"class":755},[143,36709,33105],{"class":163},[143,36711,1055],{"class":149},[143,36713,36714],{"class":145,"line":8877},[143,36715,3300],{"emptyLinePlaceholder":976},[143,36717,36718],{"class":145,"line":8883},[143,36719,3300],{"emptyLinePlaceholder":976},[143,36721,36722],{"class":145,"line":8910},[143,36723,33120],{"class":266},[143,36725,36726],{"class":145,"line":8915},[143,36727,33125],{"class":266},[143,36729,36730],{"class":145,"line":8921},[143,36731,33130],{"class":266},[143,36733,36734,36736,36738,36740,36742,36744,36746],{"class":145,"line":8933},[143,36735,33135],{"class":149},[143,36737,160],{"class":755},[143,36739,33140],{"class":149},[143,36741,33143],{"class":6116},[143,36743,160],{"class":755},[143,36745,33148],{"class":280},[143,36747,1055],{"class":149},[143,36749,36750],{"class":145,"line":8945},[143,36751,3300],{"emptyLinePlaceholder":976},[143,36753,36754],{"class":145,"line":8957},[143,36755,33159],{"class":266},[143,36757,36758,36760,36762],{"class":145,"line":10616},[143,36759,33164],{"class":149},[143,36761,160],{"class":755},[143,36763,33169],{"class":149},[143,36765,36766],{"class":145,"line":10641},[143,36767,3300],{"emptyLinePlaceholder":976},[143,36769,36770],{"class":145,"line":10664},[143,36771,33178],{"class":266},[143,36773,36774,36776,36778],{"class":145,"line":10688},[143,36775,32187],{"class":149},[143,36777,160],{"class":755},[143,36779,33187],{"class":149},[143,36781,36782],{"class":145,"line":10693},[143,36783,33192],{"class":266},[143,36785,36786],{"class":145,"line":10698},[143,36787,33197],{"class":266},[143,36789,36790],{"class":145,"line":10703},[143,36791,33202],{"class":266},[143,36793,36794,36796,36798],{"class":145,"line":10712},[143,36795,33207],{"class":149},[143,36797,160],{"class":755},[143,36799,33212],{"class":149},[143,36801,36802],{"class":145,"line":10717},[143,36803,3300],{"emptyLinePlaceholder":976},[143,36805,36806],{"class":145,"line":10723},[143,36807,3300],{"emptyLinePlaceholder":976},[143,36809,36810],{"class":145,"line":10744},[143,36811,33225],{"class":266},[143,36813,36814],{"class":145,"line":10750},[143,36815,33230],{"class":266},[143,36817,36818,36820,36822],{"class":145,"line":10764},[143,36819,33235],{"class":149},[143,36821,160],{"class":755},[143,36823,33240],{"class":280},[143,36825,36826],{"class":145,"line":10770},[143,36827,33245],{"class":266},[143,36829,36830,36832,36834],{"class":145,"line":10797},[143,36831,33250],{"class":149},[143,36833,160],{"class":755},[143,36835,33255],{"class":149},[143,36837,36838],{"class":145,"line":10806},[143,36839,33260],{"class":266},[143,36841,36842,36844,36846],{"class":145,"line":10812},[143,36843,33265],{"class":149},[143,36845,160],{"class":755},[143,36847,33255],{"class":149},[143,36849,36850],{"class":145,"line":10820},[143,36851,33274],{"class":266},[143,36853,36854,36856,36858],{"class":145,"line":10825},[143,36855,33279],{"class":149},[143,36857,160],{"class":755},[143,36859,33255],{"class":149},[143,36861,36862],{"class":145,"line":17502},[143,36863,33288],{"class":266},[143,36865,36866,36868,36870],{"class":145,"line":17508},[143,36867,33293],{"class":149},[143,36869,160],{"class":755},[143,36871,33255],{"class":149},[143,36873,36874],{"class":145,"line":17531},[143,36875,3300],{"emptyLinePlaceholder":976},[143,36877,36878],{"class":145,"line":17537},[143,36879,33306],{"class":266},[143,36881,36882,36884,36886],{"class":145,"line":17560},[143,36883,33311],{"class":149},[143,36885,160],{"class":755},[143,36887,33316],{"class":149},[143,36889,36890],{"class":145,"line":17574},[143,36891,3300],{"emptyLinePlaceholder":976},[143,36893,36894],{"class":145,"line":17594},[143,36895,3300],{"emptyLinePlaceholder":976},[143,36897,36898],{"class":145,"line":17600},[143,36899,33329],{"class":266},[143,36901,36902,36904,36906,36908,36910],{"class":145,"line":17611},[143,36903,4101],{"class":755},[143,36905,33336],{"class":149},[143,36907,26941],{"class":755},[143,36909,33341],{"class":280},[143,36911,33344],{"class":149},[143,36913,36914,36916,36918,36920,36922,36924,36926,36928,36930,36932,36934],{"class":145,"line":17634},[143,36915,33349],{"class":280},[143,36917,1049],{"class":149},[143,36919,33354],{"class":163},[143,36921,33357],{"class":280},[143,36923,1625],{"class":163},[143,36925,33357],{"class":280},[143,36927,1292],{"class":163},[143,36929,33366],{"class":149},[143,36931,1573],{"class":755},[143,36933,771],{"class":280},[143,36935,31395],{"class":149},[143,36937,36938,36940,36942,36944,36946,36948],{"class":145,"line":17656},[143,36939,33349],{"class":280},[143,36941,1049],{"class":149},[143,36943,33381],{"class":163},[143,36945,1496],{"class":755},[143,36947,1487],{"class":280},[143,36949,1055],{"class":149},[143,36951,36952],{"class":145,"line":17661},[143,36953,3300],{"emptyLinePlaceholder":976},[143,36955,36956],{"class":145,"line":17667},[143,36957,33396],{"class":266},[143,36959,36960],{"class":145,"line":17681},[143,36961,33401],{"class":266},[143,36963,36964,36966,36968],{"class":145,"line":17694},[143,36965,33406],{"class":149},[143,36967,160],{"class":755},[143,36969,33240],{"class":280},[143,36971,36972],{"class":145,"line":17699},[143,36973,33415],{"class":266},[143,36975,36976,36978,36980],{"class":145,"line":17713},[143,36977,33420],{"class":149},[143,36979,160],{"class":755},[143,36981,3985],{"class":280},[143,36983,36984],{"class":145,"line":17718},[143,36985,33429],{"class":266},[143,36987,36988,36990,36992],{"class":145,"line":17724},[143,36989,33434],{"class":149},[143,36991,160],{"class":755},[143,36993,33240],{"class":280},[143,36995,36996],{"class":145,"line":17729},[143,36997,33443],{"class":266},[143,36999,37000,37002,37004],{"class":145,"line":17743},[143,37001,33448],{"class":149},[143,37003,160],{"class":755},[143,37005,3985],{"class":280},[143,37007,37008],{"class":145,"line":17748},[143,37009,33457],{"class":266},[143,37011,37012,37014,37016],{"class":145,"line":17753},[143,37013,33462],{"class":149},[143,37015,160],{"class":755},[143,37017,3985],{"class":280},[143,37019,37020],{"class":145,"line":17767},[143,37021,33471],{"class":266},[143,37023,37024,37026,37028],{"class":145,"line":17779},[143,37025,33476],{"class":149},[143,37027,160],{"class":755},[143,37029,3985],{"class":280},[143,37031,37032],{"class":145,"line":17784},[143,37033,33485],{"class":266},[143,37035,37036,37038,37040,37042,37044],{"class":145,"line":17797},[143,37037,4303],{"class":755},[143,37039,32499],{"class":149},[143,37041,26941],{"class":755},[143,37043,32504],{"class":280},[143,37045,33498],{"class":149},[143,37047,37048],{"class":145,"line":17802},[143,37049,33503],{"class":266},[143,37051,37052,37054,37056],{"class":145,"line":17807},[143,37053,33508],{"class":149},[143,37055,160],{"class":755},[143,37057,33513],{"class":149},[143,37059,37060],{"class":145,"line":17812},[143,37061,33518],{"class":266},[143,37063,37064,37066,37068],{"class":145,"line":17825},[143,37065,33523],{"class":149},[143,37067,160],{"class":755},[143,37069,33528],{"class":149},[143,37071,37072],{"class":145,"line":17830},[143,37073,33534],{"class":266},[143,37075,37076],{"class":145,"line":33531},[143,37077,33540],{"class":149},[143,37079,37080],{"class":145,"line":33537},[143,37081,33546],{"class":266},[143,37083,37084],{"class":145,"line":33543},[143,37085,33552],{"class":266},[143,37087,37088,37090,37092],{"class":145,"line":33549},[143,37089,33558],{"class":149},[143,37091,160],{"class":755},[143,37093,33563],{"class":149},[143,37095,37096],{"class":145,"line":33555},[143,37097,33569],{"class":266},[143,37099,37100,37102,37104,37106,37108,37110,37112],{"class":145,"line":33566},[143,37101,33575],{"class":149},[143,37103,160],{"class":755},[143,37105,33580],{"class":149},[143,37107,33583],{"class":6116},[143,37109,160],{"class":755},[143,37111,771],{"class":280},[143,37113,1055],{"class":149},[143,37115,37116],{"class":145,"line":33572},[143,37117,33595],{"class":266},[143,37119,37120,37122,37124],{"class":145,"line":33592},[143,37121,33601],{"class":149},[143,37123,160],{"class":755},[143,37125,33606],{"class":149},[143,37127,37128],{"class":145,"line":33598},[143,37129,33612],{"class":266},[143,37131,37132],{"class":145,"line":33609},[143,37133,33618],{"class":149},[143,37135,37136],{"class":145,"line":33615},[143,37137,33624],{"class":266},[143,37139,37140],{"class":145,"line":33621},[143,37141,33630],{"class":149},[143,37143,37144],{"class":145,"line":33627},[143,37145,33636],{"class":266},[143,37147,37148],{"class":145,"line":33633},[143,37149,33642],{"class":149},[143,37151,37152],{"class":145,"line":33639},[143,37153,33648],{"class":266},[143,37155,37156,37158,37160,37162,37164,37166,37168],{"class":145,"line":33645},[143,37157,33654],{"class":149},[143,37159,10377],{"class":755},[143,37161,33659],{"class":149},[143,37163,1496],{"class":755},[143,37165,33664],{"class":149},[143,37167,1234],{"class":280},[143,37169,1055],{"class":149},[143,37171,37172],{"class":145,"line":33651},[143,37173,33674],{"class":266},[143,37175,37176,37178,37180,37182,37184],{"class":145,"line":33671},[143,37177,33680],{"class":149},[143,37179,10377],{"class":755},[143,37181,33685],{"class":149},[143,37183,3849],{"class":755},[143,37185,33690],{"class":149},[143,37187,37188],{"class":145,"line":33677},[143,37189,33696],{"class":266},[143,37191,37192,37194,37196,37198,37200],{"class":145,"line":33693},[143,37193,33702],{"class":149},[143,37195,10377],{"class":755},[143,37197,33664],{"class":149},[143,37199,1234],{"class":280},[143,37201,1055],{"class":149},[143,37203,37204],{"class":145,"line":33699},[143,37205,33716],{"class":266},[143,37207,37208,37210,37212,37214,37216],{"class":145,"line":33713},[143,37209,4303],{"class":755},[143,37211,33724],{"class":149},[143,37213,26941],{"class":755},[143,37215,32504],{"class":280},[143,37217,33731],{"class":149},[143,37219,37220],{"class":145,"line":33719},[143,37221,33737],{"class":266},[143,37223,37224,37226,37228],{"class":145,"line":33734},[143,37225,33508],{"class":149},[143,37227,160],{"class":755},[143,37229,33513],{"class":149},[143,37231,37232],{"class":145,"line":33740},[143,37233,33752],{"class":266},[143,37235,37236,37238,37240],{"class":145,"line":33749},[143,37237,33523],{"class":149},[143,37239,160],{"class":755},[143,37241,33528],{"class":149},[143,37243,37244],{"class":145,"line":33755},[143,37245,33767],{"class":266},[143,37247,37248],{"class":145,"line":33764},[143,37249,33773],{"class":149},[143,37251,37252],{"class":145,"line":33770},[143,37253,37254],{"class":266},"            # 验证时不计算梯度以节省内存\u002F计算\n",[143,37256,37257,37259],{"class":145,"line":33776},[143,37258,33779],{"class":755},[143,37260,33782],{"class":149},[143,37262,37263],{"class":145,"line":33785},[143,37264,33788],{"class":266},[143,37266,37267,37270,37272],{"class":145,"line":33791},[143,37268,37269],{"class":149},"                output",[143,37271,160],{"class":755},[143,37273,33563],{"class":149},[143,37275,37276],{"class":145,"line":33802},[143,37277,33805],{"class":266},[143,37279,37280,37283,37285,37287,37289,37291,37293],{"class":145,"line":33808},[143,37281,37282],{"class":149},"                pre_lab",[143,37284,160],{"class":755},[143,37286,33580],{"class":149},[143,37288,33583],{"class":6116},[143,37290,160],{"class":755},[143,37292,771],{"class":280},[143,37294,1055],{"class":149},[143,37296,37297],{"class":145,"line":33827},[143,37298,33830],{"class":266},[143,37300,37301,37304,37306],{"class":145,"line":33833},[143,37302,37303],{"class":149},"                val_batch_loss",[143,37305,160],{"class":755},[143,37307,33606],{"class":149},[143,37309,37310],{"class":145,"line":33844},[143,37311,33847],{"class":266},[143,37313,37314,37317,37319,37322,37324,37326,37328],{"class":145,"line":33850},[143,37315,37316],{"class":149},"                val_loss",[143,37318,10377],{"class":755},[143,37320,37321],{"class":149},"val_batch_loss.item()",[143,37323,1496],{"class":755},[143,37325,33664],{"class":149},[143,37327,1234],{"class":280},[143,37329,1055],{"class":149},[143,37331,37332,37335,37337,37339,37341],{"class":145,"line":33870},[143,37333,37334],{"class":149},"                val_corrects",[143,37336,10377],{"class":755},[143,37338,33685],{"class":149},[143,37340,3849],{"class":755},[143,37342,33690],{"class":149},[143,37344,37345],{"class":145,"line":33886},[143,37346,37347],{"class":266},"            # 当前用于验证的样本数量\n",[143,37349,37350,37353,37355,37357,37359],{"class":145,"line":33892},[143,37351,37352],{"class":149},"            val_num",[143,37354,10377],{"class":755},[143,37356,33664],{"class":149},[143,37358,1234],{"class":280},[143,37360,1055],{"class":149},[143,37362,37363],{"class":145,"line":33906},[143,37364,33909],{"class":266},[143,37366,37367],{"class":145,"line":33912},[143,37368,33915],{"class":266},[143,37370,37371,37373,37375],{"class":145,"line":33918},[143,37372,33921],{"class":149},[143,37374,1625],{"class":755},[143,37376,33926],{"class":149},[143,37378,37379],{"class":145,"line":33929},[143,37380,33932],{"class":266},[143,37382,37383],{"class":145,"line":33935},[143,37384,33938],{"class":266},[143,37386,37387,37389,37391],{"class":145,"line":33941},[143,37388,33944],{"class":149},[143,37390,1625],{"class":755},[143,37392,33926],{"class":149},[143,37394,37395],{"class":145,"line":33951},[143,37396,33954],{"class":266},[143,37398,37399,37401,37403],{"class":145,"line":33957},[143,37400,33960],{"class":149},[143,37402,1625],{"class":755},[143,37404,33965],{"class":149},[143,37406,37407],{"class":145,"line":33968},[143,37408,33971],{"class":266},[143,37410,37411,37413,37415],{"class":145,"line":33974},[143,37412,33977],{"class":149},[143,37414,1625],{"class":755},[143,37416,33965],{"class":149},[143,37418,37419],{"class":145,"line":33984},[143,37420,3300],{"emptyLinePlaceholder":976},[143,37422,37423],{"class":145,"line":33989},[143,37424,33992],{"class":266},[143,37426,37427,37429,37431,37433,37435,37437,37439,37441,37443,37445,37447,37449,37451,37453,37455,37457,37459,37461,37463,37465],{"class":145,"line":33995},[143,37428,33349],{"class":280},[143,37430,1049],{"class":149},[143,37432,4492],{"class":163},[143,37434,33357],{"class":280},[143,37436,34006],{"class":163},[143,37438,1936],{"class":280},[143,37440,34011],{"class":755},[143,37442,366],{"class":280},[143,37444,34016],{"class":163},[143,37446,1936],{"class":280},[143,37448,34011],{"class":755},[143,37450,366],{"class":280},[143,37452,4492],{"class":163},[143,37454,34027],{"class":149},[143,37456,1573],{"class":755},[143,37458,771],{"class":280},[143,37460,34034],{"class":149},[143,37462,1573],{"class":755},[143,37464,771],{"class":280},[143,37466,34041],{"class":149},[143,37468,37469,37471,37473,37475,37477,37479,37481,37483,37485,37487,37489,37491,37493,37495,37497,37499,37501,37503,37505,37507],{"class":145,"line":34044},[143,37470,33349],{"class":280},[143,37472,1049],{"class":149},[143,37474,4492],{"class":163},[143,37476,33357],{"class":280},[143,37478,34055],{"class":163},[143,37480,1936],{"class":280},[143,37482,34011],{"class":755},[143,37484,366],{"class":280},[143,37486,34064],{"class":163},[143,37488,1936],{"class":280},[143,37490,34011],{"class":755},[143,37492,366],{"class":280},[143,37494,4492],{"class":163},[143,37496,34075],{"class":149},[143,37498,1573],{"class":755},[143,37500,771],{"class":280},[143,37502,34082],{"class":149},[143,37504,1573],{"class":755},[143,37506,771],{"class":280},[143,37508,34041],{"class":149},[143,37510,37511],{"class":145,"line":34091},[143,37512,3300],{"emptyLinePlaceholder":976},[143,37514,37515],{"class":145,"line":34096},[143,37516,34099],{"class":266},[143,37518,37519,37521,37523,37525,37527,37529,37531],{"class":145,"line":34102},[143,37520,3397],{"class":755},[143,37522,34107],{"class":149},[143,37524,1573],{"class":755},[143,37526,771],{"class":280},[143,37528,1979],{"class":149},[143,37530,1998],{"class":755},[143,37532,34118],{"class":149},[143,37534,37535],{"class":145,"line":34121},[143,37536,34124],{"class":266},[143,37538,37539,37541,37543,37545,37547,37549,37551],{"class":145,"line":34127},[143,37540,34130],{"class":149},[143,37542,1087],{"class":280},[143,37544,160],{"class":755},[143,37546,34137],{"class":149},[143,37548,1573],{"class":755},[143,37550,771],{"class":280},[143,37552,34144],{"class":149},[143,37554,37555],{"class":145,"line":34147},[143,37556,34150],{"class":266},[143,37558,37559],{"class":145,"line":34153},[143,37560,34156],{"class":266},[143,37562,37563,37565,37567],{"class":145,"line":34159},[143,37564,34162],{"class":149},[143,37566,160],{"class":755},[143,37568,33212],{"class":149},[143,37570,37571],{"class":145,"line":34169},[143,37572,3300],{"emptyLinePlaceholder":976},[143,37574,37575],{"class":145,"line":34174},[143,37576,34177],{"class":266},[143,37578,37579,37581,37583,37585,37587],{"class":145,"line":34180},[143,37580,34183],{"class":149},[143,37582,160],{"class":755},[143,37584,34188],{"class":149},[143,37586,1573],{"class":755},[143,37588,34193],{"class":149},[143,37590,37591,37593,37595,37597,37599,37601,37603,37605,37607,37609,37611,37613,37615,37617,37619,37621,37623,37625],{"class":145,"line":34196},[143,37592,33349],{"class":280},[143,37594,1049],{"class":149},[143,37596,34203],{"class":163},[143,37598,1936],{"class":280},[143,37600,34208],{"class":755},[143,37602,366],{"class":280},[143,37604,1585],{"class":163},[143,37606,1936],{"class":280},[143,37608,34208],{"class":755},[143,37610,366],{"class":280},[143,37612,34221],{"class":163},[143,37614,34224],{"class":149},[143,37616,34227],{"class":755},[143,37618,1947],{"class":280},[143,37620,34232],{"class":149},[143,37622,1369],{"class":755},[143,37624,1947],{"class":280},[143,37626,31395],{"class":149},[143,37628,37629],{"class":145,"line":34241},[143,37630,37631],{"class":266},"    # 选择最优参数并保存\n",[143,37633,37634],{"class":145,"line":34247},[143,37635,37636],{"class":266},"    # 保存最佳模型权重字典\n",[143,37638,37639,37642,37644],{"class":145,"line":34253},[143,37640,37641],{"class":149},"    torch.save(best_model_wts,",[143,37643,34265],{"class":163},[143,37645,1055],{"class":149},[143,37647,37648],{"class":145,"line":34259},[143,37649,34285],{"class":266},[143,37651,37652,37654,37656,37658,37660,37662],{"class":145,"line":34270},[143,37653,34291],{"class":149},[143,37655,160],{"class":755},[143,37657,34296],{"class":149},[143,37659,34299],{"class":6116},[143,37661,160],{"class":755},[143,37663,2449],{"class":149},[143,37665,37666,37668,37670,37672],{"class":145,"line":34276},[143,37667,34309],{"class":163},[143,37669,1900],{"class":149},[143,37671,34314],{"class":280},[143,37673,34317],{"class":149},[143,37675,37676,37678],{"class":145,"line":34282},[143,37677,34323],{"class":163},[143,37679,34326],{"class":149},[143,37681,37682,37684],{"class":145,"line":34288},[143,37683,34332],{"class":163},[143,37685,34335],{"class":149},[143,37687,37688,37690],{"class":145,"line":34306},[143,37689,34341],{"class":163},[143,37691,34344],{"class":149},[143,37693,37694,37696],{"class":145,"line":34320},[143,37695,34350],{"class":163},[143,37697,34353],{"class":149},[143,37699,37700],{"class":145,"line":34329},[143,37701,34359],{"class":149},[143,37703,37704],{"class":145,"line":34338},[143,37705,34365],{"class":266},[143,37707,37708,37710],{"class":145,"line":34347},[143,37709,4990],{"class":755},[143,37711,34373],{"class":149},[143,37713,37714],{"class":145,"line":34356},[143,37715,3300],{"emptyLinePlaceholder":976},[143,37717,37718],{"class":145,"line":34362},[143,37719,34384],{"class":266},[143,37721,37722,37724,37726],{"class":145,"line":34368},[143,37723,32845],{"class":755},[143,37725,34392],{"class":156},[143,37727,34395],{"class":149},[143,37729,37730],{"class":145,"line":34376},[143,37731,34401],{"class":266},[143,37733,37734,37736,37738,37740,37742,37744,37746,37748],{"class":145,"line":34381},[143,37735,34407],{"class":149},[143,37737,32591],{"class":6116},[143,37739,160],{"class":755},[143,37741,1049],{"class":149},[143,37743,1539],{"class":280},[143,37745,1419],{"class":149},[143,37747,1334],{"class":280},[143,37749,31395],{"class":149},[143,37751,37752],{"class":145,"line":34387},[143,37753,34427],{"class":266},[143,37755,37756],{"class":145,"line":34398},[143,37757,34433],{"class":266},[143,37759,37760],{"class":145,"line":34404},[143,37761,34439],{"class":266},[143,37763,37764,37766,37768,37770,37772,37774,37776],{"class":145,"line":34424},[143,37765,32625],{"class":149},[143,37767,771],{"class":280},[143,37769,1419],{"class":149},[143,37771,1122],{"class":280},[143,37773,1419],{"class":149},[143,37775,771],{"class":280},[143,37777,1055],{"class":149},[143,37779,37780],{"class":145,"line":34430},[143,37781,34462],{"class":266},[143,37783,37784],{"class":145,"line":34436},[143,37785,34468],{"class":266},[143,37787,37788],{"class":145,"line":34442},[143,37789,34474],{"class":266},[143,37791,37792],{"class":145,"line":34459},[143,37793,34480],{"class":266},[143,37795,37796],{"class":145,"line":34465},[143,37797,34486],{"class":266},[143,37799,37800,37802,37804,37806,37808,37810,37812,37814,37816],{"class":145,"line":34471},[143,37801,34492],{"class":149},[143,37803,34495],{"class":163},[143,37805,34498],{"class":149},[143,37807,34501],{"class":163},[143,37809,1419],{"class":149},[143,37811,34506],{"class":6116},[143,37813,160],{"class":755},[143,37815,34511],{"class":163},[143,37817,1055],{"class":149},[143,37819,37820,37822,37824,37826,37828,37830,37832,37834,37836],{"class":145,"line":34477},[143,37821,34492],{"class":149},[143,37823,34495],{"class":163},[143,37825,34523],{"class":149},[143,37827,34526],{"class":163},[143,37829,1419],{"class":149},[143,37831,34506],{"class":6116},[143,37833,160],{"class":755},[143,37835,34535],{"class":163},[143,37837,1055],{"class":149},[143,37839,37840],{"class":145,"line":34483},[143,37841,34543],{"class":266},[143,37843,37844],{"class":145,"line":34489},[143,37845,34549],{"class":149},[143,37847,37848],{"class":145,"line":34516},[143,37849,34555],{"class":266},[143,37851,37852,37854,37856],{"class":145,"line":34540},[143,37853,34561],{"class":149},[143,37855,34564],{"class":163},[143,37857,1055],{"class":149},[143,37859,37860,37862,37864],{"class":145,"line":34546},[143,37861,34572],{"class":149},[143,37863,34575],{"class":163},[143,37865,1055],{"class":149},[143,37867,37868],{"class":145,"line":34552},[143,37869,34583],{"class":266},[143,37871,37872,37874,37876,37878,37880,37882,37884],{"class":145,"line":34558},[143,37873,32625],{"class":149},[143,37875,771],{"class":280},[143,37877,1419],{"class":149},[143,37879,1122],{"class":280},[143,37881,1419],{"class":149},[143,37883,1122],{"class":280},[143,37885,1055],{"class":149},[143,37887,37888,37890,37892,37894,37896,37898,37900,37902,37904],{"class":145,"line":34569},[143,37889,34492],{"class":149},[143,37891,34495],{"class":163},[143,37893,34610],{"class":149},[143,37895,34501],{"class":163},[143,37897,1419],{"class":149},[143,37899,34506],{"class":6116},[143,37901,160],{"class":755},[143,37903,34621],{"class":163},[143,37905,1055],{"class":149},[143,37907,37908,37910,37912,37914,37916,37918,37920,37922,37924],{"class":145,"line":34580},[143,37909,34492],{"class":149},[143,37911,34495],{"class":163},[143,37913,34633],{"class":149},[143,37915,34526],{"class":163},[143,37917,1419],{"class":149},[143,37919,34506],{"class":6116},[143,37921,160],{"class":755},[143,37923,34644],{"class":163},[143,37925,1055],{"class":149},[143,37927,37928],{"class":145,"line":34586},[143,37929,34652],{"class":266},[143,37931,37932],{"class":145,"line":34603},[143,37933,34549],{"class":149},[143,37935,37936,37938,37940],{"class":145,"line":34626},[143,37937,34561],{"class":149},[143,37939,34495],{"class":163},[143,37941,1055],{"class":149},[143,37943,37944,37946,37948],{"class":145,"line":34649},[143,37945,34572],{"class":149},[143,37947,34674],{"class":163},[143,37949,1055],{"class":149},[143,37951,37952],{"class":145,"line":34655},[143,37953,34682],{"class":149},[143,37955,37956],{"class":145,"line":34660},[143,37957,3300],{"emptyLinePlaceholder":976},[143,37959,37960],{"class":145,"line":34669},[143,37961,34693],{"class":266},[143,37963,37964,37966,37968,37970,37972],{"class":145,"line":34679},[143,37965,2434],{"class":755},[143,37967,32118],{"class":280},[143,37969,3849],{"class":755},[143,37971,32123],{"class":163},[143,37973,4639],{"class":149},[143,37975,37976],{"class":145,"line":34685},[143,37977,34712],{"class":266},[143,37979,37980,37983,37985],{"class":145,"line":34690},[143,37981,37982],{"class":149},"    AlexNet",[143,37984,160],{"class":755},[143,37986,37987],{"class":149},"AlexNet()\n",[143,37989,37990,37992,37994],{"class":145,"line":34696},[143,37991,34729],{"class":149},[143,37993,160],{"class":755},[143,37995,34734],{"class":149},[143,37997,37998,38000,38002,38005,38007,38009,38011],{"class":145,"line":34709},[143,37999,34291],{"class":149},[143,38001,160],{"class":755},[143,38003,38004],{"class":149},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[143,38006,34747],{"class":6116},[143,38008,160],{"class":755},[143,38010,1741],{"class":280},[143,38012,1055],{"class":149},[143,38014,38015],{"class":145,"line":34715},[143,38016,34759],{"class":149},[19,38018,38019],{"start":46},[22,38020,34772],{},[133,38022,38024],{"className":31276,"code":38023,"language":31278,"meta":138,"style":138},"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",[140,38025,38026,38032,38042,38052,38062,38066,38076,38086,38097,38101,38105,38109,38117,38133,38143,38159,38169,38183,38187,38197,38207,38217,38223,38227,38231,38239,38243,38259,38267,38271,38275,38283,38291,38295,38299,38303,38307,38313,38317,38327,38335,38343,38347,38351,38355,38363,38367,38383,38387,38391,38395,38407,38411,38423,38427,38431,38443,38447,38457,38461,38465,38477,38481,38489,38493,38497,38505,38509,38517,38521,38525,38529,38533,38537,38553,38561,38565,38569,38617,38623,38627,38637,38645,38653,38657,38661,38665,38669,38677,38681,38697,38701,38709,38717],{"__ignoreMap":138},[143,38027,38028,38030],{"class":145,"line":146},[143,38029,31290],{"class":755},[143,38031,31293],{"class":149},[143,38033,38034,38036,38038,38040],{"class":145,"line":35},[143,38035,31290],{"class":755},[143,38037,32313],{"class":149},[143,38039,32281],{"class":755},[143,38041,32318],{"class":149},[143,38043,38044,38046,38048,38050],{"class":145,"line":46},[143,38045,31635],{"class":755},[143,38047,34800],{"class":149},[143,38049,31290],{"class":755},[143,38051,34805],{"class":149},[143,38053,38054,38056,38058,38060],{"class":145,"line":293},[143,38055,31635],{"class":755},[143,38057,32296],{"class":149},[143,38059,31290],{"class":755},[143,38061,32301],{"class":149},[143,38063,38064],{"class":145,"line":306},[143,38065,34820],{"class":266},[143,38067,38068,38070,38072,38074],{"class":145,"line":319},[143,38069,31635],{"class":755},[143,38071,32266],{"class":149},[143,38073,31290],{"class":755},[143,38075,32271],{"class":149},[143,38077,38078,38080,38082,38084],{"class":145,"line":332},[143,38079,31635],{"class":755},[143,38081,32812],{"class":149},[143,38083,31290],{"class":755},[143,38085,36455],{"class":149},[143,38087,38088,38090,38093,38095],{"class":145,"line":345},[143,38089,31635],{"class":755},[143,38091,38092],{"class":149}," 练习.AlexNet.model ",[143,38094,31290],{"class":755},[143,38096,36455],{"class":149},[143,38098,38099],{"class":145,"line":701},[143,38100,3300],{"emptyLinePlaceholder":976},[143,38102,38103],{"class":145,"line":707},[143,38104,3300],{"emptyLinePlaceholder":976},[143,38106,38107],{"class":145,"line":727},[143,38108,34849],{"class":266},[143,38110,38111,38113,38115],{"class":145,"line":2518},[143,38112,32845],{"class":755},[143,38114,34856],{"class":156},[143,38116,32851],{"class":149},[143,38118,38119,38121,38123,38125,38127,38129,38131],{"class":145,"line":2524},[143,38120,34863],{"class":149},[143,38122,160],{"class":755},[143,38124,32353],{"class":149},[143,38126,32356],{"class":6116},[143,38128,160],{"class":755},[143,38130,32361],{"class":163},[143,38132,32364],{"class":149},[143,38134,38135,38137,38139,38141],{"class":145,"line":2529},[143,38136,34880],{"class":6116},[143,38138,160],{"class":755},[143,38140,34885],{"class":280},[143,38142,32364],{"class":149},[143,38144,38145,38147,38149,38151,38153,38155,38157],{"class":145,"line":2543},[143,38146,34892],{"class":6116},[143,38148,160],{"class":755},[143,38150,32391],{"class":149},[143,38152,32394],{"class":6116},[143,38154,160],{"class":755},[143,38156,36347],{"class":280},[143,38158,32402],{"class":149},[143,38160,38161,38163,38165,38167],{"class":145,"line":2548},[143,38162,34909],{"class":6116},[143,38164,160],{"class":755},[143,38166,32374],{"class":280},[143,38168,1055],{"class":149},[143,38170,38171,38173,38175,38177,38179,38181],{"class":145,"line":2554},[143,38172,34920],{"class":149},[143,38174,160],{"class":755},[143,38176,32432],{"class":149},[143,38178,32435],{"class":6116},[143,38180,160],{"class":755},[143,38182,34931],{"class":149},[143,38184,38185],{"class":145,"line":2575},[143,38186,34936],{"class":266},[143,38188,38189,38191,38193,38195],{"class":145,"line":2580},[143,38190,34941],{"class":6116},[143,38192,160],{"class":755},[143,38194,771],{"class":280},[143,38196,32364],{"class":149},[143,38198,38199,38201,38203,38205],{"class":145,"line":2594},[143,38200,34952],{"class":6116},[143,38202,160],{"class":755},[143,38204,32374],{"class":280},[143,38206,32364],{"class":149},[143,38208,38209,38211,38213,38215],{"class":145,"line":2599},[143,38210,34963],{"class":6116},[143,38212,160],{"class":755},[143,38214,1234],{"class":280},[143,38216,1055],{"class":149},[143,38218,38219,38221],{"class":145,"line":2628},[143,38220,4990],{"class":755},[143,38222,34976],{"class":149},[143,38224,38225],{"class":145,"line":2633},[143,38226,3300],{"emptyLinePlaceholder":976},[143,38228,38229],{"class":145,"line":2650},[143,38230,34985],{"class":266},[143,38232,38233,38235,38237],{"class":145,"line":2655},[143,38234,32845],{"class":755},[143,38236,34992],{"class":156},[143,38238,34995],{"class":149},[143,38240,38241],{"class":145,"line":2660},[143,38242,35000],{"class":266},[143,38244,38245,38247,38249,38251,38253,38255,38257],{"class":145,"line":2665},[143,38246,32135],{"class":149},[143,38248,160],{"class":755},[143,38250,32142],{"class":163},[143,38252,2605],{"class":755},[143,38254,32147],{"class":149},[143,38256,2602],{"class":755},[143,38258,35017],{"class":163},[143,38260,38261,38263,38265],{"class":145,"line":2679},[143,38262,32187],{"class":149},[143,38264,160],{"class":755},[143,38266,33187],{"class":149},[143,38268,38269],{"class":145,"line":2684},[143,38270,3300],{"emptyLinePlaceholder":976},[143,38272,38273],{"class":145,"line":3477},[143,38274,35034],{"class":266},[143,38276,38277,38279,38281],{"class":145,"line":3491},[143,38278,35039],{"class":149},[143,38280,160],{"class":755},[143,38282,33240],{"class":280},[143,38284,38285,38287,38289],{"class":145,"line":3499},[143,38286,35048],{"class":149},[143,38288,160],{"class":755},[143,38290,3985],{"class":280},[143,38292,38293],{"class":145,"line":3504},[143,38294,3300],{"emptyLinePlaceholder":976},[143,38296,38297],{"class":145,"line":3510},[143,38298,35061],{"class":266},[143,38300,38301],{"class":145,"line":3516},[143,38302,35066],{"class":266},[143,38304,38305],{"class":145,"line":3521},[143,38306,35071],{"class":266},[143,38308,38309,38311],{"class":145,"line":8848},[143,38310,35076],{"class":755},[143,38312,33782],{"class":149},[143,38314,38315],{"class":145,"line":8872},[143,38316,35083],{"class":266},[143,38318,38319,38321,38323,38325],{"class":145,"line":8877},[143,38320,4303],{"class":755},[143,38322,35090],{"class":149},[143,38324,26941],{"class":755},[143,38326,35095],{"class":149},[143,38328,38329,38331,38333],{"class":145,"line":8883},[143,38330,35100],{"class":149},[143,38332,160],{"class":755},[143,38334,35105],{"class":149},[143,38336,38337,38339,38341],{"class":145,"line":8910},[143,38338,35110],{"class":149},[143,38340,160],{"class":755},[143,38342,35115],{"class":149},[143,38344,38345],{"class":145,"line":8915},[143,38346,35120],{"class":266},[143,38348,38349],{"class":145,"line":8921},[143,38350,33773],{"class":149},[143,38352,38353],{"class":145,"line":8933},[143,38354,35129],{"class":266},[143,38356,38357,38359,38361],{"class":145,"line":8945},[143,38358,33558],{"class":149},[143,38360,160],{"class":755},[143,38362,35138],{"class":149},[143,38364,38365],{"class":145,"line":8957},[143,38366,35143],{"class":266},[143,38368,38369,38371,38373,38375,38377,38379,38381],{"class":145,"line":10616},[143,38370,33575],{"class":149},[143,38372,160],{"class":755},[143,38374,33580],{"class":149},[143,38376,33583],{"class":6116},[143,38378,160],{"class":755},[143,38380,771],{"class":280},[143,38382,1055],{"class":149},[143,38384,38385],{"class":145,"line":10641},[143,38386,35164],{"class":266},[143,38388,38389],{"class":145,"line":10664},[143,38390,35169],{"class":266},[143,38392,38393],{"class":145,"line":10688},[143,38394,35174],{"class":266},[143,38396,38397,38399,38401,38403,38405],{"class":145,"line":10693},[143,38398,35179],{"class":149},[143,38400,10377],{"class":755},[143,38402,33685],{"class":149},[143,38404,3849],{"class":755},[143,38406,35188],{"class":149},[143,38408,38409],{"class":145,"line":10698},[143,38410,35193],{"class":266},[143,38412,38413,38415,38417,38419,38421],{"class":145,"line":10703},[143,38414,35198],{"class":149},[143,38416,10377],{"class":755},[143,38418,35203],{"class":149},[143,38420,1234],{"class":280},[143,38422,1055],{"class":149},[143,38424,38425],{"class":145,"line":10712},[143,38426,3300],{"emptyLinePlaceholder":976},[143,38428,38429],{"class":145,"line":10717},[143,38430,35216],{"class":266},[143,38432,38433,38435,38437,38439,38441],{"class":145,"line":10723},[143,38434,35221],{"class":149},[143,38436,160],{"class":755},[143,38438,35226],{"class":149},[143,38440,1625],{"class":755},[143,38442,35231],{"class":149},[143,38444,38445],{"class":145,"line":10744},[143,38446,35236],{"class":266},[143,38448,38449,38451,38453,38455],{"class":145,"line":10750},[143,38450,33349],{"class":280},[143,38452,1049],{"class":149},[143,38454,35245],{"class":163},[143,38456,35248],{"class":149},[143,38458,38459],{"class":145,"line":10764},[143,38460,3300],{"emptyLinePlaceholder":976},[143,38462,38463],{"class":145,"line":10770},[143,38464,35257],{"class":266},[143,38466,38467,38469,38471,38473,38475],{"class":145,"line":10797},[143,38468,2434],{"class":755},[143,38470,32118],{"class":280},[143,38472,3849],{"class":755},[143,38474,32123],{"class":163},[143,38476,4639],{"class":149},[143,38478,38479],{"class":145,"line":10806},[143,38480,35274],{"class":266},[143,38482,38483,38485,38487],{"class":145,"line":10812},[143,38484,32187],{"class":149},[143,38486,160],{"class":755},[143,38488,37987],{"class":149},[143,38490,38491],{"class":145,"line":10820},[143,38492,35287],{"class":266},[143,38494,38495],{"class":145,"line":10825},[143,38496,35292],{"class":266},[143,38498,38499,38501,38503],{"class":145,"line":17502},[143,38500,35297],{"class":149},[143,38502,35300],{"class":163},[143,38504,31395],{"class":149},[143,38506,38507],{"class":145,"line":17508},[143,38508,35307],{"class":266},[143,38510,38511,38513,38515],{"class":145,"line":17531},[143,38512,34920],{"class":149},[143,38514,160],{"class":755},[143,38516,35316],{"class":149},[143,38518,38519],{"class":145,"line":17537},[143,38520,35321],{"class":266},[143,38522,38523],{"class":145,"line":17560},[143,38524,35326],{"class":149},[143,38526,38527],{"class":145,"line":17574},[143,38528,3300],{"emptyLinePlaceholder":976},[143,38530,38531],{"class":145,"line":17594},[143,38532,35335],{"class":266},[143,38534,38535],{"class":145,"line":17600},[143,38536,35340],{"class":266},[143,38538,38539,38541,38543,38545,38547,38549,38551],{"class":145,"line":17611},[143,38540,32135],{"class":149},[143,38542,160],{"class":755},[143,38544,32142],{"class":163},[143,38546,2605],{"class":755},[143,38548,32147],{"class":149},[143,38550,2602],{"class":755},[143,38552,35017],{"class":163},[143,38554,38555,38557,38559],{"class":145,"line":17634},[143,38556,32187],{"class":149},[143,38558,160],{"class":755},[143,38560,33187],{"class":149},[143,38562,38563],{"class":145,"line":17656},[143,38564,35369],{"class":266},[143,38566,38567],{"class":145,"line":17661},[143,38568,35374],{"class":266},[143,38570,38571,38573,38575,38577,38579,38581,38583,38585,38587,38589,38591,38593,38595,38597,38599,38601,38603,38605,38607,38609,38611,38613,38615],{"class":145,"line":17667},[143,38572,35379],{"class":149},[143,38574,160],{"class":755},[143,38576,749],{"class":149},[143,38578,35386],{"class":163},[143,38580,1419],{"class":149},[143,38582,35391],{"class":163},[143,38584,1419],{"class":149},[143,38586,35396],{"class":163},[143,38588,1419],{"class":149},[143,38590,35401],{"class":163},[143,38592,1419],{"class":149},[143,38594,35406],{"class":163},[143,38596,1419],{"class":149},[143,38598,35411],{"class":163},[143,38600,1419],{"class":149},[143,38602,35416],{"class":163},[143,38604,1419],{"class":149},[143,38606,35421],{"class":163},[143,38608,1419],{"class":149},[143,38610,35426],{"class":163},[143,38612,1419],{"class":149},[143,38614,35431],{"class":163},[143,38616,34144],{"class":149},[143,38618,38619,38621],{"class":145,"line":17681},[143,38620,35076],{"class":755},[143,38622,33782],{"class":149},[143,38624,38625],{"class":145,"line":17694},[143,38626,35444],{"class":266},[143,38628,38629,38631,38633,38635],{"class":145,"line":17699},[143,38630,4303],{"class":755},[143,38632,35451],{"class":149},[143,38634,26941],{"class":755},[143,38636,35095],{"class":149},[143,38638,38639,38641,38643],{"class":145,"line":17713},[143,38640,33508],{"class":149},[143,38642,160],{"class":755},[143,38644,33513],{"class":149},[143,38646,38647,38649,38651],{"class":145,"line":17718},[143,38648,33523],{"class":149},[143,38650,160],{"class":755},[143,38652,33528],{"class":149},[143,38654,38655],{"class":145,"line":17724},[143,38656,3300],{"emptyLinePlaceholder":976},[143,38658,38659],{"class":145,"line":17729},[143,38660,35480],{"class":266},[143,38662,38663],{"class":145,"line":17743},[143,38664,33773],{"class":149},[143,38666,38667],{"class":145,"line":17748},[143,38668,35489],{"class":266},[143,38670,38671,38673,38675],{"class":145,"line":17753},[143,38672,33558],{"class":149},[143,38674,160],{"class":755},[143,38676,33563],{"class":149},[143,38678,38679],{"class":145,"line":17767},[143,38680,35502],{"class":266},[143,38682,38683,38685,38687,38689,38691,38693,38695],{"class":145,"line":17779},[143,38684,33575],{"class":149},[143,38686,160],{"class":755},[143,38688,33580],{"class":149},[143,38690,33583],{"class":6116},[143,38692,160],{"class":755},[143,38694,771],{"class":280},[143,38696,1055],{"class":149},[143,38698,38699],{"class":145,"line":17784},[143,38700,35523],{"class":266},[143,38702,38703,38705,38707],{"class":145,"line":17797},[143,38704,35528],{"class":149},[143,38706,160],{"class":755},[143,38708,35533],{"class":149},[143,38710,38711,38713,38715],{"class":145,"line":17802},[143,38712,35538],{"class":149},[143,38714,160],{"class":755},[143,38716,35543],{"class":149},[143,38718,38719,38721,38723,38725,38727,38729,38731,38733],{"class":145,"line":17807},[143,38720,35548],{"class":280},[143,38722,1049],{"class":149},[143,38724,35553],{"class":163},[143,38726,35556],{"class":149},[143,38728,35559],{"class":163},[143,38730,1419],{"class":149},[143,38732,35564],{"class":163},[143,38734,35567],{"class":149},[58,38736,38738],{"id":38737},"_22vgg","2.2.VGG",[22896,38740,38742],{"id":38741},"_221原理","2.2.1.原理",[63,38744,38745],{},[29,38746],{"alt":138,"src":38747},"\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",[63,38749,38750],{},[29,38751],{"alt":138,"src":38752},"\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",[63,38754,38755],{},[29,38756],{"alt":138,"src":38757},"\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",[63,38759,38760],{},"参数详细描述：",[63,38762,38763],{},[29,38764],{"alt":138,"src":38765},"\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",[63,38767,38768],{},[29,38769],{"alt":138,"src":38770},"\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",[63,38772,38773],{},[29,38774],{"alt":138,"src":38775},"\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",[63,38777,38778],{},[29,38779],{"alt":138,"src":38780},"\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",[63,38782,38783],{},[29,38784],{"alt":138,"src":38785},"\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",[22896,38787,38789],{"id":38788},"_222代码实现","2.2.2.代码实现",[19,38791,38792],{},[22,38793,38794],{},"网络搭建",[133,38796,38798],{"className":31276,"code":38797,"language":31278,"meta":138,"style":138},"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",[140,38799,38800,38806,38818,38828,38838,38842,38859,38867,38886,38891,38896,38908,38946,38951,38987,38991,39020,39025,39030,39041,39077,39081,39117,39121,39149,39153,39158,39169,39205,39209,39245,39249,39285,39289,39317,39321,39326,39337,39374,39378,39414,39418,39454,39458,39486,39490,39495,39506,39542,39546,39582,39586,39622,39626,39654,39658,39663,39674,39679,39684,39689,39710,39714,39726,39730,39742,39746,39750,39755,39760,39775,39780,39790,39795,39810,39815,39834,39839,39848,39853,39863,39868,39873,39887,39892,39906,39914,39918,39922,39930,39941,39952,39963,39974,39985,39996,40002,40006,40011,40024,40044,40050,40059],{"__ignoreMap":138},[143,38801,38802,38804],{"class":145,"line":146},[143,38803,31290],{"class":755},[143,38805,31293],{"class":149},[143,38807,38808,38810,38813,38815],{"class":145,"line":35},[143,38809,31635],{"class":755},[143,38811,38812],{"class":149}," sympy.core.sympify ",[143,38814,31290],{"class":755},[143,38816,38817],{"class":149}," kernS\n",[143,38819,38820,38822,38824,38826],{"class":145,"line":46},[143,38821,31635],{"class":755},[143,38823,31638],{"class":149},[143,38825,31290],{"class":755},[143,38827,31643],{"class":149},[143,38829,38830,38832,38834,38836],{"class":145,"line":293},[143,38831,31635],{"class":755},[143,38833,31655],{"class":149},[143,38835,31290],{"class":755},[143,38837,31660],{"class":149},[143,38839,38840],{"class":145,"line":306},[143,38841,3300],{"emptyLinePlaceholder":976},[143,38843,38844,38846,38849,38851,38853,38855,38857],{"class":145,"line":319},[143,38845,15593],{"class":755},[143,38847,38848],{"class":156}," VGG16",[143,38850,1049],{"class":149},[143,38852,31676],{"class":156},[143,38854,1599],{"class":149},[143,38856,31681],{"class":156},[143,38858,31684],{"class":149},[143,38860,38861,38863,38865],{"class":145,"line":332},[143,38862,31699],{"class":755},[143,38864,31702],{"class":280},[143,38866,31705],{"class":149},[143,38868,38869,38871,38873,38876,38878,38880,38882,38884],{"class":145,"line":345},[143,38870,31715],{"class":280},[143,38872,1049],{"class":149},[143,38874,38875],{"class":280},"VGG16",[143,38877,13335],{"class":149},[143,38879,31721],{"class":280},[143,38881,31724],{"class":149},[143,38883,31727],{"class":280},[143,38885,2876],{"class":149},[143,38887,38888],{"class":145,"line":701},[143,38889,38890],{"class":266},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[143,38892,38893],{"class":145,"line":707},[143,38894,38895],{"class":266},"        # 这里用的是灰度图\n",[143,38897,38898,38900,38903,38905],{"class":145,"line":727},[143,38899,31743],{"class":280},[143,38901,38902],{"class":149},".block1",[143,38904,160],{"class":755},[143,38906,38907],{"class":149},"nn.Sequential(\n",[143,38909,38910,38913,38915,38917,38919,38921,38923,38925,38927,38929,38931,38933,38935,38937,38939,38941,38943],{"class":145,"line":2518},[143,38911,38912],{"class":149},"            nn.Conv2d(",[143,38914,31754],{"class":6116},[143,38916,160],{"class":755},[143,38918,771],{"class":280},[143,38920,1419],{"class":149},[143,38922,31763],{"class":6116},[143,38924,160],{"class":755},[143,38926,1246],{"class":280},[143,38928,1419],{"class":149},[143,38930,31772],{"class":6116},[143,38932,160],{"class":755},[143,38934,1116],{"class":280},[143,38936,1419],{"class":149},[143,38938,31781],{"class":6116},[143,38940,160],{"class":755},[143,38942,771],{"class":280},[143,38944,38945],{"class":149},"),\n",[143,38947,38948],{"class":145,"line":2524},[143,38949,38950],{"class":149},"            nn.ReLU(),\n",[143,38952,38953,38955,38957,38959,38961,38963,38965,38967,38969,38971,38973,38975,38977,38979,38981,38983,38985],{"class":145,"line":2529},[143,38954,38912],{"class":149},[143,38956,31754],{"class":6116},[143,38958,160],{"class":755},[143,38960,1246],{"class":280},[143,38962,1419],{"class":149},[143,38964,31763],{"class":6116},[143,38966,160],{"class":755},[143,38968,1246],{"class":280},[143,38970,1419],{"class":149},[143,38972,31772],{"class":6116},[143,38974,160],{"class":755},[143,38976,1116],{"class":280},[143,38978,1419],{"class":149},[143,38980,31781],{"class":6116},[143,38982,160],{"class":755},[143,38984,771],{"class":280},[143,38986,38945],{"class":149},[143,38988,38989],{"class":145,"line":2543},[143,38990,38950],{"class":149},[143,38992,38993,38996,38998,39000,39002,39004,39006,39008,39010,39012,39014,39016,39018],{"class":145,"line":2548},[143,38994,38995],{"class":149},"            nn.MaxPool2d(",[143,38997,31772],{"class":6116},[143,38999,160],{"class":755},[143,39001,1122],{"class":280},[143,39003,1419],{"class":149},[143,39005,31827],{"class":6116},[143,39007,160],{"class":755},[143,39009,1122],{"class":280},[143,39011,1419],{"class":149},[143,39013,31781],{"class":6116},[143,39015,160],{"class":755},[143,39017,1234],{"class":280},[143,39019,1055],{"class":149},[143,39021,39022],{"class":145,"line":2554},[143,39023,39024],{"class":149},"        )\n",[143,39026,39027],{"class":145,"line":2575},[143,39028,39029],{"class":266},"        # 第二层\n",[143,39031,39032,39034,39037,39039],{"class":145,"line":2580},[143,39033,31743],{"class":280},[143,39035,39036],{"class":149},".block2",[143,39038,160],{"class":755},[143,39040,38907],{"class":149},[143,39042,39043,39045,39047,39049,39051,39053,39055,39057,39059,39061,39063,39065,39067,39069,39071,39073,39075],{"class":145,"line":2594},[143,39044,38912],{"class":149},[143,39046,31754],{"class":6116},[143,39048,160],{"class":755},[143,39050,1246],{"class":280},[143,39052,1419],{"class":149},[143,39054,31763],{"class":6116},[143,39056,160],{"class":755},[143,39058,32968],{"class":280},[143,39060,1419],{"class":149},[143,39062,31772],{"class":6116},[143,39064,160],{"class":755},[143,39066,1116],{"class":280},[143,39068,1419],{"class":149},[143,39070,31781],{"class":6116},[143,39072,160],{"class":755},[143,39074,771],{"class":280},[143,39076,38945],{"class":149},[143,39078,39079],{"class":145,"line":2599},[143,39080,38950],{"class":149},[143,39082,39083,39085,39087,39089,39091,39093,39095,39097,39099,39101,39103,39105,39107,39109,39111,39113,39115],{"class":145,"line":2628},[143,39084,38912],{"class":149},[143,39086,31754],{"class":6116},[143,39088,160],{"class":755},[143,39090,32968],{"class":280},[143,39092,1419],{"class":149},[143,39094,31763],{"class":6116},[143,39096,160],{"class":755},[143,39098,32968],{"class":280},[143,39100,1419],{"class":149},[143,39102,31772],{"class":6116},[143,39104,160],{"class":755},[143,39106,1116],{"class":280},[143,39108,1419],{"class":149},[143,39110,31781],{"class":6116},[143,39112,160],{"class":755},[143,39114,771],{"class":280},[143,39116,38945],{"class":149},[143,39118,39119],{"class":145,"line":2633},[143,39120,38950],{"class":149},[143,39122,39123,39125,39127,39129,39131,39133,39135,39137,39139,39141,39143,39145,39147],{"class":145,"line":2650},[143,39124,38995],{"class":149},[143,39126,31772],{"class":6116},[143,39128,160],{"class":755},[143,39130,1122],{"class":280},[143,39132,1419],{"class":149},[143,39134,31827],{"class":6116},[143,39136,160],{"class":755},[143,39138,1122],{"class":280},[143,39140,1419],{"class":149},[143,39142,31781],{"class":6116},[143,39144,160],{"class":755},[143,39146,1234],{"class":280},[143,39148,1055],{"class":149},[143,39150,39151],{"class":145,"line":2655},[143,39152,39024],{"class":149},[143,39154,39155],{"class":145,"line":2660},[143,39156,39157],{"class":266},"        # 第三层\n",[143,39159,39160,39162,39165,39167],{"class":145,"line":2665},[143,39161,31743],{"class":280},[143,39163,39164],{"class":149},".block3",[143,39166,160],{"class":755},[143,39168,38907],{"class":149},[143,39170,39171,39173,39175,39177,39179,39181,39183,39185,39187,39189,39191,39193,39195,39197,39199,39201,39203],{"class":145,"line":2679},[143,39172,38912],{"class":149},[143,39174,31754],{"class":6116},[143,39176,160],{"class":755},[143,39178,32968],{"class":280},[143,39180,1419],{"class":149},[143,39182,31763],{"class":6116},[143,39184,160],{"class":755},[143,39186,35768],{"class":280},[143,39188,1419],{"class":149},[143,39190,31772],{"class":6116},[143,39192,160],{"class":755},[143,39194,1116],{"class":280},[143,39196,1419],{"class":149},[143,39198,31781],{"class":6116},[143,39200,160],{"class":755},[143,39202,771],{"class":280},[143,39204,38945],{"class":149},[143,39206,39207],{"class":145,"line":2684},[143,39208,38950],{"class":149},[143,39210,39211,39213,39215,39217,39219,39221,39223,39225,39227,39229,39231,39233,39235,39237,39239,39241,39243],{"class":145,"line":3477},[143,39212,38912],{"class":149},[143,39214,31754],{"class":6116},[143,39216,160],{"class":755},[143,39218,35768],{"class":280},[143,39220,1419],{"class":149},[143,39222,31763],{"class":6116},[143,39224,160],{"class":755},[143,39226,35768],{"class":280},[143,39228,1419],{"class":149},[143,39230,31772],{"class":6116},[143,39232,160],{"class":755},[143,39234,1116],{"class":280},[143,39236,1419],{"class":149},[143,39238,31781],{"class":6116},[143,39240,160],{"class":755},[143,39242,771],{"class":280},[143,39244,38945],{"class":149},[143,39246,39247],{"class":145,"line":3491},[143,39248,38950],{"class":149},[143,39250,39251,39253,39255,39257,39259,39261,39263,39265,39267,39269,39271,39273,39275,39277,39279,39281,39283],{"class":145,"line":3499},[143,39252,38912],{"class":149},[143,39254,31754],{"class":6116},[143,39256,160],{"class":755},[143,39258,35768],{"class":280},[143,39260,1419],{"class":149},[143,39262,31763],{"class":6116},[143,39264,160],{"class":755},[143,39266,35768],{"class":280},[143,39268,1419],{"class":149},[143,39270,31772],{"class":6116},[143,39272,160],{"class":755},[143,39274,1116],{"class":280},[143,39276,1419],{"class":149},[143,39278,31781],{"class":6116},[143,39280,160],{"class":755},[143,39282,771],{"class":280},[143,39284,38945],{"class":149},[143,39286,39287],{"class":145,"line":3504},[143,39288,38950],{"class":149},[143,39290,39291,39293,39295,39297,39299,39301,39303,39305,39307,39309,39311,39313,39315],{"class":145,"line":3510},[143,39292,38995],{"class":149},[143,39294,31772],{"class":6116},[143,39296,160],{"class":755},[143,39298,1122],{"class":280},[143,39300,1419],{"class":149},[143,39302,31827],{"class":6116},[143,39304,160],{"class":755},[143,39306,1122],{"class":280},[143,39308,1419],{"class":149},[143,39310,31781],{"class":6116},[143,39312,160],{"class":755},[143,39314,1234],{"class":280},[143,39316,1055],{"class":149},[143,39318,39319],{"class":145,"line":3516},[143,39320,39024],{"class":149},[143,39322,39323],{"class":145,"line":3521},[143,39324,39325],{"class":266},"        # 第四层\n",[143,39327,39328,39330,39333,39335],{"class":145,"line":8848},[143,39329,31743],{"class":280},[143,39331,39332],{"class":149},".block4",[143,39334,160],{"class":755},[143,39336,38907],{"class":149},[143,39338,39339,39341,39343,39345,39347,39349,39351,39353,39356,39358,39360,39362,39364,39366,39368,39370,39372],{"class":145,"line":8872},[143,39340,38912],{"class":149},[143,39342,31754],{"class":6116},[143,39344,160],{"class":755},[143,39346,35768],{"class":280},[143,39348,1419],{"class":149},[143,39350,31763],{"class":6116},[143,39352,160],{"class":755},[143,39354,39355],{"class":280},"512",[143,39357,1419],{"class":149},[143,39359,31772],{"class":6116},[143,39361,160],{"class":755},[143,39363,1116],{"class":280},[143,39365,1419],{"class":149},[143,39367,31781],{"class":6116},[143,39369,160],{"class":755},[143,39371,771],{"class":280},[143,39373,38945],{"class":149},[143,39375,39376],{"class":145,"line":8877},[143,39377,38950],{"class":149},[143,39379,39380,39382,39384,39386,39388,39390,39392,39394,39396,39398,39400,39402,39404,39406,39408,39410,39412],{"class":145,"line":8883},[143,39381,38912],{"class":149},[143,39383,31754],{"class":6116},[143,39385,160],{"class":755},[143,39387,39355],{"class":280},[143,39389,1419],{"class":149},[143,39391,31763],{"class":6116},[143,39393,160],{"class":755},[143,39395,39355],{"class":280},[143,39397,1419],{"class":149},[143,39399,31772],{"class":6116},[143,39401,160],{"class":755},[143,39403,1116],{"class":280},[143,39405,1419],{"class":149},[143,39407,31781],{"class":6116},[143,39409,160],{"class":755},[143,39411,771],{"class":280},[143,39413,38945],{"class":149},[143,39415,39416],{"class":145,"line":8910},[143,39417,38950],{"class":149},[143,39419,39420,39422,39424,39426,39428,39430,39432,39434,39436,39438,39440,39442,39444,39446,39448,39450,39452],{"class":145,"line":8915},[143,39421,38912],{"class":149},[143,39423,31754],{"class":6116},[143,39425,160],{"class":755},[143,39427,39355],{"class":280},[143,39429,1419],{"class":149},[143,39431,31763],{"class":6116},[143,39433,160],{"class":755},[143,39435,39355],{"class":280},[143,39437,1419],{"class":149},[143,39439,31772],{"class":6116},[143,39441,160],{"class":755},[143,39443,1116],{"class":280},[143,39445,1419],{"class":149},[143,39447,31781],{"class":6116},[143,39449,160],{"class":755},[143,39451,771],{"class":280},[143,39453,38945],{"class":149},[143,39455,39456],{"class":145,"line":8921},[143,39457,38950],{"class":149},[143,39459,39460,39462,39464,39466,39468,39470,39472,39474,39476,39478,39480,39482,39484],{"class":145,"line":8933},[143,39461,38995],{"class":149},[143,39463,31772],{"class":6116},[143,39465,160],{"class":755},[143,39467,1122],{"class":280},[143,39469,1419],{"class":149},[143,39471,31827],{"class":6116},[143,39473,160],{"class":755},[143,39475,1122],{"class":280},[143,39477,1419],{"class":149},[143,39479,31781],{"class":6116},[143,39481,160],{"class":755},[143,39483,1234],{"class":280},[143,39485,1055],{"class":149},[143,39487,39488],{"class":145,"line":8945},[143,39489,39024],{"class":149},[143,39491,39492],{"class":145,"line":8957},[143,39493,39494],{"class":266},"        # 第五层\n",[143,39496,39497,39499,39502,39504],{"class":145,"line":10616},[143,39498,31743],{"class":280},[143,39500,39501],{"class":149},".block5",[143,39503,160],{"class":755},[143,39505,38907],{"class":149},[143,39507,39508,39510,39512,39514,39516,39518,39520,39522,39524,39526,39528,39530,39532,39534,39536,39538,39540],{"class":145,"line":10641},[143,39509,38912],{"class":149},[143,39511,31754],{"class":6116},[143,39513,160],{"class":755},[143,39515,39355],{"class":280},[143,39517,1419],{"class":149},[143,39519,31763],{"class":6116},[143,39521,160],{"class":755},[143,39523,39355],{"class":280},[143,39525,1419],{"class":149},[143,39527,31772],{"class":6116},[143,39529,160],{"class":755},[143,39531,1116],{"class":280},[143,39533,1419],{"class":149},[143,39535,31781],{"class":6116},[143,39537,160],{"class":755},[143,39539,771],{"class":280},[143,39541,38945],{"class":149},[143,39543,39544],{"class":145,"line":10664},[143,39545,38950],{"class":149},[143,39547,39548,39550,39552,39554,39556,39558,39560,39562,39564,39566,39568,39570,39572,39574,39576,39578,39580],{"class":145,"line":10688},[143,39549,38912],{"class":149},[143,39551,31754],{"class":6116},[143,39553,160],{"class":755},[143,39555,39355],{"class":280},[143,39557,1419],{"class":149},[143,39559,31763],{"class":6116},[143,39561,160],{"class":755},[143,39563,39355],{"class":280},[143,39565,1419],{"class":149},[143,39567,31772],{"class":6116},[143,39569,160],{"class":755},[143,39571,1116],{"class":280},[143,39573,1419],{"class":149},[143,39575,31781],{"class":6116},[143,39577,160],{"class":755},[143,39579,771],{"class":280},[143,39581,38945],{"class":149},[143,39583,39584],{"class":145,"line":10693},[143,39585,38950],{"class":149},[143,39587,39588,39590,39592,39594,39596,39598,39600,39602,39604,39606,39608,39610,39612,39614,39616,39618,39620],{"class":145,"line":10698},[143,39589,38912],{"class":149},[143,39591,31754],{"class":6116},[143,39593,160],{"class":755},[143,39595,39355],{"class":280},[143,39597,1419],{"class":149},[143,39599,31763],{"class":6116},[143,39601,160],{"class":755},[143,39603,39355],{"class":280},[143,39605,1419],{"class":149},[143,39607,31772],{"class":6116},[143,39609,160],{"class":755},[143,39611,1116],{"class":280},[143,39613,1419],{"class":149},[143,39615,31781],{"class":6116},[143,39617,160],{"class":755},[143,39619,771],{"class":280},[143,39621,38945],{"class":149},[143,39623,39624],{"class":145,"line":10703},[143,39625,38950],{"class":149},[143,39627,39628,39630,39632,39634,39636,39638,39640,39642,39644,39646,39648,39650,39652],{"class":145,"line":10712},[143,39629,38995],{"class":149},[143,39631,31772],{"class":6116},[143,39633,160],{"class":755},[143,39635,1122],{"class":280},[143,39637,1419],{"class":149},[143,39639,31827],{"class":6116},[143,39641,160],{"class":755},[143,39643,1122],{"class":280},[143,39645,1419],{"class":149},[143,39647,31781],{"class":6116},[143,39649,160],{"class":755},[143,39651,1234],{"class":280},[143,39653,1055],{"class":149},[143,39655,39656],{"class":145,"line":10717},[143,39657,39024],{"class":149},[143,39659,39660],{"class":145,"line":10723},[143,39661,39662],{"class":266},"        # 全连接层\n",[143,39664,39665,39667,39670,39672],{"class":145,"line":10744},[143,39666,31743],{"class":280},[143,39668,39669],{"class":149},".block6",[143,39671,160],{"class":755},[143,39673,38907],{"class":149},[143,39675,39676],{"class":145,"line":10750},[143,39677,39678],{"class":266},"            # 平展操作\n",[143,39680,39681],{"class":145,"line":10764},[143,39682,39683],{"class":266},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[143,39685,39686],{"class":145,"line":10770},[143,39687,39688],{"class":149},"            nn.Flatten(),\n",[143,39690,39691,39694,39696,39698,39700,39702,39704,39706,39708],{"class":145,"line":10797},[143,39692,39693],{"class":149},"            nn.Linear(",[143,39695,1410],{"class":280},[143,39697,1496],{"class":755},[143,39699,1410],{"class":280},[143,39701,1496],{"class":755},[143,39703,39355],{"class":280},[143,39705,1419],{"class":149},[143,39707,35768],{"class":280},[143,39709,38945],{"class":149},[143,39711,39712],{"class":145,"line":10806},[143,39713,38950],{"class":149},[143,39715,39716,39718,39720,39722,39724],{"class":145,"line":10812},[143,39717,39693],{"class":149},[143,39719,35768],{"class":280},[143,39721,1419],{"class":149},[143,39723,32968],{"class":280},[143,39725,38945],{"class":149},[143,39727,39728],{"class":145,"line":10820},[143,39729,38950],{"class":149},[143,39731,39732,39734,39736,39738,39740],{"class":145,"line":10825},[143,39733,39693],{"class":149},[143,39735,32968],{"class":280},[143,39737,1419],{"class":149},[143,39739,1487],{"class":280},[143,39741,1055],{"class":149},[143,39743,39744],{"class":145,"line":17502},[143,39745,39024],{"class":149},[143,39747,39748],{"class":145,"line":17508},[143,39749,3300],{"emptyLinePlaceholder":976},[143,39751,39752],{"class":145,"line":17531},[143,39753,39754],{"class":266},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[143,39756,39757],{"class":145,"line":17537},[143,39758,39759],{"class":266},"        # 循环遍历模型\n",[143,39761,39762,39764,39767,39769,39772],{"class":145,"line":17560},[143,39763,4303],{"class":755},[143,39765,39766],{"class":149}," m ",[143,39768,26941],{"class":755},[143,39770,39771],{"class":280}," self",[143,39773,39774],{"class":149},".modules():\n",[143,39776,39777],{"class":145,"line":17574},[143,39778,39779],{"class":266},"            # print(m)\n",[143,39781,39782,39784,39787],{"class":145,"line":17594},[143,39783,5542],{"class":755},[143,39785,39786],{"class":280}," isinstance",[143,39788,39789],{"class":149},"(m,nn.Conv2d):\n",[143,39791,39792],{"class":145,"line":17600},[143,39793,39794],{"class":266},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[143,39796,39797,39800,39803,39805,39808],{"class":145,"line":17611},[143,39798,39799],{"class":149},"                nn.init.kaiming_normal_(m.weight,",[143,39801,39802],{"class":6116},"nonlinearity",[143,39804,160],{"class":755},[143,39806,39807],{"class":163},"'relu'",[143,39809,1055],{"class":149},[143,39811,39812],{"class":145,"line":17634},[143,39813,39814],{"class":266},"                # 判断b参数是否存在\n",[143,39816,39817,39820,39823,39826,39829,39832],{"class":145,"line":17656},[143,39818,39819],{"class":755},"                if",[143,39821,39822],{"class":149}," m.bias ",[143,39824,39825],{"class":755},"is",[143,39827,39828],{"class":755}," not",[143,39830,39831],{"class":280}," None",[143,39833,4639],{"class":149},[143,39835,39836],{"class":145,"line":17661},[143,39837,39838],{"class":266},"                    # 如果参数不存在的化初始化b=0\n",[143,39840,39841,39844,39846],{"class":145,"line":17667},[143,39842,39843],{"class":149},"                    nn.init.constant_(m.bias,",[143,39845,1234],{"class":280},[143,39847,1055],{"class":149},[143,39849,39850],{"class":145,"line":17681},[143,39851,39852],{"class":266},"            # 全连接层初始化\n",[143,39854,39855,39858,39860],{"class":145,"line":17694},[143,39856,39857],{"class":755},"            elif",[143,39859,39786],{"class":280},[143,39861,39862],{"class":149},"(m,nn.Linear):\n",[143,39864,39865],{"class":145,"line":17699},[143,39866,39867],{"class":266},"                # 这个初始化方法是利用的是正太分布的方式\n",[143,39869,39870],{"class":145,"line":17713},[143,39871,39872],{"class":266},"                # 均值为0，方差为0.01\n",[143,39874,39875,39878,39880,39882,39885],{"class":145,"line":17718},[143,39876,39877],{"class":149},"                nn.init.normal_(m.weight,",[143,39879,1234],{"class":280},[143,39881,1419],{"class":149},[143,39883,39884],{"class":280},"0.01",[143,39886,1055],{"class":149},[143,39888,39889],{"class":145,"line":17724},[143,39890,39891],{"class":266},"                # 初始化b参数\n",[143,39893,39894,39896,39898,39900,39902,39904],{"class":145,"line":17729},[143,39895,39819],{"class":755},[143,39897,39822],{"class":149},[143,39899,39825],{"class":755},[143,39901,39828],{"class":755},[143,39903,39831],{"class":280},[143,39905,4639],{"class":149},[143,39907,39908,39910,39912],{"class":145,"line":17743},[143,39909,39843],{"class":149},[143,39911,1234],{"class":280},[143,39913,1055],{"class":149},[143,39915,39916],{"class":145,"line":17748},[143,39917,3300],{"emptyLinePlaceholder":976},[143,39919,39920],{"class":145,"line":17753},[143,39921,36063],{"class":266},[143,39923,39924,39926,39928],{"class":145,"line":17767},[143,39925,31699],{"class":755},[143,39927,31991],{"class":156},[143,39929,31994],{"class":149},[143,39931,39932,39934,39936,39938],{"class":145,"line":17779},[143,39933,31999],{"class":149},[143,39935,160],{"class":755},[143,39937,31721],{"class":280},[143,39939,39940],{"class":149},".block1(x)\n",[143,39942,39943,39945,39947,39949],{"class":145,"line":17784},[143,39944,31999],{"class":149},[143,39946,160],{"class":755},[143,39948,31721],{"class":280},[143,39950,39951],{"class":149},".block2(x)\n",[143,39953,39954,39956,39958,39960],{"class":145,"line":17797},[143,39955,31999],{"class":149},[143,39957,160],{"class":755},[143,39959,31721],{"class":280},[143,39961,39962],{"class":149},".block3(x)\n",[143,39964,39965,39967,39969,39971],{"class":145,"line":17802},[143,39966,31999],{"class":149},[143,39968,160],{"class":755},[143,39970,31721],{"class":280},[143,39972,39973],{"class":149},".block4(x)\n",[143,39975,39976,39978,39980,39982],{"class":145,"line":17807},[143,39977,31999],{"class":149},[143,39979,160],{"class":755},[143,39981,31721],{"class":280},[143,39983,39984],{"class":149},".block5(x)\n",[143,39986,39987,39989,39991,39993],{"class":145,"line":17812},[143,39988,31999],{"class":149},[143,39990,160],{"class":755},[143,39992,31721],{"class":280},[143,39994,39995],{"class":149},".block6(x)\n",[143,39997,39998,40000],{"class":145,"line":17825},[143,39999,15651],{"class":755},[143,40001,32107],{"class":149},[143,40003,40004],{"class":145,"line":17830},[143,40005,3300],{"emptyLinePlaceholder":976},[143,40007,40008],{"class":145,"line":33531},[143,40009,40010],{"class":266},"# 验证模型\n",[143,40012,40013,40015,40017,40019,40022],{"class":145,"line":33537},[143,40014,2434],{"class":755},[143,40016,32118],{"class":280},[143,40018,3849],{"class":755},[143,40020,40021],{"class":163},"'__main__'",[143,40023,4639],{"class":149},[143,40025,40026,40028,40030,40032,40034,40036,40038,40040,40042],{"class":145,"line":33543},[143,40027,32135],{"class":149},[143,40029,160],{"class":755},[143,40031,31349],{"class":149},[143,40033,32142],{"class":163},[143,40035,2605],{"class":755},[143,40037,32147],{"class":149},[143,40039,2602],{"class":755},[143,40041,31374],{"class":163},[143,40043,1055],{"class":149},[143,40045,40046,40048],{"class":145,"line":33549},[143,40047,32197],{"class":280},[143,40049,31383],{"class":149},[143,40051,40052,40054,40056],{"class":145,"line":33555},[143,40053,32187],{"class":149},[143,40055,160],{"class":755},[143,40057,40058],{"class":149},"VGG16().to(device)\n",[143,40060,40061,40063,40065,40067,40069,40071,40073,40075],{"class":145,"line":33566},[143,40062,32197],{"class":280},[143,40064,32200],{"class":149},[143,40066,771],{"class":280},[143,40068,1419],{"class":149},[143,40070,32399],{"class":280},[143,40072,1419],{"class":149},[143,40074,32399],{"class":280},[143,40076,32213],{"class":149},[19,40078,40079],{"start":35},[22,40080,40081],{},"训练代码",[63,40083,40084],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[63,40086,40087],{},"解决方式:",[63,40089,40090],{},"①权重初始化",[133,40092,40094],{"className":31276,"code":40093,"language":31278,"meta":138,"style":138},"# 权重初始化,保证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",[140,40095,40096,40101,40106,40118,40123,40131,40136,40149,40154,40168,40173,40182,40187,40196,40201,40206,40219,40224,40238],{"__ignoreMap":138},[143,40097,40098],{"class":145,"line":146},[143,40099,40100],{"class":266},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[143,40102,40103],{"class":145,"line":35},[143,40104,40105],{"class":266},"# 循环遍历模型\n",[143,40107,40108,40110,40112,40114,40116],{"class":145,"line":46},[143,40109,3925],{"class":755},[143,40111,39766],{"class":149},[143,40113,26941],{"class":755},[143,40115,39771],{"class":280},[143,40117,39774],{"class":149},[143,40119,40120],{"class":145,"line":293},[143,40121,40122],{"class":266},"    # print(m)\n",[143,40124,40125,40127,40129],{"class":145,"line":306},[143,40126,4001],{"class":755},[143,40128,39786],{"class":280},[143,40130,39789],{"class":149},[143,40132,40133],{"class":145,"line":319},[143,40134,40135],{"class":266},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[143,40137,40138,40141,40143,40145,40147],{"class":145,"line":332},[143,40139,40140],{"class":149},"        nn.init.kaiming_normal_(m.weight,",[143,40142,39802],{"class":6116},[143,40144,160],{"class":755},[143,40146,39807],{"class":163},[143,40148,1055],{"class":149},[143,40150,40151],{"class":145,"line":345},[143,40152,40153],{"class":266},"        # 判断b参数是否存在\n",[143,40155,40156,40158,40160,40162,40164,40166],{"class":145,"line":701},[143,40157,3397],{"class":755},[143,40159,39822],{"class":149},[143,40161,39825],{"class":755},[143,40163,39828],{"class":755},[143,40165,39831],{"class":280},[143,40167,4639],{"class":149},[143,40169,40170],{"class":145,"line":707},[143,40171,40172],{"class":266},"            # 如果参数不存在的化初始化b=0\n",[143,40174,40175,40178,40180],{"class":145,"line":727},[143,40176,40177],{"class":149},"            nn.init.constant_(m.bias,",[143,40179,1234],{"class":280},[143,40181,1055],{"class":149},[143,40183,40184],{"class":145,"line":2518},[143,40185,40186],{"class":266},"    # 全连接层初始化\n",[143,40188,40189,40192,40194],{"class":145,"line":2524},[143,40190,40191],{"class":755},"    elif",[143,40193,39786],{"class":280},[143,40195,39862],{"class":149},[143,40197,40198],{"class":145,"line":2529},[143,40199,40200],{"class":266},"        # 这个初始化方法是利用的是正太分布的方式\n",[143,40202,40203],{"class":145,"line":2543},[143,40204,40205],{"class":266},"        # 均值为0，方差为0.01\n",[143,40207,40208,40211,40213,40215,40217],{"class":145,"line":2548},[143,40209,40210],{"class":149},"        nn.init.normal_(m.weight,",[143,40212,1234],{"class":280},[143,40214,1419],{"class":149},[143,40216,39884],{"class":280},[143,40218,1055],{"class":149},[143,40220,40221],{"class":145,"line":2554},[143,40222,40223],{"class":266},"        # 初始化b参数\n",[143,40225,40226,40228,40230,40232,40234,40236],{"class":145,"line":2575},[143,40227,3397],{"class":755},[143,40229,39822],{"class":149},[143,40231,39825],{"class":755},[143,40233,39828],{"class":755},[143,40235,39831],{"class":280},[143,40237,4639],{"class":149},[143,40239,40240,40242,40244],{"class":145,"line":2580},[143,40241,40177],{"class":149},[143,40243,1234],{"class":280},[143,40245,1055],{"class":149},[63,40247,40248],{},"②尽可能地增加批次",[63,40250,40251],{},"训练完整代码：",[133,40253,40254],{"className":31276,"code":38797,"language":31278,"meta":138,"style":138},[140,40255,40256,40262,40272,40282,40292,40296,40312,40320,40338,40342,40346,40356,40392,40396,40432,40436,40464,40468,40472,40482,40518,40522,40558,40562,40590,40594,40598,40608,40644,40648,40684,40688,40724,40728,40756,40760,40764,40774,40810,40814,40850,40854,40890,40894,40922,40926,40930,40940,40976,40980,41016,41020,41056,41060,41088,41092,41096,41106,41110,41114,41118,41138,41142,41154,41158,41170,41174,41178,41182,41186,41198,41202,41210,41214,41226,41230,41244,41248,41256,41260,41268,41272,41276,41288,41292,41306,41314,41318,41322,41330,41340,41350,41360,41370,41380,41390,41396,41400,41404,41416,41436,41442,41450],{"__ignoreMap":138},[143,40257,40258,40260],{"class":145,"line":146},[143,40259,31290],{"class":755},[143,40261,31293],{"class":149},[143,40263,40264,40266,40268,40270],{"class":145,"line":35},[143,40265,31635],{"class":755},[143,40267,38812],{"class":149},[143,40269,31290],{"class":755},[143,40271,38817],{"class":149},[143,40273,40274,40276,40278,40280],{"class":145,"line":46},[143,40275,31635],{"class":755},[143,40277,31638],{"class":149},[143,40279,31290],{"class":755},[143,40281,31643],{"class":149},[143,40283,40284,40286,40288,40290],{"class":145,"line":293},[143,40285,31635],{"class":755},[143,40287,31655],{"class":149},[143,40289,31290],{"class":755},[143,40291,31660],{"class":149},[143,40293,40294],{"class":145,"line":306},[143,40295,3300],{"emptyLinePlaceholder":976},[143,40297,40298,40300,40302,40304,40306,40308,40310],{"class":145,"line":319},[143,40299,15593],{"class":755},[143,40301,38848],{"class":156},[143,40303,1049],{"class":149},[143,40305,31676],{"class":156},[143,40307,1599],{"class":149},[143,40309,31681],{"class":156},[143,40311,31684],{"class":149},[143,40313,40314,40316,40318],{"class":145,"line":332},[143,40315,31699],{"class":755},[143,40317,31702],{"class":280},[143,40319,31705],{"class":149},[143,40321,40322,40324,40326,40328,40330,40332,40334,40336],{"class":145,"line":345},[143,40323,31715],{"class":280},[143,40325,1049],{"class":149},[143,40327,38875],{"class":280},[143,40329,13335],{"class":149},[143,40331,31721],{"class":280},[143,40333,31724],{"class":149},[143,40335,31727],{"class":280},[143,40337,2876],{"class":149},[143,40339,40340],{"class":145,"line":701},[143,40341,38890],{"class":266},[143,40343,40344],{"class":145,"line":707},[143,40345,38895],{"class":266},[143,40347,40348,40350,40352,40354],{"class":145,"line":727},[143,40349,31743],{"class":280},[143,40351,38902],{"class":149},[143,40353,160],{"class":755},[143,40355,38907],{"class":149},[143,40357,40358,40360,40362,40364,40366,40368,40370,40372,40374,40376,40378,40380,40382,40384,40386,40388,40390],{"class":145,"line":2518},[143,40359,38912],{"class":149},[143,40361,31754],{"class":6116},[143,40363,160],{"class":755},[143,40365,771],{"class":280},[143,40367,1419],{"class":149},[143,40369,31763],{"class":6116},[143,40371,160],{"class":755},[143,40373,1246],{"class":280},[143,40375,1419],{"class":149},[143,40377,31772],{"class":6116},[143,40379,160],{"class":755},[143,40381,1116],{"class":280},[143,40383,1419],{"class":149},[143,40385,31781],{"class":6116},[143,40387,160],{"class":755},[143,40389,771],{"class":280},[143,40391,38945],{"class":149},[143,40393,40394],{"class":145,"line":2524},[143,40395,38950],{"class":149},[143,40397,40398,40400,40402,40404,40406,40408,40410,40412,40414,40416,40418,40420,40422,40424,40426,40428,40430],{"class":145,"line":2529},[143,40399,38912],{"class":149},[143,40401,31754],{"class":6116},[143,40403,160],{"class":755},[143,40405,1246],{"class":280},[143,40407,1419],{"class":149},[143,40409,31763],{"class":6116},[143,40411,160],{"class":755},[143,40413,1246],{"class":280},[143,40415,1419],{"class":149},[143,40417,31772],{"class":6116},[143,40419,160],{"class":755},[143,40421,1116],{"class":280},[143,40423,1419],{"class":149},[143,40425,31781],{"class":6116},[143,40427,160],{"class":755},[143,40429,771],{"class":280},[143,40431,38945],{"class":149},[143,40433,40434],{"class":145,"line":2543},[143,40435,38950],{"class":149},[143,40437,40438,40440,40442,40444,40446,40448,40450,40452,40454,40456,40458,40460,40462],{"class":145,"line":2548},[143,40439,38995],{"class":149},[143,40441,31772],{"class":6116},[143,40443,160],{"class":755},[143,40445,1122],{"class":280},[143,40447,1419],{"class":149},[143,40449,31827],{"class":6116},[143,40451,160],{"class":755},[143,40453,1122],{"class":280},[143,40455,1419],{"class":149},[143,40457,31781],{"class":6116},[143,40459,160],{"class":755},[143,40461,1234],{"class":280},[143,40463,1055],{"class":149},[143,40465,40466],{"class":145,"line":2554},[143,40467,39024],{"class":149},[143,40469,40470],{"class":145,"line":2575},[143,40471,39029],{"class":266},[143,40473,40474,40476,40478,40480],{"class":145,"line":2580},[143,40475,31743],{"class":280},[143,40477,39036],{"class":149},[143,40479,160],{"class":755},[143,40481,38907],{"class":149},[143,40483,40484,40486,40488,40490,40492,40494,40496,40498,40500,40502,40504,40506,40508,40510,40512,40514,40516],{"class":145,"line":2594},[143,40485,38912],{"class":149},[143,40487,31754],{"class":6116},[143,40489,160],{"class":755},[143,40491,1246],{"class":280},[143,40493,1419],{"class":149},[143,40495,31763],{"class":6116},[143,40497,160],{"class":755},[143,40499,32968],{"class":280},[143,40501,1419],{"class":149},[143,40503,31772],{"class":6116},[143,40505,160],{"class":755},[143,40507,1116],{"class":280},[143,40509,1419],{"class":149},[143,40511,31781],{"class":6116},[143,40513,160],{"class":755},[143,40515,771],{"class":280},[143,40517,38945],{"class":149},[143,40519,40520],{"class":145,"line":2599},[143,40521,38950],{"class":149},[143,40523,40524,40526,40528,40530,40532,40534,40536,40538,40540,40542,40544,40546,40548,40550,40552,40554,40556],{"class":145,"line":2628},[143,40525,38912],{"class":149},[143,40527,31754],{"class":6116},[143,40529,160],{"class":755},[143,40531,32968],{"class":280},[143,40533,1419],{"class":149},[143,40535,31763],{"class":6116},[143,40537,160],{"class":755},[143,40539,32968],{"class":280},[143,40541,1419],{"class":149},[143,40543,31772],{"class":6116},[143,40545,160],{"class":755},[143,40547,1116],{"class":280},[143,40549,1419],{"class":149},[143,40551,31781],{"class":6116},[143,40553,160],{"class":755},[143,40555,771],{"class":280},[143,40557,38945],{"class":149},[143,40559,40560],{"class":145,"line":2633},[143,40561,38950],{"class":149},[143,40563,40564,40566,40568,40570,40572,40574,40576,40578,40580,40582,40584,40586,40588],{"class":145,"line":2650},[143,40565,38995],{"class":149},[143,40567,31772],{"class":6116},[143,40569,160],{"class":755},[143,40571,1122],{"class":280},[143,40573,1419],{"class":149},[143,40575,31827],{"class":6116},[143,40577,160],{"class":755},[143,40579,1122],{"class":280},[143,40581,1419],{"class":149},[143,40583,31781],{"class":6116},[143,40585,160],{"class":755},[143,40587,1234],{"class":280},[143,40589,1055],{"class":149},[143,40591,40592],{"class":145,"line":2655},[143,40593,39024],{"class":149},[143,40595,40596],{"class":145,"line":2660},[143,40597,39157],{"class":266},[143,40599,40600,40602,40604,40606],{"class":145,"line":2665},[143,40601,31743],{"class":280},[143,40603,39164],{"class":149},[143,40605,160],{"class":755},[143,40607,38907],{"class":149},[143,40609,40610,40612,40614,40616,40618,40620,40622,40624,40626,40628,40630,40632,40634,40636,40638,40640,40642],{"class":145,"line":2679},[143,40611,38912],{"class":149},[143,40613,31754],{"class":6116},[143,40615,160],{"class":755},[143,40617,32968],{"class":280},[143,40619,1419],{"class":149},[143,40621,31763],{"class":6116},[143,40623,160],{"class":755},[143,40625,35768],{"class":280},[143,40627,1419],{"class":149},[143,40629,31772],{"class":6116},[143,40631,160],{"class":755},[143,40633,1116],{"class":280},[143,40635,1419],{"class":149},[143,40637,31781],{"class":6116},[143,40639,160],{"class":755},[143,40641,771],{"class":280},[143,40643,38945],{"class":149},[143,40645,40646],{"class":145,"line":2684},[143,40647,38950],{"class":149},[143,40649,40650,40652,40654,40656,40658,40660,40662,40664,40666,40668,40670,40672,40674,40676,40678,40680,40682],{"class":145,"line":3477},[143,40651,38912],{"class":149},[143,40653,31754],{"class":6116},[143,40655,160],{"class":755},[143,40657,35768],{"class":280},[143,40659,1419],{"class":149},[143,40661,31763],{"class":6116},[143,40663,160],{"class":755},[143,40665,35768],{"class":280},[143,40667,1419],{"class":149},[143,40669,31772],{"class":6116},[143,40671,160],{"class":755},[143,40673,1116],{"class":280},[143,40675,1419],{"class":149},[143,40677,31781],{"class":6116},[143,40679,160],{"class":755},[143,40681,771],{"class":280},[143,40683,38945],{"class":149},[143,40685,40686],{"class":145,"line":3491},[143,40687,38950],{"class":149},[143,40689,40690,40692,40694,40696,40698,40700,40702,40704,40706,40708,40710,40712,40714,40716,40718,40720,40722],{"class":145,"line":3499},[143,40691,38912],{"class":149},[143,40693,31754],{"class":6116},[143,40695,160],{"class":755},[143,40697,35768],{"class":280},[143,40699,1419],{"class":149},[143,40701,31763],{"class":6116},[143,40703,160],{"class":755},[143,40705,35768],{"class":280},[143,40707,1419],{"class":149},[143,40709,31772],{"class":6116},[143,40711,160],{"class":755},[143,40713,1116],{"class":280},[143,40715,1419],{"class":149},[143,40717,31781],{"class":6116},[143,40719,160],{"class":755},[143,40721,771],{"class":280},[143,40723,38945],{"class":149},[143,40725,40726],{"class":145,"line":3504},[143,40727,38950],{"class":149},[143,40729,40730,40732,40734,40736,40738,40740,40742,40744,40746,40748,40750,40752,40754],{"class":145,"line":3510},[143,40731,38995],{"class":149},[143,40733,31772],{"class":6116},[143,40735,160],{"class":755},[143,40737,1122],{"class":280},[143,40739,1419],{"class":149},[143,40741,31827],{"class":6116},[143,40743,160],{"class":755},[143,40745,1122],{"class":280},[143,40747,1419],{"class":149},[143,40749,31781],{"class":6116},[143,40751,160],{"class":755},[143,40753,1234],{"class":280},[143,40755,1055],{"class":149},[143,40757,40758],{"class":145,"line":3516},[143,40759,39024],{"class":149},[143,40761,40762],{"class":145,"line":3521},[143,40763,39325],{"class":266},[143,40765,40766,40768,40770,40772],{"class":145,"line":8848},[143,40767,31743],{"class":280},[143,40769,39332],{"class":149},[143,40771,160],{"class":755},[143,40773,38907],{"class":149},[143,40775,40776,40778,40780,40782,40784,40786,40788,40790,40792,40794,40796,40798,40800,40802,40804,40806,40808],{"class":145,"line":8872},[143,40777,38912],{"class":149},[143,40779,31754],{"class":6116},[143,40781,160],{"class":755},[143,40783,35768],{"class":280},[143,40785,1419],{"class":149},[143,40787,31763],{"class":6116},[143,40789,160],{"class":755},[143,40791,39355],{"class":280},[143,40793,1419],{"class":149},[143,40795,31772],{"class":6116},[143,40797,160],{"class":755},[143,40799,1116],{"class":280},[143,40801,1419],{"class":149},[143,40803,31781],{"class":6116},[143,40805,160],{"class":755},[143,40807,771],{"class":280},[143,40809,38945],{"class":149},[143,40811,40812],{"class":145,"line":8877},[143,40813,38950],{"class":149},[143,40815,40816,40818,40820,40822,40824,40826,40828,40830,40832,40834,40836,40838,40840,40842,40844,40846,40848],{"class":145,"line":8883},[143,40817,38912],{"class":149},[143,40819,31754],{"class":6116},[143,40821,160],{"class":755},[143,40823,39355],{"class":280},[143,40825,1419],{"class":149},[143,40827,31763],{"class":6116},[143,40829,160],{"class":755},[143,40831,39355],{"class":280},[143,40833,1419],{"class":149},[143,40835,31772],{"class":6116},[143,40837,160],{"class":755},[143,40839,1116],{"class":280},[143,40841,1419],{"class":149},[143,40843,31781],{"class":6116},[143,40845,160],{"class":755},[143,40847,771],{"class":280},[143,40849,38945],{"class":149},[143,40851,40852],{"class":145,"line":8910},[143,40853,38950],{"class":149},[143,40855,40856,40858,40860,40862,40864,40866,40868,40870,40872,40874,40876,40878,40880,40882,40884,40886,40888],{"class":145,"line":8915},[143,40857,38912],{"class":149},[143,40859,31754],{"class":6116},[143,40861,160],{"class":755},[143,40863,39355],{"class":280},[143,40865,1419],{"class":149},[143,40867,31763],{"class":6116},[143,40869,160],{"class":755},[143,40871,39355],{"class":280},[143,40873,1419],{"class":149},[143,40875,31772],{"class":6116},[143,40877,160],{"class":755},[143,40879,1116],{"class":280},[143,40881,1419],{"class":149},[143,40883,31781],{"class":6116},[143,40885,160],{"class":755},[143,40887,771],{"class":280},[143,40889,38945],{"class":149},[143,40891,40892],{"class":145,"line":8921},[143,40893,38950],{"class":149},[143,40895,40896,40898,40900,40902,40904,40906,40908,40910,40912,40914,40916,40918,40920],{"class":145,"line":8933},[143,40897,38995],{"class":149},[143,40899,31772],{"class":6116},[143,40901,160],{"class":755},[143,40903,1122],{"class":280},[143,40905,1419],{"class":149},[143,40907,31827],{"class":6116},[143,40909,160],{"class":755},[143,40911,1122],{"class":280},[143,40913,1419],{"class":149},[143,40915,31781],{"class":6116},[143,40917,160],{"class":755},[143,40919,1234],{"class":280},[143,40921,1055],{"class":149},[143,40923,40924],{"class":145,"line":8945},[143,40925,39024],{"class":149},[143,40927,40928],{"class":145,"line":8957},[143,40929,39494],{"class":266},[143,40931,40932,40934,40936,40938],{"class":145,"line":10616},[143,40933,31743],{"class":280},[143,40935,39501],{"class":149},[143,40937,160],{"class":755},[143,40939,38907],{"class":149},[143,40941,40942,40944,40946,40948,40950,40952,40954,40956,40958,40960,40962,40964,40966,40968,40970,40972,40974],{"class":145,"line":10641},[143,40943,38912],{"class":149},[143,40945,31754],{"class":6116},[143,40947,160],{"class":755},[143,40949,39355],{"class":280},[143,40951,1419],{"class":149},[143,40953,31763],{"class":6116},[143,40955,160],{"class":755},[143,40957,39355],{"class":280},[143,40959,1419],{"class":149},[143,40961,31772],{"class":6116},[143,40963,160],{"class":755},[143,40965,1116],{"class":280},[143,40967,1419],{"class":149},[143,40969,31781],{"class":6116},[143,40971,160],{"class":755},[143,40973,771],{"class":280},[143,40975,38945],{"class":149},[143,40977,40978],{"class":145,"line":10664},[143,40979,38950],{"class":149},[143,40981,40982,40984,40986,40988,40990,40992,40994,40996,40998,41000,41002,41004,41006,41008,41010,41012,41014],{"class":145,"line":10688},[143,40983,38912],{"class":149},[143,40985,31754],{"class":6116},[143,40987,160],{"class":755},[143,40989,39355],{"class":280},[143,40991,1419],{"class":149},[143,40993,31763],{"class":6116},[143,40995,160],{"class":755},[143,40997,39355],{"class":280},[143,40999,1419],{"class":149},[143,41001,31772],{"class":6116},[143,41003,160],{"class":755},[143,41005,1116],{"class":280},[143,41007,1419],{"class":149},[143,41009,31781],{"class":6116},[143,41011,160],{"class":755},[143,41013,771],{"class":280},[143,41015,38945],{"class":149},[143,41017,41018],{"class":145,"line":10693},[143,41019,38950],{"class":149},[143,41021,41022,41024,41026,41028,41030,41032,41034,41036,41038,41040,41042,41044,41046,41048,41050,41052,41054],{"class":145,"line":10698},[143,41023,38912],{"class":149},[143,41025,31754],{"class":6116},[143,41027,160],{"class":755},[143,41029,39355],{"class":280},[143,41031,1419],{"class":149},[143,41033,31763],{"class":6116},[143,41035,160],{"class":755},[143,41037,39355],{"class":280},[143,41039,1419],{"class":149},[143,41041,31772],{"class":6116},[143,41043,160],{"class":755},[143,41045,1116],{"class":280},[143,41047,1419],{"class":149},[143,41049,31781],{"class":6116},[143,41051,160],{"class":755},[143,41053,771],{"class":280},[143,41055,38945],{"class":149},[143,41057,41058],{"class":145,"line":10703},[143,41059,38950],{"class":149},[143,41061,41062,41064,41066,41068,41070,41072,41074,41076,41078,41080,41082,41084,41086],{"class":145,"line":10712},[143,41063,38995],{"class":149},[143,41065,31772],{"class":6116},[143,41067,160],{"class":755},[143,41069,1122],{"class":280},[143,41071,1419],{"class":149},[143,41073,31827],{"class":6116},[143,41075,160],{"class":755},[143,41077,1122],{"class":280},[143,41079,1419],{"class":149},[143,41081,31781],{"class":6116},[143,41083,160],{"class":755},[143,41085,1234],{"class":280},[143,41087,1055],{"class":149},[143,41089,41090],{"class":145,"line":10717},[143,41091,39024],{"class":149},[143,41093,41094],{"class":145,"line":10723},[143,41095,39662],{"class":266},[143,41097,41098,41100,41102,41104],{"class":145,"line":10744},[143,41099,31743],{"class":280},[143,41101,39669],{"class":149},[143,41103,160],{"class":755},[143,41105,38907],{"class":149},[143,41107,41108],{"class":145,"line":10750},[143,41109,39678],{"class":266},[143,41111,41112],{"class":145,"line":10764},[143,41113,39683],{"class":266},[143,41115,41116],{"class":145,"line":10770},[143,41117,39688],{"class":149},[143,41119,41120,41122,41124,41126,41128,41130,41132,41134,41136],{"class":145,"line":10797},[143,41121,39693],{"class":149},[143,41123,1410],{"class":280},[143,41125,1496],{"class":755},[143,41127,1410],{"class":280},[143,41129,1496],{"class":755},[143,41131,39355],{"class":280},[143,41133,1419],{"class":149},[143,41135,35768],{"class":280},[143,41137,38945],{"class":149},[143,41139,41140],{"class":145,"line":10806},[143,41141,38950],{"class":149},[143,41143,41144,41146,41148,41150,41152],{"class":145,"line":10812},[143,41145,39693],{"class":149},[143,41147,35768],{"class":280},[143,41149,1419],{"class":149},[143,41151,32968],{"class":280},[143,41153,38945],{"class":149},[143,41155,41156],{"class":145,"line":10820},[143,41157,38950],{"class":149},[143,41159,41160,41162,41164,41166,41168],{"class":145,"line":10825},[143,41161,39693],{"class":149},[143,41163,32968],{"class":280},[143,41165,1419],{"class":149},[143,41167,1487],{"class":280},[143,41169,1055],{"class":149},[143,41171,41172],{"class":145,"line":17502},[143,41173,39024],{"class":149},[143,41175,41176],{"class":145,"line":17508},[143,41177,3300],{"emptyLinePlaceholder":976},[143,41179,41180],{"class":145,"line":17531},[143,41181,39754],{"class":266},[143,41183,41184],{"class":145,"line":17537},[143,41185,39759],{"class":266},[143,41187,41188,41190,41192,41194,41196],{"class":145,"line":17560},[143,41189,4303],{"class":755},[143,41191,39766],{"class":149},[143,41193,26941],{"class":755},[143,41195,39771],{"class":280},[143,41197,39774],{"class":149},[143,41199,41200],{"class":145,"line":17574},[143,41201,39779],{"class":266},[143,41203,41204,41206,41208],{"class":145,"line":17594},[143,41205,5542],{"class":755},[143,41207,39786],{"class":280},[143,41209,39789],{"class":149},[143,41211,41212],{"class":145,"line":17600},[143,41213,39794],{"class":266},[143,41215,41216,41218,41220,41222,41224],{"class":145,"line":17611},[143,41217,39799],{"class":149},[143,41219,39802],{"class":6116},[143,41221,160],{"class":755},[143,41223,39807],{"class":163},[143,41225,1055],{"class":149},[143,41227,41228],{"class":145,"line":17634},[143,41229,39814],{"class":266},[143,41231,41232,41234,41236,41238,41240,41242],{"class":145,"line":17656},[143,41233,39819],{"class":755},[143,41235,39822],{"class":149},[143,41237,39825],{"class":755},[143,41239,39828],{"class":755},[143,41241,39831],{"class":280},[143,41243,4639],{"class":149},[143,41245,41246],{"class":145,"line":17661},[143,41247,39838],{"class":266},[143,41249,41250,41252,41254],{"class":145,"line":17667},[143,41251,39843],{"class":149},[143,41253,1234],{"class":280},[143,41255,1055],{"class":149},[143,41257,41258],{"class":145,"line":17681},[143,41259,39852],{"class":266},[143,41261,41262,41264,41266],{"class":145,"line":17694},[143,41263,39857],{"class":755},[143,41265,39786],{"class":280},[143,41267,39862],{"class":149},[143,41269,41270],{"class":145,"line":17699},[143,41271,39867],{"class":266},[143,41273,41274],{"class":145,"line":17713},[143,41275,39872],{"class":266},[143,41277,41278,41280,41282,41284,41286],{"class":145,"line":17718},[143,41279,39877],{"class":149},[143,41281,1234],{"class":280},[143,41283,1419],{"class":149},[143,41285,39884],{"class":280},[143,41287,1055],{"class":149},[143,41289,41290],{"class":145,"line":17724},[143,41291,39891],{"class":266},[143,41293,41294,41296,41298,41300,41302,41304],{"class":145,"line":17729},[143,41295,39819],{"class":755},[143,41297,39822],{"class":149},[143,41299,39825],{"class":755},[143,41301,39828],{"class":755},[143,41303,39831],{"class":280},[143,41305,4639],{"class":149},[143,41307,41308,41310,41312],{"class":145,"line":17743},[143,41309,39843],{"class":149},[143,41311,1234],{"class":280},[143,41313,1055],{"class":149},[143,41315,41316],{"class":145,"line":17748},[143,41317,3300],{"emptyLinePlaceholder":976},[143,41319,41320],{"class":145,"line":17753},[143,41321,36063],{"class":266},[143,41323,41324,41326,41328],{"class":145,"line":17767},[143,41325,31699],{"class":755},[143,41327,31991],{"class":156},[143,41329,31994],{"class":149},[143,41331,41332,41334,41336,41338],{"class":145,"line":17779},[143,41333,31999],{"class":149},[143,41335,160],{"class":755},[143,41337,31721],{"class":280},[143,41339,39940],{"class":149},[143,41341,41342,41344,41346,41348],{"class":145,"line":17784},[143,41343,31999],{"class":149},[143,41345,160],{"class":755},[143,41347,31721],{"class":280},[143,41349,39951],{"class":149},[143,41351,41352,41354,41356,41358],{"class":145,"line":17797},[143,41353,31999],{"class":149},[143,41355,160],{"class":755},[143,41357,31721],{"class":280},[143,41359,39962],{"class":149},[143,41361,41362,41364,41366,41368],{"class":145,"line":17802},[143,41363,31999],{"class":149},[143,41365,160],{"class":755},[143,41367,31721],{"class":280},[143,41369,39973],{"class":149},[143,41371,41372,41374,41376,41378],{"class":145,"line":17807},[143,41373,31999],{"class":149},[143,41375,160],{"class":755},[143,41377,31721],{"class":280},[143,41379,39984],{"class":149},[143,41381,41382,41384,41386,41388],{"class":145,"line":17812},[143,41383,31999],{"class":149},[143,41385,160],{"class":755},[143,41387,31721],{"class":280},[143,41389,39995],{"class":149},[143,41391,41392,41394],{"class":145,"line":17825},[143,41393,15651],{"class":755},[143,41395,32107],{"class":149},[143,41397,41398],{"class":145,"line":17830},[143,41399,3300],{"emptyLinePlaceholder":976},[143,41401,41402],{"class":145,"line":33531},[143,41403,40010],{"class":266},[143,41405,41406,41408,41410,41412,41414],{"class":145,"line":33537},[143,41407,2434],{"class":755},[143,41409,32118],{"class":280},[143,41411,3849],{"class":755},[143,41413,40021],{"class":163},[143,41415,4639],{"class":149},[143,41417,41418,41420,41422,41424,41426,41428,41430,41432,41434],{"class":145,"line":33543},[143,41419,32135],{"class":149},[143,41421,160],{"class":755},[143,41423,31349],{"class":149},[143,41425,32142],{"class":163},[143,41427,2605],{"class":755},[143,41429,32147],{"class":149},[143,41431,2602],{"class":755},[143,41433,31374],{"class":163},[143,41435,1055],{"class":149},[143,41437,41438,41440],{"class":145,"line":33549},[143,41439,32197],{"class":280},[143,41441,31383],{"class":149},[143,41443,41444,41446,41448],{"class":145,"line":33555},[143,41445,32187],{"class":149},[143,41447,160],{"class":755},[143,41449,40058],{"class":149},[143,41451,41452,41454,41456,41458,41460,41462,41464,41466],{"class":145,"line":33566},[143,41453,32197],{"class":280},[143,41455,32200],{"class":149},[143,41457,771],{"class":280},[143,41459,1419],{"class":149},[143,41461,32399],{"class":280},[143,41463,1419],{"class":149},[143,41465,32399],{"class":280},[143,41467,32213],{"class":149},[19,41469,41470],{"start":46},[22,41471,41472],{},"测试代码",[133,41474,41476],{"className":31276,"code":41475,"language":31278,"meta":138,"style":138},"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",[140,41477,41478,41484,41494,41504,41508,41518,41529,41533,41537,41541,41549,41565,41575,41591,41601,41615,41619,41629,41639,41649,41655,41659,41663,41671,41675,41691,41699,41703,41707,41715,41723,41727,41731,41735,41739,41745,41749,41759,41767,41775,41779,41783,41787,41795,41799,41815,41819,41823,41827,41839,41843,41855,41859,41863,41875,41879,41889,41893,41897,41909,41913,41922,41926,41930,41938,41942,41950,41954,41958,41962,41966,41970,41986,41994,41998,42002,42050,42056,42060,42070,42078,42086,42090,42094,42098,42102,42110,42114,42130,42134,42142,42150],{"__ignoreMap":138},[143,41479,41480,41482],{"class":145,"line":146},[143,41481,31290],{"class":755},[143,41483,31293],{"class":149},[143,41485,41486,41488,41490,41492],{"class":145,"line":35},[143,41487,31290],{"class":755},[143,41489,32313],{"class":149},[143,41491,32281],{"class":755},[143,41493,32318],{"class":149},[143,41495,41496,41498,41500,41502],{"class":145,"line":46},[143,41497,31635],{"class":755},[143,41499,32296],{"class":149},[143,41501,31290],{"class":755},[143,41503,32301],{"class":149},[143,41505,41506],{"class":145,"line":293},[143,41507,34820],{"class":266},[143,41509,41510,41512,41514,41516],{"class":145,"line":306},[143,41511,31635],{"class":755},[143,41513,32266],{"class":149},[143,41515,31290],{"class":755},[143,41517,32271],{"class":149},[143,41519,41520,41522,41524,41526],{"class":145,"line":319},[143,41521,31635],{"class":755},[143,41523,32812],{"class":149},[143,41525,31290],{"class":755},[143,41527,41528],{"class":280}," VGG16\n",[143,41530,41531],{"class":145,"line":332},[143,41532,3300],{"emptyLinePlaceholder":976},[143,41534,41535],{"class":145,"line":345},[143,41536,3300],{"emptyLinePlaceholder":976},[143,41538,41539],{"class":145,"line":701},[143,41540,34849],{"class":266},[143,41542,41543,41545,41547],{"class":145,"line":707},[143,41544,32845],{"class":755},[143,41546,34856],{"class":156},[143,41548,32851],{"class":149},[143,41550,41551,41553,41555,41557,41559,41561,41563],{"class":145,"line":727},[143,41552,34863],{"class":149},[143,41554,160],{"class":755},[143,41556,32353],{"class":149},[143,41558,32356],{"class":6116},[143,41560,160],{"class":755},[143,41562,32361],{"class":163},[143,41564,32364],{"class":149},[143,41566,41567,41569,41571,41573],{"class":145,"line":2518},[143,41568,34880],{"class":6116},[143,41570,160],{"class":755},[143,41572,34885],{"class":280},[143,41574,32364],{"class":149},[143,41576,41577,41579,41581,41583,41585,41587,41589],{"class":145,"line":2524},[143,41578,34892],{"class":6116},[143,41580,160],{"class":755},[143,41582,32391],{"class":149},[143,41584,32394],{"class":6116},[143,41586,160],{"class":755},[143,41588,32399],{"class":280},[143,41590,32402],{"class":149},[143,41592,41593,41595,41597,41599],{"class":145,"line":2529},[143,41594,34909],{"class":6116},[143,41596,160],{"class":755},[143,41598,32374],{"class":280},[143,41600,1055],{"class":149},[143,41602,41603,41605,41607,41609,41611,41613],{"class":145,"line":2543},[143,41604,34920],{"class":149},[143,41606,160],{"class":755},[143,41608,32432],{"class":149},[143,41610,32435],{"class":6116},[143,41612,160],{"class":755},[143,41614,34931],{"class":149},[143,41616,41617],{"class":145,"line":2548},[143,41618,34936],{"class":266},[143,41620,41621,41623,41625,41627],{"class":145,"line":2554},[143,41622,34941],{"class":6116},[143,41624,160],{"class":755},[143,41626,771],{"class":280},[143,41628,32364],{"class":149},[143,41630,41631,41633,41635,41637],{"class":145,"line":2575},[143,41632,34952],{"class":6116},[143,41634,160],{"class":755},[143,41636,32374],{"class":280},[143,41638,32364],{"class":149},[143,41640,41641,41643,41645,41647],{"class":145,"line":2580},[143,41642,34963],{"class":6116},[143,41644,160],{"class":755},[143,41646,1234],{"class":280},[143,41648,1055],{"class":149},[143,41650,41651,41653],{"class":145,"line":2594},[143,41652,4990],{"class":755},[143,41654,34976],{"class":149},[143,41656,41657],{"class":145,"line":2599},[143,41658,3300],{"emptyLinePlaceholder":976},[143,41660,41661],{"class":145,"line":2628},[143,41662,34985],{"class":266},[143,41664,41665,41667,41669],{"class":145,"line":2633},[143,41666,32845],{"class":755},[143,41668,34992],{"class":156},[143,41670,34995],{"class":149},[143,41672,41673],{"class":145,"line":2650},[143,41674,35000],{"class":266},[143,41676,41677,41679,41681,41683,41685,41687,41689],{"class":145,"line":2655},[143,41678,32135],{"class":149},[143,41680,160],{"class":755},[143,41682,32142],{"class":163},[143,41684,2605],{"class":755},[143,41686,32147],{"class":149},[143,41688,2602],{"class":755},[143,41690,35017],{"class":163},[143,41692,41693,41695,41697],{"class":145,"line":2660},[143,41694,32187],{"class":149},[143,41696,160],{"class":755},[143,41698,33187],{"class":149},[143,41700,41701],{"class":145,"line":2665},[143,41702,3300],{"emptyLinePlaceholder":976},[143,41704,41705],{"class":145,"line":2679},[143,41706,35034],{"class":266},[143,41708,41709,41711,41713],{"class":145,"line":2684},[143,41710,35039],{"class":149},[143,41712,160],{"class":755},[143,41714,33240],{"class":280},[143,41716,41717,41719,41721],{"class":145,"line":3477},[143,41718,35048],{"class":149},[143,41720,160],{"class":755},[143,41722,3985],{"class":280},[143,41724,41725],{"class":145,"line":3491},[143,41726,3300],{"emptyLinePlaceholder":976},[143,41728,41729],{"class":145,"line":3499},[143,41730,35061],{"class":266},[143,41732,41733],{"class":145,"line":3504},[143,41734,35066],{"class":266},[143,41736,41737],{"class":145,"line":3510},[143,41738,35071],{"class":266},[143,41740,41741,41743],{"class":145,"line":3516},[143,41742,35076],{"class":755},[143,41744,33782],{"class":149},[143,41746,41747],{"class":145,"line":3521},[143,41748,35083],{"class":266},[143,41750,41751,41753,41755,41757],{"class":145,"line":8848},[143,41752,4303],{"class":755},[143,41754,35090],{"class":149},[143,41756,26941],{"class":755},[143,41758,35095],{"class":149},[143,41760,41761,41763,41765],{"class":145,"line":8872},[143,41762,35100],{"class":149},[143,41764,160],{"class":755},[143,41766,35105],{"class":149},[143,41768,41769,41771,41773],{"class":145,"line":8877},[143,41770,35110],{"class":149},[143,41772,160],{"class":755},[143,41774,35115],{"class":149},[143,41776,41777],{"class":145,"line":8883},[143,41778,35120],{"class":266},[143,41780,41781],{"class":145,"line":8910},[143,41782,33773],{"class":149},[143,41784,41785],{"class":145,"line":8915},[143,41786,35129],{"class":266},[143,41788,41789,41791,41793],{"class":145,"line":8921},[143,41790,33558],{"class":149},[143,41792,160],{"class":755},[143,41794,35138],{"class":149},[143,41796,41797],{"class":145,"line":8933},[143,41798,35143],{"class":266},[143,41800,41801,41803,41805,41807,41809,41811,41813],{"class":145,"line":8945},[143,41802,33575],{"class":149},[143,41804,160],{"class":755},[143,41806,33580],{"class":149},[143,41808,33583],{"class":6116},[143,41810,160],{"class":755},[143,41812,771],{"class":280},[143,41814,1055],{"class":149},[143,41816,41817],{"class":145,"line":8957},[143,41818,35164],{"class":266},[143,41820,41821],{"class":145,"line":10616},[143,41822,35169],{"class":266},[143,41824,41825],{"class":145,"line":10641},[143,41826,35174],{"class":266},[143,41828,41829,41831,41833,41835,41837],{"class":145,"line":10664},[143,41830,35179],{"class":149},[143,41832,10377],{"class":755},[143,41834,33685],{"class":149},[143,41836,3849],{"class":755},[143,41838,35188],{"class":149},[143,41840,41841],{"class":145,"line":10688},[143,41842,35193],{"class":266},[143,41844,41845,41847,41849,41851,41853],{"class":145,"line":10693},[143,41846,35198],{"class":149},[143,41848,10377],{"class":755},[143,41850,35203],{"class":149},[143,41852,1234],{"class":280},[143,41854,1055],{"class":149},[143,41856,41857],{"class":145,"line":10698},[143,41858,3300],{"emptyLinePlaceholder":976},[143,41860,41861],{"class":145,"line":10703},[143,41862,35216],{"class":266},[143,41864,41865,41867,41869,41871,41873],{"class":145,"line":10712},[143,41866,35221],{"class":149},[143,41868,160],{"class":755},[143,41870,35226],{"class":149},[143,41872,1625],{"class":755},[143,41874,35231],{"class":149},[143,41876,41877],{"class":145,"line":10717},[143,41878,35236],{"class":266},[143,41880,41881,41883,41885,41887],{"class":145,"line":10723},[143,41882,33349],{"class":280},[143,41884,1049],{"class":149},[143,41886,35245],{"class":163},[143,41888,35248],{"class":149},[143,41890,41891],{"class":145,"line":10744},[143,41892,3300],{"emptyLinePlaceholder":976},[143,41894,41895],{"class":145,"line":10750},[143,41896,35257],{"class":266},[143,41898,41899,41901,41903,41905,41907],{"class":145,"line":10764},[143,41900,2434],{"class":755},[143,41902,32118],{"class":280},[143,41904,3849],{"class":755},[143,41906,32123],{"class":163},[143,41908,4639],{"class":149},[143,41910,41911],{"class":145,"line":10770},[143,41912,35274],{"class":266},[143,41914,41915,41917,41919],{"class":145,"line":10797},[143,41916,32187],{"class":149},[143,41918,160],{"class":755},[143,41920,41921],{"class":149},"VGG16()\n",[143,41923,41924],{"class":145,"line":10806},[143,41925,35287],{"class":266},[143,41927,41928],{"class":145,"line":10812},[143,41929,35292],{"class":266},[143,41931,41932,41934,41936],{"class":145,"line":10820},[143,41933,35297],{"class":149},[143,41935,35300],{"class":163},[143,41937,31395],{"class":149},[143,41939,41940],{"class":145,"line":10825},[143,41941,35307],{"class":266},[143,41943,41944,41946,41948],{"class":145,"line":17502},[143,41945,34920],{"class":149},[143,41947,160],{"class":755},[143,41949,35316],{"class":149},[143,41951,41952],{"class":145,"line":17508},[143,41953,35321],{"class":266},[143,41955,41956],{"class":145,"line":17531},[143,41957,35326],{"class":149},[143,41959,41960],{"class":145,"line":17537},[143,41961,3300],{"emptyLinePlaceholder":976},[143,41963,41964],{"class":145,"line":17560},[143,41965,35335],{"class":266},[143,41967,41968],{"class":145,"line":17574},[143,41969,35340],{"class":266},[143,41971,41972,41974,41976,41978,41980,41982,41984],{"class":145,"line":17594},[143,41973,32135],{"class":149},[143,41975,160],{"class":755},[143,41977,32142],{"class":163},[143,41979,2605],{"class":755},[143,41981,32147],{"class":149},[143,41983,2602],{"class":755},[143,41985,35017],{"class":163},[143,41987,41988,41990,41992],{"class":145,"line":17600},[143,41989,32187],{"class":149},[143,41991,160],{"class":755},[143,41993,33187],{"class":149},[143,41995,41996],{"class":145,"line":17611},[143,41997,35369],{"class":266},[143,41999,42000],{"class":145,"line":17634},[143,42001,35374],{"class":266},[143,42003,42004,42006,42008,42010,42012,42014,42016,42018,42020,42022,42024,42026,42028,42030,42032,42034,42036,42038,42040,42042,42044,42046,42048],{"class":145,"line":17656},[143,42005,35379],{"class":149},[143,42007,160],{"class":755},[143,42009,749],{"class":149},[143,42011,35386],{"class":163},[143,42013,1419],{"class":149},[143,42015,35391],{"class":163},[143,42017,1419],{"class":149},[143,42019,35396],{"class":163},[143,42021,1419],{"class":149},[143,42023,35401],{"class":163},[143,42025,1419],{"class":149},[143,42027,35406],{"class":163},[143,42029,1419],{"class":149},[143,42031,35411],{"class":163},[143,42033,1419],{"class":149},[143,42035,35416],{"class":163},[143,42037,1419],{"class":149},[143,42039,35421],{"class":163},[143,42041,1419],{"class":149},[143,42043,35426],{"class":163},[143,42045,1419],{"class":149},[143,42047,35431],{"class":163},[143,42049,34144],{"class":149},[143,42051,42052,42054],{"class":145,"line":17661},[143,42053,35076],{"class":755},[143,42055,33782],{"class":149},[143,42057,42058],{"class":145,"line":17667},[143,42059,35444],{"class":266},[143,42061,42062,42064,42066,42068],{"class":145,"line":17681},[143,42063,4303],{"class":755},[143,42065,35451],{"class":149},[143,42067,26941],{"class":755},[143,42069,35095],{"class":149},[143,42071,42072,42074,42076],{"class":145,"line":17694},[143,42073,33508],{"class":149},[143,42075,160],{"class":755},[143,42077,33513],{"class":149},[143,42079,42080,42082,42084],{"class":145,"line":17699},[143,42081,33523],{"class":149},[143,42083,160],{"class":755},[143,42085,33528],{"class":149},[143,42087,42088],{"class":145,"line":17713},[143,42089,3300],{"emptyLinePlaceholder":976},[143,42091,42092],{"class":145,"line":17718},[143,42093,35480],{"class":266},[143,42095,42096],{"class":145,"line":17724},[143,42097,33773],{"class":149},[143,42099,42100],{"class":145,"line":17729},[143,42101,35489],{"class":266},[143,42103,42104,42106,42108],{"class":145,"line":17743},[143,42105,33558],{"class":149},[143,42107,160],{"class":755},[143,42109,33563],{"class":149},[143,42111,42112],{"class":145,"line":17748},[143,42113,35502],{"class":266},[143,42115,42116,42118,42120,42122,42124,42126,42128],{"class":145,"line":17753},[143,42117,33575],{"class":149},[143,42119,160],{"class":755},[143,42121,33580],{"class":149},[143,42123,33583],{"class":6116},[143,42125,160],{"class":755},[143,42127,771],{"class":280},[143,42129,1055],{"class":149},[143,42131,42132],{"class":145,"line":17767},[143,42133,35523],{"class":266},[143,42135,42136,42138,42140],{"class":145,"line":17779},[143,42137,35528],{"class":149},[143,42139,160],{"class":755},[143,42141,35533],{"class":149},[143,42143,42144,42146,42148],{"class":145,"line":17784},[143,42145,35538],{"class":149},[143,42147,160],{"class":755},[143,42149,35543],{"class":149},[143,42151,42152,42154,42156,42158,42160,42162,42164,42166],{"class":145,"line":17797},[143,42153,35548],{"class":280},[143,42155,1049],{"class":149},[143,42157,35553],{"class":163},[143,42159,35556],{"class":149},[143,42161,35559],{"class":163},[143,42163,1419],{"class":149},[143,42165,35564],{"class":163},[143,42167,35567],{"class":149},[58,42169,42171],{"id":42170},"_23googlenet","2.3.GoogLeNet",[22896,42173,42175],{"id":42174},"_231原理","2.3.1.原理",[19,42177,42178],{},[22,42179,42180],{},"网络结构",[63,42182,42183],{},[29,42184],{"alt":138,"src":42185},"\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",[63,42187,42188],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[63,42190,42191],{},[29,42192],{"alt":138,"src":42193},"\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",[63,42195,42196],{},[29,42197],{"alt":138,"src":42198},"\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",[63,42200,42201],{},[29,42202],{"alt":138,"src":42203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[19,42205,42206],{"start":35},[22,42207,42208],{},"1x1卷积的优点",[63,42210,42211],{},[29,42212],{"alt":138,"src":42213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[19,42215,42216],{"start":46},[22,42217,42218],{},"全局平均池化层优点",[63,42220,42221],{},[29,42222],{"alt":138,"src":42223},"\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",[63,42225,42226],{},[29,42227],{"alt":138,"src":42228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[19,42230,42231],{"start":293},[22,42232,42233],{},"参数详细描述",[63,42235,42236],{},[29,42237],{"alt":138,"src":42238},"\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",[63,42240,42241],{},[29,42242],{"alt":138,"src":42243},"\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",[63,42245,42246],{},[29,42247],{"alt":138,"src":42248},"\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",[63,42250,42251],{},[29,42252],{"alt":138,"src":42253},"\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",[63,42255,42256],{},[29,42257],{"alt":138,"src":42258},"\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",[63,42260,42261],{},[29,42262],{"alt":138,"src":42263},"\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",[63,42265,42266],{},[29,42267],{"alt":138,"src":42268},"\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",[63,42270,42271],{},[29,42272],{"alt":138,"src":42273},"\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",[63,42275,42276],{},[29,42277],{"alt":138,"src":42278},"\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",[63,42280,42281],{},[29,42282],{"alt":138,"src":42283},"\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",[63,42285,42286],{},[29,42287],{"alt":138,"src":42288},"\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",[63,42290,42291],{},[29,42292],{"alt":138,"src":42293},"\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",[63,42295,42296],{},[29,42297],{"alt":138,"src":42298},"\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",[63,42300,42301],{},[29,42302],{"alt":138,"src":42303},"\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",[63,42305,42306],{},[29,42307],{"alt":138,"src":42308},"\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",[63,42310,42311],{},[29,42312],{"alt":138,"src":42313},"\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",[63,42315,42316],{},[29,42317],{"alt":138,"src":42318},"\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",[63,42320,42321],{},[29,42322],{"alt":138,"src":42323},"\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",[63,42325,42326],{},[29,42327],{"alt":138,"src":42328},"\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",[63,42330,42331],{},[29,42332],{"alt":138,"src":42333},"\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",[63,42335,42336],{},[29,42337],{"alt":138,"src":42338},"\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",[22896,42340,42342],{"id":42341},"_232代码实现","2.3.2.代码实现",[19,42344,42345],{},[22,42346,31609],{},[63,42348,42349],{},"根据原理一步一步搭建即可",[133,42351,42353],{"className":31276,"code":42352,"language":31278,"meta":138,"style":138},"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",[140,42354,42355,42361,42371,42381,42385,42402,42411,42426,42436,42441,42474,42479,42516,42563,42568,42604,42651,42656,42661,42696,42728,42732,42740,42756,42780,42805,42826,42831,42846,42850,42854,42859,42876,42881,42890,42905,42916,42960,42964,42992,42996,43007,43035,43039,43076,43080,43108,43112,43123,43159,43191,43219,43223,43234,43268,43300,43332,43365,43399,43427,43431,43442,43475,43507,43521,43525,43538,43542,43547,43559,43567,43589,43594,43599,43604,43609,43614,43619,43633,43641,43650,43663,43678,43687,43691,43699,43710,43721,43732,43743,43754,43760,43764,43769,43781,43801,43810],{"__ignoreMap":138},[143,42356,42357,42359],{"class":145,"line":146},[143,42358,31290],{"class":755},[143,42360,31293],{"class":149},[143,42362,42363,42365,42367,42369],{"class":145,"line":35},[143,42364,31635],{"class":755},[143,42366,31638],{"class":149},[143,42368,31290],{"class":755},[143,42370,31643],{"class":149},[143,42372,42373,42375,42377,42379],{"class":145,"line":46},[143,42374,31635],{"class":755},[143,42376,31655],{"class":149},[143,42378,31290],{"class":755},[143,42380,31660],{"class":149},[143,42382,42383],{"class":145,"line":293},[143,42384,3300],{"emptyLinePlaceholder":976},[143,42386,42387,42389,42392,42394,42396,42398,42400],{"class":145,"line":306},[143,42388,15593],{"class":755},[143,42390,42391],{"class":156}," Inception",[143,42393,1049],{"class":149},[143,42395,31676],{"class":156},[143,42397,1599],{"class":149},[143,42399,31681],{"class":156},[143,42401,31684],{"class":149},[143,42403,42404,42406,42408],{"class":145,"line":319},[143,42405,31699],{"class":755},[143,42407,31702],{"class":280},[143,42409,42410],{"class":149},"(self,in_channels,c1,c2,c3,c4):\n",[143,42412,42413,42415,42418,42420,42422,42424],{"class":145,"line":332},[143,42414,31715],{"class":280},[143,42416,42417],{"class":149},"(Inception,",[143,42419,31721],{"class":280},[143,42421,31724],{"class":149},[143,42423,31727],{"class":280},[143,42425,2876],{"class":149},[143,42427,42428,42430,42432,42434],{"class":145,"line":345},[143,42429,31743],{"class":280},[143,42431,35669],{"class":149},[143,42433,160],{"class":755},[143,42435,35674],{"class":149},[143,42437,42438],{"class":145,"line":701},[143,42439,42440],{"class":266},"        # 路线1：定义1*1卷积\n",[143,42442,42443,42445,42448,42450,42452,42454,42456,42459,42461,42463,42466,42468,42470,42472],{"class":145,"line":707},[143,42444,31743],{"class":280},[143,42446,42447],{"class":149},".p1_1",[143,42449,160],{"class":755},[143,42451,31751],{"class":149},[143,42453,31754],{"class":6116},[143,42455,160],{"class":755},[143,42457,42458],{"class":149},"in_channels,",[143,42460,31763],{"class":6116},[143,42462,160],{"class":755},[143,42464,42465],{"class":149},"c1,",[143,42467,31772],{"class":6116},[143,42469,160],{"class":755},[143,42471,771],{"class":280},[143,42473,1055],{"class":149},[143,42475,42476],{"class":145,"line":727},[143,42477,42478],{"class":266},"        # 路线2：定义1*1卷积和3*3\n",[143,42480,42481,42483,42486,42488,42490,42492,42494,42496,42498,42500,42503,42505,42508,42510,42512,42514],{"class":145,"line":2518},[143,42482,31743],{"class":280},[143,42484,42485],{"class":149},".p2_1",[143,42487,160],{"class":755},[143,42489,31751],{"class":149},[143,42491,31754],{"class":6116},[143,42493,160],{"class":755},[143,42495,42458],{"class":149},[143,42497,31763],{"class":6116},[143,42499,160],{"class":755},[143,42501,42502],{"class":149},"c2[",[143,42504,1234],{"class":280},[143,42506,42507],{"class":149},"],",[143,42509,31772],{"class":6116},[143,42511,160],{"class":755},[143,42513,771],{"class":280},[143,42515,1055],{"class":149},[143,42517,42518,42520,42523,42525,42527,42529,42531,42533,42535,42537,42539,42541,42543,42545,42547,42549,42551,42553,42555,42557,42559,42561],{"class":145,"line":2524},[143,42519,31743],{"class":280},[143,42521,42522],{"class":149},".p2_2",[143,42524,160],{"class":755},[143,42526,31751],{"class":149},[143,42528,31754],{"class":6116},[143,42530,160],{"class":755},[143,42532,42502],{"class":149},[143,42534,1234],{"class":280},[143,42536,42507],{"class":149},[143,42538,31763],{"class":6116},[143,42540,160],{"class":755},[143,42542,42502],{"class":149},[143,42544,771],{"class":280},[143,42546,42507],{"class":149},[143,42548,31772],{"class":6116},[143,42550,160],{"class":755},[143,42552,1116],{"class":280},[143,42554,1419],{"class":149},[143,42556,31781],{"class":6116},[143,42558,160],{"class":755},[143,42560,771],{"class":280},[143,42562,1055],{"class":149},[143,42564,42565],{"class":145,"line":2529},[143,42566,42567],{"class":266},"        # 路线3：定义1*1卷积和5*5\n",[143,42569,42570,42572,42575,42577,42579,42581,42583,42585,42587,42589,42592,42594,42596,42598,42600,42602],{"class":145,"line":2543},[143,42571,31743],{"class":280},[143,42573,42574],{"class":149},".p3_1",[143,42576,160],{"class":755},[143,42578,31751],{"class":149},[143,42580,31754],{"class":6116},[143,42582,160],{"class":755},[143,42584,42458],{"class":149},[143,42586,31763],{"class":6116},[143,42588,160],{"class":755},[143,42590,42591],{"class":149},"c3[",[143,42593,1234],{"class":280},[143,42595,42507],{"class":149},[143,42597,31772],{"class":6116},[143,42599,160],{"class":755},[143,42601,771],{"class":280},[143,42603,1055],{"class":149},[143,42605,42606,42608,42611,42613,42615,42617,42619,42621,42623,42625,42627,42629,42631,42633,42635,42637,42639,42641,42643,42645,42647,42649],{"class":145,"line":2548},[143,42607,31743],{"class":280},[143,42609,42610],{"class":149},".p3_2",[143,42612,160],{"class":755},[143,42614,31751],{"class":149},[143,42616,31754],{"class":6116},[143,42618,160],{"class":755},[143,42620,42591],{"class":149},[143,42622,1234],{"class":280},[143,42624,42507],{"class":149},[143,42626,31763],{"class":6116},[143,42628,160],{"class":755},[143,42630,42591],{"class":149},[143,42632,771],{"class":280},[143,42634,42507],{"class":149},[143,42636,31772],{"class":6116},[143,42638,160],{"class":755},[143,42640,1360],{"class":280},[143,42642,1419],{"class":149},[143,42644,31781],{"class":6116},[143,42646,160],{"class":755},[143,42648,1122],{"class":280},[143,42650,1055],{"class":149},[143,42652,42653],{"class":145,"line":2554},[143,42654,42655],{"class":266},"        # 路线4：定义3*3最大池化和1*1卷积\n",[143,42657,42658],{"class":145,"line":2575},[143,42659,42660],{"class":266},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[143,42662,42663,42665,42668,42670,42672,42674,42676,42678,42680,42682,42684,42686,42688,42690,42692,42694],{"class":145,"line":2580},[143,42664,31743],{"class":280},[143,42666,42667],{"class":149},".p4_1",[143,42669,160],{"class":755},[143,42671,35727],{"class":149},[143,42673,31772],{"class":6116},[143,42675,160],{"class":755},[143,42677,1116],{"class":280},[143,42679,1419],{"class":149},[143,42681,31827],{"class":6116},[143,42683,160],{"class":755},[143,42685,771],{"class":280},[143,42687,1419],{"class":149},[143,42689,31781],{"class":6116},[143,42691,160],{"class":755},[143,42693,771],{"class":280},[143,42695,1055],{"class":149},[143,42697,42698,42700,42703,42705,42707,42709,42711,42713,42715,42717,42720,42722,42724,42726],{"class":145,"line":2594},[143,42699,31743],{"class":280},[143,42701,42702],{"class":149},".p4_2",[143,42704,160],{"class":755},[143,42706,31751],{"class":149},[143,42708,31754],{"class":6116},[143,42710,160],{"class":755},[143,42712,42458],{"class":149},[143,42714,31763],{"class":6116},[143,42716,160],{"class":755},[143,42718,42719],{"class":149},"c4,",[143,42721,31772],{"class":6116},[143,42723,160],{"class":755},[143,42725,771],{"class":280},[143,42727,1055],{"class":149},[143,42729,42730],{"class":145,"line":2599},[143,42731,3300],{"emptyLinePlaceholder":976},[143,42733,42734,42736,42738],{"class":145,"line":2628},[143,42735,31699],{"class":755},[143,42737,31991],{"class":156},[143,42739,31994],{"class":149},[143,42741,42742,42745,42747,42749,42751,42753],{"class":145,"line":2633},[143,42743,42744],{"class":149},"        p1",[143,42746,160],{"class":755},[143,42748,31721],{"class":280},[143,42750,36082],{"class":149},[143,42752,31721],{"class":280},[143,42754,42755],{"class":149},".p1_1(x))\n",[143,42757,42758,42760,42762,42764,42766,42768,42771,42773,42775,42777],{"class":145,"line":2650},[143,42759,7985],{"class":149},[143,42761,160],{"class":755},[143,42763,31721],{"class":280},[143,42765,36082],{"class":149},[143,42767,31721],{"class":280},[143,42769,42770],{"class":149},".p2_2(",[143,42772,31721],{"class":280},[143,42774,36082],{"class":149},[143,42776,31721],{"class":280},[143,42778,42779],{"class":149},".p2_1(x))))\n",[143,42781,42782,42785,42787,42789,42791,42793,42796,42798,42800,42802],{"class":145,"line":2655},[143,42783,42784],{"class":149},"        p3",[143,42786,160],{"class":755},[143,42788,31721],{"class":280},[143,42790,36082],{"class":149},[143,42792,31721],{"class":280},[143,42794,42795],{"class":149},".p3_2(",[143,42797,31721],{"class":280},[143,42799,36082],{"class":149},[143,42801,31721],{"class":280},[143,42803,42804],{"class":149},".p3_1(x))))\n",[143,42806,42807,42810,42812,42814,42816,42818,42821,42823],{"class":145,"line":2660},[143,42808,42809],{"class":149},"        p4",[143,42811,160],{"class":755},[143,42813,31721],{"class":280},[143,42815,36082],{"class":149},[143,42817,31721],{"class":280},[143,42819,42820],{"class":149},".p4_2(",[143,42822,31721],{"class":280},[143,42824,42825],{"class":149},".p4_1(x)))\n",[143,42827,42828],{"class":145,"line":2665},[143,42829,42830],{"class":266},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[143,42832,42833,42835,42838,42840,42842,42844],{"class":145,"line":2679},[143,42834,15651],{"class":755},[143,42836,42837],{"class":149}," torch.cat((p1,p2,p3,p4),",[143,42839,33583],{"class":6116},[143,42841,160],{"class":755},[143,42843,771],{"class":280},[143,42845,1055],{"class":149},[143,42847,42848],{"class":145,"line":2684},[143,42849,3300],{"emptyLinePlaceholder":976},[143,42851,42852],{"class":145,"line":3477},[143,42853,3300],{"emptyLinePlaceholder":976},[143,42855,42856],{"class":145,"line":3491},[143,42857,42858],{"class":266},"# 搭建GoogLeNet网络\n",[143,42860,42861,42863,42866,42868,42870,42872,42874],{"class":145,"line":3499},[143,42862,15593],{"class":755},[143,42864,42865],{"class":156}," GoogLeNet",[143,42867,1049],{"class":149},[143,42869,31676],{"class":156},[143,42871,1599],{"class":149},[143,42873,31681],{"class":156},[143,42875,31684],{"class":149},[143,42877,42878],{"class":145,"line":3504},[143,42879,42880],{"class":266},"    # 必须把Inception导入到里边\n",[143,42882,42883,42885,42887],{"class":145,"line":3510},[143,42884,31699],{"class":755},[143,42886,31702],{"class":280},[143,42888,42889],{"class":149},"(self,Inception):\n",[143,42891,42892,42894,42897,42899,42901,42903],{"class":145,"line":3516},[143,42893,31715],{"class":280},[143,42895,42896],{"class":149},"(GoogLeNet,",[143,42898,31721],{"class":280},[143,42900,31724],{"class":149},[143,42902,31727],{"class":280},[143,42904,2876],{"class":149},[143,42906,42907,42909,42912,42914],{"class":145,"line":3521},[143,42908,31743],{"class":280},[143,42910,42911],{"class":149},".b1",[143,42913,160],{"class":755},[143,42915,38907],{"class":149},[143,42917,42918,42920,42922,42924,42926,42928,42930,42932,42934,42936,42938,42940,42942,42944,42946,42948,42950,42952,42954,42956,42958],{"class":145,"line":8848},[143,42919,38912],{"class":149},[143,42921,31754],{"class":6116},[143,42923,160],{"class":755},[143,42925,771],{"class":280},[143,42927,1419],{"class":149},[143,42929,31763],{"class":6116},[143,42931,160],{"class":755},[143,42933,1246],{"class":280},[143,42935,1419],{"class":149},[143,42937,31772],{"class":6116},[143,42939,160],{"class":755},[143,42941,1410],{"class":280},[143,42943,1419],{"class":149},[143,42945,31827],{"class":6116},[143,42947,160],{"class":755},[143,42949,1122],{"class":280},[143,42951,1419],{"class":149},[143,42953,31781],{"class":6116},[143,42955,160],{"class":755},[143,42957,1116],{"class":280},[143,42959,38945],{"class":149},[143,42961,42962],{"class":145,"line":8872},[143,42963,38950],{"class":149},[143,42965,42966,42968,42970,42972,42974,42976,42978,42980,42982,42984,42986,42988,42990],{"class":145,"line":8877},[143,42967,38995],{"class":149},[143,42969,31772],{"class":6116},[143,42971,160],{"class":755},[143,42973,1116],{"class":280},[143,42975,1419],{"class":149},[143,42977,31827],{"class":6116},[143,42979,160],{"class":755},[143,42981,1122],{"class":280},[143,42983,1419],{"class":149},[143,42985,31781],{"class":6116},[143,42987,160],{"class":755},[143,42989,771],{"class":280},[143,42991,1055],{"class":149},[143,42993,42994],{"class":145,"line":8883},[143,42995,39024],{"class":149},[143,42997,42998,43000,43003,43005],{"class":145,"line":8910},[143,42999,31743],{"class":280},[143,43001,43002],{"class":149},".b2",[143,43004,160],{"class":755},[143,43006,38907],{"class":149},[143,43008,43009,43011,43013,43015,43017,43019,43021,43023,43025,43027,43029,43031,43033],{"class":145,"line":8915},[143,43010,38912],{"class":149},[143,43012,31754],{"class":6116},[143,43014,160],{"class":755},[143,43016,1246],{"class":280},[143,43018,1419],{"class":149},[143,43020,31763],{"class":6116},[143,43022,160],{"class":755},[143,43024,1246],{"class":280},[143,43026,1419],{"class":149},[143,43028,31772],{"class":6116},[143,43030,160],{"class":755},[143,43032,771],{"class":280},[143,43034,38945],{"class":149},[143,43036,43037],{"class":145,"line":8921},[143,43038,38950],{"class":149},[143,43040,43041,43043,43045,43047,43049,43051,43053,43055,43058,43060,43062,43064,43066,43068,43070,43072,43074],{"class":145,"line":8933},[143,43042,38912],{"class":149},[143,43044,31754],{"class":6116},[143,43046,160],{"class":755},[143,43048,1246],{"class":280},[143,43050,1419],{"class":149},[143,43052,31763],{"class":6116},[143,43054,160],{"class":755},[143,43056,43057],{"class":280},"192",[143,43059,1419],{"class":149},[143,43061,31772],{"class":6116},[143,43063,160],{"class":755},[143,43065,1116],{"class":280},[143,43067,1419],{"class":149},[143,43069,31781],{"class":6116},[143,43071,160],{"class":755},[143,43073,771],{"class":280},[143,43075,38945],{"class":149},[143,43077,43078],{"class":145,"line":8945},[143,43079,38950],{"class":149},[143,43081,43082,43084,43086,43088,43090,43092,43094,43096,43098,43100,43102,43104,43106],{"class":145,"line":8957},[143,43083,38995],{"class":149},[143,43085,31772],{"class":6116},[143,43087,160],{"class":755},[143,43089,1116],{"class":280},[143,43091,1419],{"class":149},[143,43093,31827],{"class":6116},[143,43095,160],{"class":755},[143,43097,1122],{"class":280},[143,43099,1419],{"class":149},[143,43101,31781],{"class":6116},[143,43103,160],{"class":755},[143,43105,771],{"class":280},[143,43107,1055],{"class":149},[143,43109,43110],{"class":145,"line":10616},[143,43111,39024],{"class":149},[143,43113,43114,43116,43119,43121],{"class":145,"line":10641},[143,43115,31743],{"class":280},[143,43117,43118],{"class":149},".b3",[143,43120,160],{"class":755},[143,43122,38907],{"class":149},[143,43124,43125,43128,43130,43132,43134,43137,43139,43141,43143,43146,43148,43150,43152,43155,43157],{"class":145,"line":10664},[143,43126,43127],{"class":149},"            Inception(",[143,43129,43057],{"class":280},[143,43131,1419],{"class":149},[143,43133,1246],{"class":280},[143,43135,43136],{"class":149},",(",[143,43138,1252],{"class":280},[143,43140,1419],{"class":149},[143,43142,32968],{"class":280},[143,43144,43145],{"class":149},"),(",[143,43147,1642],{"class":280},[143,43149,1419],{"class":149},[143,43151,1240],{"class":280},[143,43153,43154],{"class":149},"),",[143,43156,1240],{"class":280},[143,43158,38945],{"class":149},[143,43160,43161,43163,43165,43167,43169,43171,43173,43175,43177,43179,43181,43183,43185,43187,43189],{"class":145,"line":10688},[143,43162,43127],{"class":149},[143,43164,35768],{"class":280},[143,43166,1419],{"class":149},[143,43168,32968],{"class":280},[143,43170,43136],{"class":149},[143,43172,32968],{"class":280},[143,43174,1419],{"class":149},[143,43176,43057],{"class":280},[143,43178,43145],{"class":149},[143,43180,1240],{"class":280},[143,43182,1419],{"class":149},[143,43184,1252],{"class":280},[143,43186,43154],{"class":149},[143,43188,1246],{"class":280},[143,43190,38945],{"class":149},[143,43192,43193,43195,43197,43199,43201,43203,43205,43207,43209,43211,43213,43215,43217],{"class":145,"line":10693},[143,43194,38995],{"class":149},[143,43196,31772],{"class":6116},[143,43198,160],{"class":755},[143,43200,1116],{"class":280},[143,43202,1419],{"class":149},[143,43204,31827],{"class":6116},[143,43206,160],{"class":755},[143,43208,1122],{"class":280},[143,43210,1419],{"class":149},[143,43212,31781],{"class":6116},[143,43214,160],{"class":755},[143,43216,771],{"class":280},[143,43218,1055],{"class":149},[143,43220,43221],{"class":145,"line":10698},[143,43222,39024],{"class":149},[143,43224,43225,43227,43230,43232],{"class":145,"line":10703},[143,43226,31743],{"class":280},[143,43228,43229],{"class":149},".b4",[143,43231,160],{"class":755},[143,43233,38907],{"class":149},[143,43235,43236,43238,43241,43243,43245,43247,43249,43251,43254,43256,43258,43260,43262,43264,43266],{"class":145,"line":10712},[143,43237,43127],{"class":149},[143,43239,43240],{"class":280},"480",[143,43242,1419],{"class":149},[143,43244,43057],{"class":280},[143,43246,43136],{"class":149},[143,43248,1252],{"class":280},[143,43250,1419],{"class":149},[143,43252,43253],{"class":280},"208",[143,43255,43145],{"class":149},[143,43257,1642],{"class":280},[143,43259,1419],{"class":149},[143,43261,1648],{"class":280},[143,43263,43154],{"class":149},[143,43265,1246],{"class":280},[143,43267,38945],{"class":149},[143,43269,43270,43272,43274,43276,43278,43280,43282,43284,43286,43288,43290,43292,43294,43296,43298],{"class":145,"line":10717},[143,43271,43127],{"class":149},[143,43273,39355],{"class":280},[143,43275,1419],{"class":149},[143,43277,21946],{"class":280},[143,43279,43136],{"class":149},[143,43281,1659],{"class":280},[143,43283,1419],{"class":149},[143,43285,32399],{"class":280},[143,43287,43145],{"class":149},[143,43289,1841],{"class":280},[143,43291,1419],{"class":149},[143,43293,1246],{"class":280},[143,43295,43154],{"class":149},[143,43297,1246],{"class":280},[143,43299,38945],{"class":149},[143,43301,43302,43304,43306,43308,43310,43312,43314,43316,43318,43320,43322,43324,43326,43328,43330],{"class":145,"line":10723},[143,43303,43127],{"class":149},[143,43305,39355],{"class":280},[143,43307,1419],{"class":149},[143,43309,32968],{"class":280},[143,43311,43136],{"class":149},[143,43313,32968],{"class":280},[143,43315,1419],{"class":149},[143,43317,35768],{"class":280},[143,43319,43145],{"class":149},[143,43321,1841],{"class":280},[143,43323,1419],{"class":149},[143,43325,1246],{"class":280},[143,43327,43154],{"class":149},[143,43329,1246],{"class":280},[143,43331,38945],{"class":149},[143,43333,43334,43336,43338,43340,43342,43344,43346,43348,43351,43353,43355,43357,43359,43361,43363],{"class":145,"line":10744},[143,43335,43127],{"class":149},[143,43337,39355],{"class":280},[143,43339,1419],{"class":149},[143,43341,1659],{"class":280},[143,43343,43136],{"class":149},[143,43345,32968],{"class":280},[143,43347,1419],{"class":149},[143,43349,43350],{"class":280},"288",[143,43352,43145],{"class":149},[143,43354,1240],{"class":280},[143,43356,1419],{"class":149},[143,43358,1246],{"class":280},[143,43360,43154],{"class":149},[143,43362,1246],{"class":280},[143,43364,38945],{"class":149},[143,43366,43367,43369,43372,43374,43376,43378,43380,43382,43385,43387,43389,43391,43393,43395,43397],{"class":145,"line":10750},[143,43368,43127],{"class":149},[143,43370,43371],{"class":280},"528",[143,43373,1419],{"class":149},[143,43375,35768],{"class":280},[143,43377,43136],{"class":149},[143,43379,21946],{"class":280},[143,43381,1419],{"class":149},[143,43383,43384],{"class":280},"320",[143,43386,43145],{"class":149},[143,43388,1240],{"class":280},[143,43390,1419],{"class":149},[143,43392,32968],{"class":280},[143,43394,43154],{"class":149},[143,43396,32968],{"class":280},[143,43398,38945],{"class":149},[143,43400,43401,43403,43405,43407,43409,43411,43413,43415,43417,43419,43421,43423,43425],{"class":145,"line":10764},[143,43402,38995],{"class":149},[143,43404,31772],{"class":6116},[143,43406,160],{"class":755},[143,43408,1116],{"class":280},[143,43410,1419],{"class":149},[143,43412,31827],{"class":6116},[143,43414,160],{"class":755},[143,43416,1122],{"class":280},[143,43418,1419],{"class":149},[143,43420,31781],{"class":6116},[143,43422,160],{"class":755},[143,43424,771],{"class":280},[143,43426,1055],{"class":149},[143,43428,43429],{"class":145,"line":10770},[143,43430,39024],{"class":149},[143,43432,43433,43435,43438,43440],{"class":145,"line":10797},[143,43434,31743],{"class":280},[143,43436,43437],{"class":149},".b5",[143,43439,160],{"class":755},[143,43441,38907],{"class":149},[143,43443,43444,43446,43449,43451,43453,43455,43457,43459,43461,43463,43465,43467,43469,43471,43473],{"class":145,"line":10806},[143,43445,43127],{"class":149},[143,43447,43448],{"class":280},"832",[143,43450,1419],{"class":149},[143,43452,35768],{"class":280},[143,43454,43136],{"class":149},[143,43456,21946],{"class":280},[143,43458,1419],{"class":149},[143,43460,43384],{"class":280},[143,43462,43145],{"class":149},[143,43464,1240],{"class":280},[143,43466,1419],{"class":149},[143,43468,32968],{"class":280},[143,43470,43154],{"class":149},[143,43472,32968],{"class":280},[143,43474,38945],{"class":149},[143,43476,43477,43479,43481,43483,43485,43487,43489,43491,43493,43495,43497,43499,43501,43503,43505],{"class":145,"line":10812},[143,43478,43127],{"class":149},[143,43480,43448],{"class":280},[143,43482,1419],{"class":149},[143,43484,35838],{"class":280},[143,43486,43136],{"class":149},[143,43488,43057],{"class":280},[143,43490,1419],{"class":149},[143,43492,35838],{"class":280},[143,43494,43145],{"class":149},[143,43496,1648],{"class":280},[143,43498,1419],{"class":149},[143,43500,32968],{"class":280},[143,43502,43154],{"class":149},[143,43504,32968],{"class":280},[143,43506,38945],{"class":149},[143,43508,43509,43512,43514,43516,43518],{"class":145,"line":10820},[143,43510,43511],{"class":149},"            nn.AdaptiveAvgPool2d((",[143,43513,771],{"class":280},[143,43515,1419],{"class":149},[143,43517,771],{"class":280},[143,43519,43520],{"class":149},")),\n",[143,43522,43523],{"class":145,"line":10825},[143,43524,39688],{"class":149},[143,43526,43527,43529,43532,43534,43536],{"class":145,"line":17502},[143,43528,39693],{"class":149},[143,43530,43531],{"class":280},"1024",[143,43533,1419],{"class":149},[143,43535,1487],{"class":280},[143,43537,1055],{"class":149},[143,43539,43540],{"class":145,"line":17508},[143,43541,39024],{"class":149},[143,43543,43544],{"class":145,"line":17531},[143,43545,43546],{"class":266},"        # 对模型参数初始化\n",[143,43548,43549,43551,43553,43555,43557],{"class":145,"line":17537},[143,43550,4303],{"class":755},[143,43552,39766],{"class":149},[143,43554,26941],{"class":755},[143,43556,39771],{"class":280},[143,43558,39774],{"class":149},[143,43560,43561,43563,43565],{"class":145,"line":17560},[143,43562,5542],{"class":755},[143,43564,39786],{"class":280},[143,43566,39789],{"class":149},[143,43568,43569,43571,43574,43576,43579,43581,43583,43585,43587],{"class":145,"line":17574},[143,43570,39799],{"class":149},[143,43572,43573],{"class":6116},"mode",[143,43575,160],{"class":755},[143,43577,43578],{"class":163},"'fan_out'",[143,43580,1419],{"class":149},[143,43582,39802],{"class":6116},[143,43584,160],{"class":755},[143,43586,39807],{"class":163},[143,43588,1055],{"class":149},[143,43590,43591],{"class":145,"line":17594},[143,43592,43593],{"class":266},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[143,43595,43596],{"class":145,"line":17600},[143,43597,43598],{"class":266},"                # ② mode = 'fan_out'决定使用的fan值：\n",[143,43600,43601],{"class":145,"line":17611},[143,43602,43603],{"class":266},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[143,43605,43606],{"class":145,"line":17634},[143,43607,43608],{"class":266},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[143,43610,43611],{"class":145,"line":17656},[143,43612,43613],{"class":266},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[143,43615,43616],{"class":145,"line":17661},[143,43617,43618],{"class":266},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[143,43620,43621,43623,43625,43627,43629,43631],{"class":145,"line":17667},[143,43622,39819],{"class":755},[143,43624,39822],{"class":149},[143,43626,39825],{"class":755},[143,43628,39828],{"class":755},[143,43630,39831],{"class":280},[143,43632,4639],{"class":149},[143,43634,43635,43637,43639],{"class":145,"line":17681},[143,43636,39843],{"class":149},[143,43638,1234],{"class":280},[143,43640,1055],{"class":149},[143,43642,43643,43646,43648],{"class":145,"line":17694},[143,43644,43645],{"class":755},"                elif",[143,43647,39786],{"class":280},[143,43649,39862],{"class":149},[143,43651,43652,43655,43657,43659,43661],{"class":145,"line":17699},[143,43653,43654],{"class":149},"                    nn.init.normal_(m.weight,",[143,43656,1234],{"class":280},[143,43658,1419],{"class":149},[143,43660,39884],{"class":280},[143,43662,1055],{"class":149},[143,43664,43665,43668,43670,43672,43674,43676],{"class":145,"line":17713},[143,43666,43667],{"class":755},"                    if",[143,43669,39822],{"class":149},[143,43671,39825],{"class":755},[143,43673,39828],{"class":755},[143,43675,39831],{"class":280},[143,43677,4639],{"class":149},[143,43679,43680,43683,43685],{"class":145,"line":17718},[143,43681,43682],{"class":149},"                        nn.init.constant_(m.bias,",[143,43684,1234],{"class":280},[143,43686,1055],{"class":149},[143,43688,43689],{"class":145,"line":17724},[143,43690,36063],{"class":266},[143,43692,43693,43695,43697],{"class":145,"line":17729},[143,43694,31699],{"class":755},[143,43696,31991],{"class":156},[143,43698,31994],{"class":149},[143,43700,43701,43703,43705,43707],{"class":145,"line":17743},[143,43702,31999],{"class":149},[143,43704,160],{"class":755},[143,43706,31721],{"class":280},[143,43708,43709],{"class":149},".b1(x)\n",[143,43711,43712,43714,43716,43718],{"class":145,"line":17748},[143,43713,31999],{"class":149},[143,43715,160],{"class":755},[143,43717,31721],{"class":280},[143,43719,43720],{"class":149},".b2(x)\n",[143,43722,43723,43725,43727,43729],{"class":145,"line":17753},[143,43724,31999],{"class":149},[143,43726,160],{"class":755},[143,43728,31721],{"class":280},[143,43730,43731],{"class":149},".b3(x)\n",[143,43733,43734,43736,43738,43740],{"class":145,"line":17767},[143,43735,31999],{"class":149},[143,43737,160],{"class":755},[143,43739,31721],{"class":280},[143,43741,43742],{"class":149},".b4(x)\n",[143,43744,43745,43747,43749,43751],{"class":145,"line":17779},[143,43746,31999],{"class":149},[143,43748,160],{"class":755},[143,43750,31721],{"class":280},[143,43752,43753],{"class":149},".b5(x)\n",[143,43755,43756,43758],{"class":145,"line":17784},[143,43757,15651],{"class":755},[143,43759,32107],{"class":149},[143,43761,43762],{"class":145,"line":17797},[143,43763,3300],{"emptyLinePlaceholder":976},[143,43765,43766],{"class":145,"line":17802},[143,43767,43768],{"class":266},"# 模型展示\n",[143,43770,43771,43773,43775,43777,43779],{"class":145,"line":17807},[143,43772,2434],{"class":755},[143,43774,32118],{"class":280},[143,43776,3849],{"class":755},[143,43778,32123],{"class":163},[143,43780,4639],{"class":149},[143,43782,43783,43785,43787,43789,43791,43793,43795,43797,43799],{"class":145,"line":17812},[143,43784,32135],{"class":149},[143,43786,160],{"class":755},[143,43788,31349],{"class":149},[143,43790,32142],{"class":163},[143,43792,2605],{"class":755},[143,43794,32147],{"class":149},[143,43796,2602],{"class":755},[143,43798,31374],{"class":163},[143,43800,1055],{"class":149},[143,43802,43803,43805,43807],{"class":145,"line":17825},[143,43804,32187],{"class":149},[143,43806,160],{"class":755},[143,43808,43809],{"class":149},"GoogLeNet(Inception).to(device)\n",[143,43811,43812,43814,43816,43818,43820,43822,43824,43826],{"class":145,"line":17830},[143,43813,32197],{"class":280},[143,43815,32200],{"class":149},[143,43817,771],{"class":280},[143,43819,1419],{"class":149},[143,43821,32399],{"class":280},[143,43823,1419],{"class":149},[143,43825,32399],{"class":280},[143,43827,32213],{"class":149},[19,43829,43830],{"start":35},[22,43831,40081],{},[133,43833,43835],{"className":31276,"code":43834,"language":31278,"meta":138,"style":138},"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",[140,43836,43837,43843,43849,43859,43865,43875,43885,43895,43905,43915,43919,43930,43940,43944,43948,43952,43960,43972,43982,43998,44008,44040,44054,44064,44074,44078,44088,44102,44112,44122,44132,44138,44142,44146,44150,44154,44158,44166,44186,44190,44194,44198,44202,44206,44222,44226,44230,44238,44242,44246,44254,44258,44262,44266,44274,44278,44282,44286,44290,44298,44302,44310,44314,44322,44326,44334,44338,44346,44350,44354,44362,44366,44370,44374,44386,44410,44424,44428,44432,44436,44444,44448,44456,44460,44468,44472,44480,44484,44492,44496,44504,44508,44520,44524,44532,44536,44544,44548,44552,44556,44560,44568,44572,44588,44592,44600,44604,44608,44612,44616,44620,44624,44628,44644,44648,44660,44664,44676,44680,44692,44696,44704,44708,44716,44720,44724,44728,44734,44738,44746,44750,44766,44770,44778,44782,44798,44810,44814,44826,44830,44834,44842,44846,44850,44858,44862,44870,44874,44882,44886,44890,44932,44974,44978,44982,44998,45002,45018,45022,45026,45034,45038,45042,45054,45092,45096,45100,45108,45112,45126,45136,45142,45148,45154,45160,45164,45168,45174,45178,45182,45190,45194,45212,45216,45220,45224,45240,45244,45248,45252,45256,45260,45280,45300,45304,45308,45312,45320,45328,45332,45348,45368,45388,45392,45396,45404,45412,45416,45420,45424,45436,45440,45450,45458,45475],{"__ignoreMap":138},[143,43838,43839,43841],{"class":145,"line":146},[143,43840,31290],{"class":755},[143,43842,32720],{"class":149},[143,43844,43845,43847],{"class":145,"line":35},[143,43846,31290],{"class":755},[143,43848,32727],{"class":149},[143,43850,43851,43853,43855,43857],{"class":145,"line":46},[143,43852,31290],{"class":755},[143,43854,32738],{"class":149},[143,43856,32281],{"class":755},[143,43858,32743],{"class":149},[143,43860,43861,43863],{"class":145,"line":293},[143,43862,31290],{"class":755},[143,43864,31293],{"class":149},[143,43866,43867,43869,43871,43873],{"class":145,"line":306},[143,43868,31635],{"class":755},[143,43870,32313],{"class":149},[143,43872,31290],{"class":755},[143,43874,32760],{"class":149},[143,43876,43877,43879,43881,43883],{"class":145,"line":319},[143,43878,31635],{"class":755},[143,43880,32266],{"class":149},[143,43882,31290],{"class":755},[143,43884,32271],{"class":149},[143,43886,43887,43889,43891,43893],{"class":145,"line":332},[143,43888,31635],{"class":755},[143,43890,32296],{"class":149},[143,43892,31290],{"class":755},[143,43894,32301],{"class":149},[143,43896,43897,43899,43901,43903],{"class":145,"line":345},[143,43898,31290],{"class":755},[143,43900,32313],{"class":149},[143,43902,32281],{"class":755},[143,43904,32318],{"class":149},[143,43906,43907,43909,43911,43913],{"class":145,"line":701},[143,43908,31290],{"class":755},[143,43910,32330],{"class":149},[143,43912,32281],{"class":755},[143,43914,32335],{"class":149},[143,43916,43917],{"class":145,"line":707},[143,43918,32805],{"class":266},[143,43920,43921,43923,43925,43927],{"class":145,"line":727},[143,43922,31635],{"class":755},[143,43924,32812],{"class":149},[143,43926,31290],{"class":755},[143,43928,43929],{"class":149}," GoogLeNet, Inception\n",[143,43931,43932,43934,43936,43938],{"class":145,"line":2518},[143,43933,31635],{"class":755},[143,43935,31638],{"class":149},[143,43937,31290],{"class":755},[143,43939,31643],{"class":149},[143,43941,43942],{"class":145,"line":2524},[143,43943,3300],{"emptyLinePlaceholder":976},[143,43945,43946],{"class":145,"line":2529},[143,43947,3300],{"emptyLinePlaceholder":976},[143,43949,43950],{"class":145,"line":2543},[143,43951,32840],{"class":266},[143,43953,43954,43956,43958],{"class":145,"line":2548},[143,43955,32845],{"class":755},[143,43957,32848],{"class":156},[143,43959,32851],{"class":149},[143,43961,43962,43964,43966,43968,43970],{"class":145,"line":2554},[143,43963,32856],{"class":149},[143,43965,160],{"class":755},[143,43967,32353],{"class":149},[143,43969,32361],{"class":163},[143,43971,32364],{"class":149},[143,43973,43974,43976,43978,43980],{"class":145,"line":2575},[143,43975,32869],{"class":6116},[143,43977,160],{"class":755},[143,43979,32374],{"class":280},[143,43981,32364],{"class":149},[143,43983,43984,43986,43988,43990,43992,43994,43996],{"class":145,"line":2580},[143,43985,32880],{"class":6116},[143,43987,160],{"class":755},[143,43989,32391],{"class":149},[143,43991,32394],{"class":6116},[143,43993,160],{"class":755},[143,43995,36347],{"class":280},[143,43997,32402],{"class":149},[143,43999,44000,44002,44004,44006],{"class":145,"line":2594},[143,44001,32897],{"class":6116},[143,44003,160],{"class":755},[143,44005,32374],{"class":280},[143,44007,1055],{"class":149},[143,44009,44010,44012,44014,44016,44018,44020,44022,44024,44026,44028,44030,44032,44034,44036,44038],{"class":145,"line":2599},[143,44011,32908],{"class":149},[143,44013,160],{"class":755},[143,44015,32913],{"class":149},[143,44017,32916],{"class":280},[143,44019,1049],{"class":149},[143,44021,32921],{"class":280},[143,44023,1496],{"class":755},[143,44025,8258],{"class":280},[143,44027,32928],{"class":149},[143,44029,32916],{"class":280},[143,44031,1049],{"class":149},[143,44033,32935],{"class":280},[143,44035,1496],{"class":755},[143,44037,8258],{"class":280},[143,44039,32942],{"class":149},[143,44041,44042,44044,44046,44048,44050,44052],{"class":145,"line":2628},[143,44043,32947],{"class":149},[143,44045,160],{"class":755},[143,44047,32952],{"class":149},[143,44049,32435],{"class":6116},[143,44051,160],{"class":755},[143,44053,32440],{"class":149},[143,44055,44056,44058,44060,44062],{"class":145,"line":2633},[143,44057,32963],{"class":6116},[143,44059,160],{"class":755},[143,44061,1240],{"class":280},[143,44063,32364],{"class":149},[143,44065,44066,44068,44070,44072],{"class":145,"line":2650},[143,44067,32975],{"class":6116},[143,44069,160],{"class":755},[143,44071,32374],{"class":280},[143,44073,32364],{"class":149},[143,44075,44076],{"class":145,"line":2655},[143,44077,32986],{"class":266},[143,44079,44080,44082,44084,44086],{"class":145,"line":2660},[143,44081,32991],{"class":6116},[143,44083,160],{"class":755},[143,44085,1436],{"class":280},[143,44087,1055],{"class":149},[143,44089,44090,44092,44094,44096,44098,44100],{"class":145,"line":2665},[143,44091,33002],{"class":149},[143,44093,160],{"class":755},[143,44095,32432],{"class":149},[143,44097,32435],{"class":6116},[143,44099,160],{"class":755},[143,44101,33013],{"class":149},[143,44103,44104,44106,44108,44110],{"class":145,"line":2679},[143,44105,33018],{"class":6116},[143,44107,160],{"class":755},[143,44109,1240],{"class":280},[143,44111,32364],{"class":149},[143,44113,44114,44116,44118,44120],{"class":145,"line":2684},[143,44115,33029],{"class":6116},[143,44117,160],{"class":755},[143,44119,32374],{"class":280},[143,44121,32364],{"class":149},[143,44123,44124,44126,44128,44130],{"class":145,"line":3477},[143,44125,33040],{"class":6116},[143,44127,160],{"class":755},[143,44129,1436],{"class":280},[143,44131,1055],{"class":149},[143,44133,44134,44136],{"class":145,"line":3491},[143,44135,4990],{"class":755},[143,44137,33053],{"class":149},[143,44139,44140],{"class":145,"line":3499},[143,44141,3300],{"emptyLinePlaceholder":976},[143,44143,44144],{"class":145,"line":3504},[143,44145,33062],{"class":266},[143,44147,44148],{"class":145,"line":3510},[143,44149,33067],{"class":266},[143,44151,44152],{"class":145,"line":3516},[143,44153,3300],{"emptyLinePlaceholder":976},[143,44155,44156],{"class":145,"line":3521},[143,44157,33076],{"class":266},[143,44159,44160,44162,44164],{"class":145,"line":8848},[143,44161,32845],{"class":755},[143,44163,33083],{"class":156},[143,44165,33086],{"class":149},[143,44167,44168,44170,44172,44174,44176,44178,44180,44182,44184],{"class":145,"line":8872},[143,44169,32135],{"class":149},[143,44171,160],{"class":755},[143,44173,31349],{"class":149},[143,44175,32142],{"class":163},[143,44177,2605],{"class":755},[143,44179,32147],{"class":149},[143,44181,2602],{"class":755},[143,44183,33105],{"class":163},[143,44185,1055],{"class":149},[143,44187,44188],{"class":145,"line":8877},[143,44189,3300],{"emptyLinePlaceholder":976},[143,44191,44192],{"class":145,"line":8883},[143,44193,3300],{"emptyLinePlaceholder":976},[143,44195,44196],{"class":145,"line":8910},[143,44197,33120],{"class":266},[143,44199,44200],{"class":145,"line":8915},[143,44201,33125],{"class":266},[143,44203,44204],{"class":145,"line":8921},[143,44205,33130],{"class":266},[143,44207,44208,44210,44212,44214,44216,44218,44220],{"class":145,"line":8933},[143,44209,33135],{"class":149},[143,44211,160],{"class":755},[143,44213,33140],{"class":149},[143,44215,33143],{"class":6116},[143,44217,160],{"class":755},[143,44219,33148],{"class":280},[143,44221,1055],{"class":149},[143,44223,44224],{"class":145,"line":8945},[143,44225,3300],{"emptyLinePlaceholder":976},[143,44227,44228],{"class":145,"line":8957},[143,44229,33159],{"class":266},[143,44231,44232,44234,44236],{"class":145,"line":10616},[143,44233,33164],{"class":149},[143,44235,160],{"class":755},[143,44237,33169],{"class":149},[143,44239,44240],{"class":145,"line":10641},[143,44241,3300],{"emptyLinePlaceholder":976},[143,44243,44244],{"class":145,"line":10664},[143,44245,33178],{"class":266},[143,44247,44248,44250,44252],{"class":145,"line":10688},[143,44249,32187],{"class":149},[143,44251,160],{"class":755},[143,44253,33187],{"class":149},[143,44255,44256],{"class":145,"line":10693},[143,44257,33192],{"class":266},[143,44259,44260],{"class":145,"line":10698},[143,44261,33197],{"class":266},[143,44263,44264],{"class":145,"line":10703},[143,44265,33202],{"class":266},[143,44267,44268,44270,44272],{"class":145,"line":10712},[143,44269,33207],{"class":149},[143,44271,160],{"class":755},[143,44273,33212],{"class":149},[143,44275,44276],{"class":145,"line":10717},[143,44277,3300],{"emptyLinePlaceholder":976},[143,44279,44280],{"class":145,"line":10723},[143,44281,3300],{"emptyLinePlaceholder":976},[143,44283,44284],{"class":145,"line":10744},[143,44285,33225],{"class":266},[143,44287,44288],{"class":145,"line":10750},[143,44289,33230],{"class":266},[143,44291,44292,44294,44296],{"class":145,"line":10764},[143,44293,33235],{"class":149},[143,44295,160],{"class":755},[143,44297,33240],{"class":280},[143,44299,44300],{"class":145,"line":10770},[143,44301,33245],{"class":266},[143,44303,44304,44306,44308],{"class":145,"line":10797},[143,44305,33250],{"class":149},[143,44307,160],{"class":755},[143,44309,33255],{"class":149},[143,44311,44312],{"class":145,"line":10806},[143,44313,33260],{"class":266},[143,44315,44316,44318,44320],{"class":145,"line":10812},[143,44317,33265],{"class":149},[143,44319,160],{"class":755},[143,44321,33255],{"class":149},[143,44323,44324],{"class":145,"line":10820},[143,44325,33274],{"class":266},[143,44327,44328,44330,44332],{"class":145,"line":10825},[143,44329,33279],{"class":149},[143,44331,160],{"class":755},[143,44333,33255],{"class":149},[143,44335,44336],{"class":145,"line":17502},[143,44337,33288],{"class":266},[143,44339,44340,44342,44344],{"class":145,"line":17508},[143,44341,33293],{"class":149},[143,44343,160],{"class":755},[143,44345,33255],{"class":149},[143,44347,44348],{"class":145,"line":17531},[143,44349,3300],{"emptyLinePlaceholder":976},[143,44351,44352],{"class":145,"line":17537},[143,44353,33306],{"class":266},[143,44355,44356,44358,44360],{"class":145,"line":17560},[143,44357,33311],{"class":149},[143,44359,160],{"class":755},[143,44361,33316],{"class":149},[143,44363,44364],{"class":145,"line":17574},[143,44365,3300],{"emptyLinePlaceholder":976},[143,44367,44368],{"class":145,"line":17594},[143,44369,3300],{"emptyLinePlaceholder":976},[143,44371,44372],{"class":145,"line":17600},[143,44373,33329],{"class":266},[143,44375,44376,44378,44380,44382,44384],{"class":145,"line":17611},[143,44377,4101],{"class":755},[143,44379,33336],{"class":149},[143,44381,26941],{"class":755},[143,44383,33341],{"class":280},[143,44385,33344],{"class":149},[143,44387,44388,44390,44392,44394,44396,44398,44400,44402,44404,44406,44408],{"class":145,"line":17634},[143,44389,33349],{"class":280},[143,44391,1049],{"class":149},[143,44393,33354],{"class":163},[143,44395,33357],{"class":280},[143,44397,1625],{"class":163},[143,44399,33357],{"class":280},[143,44401,1292],{"class":163},[143,44403,33366],{"class":149},[143,44405,1573],{"class":755},[143,44407,771],{"class":280},[143,44409,31395],{"class":149},[143,44411,44412,44414,44416,44418,44420,44422],{"class":145,"line":17656},[143,44413,33349],{"class":280},[143,44415,1049],{"class":149},[143,44417,33381],{"class":163},[143,44419,1496],{"class":755},[143,44421,1487],{"class":280},[143,44423,1055],{"class":149},[143,44425,44426],{"class":145,"line":17661},[143,44427,3300],{"emptyLinePlaceholder":976},[143,44429,44430],{"class":145,"line":17667},[143,44431,33396],{"class":266},[143,44433,44434],{"class":145,"line":17681},[143,44435,33401],{"class":266},[143,44437,44438,44440,44442],{"class":145,"line":17694},[143,44439,33406],{"class":149},[143,44441,160],{"class":755},[143,44443,33240],{"class":280},[143,44445,44446],{"class":145,"line":17699},[143,44447,33415],{"class":266},[143,44449,44450,44452,44454],{"class":145,"line":17713},[143,44451,33420],{"class":149},[143,44453,160],{"class":755},[143,44455,3985],{"class":280},[143,44457,44458],{"class":145,"line":17718},[143,44459,33429],{"class":266},[143,44461,44462,44464,44466],{"class":145,"line":17724},[143,44463,33434],{"class":149},[143,44465,160],{"class":755},[143,44467,33240],{"class":280},[143,44469,44470],{"class":145,"line":17729},[143,44471,33443],{"class":266},[143,44473,44474,44476,44478],{"class":145,"line":17743},[143,44475,33448],{"class":149},[143,44477,160],{"class":755},[143,44479,3985],{"class":280},[143,44481,44482],{"class":145,"line":17748},[143,44483,33457],{"class":266},[143,44485,44486,44488,44490],{"class":145,"line":17753},[143,44487,33462],{"class":149},[143,44489,160],{"class":755},[143,44491,3985],{"class":280},[143,44493,44494],{"class":145,"line":17767},[143,44495,33471],{"class":266},[143,44497,44498,44500,44502],{"class":145,"line":17779},[143,44499,33476],{"class":149},[143,44501,160],{"class":755},[143,44503,3985],{"class":280},[143,44505,44506],{"class":145,"line":17784},[143,44507,33485],{"class":266},[143,44509,44510,44512,44514,44516,44518],{"class":145,"line":17797},[143,44511,4303],{"class":755},[143,44513,32499],{"class":149},[143,44515,26941],{"class":755},[143,44517,32504],{"class":280},[143,44519,33498],{"class":149},[143,44521,44522],{"class":145,"line":17802},[143,44523,33503],{"class":266},[143,44525,44526,44528,44530],{"class":145,"line":17807},[143,44527,33508],{"class":149},[143,44529,160],{"class":755},[143,44531,33513],{"class":149},[143,44533,44534],{"class":145,"line":17812},[143,44535,33518],{"class":266},[143,44537,44538,44540,44542],{"class":145,"line":17825},[143,44539,33523],{"class":149},[143,44541,160],{"class":755},[143,44543,33528],{"class":149},[143,44545,44546],{"class":145,"line":17830},[143,44547,33534],{"class":266},[143,44549,44550],{"class":145,"line":33531},[143,44551,33540],{"class":149},[143,44553,44554],{"class":145,"line":33537},[143,44555,33546],{"class":266},[143,44557,44558],{"class":145,"line":33543},[143,44559,33552],{"class":266},[143,44561,44562,44564,44566],{"class":145,"line":33549},[143,44563,33558],{"class":149},[143,44565,160],{"class":755},[143,44567,33563],{"class":149},[143,44569,44570],{"class":145,"line":33555},[143,44571,33569],{"class":266},[143,44573,44574,44576,44578,44580,44582,44584,44586],{"class":145,"line":33566},[143,44575,33575],{"class":149},[143,44577,160],{"class":755},[143,44579,33580],{"class":149},[143,44581,33583],{"class":6116},[143,44583,160],{"class":755},[143,44585,771],{"class":280},[143,44587,1055],{"class":149},[143,44589,44590],{"class":145,"line":33572},[143,44591,33595],{"class":266},[143,44593,44594,44596,44598],{"class":145,"line":33592},[143,44595,33601],{"class":149},[143,44597,160],{"class":755},[143,44599,33606],{"class":149},[143,44601,44602],{"class":145,"line":33598},[143,44603,33612],{"class":266},[143,44605,44606],{"class":145,"line":33609},[143,44607,33618],{"class":149},[143,44609,44610],{"class":145,"line":33615},[143,44611,33624],{"class":266},[143,44613,44614],{"class":145,"line":33621},[143,44615,33630],{"class":149},[143,44617,44618],{"class":145,"line":33627},[143,44619,33636],{"class":266},[143,44621,44622],{"class":145,"line":33633},[143,44623,33642],{"class":149},[143,44625,44626],{"class":145,"line":33639},[143,44627,33648],{"class":266},[143,44629,44630,44632,44634,44636,44638,44640,44642],{"class":145,"line":33645},[143,44631,33654],{"class":149},[143,44633,10377],{"class":755},[143,44635,33659],{"class":149},[143,44637,1496],{"class":755},[143,44639,33664],{"class":149},[143,44641,1234],{"class":280},[143,44643,1055],{"class":149},[143,44645,44646],{"class":145,"line":33651},[143,44647,33674],{"class":266},[143,44649,44650,44652,44654,44656,44658],{"class":145,"line":33671},[143,44651,33680],{"class":149},[143,44653,10377],{"class":755},[143,44655,33685],{"class":149},[143,44657,3849],{"class":755},[143,44659,33690],{"class":149},[143,44661,44662],{"class":145,"line":33677},[143,44663,33696],{"class":266},[143,44665,44666,44668,44670,44672,44674],{"class":145,"line":33693},[143,44667,33702],{"class":149},[143,44669,10377],{"class":755},[143,44671,33664],{"class":149},[143,44673,1234],{"class":280},[143,44675,1055],{"class":149},[143,44677,44678],{"class":145,"line":33699},[143,44679,33716],{"class":266},[143,44681,44682,44684,44686,44688,44690],{"class":145,"line":33713},[143,44683,4303],{"class":755},[143,44685,33724],{"class":149},[143,44687,26941],{"class":755},[143,44689,32504],{"class":280},[143,44691,33731],{"class":149},[143,44693,44694],{"class":145,"line":33719},[143,44695,33737],{"class":266},[143,44697,44698,44700,44702],{"class":145,"line":33734},[143,44699,33508],{"class":149},[143,44701,160],{"class":755},[143,44703,33513],{"class":149},[143,44705,44706],{"class":145,"line":33740},[143,44707,33752],{"class":266},[143,44709,44710,44712,44714],{"class":145,"line":33749},[143,44711,33523],{"class":149},[143,44713,160],{"class":755},[143,44715,33528],{"class":149},[143,44717,44718],{"class":145,"line":33755},[143,44719,33767],{"class":266},[143,44721,44722],{"class":145,"line":33764},[143,44723,33773],{"class":149},[143,44725,44726],{"class":145,"line":33770},[143,44727,37254],{"class":266},[143,44729,44730,44732],{"class":145,"line":33776},[143,44731,33779],{"class":755},[143,44733,33782],{"class":149},[143,44735,44736],{"class":145,"line":33785},[143,44737,33788],{"class":266},[143,44739,44740,44742,44744],{"class":145,"line":33791},[143,44741,37269],{"class":149},[143,44743,160],{"class":755},[143,44745,33563],{"class":149},[143,44747,44748],{"class":145,"line":33802},[143,44749,33805],{"class":266},[143,44751,44752,44754,44756,44758,44760,44762,44764],{"class":145,"line":33808},[143,44753,37282],{"class":149},[143,44755,160],{"class":755},[143,44757,33580],{"class":149},[143,44759,33583],{"class":6116},[143,44761,160],{"class":755},[143,44763,771],{"class":280},[143,44765,1055],{"class":149},[143,44767,44768],{"class":145,"line":33827},[143,44769,33830],{"class":266},[143,44771,44772,44774,44776],{"class":145,"line":33833},[143,44773,37303],{"class":149},[143,44775,160],{"class":755},[143,44777,33606],{"class":149},[143,44779,44780],{"class":145,"line":33844},[143,44781,33847],{"class":266},[143,44783,44784,44786,44788,44790,44792,44794,44796],{"class":145,"line":33850},[143,44785,37316],{"class":149},[143,44787,10377],{"class":755},[143,44789,37321],{"class":149},[143,44791,1496],{"class":755},[143,44793,33664],{"class":149},[143,44795,1234],{"class":280},[143,44797,1055],{"class":149},[143,44799,44800,44802,44804,44806,44808],{"class":145,"line":33870},[143,44801,37334],{"class":149},[143,44803,10377],{"class":755},[143,44805,33685],{"class":149},[143,44807,3849],{"class":755},[143,44809,33690],{"class":149},[143,44811,44812],{"class":145,"line":33886},[143,44813,37347],{"class":266},[143,44815,44816,44818,44820,44822,44824],{"class":145,"line":33892},[143,44817,37352],{"class":149},[143,44819,10377],{"class":755},[143,44821,33664],{"class":149},[143,44823,1234],{"class":280},[143,44825,1055],{"class":149},[143,44827,44828],{"class":145,"line":33906},[143,44829,33909],{"class":266},[143,44831,44832],{"class":145,"line":33912},[143,44833,33915],{"class":266},[143,44835,44836,44838,44840],{"class":145,"line":33918},[143,44837,33921],{"class":149},[143,44839,1625],{"class":755},[143,44841,33926],{"class":149},[143,44843,44844],{"class":145,"line":33929},[143,44845,33932],{"class":266},[143,44847,44848],{"class":145,"line":33935},[143,44849,33938],{"class":266},[143,44851,44852,44854,44856],{"class":145,"line":33941},[143,44853,33944],{"class":149},[143,44855,1625],{"class":755},[143,44857,33926],{"class":149},[143,44859,44860],{"class":145,"line":33951},[143,44861,33954],{"class":266},[143,44863,44864,44866,44868],{"class":145,"line":33957},[143,44865,33960],{"class":149},[143,44867,1625],{"class":755},[143,44869,33965],{"class":149},[143,44871,44872],{"class":145,"line":33968},[143,44873,33971],{"class":266},[143,44875,44876,44878,44880],{"class":145,"line":33974},[143,44877,33977],{"class":149},[143,44879,1625],{"class":755},[143,44881,33965],{"class":149},[143,44883,44884],{"class":145,"line":33984},[143,44885,3300],{"emptyLinePlaceholder":976},[143,44887,44888],{"class":145,"line":33989},[143,44889,33992],{"class":266},[143,44891,44892,44894,44896,44898,44900,44902,44904,44906,44908,44910,44912,44914,44916,44918,44920,44922,44924,44926,44928,44930],{"class":145,"line":33995},[143,44893,33349],{"class":280},[143,44895,1049],{"class":149},[143,44897,4492],{"class":163},[143,44899,33357],{"class":280},[143,44901,34006],{"class":163},[143,44903,1936],{"class":280},[143,44905,34011],{"class":755},[143,44907,366],{"class":280},[143,44909,34016],{"class":163},[143,44911,1936],{"class":280},[143,44913,34011],{"class":755},[143,44915,366],{"class":280},[143,44917,4492],{"class":163},[143,44919,34027],{"class":149},[143,44921,1573],{"class":755},[143,44923,771],{"class":280},[143,44925,34034],{"class":149},[143,44927,1573],{"class":755},[143,44929,771],{"class":280},[143,44931,34041],{"class":149},[143,44933,44934,44936,44938,44940,44942,44944,44946,44948,44950,44952,44954,44956,44958,44960,44962,44964,44966,44968,44970,44972],{"class":145,"line":34044},[143,44935,33349],{"class":280},[143,44937,1049],{"class":149},[143,44939,4492],{"class":163},[143,44941,33357],{"class":280},[143,44943,34055],{"class":163},[143,44945,1936],{"class":280},[143,44947,34011],{"class":755},[143,44949,366],{"class":280},[143,44951,34064],{"class":163},[143,44953,1936],{"class":280},[143,44955,34011],{"class":755},[143,44957,366],{"class":280},[143,44959,4492],{"class":163},[143,44961,34075],{"class":149},[143,44963,1573],{"class":755},[143,44965,771],{"class":280},[143,44967,34082],{"class":149},[143,44969,1573],{"class":755},[143,44971,771],{"class":280},[143,44973,34041],{"class":149},[143,44975,44976],{"class":145,"line":34091},[143,44977,3300],{"emptyLinePlaceholder":976},[143,44979,44980],{"class":145,"line":34096},[143,44981,34099],{"class":266},[143,44983,44984,44986,44988,44990,44992,44994,44996],{"class":145,"line":34102},[143,44985,3397],{"class":755},[143,44987,34107],{"class":149},[143,44989,1573],{"class":755},[143,44991,771],{"class":280},[143,44993,1979],{"class":149},[143,44995,1998],{"class":755},[143,44997,34118],{"class":149},[143,44999,45000],{"class":145,"line":34121},[143,45001,34124],{"class":266},[143,45003,45004,45006,45008,45010,45012,45014,45016],{"class":145,"line":34127},[143,45005,34130],{"class":149},[143,45007,1087],{"class":280},[143,45009,160],{"class":755},[143,45011,34137],{"class":149},[143,45013,1573],{"class":755},[143,45015,771],{"class":280},[143,45017,34144],{"class":149},[143,45019,45020],{"class":145,"line":34147},[143,45021,34150],{"class":266},[143,45023,45024],{"class":145,"line":34153},[143,45025,34156],{"class":266},[143,45027,45028,45030,45032],{"class":145,"line":34159},[143,45029,34162],{"class":149},[143,45031,160],{"class":755},[143,45033,33212],{"class":149},[143,45035,45036],{"class":145,"line":34169},[143,45037,3300],{"emptyLinePlaceholder":976},[143,45039,45040],{"class":145,"line":34174},[143,45041,34177],{"class":266},[143,45043,45044,45046,45048,45050,45052],{"class":145,"line":34180},[143,45045,34183],{"class":149},[143,45047,160],{"class":755},[143,45049,34188],{"class":149},[143,45051,1573],{"class":755},[143,45053,34193],{"class":149},[143,45055,45056,45058,45060,45062,45064,45066,45068,45070,45072,45074,45076,45078,45080,45082,45084,45086,45088,45090],{"class":145,"line":34196},[143,45057,33349],{"class":280},[143,45059,1049],{"class":149},[143,45061,34203],{"class":163},[143,45063,1936],{"class":280},[143,45065,34208],{"class":755},[143,45067,366],{"class":280},[143,45069,1585],{"class":163},[143,45071,1936],{"class":280},[143,45073,34208],{"class":755},[143,45075,366],{"class":280},[143,45077,34221],{"class":163},[143,45079,34224],{"class":149},[143,45081,34227],{"class":755},[143,45083,1947],{"class":280},[143,45085,34232],{"class":149},[143,45087,1369],{"class":755},[143,45089,1947],{"class":280},[143,45091,31395],{"class":149},[143,45093,45094],{"class":145,"line":34241},[143,45095,37631],{"class":266},[143,45097,45098],{"class":145,"line":34247},[143,45099,37636],{"class":266},[143,45101,45102,45104,45106],{"class":145,"line":34253},[143,45103,37641],{"class":149},[143,45105,34265],{"class":163},[143,45107,1055],{"class":149},[143,45109,45110],{"class":145,"line":34259},[143,45111,34285],{"class":266},[143,45113,45114,45116,45118,45120,45122,45124],{"class":145,"line":34270},[143,45115,34291],{"class":149},[143,45117,160],{"class":755},[143,45119,34296],{"class":149},[143,45121,34299],{"class":6116},[143,45123,160],{"class":755},[143,45125,2449],{"class":149},[143,45127,45128,45130,45132,45134],{"class":145,"line":34276},[143,45129,34309],{"class":163},[143,45131,1900],{"class":149},[143,45133,34314],{"class":280},[143,45135,34317],{"class":149},[143,45137,45138,45140],{"class":145,"line":34282},[143,45139,34323],{"class":163},[143,45141,34326],{"class":149},[143,45143,45144,45146],{"class":145,"line":34288},[143,45145,34332],{"class":163},[143,45147,34335],{"class":149},[143,45149,45150,45152],{"class":145,"line":34306},[143,45151,34341],{"class":163},[143,45153,34344],{"class":149},[143,45155,45156,45158],{"class":145,"line":34320},[143,45157,34350],{"class":163},[143,45159,34353],{"class":149},[143,45161,45162],{"class":145,"line":34329},[143,45163,34359],{"class":149},[143,45165,45166],{"class":145,"line":34338},[143,45167,34365],{"class":266},[143,45169,45170,45172],{"class":145,"line":34347},[143,45171,4990],{"class":755},[143,45173,34373],{"class":149},[143,45175,45176],{"class":145,"line":34356},[143,45177,3300],{"emptyLinePlaceholder":976},[143,45179,45180],{"class":145,"line":34362},[143,45181,34384],{"class":266},[143,45183,45184,45186,45188],{"class":145,"line":34368},[143,45185,32845],{"class":755},[143,45187,34392],{"class":156},[143,45189,34395],{"class":149},[143,45191,45192],{"class":145,"line":34376},[143,45193,34401],{"class":266},[143,45195,45196,45198,45200,45202,45204,45206,45208,45210],{"class":145,"line":34381},[143,45197,34407],{"class":149},[143,45199,32591],{"class":6116},[143,45201,160],{"class":755},[143,45203,1049],{"class":149},[143,45205,1539],{"class":280},[143,45207,1419],{"class":149},[143,45209,1334],{"class":280},[143,45211,31395],{"class":149},[143,45213,45214],{"class":145,"line":34387},[143,45215,34427],{"class":266},[143,45217,45218],{"class":145,"line":34398},[143,45219,34433],{"class":266},[143,45221,45222],{"class":145,"line":34404},[143,45223,34439],{"class":266},[143,45225,45226,45228,45230,45232,45234,45236,45238],{"class":145,"line":34424},[143,45227,32625],{"class":149},[143,45229,771],{"class":280},[143,45231,1419],{"class":149},[143,45233,1122],{"class":280},[143,45235,1419],{"class":149},[143,45237,771],{"class":280},[143,45239,1055],{"class":149},[143,45241,45242],{"class":145,"line":34430},[143,45243,34462],{"class":266},[143,45245,45246],{"class":145,"line":34436},[143,45247,34468],{"class":266},[143,45249,45250],{"class":145,"line":34442},[143,45251,34474],{"class":266},[143,45253,45254],{"class":145,"line":34459},[143,45255,34480],{"class":266},[143,45257,45258],{"class":145,"line":34465},[143,45259,34486],{"class":266},[143,45261,45262,45264,45266,45268,45270,45272,45274,45276,45278],{"class":145,"line":34471},[143,45263,34492],{"class":149},[143,45265,34495],{"class":163},[143,45267,34498],{"class":149},[143,45269,34501],{"class":163},[143,45271,1419],{"class":149},[143,45273,34506],{"class":6116},[143,45275,160],{"class":755},[143,45277,34511],{"class":163},[143,45279,1055],{"class":149},[143,45281,45282,45284,45286,45288,45290,45292,45294,45296,45298],{"class":145,"line":34477},[143,45283,34492],{"class":149},[143,45285,34495],{"class":163},[143,45287,34523],{"class":149},[143,45289,34526],{"class":163},[143,45291,1419],{"class":149},[143,45293,34506],{"class":6116},[143,45295,160],{"class":755},[143,45297,34535],{"class":163},[143,45299,1055],{"class":149},[143,45301,45302],{"class":145,"line":34483},[143,45303,34543],{"class":266},[143,45305,45306],{"class":145,"line":34489},[143,45307,34549],{"class":149},[143,45309,45310],{"class":145,"line":34516},[143,45311,34555],{"class":266},[143,45313,45314,45316,45318],{"class":145,"line":34540},[143,45315,34561],{"class":149},[143,45317,34564],{"class":163},[143,45319,1055],{"class":149},[143,45321,45322,45324,45326],{"class":145,"line":34546},[143,45323,34572],{"class":149},[143,45325,34575],{"class":163},[143,45327,1055],{"class":149},[143,45329,45330],{"class":145,"line":34552},[143,45331,34583],{"class":266},[143,45333,45334,45336,45338,45340,45342,45344,45346],{"class":145,"line":34558},[143,45335,32625],{"class":149},[143,45337,771],{"class":280},[143,45339,1419],{"class":149},[143,45341,1122],{"class":280},[143,45343,1419],{"class":149},[143,45345,1122],{"class":280},[143,45347,1055],{"class":149},[143,45349,45350,45352,45354,45356,45358,45360,45362,45364,45366],{"class":145,"line":34569},[143,45351,34492],{"class":149},[143,45353,34495],{"class":163},[143,45355,34610],{"class":149},[143,45357,34501],{"class":163},[143,45359,1419],{"class":149},[143,45361,34506],{"class":6116},[143,45363,160],{"class":755},[143,45365,34621],{"class":163},[143,45367,1055],{"class":149},[143,45369,45370,45372,45374,45376,45378,45380,45382,45384,45386],{"class":145,"line":34580},[143,45371,34492],{"class":149},[143,45373,34495],{"class":163},[143,45375,34633],{"class":149},[143,45377,34526],{"class":163},[143,45379,1419],{"class":149},[143,45381,34506],{"class":6116},[143,45383,160],{"class":755},[143,45385,34644],{"class":163},[143,45387,1055],{"class":149},[143,45389,45390],{"class":145,"line":34586},[143,45391,34652],{"class":266},[143,45393,45394],{"class":145,"line":34603},[143,45395,34549],{"class":149},[143,45397,45398,45400,45402],{"class":145,"line":34626},[143,45399,34561],{"class":149},[143,45401,34495],{"class":163},[143,45403,1055],{"class":149},[143,45405,45406,45408,45410],{"class":145,"line":34649},[143,45407,34572],{"class":149},[143,45409,34674],{"class":163},[143,45411,1055],{"class":149},[143,45413,45414],{"class":145,"line":34655},[143,45415,34682],{"class":149},[143,45417,45418],{"class":145,"line":34660},[143,45419,3300],{"emptyLinePlaceholder":976},[143,45421,45422],{"class":145,"line":34669},[143,45423,34693],{"class":266},[143,45425,45426,45428,45430,45432,45434],{"class":145,"line":34679},[143,45427,2434],{"class":755},[143,45429,32118],{"class":280},[143,45431,3849],{"class":755},[143,45433,32123],{"class":163},[143,45435,4639],{"class":149},[143,45437,45438],{"class":145,"line":34685},[143,45439,34712],{"class":266},[143,45441,45442,45445,45447],{"class":145,"line":34690},[143,45443,45444],{"class":149},"    GoogLeNet",[143,45446,160],{"class":755},[143,45448,45449],{"class":149},"GoogLeNet(Inception)\n",[143,45451,45452,45454,45456],{"class":145,"line":34696},[143,45453,34729],{"class":149},[143,45455,160],{"class":755},[143,45457,34734],{"class":149},[143,45459,45460,45462,45464,45467,45469,45471,45473],{"class":145,"line":34709},[143,45461,34291],{"class":149},[143,45463,160],{"class":755},[143,45465,45466],{"class":149},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[143,45468,34747],{"class":6116},[143,45470,160],{"class":755},[143,45472,1989],{"class":280},[143,45474,1055],{"class":149},[143,45476,45477],{"class":145,"line":34715},[143,45478,34759],{"class":149},[19,45480,45481],{"start":46},[22,45482,41472],{},[133,45484,45486],{"className":31276,"code":45485,"language":31278,"meta":138,"style":138},"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",[140,45487,45488,45494,45504,45514,45518,45528,45539,45543,45547,45551,45559,45575,45585,45601,45611,45625,45629,45639,45649,45659,45665,45669,45673,45681,45685,45701,45709,45713,45717,45725,45733,45737,45741,45745,45749,45755,45759,45769,45777,45785,45789,45793,45797,45805,45809,45825,45829,45833,45837,45849,45853,45865,45869,45873,45885,45889,45899,45903,45907,45919,45923,45931,45935,45939,45947,45951,45959,45963,45967,45971,45975,45979,45995,46003,46007,46011,46059,46065,46069,46079,46087,46095,46099,46103,46107,46111,46119,46123,46139,46143,46151,46159],{"__ignoreMap":138},[143,45489,45490,45492],{"class":145,"line":146},[143,45491,31290],{"class":755},[143,45493,31293],{"class":149},[143,45495,45496,45498,45500,45502],{"class":145,"line":35},[143,45497,31290],{"class":755},[143,45499,32313],{"class":149},[143,45501,32281],{"class":755},[143,45503,32318],{"class":149},[143,45505,45506,45508,45510,45512],{"class":145,"line":46},[143,45507,31635],{"class":755},[143,45509,32296],{"class":149},[143,45511,31290],{"class":755},[143,45513,32301],{"class":149},[143,45515,45516],{"class":145,"line":293},[143,45517,34820],{"class":266},[143,45519,45520,45522,45524,45526],{"class":145,"line":306},[143,45521,31635],{"class":755},[143,45523,32266],{"class":149},[143,45525,31290],{"class":755},[143,45527,32271],{"class":149},[143,45529,45530,45532,45534,45536],{"class":145,"line":319},[143,45531,31635],{"class":755},[143,45533,32812],{"class":149},[143,45535,31290],{"class":755},[143,45537,45538],{"class":149}," GoogLeNet,Inception\n",[143,45540,45541],{"class":145,"line":332},[143,45542,3300],{"emptyLinePlaceholder":976},[143,45544,45545],{"class":145,"line":345},[143,45546,3300],{"emptyLinePlaceholder":976},[143,45548,45549],{"class":145,"line":701},[143,45550,34849],{"class":266},[143,45552,45553,45555,45557],{"class":145,"line":707},[143,45554,32845],{"class":755},[143,45556,34856],{"class":156},[143,45558,32851],{"class":149},[143,45560,45561,45563,45565,45567,45569,45571,45573],{"class":145,"line":727},[143,45562,34863],{"class":149},[143,45564,160],{"class":755},[143,45566,32353],{"class":149},[143,45568,32356],{"class":6116},[143,45570,160],{"class":755},[143,45572,32361],{"class":163},[143,45574,32364],{"class":149},[143,45576,45577,45579,45581,45583],{"class":145,"line":2518},[143,45578,34880],{"class":6116},[143,45580,160],{"class":755},[143,45582,34885],{"class":280},[143,45584,32364],{"class":149},[143,45586,45587,45589,45591,45593,45595,45597,45599],{"class":145,"line":2524},[143,45588,34892],{"class":6116},[143,45590,160],{"class":755},[143,45592,32391],{"class":149},[143,45594,32394],{"class":6116},[143,45596,160],{"class":755},[143,45598,36347],{"class":280},[143,45600,32402],{"class":149},[143,45602,45603,45605,45607,45609],{"class":145,"line":2529},[143,45604,34909],{"class":6116},[143,45606,160],{"class":755},[143,45608,32374],{"class":280},[143,45610,1055],{"class":149},[143,45612,45613,45615,45617,45619,45621,45623],{"class":145,"line":2543},[143,45614,34920],{"class":149},[143,45616,160],{"class":755},[143,45618,32432],{"class":149},[143,45620,32435],{"class":6116},[143,45622,160],{"class":755},[143,45624,34931],{"class":149},[143,45626,45627],{"class":145,"line":2548},[143,45628,34936],{"class":266},[143,45630,45631,45633,45635,45637],{"class":145,"line":2554},[143,45632,34941],{"class":6116},[143,45634,160],{"class":755},[143,45636,771],{"class":280},[143,45638,32364],{"class":149},[143,45640,45641,45643,45645,45647],{"class":145,"line":2575},[143,45642,34952],{"class":6116},[143,45644,160],{"class":755},[143,45646,32374],{"class":280},[143,45648,32364],{"class":149},[143,45650,45651,45653,45655,45657],{"class":145,"line":2580},[143,45652,34963],{"class":6116},[143,45654,160],{"class":755},[143,45656,1234],{"class":280},[143,45658,1055],{"class":149},[143,45660,45661,45663],{"class":145,"line":2594},[143,45662,4990],{"class":755},[143,45664,34976],{"class":149},[143,45666,45667],{"class":145,"line":2599},[143,45668,3300],{"emptyLinePlaceholder":976},[143,45670,45671],{"class":145,"line":2628},[143,45672,34985],{"class":266},[143,45674,45675,45677,45679],{"class":145,"line":2633},[143,45676,32845],{"class":755},[143,45678,34992],{"class":156},[143,45680,34995],{"class":149},[143,45682,45683],{"class":145,"line":2650},[143,45684,35000],{"class":266},[143,45686,45687,45689,45691,45693,45695,45697,45699],{"class":145,"line":2655},[143,45688,32135],{"class":149},[143,45690,160],{"class":755},[143,45692,32142],{"class":163},[143,45694,2605],{"class":755},[143,45696,32147],{"class":149},[143,45698,2602],{"class":755},[143,45700,35017],{"class":163},[143,45702,45703,45705,45707],{"class":145,"line":2660},[143,45704,32187],{"class":149},[143,45706,160],{"class":755},[143,45708,33187],{"class":149},[143,45710,45711],{"class":145,"line":2665},[143,45712,3300],{"emptyLinePlaceholder":976},[143,45714,45715],{"class":145,"line":2679},[143,45716,35034],{"class":266},[143,45718,45719,45721,45723],{"class":145,"line":2684},[143,45720,35039],{"class":149},[143,45722,160],{"class":755},[143,45724,33240],{"class":280},[143,45726,45727,45729,45731],{"class":145,"line":3477},[143,45728,35048],{"class":149},[143,45730,160],{"class":755},[143,45732,3985],{"class":280},[143,45734,45735],{"class":145,"line":3491},[143,45736,3300],{"emptyLinePlaceholder":976},[143,45738,45739],{"class":145,"line":3499},[143,45740,35061],{"class":266},[143,45742,45743],{"class":145,"line":3504},[143,45744,35066],{"class":266},[143,45746,45747],{"class":145,"line":3510},[143,45748,35071],{"class":266},[143,45750,45751,45753],{"class":145,"line":3516},[143,45752,35076],{"class":755},[143,45754,33782],{"class":149},[143,45756,45757],{"class":145,"line":3521},[143,45758,35083],{"class":266},[143,45760,45761,45763,45765,45767],{"class":145,"line":8848},[143,45762,4303],{"class":755},[143,45764,35090],{"class":149},[143,45766,26941],{"class":755},[143,45768,35095],{"class":149},[143,45770,45771,45773,45775],{"class":145,"line":8872},[143,45772,35100],{"class":149},[143,45774,160],{"class":755},[143,45776,35105],{"class":149},[143,45778,45779,45781,45783],{"class":145,"line":8877},[143,45780,35110],{"class":149},[143,45782,160],{"class":755},[143,45784,35115],{"class":149},[143,45786,45787],{"class":145,"line":8883},[143,45788,35120],{"class":266},[143,45790,45791],{"class":145,"line":8910},[143,45792,33773],{"class":149},[143,45794,45795],{"class":145,"line":8915},[143,45796,35129],{"class":266},[143,45798,45799,45801,45803],{"class":145,"line":8921},[143,45800,33558],{"class":149},[143,45802,160],{"class":755},[143,45804,35138],{"class":149},[143,45806,45807],{"class":145,"line":8933},[143,45808,35143],{"class":266},[143,45810,45811,45813,45815,45817,45819,45821,45823],{"class":145,"line":8945},[143,45812,33575],{"class":149},[143,45814,160],{"class":755},[143,45816,33580],{"class":149},[143,45818,33583],{"class":6116},[143,45820,160],{"class":755},[143,45822,771],{"class":280},[143,45824,1055],{"class":149},[143,45826,45827],{"class":145,"line":8957},[143,45828,35164],{"class":266},[143,45830,45831],{"class":145,"line":10616},[143,45832,35169],{"class":266},[143,45834,45835],{"class":145,"line":10641},[143,45836,35174],{"class":266},[143,45838,45839,45841,45843,45845,45847],{"class":145,"line":10664},[143,45840,35179],{"class":149},[143,45842,10377],{"class":755},[143,45844,33685],{"class":149},[143,45846,3849],{"class":755},[143,45848,35188],{"class":149},[143,45850,45851],{"class":145,"line":10688},[143,45852,35193],{"class":266},[143,45854,45855,45857,45859,45861,45863],{"class":145,"line":10693},[143,45856,35198],{"class":149},[143,45858,10377],{"class":755},[143,45860,35203],{"class":149},[143,45862,1234],{"class":280},[143,45864,1055],{"class":149},[143,45866,45867],{"class":145,"line":10698},[143,45868,3300],{"emptyLinePlaceholder":976},[143,45870,45871],{"class":145,"line":10703},[143,45872,35216],{"class":266},[143,45874,45875,45877,45879,45881,45883],{"class":145,"line":10712},[143,45876,35221],{"class":149},[143,45878,160],{"class":755},[143,45880,35226],{"class":149},[143,45882,1625],{"class":755},[143,45884,35231],{"class":149},[143,45886,45887],{"class":145,"line":10717},[143,45888,35236],{"class":266},[143,45890,45891,45893,45895,45897],{"class":145,"line":10723},[143,45892,33349],{"class":280},[143,45894,1049],{"class":149},[143,45896,35245],{"class":163},[143,45898,35248],{"class":149},[143,45900,45901],{"class":145,"line":10744},[143,45902,3300],{"emptyLinePlaceholder":976},[143,45904,45905],{"class":145,"line":10750},[143,45906,35257],{"class":266},[143,45908,45909,45911,45913,45915,45917],{"class":145,"line":10764},[143,45910,2434],{"class":755},[143,45912,32118],{"class":280},[143,45914,3849],{"class":755},[143,45916,32123],{"class":163},[143,45918,4639],{"class":149},[143,45920,45921],{"class":145,"line":10770},[143,45922,35274],{"class":266},[143,45924,45925,45927,45929],{"class":145,"line":10797},[143,45926,32187],{"class":149},[143,45928,160],{"class":755},[143,45930,45449],{"class":149},[143,45932,45933],{"class":145,"line":10806},[143,45934,35287],{"class":266},[143,45936,45937],{"class":145,"line":10812},[143,45938,35292],{"class":266},[143,45940,45941,45943,45945],{"class":145,"line":10820},[143,45942,35297],{"class":149},[143,45944,35300],{"class":163},[143,45946,31395],{"class":149},[143,45948,45949],{"class":145,"line":10825},[143,45950,35307],{"class":266},[143,45952,45953,45955,45957],{"class":145,"line":17502},[143,45954,34920],{"class":149},[143,45956,160],{"class":755},[143,45958,35316],{"class":149},[143,45960,45961],{"class":145,"line":17508},[143,45962,35321],{"class":266},[143,45964,45965],{"class":145,"line":17531},[143,45966,35326],{"class":149},[143,45968,45969],{"class":145,"line":17537},[143,45970,3300],{"emptyLinePlaceholder":976},[143,45972,45973],{"class":145,"line":17560},[143,45974,35335],{"class":266},[143,45976,45977],{"class":145,"line":17574},[143,45978,35340],{"class":266},[143,45980,45981,45983,45985,45987,45989,45991,45993],{"class":145,"line":17594},[143,45982,32135],{"class":149},[143,45984,160],{"class":755},[143,45986,32142],{"class":163},[143,45988,2605],{"class":755},[143,45990,32147],{"class":149},[143,45992,2602],{"class":755},[143,45994,35017],{"class":163},[143,45996,45997,45999,46001],{"class":145,"line":17600},[143,45998,32187],{"class":149},[143,46000,160],{"class":755},[143,46002,33187],{"class":149},[143,46004,46005],{"class":145,"line":17611},[143,46006,35369],{"class":266},[143,46008,46009],{"class":145,"line":17634},[143,46010,35374],{"class":266},[143,46012,46013,46015,46017,46019,46021,46023,46025,46027,46029,46031,46033,46035,46037,46039,46041,46043,46045,46047,46049,46051,46053,46055,46057],{"class":145,"line":17656},[143,46014,35379],{"class":149},[143,46016,160],{"class":755},[143,46018,749],{"class":149},[143,46020,35386],{"class":163},[143,46022,1419],{"class":149},[143,46024,35391],{"class":163},[143,46026,1419],{"class":149},[143,46028,35396],{"class":163},[143,46030,1419],{"class":149},[143,46032,35401],{"class":163},[143,46034,1419],{"class":149},[143,46036,35406],{"class":163},[143,46038,1419],{"class":149},[143,46040,35411],{"class":163},[143,46042,1419],{"class":149},[143,46044,35416],{"class":163},[143,46046,1419],{"class":149},[143,46048,35421],{"class":163},[143,46050,1419],{"class":149},[143,46052,35426],{"class":163},[143,46054,1419],{"class":149},[143,46056,35431],{"class":163},[143,46058,34144],{"class":149},[143,46060,46061,46063],{"class":145,"line":17661},[143,46062,35076],{"class":755},[143,46064,33782],{"class":149},[143,46066,46067],{"class":145,"line":17667},[143,46068,35444],{"class":266},[143,46070,46071,46073,46075,46077],{"class":145,"line":17681},[143,46072,4303],{"class":755},[143,46074,35451],{"class":149},[143,46076,26941],{"class":755},[143,46078,35095],{"class":149},[143,46080,46081,46083,46085],{"class":145,"line":17694},[143,46082,33508],{"class":149},[143,46084,160],{"class":755},[143,46086,33513],{"class":149},[143,46088,46089,46091,46093],{"class":145,"line":17699},[143,46090,33523],{"class":149},[143,46092,160],{"class":755},[143,46094,33528],{"class":149},[143,46096,46097],{"class":145,"line":17713},[143,46098,3300],{"emptyLinePlaceholder":976},[143,46100,46101],{"class":145,"line":17718},[143,46102,35480],{"class":266},[143,46104,46105],{"class":145,"line":17724},[143,46106,33773],{"class":149},[143,46108,46109],{"class":145,"line":17729},[143,46110,35489],{"class":266},[143,46112,46113,46115,46117],{"class":145,"line":17743},[143,46114,33558],{"class":149},[143,46116,160],{"class":755},[143,46118,33563],{"class":149},[143,46120,46121],{"class":145,"line":17748},[143,46122,35502],{"class":266},[143,46124,46125,46127,46129,46131,46133,46135,46137],{"class":145,"line":17753},[143,46126,33575],{"class":149},[143,46128,160],{"class":755},[143,46130,33580],{"class":149},[143,46132,33583],{"class":6116},[143,46134,160],{"class":755},[143,46136,771],{"class":280},[143,46138,1055],{"class":149},[143,46140,46141],{"class":145,"line":17767},[143,46142,35523],{"class":266},[143,46144,46145,46147,46149],{"class":145,"line":17779},[143,46146,35528],{"class":149},[143,46148,160],{"class":755},[143,46150,35533],{"class":149},[143,46152,46153,46155,46157],{"class":145,"line":17784},[143,46154,35538],{"class":149},[143,46156,160],{"class":755},[143,46158,35543],{"class":149},[143,46160,46161,46163,46165,46167,46169,46171,46173,46175],{"class":145,"line":17797},[143,46162,35548],{"class":280},[143,46164,1049],{"class":149},[143,46166,35553],{"class":163},[143,46168,35556],{"class":149},[143,46170,35559],{"class":163},[143,46172,1419],{"class":149},[143,46174,35564],{"class":163},[143,46176,35567],{"class":149},[58,46178,46180],{"id":46179},"_24训练自己的数据集","2.4.训练自己的数据集",[63,46182,46183],{},"猫狗分类任务",[63,46185,46186],{},"划分数据集和验证集",[133,46188,46190],{"className":31276,"code":46189,"language":31278,"meta":138,"style":138},"# 创建脚本，用于划分数据集和验证集\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",[140,46191,46192,46197,46204,46209,46220,46227,46231,46241,46255,46264,46268,46273,46283,46303,46307,46312,46322,46333,46346,46350,46355,46364,46374,46385,46389,46394,46404,46408,46413,46418,46423,46428,46433,46437,46447,46474,46487,46499,46526,46531,46536,46550,46555,46567,46582,46597,46605,46609,46614,46620,46632,46645,46650,46655,46660,46710,46716,46720],{"__ignoreMap":138},[143,46193,46194],{"class":145,"line":146},[143,46195,46196],{"class":266},"# 创建脚本，用于划分数据集和验证集\n",[143,46198,46199,46201],{"class":145,"line":35},[143,46200,31290],{"class":755},[143,46202,46203],{"class":149}," os\n",[143,46205,46206],{"class":145,"line":46},[143,46207,46208],{"class":266},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[143,46210,46211,46213,46216,46218],{"class":145,"line":293},[143,46212,31635],{"class":755},[143,46214,46215],{"class":149}," shutil ",[143,46217,31290],{"class":755},[143,46219,32720],{"class":149},[143,46221,46222,46224],{"class":145,"line":306},[143,46223,31290],{"class":755},[143,46225,46226],{"class":149}," random\n",[143,46228,46229],{"class":145,"line":319},[143,46230,3300],{"emptyLinePlaceholder":976},[143,46232,46233,46235,46238],{"class":145,"line":332},[143,46234,32845],{"class":755},[143,46236,46237],{"class":156}," mkfile",[143,46239,46240],{"class":149},"(file):\n",[143,46242,46243,46245,46247,46250,46253],{"class":145,"line":345},[143,46244,4001],{"class":755},[143,46246,39828],{"class":755},[143,46248,46249],{"class":149}," os.path.exists(",[143,46251,46252],{"class":6116},"file",[143,46254,31684],{"class":149},[143,46256,46257,46260,46262],{"class":145,"line":701},[143,46258,46259],{"class":149},"        os.makedirs(",[143,46261,46252],{"class":6116},[143,46263,1055],{"class":149},[143,46265,46266],{"class":145,"line":707},[143,46267,3300],{"emptyLinePlaceholder":976},[143,46269,46270],{"class":145,"line":727},[143,46271,46272],{"class":266},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[143,46274,46275,46278,46280],{"class":145,"line":2518},[143,46276,46277],{"class":149},"file_path",[143,46279,160],{"class":755},[143,46281,46282],{"class":163},"'data_cat_dog'\n",[143,46284,46285,46288,46290,46293,46295,46298,46300],{"class":145,"line":2524},[143,46286,46287],{"class":149},"flower_class",[143,46289,160],{"class":755},[143,46291,46292],{"class":149},"[cla ",[143,46294,3925],{"class":755},[143,46296,46297],{"class":149}," cla ",[143,46299,26941],{"class":755},[143,46301,46302],{"class":149}," os.listdir(file_path)]\n",[143,46304,46305],{"class":145,"line":2529},[143,46306,3300],{"emptyLinePlaceholder":976},[143,46308,46309],{"class":145,"line":2543},[143,46310,46311],{"class":266},"# 创建训练集train文件夹\n",[143,46313,46314,46317,46320],{"class":145,"line":2548},[143,46315,46316],{"class":149},"mkfile(",[143,46318,46319],{"class":163},"'data\u002Ftrain'",[143,46321,1055],{"class":149},[143,46323,46324,46326,46328,46330],{"class":145,"line":2554},[143,46325,3925],{"class":755},[143,46327,46297],{"class":149},[143,46329,26941],{"class":755},[143,46331,46332],{"class":149}," flower_class:\n",[143,46334,46335,46338,46341,46343],{"class":145,"line":2575},[143,46336,46337],{"class":149},"    mkfile(",[143,46339,46340],{"class":163},"'data\u002Ftrain\u002F'",[143,46342,1522],{"class":755},[143,46344,46345],{"class":149},"cla)\n",[143,46347,46348],{"class":145,"line":2580},[143,46349,3300],{"emptyLinePlaceholder":976},[143,46351,46352],{"class":145,"line":2594},[143,46353,46354],{"class":266},"# 创建验证集val文件夹\n",[143,46356,46357,46359,46362],{"class":145,"line":2599},[143,46358,46316],{"class":149},[143,46360,46361],{"class":163},"'data\u002Ftest'",[143,46363,1055],{"class":149},[143,46365,46366,46368,46370,46372],{"class":145,"line":2628},[143,46367,3925],{"class":755},[143,46369,46297],{"class":149},[143,46371,26941],{"class":755},[143,46373,46332],{"class":149},[143,46375,46376,46378,46381,46383],{"class":145,"line":2633},[143,46377,46337],{"class":149},[143,46379,46380],{"class":163},"'data\u002Ftest\u002F'",[143,46382,1522],{"class":755},[143,46384,46345],{"class":149},[143,46386,46387],{"class":145,"line":2650},[143,46388,3300],{"emptyLinePlaceholder":976},[143,46390,46391],{"class":145,"line":2655},[143,46392,46393],{"class":266},"# 划分比例，训练集：测试集=9：1\n",[143,46395,46396,46399,46401],{"class":145,"line":2660},[143,46397,46398],{"class":149},"split_rate",[143,46400,160],{"class":755},[143,46402,46403],{"class":280},"0.1\n",[143,46405,46406],{"class":145,"line":2665},[143,46407,3300],{"emptyLinePlaceholder":976},[143,46409,46410],{"class":145,"line":2679},[143,46411,46412],{"class":266},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[143,46414,46415],{"class":145,"line":2684},[143,46416,46417],{"class":266},"# cla_path：当前类别的原始图片路径\n",[143,46419,46420],{"class":145,"line":3477},[143,46421,46422],{"class":266},"# images：当前类别下所有图片的文件名列表\n",[143,46424,46425],{"class":145,"line":3491},[143,46426,46427],{"class":266},"# num：该类别图片总数\n",[143,46429,46430],{"class":145,"line":3499},[143,46431,46432],{"class":266},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[143,46434,46435],{"class":145,"line":3504},[143,46436,3300],{"emptyLinePlaceholder":976},[143,46438,46439,46441,46443,46445],{"class":145,"line":3510},[143,46440,3925],{"class":755},[143,46442,46297],{"class":149},[143,46444,26941],{"class":755},[143,46446,46332],{"class":149},[143,46448,46449,46452,46454,46457,46459,46462,46465,46467,46469,46471],{"class":145,"line":3516},[143,46450,46451],{"class":149},"    cla_path ",[143,46453,160],{"class":755},[143,46455,46456],{"class":149}," file_path ",[143,46458,1522],{"class":755},[143,46460,46461],{"class":163}," '\u002F'",[143,46463,46464],{"class":755}," +",[143,46466,46297],{"class":149},[143,46468,1522],{"class":755},[143,46470,46461],{"class":163},[143,46472,46473],{"class":266},"  # 某一类别的子目录\n",[143,46475,46476,46479,46481,46484],{"class":145,"line":3521},[143,46477,46478],{"class":149},"    images ",[143,46480,160],{"class":755},[143,46482,46483],{"class":149}," os.listdir(cla_path)  ",[143,46485,46486],{"class":266},"# iamges 列表存储了该目录下所有图像的名称\n",[143,46488,46489,46492,46494,46496],{"class":145,"line":8848},[143,46490,46491],{"class":149},"    num ",[143,46493,160],{"class":755},[143,46495,8231],{"class":280},[143,46497,46498],{"class":149},"(images)\n",[143,46500,46501,46504,46506,46509,46511,46513,46515,46518,46520,46523],{"class":145,"line":8872},[143,46502,46503],{"class":149},"    eval_index ",[143,46505,160],{"class":755},[143,46507,46508],{"class":149}," random.sample(images, ",[143,46510,1534],{"class":6116},[143,46512,160],{"class":755},[143,46514,1052],{"class":280},[143,46516,46517],{"class":149},"(num ",[143,46519,1496],{"class":755},[143,46521,46522],{"class":149}," split_rate))  ",[143,46524,46525],{"class":266},"# 从images列表中随机抽取 k 个图像名称\n",[143,46527,46528],{"class":145,"line":8877},[143,46529,46530],{"class":266},"    # 遍历该类别下的所有图片\n",[143,46532,46533],{"class":145,"line":8883},[143,46534,46535],{"class":266},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[143,46537,46538,46540,46543,46545,46547],{"class":145,"line":8910},[143,46539,4101],{"class":755},[143,46541,46542],{"class":149}," index, image ",[143,46544,26941],{"class":755},[143,46546,32504],{"class":280},[143,46548,46549],{"class":149},"(images):\n",[143,46551,46552],{"class":145,"line":8915},[143,46553,46554],{"class":266},"        # eval_index 中保存验证集val的图像名称\n",[143,46556,46557,46559,46562,46564],{"class":145,"line":8921},[143,46558,3397],{"class":755},[143,46560,46561],{"class":149}," image ",[143,46563,26941],{"class":755},[143,46565,46566],{"class":149}," eval_index:\n",[143,46568,46569,46572,46574,46577,46579],{"class":145,"line":8933},[143,46570,46571],{"class":149},"            image_path ",[143,46573,160],{"class":755},[143,46575,46576],{"class":149}," cla_path ",[143,46578,1522],{"class":755},[143,46580,46581],{"class":149}," image\n",[143,46583,46584,46587,46589,46592,46594],{"class":145,"line":8945},[143,46585,46586],{"class":149},"            new_path ",[143,46588,160],{"class":755},[143,46590,46591],{"class":163}," 'data\u002Ftest\u002F'",[143,46593,46464],{"class":755},[143,46595,46596],{"class":149}," cla\n",[143,46598,46599,46602],{"class":145,"line":8957},[143,46600,46601],{"class":149},"            copy(image_path, new_path)  ",[143,46603,46604],{"class":266},"# 将选中的图像复制到新路径\n",[143,46606,46607],{"class":145,"line":10616},[143,46608,3300],{"emptyLinePlaceholder":976},[143,46610,46611],{"class":145,"line":10641},[143,46612,46613],{"class":266},"        # 其余的图像保存在训练集train中\n",[143,46615,46616,46618],{"class":145,"line":10664},[143,46617,3434],{"class":755},[143,46619,4639],{"class":149},[143,46621,46622,46624,46626,46628,46630],{"class":145,"line":10688},[143,46623,46571],{"class":149},[143,46625,160],{"class":755},[143,46627,46576],{"class":149},[143,46629,1522],{"class":755},[143,46631,46581],{"class":149},[143,46633,46634,46636,46638,46641,46643],{"class":145,"line":10693},[143,46635,46586],{"class":149},[143,46637,160],{"class":755},[143,46639,46640],{"class":163}," 'data\u002Ftrain\u002F'",[143,46642,46464],{"class":755},[143,46644,46596],{"class":149},[143,46646,46647],{"class":145,"line":10698},[143,46648,46649],{"class":149},"            copy(image_path, new_path)\n",[143,46651,46652],{"class":145,"line":10703},[143,46653,46654],{"class":266},"            # 打印进度条信息\n",[143,46656,46657],{"class":145,"line":10712},[143,46658,46659],{"class":266},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[143,46661,46662,46664,46666,46668,46671,46673,46675,46678,46680,46682,46684,46687,46690,46692,46694,46697,46700,46702,46704,46707],{"class":145,"line":10717},[143,46663,33349],{"class":280},[143,46665,1049],{"class":149},[143,46667,1292],{"class":163},[143,46669,46670],{"class":280},"\\r",[143,46672,749],{"class":163},[143,46674,33357],{"class":280},[143,46676,46677],{"class":163},"] processing [",[143,46679,33357],{"class":280},[143,46681,1625],{"class":163},[143,46683,33357],{"class":280},[143,46685,46686],{"class":163},"]\"",[143,46688,46689],{"class":149},".format(cla, index ",[143,46691,1522],{"class":755},[143,46693,26016],{"class":280},[143,46695,46696],{"class":149},", num), ",[143,46698,46699],{"class":6116},"end",[143,46701,160],{"class":755},[143,46703,8552],{"class":163},[143,46705,46706],{"class":149},")  ",[143,46708,46709],{"class":266},"# processing bar\n",[143,46711,46712,46714],{"class":145,"line":10723},[143,46713,32197],{"class":280},[143,46715,2876],{"class":149},[143,46717,46718],{"class":145,"line":10744},[143,46719,3300],{"emptyLinePlaceholder":976},[143,46721,46722,46724,46726,46729],{"class":145,"line":10750},[143,46723,31313],{"class":280},[143,46725,1049],{"class":149},[143,46727,46728],{"class":163},"\"processing done!\"",[143,46730,1055],{"class":149},[63,46732,46733],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22896,46735,46737],{"id":46736},"_242模型代码","2.4.2.模型代码",[63,46739,46740],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[133,46742,46744],{"className":31276,"code":46743,"language":31278,"meta":138,"style":138},"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",[140,46745,46746,46752,46762,46772,46776,46792,46800,46814,46824,46828,46858,46862,46896,46942,46946,46980,47026,47030,47034,47068,47098,47102,47110,47124,47146,47168,47186,47190,47204,47208,47212,47228,47232,47240,47254,47264,47308,47312,47340,47344,47354,47382,47386,47422,47426,47454,47458,47468,47500,47532,47560,47564,47574,47606,47638,47670,47702,47734,47762,47766,47776,47808,47840,47852,47856,47868,47872,47876,47888,47896,47916,47920,47924,47928,47932,47936,47940,47954,47962,47970,47982,47996,48004,48008,48016,48026,48036,48046,48056,48066,48072,48076,48080,48092,48112,48120],{"__ignoreMap":138},[143,46747,46748,46750],{"class":145,"line":146},[143,46749,31290],{"class":755},[143,46751,31293],{"class":149},[143,46753,46754,46756,46758,46760],{"class":145,"line":35},[143,46755,31635],{"class":755},[143,46757,31638],{"class":149},[143,46759,31290],{"class":755},[143,46761,31643],{"class":149},[143,46763,46764,46766,46768,46770],{"class":145,"line":46},[143,46765,31635],{"class":755},[143,46767,31655],{"class":149},[143,46769,31290],{"class":755},[143,46771,31660],{"class":149},[143,46773,46774],{"class":145,"line":293},[143,46775,3300],{"emptyLinePlaceholder":976},[143,46777,46778,46780,46782,46784,46786,46788,46790],{"class":145,"line":306},[143,46779,15593],{"class":755},[143,46781,42391],{"class":156},[143,46783,1049],{"class":149},[143,46785,31676],{"class":156},[143,46787,1599],{"class":149},[143,46789,31681],{"class":156},[143,46791,31684],{"class":149},[143,46793,46794,46796,46798],{"class":145,"line":319},[143,46795,31699],{"class":755},[143,46797,31702],{"class":280},[143,46799,42410],{"class":149},[143,46801,46802,46804,46806,46808,46810,46812],{"class":145,"line":332},[143,46803,31715],{"class":280},[143,46805,42417],{"class":149},[143,46807,31721],{"class":280},[143,46809,31724],{"class":149},[143,46811,31727],{"class":280},[143,46813,2876],{"class":149},[143,46815,46816,46818,46820,46822],{"class":145,"line":345},[143,46817,31743],{"class":280},[143,46819,35669],{"class":149},[143,46821,160],{"class":755},[143,46823,35674],{"class":149},[143,46825,46826],{"class":145,"line":701},[143,46827,42440],{"class":266},[143,46829,46830,46832,46834,46836,46838,46840,46842,46844,46846,46848,46850,46852,46854,46856],{"class":145,"line":707},[143,46831,31743],{"class":280},[143,46833,42447],{"class":149},[143,46835,160],{"class":755},[143,46837,31751],{"class":149},[143,46839,31754],{"class":6116},[143,46841,160],{"class":755},[143,46843,42458],{"class":149},[143,46845,31763],{"class":6116},[143,46847,160],{"class":755},[143,46849,42465],{"class":149},[143,46851,31772],{"class":6116},[143,46853,160],{"class":755},[143,46855,771],{"class":280},[143,46857,1055],{"class":149},[143,46859,46860],{"class":145,"line":727},[143,46861,42478],{"class":266},[143,46863,46864,46866,46868,46870,46872,46874,46876,46878,46880,46882,46884,46886,46888,46890,46892,46894],{"class":145,"line":2518},[143,46865,31743],{"class":280},[143,46867,42485],{"class":149},[143,46869,160],{"class":755},[143,46871,31751],{"class":149},[143,46873,31754],{"class":6116},[143,46875,160],{"class":755},[143,46877,42458],{"class":149},[143,46879,31763],{"class":6116},[143,46881,160],{"class":755},[143,46883,42502],{"class":149},[143,46885,1234],{"class":280},[143,46887,42507],{"class":149},[143,46889,31772],{"class":6116},[143,46891,160],{"class":755},[143,46893,771],{"class":280},[143,46895,1055],{"class":149},[143,46897,46898,46900,46902,46904,46906,46908,46910,46912,46914,46916,46918,46920,46922,46924,46926,46928,46930,46932,46934,46936,46938,46940],{"class":145,"line":2524},[143,46899,31743],{"class":280},[143,46901,42522],{"class":149},[143,46903,160],{"class":755},[143,46905,31751],{"class":149},[143,46907,31754],{"class":6116},[143,46909,160],{"class":755},[143,46911,42502],{"class":149},[143,46913,1234],{"class":280},[143,46915,42507],{"class":149},[143,46917,31763],{"class":6116},[143,46919,160],{"class":755},[143,46921,42502],{"class":149},[143,46923,771],{"class":280},[143,46925,42507],{"class":149},[143,46927,31772],{"class":6116},[143,46929,160],{"class":755},[143,46931,1116],{"class":280},[143,46933,1419],{"class":149},[143,46935,31781],{"class":6116},[143,46937,160],{"class":755},[143,46939,771],{"class":280},[143,46941,1055],{"class":149},[143,46943,46944],{"class":145,"line":2529},[143,46945,42567],{"class":266},[143,46947,46948,46950,46952,46954,46956,46958,46960,46962,46964,46966,46968,46970,46972,46974,46976,46978],{"class":145,"line":2543},[143,46949,31743],{"class":280},[143,46951,42574],{"class":149},[143,46953,160],{"class":755},[143,46955,31751],{"class":149},[143,46957,31754],{"class":6116},[143,46959,160],{"class":755},[143,46961,42458],{"class":149},[143,46963,31763],{"class":6116},[143,46965,160],{"class":755},[143,46967,42591],{"class":149},[143,46969,1234],{"class":280},[143,46971,42507],{"class":149},[143,46973,31772],{"class":6116},[143,46975,160],{"class":755},[143,46977,771],{"class":280},[143,46979,1055],{"class":149},[143,46981,46982,46984,46986,46988,46990,46992,46994,46996,46998,47000,47002,47004,47006,47008,47010,47012,47014,47016,47018,47020,47022,47024],{"class":145,"line":2548},[143,46983,31743],{"class":280},[143,46985,42610],{"class":149},[143,46987,160],{"class":755},[143,46989,31751],{"class":149},[143,46991,31754],{"class":6116},[143,46993,160],{"class":755},[143,46995,42591],{"class":149},[143,46997,1234],{"class":280},[143,46999,42507],{"class":149},[143,47001,31763],{"class":6116},[143,47003,160],{"class":755},[143,47005,42591],{"class":149},[143,47007,771],{"class":280},[143,47009,42507],{"class":149},[143,47011,31772],{"class":6116},[143,47013,160],{"class":755},[143,47015,1360],{"class":280},[143,47017,1419],{"class":149},[143,47019,31781],{"class":6116},[143,47021,160],{"class":755},[143,47023,1122],{"class":280},[143,47025,1055],{"class":149},[143,47027,47028],{"class":145,"line":2554},[143,47029,42655],{"class":266},[143,47031,47032],{"class":145,"line":2575},[143,47033,42660],{"class":266},[143,47035,47036,47038,47040,47042,47044,47046,47048,47050,47052,47054,47056,47058,47060,47062,47064,47066],{"class":145,"line":2580},[143,47037,31743],{"class":280},[143,47039,42667],{"class":149},[143,47041,160],{"class":755},[143,47043,35727],{"class":149},[143,47045,31772],{"class":6116},[143,47047,160],{"class":755},[143,47049,1116],{"class":280},[143,47051,1419],{"class":149},[143,47053,31827],{"class":6116},[143,47055,160],{"class":755},[143,47057,771],{"class":280},[143,47059,1419],{"class":149},[143,47061,31781],{"class":6116},[143,47063,160],{"class":755},[143,47065,771],{"class":280},[143,47067,1055],{"class":149},[143,47069,47070,47072,47074,47076,47078,47080,47082,47084,47086,47088,47090,47092,47094,47096],{"class":145,"line":2594},[143,47071,31743],{"class":280},[143,47073,42702],{"class":149},[143,47075,160],{"class":755},[143,47077,31751],{"class":149},[143,47079,31754],{"class":6116},[143,47081,160],{"class":755},[143,47083,42458],{"class":149},[143,47085,31763],{"class":6116},[143,47087,160],{"class":755},[143,47089,42719],{"class":149},[143,47091,31772],{"class":6116},[143,47093,160],{"class":755},[143,47095,771],{"class":280},[143,47097,1055],{"class":149},[143,47099,47100],{"class":145,"line":2599},[143,47101,3300],{"emptyLinePlaceholder":976},[143,47103,47104,47106,47108],{"class":145,"line":2628},[143,47105,31699],{"class":755},[143,47107,31991],{"class":156},[143,47109,31994],{"class":149},[143,47111,47112,47114,47116,47118,47120,47122],{"class":145,"line":2633},[143,47113,42744],{"class":149},[143,47115,160],{"class":755},[143,47117,31721],{"class":280},[143,47119,36082],{"class":149},[143,47121,31721],{"class":280},[143,47123,42755],{"class":149},[143,47125,47126,47128,47130,47132,47134,47136,47138,47140,47142,47144],{"class":145,"line":2650},[143,47127,7985],{"class":149},[143,47129,160],{"class":755},[143,47131,31721],{"class":280},[143,47133,36082],{"class":149},[143,47135,31721],{"class":280},[143,47137,42770],{"class":149},[143,47139,31721],{"class":280},[143,47141,36082],{"class":149},[143,47143,31721],{"class":280},[143,47145,42779],{"class":149},[143,47147,47148,47150,47152,47154,47156,47158,47160,47162,47164,47166],{"class":145,"line":2655},[143,47149,42784],{"class":149},[143,47151,160],{"class":755},[143,47153,31721],{"class":280},[143,47155,36082],{"class":149},[143,47157,31721],{"class":280},[143,47159,42795],{"class":149},[143,47161,31721],{"class":280},[143,47163,36082],{"class":149},[143,47165,31721],{"class":280},[143,47167,42804],{"class":149},[143,47169,47170,47172,47174,47176,47178,47180,47182,47184],{"class":145,"line":2660},[143,47171,42809],{"class":149},[143,47173,160],{"class":755},[143,47175,31721],{"class":280},[143,47177,36082],{"class":149},[143,47179,31721],{"class":280},[143,47181,42820],{"class":149},[143,47183,31721],{"class":280},[143,47185,42825],{"class":149},[143,47187,47188],{"class":145,"line":2665},[143,47189,42830],{"class":266},[143,47191,47192,47194,47196,47198,47200,47202],{"class":145,"line":2679},[143,47193,15651],{"class":755},[143,47195,42837],{"class":149},[143,47197,33583],{"class":6116},[143,47199,160],{"class":755},[143,47201,771],{"class":280},[143,47203,1055],{"class":149},[143,47205,47206],{"class":145,"line":2684},[143,47207,3300],{"emptyLinePlaceholder":976},[143,47209,47210],{"class":145,"line":3477},[143,47211,42858],{"class":266},[143,47213,47214,47216,47218,47220,47222,47224,47226],{"class":145,"line":3491},[143,47215,15593],{"class":755},[143,47217,42865],{"class":156},[143,47219,1049],{"class":149},[143,47221,31676],{"class":156},[143,47223,1599],{"class":149},[143,47225,31681],{"class":156},[143,47227,31684],{"class":149},[143,47229,47230],{"class":145,"line":3499},[143,47231,42880],{"class":266},[143,47233,47234,47236,47238],{"class":145,"line":3504},[143,47235,31699],{"class":755},[143,47237,31702],{"class":280},[143,47239,42889],{"class":149},[143,47241,47242,47244,47246,47248,47250,47252],{"class":145,"line":3510},[143,47243,31715],{"class":280},[143,47245,42896],{"class":149},[143,47247,31721],{"class":280},[143,47249,31724],{"class":149},[143,47251,31727],{"class":280},[143,47253,2876],{"class":149},[143,47255,47256,47258,47260,47262],{"class":145,"line":3516},[143,47257,31743],{"class":280},[143,47259,42911],{"class":149},[143,47261,160],{"class":755},[143,47263,38907],{"class":149},[143,47265,47266,47268,47270,47272,47274,47276,47278,47280,47282,47284,47286,47288,47290,47292,47294,47296,47298,47300,47302,47304,47306],{"class":145,"line":3521},[143,47267,38912],{"class":149},[143,47269,31754],{"class":6116},[143,47271,160],{"class":755},[143,47273,1116],{"class":280},[143,47275,1419],{"class":149},[143,47277,31763],{"class":6116},[143,47279,160],{"class":755},[143,47281,1246],{"class":280},[143,47283,1419],{"class":149},[143,47285,31772],{"class":6116},[143,47287,160],{"class":755},[143,47289,1410],{"class":280},[143,47291,1419],{"class":149},[143,47293,31827],{"class":6116},[143,47295,160],{"class":755},[143,47297,1122],{"class":280},[143,47299,1419],{"class":149},[143,47301,31781],{"class":6116},[143,47303,160],{"class":755},[143,47305,1116],{"class":280},[143,47307,38945],{"class":149},[143,47309,47310],{"class":145,"line":8848},[143,47311,38950],{"class":149},[143,47313,47314,47316,47318,47320,47322,47324,47326,47328,47330,47332,47334,47336,47338],{"class":145,"line":8872},[143,47315,38995],{"class":149},[143,47317,31772],{"class":6116},[143,47319,160],{"class":755},[143,47321,1116],{"class":280},[143,47323,1419],{"class":149},[143,47325,31827],{"class":6116},[143,47327,160],{"class":755},[143,47329,1122],{"class":280},[143,47331,1419],{"class":149},[143,47333,31781],{"class":6116},[143,47335,160],{"class":755},[143,47337,771],{"class":280},[143,47339,1055],{"class":149},[143,47341,47342],{"class":145,"line":8877},[143,47343,39024],{"class":149},[143,47345,47346,47348,47350,47352],{"class":145,"line":8883},[143,47347,31743],{"class":280},[143,47349,43002],{"class":149},[143,47351,160],{"class":755},[143,47353,38907],{"class":149},[143,47355,47356,47358,47360,47362,47364,47366,47368,47370,47372,47374,47376,47378,47380],{"class":145,"line":8910},[143,47357,38912],{"class":149},[143,47359,31754],{"class":6116},[143,47361,160],{"class":755},[143,47363,1246],{"class":280},[143,47365,1419],{"class":149},[143,47367,31763],{"class":6116},[143,47369,160],{"class":755},[143,47371,1246],{"class":280},[143,47373,1419],{"class":149},[143,47375,31772],{"class":6116},[143,47377,160],{"class":755},[143,47379,771],{"class":280},[143,47381,38945],{"class":149},[143,47383,47384],{"class":145,"line":8915},[143,47385,38950],{"class":149},[143,47387,47388,47390,47392,47394,47396,47398,47400,47402,47404,47406,47408,47410,47412,47414,47416,47418,47420],{"class":145,"line":8921},[143,47389,38912],{"class":149},[143,47391,31754],{"class":6116},[143,47393,160],{"class":755},[143,47395,1246],{"class":280},[143,47397,1419],{"class":149},[143,47399,31763],{"class":6116},[143,47401,160],{"class":755},[143,47403,43057],{"class":280},[143,47405,1419],{"class":149},[143,47407,31772],{"class":6116},[143,47409,160],{"class":755},[143,47411,1116],{"class":280},[143,47413,1419],{"class":149},[143,47415,31781],{"class":6116},[143,47417,160],{"class":755},[143,47419,771],{"class":280},[143,47421,38945],{"class":149},[143,47423,47424],{"class":145,"line":8933},[143,47425,38950],{"class":149},[143,47427,47428,47430,47432,47434,47436,47438,47440,47442,47444,47446,47448,47450,47452],{"class":145,"line":8945},[143,47429,38995],{"class":149},[143,47431,31772],{"class":6116},[143,47433,160],{"class":755},[143,47435,1116],{"class":280},[143,47437,1419],{"class":149},[143,47439,31827],{"class":6116},[143,47441,160],{"class":755},[143,47443,1122],{"class":280},[143,47445,1419],{"class":149},[143,47447,31781],{"class":6116},[143,47449,160],{"class":755},[143,47451,771],{"class":280},[143,47453,1055],{"class":149},[143,47455,47456],{"class":145,"line":8957},[143,47457,39024],{"class":149},[143,47459,47460,47462,47464,47466],{"class":145,"line":10616},[143,47461,31743],{"class":280},[143,47463,43118],{"class":149},[143,47465,160],{"class":755},[143,47467,38907],{"class":149},[143,47469,47470,47472,47474,47476,47478,47480,47482,47484,47486,47488,47490,47492,47494,47496,47498],{"class":145,"line":10641},[143,47471,43127],{"class":149},[143,47473,43057],{"class":280},[143,47475,1419],{"class":149},[143,47477,1246],{"class":280},[143,47479,43136],{"class":149},[143,47481,1252],{"class":280},[143,47483,1419],{"class":149},[143,47485,32968],{"class":280},[143,47487,43145],{"class":149},[143,47489,1642],{"class":280},[143,47491,1419],{"class":149},[143,47493,1240],{"class":280},[143,47495,43154],{"class":149},[143,47497,1240],{"class":280},[143,47499,38945],{"class":149},[143,47501,47502,47504,47506,47508,47510,47512,47514,47516,47518,47520,47522,47524,47526,47528,47530],{"class":145,"line":10664},[143,47503,43127],{"class":149},[143,47505,35768],{"class":280},[143,47507,1419],{"class":149},[143,47509,32968],{"class":280},[143,47511,43136],{"class":149},[143,47513,32968],{"class":280},[143,47515,1419],{"class":149},[143,47517,43057],{"class":280},[143,47519,43145],{"class":149},[143,47521,1240],{"class":280},[143,47523,1419],{"class":149},[143,47525,1252],{"class":280},[143,47527,43154],{"class":149},[143,47529,1246],{"class":280},[143,47531,38945],{"class":149},[143,47533,47534,47536,47538,47540,47542,47544,47546,47548,47550,47552,47554,47556,47558],{"class":145,"line":10688},[143,47535,38995],{"class":149},[143,47537,31772],{"class":6116},[143,47539,160],{"class":755},[143,47541,1116],{"class":280},[143,47543,1419],{"class":149},[143,47545,31827],{"class":6116},[143,47547,160],{"class":755},[143,47549,1122],{"class":280},[143,47551,1419],{"class":149},[143,47553,31781],{"class":6116},[143,47555,160],{"class":755},[143,47557,771],{"class":280},[143,47559,1055],{"class":149},[143,47561,47562],{"class":145,"line":10693},[143,47563,39024],{"class":149},[143,47565,47566,47568,47570,47572],{"class":145,"line":10698},[143,47567,31743],{"class":280},[143,47569,43229],{"class":149},[143,47571,160],{"class":755},[143,47573,38907],{"class":149},[143,47575,47576,47578,47580,47582,47584,47586,47588,47590,47592,47594,47596,47598,47600,47602,47604],{"class":145,"line":10703},[143,47577,43127],{"class":149},[143,47579,43240],{"class":280},[143,47581,1419],{"class":149},[143,47583,43057],{"class":280},[143,47585,43136],{"class":149},[143,47587,1252],{"class":280},[143,47589,1419],{"class":149},[143,47591,43253],{"class":280},[143,47593,43145],{"class":149},[143,47595,1642],{"class":280},[143,47597,1419],{"class":149},[143,47599,1648],{"class":280},[143,47601,43154],{"class":149},[143,47603,1246],{"class":280},[143,47605,38945],{"class":149},[143,47607,47608,47610,47612,47614,47616,47618,47620,47622,47624,47626,47628,47630,47632,47634,47636],{"class":145,"line":10712},[143,47609,43127],{"class":149},[143,47611,39355],{"class":280},[143,47613,1419],{"class":149},[143,47615,21946],{"class":280},[143,47617,43136],{"class":149},[143,47619,1659],{"class":280},[143,47621,1419],{"class":149},[143,47623,32399],{"class":280},[143,47625,43145],{"class":149},[143,47627,1841],{"class":280},[143,47629,1419],{"class":149},[143,47631,1246],{"class":280},[143,47633,43154],{"class":149},[143,47635,1246],{"class":280},[143,47637,38945],{"class":149},[143,47639,47640,47642,47644,47646,47648,47650,47652,47654,47656,47658,47660,47662,47664,47666,47668],{"class":145,"line":10717},[143,47641,43127],{"class":149},[143,47643,39355],{"class":280},[143,47645,1419],{"class":149},[143,47647,32968],{"class":280},[143,47649,43136],{"class":149},[143,47651,32968],{"class":280},[143,47653,1419],{"class":149},[143,47655,35768],{"class":280},[143,47657,43145],{"class":149},[143,47659,1841],{"class":280},[143,47661,1419],{"class":149},[143,47663,1246],{"class":280},[143,47665,43154],{"class":149},[143,47667,1246],{"class":280},[143,47669,38945],{"class":149},[143,47671,47672,47674,47676,47678,47680,47682,47684,47686,47688,47690,47692,47694,47696,47698,47700],{"class":145,"line":10723},[143,47673,43127],{"class":149},[143,47675,39355],{"class":280},[143,47677,1419],{"class":149},[143,47679,1659],{"class":280},[143,47681,43136],{"class":149},[143,47683,32968],{"class":280},[143,47685,1419],{"class":149},[143,47687,43350],{"class":280},[143,47689,43145],{"class":149},[143,47691,1240],{"class":280},[143,47693,1419],{"class":149},[143,47695,1246],{"class":280},[143,47697,43154],{"class":149},[143,47699,1246],{"class":280},[143,47701,38945],{"class":149},[143,47703,47704,47706,47708,47710,47712,47714,47716,47718,47720,47722,47724,47726,47728,47730,47732],{"class":145,"line":10744},[143,47705,43127],{"class":149},[143,47707,43371],{"class":280},[143,47709,1419],{"class":149},[143,47711,35768],{"class":280},[143,47713,43136],{"class":149},[143,47715,21946],{"class":280},[143,47717,1419],{"class":149},[143,47719,43384],{"class":280},[143,47721,43145],{"class":149},[143,47723,1240],{"class":280},[143,47725,1419],{"class":149},[143,47727,32968],{"class":280},[143,47729,43154],{"class":149},[143,47731,32968],{"class":280},[143,47733,38945],{"class":149},[143,47735,47736,47738,47740,47742,47744,47746,47748,47750,47752,47754,47756,47758,47760],{"class":145,"line":10750},[143,47737,38995],{"class":149},[143,47739,31772],{"class":6116},[143,47741,160],{"class":755},[143,47743,1116],{"class":280},[143,47745,1419],{"class":149},[143,47747,31827],{"class":6116},[143,47749,160],{"class":755},[143,47751,1122],{"class":280},[143,47753,1419],{"class":149},[143,47755,31781],{"class":6116},[143,47757,160],{"class":755},[143,47759,771],{"class":280},[143,47761,1055],{"class":149},[143,47763,47764],{"class":145,"line":10764},[143,47765,39024],{"class":149},[143,47767,47768,47770,47772,47774],{"class":145,"line":10770},[143,47769,31743],{"class":280},[143,47771,43437],{"class":149},[143,47773,160],{"class":755},[143,47775,38907],{"class":149},[143,47777,47778,47780,47782,47784,47786,47788,47790,47792,47794,47796,47798,47800,47802,47804,47806],{"class":145,"line":10797},[143,47779,43127],{"class":149},[143,47781,43448],{"class":280},[143,47783,1419],{"class":149},[143,47785,35768],{"class":280},[143,47787,43136],{"class":149},[143,47789,21946],{"class":280},[143,47791,1419],{"class":149},[143,47793,43384],{"class":280},[143,47795,43145],{"class":149},[143,47797,1240],{"class":280},[143,47799,1419],{"class":149},[143,47801,32968],{"class":280},[143,47803,43154],{"class":149},[143,47805,32968],{"class":280},[143,47807,38945],{"class":149},[143,47809,47810,47812,47814,47816,47818,47820,47822,47824,47826,47828,47830,47832,47834,47836,47838],{"class":145,"line":10806},[143,47811,43127],{"class":149},[143,47813,43448],{"class":280},[143,47815,1419],{"class":149},[143,47817,35838],{"class":280},[143,47819,43136],{"class":149},[143,47821,43057],{"class":280},[143,47823,1419],{"class":149},[143,47825,35838],{"class":280},[143,47827,43145],{"class":149},[143,47829,1648],{"class":280},[143,47831,1419],{"class":149},[143,47833,32968],{"class":280},[143,47835,43154],{"class":149},[143,47837,32968],{"class":280},[143,47839,38945],{"class":149},[143,47841,47842,47844,47846,47848,47850],{"class":145,"line":10812},[143,47843,43511],{"class":149},[143,47845,771],{"class":280},[143,47847,1419],{"class":149},[143,47849,771],{"class":280},[143,47851,43520],{"class":149},[143,47853,47854],{"class":145,"line":10820},[143,47855,39688],{"class":149},[143,47857,47858,47860,47862,47864,47866],{"class":145,"line":10825},[143,47859,39693],{"class":149},[143,47861,43531],{"class":280},[143,47863,1419],{"class":149},[143,47865,1122],{"class":280},[143,47867,1055],{"class":149},[143,47869,47870],{"class":145,"line":17502},[143,47871,39024],{"class":149},[143,47873,47874],{"class":145,"line":17508},[143,47875,43546],{"class":266},[143,47877,47878,47880,47882,47884,47886],{"class":145,"line":17531},[143,47879,4303],{"class":755},[143,47881,39766],{"class":149},[143,47883,26941],{"class":755},[143,47885,39771],{"class":280},[143,47887,39774],{"class":149},[143,47889,47890,47892,47894],{"class":145,"line":17537},[143,47891,5542],{"class":755},[143,47893,39786],{"class":280},[143,47895,39789],{"class":149},[143,47897,47898,47900,47902,47904,47906,47908,47910,47912,47914],{"class":145,"line":17560},[143,47899,39799],{"class":149},[143,47901,43573],{"class":6116},[143,47903,160],{"class":755},[143,47905,43578],{"class":163},[143,47907,1419],{"class":149},[143,47909,39802],{"class":6116},[143,47911,160],{"class":755},[143,47913,39807],{"class":163},[143,47915,1055],{"class":149},[143,47917,47918],{"class":145,"line":17574},[143,47919,43593],{"class":266},[143,47921,47922],{"class":145,"line":17594},[143,47923,43598],{"class":266},[143,47925,47926],{"class":145,"line":17600},[143,47927,43603],{"class":266},[143,47929,47930],{"class":145,"line":17611},[143,47931,43608],{"class":266},[143,47933,47934],{"class":145,"line":17634},[143,47935,43613],{"class":266},[143,47937,47938],{"class":145,"line":17656},[143,47939,43618],{"class":266},[143,47941,47942,47944,47946,47948,47950,47952],{"class":145,"line":17661},[143,47943,39819],{"class":755},[143,47945,39822],{"class":149},[143,47947,39825],{"class":755},[143,47949,39828],{"class":755},[143,47951,39831],{"class":280},[143,47953,4639],{"class":149},[143,47955,47956,47958,47960],{"class":145,"line":17667},[143,47957,39843],{"class":149},[143,47959,1234],{"class":280},[143,47961,1055],{"class":149},[143,47963,47964,47966,47968],{"class":145,"line":17681},[143,47965,43645],{"class":755},[143,47967,39786],{"class":280},[143,47969,39862],{"class":149},[143,47971,47972,47974,47976,47978,47980],{"class":145,"line":17694},[143,47973,43654],{"class":149},[143,47975,1234],{"class":280},[143,47977,1419],{"class":149},[143,47979,39884],{"class":280},[143,47981,1055],{"class":149},[143,47983,47984,47986,47988,47990,47992,47994],{"class":145,"line":17699},[143,47985,43667],{"class":755},[143,47987,39822],{"class":149},[143,47989,39825],{"class":755},[143,47991,39828],{"class":755},[143,47993,39831],{"class":280},[143,47995,4639],{"class":149},[143,47997,47998,48000,48002],{"class":145,"line":17713},[143,47999,43682],{"class":149},[143,48001,1234],{"class":280},[143,48003,1055],{"class":149},[143,48005,48006],{"class":145,"line":17718},[143,48007,36063],{"class":266},[143,48009,48010,48012,48014],{"class":145,"line":17724},[143,48011,31699],{"class":755},[143,48013,31991],{"class":156},[143,48015,31994],{"class":149},[143,48017,48018,48020,48022,48024],{"class":145,"line":17729},[143,48019,31999],{"class":149},[143,48021,160],{"class":755},[143,48023,31721],{"class":280},[143,48025,43709],{"class":149},[143,48027,48028,48030,48032,48034],{"class":145,"line":17743},[143,48029,31999],{"class":149},[143,48031,160],{"class":755},[143,48033,31721],{"class":280},[143,48035,43720],{"class":149},[143,48037,48038,48040,48042,48044],{"class":145,"line":17748},[143,48039,31999],{"class":149},[143,48041,160],{"class":755},[143,48043,31721],{"class":280},[143,48045,43731],{"class":149},[143,48047,48048,48050,48052,48054],{"class":145,"line":17753},[143,48049,31999],{"class":149},[143,48051,160],{"class":755},[143,48053,31721],{"class":280},[143,48055,43742],{"class":149},[143,48057,48058,48060,48062,48064],{"class":145,"line":17767},[143,48059,31999],{"class":149},[143,48061,160],{"class":755},[143,48063,31721],{"class":280},[143,48065,43753],{"class":149},[143,48067,48068,48070],{"class":145,"line":17779},[143,48069,15651],{"class":755},[143,48071,32107],{"class":149},[143,48073,48074],{"class":145,"line":17784},[143,48075,3300],{"emptyLinePlaceholder":976},[143,48077,48078],{"class":145,"line":17797},[143,48079,43768],{"class":266},[143,48081,48082,48084,48086,48088,48090],{"class":145,"line":17802},[143,48083,2434],{"class":755},[143,48085,32118],{"class":280},[143,48087,3849],{"class":755},[143,48089,32123],{"class":163},[143,48091,4639],{"class":149},[143,48093,48094,48096,48098,48100,48102,48104,48106,48108,48110],{"class":145,"line":17807},[143,48095,32135],{"class":149},[143,48097,160],{"class":755},[143,48099,31349],{"class":149},[143,48101,32142],{"class":163},[143,48103,2605],{"class":755},[143,48105,32147],{"class":149},[143,48107,2602],{"class":755},[143,48109,31374],{"class":163},[143,48111,1055],{"class":149},[143,48113,48114,48116,48118],{"class":145,"line":17812},[143,48115,32187],{"class":149},[143,48117,160],{"class":755},[143,48119,43809],{"class":149},[143,48121,48122,48124,48126,48128,48130,48132,48134,48136],{"class":145,"line":17825},[143,48123,32197],{"class":280},[143,48125,32200],{"class":149},[143,48127,771],{"class":280},[143,48129,1419],{"class":149},[143,48131,32399],{"class":280},[143,48133,1419],{"class":149},[143,48135,32399],{"class":280},[143,48137,32213],{"class":149},[22896,48139,48141],{"id":48140},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[63,48143,48144],{},"计算图片的均值与方差，用于训练中归一化处理操作",[133,48146,48148],{"className":31276,"code":48147,"language":31278,"meta":138,"style":138},"# 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",[140,48149,48150,48155,48168,48173,48179,48184,48194,48198,48203,48213,48217,48222,48232,48249,48253,48258,48270,48282,48313,48322,48332,48342,48346,48351,48366,48370,48375,48380,48385,48395,48400,48425,48429,48434,48449,48453,48466,48470,48475,48480,48485,48490,48495,48505,48515,48538,48546,48554,48562,48566,48578,48582,48587,48591,48595,48602,48622,48646,48653,48667,48672,48677,48681,48695,48699,48711],{"__ignoreMap":138},[143,48151,48152],{"class":145,"line":146},[143,48153,48154],{"class":266},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[143,48156,48157,48159,48162,48165],{"class":145,"line":35},[143,48158,31635],{"class":755},[143,48160,48161],{"class":280}," PIL",[143,48163,48164],{"class":755}," import",[143,48166,48167],{"class":149}," Image\n",[143,48169,48170],{"class":145,"line":46},[143,48171,48172],{"class":266},"# os 用来处理文件夹和文件路径\n",[143,48174,48175,48177],{"class":145,"line":293},[143,48176,31290],{"class":755},[143,48178,46203],{"class":149},[143,48180,48181],{"class":145,"line":306},[143,48182,48183],{"class":266},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[143,48185,48186,48188,48190,48192],{"class":145,"line":319},[143,48187,31290],{"class":755},[143,48189,32278],{"class":149},[143,48191,32281],{"class":755},[143,48193,32284],{"class":149},[143,48195,48196],{"class":145,"line":332},[143,48197,3300],{"emptyLinePlaceholder":976},[143,48199,48200],{"class":145,"line":345},[143,48201,48202],{"class":266},"# 文件夹路径，包含所有图片文件\n",[143,48204,48205,48208,48210],{"class":145,"line":701},[143,48206,48207],{"class":149},"folder_path ",[143,48209,160],{"class":755},[143,48211,48212],{"class":163}," 'data_cat_dog'\n",[143,48214,48215],{"class":145,"line":707},[143,48216,3300],{"emptyLinePlaceholder":976},[143,48218,48219],{"class":145,"line":727},[143,48220,48221],{"class":266},"# 初始化累积变量\n",[143,48223,48224,48227,48229],{"class":145,"line":2518},[143,48225,48226],{"class":149},"total_pixels ",[143,48228,160],{"class":755},[143,48230,48231],{"class":280}," 0\n",[143,48233,48234,48237,48239,48242,48244,48246],{"class":145,"line":2524},[143,48235,48236],{"class":149},"sum_normalized_pixel_values ",[143,48238,160],{"class":755},[143,48240,48241],{"class":149}," np.zeros(",[143,48243,1116],{"class":280},[143,48245,46706],{"class":149},[143,48247,48248],{"class":266},"# 如果是RGB图像，需要三个通道的均值和方差\n",[143,48250,48251],{"class":145,"line":2529},[143,48252,3300],{"emptyLinePlaceholder":976},[143,48254,48255],{"class":145,"line":2543},[143,48256,48257],{"class":266},"# 遍历文件夹中的图片文件\n",[143,48259,48260,48262,48265,48267],{"class":145,"line":2548},[143,48261,3925],{"class":755},[143,48263,48264],{"class":149}," root, dirs, files ",[143,48266,26941],{"class":755},[143,48268,48269],{"class":149}," os.walk(folder_path):\n",[143,48271,48272,48274,48277,48279],{"class":145,"line":2554},[143,48273,4101],{"class":755},[143,48275,48276],{"class":149}," filename ",[143,48278,26941],{"class":755},[143,48280,48281],{"class":149}," files:\n",[143,48283,48284,48286,48289,48292,48294,48297,48299,48302,48304,48307,48310],{"class":145,"line":2575},[143,48285,3397],{"class":755},[143,48287,48288],{"class":149}," filename.endswith((",[143,48290,48291],{"class":163},"'.jpg'",[143,48293,13335],{"class":149},[143,48295,48296],{"class":163},"'.jpeg'",[143,48298,13335],{"class":149},[143,48300,48301],{"class":163},"'.png'",[143,48303,13335],{"class":149},[143,48305,48306],{"class":163},"'.bmp'",[143,48308,48309],{"class":149},")):  ",[143,48311,48312],{"class":266},"# 可根据实际情况添加其他格式\n",[143,48314,48315,48317,48319],{"class":145,"line":2580},[143,48316,46571],{"class":149},[143,48318,160],{"class":755},[143,48320,48321],{"class":149}," os.path.join(root, filename)\n",[143,48323,48324,48327,48329],{"class":145,"line":2594},[143,48325,48326],{"class":149},"            image ",[143,48328,160],{"class":755},[143,48330,48331],{"class":149}," Image.open(image_path)\n",[143,48333,48334,48337,48339],{"class":145,"line":2599},[143,48335,48336],{"class":149},"            image_array ",[143,48338,160],{"class":755},[143,48340,48341],{"class":149}," np.array(image)\n",[143,48343,48344],{"class":145,"line":2628},[143,48345,3300],{"emptyLinePlaceholder":976},[143,48347,48348],{"class":145,"line":2633},[143,48349,48350],{"class":266},"            # 归一化像素值到0-1之间\n",[143,48352,48353,48356,48358,48361,48363],{"class":145,"line":2650},[143,48354,48355],{"class":149},"            normalized_image_array ",[143,48357,160],{"class":755},[143,48359,48360],{"class":149}," image_array ",[143,48362,1625],{"class":755},[143,48364,48365],{"class":280}," 255.0\n",[143,48367,48368],{"class":145,"line":2655},[143,48369,3300],{"emptyLinePlaceholder":976},[143,48371,48372],{"class":145,"line":2660},[143,48373,48374],{"class":266},"            # print(image_path)\n",[143,48376,48377],{"class":145,"line":2665},[143,48378,48379],{"class":266},"            # print(normalized_image_array.shape)\n",[143,48381,48382],{"class":145,"line":2679},[143,48383,48384],{"class":266},"            # 累积归一化后的像素值和像素数量\n",[143,48386,48387,48390,48392],{"class":145,"line":2684},[143,48388,48389],{"class":149},"            total_pixels ",[143,48391,10377],{"class":755},[143,48393,48394],{"class":149}," normalized_image_array.size\n",[143,48396,48397],{"class":145,"line":3477},[143,48398,48399],{"class":266},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[143,48401,48402,48405,48407,48410,48413,48415,48417,48419,48421,48423],{"class":145,"line":3491},[143,48403,48404],{"class":149},"            sum_normalized_pixel_values ",[143,48406,10377],{"class":755},[143,48408,48409],{"class":149}," np.sum(normalized_image_array, ",[143,48411,48412],{"class":6116},"axis",[143,48414,160],{"class":755},[143,48416,1049],{"class":149},[143,48418,1234],{"class":280},[143,48420,13335],{"class":149},[143,48422,771],{"class":280},[143,48424,31395],{"class":149},[143,48426,48427],{"class":145,"line":3499},[143,48428,3300],{"emptyLinePlaceholder":976},[143,48430,48431],{"class":145,"line":3504},[143,48432,48433],{"class":266},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[143,48435,48436,48439,48441,48444,48446],{"class":145,"line":3510},[143,48437,48438],{"class":149},"mean ",[143,48440,160],{"class":755},[143,48442,48443],{"class":149}," sum_normalized_pixel_values ",[143,48445,1625],{"class":755},[143,48447,48448],{"class":149}," total_pixels\n",[143,48450,48451],{"class":145,"line":3516},[143,48452,3300],{"emptyLinePlaceholder":976},[143,48454,48455,48458,48460,48462,48464],{"class":145,"line":3521},[143,48456,48457],{"class":149},"sum_squared_diff ",[143,48459,160],{"class":755},[143,48461,48241],{"class":149},[143,48463,1116],{"class":280},[143,48465,1055],{"class":149},[143,48467,48468],{"class":145,"line":8848},[143,48469,3300],{"emptyLinePlaceholder":976},[143,48471,48472],{"class":145,"line":8872},[143,48473,48474],{"class":266},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[143,48476,48477],{"class":145,"line":8877},[143,48478,48479],{"class":266},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[143,48481,48482],{"class":145,"line":8883},[143,48483,48484],{"class":266},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[143,48486,48487],{"class":145,"line":8910},[143,48488,48489],{"class":266},"# Image.open(image_path)：打开图片\n",[143,48491,48492],{"class":145,"line":8915},[143,48493,48494],{"class":266},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[143,48496,48497,48499,48501,48503],{"class":145,"line":8921},[143,48498,3925],{"class":755},[143,48500,48264],{"class":149},[143,48502,26941],{"class":755},[143,48504,48269],{"class":149},[143,48506,48507,48509,48511,48513],{"class":145,"line":8933},[143,48508,4101],{"class":755},[143,48510,48276],{"class":149},[143,48512,26941],{"class":755},[143,48514,48281],{"class":149},[143,48516,48517,48519,48521,48523,48525,48527,48529,48531,48533,48535],{"class":145,"line":8945},[143,48518,3397],{"class":755},[143,48520,48288],{"class":149},[143,48522,48291],{"class":163},[143,48524,13335],{"class":149},[143,48526,48296],{"class":163},[143,48528,13335],{"class":149},[143,48530,48301],{"class":163},[143,48532,13335],{"class":149},[143,48534,48306],{"class":163},[143,48536,48537],{"class":149},")):\n",[143,48539,48540,48542,48544],{"class":145,"line":8957},[143,48541,46571],{"class":149},[143,48543,160],{"class":755},[143,48545,48321],{"class":149},[143,48547,48548,48550,48552],{"class":145,"line":10616},[143,48549,48326],{"class":149},[143,48551,160],{"class":755},[143,48553,48331],{"class":149},[143,48555,48556,48558,48560],{"class":145,"line":10641},[143,48557,48336],{"class":149},[143,48559,160],{"class":755},[143,48561,48341],{"class":149},[143,48563,48564],{"class":145,"line":10664},[143,48565,48350],{"class":266},[143,48567,48568,48570,48572,48574,48576],{"class":145,"line":10688},[143,48569,48355],{"class":149},[143,48571,160],{"class":755},[143,48573,48360],{"class":149},[143,48575,1625],{"class":755},[143,48577,48365],{"class":280},[143,48579,48580],{"class":145,"line":10693},[143,48581,48379],{"class":266},[143,48583,48584],{"class":145,"line":10698},[143,48585,48586],{"class":266},"            # print(mean.shape)\n",[143,48588,48589],{"class":145,"line":10703},[143,48590,48374],{"class":266},[143,48592,48593],{"class":145,"line":10712},[143,48594,3300],{"emptyLinePlaceholder":976},[143,48596,48597,48600],{"class":145,"line":10717},[143,48598,48599],{"class":755},"            try",[143,48601,4639],{"class":149},[143,48603,48604,48607,48609,48612,48614,48617,48619],{"class":145,"line":10723},[143,48605,48606],{"class":149},"                diff ",[143,48608,160],{"class":755},[143,48610,48611],{"class":149}," (normalized_image_array ",[143,48613,1573],{"class":755},[143,48615,48616],{"class":149}," mean) ",[143,48618,11561],{"class":755},[143,48620,48621],{"class":280}," 2\n",[143,48623,48624,48627,48629,48632,48634,48636,48638,48640,48642,48644],{"class":145,"line":10744},[143,48625,48626],{"class":149},"                sum_squared_diff ",[143,48628,10377],{"class":755},[143,48630,48631],{"class":149}," np.sum(diff, ",[143,48633,48412],{"class":6116},[143,48635,160],{"class":755},[143,48637,1049],{"class":149},[143,48639,1234],{"class":280},[143,48641,13335],{"class":149},[143,48643,771],{"class":280},[143,48645,31395],{"class":149},[143,48647,48648,48651],{"class":145,"line":10750},[143,48649,48650],{"class":755},"            except",[143,48652,4639],{"class":149},[143,48654,48655,48658,48660,48662,48665],{"class":145,"line":10764},[143,48656,48657],{"class":280},"                print",[143,48659,1049],{"class":149},[143,48661,1098],{"class":755},[143,48663,48664],{"class":163},"\"捕获到自定义异常\"",[143,48666,1055],{"class":149},[143,48668,48669],{"class":145,"line":10770},[143,48670,48671],{"class":266},"            # diff = (normalized_image_array - mean) ** 2\n",[143,48673,48674],{"class":145,"line":10797},[143,48675,48676],{"class":266},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[143,48678,48679],{"class":145,"line":10806},[143,48680,3300],{"emptyLinePlaceholder":976},[143,48682,48683,48686,48688,48691,48693],{"class":145,"line":10812},[143,48684,48685],{"class":149},"variance ",[143,48687,160],{"class":755},[143,48689,48690],{"class":149}," sum_squared_diff ",[143,48692,1625],{"class":755},[143,48694,48448],{"class":149},[143,48696,48697],{"class":145,"line":10820},[143,48698,3300],{"emptyLinePlaceholder":976},[143,48700,48701,48703,48705,48708],{"class":145,"line":10825},[143,48702,31313],{"class":280},[143,48704,1049],{"class":149},[143,48706,48707],{"class":163},"\"Mean:\"",[143,48709,48710],{"class":149},", mean)\n",[143,48712,48713,48715,48717,48720],{"class":145,"line":17502},[143,48714,31313],{"class":280},[143,48716,1049],{"class":149},[143,48718,48719],{"class":163},"\"Variance:\"",[143,48721,48722],{"class":149},", variance)\n",[133,48724,48726],{"className":31276,"code":48725,"language":31278,"meta":138,"style":138},"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",[140,48727,48728,48734,48740,48750,48756,48766,48780,48790,48800,48810,48814,48824,48834,48838,48842,48850,48855,48860,48879,48883,48888,48893,48898,48903,48944,48949,48959,48964,48977,48982,48987,48992,48997,49002,49006,49011,49016,49038,49042,49074,49088,49098,49108,49112,49122,49136,49146,49156,49166,49172,49176,49180,49184,49188,49192,49200,49220,49224,49228,49232,49236,49252,49256,49260,49268,49272,49276,49284,49288,49292,49296,49304,49308,49312,49316,49324,49328,49336,49340,49348,49352,49360,49364,49372,49376,49380,49388,49392,49396,49408,49432,49446,49450,49454,49458,49466,49470,49478,49482,49490,49494,49502,49506,49514,49518,49526,49530,49542,49546,49554,49558,49566,49570,49574,49578,49582,49590,49594,49610,49614,49622,49626,49630,49634,49638,49642,49646,49650,49666,49670,49682,49686,49698,49702,49714,49718,49726,49730,49738,49742,49746,49750,49756,49760,49768,49772,49788,49792,49800,49804,49820,49832,49836,49848,49852,49856,49864,49868,49872,49880,49884,49892,49896,49904,49908,49912,49954,49996,50000,50004,50020,50024,50040,50044,50048,50056,50060,50064,50076,50114,50118,50122,50130,50134,50148,50158,50164,50170,50176,50182,50186,50190,50196,50200,50204,50212,50216,50234,50238,50242,50246,50262,50266,50270,50274,50278,50282,50302,50322,50326,50330,50334,50342,50350,50354,50370,50390,50410,50414,50419,50428,50437,50442,50447,50452,50465,50470,50479,50488,50505],{"__ignoreMap":138},[143,48729,48730,48732],{"class":145,"line":146},[143,48731,31290],{"class":755},[143,48733,32720],{"class":149},[143,48735,48736,48738],{"class":145,"line":35},[143,48737,31290],{"class":755},[143,48739,32727],{"class":149},[143,48741,48742,48744,48746,48748],{"class":145,"line":46},[143,48743,31290],{"class":755},[143,48745,32738],{"class":149},[143,48747,32281],{"class":755},[143,48749,32743],{"class":149},[143,48751,48752,48754],{"class":145,"line":293},[143,48753,31290],{"class":755},[143,48755,31293],{"class":149},[143,48757,48758,48760,48762,48764],{"class":145,"line":306},[143,48759,31635],{"class":755},[143,48761,32313],{"class":149},[143,48763,31290],{"class":755},[143,48765,32760],{"class":149},[143,48767,48768,48770,48772,48774,48777],{"class":145,"line":319},[143,48769,31635],{"class":755},[143,48771,32266],{"class":149},[143,48773,31290],{"class":755},[143,48775,48776],{"class":149}," ImageFolder ",[143,48778,48779],{"class":266},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[143,48781,48782,48784,48786,48788],{"class":145,"line":332},[143,48783,31635],{"class":755},[143,48785,32296],{"class":149},[143,48787,31290],{"class":755},[143,48789,32301],{"class":149},[143,48791,48792,48794,48796,48798],{"class":145,"line":345},[143,48793,31290],{"class":755},[143,48795,32313],{"class":149},[143,48797,32281],{"class":755},[143,48799,32318],{"class":149},[143,48801,48802,48804,48806,48808],{"class":145,"line":701},[143,48803,31290],{"class":755},[143,48805,32330],{"class":149},[143,48807,32281],{"class":755},[143,48809,32335],{"class":149},[143,48811,48812],{"class":145,"line":707},[143,48813,32805],{"class":266},[143,48815,48816,48818,48820,48822],{"class":145,"line":727},[143,48817,31635],{"class":755},[143,48819,32812],{"class":149},[143,48821,31290],{"class":755},[143,48823,43929],{"class":149},[143,48825,48826,48828,48830,48832],{"class":145,"line":2518},[143,48827,31635],{"class":755},[143,48829,31638],{"class":149},[143,48831,31290],{"class":755},[143,48833,31643],{"class":149},[143,48835,48836],{"class":145,"line":2524},[143,48837,3300],{"emptyLinePlaceholder":976},[143,48839,48840],{"class":145,"line":2529},[143,48841,32840],{"class":266},[143,48843,48844,48846,48848],{"class":145,"line":2543},[143,48845,32845],{"class":755},[143,48847,32848],{"class":156},[143,48849,32851],{"class":149},[143,48851,48852],{"class":145,"line":2548},[143,48853,48854],{"class":266},"    # 导入自己的数据集，并进行数据处理\n",[143,48856,48857],{"class":145,"line":2554},[143,48858,48859],{"class":266},"    # 定义数据集的路径\n",[143,48861,48862,48865,48867,48869,48871,48873,48877],{"class":145,"line":2575},[143,48863,48864],{"class":280},"    ROOT_PATH",[143,48866,160],{"class":755},[143,48868,1711],{"class":755},[143,48870,1292],{"class":163},[143,48872,1599],{"class":280},[143,48874,48876],{"class":48875},"sA_wV","\u002Fdata\u002Ftrain",[143,48878,26031],{"class":163},[143,48880,48881],{"class":145,"line":2580},[143,48882,3300],{"emptyLinePlaceholder":976},[143,48884,48885],{"class":145,"line":2594},[143,48886,48887],{"class":266},"    # 定义归一化方法\n",[143,48889,48890],{"class":145,"line":2599},[143,48891,48892],{"class":266},"    # 这里需要先计算一下数据集的均值和方差\n",[143,48894,48895],{"class":145,"line":2628},[143,48896,48897],{"class":266},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[143,48899,48900],{"class":145,"line":2633},[143,48901,48902],{"class":266},"    # 第一个参数是均值，第二个参数是方差\n",[143,48904,48905,48908,48910,48913,48916,48918,48921,48923,48926,48929,48932,48934,48937,48939,48942],{"class":145,"line":2650},[143,48906,48907],{"class":149},"    normalize",[143,48909,160],{"class":755},[143,48911,48912],{"class":149},"transforms.Normalize([",[143,48914,48915],{"class":280},"0.162",[143,48917,1419],{"class":149},[143,48919,48920],{"class":280},"0.151",[143,48922,1419],{"class":149},[143,48924,48925],{"class":280},"0.138",[143,48927,48928],{"class":149},"],[",[143,48930,48931],{"class":280},"0.058",[143,48933,1419],{"class":149},[143,48935,48936],{"class":280},"0.052",[143,48938,1419],{"class":149},[143,48940,48941],{"class":280},"0.048",[143,48943,5557],{"class":149},[143,48945,48946],{"class":145,"line":2655},[143,48947,48948],{"class":266},"    # 定义数据集处理方法变量\n",[143,48950,48951,48954,48956],{"class":145,"line":2660},[143,48952,48953],{"class":149},"    train_transform",[143,48955,160],{"class":755},[143,48957,48958],{"class":149},"transforms.Compose([\n",[143,48960,48961],{"class":145,"line":2665},[143,48962,48963],{"class":266},"        # 调整图像大小为224*224\n",[143,48965,48966,48969,48971,48973,48975],{"class":145,"line":2679},[143,48967,48968],{"class":149},"        transforms.Resize((",[143,48970,32399],{"class":280},[143,48972,1419],{"class":149},[143,48974,32399],{"class":280},[143,48976,43520],{"class":149},[143,48978,48979],{"class":145,"line":2684},[143,48980,48981],{"class":266},"        # 将图像转换为张量\n",[143,48983,48984],{"class":145,"line":3477},[143,48985,48986],{"class":149},"        transforms.ToTensor(),\n",[143,48988,48989],{"class":145,"line":3491},[143,48990,48991],{"class":149},"        normalize])\n",[143,48993,48994],{"class":145,"line":3499},[143,48995,48996],{"class":266},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[143,48998,48999],{"class":145,"line":3504},[143,49000,49001],{"class":266},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[143,49003,49004],{"class":145,"line":3510},[143,49005,3300],{"emptyLinePlaceholder":976},[143,49007,49008],{"class":145,"line":3516},[143,49009,49010],{"class":266},"    # 加载数据集\n",[143,49012,49013],{"class":145,"line":3521},[143,49014,49015],{"class":266},"    # 传入数据集路径与处理方法\n",[143,49017,49018,49020,49022,49025,49028,49030,49033,49035],{"class":145,"line":8848},[143,49019,32856],{"class":149},[143,49021,160],{"class":755},[143,49023,49024],{"class":149},"ImageFolder(",[143,49026,49027],{"class":280},"ROOT_PATH",[143,49029,1419],{"class":149},[143,49031,49032],{"class":6116},"transform",[143,49034,160],{"class":755},[143,49036,49037],{"class":149},"train_transform)\n",[143,49039,49040],{"class":145,"line":8872},[143,49041,3300],{"emptyLinePlaceholder":976},[143,49043,49044,49046,49048,49050,49052,49054,49056,49058,49060,49062,49064,49066,49068,49070,49072],{"class":145,"line":8877},[143,49045,32908],{"class":149},[143,49047,160],{"class":755},[143,49049,32913],{"class":149},[143,49051,32916],{"class":280},[143,49053,1049],{"class":149},[143,49055,32921],{"class":280},[143,49057,1496],{"class":755},[143,49059,8258],{"class":280},[143,49061,32928],{"class":149},[143,49063,32916],{"class":280},[143,49065,1049],{"class":149},[143,49067,32935],{"class":280},[143,49069,1496],{"class":755},[143,49071,8258],{"class":280},[143,49073,32942],{"class":149},[143,49075,49076,49078,49080,49082,49084,49086],{"class":145,"line":8883},[143,49077,32947],{"class":149},[143,49079,160],{"class":755},[143,49081,32952],{"class":149},[143,49083,32435],{"class":6116},[143,49085,160],{"class":755},[143,49087,32440],{"class":149},[143,49089,49090,49092,49094,49096],{"class":145,"line":8910},[143,49091,32963],{"class":6116},[143,49093,160],{"class":755},[143,49095,1240],{"class":280},[143,49097,32364],{"class":149},[143,49099,49100,49102,49104,49106],{"class":145,"line":8915},[143,49101,32975],{"class":6116},[143,49103,160],{"class":755},[143,49105,32374],{"class":280},[143,49107,32364],{"class":149},[143,49109,49110],{"class":145,"line":8921},[143,49111,32986],{"class":266},[143,49113,49114,49116,49118,49120],{"class":145,"line":8933},[143,49115,32991],{"class":6116},[143,49117,160],{"class":755},[143,49119,1436],{"class":280},[143,49121,1055],{"class":149},[143,49123,49124,49126,49128,49130,49132,49134],{"class":145,"line":8945},[143,49125,33002],{"class":149},[143,49127,160],{"class":755},[143,49129,32432],{"class":149},[143,49131,32435],{"class":6116},[143,49133,160],{"class":755},[143,49135,33013],{"class":149},[143,49137,49138,49140,49142,49144],{"class":145,"line":8957},[143,49139,33018],{"class":6116},[143,49141,160],{"class":755},[143,49143,1240],{"class":280},[143,49145,32364],{"class":149},[143,49147,49148,49150,49152,49154],{"class":145,"line":10616},[143,49149,33029],{"class":6116},[143,49151,160],{"class":755},[143,49153,32374],{"class":280},[143,49155,32364],{"class":149},[143,49157,49158,49160,49162,49164],{"class":145,"line":10641},[143,49159,33040],{"class":6116},[143,49161,160],{"class":755},[143,49163,1436],{"class":280},[143,49165,1055],{"class":149},[143,49167,49168,49170],{"class":145,"line":10664},[143,49169,4990],{"class":755},[143,49171,33053],{"class":149},[143,49173,49174],{"class":145,"line":10688},[143,49175,3300],{"emptyLinePlaceholder":976},[143,49177,49178],{"class":145,"line":10693},[143,49179,33062],{"class":266},[143,49181,49182],{"class":145,"line":10698},[143,49183,33067],{"class":266},[143,49185,49186],{"class":145,"line":10703},[143,49187,3300],{"emptyLinePlaceholder":976},[143,49189,49190],{"class":145,"line":10712},[143,49191,33076],{"class":266},[143,49193,49194,49196,49198],{"class":145,"line":10717},[143,49195,32845],{"class":755},[143,49197,33083],{"class":156},[143,49199,33086],{"class":149},[143,49201,49202,49204,49206,49208,49210,49212,49214,49216,49218],{"class":145,"line":10723},[143,49203,32135],{"class":149},[143,49205,160],{"class":755},[143,49207,31349],{"class":149},[143,49209,32142],{"class":163},[143,49211,2605],{"class":755},[143,49213,32147],{"class":149},[143,49215,2602],{"class":755},[143,49217,33105],{"class":163},[143,49219,1055],{"class":149},[143,49221,49222],{"class":145,"line":10744},[143,49223,3300],{"emptyLinePlaceholder":976},[143,49225,49226],{"class":145,"line":10750},[143,49227,33120],{"class":266},[143,49229,49230],{"class":145,"line":10764},[143,49231,33125],{"class":266},[143,49233,49234],{"class":145,"line":10770},[143,49235,33130],{"class":266},[143,49237,49238,49240,49242,49244,49246,49248,49250],{"class":145,"line":10797},[143,49239,33135],{"class":149},[143,49241,160],{"class":755},[143,49243,33140],{"class":149},[143,49245,33143],{"class":6116},[143,49247,160],{"class":755},[143,49249,33148],{"class":280},[143,49251,1055],{"class":149},[143,49253,49254],{"class":145,"line":10806},[143,49255,3300],{"emptyLinePlaceholder":976},[143,49257,49258],{"class":145,"line":10812},[143,49259,33159],{"class":266},[143,49261,49262,49264,49266],{"class":145,"line":10820},[143,49263,33164],{"class":149},[143,49265,160],{"class":755},[143,49267,33169],{"class":149},[143,49269,49270],{"class":145,"line":10825},[143,49271,3300],{"emptyLinePlaceholder":976},[143,49273,49274],{"class":145,"line":17502},[143,49275,33178],{"class":266},[143,49277,49278,49280,49282],{"class":145,"line":17508},[143,49279,32187],{"class":149},[143,49281,160],{"class":755},[143,49283,33187],{"class":149},[143,49285,49286],{"class":145,"line":17531},[143,49287,33192],{"class":266},[143,49289,49290],{"class":145,"line":17537},[143,49291,33197],{"class":266},[143,49293,49294],{"class":145,"line":17560},[143,49295,33202],{"class":266},[143,49297,49298,49300,49302],{"class":145,"line":17574},[143,49299,33207],{"class":149},[143,49301,160],{"class":755},[143,49303,33212],{"class":149},[143,49305,49306],{"class":145,"line":17594},[143,49307,3300],{"emptyLinePlaceholder":976},[143,49309,49310],{"class":145,"line":17600},[143,49311,33225],{"class":266},[143,49313,49314],{"class":145,"line":17611},[143,49315,33230],{"class":266},[143,49317,49318,49320,49322],{"class":145,"line":17634},[143,49319,33235],{"class":149},[143,49321,160],{"class":755},[143,49323,33240],{"class":280},[143,49325,49326],{"class":145,"line":17656},[143,49327,33245],{"class":266},[143,49329,49330,49332,49334],{"class":145,"line":17661},[143,49331,33250],{"class":149},[143,49333,160],{"class":755},[143,49335,33255],{"class":149},[143,49337,49338],{"class":145,"line":17667},[143,49339,33260],{"class":266},[143,49341,49342,49344,49346],{"class":145,"line":17681},[143,49343,33265],{"class":149},[143,49345,160],{"class":755},[143,49347,33255],{"class":149},[143,49349,49350],{"class":145,"line":17694},[143,49351,33274],{"class":266},[143,49353,49354,49356,49358],{"class":145,"line":17699},[143,49355,33279],{"class":149},[143,49357,160],{"class":755},[143,49359,33255],{"class":149},[143,49361,49362],{"class":145,"line":17713},[143,49363,33288],{"class":266},[143,49365,49366,49368,49370],{"class":145,"line":17718},[143,49367,33293],{"class":149},[143,49369,160],{"class":755},[143,49371,33255],{"class":149},[143,49373,49374],{"class":145,"line":17724},[143,49375,3300],{"emptyLinePlaceholder":976},[143,49377,49378],{"class":145,"line":17729},[143,49379,33306],{"class":266},[143,49381,49382,49384,49386],{"class":145,"line":17743},[143,49383,33311],{"class":149},[143,49385,160],{"class":755},[143,49387,33316],{"class":149},[143,49389,49390],{"class":145,"line":17748},[143,49391,3300],{"emptyLinePlaceholder":976},[143,49393,49394],{"class":145,"line":17753},[143,49395,33329],{"class":266},[143,49397,49398,49400,49402,49404,49406],{"class":145,"line":17767},[143,49399,4101],{"class":755},[143,49401,33336],{"class":149},[143,49403,26941],{"class":755},[143,49405,33341],{"class":280},[143,49407,33344],{"class":149},[143,49409,49410,49412,49414,49416,49418,49420,49422,49424,49426,49428,49430],{"class":145,"line":17779},[143,49411,33349],{"class":280},[143,49413,1049],{"class":149},[143,49415,33354],{"class":163},[143,49417,33357],{"class":280},[143,49419,1625],{"class":163},[143,49421,33357],{"class":280},[143,49423,1292],{"class":163},[143,49425,33366],{"class":149},[143,49427,1573],{"class":755},[143,49429,771],{"class":280},[143,49431,31395],{"class":149},[143,49433,49434,49436,49438,49440,49442,49444],{"class":145,"line":17784},[143,49435,33349],{"class":280},[143,49437,1049],{"class":149},[143,49439,33381],{"class":163},[143,49441,1496],{"class":755},[143,49443,1487],{"class":280},[143,49445,1055],{"class":149},[143,49447,49448],{"class":145,"line":17797},[143,49449,3300],{"emptyLinePlaceholder":976},[143,49451,49452],{"class":145,"line":17802},[143,49453,33396],{"class":266},[143,49455,49456],{"class":145,"line":17807},[143,49457,33401],{"class":266},[143,49459,49460,49462,49464],{"class":145,"line":17812},[143,49461,33406],{"class":149},[143,49463,160],{"class":755},[143,49465,33240],{"class":280},[143,49467,49468],{"class":145,"line":17825},[143,49469,33415],{"class":266},[143,49471,49472,49474,49476],{"class":145,"line":17830},[143,49473,33420],{"class":149},[143,49475,160],{"class":755},[143,49477,3985],{"class":280},[143,49479,49480],{"class":145,"line":33531},[143,49481,33429],{"class":266},[143,49483,49484,49486,49488],{"class":145,"line":33537},[143,49485,33434],{"class":149},[143,49487,160],{"class":755},[143,49489,33240],{"class":280},[143,49491,49492],{"class":145,"line":33543},[143,49493,33443],{"class":266},[143,49495,49496,49498,49500],{"class":145,"line":33549},[143,49497,33448],{"class":149},[143,49499,160],{"class":755},[143,49501,3985],{"class":280},[143,49503,49504],{"class":145,"line":33555},[143,49505,33457],{"class":266},[143,49507,49508,49510,49512],{"class":145,"line":33566},[143,49509,33462],{"class":149},[143,49511,160],{"class":755},[143,49513,3985],{"class":280},[143,49515,49516],{"class":145,"line":33572},[143,49517,33471],{"class":266},[143,49519,49520,49522,49524],{"class":145,"line":33592},[143,49521,33476],{"class":149},[143,49523,160],{"class":755},[143,49525,3985],{"class":280},[143,49527,49528],{"class":145,"line":33598},[143,49529,33485],{"class":266},[143,49531,49532,49534,49536,49538,49540],{"class":145,"line":33609},[143,49533,4303],{"class":755},[143,49535,32499],{"class":149},[143,49537,26941],{"class":755},[143,49539,32504],{"class":280},[143,49541,33498],{"class":149},[143,49543,49544],{"class":145,"line":33615},[143,49545,33503],{"class":266},[143,49547,49548,49550,49552],{"class":145,"line":33621},[143,49549,33508],{"class":149},[143,49551,160],{"class":755},[143,49553,33513],{"class":149},[143,49555,49556],{"class":145,"line":33627},[143,49557,33518],{"class":266},[143,49559,49560,49562,49564],{"class":145,"line":33633},[143,49561,33523],{"class":149},[143,49563,160],{"class":755},[143,49565,33528],{"class":149},[143,49567,49568],{"class":145,"line":33639},[143,49569,33534],{"class":266},[143,49571,49572],{"class":145,"line":33645},[143,49573,33540],{"class":149},[143,49575,49576],{"class":145,"line":33651},[143,49577,33546],{"class":266},[143,49579,49580],{"class":145,"line":33671},[143,49581,33552],{"class":266},[143,49583,49584,49586,49588],{"class":145,"line":33677},[143,49585,33558],{"class":149},[143,49587,160],{"class":755},[143,49589,33563],{"class":149},[143,49591,49592],{"class":145,"line":33693},[143,49593,33569],{"class":266},[143,49595,49596,49598,49600,49602,49604,49606,49608],{"class":145,"line":33699},[143,49597,33575],{"class":149},[143,49599,160],{"class":755},[143,49601,33580],{"class":149},[143,49603,33583],{"class":6116},[143,49605,160],{"class":755},[143,49607,771],{"class":280},[143,49609,1055],{"class":149},[143,49611,49612],{"class":145,"line":33713},[143,49613,33595],{"class":266},[143,49615,49616,49618,49620],{"class":145,"line":33719},[143,49617,33601],{"class":149},[143,49619,160],{"class":755},[143,49621,33606],{"class":149},[143,49623,49624],{"class":145,"line":33734},[143,49625,33612],{"class":266},[143,49627,49628],{"class":145,"line":33740},[143,49629,33618],{"class":149},[143,49631,49632],{"class":145,"line":33749},[143,49633,33624],{"class":266},[143,49635,49636],{"class":145,"line":33755},[143,49637,33630],{"class":149},[143,49639,49640],{"class":145,"line":33764},[143,49641,33636],{"class":266},[143,49643,49644],{"class":145,"line":33770},[143,49645,33642],{"class":149},[143,49647,49648],{"class":145,"line":33776},[143,49649,33648],{"class":266},[143,49651,49652,49654,49656,49658,49660,49662,49664],{"class":145,"line":33785},[143,49653,33654],{"class":149},[143,49655,10377],{"class":755},[143,49657,33659],{"class":149},[143,49659,1496],{"class":755},[143,49661,33664],{"class":149},[143,49663,1234],{"class":280},[143,49665,1055],{"class":149},[143,49667,49668],{"class":145,"line":33791},[143,49669,33674],{"class":266},[143,49671,49672,49674,49676,49678,49680],{"class":145,"line":33802},[143,49673,33680],{"class":149},[143,49675,10377],{"class":755},[143,49677,33685],{"class":149},[143,49679,3849],{"class":755},[143,49681,33690],{"class":149},[143,49683,49684],{"class":145,"line":33808},[143,49685,33696],{"class":266},[143,49687,49688,49690,49692,49694,49696],{"class":145,"line":33827},[143,49689,33702],{"class":149},[143,49691,10377],{"class":755},[143,49693,33664],{"class":149},[143,49695,1234],{"class":280},[143,49697,1055],{"class":149},[143,49699,49700],{"class":145,"line":33833},[143,49701,33716],{"class":266},[143,49703,49704,49706,49708,49710,49712],{"class":145,"line":33844},[143,49705,4303],{"class":755},[143,49707,33724],{"class":149},[143,49709,26941],{"class":755},[143,49711,32504],{"class":280},[143,49713,33731],{"class":149},[143,49715,49716],{"class":145,"line":33850},[143,49717,33737],{"class":266},[143,49719,49720,49722,49724],{"class":145,"line":33870},[143,49721,33508],{"class":149},[143,49723,160],{"class":755},[143,49725,33513],{"class":149},[143,49727,49728],{"class":145,"line":33886},[143,49729,33752],{"class":266},[143,49731,49732,49734,49736],{"class":145,"line":33892},[143,49733,33523],{"class":149},[143,49735,160],{"class":755},[143,49737,33528],{"class":149},[143,49739,49740],{"class":145,"line":33906},[143,49741,33767],{"class":266},[143,49743,49744],{"class":145,"line":33912},[143,49745,33773],{"class":149},[143,49747,49748],{"class":145,"line":33918},[143,49749,37254],{"class":266},[143,49751,49752,49754],{"class":145,"line":33929},[143,49753,33779],{"class":755},[143,49755,33782],{"class":149},[143,49757,49758],{"class":145,"line":33935},[143,49759,33788],{"class":266},[143,49761,49762,49764,49766],{"class":145,"line":33941},[143,49763,37269],{"class":149},[143,49765,160],{"class":755},[143,49767,33563],{"class":149},[143,49769,49770],{"class":145,"line":33951},[143,49771,33805],{"class":266},[143,49773,49774,49776,49778,49780,49782,49784,49786],{"class":145,"line":33957},[143,49775,37282],{"class":149},[143,49777,160],{"class":755},[143,49779,33580],{"class":149},[143,49781,33583],{"class":6116},[143,49783,160],{"class":755},[143,49785,771],{"class":280},[143,49787,1055],{"class":149},[143,49789,49790],{"class":145,"line":33968},[143,49791,33830],{"class":266},[143,49793,49794,49796,49798],{"class":145,"line":33974},[143,49795,37303],{"class":149},[143,49797,160],{"class":755},[143,49799,33606],{"class":149},[143,49801,49802],{"class":145,"line":33984},[143,49803,33847],{"class":266},[143,49805,49806,49808,49810,49812,49814,49816,49818],{"class":145,"line":33989},[143,49807,37316],{"class":149},[143,49809,10377],{"class":755},[143,49811,37321],{"class":149},[143,49813,1496],{"class":755},[143,49815,33664],{"class":149},[143,49817,1234],{"class":280},[143,49819,1055],{"class":149},[143,49821,49822,49824,49826,49828,49830],{"class":145,"line":33995},[143,49823,37334],{"class":149},[143,49825,10377],{"class":755},[143,49827,33685],{"class":149},[143,49829,3849],{"class":755},[143,49831,33690],{"class":149},[143,49833,49834],{"class":145,"line":34044},[143,49835,37347],{"class":266},[143,49837,49838,49840,49842,49844,49846],{"class":145,"line":34091},[143,49839,37352],{"class":149},[143,49841,10377],{"class":755},[143,49843,33664],{"class":149},[143,49845,1234],{"class":280},[143,49847,1055],{"class":149},[143,49849,49850],{"class":145,"line":34096},[143,49851,33909],{"class":266},[143,49853,49854],{"class":145,"line":34102},[143,49855,33915],{"class":266},[143,49857,49858,49860,49862],{"class":145,"line":34121},[143,49859,33921],{"class":149},[143,49861,1625],{"class":755},[143,49863,33926],{"class":149},[143,49865,49866],{"class":145,"line":34127},[143,49867,33932],{"class":266},[143,49869,49870],{"class":145,"line":34147},[143,49871,33938],{"class":266},[143,49873,49874,49876,49878],{"class":145,"line":34153},[143,49875,33944],{"class":149},[143,49877,1625],{"class":755},[143,49879,33926],{"class":149},[143,49881,49882],{"class":145,"line":34159},[143,49883,33954],{"class":266},[143,49885,49886,49888,49890],{"class":145,"line":34169},[143,49887,33960],{"class":149},[143,49889,1625],{"class":755},[143,49891,33965],{"class":149},[143,49893,49894],{"class":145,"line":34174},[143,49895,33971],{"class":266},[143,49897,49898,49900,49902],{"class":145,"line":34180},[143,49899,33977],{"class":149},[143,49901,1625],{"class":755},[143,49903,33965],{"class":149},[143,49905,49906],{"class":145,"line":34196},[143,49907,3300],{"emptyLinePlaceholder":976},[143,49909,49910],{"class":145,"line":34241},[143,49911,33992],{"class":266},[143,49913,49914,49916,49918,49920,49922,49924,49926,49928,49930,49932,49934,49936,49938,49940,49942,49944,49946,49948,49950,49952],{"class":145,"line":34247},[143,49915,33349],{"class":280},[143,49917,1049],{"class":149},[143,49919,4492],{"class":163},[143,49921,33357],{"class":280},[143,49923,34006],{"class":163},[143,49925,1936],{"class":280},[143,49927,34011],{"class":755},[143,49929,366],{"class":280},[143,49931,34016],{"class":163},[143,49933,1936],{"class":280},[143,49935,34011],{"class":755},[143,49937,366],{"class":280},[143,49939,4492],{"class":163},[143,49941,34027],{"class":149},[143,49943,1573],{"class":755},[143,49945,771],{"class":280},[143,49947,34034],{"class":149},[143,49949,1573],{"class":755},[143,49951,771],{"class":280},[143,49953,34041],{"class":149},[143,49955,49956,49958,49960,49962,49964,49966,49968,49970,49972,49974,49976,49978,49980,49982,49984,49986,49988,49990,49992,49994],{"class":145,"line":34253},[143,49957,33349],{"class":280},[143,49959,1049],{"class":149},[143,49961,4492],{"class":163},[143,49963,33357],{"class":280},[143,49965,34055],{"class":163},[143,49967,1936],{"class":280},[143,49969,34011],{"class":755},[143,49971,366],{"class":280},[143,49973,34064],{"class":163},[143,49975,1936],{"class":280},[143,49977,34011],{"class":755},[143,49979,366],{"class":280},[143,49981,4492],{"class":163},[143,49983,34075],{"class":149},[143,49985,1573],{"class":755},[143,49987,771],{"class":280},[143,49989,34082],{"class":149},[143,49991,1573],{"class":755},[143,49993,771],{"class":280},[143,49995,34041],{"class":149},[143,49997,49998],{"class":145,"line":34259},[143,49999,3300],{"emptyLinePlaceholder":976},[143,50001,50002],{"class":145,"line":34270},[143,50003,34099],{"class":266},[143,50005,50006,50008,50010,50012,50014,50016,50018],{"class":145,"line":34276},[143,50007,3397],{"class":755},[143,50009,34107],{"class":149},[143,50011,1573],{"class":755},[143,50013,771],{"class":280},[143,50015,1979],{"class":149},[143,50017,1998],{"class":755},[143,50019,34118],{"class":149},[143,50021,50022],{"class":145,"line":34282},[143,50023,34124],{"class":266},[143,50025,50026,50028,50030,50032,50034,50036,50038],{"class":145,"line":34288},[143,50027,34130],{"class":149},[143,50029,1087],{"class":280},[143,50031,160],{"class":755},[143,50033,34137],{"class":149},[143,50035,1573],{"class":755},[143,50037,771],{"class":280},[143,50039,34144],{"class":149},[143,50041,50042],{"class":145,"line":34306},[143,50043,34150],{"class":266},[143,50045,50046],{"class":145,"line":34320},[143,50047,34156],{"class":266},[143,50049,50050,50052,50054],{"class":145,"line":34329},[143,50051,34162],{"class":149},[143,50053,160],{"class":755},[143,50055,33212],{"class":149},[143,50057,50058],{"class":145,"line":34338},[143,50059,3300],{"emptyLinePlaceholder":976},[143,50061,50062],{"class":145,"line":34347},[143,50063,34177],{"class":266},[143,50065,50066,50068,50070,50072,50074],{"class":145,"line":34356},[143,50067,34183],{"class":149},[143,50069,160],{"class":755},[143,50071,34188],{"class":149},[143,50073,1573],{"class":755},[143,50075,34193],{"class":149},[143,50077,50078,50080,50082,50084,50086,50088,50090,50092,50094,50096,50098,50100,50102,50104,50106,50108,50110,50112],{"class":145,"line":34362},[143,50079,33349],{"class":280},[143,50081,1049],{"class":149},[143,50083,34203],{"class":163},[143,50085,1936],{"class":280},[143,50087,34208],{"class":755},[143,50089,366],{"class":280},[143,50091,1585],{"class":163},[143,50093,1936],{"class":280},[143,50095,34208],{"class":755},[143,50097,366],{"class":280},[143,50099,34221],{"class":163},[143,50101,34224],{"class":149},[143,50103,34227],{"class":755},[143,50105,1947],{"class":280},[143,50107,34232],{"class":149},[143,50109,1369],{"class":755},[143,50111,1947],{"class":280},[143,50113,31395],{"class":149},[143,50115,50116],{"class":145,"line":34368},[143,50117,37631],{"class":266},[143,50119,50120],{"class":145,"line":34376},[143,50121,37636],{"class":266},[143,50123,50124,50126,50128],{"class":145,"line":34381},[143,50125,37641],{"class":149},[143,50127,34265],{"class":163},[143,50129,1055],{"class":149},[143,50131,50132],{"class":145,"line":34387},[143,50133,34285],{"class":266},[143,50135,50136,50138,50140,50142,50144,50146],{"class":145,"line":34398},[143,50137,34291],{"class":149},[143,50139,160],{"class":755},[143,50141,34296],{"class":149},[143,50143,34299],{"class":6116},[143,50145,160],{"class":755},[143,50147,2449],{"class":149},[143,50149,50150,50152,50154,50156],{"class":145,"line":34404},[143,50151,34309],{"class":163},[143,50153,1900],{"class":149},[143,50155,34314],{"class":280},[143,50157,34317],{"class":149},[143,50159,50160,50162],{"class":145,"line":34424},[143,50161,34323],{"class":163},[143,50163,34326],{"class":149},[143,50165,50166,50168],{"class":145,"line":34430},[143,50167,34332],{"class":163},[143,50169,34335],{"class":149},[143,50171,50172,50174],{"class":145,"line":34436},[143,50173,34341],{"class":163},[143,50175,34344],{"class":149},[143,50177,50178,50180],{"class":145,"line":34442},[143,50179,34350],{"class":163},[143,50181,34353],{"class":149},[143,50183,50184],{"class":145,"line":34459},[143,50185,34359],{"class":149},[143,50187,50188],{"class":145,"line":34465},[143,50189,34365],{"class":266},[143,50191,50192,50194],{"class":145,"line":34471},[143,50193,4990],{"class":755},[143,50195,34373],{"class":149},[143,50197,50198],{"class":145,"line":34477},[143,50199,3300],{"emptyLinePlaceholder":976},[143,50201,50202],{"class":145,"line":34483},[143,50203,34384],{"class":266},[143,50205,50206,50208,50210],{"class":145,"line":34489},[143,50207,32845],{"class":755},[143,50209,34392],{"class":156},[143,50211,34395],{"class":149},[143,50213,50214],{"class":145,"line":34516},[143,50215,34401],{"class":266},[143,50217,50218,50220,50222,50224,50226,50228,50230,50232],{"class":145,"line":34540},[143,50219,34407],{"class":149},[143,50221,32591],{"class":6116},[143,50223,160],{"class":755},[143,50225,1049],{"class":149},[143,50227,1539],{"class":280},[143,50229,1419],{"class":149},[143,50231,1334],{"class":280},[143,50233,31395],{"class":149},[143,50235,50236],{"class":145,"line":34546},[143,50237,34427],{"class":266},[143,50239,50240],{"class":145,"line":34552},[143,50241,34433],{"class":266},[143,50243,50244],{"class":145,"line":34558},[143,50245,34439],{"class":266},[143,50247,50248,50250,50252,50254,50256,50258,50260],{"class":145,"line":34569},[143,50249,32625],{"class":149},[143,50251,771],{"class":280},[143,50253,1419],{"class":149},[143,50255,1122],{"class":280},[143,50257,1419],{"class":149},[143,50259,771],{"class":280},[143,50261,1055],{"class":149},[143,50263,50264],{"class":145,"line":34580},[143,50265,34462],{"class":266},[143,50267,50268],{"class":145,"line":34586},[143,50269,34468],{"class":266},[143,50271,50272],{"class":145,"line":34603},[143,50273,34474],{"class":266},[143,50275,50276],{"class":145,"line":34626},[143,50277,34480],{"class":266},[143,50279,50280],{"class":145,"line":34649},[143,50281,34486],{"class":266},[143,50283,50284,50286,50288,50290,50292,50294,50296,50298,50300],{"class":145,"line":34655},[143,50285,34492],{"class":149},[143,50287,34495],{"class":163},[143,50289,34498],{"class":149},[143,50291,34501],{"class":163},[143,50293,1419],{"class":149},[143,50295,34506],{"class":6116},[143,50297,160],{"class":755},[143,50299,34511],{"class":163},[143,50301,1055],{"class":149},[143,50303,50304,50306,50308,50310,50312,50314,50316,50318,50320],{"class":145,"line":34660},[143,50305,34492],{"class":149},[143,50307,34495],{"class":163},[143,50309,34523],{"class":149},[143,50311,34526],{"class":163},[143,50313,1419],{"class":149},[143,50315,34506],{"class":6116},[143,50317,160],{"class":755},[143,50319,34535],{"class":163},[143,50321,1055],{"class":149},[143,50323,50324],{"class":145,"line":34669},[143,50325,34543],{"class":266},[143,50327,50328],{"class":145,"line":34679},[143,50329,34549],{"class":149},[143,50331,50332],{"class":145,"line":34685},[143,50333,34555],{"class":266},[143,50335,50336,50338,50340],{"class":145,"line":34690},[143,50337,34561],{"class":149},[143,50339,34564],{"class":163},[143,50341,1055],{"class":149},[143,50343,50344,50346,50348],{"class":145,"line":34696},[143,50345,34572],{"class":149},[143,50347,34575],{"class":163},[143,50349,1055],{"class":149},[143,50351,50352],{"class":145,"line":34709},[143,50353,34583],{"class":266},[143,50355,50356,50358,50360,50362,50364,50366,50368],{"class":145,"line":34715},[143,50357,32625],{"class":149},[143,50359,771],{"class":280},[143,50361,1419],{"class":149},[143,50363,1122],{"class":280},[143,50365,1419],{"class":149},[143,50367,1122],{"class":280},[143,50369,1055],{"class":149},[143,50371,50372,50374,50376,50378,50380,50382,50384,50386,50388],{"class":145,"line":34726},[143,50373,34492],{"class":149},[143,50375,34495],{"class":163},[143,50377,34610],{"class":149},[143,50379,34501],{"class":163},[143,50381,1419],{"class":149},[143,50383,34506],{"class":6116},[143,50385,160],{"class":755},[143,50387,34621],{"class":163},[143,50389,1055],{"class":149},[143,50391,50392,50394,50396,50398,50400,50402,50404,50406,50408],{"class":145,"line":34737},[143,50393,34492],{"class":149},[143,50395,34495],{"class":163},[143,50397,34633],{"class":149},[143,50399,34526],{"class":163},[143,50401,1419],{"class":149},[143,50403,34506],{"class":6116},[143,50405,160],{"class":755},[143,50407,34644],{"class":163},[143,50409,1055],{"class":149},[143,50411,50412],{"class":145,"line":34756},[143,50413,34652],{"class":266},[143,50415,50417],{"class":145,"line":50416},219,[143,50418,34549],{"class":149},[143,50420,50422,50424,50426],{"class":145,"line":50421},220,[143,50423,34561],{"class":149},[143,50425,34495],{"class":163},[143,50427,1055],{"class":149},[143,50429,50431,50433,50435],{"class":145,"line":50430},221,[143,50432,34572],{"class":149},[143,50434,34674],{"class":163},[143,50436,1055],{"class":149},[143,50438,50440],{"class":145,"line":50439},222,[143,50441,34682],{"class":149},[143,50443,50445],{"class":145,"line":50444},223,[143,50446,3300],{"emptyLinePlaceholder":976},[143,50448,50450],{"class":145,"line":50449},224,[143,50451,34693],{"class":266},[143,50453,50455,50457,50459,50461,50463],{"class":145,"line":50454},225,[143,50456,2434],{"class":755},[143,50458,32118],{"class":280},[143,50460,3849],{"class":755},[143,50462,32123],{"class":163},[143,50464,4639],{"class":149},[143,50466,50468],{"class":145,"line":50467},226,[143,50469,34712],{"class":266},[143,50471,50473,50475,50477],{"class":145,"line":50472},227,[143,50474,45444],{"class":149},[143,50476,160],{"class":755},[143,50478,45449],{"class":149},[143,50480,50482,50484,50486],{"class":145,"line":50481},228,[143,50483,34729],{"class":149},[143,50485,160],{"class":755},[143,50487,34734],{"class":149},[143,50489,50491,50493,50495,50497,50499,50501,50503],{"class":145,"line":50490},229,[143,50492,34291],{"class":149},[143,50494,160],{"class":755},[143,50496,45466],{"class":149},[143,50498,34747],{"class":6116},[143,50500,160],{"class":755},[143,50502,1947],{"class":280},[143,50504,1055],{"class":149},[143,50506,50508],{"class":145,"line":50507},230,[143,50509,34759],{"class":149},[22896,50511,50513],{"id":50512},"_242测试代码","2.4.2.测试代码",[63,50515,50516],{},"使用测试集进行测试与推理",[133,50518,50520],{"className":31276,"code":50519,"language":31278,"meta":138,"style":138},"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",[140,50521,50522,50528,50538,50548,50559,50569,50573,50577,50585,50590,50594,50611,50615,50619,50623,50627,50631,50663,50667,50675,50679,50691,50695,50699,50703,50707,50711,50715,50719,50723,50741,50755,50759,50769,50779,50789,50795,50799,50803,50811,50815,50831,50839,50843,50847,50855,50863,50867,50871,50875,50879,50885,50889,50899,50907,50915,50919,50923,50927,50935,50939,50955,50959,50963,50967,50979,50983,50995,50999,51003,51015,51019,51029,51033,51037,51049,51053,51061,51065,51069,51077,51081,51089,51093,51097,51101,51105,51109,51125,51133,51137,51141,51159,51165,51169,51179,51187,51195,51199,51203,51207,51211,51219,51223,51239,51243,51251,51259],{"__ignoreMap":138},[143,50523,50524,50526],{"class":145,"line":146},[143,50525,31290],{"class":755},[143,50527,31293],{"class":149},[143,50529,50530,50532,50534,50536],{"class":145,"line":35},[143,50531,31290],{"class":755},[143,50533,32313],{"class":149},[143,50535,32281],{"class":755},[143,50537,32318],{"class":149},[143,50539,50540,50542,50544,50546],{"class":145,"line":46},[143,50541,31635],{"class":755},[143,50543,32296],{"class":149},[143,50545,31290],{"class":755},[143,50547,32301],{"class":149},[143,50549,50550,50552,50554,50556],{"class":145,"line":293},[143,50551,31635],{"class":755},[143,50553,32266],{"class":149},[143,50555,31290],{"class":755},[143,50557,50558],{"class":149}," ImageFolder\n",[143,50560,50561,50563,50565,50567],{"class":145,"line":306},[143,50562,31635],{"class":755},[143,50564,32812],{"class":149},[143,50566,31290],{"class":755},[143,50568,45538],{"class":149},[143,50570,50571],{"class":145,"line":319},[143,50572,3300],{"emptyLinePlaceholder":976},[143,50574,50575],{"class":145,"line":332},[143,50576,34849],{"class":266},[143,50578,50579,50581,50583],{"class":145,"line":345},[143,50580,32845],{"class":755},[143,50582,34856],{"class":156},[143,50584,32851],{"class":149},[143,50586,50587],{"class":145,"line":701},[143,50588,50589],{"class":266},"   # 导入自己的数据集，并进行数据处理\n",[143,50591,50592],{"class":145,"line":707},[143,50593,48859],{"class":266},[143,50595,50596,50598,50600,50602,50604,50606,50609],{"class":145,"line":727},[143,50597,48864],{"class":280},[143,50599,160],{"class":755},[143,50601,1711],{"class":755},[143,50603,1292],{"class":163},[143,50605,1599],{"class":280},[143,50607,50608],{"class":48875},"\u002Fdata\u002Ftest",[143,50610,26031],{"class":163},[143,50612,50613],{"class":145,"line":2518},[143,50614,3300],{"emptyLinePlaceholder":976},[143,50616,50617],{"class":145,"line":2524},[143,50618,48887],{"class":266},[143,50620,50621],{"class":145,"line":2529},[143,50622,48892],{"class":266},[143,50624,50625],{"class":145,"line":2543},[143,50626,48897],{"class":266},[143,50628,50629],{"class":145,"line":2548},[143,50630,48902],{"class":266},[143,50632,50633,50635,50637,50639,50641,50643,50645,50647,50649,50651,50653,50655,50657,50659,50661],{"class":145,"line":2554},[143,50634,48907],{"class":149},[143,50636,160],{"class":755},[143,50638,48912],{"class":149},[143,50640,48915],{"class":280},[143,50642,1419],{"class":149},[143,50644,48920],{"class":280},[143,50646,1419],{"class":149},[143,50648,48925],{"class":280},[143,50650,48928],{"class":149},[143,50652,48931],{"class":280},[143,50654,1419],{"class":149},[143,50656,48936],{"class":280},[143,50658,1419],{"class":149},[143,50660,48941],{"class":280},[143,50662,5557],{"class":149},[143,50664,50665],{"class":145,"line":2575},[143,50666,48948],{"class":266},[143,50668,50669,50671,50673],{"class":145,"line":2580},[143,50670,48953],{"class":149},[143,50672,160],{"class":755},[143,50674,48958],{"class":149},[143,50676,50677],{"class":145,"line":2594},[143,50678,48963],{"class":266},[143,50680,50681,50683,50685,50687,50689],{"class":145,"line":2599},[143,50682,48968],{"class":149},[143,50684,32399],{"class":280},[143,50686,1419],{"class":149},[143,50688,32399],{"class":280},[143,50690,43520],{"class":149},[143,50692,50693],{"class":145,"line":2628},[143,50694,48981],{"class":266},[143,50696,50697],{"class":145,"line":2633},[143,50698,48986],{"class":149},[143,50700,50701],{"class":145,"line":2650},[143,50702,48991],{"class":149},[143,50704,50705],{"class":145,"line":2655},[143,50706,48996],{"class":266},[143,50708,50709],{"class":145,"line":2660},[143,50710,49001],{"class":266},[143,50712,50713],{"class":145,"line":2665},[143,50714,3300],{"emptyLinePlaceholder":976},[143,50716,50717],{"class":145,"line":2679},[143,50718,49010],{"class":266},[143,50720,50721],{"class":145,"line":2684},[143,50722,49015],{"class":266},[143,50724,50725,50727,50729,50731,50733,50735,50737,50739],{"class":145,"line":3477},[143,50726,34863],{"class":149},[143,50728,160],{"class":755},[143,50730,49024],{"class":149},[143,50732,49027],{"class":280},[143,50734,1419],{"class":149},[143,50736,49032],{"class":6116},[143,50738,160],{"class":755},[143,50740,49037],{"class":149},[143,50742,50743,50745,50747,50749,50751,50753],{"class":145,"line":3491},[143,50744,34920],{"class":149},[143,50746,160],{"class":755},[143,50748,32432],{"class":149},[143,50750,32435],{"class":6116},[143,50752,160],{"class":755},[143,50754,34931],{"class":149},[143,50756,50757],{"class":145,"line":3499},[143,50758,34936],{"class":266},[143,50760,50761,50763,50765,50767],{"class":145,"line":3504},[143,50762,34941],{"class":6116},[143,50764,160],{"class":755},[143,50766,771],{"class":280},[143,50768,32364],{"class":149},[143,50770,50771,50773,50775,50777],{"class":145,"line":3510},[143,50772,34952],{"class":6116},[143,50774,160],{"class":755},[143,50776,32374],{"class":280},[143,50778,32364],{"class":149},[143,50780,50781,50783,50785,50787],{"class":145,"line":3516},[143,50782,34963],{"class":6116},[143,50784,160],{"class":755},[143,50786,1234],{"class":280},[143,50788,1055],{"class":149},[143,50790,50791,50793],{"class":145,"line":3521},[143,50792,4990],{"class":755},[143,50794,34976],{"class":149},[143,50796,50797],{"class":145,"line":8848},[143,50798,3300],{"emptyLinePlaceholder":976},[143,50800,50801],{"class":145,"line":8872},[143,50802,34985],{"class":266},[143,50804,50805,50807,50809],{"class":145,"line":8877},[143,50806,32845],{"class":755},[143,50808,34992],{"class":156},[143,50810,34995],{"class":149},[143,50812,50813],{"class":145,"line":8883},[143,50814,35000],{"class":266},[143,50816,50817,50819,50821,50823,50825,50827,50829],{"class":145,"line":8910},[143,50818,32135],{"class":149},[143,50820,160],{"class":755},[143,50822,32142],{"class":163},[143,50824,2605],{"class":755},[143,50826,32147],{"class":149},[143,50828,2602],{"class":755},[143,50830,35017],{"class":163},[143,50832,50833,50835,50837],{"class":145,"line":8915},[143,50834,32187],{"class":149},[143,50836,160],{"class":755},[143,50838,33187],{"class":149},[143,50840,50841],{"class":145,"line":8921},[143,50842,3300],{"emptyLinePlaceholder":976},[143,50844,50845],{"class":145,"line":8933},[143,50846,35034],{"class":266},[143,50848,50849,50851,50853],{"class":145,"line":8945},[143,50850,35039],{"class":149},[143,50852,160],{"class":755},[143,50854,33240],{"class":280},[143,50856,50857,50859,50861],{"class":145,"line":8957},[143,50858,35048],{"class":149},[143,50860,160],{"class":755},[143,50862,3985],{"class":280},[143,50864,50865],{"class":145,"line":10616},[143,50866,3300],{"emptyLinePlaceholder":976},[143,50868,50869],{"class":145,"line":10641},[143,50870,35061],{"class":266},[143,50872,50873],{"class":145,"line":10664},[143,50874,35066],{"class":266},[143,50876,50877],{"class":145,"line":10688},[143,50878,35071],{"class":266},[143,50880,50881,50883],{"class":145,"line":10693},[143,50882,35076],{"class":755},[143,50884,33782],{"class":149},[143,50886,50887],{"class":145,"line":10698},[143,50888,35083],{"class":266},[143,50890,50891,50893,50895,50897],{"class":145,"line":10703},[143,50892,4303],{"class":755},[143,50894,35090],{"class":149},[143,50896,26941],{"class":755},[143,50898,35095],{"class":149},[143,50900,50901,50903,50905],{"class":145,"line":10712},[143,50902,35100],{"class":149},[143,50904,160],{"class":755},[143,50906,35105],{"class":149},[143,50908,50909,50911,50913],{"class":145,"line":10717},[143,50910,35110],{"class":149},[143,50912,160],{"class":755},[143,50914,35115],{"class":149},[143,50916,50917],{"class":145,"line":10723},[143,50918,35120],{"class":266},[143,50920,50921],{"class":145,"line":10744},[143,50922,33773],{"class":149},[143,50924,50925],{"class":145,"line":10750},[143,50926,35129],{"class":266},[143,50928,50929,50931,50933],{"class":145,"line":10764},[143,50930,33558],{"class":149},[143,50932,160],{"class":755},[143,50934,35138],{"class":149},[143,50936,50937],{"class":145,"line":10770},[143,50938,35143],{"class":266},[143,50940,50941,50943,50945,50947,50949,50951,50953],{"class":145,"line":10797},[143,50942,33575],{"class":149},[143,50944,160],{"class":755},[143,50946,33580],{"class":149},[143,50948,33583],{"class":6116},[143,50950,160],{"class":755},[143,50952,771],{"class":280},[143,50954,1055],{"class":149},[143,50956,50957],{"class":145,"line":10806},[143,50958,35164],{"class":266},[143,50960,50961],{"class":145,"line":10812},[143,50962,35169],{"class":266},[143,50964,50965],{"class":145,"line":10820},[143,50966,35174],{"class":266},[143,50968,50969,50971,50973,50975,50977],{"class":145,"line":10825},[143,50970,35179],{"class":149},[143,50972,10377],{"class":755},[143,50974,33685],{"class":149},[143,50976,3849],{"class":755},[143,50978,35188],{"class":149},[143,50980,50981],{"class":145,"line":17502},[143,50982,35193],{"class":266},[143,50984,50985,50987,50989,50991,50993],{"class":145,"line":17508},[143,50986,35198],{"class":149},[143,50988,10377],{"class":755},[143,50990,35203],{"class":149},[143,50992,1234],{"class":280},[143,50994,1055],{"class":149},[143,50996,50997],{"class":145,"line":17531},[143,50998,3300],{"emptyLinePlaceholder":976},[143,51000,51001],{"class":145,"line":17537},[143,51002,35216],{"class":266},[143,51004,51005,51007,51009,51011,51013],{"class":145,"line":17560},[143,51006,35221],{"class":149},[143,51008,160],{"class":755},[143,51010,35226],{"class":149},[143,51012,1625],{"class":755},[143,51014,35231],{"class":149},[143,51016,51017],{"class":145,"line":17574},[143,51018,35236],{"class":266},[143,51020,51021,51023,51025,51027],{"class":145,"line":17594},[143,51022,33349],{"class":280},[143,51024,1049],{"class":149},[143,51026,35245],{"class":163},[143,51028,35248],{"class":149},[143,51030,51031],{"class":145,"line":17600},[143,51032,3300],{"emptyLinePlaceholder":976},[143,51034,51035],{"class":145,"line":17611},[143,51036,35257],{"class":266},[143,51038,51039,51041,51043,51045,51047],{"class":145,"line":17634},[143,51040,2434],{"class":755},[143,51042,32118],{"class":280},[143,51044,3849],{"class":755},[143,51046,32123],{"class":163},[143,51048,4639],{"class":149},[143,51050,51051],{"class":145,"line":17656},[143,51052,35274],{"class":266},[143,51054,51055,51057,51059],{"class":145,"line":17661},[143,51056,32187],{"class":149},[143,51058,160],{"class":755},[143,51060,45449],{"class":149},[143,51062,51063],{"class":145,"line":17667},[143,51064,35287],{"class":266},[143,51066,51067],{"class":145,"line":17681},[143,51068,35292],{"class":266},[143,51070,51071,51073,51075],{"class":145,"line":17694},[143,51072,35297],{"class":149},[143,51074,35300],{"class":163},[143,51076,31395],{"class":149},[143,51078,51079],{"class":145,"line":17699},[143,51080,35307],{"class":266},[143,51082,51083,51085,51087],{"class":145,"line":17713},[143,51084,34920],{"class":149},[143,51086,160],{"class":755},[143,51088,35316],{"class":149},[143,51090,51091],{"class":145,"line":17718},[143,51092,35321],{"class":266},[143,51094,51095],{"class":145,"line":17724},[143,51096,35326],{"class":149},[143,51098,51099],{"class":145,"line":17729},[143,51100,3300],{"emptyLinePlaceholder":976},[143,51102,51103],{"class":145,"line":17743},[143,51104,35335],{"class":266},[143,51106,51107],{"class":145,"line":17748},[143,51108,35340],{"class":266},[143,51110,51111,51113,51115,51117,51119,51121,51123],{"class":145,"line":17753},[143,51112,32135],{"class":149},[143,51114,160],{"class":755},[143,51116,32142],{"class":163},[143,51118,2605],{"class":755},[143,51120,32147],{"class":149},[143,51122,2602],{"class":755},[143,51124,35017],{"class":163},[143,51126,51127,51129,51131],{"class":145,"line":17767},[143,51128,32187],{"class":149},[143,51130,160],{"class":755},[143,51132,33187],{"class":149},[143,51134,51135],{"class":145,"line":17779},[143,51136,35369],{"class":266},[143,51138,51139],{"class":145,"line":17784},[143,51140,35374],{"class":266},[143,51142,51143,51145,51147,51149,51152,51154,51157],{"class":145,"line":17797},[143,51144,35379],{"class":149},[143,51146,160],{"class":755},[143,51148,749],{"class":149},[143,51150,51151],{"class":163},"'猫'",[143,51153,1419],{"class":149},[143,51155,51156],{"class":163},"'狗'",[143,51158,34144],{"class":149},[143,51160,51161,51163],{"class":145,"line":17802},[143,51162,35076],{"class":755},[143,51164,33782],{"class":149},[143,51166,51167],{"class":145,"line":17807},[143,51168,35444],{"class":266},[143,51170,51171,51173,51175,51177],{"class":145,"line":17812},[143,51172,4303],{"class":755},[143,51174,35451],{"class":149},[143,51176,26941],{"class":755},[143,51178,35095],{"class":149},[143,51180,51181,51183,51185],{"class":145,"line":17825},[143,51182,33508],{"class":149},[143,51184,160],{"class":755},[143,51186,33513],{"class":149},[143,51188,51189,51191,51193],{"class":145,"line":17830},[143,51190,33523],{"class":149},[143,51192,160],{"class":755},[143,51194,33528],{"class":149},[143,51196,51197],{"class":145,"line":33531},[143,51198,3300],{"emptyLinePlaceholder":976},[143,51200,51201],{"class":145,"line":33537},[143,51202,35480],{"class":266},[143,51204,51205],{"class":145,"line":33543},[143,51206,33773],{"class":149},[143,51208,51209],{"class":145,"line":33549},[143,51210,35489],{"class":266},[143,51212,51213,51215,51217],{"class":145,"line":33555},[143,51214,33558],{"class":149},[143,51216,160],{"class":755},[143,51218,33563],{"class":149},[143,51220,51221],{"class":145,"line":33566},[143,51222,35502],{"class":266},[143,51224,51225,51227,51229,51231,51233,51235,51237],{"class":145,"line":33572},[143,51226,33575],{"class":149},[143,51228,160],{"class":755},[143,51230,33580],{"class":149},[143,51232,33583],{"class":6116},[143,51234,160],{"class":755},[143,51236,771],{"class":280},[143,51238,1055],{"class":149},[143,51240,51241],{"class":145,"line":33592},[143,51242,35523],{"class":266},[143,51244,51245,51247,51249],{"class":145,"line":33598},[143,51246,35528],{"class":149},[143,51248,160],{"class":755},[143,51250,35533],{"class":149},[143,51252,51253,51255,51257],{"class":145,"line":33609},[143,51254,35538],{"class":149},[143,51256,160],{"class":755},[143,51258,35543],{"class":149},[143,51260,51261,51263,51265,51267,51269,51271,51273,51275],{"class":145,"line":33615},[143,51262,35548],{"class":280},[143,51264,1049],{"class":149},[143,51266,35553],{"class":163},[143,51268,35556],{"class":149},[143,51270,35559],{"class":163},[143,51272,1419],{"class":149},[143,51274,35564],{"class":163},[143,51276,35567],{"class":149},[954,51278,51279],{},"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":138,"searchDepth":35,"depth":35,"links":51281},[51282,51283,51284,51285],{"id":31489,"depth":46,"text":31490},{"id":38737,"depth":46,"text":38738},{"id":42170,"depth":46,"text":42171},{"id":46179,"depth":46,"text":46180},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31481,"description":973},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51292,"title":51293,"body":51294,"description":973,"extension":974,"meta":51301,"navigation":976,"path":51302,"seo":51303,"stem":51304,"__hash__":51305},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51295,"toc":51299},[51296],[10,51297,51293],{"id":51298},"_3yolo模型学习",{"title":138,"searchDepth":35,"depth":35,"links":51300},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51293,"description":973},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51307,"title":51308,"body":51309,"description":51316,"extension":974,"meta":51317,"navigation":976,"path":51319,"seo":51320,"stem":51321,"__hash__":51322},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51310,"toc":51314},[51311],[63,51312,51313],{},"yolo模型还未补充",{"title":138,"searchDepth":35,"depth":35,"links":51315},[],"深度学习学习",{"category":51318},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51308,"description":51316},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51324,"title":51325,"body":51326,"description":973,"extension":974,"meta":51351,"navigation":976,"path":51352,"seo":51353,"stem":51354,"__hash__":51355},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51327,"toc":51349},[51328,51331,51334,51339,51346],[10,51329,51325],{"id":51330},"_1工具",[63,51332,51333],{},"提示错误插件：有问题会提前报错",[63,51335,51336],{},[29,51337],{"alt":138,"src":51338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[63,51340,51341],{},[67,51342,51345],{"href":51343,"rel":51344},"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",[71],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[63,51347,51348],{},"alt键加上下箭头可以实现语句的移动",{"title":138,"searchDepth":35,"depth":35,"links":51350},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51325,"description":973},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51357,"title":51358,"body":51359,"description":973,"extension":974,"meta":54212,"navigation":976,"path":54213,"seo":54214,"stem":54215,"__hash__":54216},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51360,"toc":54163},[51361,51364,51368,51372,51377,51380,51385,51389,51396,51401,51408,51413,51420,51425,51429,51434,51437,51441,51446,51450,51455,51458,51461,51464,51467,51470,51473,51476,51479,51484,51489,51494,51498,51501,51504,51508,51513,51516,51524,51529,51546,51554,51559,51564,51569,51574,51579,51582,51587,51592,51596,51605,51610,51615,51619,51624,51627,51631,51636,51644,51649,51654,51657,51662,51667,51672,51675,51678,51681,51686,51691,51694,51699,51702,51707,51710,51713,51716,51721,51724,51727,51742,51747,51752,51757,51760,51763,51766,51780,51783,51788,51793,51796,51799,51802,51805,51808,51811,51814,51818,51822,51827,51831,51834,51839,51844,51847,51852,51855,51859,51864,51867,51870,51873,51876,51879,51882,51885,51888,51891,51895,51900,51905,51910,51913,51916,51920,51925,51928,51932,51935,51938,51943,51946,51949,51953,51957,51960,51965,51970,51973,52002,52007,52012,52017,52022,52026,52031,52035,52040,52043,52047,52051,52056,52060,52065,52070,52074,52079,52082,52084,52087,52092,52096,52101,52105,52109,52114,52119,52124,52129,52133,52138,52143,52148,52151,52154,52159,52162,52167,52172,52177,52182,52186,52983,52987,53329,53334,53337,53340,53343,53346,53349,53352,53355,53358,53360,53363,53365,53368,53372,53377,53380,53383,53386,53390,53395,53400,53420,53423,53427,53432,53437,53454,53458,53487,53491,53513,53515,53554,53562,53568,53572,53575,53578,53583,53588,53591,53594,53597,53602,53607,53610,53613,53616,53619,53622,53625,53628,53631,53634,53637,53640,53642,53645,53648,53651,53654,53657,53660,53663,53666,53670,53675,53678,53683,53686,53689,53692,53695,53698,53701,53704,53706,53709,53712,53715,53718,53721,53724,53728,53731,53740,53743,53748,53751,53756,53759,53762,53765,53768,53771,53774,53777,53781,53785,53788,53791,53796,53801,53806,53810,53815,53820,53823,53826,53829,53832,53835,53840,53843,53848,53850,53855,53858,53862,53867,53870,53873,53878,53882,53885,53890,53893,53896,53925,53930,53933,53936,53939,53942,53945,53949,53952,54038,54042,54045,54050,54055,54062,54065,54068,54071,54074,54077,54082,54087,54090,54093,54096,54099,54102,54105,54108,54111,54114,54116,54119,54123,54128,54133,54138,54141,54146,54151,54154,54157,54160],[10,51362,51358],{"id":51363},"_2基础语法",[14,51365,51367],{"id":51366},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[58,51369,51371],{"id":51370},"_211-js组成","2.1.1 js组成",[19,51373,51374],{},[22,51375,51376],{},"js是编程语言，html和css不是编程语言，是标记语言",[63,51378,51379],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[19,51381,51382],{"start":35},[22,51383,51384],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[58,51386,51388],{"id":51387},"_212-js书写位置","2.1.2 js书写位置",[19,51390,51391],{},[22,51392,51393],{},[25,51394,51395],{},"内部 JavaScript",[63,51397,51398],{},[29,51399],{"alt":138,"src":51400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[19,51402,51403],{"start":35},[22,51404,51405],{},[25,51406,51407],{},"外部 JavaScript",[63,51409,51410],{},[29,51411],{"alt":138,"src":51412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[19,51414,51415],{"start":46},[22,51416,51417],{},[25,51418,51419],{},"内联 JavaScript",[63,51421,51422],{},[29,51423],{"alt":138,"src":51424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[58,51426,51428],{"id":51427},"_213-javascript注释","2.1.3 JavaScript注释",[63,51430,51431],{},[29,51432],{"alt":138,"src":51433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[63,51435,51436],{},"alt+shift+a一定要记住！",[58,51438,51440],{"id":51439},"_214-javascript结束符","2.1.4 JavaScript结束符",[63,51442,51443],{},[29,51444],{"alt":138,"src":51445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[58,51447,51449],{"id":51448},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[19,51451,51452],{},[22,51453,51454],{},"输出语法：",[63,51456,51457],{},"①document.write('要出的内容')",[63,51459,51460],{},"向body内输出内容；",[63,51462,51463],{},"如果输出的内容写的是标签，也会被解析cheng",[63,51465,51466],{},"②alert('要出的内容')",[63,51468,51469],{},"页面弹出警告对话框",[63,51471,51472],{},"③console.log('控制台打印')",[63,51474,51475],{},"控制台输出语法，程序员调试使用",[63,51477,51478],{},"输入log就行，自动生成：",[63,51480,51481],{},[29,51482],{"alt":138,"src":51483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[19,51485,51486],{"start":35},[22,51487,51488],{},"输入语法：",[63,51490,51491],{},[29,51492],{"alt":138,"src":51493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[58,51495,51497],{"id":51496},"_2116-字面量","21.1.6 字面量",[63,51499,51500],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[63,51502,51503],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,51505,51507],{"id":51506},"_22-变量","2.2 变量",[19,51509,51510],{},[22,51511,51512],{},"变量声明",[63,51514,51515],{},"let 变量名",[232,51517,51518,51521],{},[22,51519,51520],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[22,51522,51523],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[19,51525,51526],{"start":35},[22,51527,51528],{},"变量赋值",[133,51530,51534],{"className":51531,"code":51532,"language":51533,"meta":138,"style":138},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[140,51535,51536,51541],{"__ignoreMap":138},[143,51537,51538],{"class":145,"line":146},[143,51539,51540],{"class":149},"let age\n",[143,51542,51543],{"class":145,"line":35},[143,51544,51545],{"class":149},"age=18\n",[19,51547,51548,51551],{"start":46},[22,51549,51550],{},"连这些（变量的初始化）：let age=18",[22,51552,51553],{},"更新变量",[63,51555,51556],{},[29,51557],{"alt":138,"src":51558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[19,51560,51561],{"start":306},[22,51562,51563],{},"声明多个变量",[63,51565,51566],{},[29,51567],{"alt":138,"src":51568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[19,51570,51571],{"start":319},[22,51572,51573],{},"变量命名规则与规范",[63,51575,51576],{},[29,51577],{"alt":138,"src":51578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[63,51580,51581],{},"遵守小驼峰！",[19,51583,51584],{"start":332},[22,51585,51586],{},"变量拓展-let和var的区别",[63,51588,51589],{},[29,51590],{"alt":138,"src":51591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,51593,51595],{"id":51594},"_23-数组","2.3 数组",[133,51597,51599],{"className":51531,"code":51598,"language":51533,"meta":138,"style":138},"let arr = []\n",[140,51600,51601],{"__ignoreMap":138},[143,51602,51603],{"class":145,"line":146},[143,51604,51598],{"class":149},[63,51606,51607],{},[29,51608],{"alt":138,"src":51609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[63,51611,51612],{},[29,51613],{"alt":138,"src":51614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,51616,51618],{"id":51617},"_24-常量","2.4 常量",[63,51620,51621],{},[29,51622],{"alt":138,"src":51623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[63,51625,51626],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51628,51630],{"id":51629},"_25-数据类型","2.5 数据类型",[63,51632,51633],{},[29,51634],{"alt":138,"src":51635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[19,51637,51638,51641],{},[22,51639,51640],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[22,51642,51643],{},"算数运算符：",[63,51645,51646],{},[29,51647],{"alt":138,"src":51648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[19,51650,51651],{"start":46},[22,51652,51653],{},"数字类型（Number）",[63,51655,51656],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[63,51658,51659],{},[29,51660],{"alt":138,"src":51661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[19,51663,51664],{"start":293},[22,51665,51666],{},"字符串类型（string）",[63,51668,51669],{},[29,51670],{"alt":138,"src":51671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[63,51673,51674],{},"反引号也是可以使用的",[63,51676,51677],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[63,51679,51680],{},"例如：document.write(\"我今年\"+age+\"岁\")",[19,51682,51683],{"start":306},[22,51684,51685],{},"模板字符串",[63,51687,51688],{},[29,51689],{"alt":138,"src":51690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[63,51692,51693],{},"类似于python的字符串格式化",[19,51695,51696],{"start":319},[22,51697,51698],{},"布尔类型",[63,51700,51701],{},"true 和 false",[19,51703,51704],{"start":332},[22,51705,51706],{},"未定义类型（underfined）",[63,51708,51709],{},"表示没有赋值",[63,51711,51712],{},"未定义类型是比较特殊的类型，只有一个值undefined",[63,51714,51715],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[19,51717,51718],{"start":345},[22,51719,51720],{},"null（空类型）",[63,51722,51723],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[63,51725,51726],{},"赋值了，但是内容为空",[133,51728,51730],{"className":51531,"code":51729,"language":51533,"meta":138,"style":138},"typeof null\n输出的是'object'，是一个对象数据类型\n",[140,51731,51732,51737],{"__ignoreMap":138},[143,51733,51734],{"class":145,"line":146},[143,51735,51736],{"class":149},"typeof null\n",[143,51738,51739],{"class":145,"line":35},[143,51740,51741],{"class":149},"输出的是'object'，是一个对象数据类型\n",[19,51743,51744],{"start":701},[22,51745,51746],{},"控制台检测数据类型",[63,51748,51749],{},[29,51750],{"alt":138,"src":51751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[19,51753,51754],{"start":707},[22,51755,51756],{},"类型转换",[63,51758,51759],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[63,51761,51762],{},"转换方式：隐式转换和显示转换",[63,51764,51765],{},"①隐式转换",[232,51767,51768,51771,51774,51777],{},[22,51769,51770],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[22,51772,51773],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[22,51775,51776],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[22,51778,51779],{},"任何数据和字符串相加结果都是字符串",[63,51781,51782],{},"②显示转换",[63,51784,51785],{},[29,51786],{"alt":138,"src":51787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[63,51789,51790],{},[29,51791],{"alt":138,"src":51792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[63,51794,51795],{},"在输入的时候要用好隐式转换，简单写起来",[63,51797,51798],{},"let num = +prompt(’请输入数字：‘)",[63,51800,51801],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[63,51803,51804],{},"console.log(parseInt('12.333px'))",[63,51806,51807],{},"输出为：12",[63,51809,51810],{},"console.log(parseInt('a'a'a12.333px'))",[63,51812,51813],{},"输出：NaN",[14,51815,51817],{"id":51816},"_26-运算符","2.6 运算符",[58,51819,51821],{"id":51820},"_261-赋值运算符","2.6.1 赋值运算符",[63,51823,51824],{},[29,51825],{"alt":138,"src":51826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[58,51828,51830],{"id":51829},"_262-一元运算符","2.6.2 一元运算符",[63,51832,51833],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[63,51835,51836],{},[29,51837],{"alt":138,"src":51838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[63,51840,51841],{},[29,51842],{"alt":138,"src":51843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[63,51845,51846],{},"两者的区别：",[63,51848,51849],{},[29,51850],{"alt":138,"src":51851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[63,51853,51854],{},"前置先自加；后置后加，代码执行完之后再加",[58,51856,51858],{"id":51857},"_263-比较运算符","2.6.3 比较运算符",[63,51860,51861],{},[29,51862],{"alt":138,"src":51863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[63,51865,51866],{},"比较运算符也有隐式转换",[63,51868,51869],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[63,51871,51872],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[63,51874,51875],{},"要使用三等，开发的时候",[63,51877,51878],{},"NaN不等于任何人，包括它自己",[63,51880,51881],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[63,51883,51884],{},"7\u002F10=0.7",[63,51886,51887],{},"最后：0.5+0.2=0.7",[63,51889,51890],{},"字符串比较，比较的是字符对应的ASCII码",[58,51892,51894],{"id":51893},"_264-逻辑运算符","2.6.4 逻辑运算符",[63,51896,51897],{},[29,51898],{"alt":138,"src":51899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[63,51901,51902],{},[29,51903],{"alt":138,"src":51904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[63,51906,51907],{},[29,51908],{"alt":138,"src":51909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[63,51911,51912],{},"上述题目选D",[63,51914,51915],{},"与真2假1；或真1假2",[58,51917,51919],{"id":51918},"_265-运算符优先级","2.6.5 运算符优先级",[63,51921,51922],{},[29,51923],{"alt":138,"src":51924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[63,51926,51927],{},"先算逻辑与，后算逻辑或",[14,51929,51931],{"id":51930},"_27-语句","2.7 语句",[63,51933,51934],{},"表达式：是可以被求值的代码，会有结果给我们",[63,51936,51937],{},"语句：语句是可以被执行的代码，例如prompt()",[63,51939,51940],{},[29,51941],{"alt":138,"src":51942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[63,51944,51945],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[63,51947,51948],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[58,51950,51952],{"id":51951},"_271-分支语句","2.7.1 分支语句",[22896,51954,51956],{"id":51955},"_2711-if分支语句","2.7.1.1 if分支语句",[63,51958,51959],{},"if语句单行简单的话，可以不写{}，写在一行就行",[19,51961,51962],{},[22,51963,51964],{},"单分支语句",[63,51966,51967],{},[29,51968],{"alt":138,"src":51969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[63,51971,51972],{},"除了0，所有数字都为真",[133,51974,51976],{"className":51531,"code":51975,"language":51533,"meta":138,"style":138},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[140,51977,51978,51983,51988,51993,51997],{"__ignoreMap":138},[143,51979,51980],{"class":145,"line":146},[143,51981,51982],{"class":149},"if（0) {\n",[143,51984,51985],{"class":145,"line":35},[143,51986,51987],{"class":149},"    let a=1\n",[143,51989,51990],{"class":145,"line":46},[143,51991,51992],{"class":149},"    alert(typeof a)\n",[143,51994,51995],{"class":145,"line":293},[143,51996,348],{"class":149},[143,51998,51999],{"class":145,"line":306},[143,52000,52001],{"class":149},"不输出，括号为假\n",[19,52003,52004],{"start":35},[22,52005,52006],{},"双分支语句",[63,52008,52009],{},[29,52010],{"alt":138,"src":52011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[19,52013,52014],{"start":46},[22,52015,52016],{},"多分支语句",[63,52018,52019],{},[29,52020],{"alt":138,"src":52021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22896,52023,52025],{"id":52024},"_2712-三元运算符","2.7.1.2 三元运算符",[63,52027,52028],{},[29,52029],{"alt":138,"src":52030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22896,52032,52034],{"id":52033},"_2713-switch语句","2.7.1.3 switch语句",[63,52036,52037],{},[29,52038],{"alt":138,"src":52039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[63,52041,52042],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[58,52044,52046],{"id":52045},"_272-循环语句","2.7.2 循环语句",[22896,52048,52050],{"id":52049},"_2721-断点演示","2.7.2.1 断点演示",[63,52052,52053],{},[29,52054],{"alt":138,"src":52055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22896,52057,52059],{"id":52058},"_2722-while循环","2.7.2.2 while循环",[63,52061,52062],{},[29,52063],{"alt":138,"src":52064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[63,52066,52067],{},[29,52068],{"alt":138,"src":52069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22896,52071,52073],{"id":52072},"_2723-for循环","2.7.2.3 for循环",[63,52075,52076],{},[29,52077],{"alt":138,"src":52078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[63,52080,52081],{},"for(;;) {",[63,52083,366],{},[63,52085,52086],{},"表示无限循环",[63,52088,52089],{},[29,52090],{"alt":138,"src":52091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22896,52093,52095],{"id":52094},"_2724-循环的退出","2.7.2.4 循环的退出",[63,52097,52098],{},[29,52099],{"alt":138,"src":52100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52102,52104],{"id":52103},"_28-数组","2.8 数组",[58,52106,52108],{"id":52107},"_281-基础认识","2.8.1 基础认识",[63,52110,52111],{},[29,52112],{"alt":138,"src":52113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[63,52115,52116],{},[29,52117],{"alt":138,"src":52118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[63,52120,52121],{},[29,52122],{"alt":138,"src":52123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[63,52125,52126],{},[29,52127],{"alt":138,"src":52128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[58,52130,52132],{"id":52131},"_282-操作数组","2.8.2 操作数组",[63,52134,52135],{},[29,52136],{"alt":138,"src":52137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[19,52139,52140],{},[22,52141,52142],{},"添加元素",[63,52144,52145],{},[29,52146],{"alt":138,"src":52147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[63,52149,52150],{},"console.log(arr.push('green'))",[63,52152,52153],{},"输出结果：为新数组的长度",[63,52155,52156],{},[29,52157],{"alt":138,"src":52158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[63,52160,52161],{},"push用的非常多，一定要记住",[19,52163,52164],{},[22,52165,52166],{},"删除元素",[63,52168,52169],{},[29,52170],{"alt":138,"src":52171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[63,52173,52174],{},[29,52175],{"alt":138,"src":52176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[63,52178,52179],{},[29,52180],{"alt":138,"src":52181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[58,52183,52185],{"id":52184},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[133,52187,52189],{"className":51531,"code":52188,"language":51533,"meta":138,"style":138},"\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",[140,52190,52191,52204,52220,52224,52233,52251,52275,52297,52311,52319,52326,52337,52348,52352,52356,52363,52374,52388,52401,52419,52436,52451,52463,52475,52486,52490,52494,52504,52514,52526,52538,52550,52560,52564,52568,52580,52584,52598,52602,52606,52617,52631,52643,52657,52661,52670,52678,52682,52691,52695,52704,52709,52714,52727,52755,52760,52765,52790,52795,52799,52804,52809,52824,52828,52833,52863,52875,52891,52907,52921,52926,52933,52937,52942,52955,52963,52971,52975],{"__ignoreMap":138},[143,52192,52193,52196,52199,52202],{"class":145,"line":146},[143,52194,52195],{"class":149},"\u003C!",[143,52197,52198],{"class":153},"DOCTYPE",[143,52200,52201],{"class":156}," html",[143,52203,183],{"class":149},[143,52205,52206,52208,52210,52213,52215,52218],{"class":145,"line":35},[143,52207,150],{"class":149},[143,52209,51533],{"class":153},[143,52211,52212],{"class":156}," lang",[143,52214,160],{"class":149},[143,52216,52217],{"class":163},"\"en\"",[143,52219,183],{"class":149},[143,52221,52222],{"class":145,"line":46},[143,52223,3300],{"emptyLinePlaceholder":976},[143,52225,52226,52228,52231],{"class":145,"line":293},[143,52227,150],{"class":149},[143,52229,52230],{"class":153},"head",[143,52232,183],{"class":149},[143,52234,52235,52238,52241,52244,52246,52249],{"class":145,"line":306},[143,52236,52237],{"class":149},"    \u003C",[143,52239,52240],{"class":153},"meta",[143,52242,52243],{"class":156}," charset",[143,52245,160],{"class":149},[143,52247,52248],{"class":163},"\"UTF-8\"",[143,52250,183],{"class":149},[143,52252,52253,52255,52257,52260,52262,52265,52268,52270,52273],{"class":145,"line":319},[143,52254,52237],{"class":149},[143,52256,52240],{"class":153},[143,52258,52259],{"class":156}," http-equiv",[143,52261,160],{"class":149},[143,52263,52264],{"class":163},"\"X-UA-Compatible\"",[143,52266,52267],{"class":156}," content",[143,52269,160],{"class":149},[143,52271,52272],{"class":163},"\"IE=edge\"",[143,52274,183],{"class":149},[143,52276,52277,52279,52281,52283,52285,52288,52290,52292,52295],{"class":145,"line":332},[143,52278,52237],{"class":149},[143,52280,52240],{"class":153},[143,52282,15819],{"class":156},[143,52284,160],{"class":149},[143,52286,52287],{"class":163},"\"viewport\"",[143,52289,52267],{"class":156},[143,52291,160],{"class":149},[143,52293,52294],{"class":163},"\"width=device-width, initial-scale=1.0\"",[143,52296,183],{"class":149},[143,52298,52299,52301,52304,52307,52309],{"class":145,"line":345},[143,52300,52237],{"class":149},[143,52302,52303],{"class":153},"title",[143,52305,52306],{"class":149},">Document\u003C\u002F",[143,52308,52303],{"class":153},[143,52310,183],{"class":149},[143,52312,52313,52315,52317],{"class":145,"line":701},[143,52314,52237],{"class":149},[143,52316,954],{"class":153},[143,52318,183],{"class":149},[143,52320,52321,52324],{"class":145,"line":707},[143,52322,52323],{"class":153},"        *",[143,52325,275],{"class":149},[143,52327,52328,52331,52333,52335],{"class":145,"line":727},[143,52329,52330],{"class":280},"            margin",[143,52332,284],{"class":149},[143,52334,1234],{"class":280},[143,52336,290],{"class":149},[143,52338,52339,52342,52344,52346],{"class":145,"line":2518},[143,52340,52341],{"class":280},"            padding",[143,52343,284],{"class":149},[143,52345,1234],{"class":280},[143,52347,290],{"class":149},[143,52349,52350],{"class":145,"line":2524},[143,52351,3429],{"class":149},[143,52353,52354],{"class":145,"line":2529},[143,52355,3300],{"emptyLinePlaceholder":976},[143,52357,52358,52361],{"class":145,"line":2543},[143,52359,52360],{"class":156},"        .box",[143,52362,275],{"class":149},[143,52364,52365,52368,52370,52372],{"class":145,"line":2548},[143,52366,52367],{"class":280},"            display",[143,52369,284],{"class":149},[143,52371,287],{"class":280},[143,52373,290],{"class":149},[143,52375,52376,52379,52381,52384,52386],{"class":145,"line":2554},[143,52377,52378],{"class":280},"            width",[143,52380,284],{"class":149},[143,52382,52383],{"class":280},"700",[143,52385,774],{"class":755},[143,52387,290],{"class":149},[143,52389,52390,52393,52395,52397,52399],{"class":145,"line":2575},[143,52391,52392],{"class":280},"            height",[143,52394,284],{"class":149},[143,52396,4873],{"class":280},[143,52398,774],{"class":755},[143,52400,290],{"class":149},[143,52402,52403,52406,52408,52410,52412,52414,52417],{"class":145,"line":2580},[143,52404,52405],{"class":280},"            border-left",[143,52407,284],{"class":149},[143,52409,771],{"class":280},[143,52411,774],{"class":755},[143,52413,777],{"class":280},[143,52415,52416],{"class":280}," pink",[143,52418,290],{"class":149},[143,52420,52421,52424,52426,52428,52430,52432,52434],{"class":145,"line":2594},[143,52422,52423],{"class":280},"            border-bottom",[143,52425,284],{"class":149},[143,52427,771],{"class":280},[143,52429,774],{"class":755},[143,52431,777],{"class":280},[143,52433,52416],{"class":280},[143,52435,290],{"class":149},[143,52437,52438,52440,52442,52444,52446,52449],{"class":145,"line":2599},[143,52439,52330],{"class":280},[143,52441,284],{"class":149},[143,52443,1697],{"class":280},[143,52445,774],{"class":755},[143,52447,52448],{"class":280}," auto",[143,52450,290],{"class":149},[143,52452,52453,52456,52458,52461],{"class":145,"line":2628},[143,52454,52455],{"class":280},"            justify-content",[143,52457,284],{"class":149},[143,52459,52460],{"class":280},"space-around",[143,52462,290],{"class":149},[143,52464,52465,52468,52470,52473],{"class":145,"line":2633},[143,52466,52467],{"class":280},"            align-items",[143,52469,284],{"class":149},[143,52471,52472],{"class":280},"flex-end",[143,52474,290],{"class":149},[143,52476,52477,52480,52482,52484],{"class":145,"line":2650},[143,52478,52479],{"class":280},"            text-align",[143,52481,284],{"class":149},[143,52483,327],{"class":280},[143,52485,290],{"class":149},[143,52487,52488],{"class":145,"line":2655},[143,52489,3429],{"class":149},[143,52491,52492],{"class":145,"line":2660},[143,52493,3300],{"emptyLinePlaceholder":976},[143,52495,52496,52498,52500,52502],{"class":145,"line":2665},[143,52497,52360],{"class":156},[143,52499,1998],{"class":755},[143,52501,614],{"class":153},[143,52503,275],{"class":149},[143,52505,52506,52508,52510,52512],{"class":145,"line":2679},[143,52507,52367],{"class":280},[143,52509,284],{"class":149},[143,52511,287],{"class":280},[143,52513,290],{"class":149},[143,52515,52516,52518,52520,52522,52524],{"class":145,"line":2684},[143,52517,52378],{"class":280},[143,52519,284],{"class":149},[143,52521,1697],{"class":280},[143,52523,774],{"class":755},[143,52525,290],{"class":149},[143,52527,52528,52531,52533,52536],{"class":145,"line":3477},[143,52529,52530],{"class":280},"            background-color",[143,52532,284],{"class":149},[143,52534,52535],{"class":280},"pink",[143,52537,290],{"class":149},[143,52539,52540,52543,52545,52548],{"class":145,"line":3491},[143,52541,52542],{"class":280},"            flex-direction",[143,52544,284],{"class":149},[143,52546,52547],{"class":280},"column",[143,52549,290],{"class":149},[143,52551,52552,52554,52556,52558],{"class":145,"line":3499},[143,52553,52455],{"class":280},[143,52555,284],{"class":149},[143,52557,314],{"class":280},[143,52559,290],{"class":149},[143,52561,52562],{"class":145,"line":3504},[143,52563,3429],{"class":149},[143,52565,52566],{"class":145,"line":3510},[143,52567,3300],{"emptyLinePlaceholder":976},[143,52569,52570,52572,52575,52578],{"class":145,"line":3516},[143,52571,52360],{"class":156},[143,52573,52574],{"class":153}," div",[143,52576,52577],{"class":153}," span",[143,52579,275],{"class":149},[143,52581,52582],{"class":145,"line":3521},[143,52583,3300],{"emptyLinePlaceholder":976},[143,52585,52586,52589,52591,52594,52596],{"class":145,"line":8848},[143,52587,52588],{"class":280},"            margin-top",[143,52590,284],{"class":149},[143,52592,52593],{"class":280},"-20",[143,52595,774],{"class":755},[143,52597,290],{"class":149},[143,52599,52600],{"class":145,"line":8872},[143,52601,3429],{"class":149},[143,52603,52604],{"class":145,"line":8877},[143,52605,3300],{"emptyLinePlaceholder":976},[143,52607,52608,52610,52612,52615],{"class":145,"line":8883},[143,52609,52360],{"class":156},[143,52611,52574],{"class":153},[143,52613,52614],{"class":153}," h4",[143,52616,275],{"class":149},[143,52618,52619,52622,52624,52627,52629],{"class":145,"line":8910},[143,52620,52621],{"class":280},"            margin-bottom",[143,52623,284],{"class":149},[143,52625,52626],{"class":280},"-35",[143,52628,774],{"class":755},[143,52630,290],{"class":149},[143,52632,52633,52635,52637,52639,52641],{"class":145,"line":8915},[143,52634,52378],{"class":280},[143,52636,284],{"class":149},[143,52638,1397],{"class":280},[143,52640,774],{"class":755},[143,52642,290],{"class":149},[143,52644,52645,52648,52650,52653,52655],{"class":145,"line":8921},[143,52646,52647],{"class":280},"            margin-left",[143,52649,284],{"class":149},[143,52651,52652],{"class":280},"-10",[143,52654,774],{"class":755},[143,52656,290],{"class":149},[143,52658,52659],{"class":145,"line":8933},[143,52660,3429],{"class":149},[143,52662,52663,52666,52668],{"class":145,"line":8945},[143,52664,52665],{"class":149},"    \u003C\u002F",[143,52667,954],{"class":153},[143,52669,183],{"class":149},[143,52671,52672,52674,52676],{"class":145,"line":8957},[143,52673,730],{"class":149},[143,52675,52230],{"class":153},[143,52677,183],{"class":149},[143,52679,52680],{"class":145,"line":10616},[143,52681,3300],{"emptyLinePlaceholder":976},[143,52683,52684,52686,52689],{"class":145,"line":10641},[143,52685,150],{"class":149},[143,52687,52688],{"class":153},"body",[143,52690,183],{"class":149},[143,52692,52693],{"class":145,"line":10664},[143,52694,3300],{"emptyLinePlaceholder":976},[143,52696,52697,52699,52702],{"class":145,"line":10688},[143,52698,52237],{"class":149},[143,52700,52701],{"class":153},"script",[143,52703,183],{"class":149},[143,52705,52706],{"class":145,"line":10693},[143,52707,52708],{"class":266},"        \u002F\u002F 1. 四次弹框效果\n",[143,52710,52711],{"class":145,"line":10698},[143,52712,52713],{"class":266},"        \u002F\u002F 声明一个新的数组\n",[143,52715,52716,52719,52722,52724],{"class":145,"line":10703},[143,52717,52718],{"class":755},"        let",[143,52720,52721],{"class":149}," arr ",[143,52723,160],{"class":755},[143,52725,52726],{"class":149}," []\n",[143,52728,52729,52731,52733,52736,52738,52740,52742,52744,52746,52749,52751,52753],{"class":145,"line":10712},[143,52730,4303],{"class":755},[143,52732,2559],{"class":149},[143,52734,52735],{"class":755},"let",[143,52737,10338],{"class":149},[143,52739,160],{"class":755},[143,52741,26016],{"class":280},[143,52743,10345],{"class":149},[143,52745,2490],{"class":755},[143,52747,52748],{"class":280}," 4",[143,52750,4114],{"class":149},[143,52752,3192],{"class":755},[143,52754,13342],{"class":149},[143,52756,52757],{"class":145,"line":10717},[143,52758,52759],{"class":266},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[143,52761,52762],{"class":145,"line":10723},[143,52763,52764],{"class":266},"            \u002F\u002F arr.push(num)\n",[143,52766,52767,52770,52773,52775,52778,52780,52783,52785,52788],{"class":145,"line":10744},[143,52768,52769],{"class":149},"            arr.",[143,52771,52772],{"class":156},"push",[143,52774,1049],{"class":149},[143,52776,52777],{"class":156},"prompt",[143,52779,1049],{"class":149},[143,52781,52782],{"class":163},"`请输入第${",[143,52784,1482],{"class":149},[143,52786,52787],{"class":163},"}季度的数据:`",[143,52789,31395],{"class":149},[143,52791,52792],{"class":145,"line":10750},[143,52793,52794],{"class":266},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[143,52796,52797],{"class":145,"line":10764},[143,52798,3429],{"class":149},[143,52800,52801],{"class":145,"line":10770},[143,52802,52803],{"class":266},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[143,52805,52806],{"class":145,"line":10797},[143,52807,52808],{"class":266},"        \u002F\u002F 盒子开头\n",[143,52810,52811,52814,52817,52819,52822],{"class":145,"line":10806},[143,52812,52813],{"class":149},"        document.",[143,52815,52816],{"class":156},"write",[143,52818,1049],{"class":149},[143,52820,52821],{"class":163},"` \u003Cdiv class=\"box\">`",[143,52823,1055],{"class":149},[143,52825,52826],{"class":145,"line":10812},[143,52827,3300],{"emptyLinePlaceholder":976},[143,52829,52830],{"class":145,"line":10820},[143,52831,52832],{"class":266},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[143,52834,52835,52837,52839,52841,52843,52845,52847,52849,52851,52854,52857,52859,52861],{"class":145,"line":10825},[143,52836,4303],{"class":755},[143,52838,2559],{"class":149},[143,52840,52735],{"class":755},[143,52842,10338],{"class":149},[143,52844,160],{"class":755},[143,52846,4993],{"class":280},[143,52848,10345],{"class":149},[143,52850,150],{"class":755},[143,52852,52853],{"class":149}," arr.",[143,52855,52856],{"class":280},"length",[143,52858,4114],{"class":149},[143,52860,3192],{"class":755},[143,52862,13342],{"class":149},[143,52864,52865,52868,52870,52872],{"class":145,"line":17502},[143,52866,52867],{"class":149},"            document.",[143,52869,52816],{"class":156},[143,52871,1049],{"class":149},[143,52873,52874],{"class":163},"`\n",[143,52876,52877,52880,52882,52884,52886,52888],{"class":145,"line":17508},[143,52878,52879],{"class":163},"              \u003Cdiv style=\"height: ${",[143,52881,4780],{"class":149},[143,52883,749],{"class":163},[143,52885,1482],{"class":149},[143,52887,1979],{"class":163},[143,52889,52890],{"class":163},"}px;\">\n",[143,52892,52893,52896,52898,52900,52902,52904],{"class":145,"line":17531},[143,52894,52895],{"class":163},"                \u003Cspan>${",[143,52897,4780],{"class":149},[143,52899,749],{"class":163},[143,52901,1482],{"class":149},[143,52903,1979],{"class":163},[143,52905,52906],{"class":163},"}\u003C\u002Fspan>\n",[143,52908,52909,52912,52914,52916,52918],{"class":145,"line":17537},[143,52910,52911],{"class":163},"                \u003Ch4>第${",[143,52913,1482],{"class":149},[143,52915,46464],{"class":755},[143,52917,26016],{"class":280},[143,52919,52920],{"class":163},"}季度\u003C\u002Fh4>\n",[143,52922,52923],{"class":145,"line":17560},[143,52924,52925],{"class":163},"              \u003C\u002Fdiv>          \n",[143,52927,52928,52931],{"class":145,"line":17574},[143,52929,52930],{"class":163},"            `",[143,52932,1055],{"class":149},[143,52934,52935],{"class":145,"line":17594},[143,52936,3429],{"class":149},[143,52938,52939],{"class":145,"line":17600},[143,52940,52941],{"class":266},"        \u002F\u002F 盒子结尾\n",[143,52943,52944,52946,52948,52950,52953],{"class":145,"line":17611},[143,52945,52813],{"class":149},[143,52947,52816],{"class":156},[143,52949,1049],{"class":149},[143,52951,52952],{"class":163},"` \u003C\u002Fdiv>`",[143,52954,1055],{"class":149},[143,52956,52957,52959,52961],{"class":145,"line":17634},[143,52958,52665],{"class":149},[143,52960,52701],{"class":153},[143,52962,183],{"class":149},[143,52964,52965,52967,52969],{"class":145,"line":17656},[143,52966,730],{"class":149},[143,52968,52688],{"class":153},[143,52970,183],{"class":149},[143,52972,52973],{"class":145,"line":17661},[143,52974,3300],{"emptyLinePlaceholder":976},[143,52976,52977,52979,52981],{"class":145,"line":17667},[143,52978,730],{"class":149},[143,52980,51533],{"class":153},[143,52982,183],{"class":149},[58,52984,52986],{"id":52985},"_284-冒泡排序","2.8.4 冒泡排序",[133,52988,52990],{"className":51531,"code":52989,"language":51533,"meta":138,"style":138},"\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",[140,52991,52992,53002,53016,53020,53028,53042,53062,53074,53082,53086,53094,53102,53134,53167,53204,53209,53228,53233,53246,53261,53277,53281,53286,53290,53300,53309,53317,53321],{"__ignoreMap":138},[143,52993,52994,52996,52998,53000],{"class":145,"line":146},[143,52995,52195],{"class":149},[143,52997,52198],{"class":153},[143,52999,52201],{"class":156},[143,53001,183],{"class":149},[143,53003,53004,53006,53008,53010,53012,53014],{"class":145,"line":35},[143,53005,150],{"class":149},[143,53007,51533],{"class":153},[143,53009,52212],{"class":156},[143,53011,160],{"class":149},[143,53013,52217],{"class":163},[143,53015,183],{"class":149},[143,53017,53018],{"class":145,"line":46},[143,53019,3300],{"emptyLinePlaceholder":976},[143,53021,53022,53024,53026],{"class":145,"line":293},[143,53023,150],{"class":149},[143,53025,52230],{"class":153},[143,53027,183],{"class":149},[143,53029,53030,53032,53034,53036,53038,53040],{"class":145,"line":306},[143,53031,634],{"class":149},[143,53033,52240],{"class":153},[143,53035,52243],{"class":156},[143,53037,160],{"class":149},[143,53039,52248],{"class":163},[143,53041,183],{"class":149},[143,53043,53044,53046,53048,53050,53052,53054,53056,53058,53060],{"class":145,"line":319},[143,53045,634],{"class":149},[143,53047,52240],{"class":153},[143,53049,15819],{"class":156},[143,53051,160],{"class":149},[143,53053,52287],{"class":163},[143,53055,52267],{"class":156},[143,53057,160],{"class":149},[143,53059,52294],{"class":163},[143,53061,183],{"class":149},[143,53063,53064,53066,53068,53070,53072],{"class":145,"line":332},[143,53065,634],{"class":149},[143,53067,52303],{"class":153},[143,53069,52306],{"class":149},[143,53071,52303],{"class":153},[143,53073,183],{"class":149},[143,53075,53076,53078,53080],{"class":145,"line":345},[143,53077,730],{"class":149},[143,53079,52230],{"class":153},[143,53081,183],{"class":149},[143,53083,53084],{"class":145,"line":701},[143,53085,3300],{"emptyLinePlaceholder":976},[143,53087,53088,53090,53092],{"class":145,"line":707},[143,53089,150],{"class":149},[143,53091,52688],{"class":153},[143,53093,183],{"class":149},[143,53095,53096,53098,53100],{"class":145,"line":727},[143,53097,634],{"class":149},[143,53099,52701],{"class":153},[143,53101,183],{"class":149},[143,53103,53104,53107,53109,53111,53114,53116,53118,53120,53122,53124,53126,53128,53130,53132],{"class":145,"line":2518},[143,53105,53106],{"class":755},"    let",[143,53108,52721],{"class":149},[143,53110,160],{"class":755},[143,53112,53113],{"class":149}," [",[143,53115,1360],{"class":280},[143,53117,13335],{"class":149},[143,53119,1334],{"class":280},[143,53121,13335],{"class":149},[143,53123,1116],{"class":280},[143,53125,13335],{"class":149},[143,53127,1122],{"class":280},[143,53129,13335],{"class":149},[143,53131,771],{"class":280},[143,53133,34144],{"class":149},[143,53135,53136,53138,53140,53142,53144,53146,53148,53150,53152,53154,53156,53159,53161,53163,53165],{"class":145,"line":2524},[143,53137,4101],{"class":755},[143,53139,2559],{"class":149},[143,53141,52735],{"class":755},[143,53143,10338],{"class":149},[143,53145,160],{"class":755},[143,53147,4993],{"class":280},[143,53149,10345],{"class":149},[143,53151,150],{"class":755},[143,53153,52853],{"class":149},[143,53155,52856],{"class":280},[143,53157,53158],{"class":755}," -",[143,53160,26016],{"class":280},[143,53162,4114],{"class":149},[143,53164,3192],{"class":755},[143,53166,13342],{"class":149},[143,53168,53169,53172,53174,53176,53178,53180,53182,53184,53186,53188,53190,53192,53194,53196,53198,53200,53202],{"class":145,"line":2529},[143,53170,53171],{"class":755},"      for",[143,53173,2559],{"class":149},[143,53175,52735],{"class":755},[143,53177,10400],{"class":149},[143,53179,160],{"class":755},[143,53181,4993],{"class":280},[143,53183,10407],{"class":149},[143,53185,150],{"class":755},[143,53187,52853],{"class":149},[143,53189,52856],{"class":280},[143,53191,53158],{"class":755},[143,53193,10338],{"class":149},[143,53195,1573],{"class":755},[143,53197,26016],{"class":280},[143,53199,10414],{"class":149},[143,53201,3192],{"class":755},[143,53203,13342],{"class":149},[143,53205,53206],{"class":145,"line":2543},[143,53207,53208],{"class":266},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[143,53210,53211,53213,53216,53218,53221,53223,53225],{"class":145,"line":2548},[143,53212,3397],{"class":755},[143,53214,53215],{"class":149}," (arr[j] ",[143,53217,1998],{"class":755},[143,53219,53220],{"class":149}," arr[j ",[143,53222,1522],{"class":755},[143,53224,26016],{"class":280},[143,53226,53227],{"class":149},"]) {\n",[143,53229,53230],{"class":145,"line":2554},[143,53231,53232],{"class":266},"          \u002F\u002F 交换两个变量\n",[143,53234,53235,53238,53241,53243],{"class":145,"line":2575},[143,53236,53237],{"class":755},"          let",[143,53239,53240],{"class":149}," tmp ",[143,53242,160],{"class":755},[143,53244,53245],{"class":149}," arr[j]\n",[143,53247,53248,53251,53253,53255,53257,53259],{"class":145,"line":2580},[143,53249,53250],{"class":149},"          arr[j] ",[143,53252,160],{"class":755},[143,53254,53220],{"class":149},[143,53256,1522],{"class":755},[143,53258,26016],{"class":280},[143,53260,34144],{"class":149},[143,53262,53263,53266,53268,53270,53272,53274],{"class":145,"line":2594},[143,53264,53265],{"class":149},"          arr[j ",[143,53267,1522],{"class":755},[143,53269,26016],{"class":280},[143,53271,5343],{"class":149},[143,53273,160],{"class":755},[143,53275,53276],{"class":149}," tmp\n",[143,53278,53279],{"class":145,"line":2599},[143,53280,3429],{"class":149},[143,53282,53283],{"class":145,"line":2628},[143,53284,53285],{"class":149},"      }\n",[143,53287,53288],{"class":145,"line":2633},[143,53289,3087],{"class":149},[143,53291,53292,53295,53297],{"class":145,"line":2650},[143,53293,53294],{"class":149},"    document.",[143,53296,52816],{"class":156},[143,53298,53299],{"class":149},"(arr)\n",[143,53301,53302,53305,53307],{"class":145,"line":2655},[143,53303,53304],{"class":149},"  \u003C\u002F",[143,53306,52701],{"class":153},[143,53308,183],{"class":149},[143,53310,53311,53313,53315],{"class":145,"line":2660},[143,53312,730],{"class":149},[143,53314,52688],{"class":153},[143,53316,183],{"class":149},[143,53318,53319],{"class":145,"line":2665},[143,53320,3300],{"emptyLinePlaceholder":976},[143,53322,53323,53325,53327],{"class":145,"line":2679},[143,53324,730],{"class":149},[143,53326,51533],{"class":153},[143,53328,183],{"class":149},[63,53330,53331],{},[29,53332],{"alt":138,"src":53333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[63,53335,53336],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[63,53338,53339],{},"let arr = [4, 2, 5, 1, 3]",[63,53341,53342],{},"\u002F\u002F 1.升序排列写法",[63,53344,53345],{},"arr.sort(function (a, b) {",[63,53347,53348],{},"return a - b",[63,53350,53351],{},"})",[63,53353,53354],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[63,53356,53357],{},"\u002F\u002F 降序排列写法",[63,53359,53345],{},[63,53361,53362],{},"return b - a",[63,53364,53351],{},[63,53366,53367],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,53369,53371],{"id":53370},"_29-函数","2.9 函数",[63,53373,53374],{},[29,53375],{"alt":138,"src":53376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[63,53378,53379],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[63,53381,53382],{},"函数的声明用function",[63,53384,53385],{},"函数里边可以嵌套函数",[58,53387,53389],{"id":53388},"_291-函数传参","2.9.1 函数传参",[63,53391,53392],{},[29,53393],{"alt":138,"src":53394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[63,53396,53397],{},[29,53398],{"alt":138,"src":53399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[232,53401,53402,53405,53408,53411,53414,53417],{},[22,53403,53404],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[22,53406,53407],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[22,53409,53410],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[22,53412,53413],{},"开发中尽量保持形参和实参个数一致",[22,53415,53416],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[22,53418,53419],{},"形参只在函数中有用，所以不需要进行声明这个变量",[63,53421,53422],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[58,53424,53426],{"id":53425},"_292-函数的返回值","2.9.2 函数的返回值",[63,53428,53429],{},[29,53430],{"alt":138,"src":53431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[63,53433,53434],{},[29,53435],{"alt":138,"src":53436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[232,53438,53439,53442,53445,53448,53451],{},[22,53440,53441],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[22,53443,53444],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[22,53446,53447],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[22,53449,53450],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[22,53452,53453],{},"断点调试:进入函数内部看执行过程F11",[58,53455,53457],{"id":53456},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[133,53459,53461],{"className":51531,"code":53460,"language":51533,"meta":138,"style":138},"    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",[140,53462,53463,53468,53473,53477,53482],{"__ignoreMap":138},[143,53464,53465],{"class":145,"line":146},[143,53466,53467],{"class":149},"    function fn(a, b) {\n",[143,53469,53470],{"class":145,"line":35},[143,53471,53472],{"class":149},"      console.log(a + b);\n",[143,53474,53475],{"class":145,"line":46},[143,53476,3087],{"class":149},[143,53478,53479],{"class":145,"line":293},[143,53480,53481],{"class":149},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[143,53483,53484],{"class":145,"line":306},[143,53485,53486],{"class":149},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[58,53488,53490],{"id":53489},"_294-作用域","2.9.4 作用域",[232,53492,53493,53499,53504,53507,53510],{},[22,53494,53495,53496],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[25,53497,53498],{},"作用域",[22,53500,53501],{},[25,53502,53503],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[22,53505,53506],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[22,53508,53509],{},"函数内部可以直接所使用全局变量",[22,53511,53512],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[63,53514,15532],{},[133,53516,53518],{"className":51531,"code":53517,"language":51533,"meta":138,"style":138},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[140,53519,53520,53525,53530,53534,53539,53544,53549],{"__ignoreMap":138},[143,53521,53522],{"class":145,"line":146},[143,53523,53524],{"class":149},"    function fun() {\n",[143,53526,53527],{"class":145,"line":35},[143,53528,53529],{"class":149},"      num = 10\n",[143,53531,53532],{"class":145,"line":46},[143,53533,3087],{"class":149},[143,53535,53536],{"class":145,"line":293},[143,53537,53538],{"class":149},"    fun()\n",[143,53540,53541],{"class":145,"line":306},[143,53542,53543],{"class":149},"    console.log(num)\n",[143,53545,53546],{"class":145,"line":319},[143,53547,53548],{"class":149},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[143,53550,53551],{"class":145,"line":332},[143,53552,53553],{"class":149},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[232,53555,53556,53559],{},[22,53557,53558],{},"函数内部的形参可以看做是局部变量",[22,53560,53561],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[63,53563,53564,53565],{},"变量访问原则： ",[25,53566,53567],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[58,53569,53571],{"id":53570},"_295-匿名函数","2.9.5 匿名函数",[63,53573,53574],{},"函数可以分为具名函数和匿名函数",[63,53576,53577],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[19,53579,53580],{},[22,53581,53582],{},"函数表达式",[63,53584,53585],{},[29,53586],{"alt":138,"src":53587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[63,53589,53590],{},"里边也可以写参数",[63,53592,53593],{},"具名函数调用位置可以随意调整；",[63,53595,53596],{},"匿名函数函数表达式形式只能在声明后才可以使用",[19,53598,53599],{"start":35},[22,53600,53601],{},"立即执行函数",[63,53603,53604],{},[29,53605],{"alt":138,"src":53606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[63,53608,53609],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[63,53611,53612],{},"写法：两个小括号，然后在第一个小括号中写function",[63,53614,53615],{},"(function () {})();",[63,53617,53618],{},"不要落下最后的;",[63,53620,53621],{},"立即执行函数必须要加;",[63,53623,53624],{},"分号写前写后都没问题",[63,53626,53627],{},"写前：",[63,53629,53630],{},"(function() {})()",[63,53632,53633],{},";(function () {})();",[63,53635,53636],{},"写后:",[63,53638,53639],{},"(function() {})();",[63,53641,53615],{},[63,53643,53644],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[63,53646,53647],{},"还有一种写法：",[63,53649,53650],{},"(function(){}());",[63,53652,53653],{},"或者:",[63,53655,53656],{},"!function(){}();",[63,53658,53659],{},"立即执行函数有时候也是可以加名字的：",[63,53661,53662],{},"(function flexible(window,document) {}(window,document));",[63,53664,53665],{},"省一些调用方法",[58,53667,53669],{"id":53668},"_296-逻辑中断","2.9.6 逻辑中断!!!",[63,53671,53672],{},[29,53673],{"alt":138,"src":53674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[63,53676,53677],{},"这样就不用非得给x,y初始化了",[63,53679,53680],{},[29,53681],{"alt":138,"src":53682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[63,53684,53685],{},"代码执行时先看左边",[63,53687,53688],{},"例如：console.log(false && 3+5)",[63,53690,53691],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[63,53693,53694],{},"&&都是真时，就返回最后一个真值",[63,53696,53697],{},"console.log(11 && 22)",[63,53699,53700],{},"输出22",[63,53702,53703],{},"逻辑与：遇真则真",[63,53705,15532],{},[63,53707,53708],{},"let age=1",[63,53710,53711],{},"console.log(11 || age++)",[63,53713,53714],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[63,53716,53717],{},"console.log(11 || 22)",[63,53719,53720],{},"||逻辑或遇到真就直接输出，输出结果为11",[63,53722,53723],{},"||如果都是假的话，就取最后一个假的值了",[58,53725,53727],{"id":53726},"_297-转换为boolean型","2.9.7 转换为Boolean型",[63,53729,53730],{},"显示转换：",[63,53732,53733,53736,53737],{},[25,53734,53735],{},"记忆","： ",[25,53738,53739],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[63,53741,53742],{},"空字符串为假，其他字符串全为真",[63,53744,53745],{},[29,53746],{"alt":138,"src":53747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[63,53749,53750],{},"隐式转换：",[63,53752,53753],{},[29,53754],{"alt":138,"src":53755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[63,53757,53758],{},"隐式转换:",[63,53760,53761],{},"null+3=3",[63,53763,53764],{},"undefined+3=NaN",[63,53766,53767],{},"null==undefined 输出true,他两个都当0看",[63,53769,53770],{},"null===undefined 输出false",[63,53772,53773],{},"undefined做任何操作都是NaN",[63,53775,53776],{},"NaN不等于NaN，NaN表示计算错误",[14,53778,53780],{"id":53779},"_210-对象","2.10 对象",[58,53782,53784],{"id":53783},"_2101-对象的介绍","2.10.1 对象的介绍",[63,53786,53787],{},"对象也是一种数据类型，里边的数据是无序的",[63,53789,53790],{},"对象由属性和方法组成",[63,53792,53793],{},[29,53794],{"alt":138,"src":53795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[63,53797,53798],{},[29,53799],{"alt":138,"src":53800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[63,53802,53803],{},[29,53804],{"alt":138,"src":53805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[58,53807,53809],{"id":53808},"_2102-对象属性","2.10.2 对象属性",[63,53811,53812],{},[29,53813],{"alt":138,"src":53814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[19,53816,53817],{},[22,53818,53819],{},"查询对象",[63,53821,53822],{},"对象名.属性 goods.uname",[63,53824,53825],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[63,53827,53828],{},"不带字符串的属性名也可以使用 对象名['属性名']",[63,53830,53831],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[63,53833,53834],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[19,53836,53837],{"start":35},[22,53838,53839],{},"重新赋值",[63,53841,53842],{},"对象名.属性=新值",[19,53844,53845],{"start":46},[22,53846,53847],{},"增加新数据",[63,53849,53842],{},[19,53851,53852],{"start":293},[22,53853,53854],{},"删除对象中的属性",[63,53856,53857],{},"delete 对象名.属性",[58,53859,53861],{"id":53860},"_2103-对象方法","2.10.3 对象方法",[63,53863,53864],{},[29,53865],{"alt":138,"src":53866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[63,53868,53869],{},"后边跟的是匿名函数",[63,53871,53872],{},"对象外面的叫函数；对象内部的叫方法",[63,53874,53875],{},[29,53876],{"alt":138,"src":53877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[58,53879,53881],{"id":53880},"_2104-遍历对象","2.10.4 遍历对象",[63,53883,53884],{},"理解为加括号的python字典遍历",[63,53886,53887],{},[29,53888],{"alt":138,"src":53889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[63,53891,53892],{},"k是字符串类型",[63,53894,53895],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[133,53897,53899],{"className":51531,"code":53898,"language":51533,"meta":138,"style":138},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[140,53900,53901,53906,53911,53916,53921],{"__ignoreMap":138},[143,53902,53903],{"class":145,"line":146},[143,53904,53905],{"class":149},"   let arr = [1, 2, 3]\n",[143,53907,53908],{"class":145,"line":35},[143,53909,53910],{"class":149},"    for (let k in arr) {\n",[143,53912,53913],{"class":145,"line":46},[143,53914,53915],{"class":149},"      console.log(k)\n",[143,53917,53918],{"class":145,"line":293},[143,53919,53920],{"class":149},"      console.log(arr[k])\n",[143,53922,53923],{"class":145,"line":306},[143,53924,3087],{"class":149},[63,53926,53927],{},[29,53928],{"alt":138,"src":53929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[63,53931,53932],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[63,53934,53935],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[63,53937,53938],{},"for in 得到的k是属性名",[52701,53940,53941],{},"\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",[63,53943,53944],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[58,53946,53948],{"id":53947},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[63,53950,53951],{},"数组中放对象信息",[133,53953,53957],{"className":53954,"code":53955,"language":53956,"meta":138,"style":138},"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",[140,53958,53959,53967,53972,53977,53982,53987,53992,53997,54002,54007,54012,54017,54022,54026,54030],{"__ignoreMap":138},[143,53960,53961,53963,53965],{"class":145,"line":146},[143,53962,150],{"class":149},[143,53964,52701],{"class":153},[143,53966,183],{"class":149},[143,53968,53969],{"class":145,"line":35},[143,53970,53971],{"class":149},"    let students = [\n",[143,53973,53974],{"class":145,"line":46},[143,53975,53976],{"class":149},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[143,53978,53979],{"class":145,"line":293},[143,53980,53981],{"class":149},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[143,53983,53984],{"class":145,"line":306},[143,53985,53986],{"class":149},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[143,53988,53989],{"class":145,"line":319},[143,53990,53991],{"class":149},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[143,53993,53994],{"class":145,"line":332},[143,53995,53996],{"class":149},"    ]\n",[143,53998,53999],{"class":145,"line":345},[143,54000,54001],{"class":149},"    for (let i = 0; i \u003C students.length; i++) {\n",[143,54003,54004],{"class":145,"line":701},[143,54005,54006],{"class":149},"      for (let k in students[i]) {\n",[143,54008,54009],{"class":145,"line":707},[143,54010,54011],{"class":149},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[143,54013,54014],{"class":145,"line":727},[143,54015,54016],{"class":149},"        \u002F\u002F输出每个人的名字：\n",[143,54018,54019],{"class":145,"line":2518},[143,54020,54021],{"class":149},"        \u002F\u002Fconsole.log(students[i].name)\n",[143,54023,54024],{"class":145,"line":2524},[143,54025,53285],{"class":149},[143,54027,54028],{"class":145,"line":2529},[143,54029,3087],{"class":149},[143,54031,54032,54034,54036],{"class":145,"line":2543},[143,54033,53304],{"class":149},[143,54035,52701],{"class":153},[143,54037,183],{"class":149},[58,54039,54041],{"id":54040},"_2106-内置对象","2.10.6 内置对象",[63,54043,54044],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[19,54046,54047],{},[22,54048,54049],{},"数学对象Math",[63,54051,54052],{},[29,54053],{"alt":138,"src":54054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[63,54056,54057],{},[67,54058,54061],{"href":54059,"rel":54060},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[71],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[63,54063,54064],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[63,54066,54067],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[63,54069,54070],{},"数组不可以使用Math中的max,min来求最大值与最小值",[63,54072,54073],{},"null是一个空对象，可以认为：null类似于let obj={}",[63,54075,54076],{},"null属于对象数据类型",[19,54078,54079],{"start":35},[22,54080,54081],{},"生成任意范围随机数",[63,54083,54084],{},[29,54085],{"alt":138,"src":54086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[63,54088,54089],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[63,54091,54092],{},"乘以几就取不到几",[63,54094,54095],{},"取数组中的随机元素：",[63,54097,54098],{},"let arr = ['red', 'green', 'blue']",[63,54100,54101],{},"let random = Math.floor(Math.random() * arr.length)",[63,54103,54104],{},"console.log(arr[random])",[63,54106,54107],{},"这个函数得到的是全闭区间",[63,54109,54110],{},"function getRandom(N, M) {",[63,54112,54113],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[63,54115,366],{},[63,54117,54118],{},"console.log(getRandom(4, 8))",[58,54120,54122],{"id":54121},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[63,54124,54125],{},[29,54126],{"alt":138,"src":54127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[63,54129,54130],{},[29,54131],{"alt":138,"src":54132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[63,54134,54135],{},[29,54136],{"alt":138,"src":54137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[63,54139,54140],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[63,54142,54143],{},[29,54144],{"alt":138,"src":54145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[63,54147,54148],{},[29,54149],{"alt":138,"src":54150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[63,54152,54153],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[63,54155,54156],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[63,54158,54159],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[954,54161,54162],{},"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":138,"searchDepth":35,"depth":35,"links":54164},[54165,54173,54174,54175,54176,54177,54184,54188,54194,54203],{"id":51366,"depth":35,"text":51367,"children":54166},[54167,54168,54169,54170,54171,54172],{"id":51370,"depth":46,"text":51371},{"id":51387,"depth":46,"text":51388},{"id":51427,"depth":46,"text":51428},{"id":51439,"depth":46,"text":51440},{"id":51448,"depth":46,"text":51449},{"id":51496,"depth":46,"text":51497},{"id":51506,"depth":35,"text":51507},{"id":51594,"depth":35,"text":51595},{"id":51617,"depth":35,"text":51618},{"id":51629,"depth":35,"text":51630},{"id":51816,"depth":35,"text":51817,"children":54178},[54179,54180,54181,54182,54183],{"id":51820,"depth":46,"text":51821},{"id":51829,"depth":46,"text":51830},{"id":51857,"depth":46,"text":51858},{"id":51893,"depth":46,"text":51894},{"id":51918,"depth":46,"text":51919},{"id":51930,"depth":35,"text":51931,"children":54185},[54186,54187],{"id":51951,"depth":46,"text":51952},{"id":52045,"depth":46,"text":52046},{"id":52103,"depth":35,"text":52104,"children":54189},[54190,54191,54192,54193],{"id":52107,"depth":46,"text":52108},{"id":52131,"depth":46,"text":52132},{"id":52184,"depth":46,"text":52185},{"id":52985,"depth":46,"text":52986},{"id":53370,"depth":35,"text":53371,"children":54195},[54196,54197,54198,54199,54200,54201,54202],{"id":53388,"depth":46,"text":53389},{"id":53425,"depth":46,"text":53426},{"id":53456,"depth":46,"text":53457},{"id":53489,"depth":46,"text":53490},{"id":53570,"depth":46,"text":53571},{"id":53668,"depth":46,"text":53669},{"id":53726,"depth":46,"text":53727},{"id":53779,"depth":35,"text":53780,"children":54204},[54205,54206,54207,54208,54209,54210,54211],{"id":53783,"depth":46,"text":53784},{"id":53808,"depth":46,"text":53809},{"id":53860,"depth":46,"text":53861},{"id":53880,"depth":46,"text":53881},{"id":53947,"depth":46,"text":53948},{"id":54040,"depth":46,"text":54041},{"id":54121,"depth":46,"text":54122},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51358,"description":973},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54218,"title":54219,"body":54220,"description":973,"extension":974,"meta":77552,"navigation":976,"path":77553,"seo":77554,"stem":77555,"__hash__":77556},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54221,"toc":77492},[54222,54225,54228,54231,54236,54239,54242,54245,54249,54253,54259,54264,54272,54279,54282,54286,54291,54296,54301,54304,54307,54318,54321,54325,54328,54331,54336,54341,54346,54349,54352,54443,54446,54451,54454,54459,54462,54465,54470,54473,54478,54482,54485,54499,54503,54508,54511,54514,54518,54523,54526,54530,54534,54539,54543,54548,54551,54554,54557,54560,54563,54566,54571,54576,54604,54607,54610,54613,54618,54621,54624,54627,54630,54634,54663,54667,54672,54677,54680,54683,54686,54691,54805,54810,54815,54976,54981,54984,54988,54993,54998,55001,55004,55007,55010,55013,55016,55019,55022,55025,55028,55031,55034,55037,55040,55042,55045,55048,55051,55056,55060,55457,55460,55466,55470,55475,56755,56760,56763,56766,56769,56774,57970,57974,57980,57985,57988,57993,57998,58002,58006,58011,58014,58019,58022,58025,58029,58937,58940,58944,59165,59168,59171,59174,59400,59403,59627,59630,59634,59639,59642,59645,59873,59876,59909,59912,59916,59921,59925,59928,59931,59934,59937,59940,59943,59946,59951,61231,61235,61238,62331,62335,62338,62341,62344,62347,62351,62354,62357,62359,62367,63847,63851,63854,63857,63860,64069,64072,64076,64080,64085,64090,64093,64096,64101,64105,64110,64113,64222,64226,64231,64236,64239,64242,64246,64251,64256,64261,64264,64267,64278,64281,64286,64291,64294,64297,64370,64374,64379,64382,64384,64395,64399,64404,65730,65733,65736,65739,65741,65744,65747,65750,65753,65756,65759,65762,65765,65768,65771,65774,65777,65779,65781,65784,65788,66882,66885,66888,66904,66918,66921,66926,66932,66937,66941,66945,66950,66954,66959,67401,67406,67409,67413,67418,67421,67424,67428,67433,67437,67442,67447,67451,67456,67461,67464,67469,67474,67478,67483,67488,67592,67595,67599,67604,67970,67973,67976,67979,67982,67985,67988,67991,67994,69290,69294,69299,69304,69307,69310,69313,69316,69318,69323,69328,69331,69335,69340,69345,69350,69353,69356,69359,69362,69365,69370,69373,69377,69382,69387,69391,69396,69399,69404,69407,69410,69413,69416,69419,69424,69427,69430,69433,69436,69440,69445,69448,69452,69457,69460,69463,69467,69496,69499,69503,69507,69512,69516,69521,69524,69527,69530,69533,69536,69539,69542,69545,69548,69551,69554,69557,69560,69563,69567,69572,69577,69580,69584,69588,69593,69596,69600,69603,69606,69611,69616,69621,69626,69631,69634,69637,69642,69647,69651,69656,69659,69664,69667,69670,69673,69676,69681,69684,69693,69697,69702,69705,69708,69712,69715,69720,69724,69727,69733,69739,69743,69769,69771,71332,71334,71829,71832,71837,71842,71847,71851,71856,71861,71866,71870,71875,71878,71881,71884,71887,71891,71894,71899,71902,71907,71911,71916,71919,71924,71929,71934,71937,71940,71945,71950,71953,71956,71960,71963,71968,71971,71976,71979,71984,71989,71994,71997,72002,72067,72070,72081,72085,72090,72262,72266,72271,72274,72277,72280,72284,72295,72299,72302,72307,72312,72315,72318,72321,72324,72327,72329,72332,72335,72338,72343,72346,72351,72354,72358,72361,72364,72378,72382,72385,72440,72445,72448,72451,72456,72459,72463,72468,72598,72602,72607,72612,72693,72698,72702,72705,72710,72715,72721,72724,72727,72730,72734,72739,72742,72753,72757,72774,75821,75825,75828,75831,75834,75855,75859,75862,75870,75873,75878,75881,75884,75889,75894,75898,75919,75923,75928,75931,75934,75937,75940,75944,75949,75952,75956,75961,75964,75969,75972,75977,75980,75985,77188,77192,77197,77200,77205,77489],[10,54223,54219],{"id":54224},"_3web-apis",[63,54226,54227],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[63,54229,54230],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[63,54232,54233],{},[29,54234],{"alt":138,"src":54235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[63,54237,54238],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[63,54240,54241],{},"建议数组和对象使用 const 来声明",[63,54243,54244],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,54246,54248],{"id":54247},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[58,54250,54252],{"id":54251},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[63,54254,54255,54258],{},[140,54256,54257],{},"document"," = HTML 文件解析后的对象化表示；",[63,54260,54261,54263],{},[140,54262,54257],{}," ≠ HTML 文件本身",[63,54265,54266,54271],{},[25,54267,54268],{},[140,54269,54270],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[63,54273,54274,54278],{},[25,54275,54276],{},[140,54277,54257],{}," ：容器里的内容，代表当前加载的网页（DOM）",[63,54280,54281],{},"document实际上为window.document的简写",[58,54283,54285],{"id":54284},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[63,54287,54288],{},[29,54289],{"alt":138,"src":54290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[63,54292,54293],{},[29,54294],{"alt":138,"src":54295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[63,54297,54298],{},[29,54299],{"alt":138,"src":54300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[63,54302,54303],{},"console.dir()",[63,54305,54306],{},"dir用来打印对象",[232,54308,54309,54312,54315],{},[22,54310,54311],{},"任何一个标签，都是一个对象",[22,54313,54314],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[22,54316,54317],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[63,54319,54320],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[58,54322,54324],{"id":54323},"_312-获取dom对象","3.1.2 获取DoM对象",[63,54326,54327],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[63,54329,54330],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[63,54332,54333],{},[25,54334,54335],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[19,54337,54338],{},[22,54339,54340],{},"利用CSS选择器来获取标签元素",[63,54342,54343],{},[29,54344],{"alt":138,"src":54345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[63,54347,54348],{},"里边的选择器必须必须加引号！！！",[63,54350,54351],{},"只选择第一个元素",[133,54353,54355],{"className":53954,"code":54354,"language":53956,"meta":138,"style":138},"\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",[140,54356,54357,54365,54385,54404,54412,54417,54422,54427,54435],{"__ignoreMap":138},[143,54358,54359,54361,54363],{"class":145,"line":146},[143,54360,150],{"class":149},[143,54362,52688],{"class":153},[143,54364,183],{"class":149},[143,54366,54367,54369,54371,54373,54375,54378,54381,54383],{"class":145,"line":35},[143,54368,634],{"class":149},[143,54370,614],{"class":153},[143,54372,617],{"class":156},[143,54374,160],{"class":149},[143,54376,54377],{"class":163},"\"box\"",[143,54379,54380],{"class":149},">123\u003C\u002F",[143,54382,614],{"class":153},[143,54384,183],{"class":149},[143,54386,54387,54389,54391,54393,54395,54397,54400,54402],{"class":145,"line":46},[143,54388,634],{"class":149},[143,54390,614],{"class":153},[143,54392,617],{"class":156},[143,54394,160],{"class":149},[143,54396,54377],{"class":163},[143,54398,54399],{"class":149},">456\u003C\u002F",[143,54401,614],{"class":153},[143,54403,183],{"class":149},[143,54405,54406,54408,54410],{"class":145,"line":293},[143,54407,634],{"class":149},[143,54409,52701],{"class":153},[143,54411,183],{"class":149},[143,54413,54414],{"class":145,"line":306},[143,54415,54416],{"class":149},"    \u002F\u002F 1.获取匹配的第一个元素\n",[143,54418,54419],{"class":145,"line":319},[143,54420,54421],{"class":149},"    const box = document.querySelector('div')\n",[143,54423,54424],{"class":145,"line":332},[143,54425,54426],{"class":149},"    console.dir(box)\n",[143,54428,54429,54431,54433],{"class":145,"line":345},[143,54430,53304],{"class":149},[143,54432,52701],{"class":153},[143,54434,183],{"class":149},[143,54436,54437,54439,54441],{"class":145,"line":701},[143,54438,730],{"class":149},[143,54440,52688],{"class":153},[143,54442,183],{"class":149},[63,54444,54445],{},"只选123，不选456",[63,54447,54448],{},[29,54449],{"alt":138,"src":54450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[63,54452,54453],{},"返回的是一个数组的集合，不能对其进行直接修改",[63,54455,54456],{},[29,54457],{"alt":138,"src":54458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[63,54460,54461],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[63,54463,54464],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[19,54466,54467],{"start":35},[22,54468,54469],{},"其他方法来获取标签元素",[63,54471,54472],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[63,54474,54475],{},[29,54476],{"alt":138,"src":54477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[58,54479,54481],{"id":54480},"_313-操作元素的内容","3.1.3 操作元素的内容",[63,54483,54484],{},"设置修改DOM元素内容有两种方式：",[232,54486,54487,54490,54493,54496],{},[22,54488,54489],{},"元素.innerText=''",[22,54491,54492],{},"元素.innerHTML=''",[22,54494,54495],{},"不写字符串输出数字也是可以的",[22,54497,54498],{},"元素.innerHtml=1",[22896,54500,54502],{"id":54501},"_3131-innertext","3.1.3.1 innerText",[63,54504,54505],{},[29,54506],{"alt":138,"src":54507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[63,54509,54510],{},"思路：实现了修改盒子中的内容！",[63,54512,54513],{},"它只显示纯文本，不解析标签",[22896,54515,54517],{"id":54516},"_3132-innerhtml","3.1.3.2 innerHTML",[63,54519,54520],{},[29,54521],{"alt":138,"src":54522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[63,54524,54525],{},"相比于innerText，他的强大之处在于可以解析标签",[58,54527,54529],{"id":54528},"_314-操作元素属性","3.1.4 操作元素属性",[22896,54531,54533],{"id":54532},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[63,54535,54536],{},[29,54537],{"alt":138,"src":54538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22896,54540,54542],{"id":54541},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[63,54544,54545],{},[29,54546],{"alt":138,"src":54547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[63,54549,54550],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[63,54552,54553],{},"div.style.backgroundColor = 'hotpink'",[63,54555,54556],{},"如果按照css的写法，-表示减，就会出错",[63,54558,54559],{},"body元素不需要再获取，直接用就行！！！！！！",[63,54561,54562],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[63,54564,54565],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[63,54567,54568],{},[29,54569],{"alt":138,"src":54570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[63,54572,54573],{},[29,54574],{"alt":138,"src":54575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[19,54577,54578,54581,54584,54587,54590,54593],{},[22,54579,54580],{},"className这个方式就是修改很多样式的时候来使用的！",[22,54582,54583],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[22,54585,54586],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[22,54588,54589],{},"className为属性名，如果还用class的话就导致与关键字冲突",[22,54591,54592],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[22,54594,54595,54596,54601],{},"解析标签的时候就变为了",[614,54597],{"className":54598},[54599,54600],"nav","box",[54602,54603],"br",{},[63,54605,54606],{},"例子：",[614,54608],{"className":54609},[54599],[52701,54611,54612],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[63,54614,54615],{},[29,54616],{"alt":138,"src":54617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[63,54619,54620],{},"追加和删除类名用classList",[63,54622,54623],{},"常用于类似于开关的操作",[63,54625,54626],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[63,54628,54629],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22896,54631,54633],{"id":54632},"_3143-牢记点","3.1.4.3 牢记点",[19,54635,54636,54639,54642,54645,54648,54651,54654,54657,54660],{},[22,54637,54638],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[22,54640,54641],{},"使用style属性操作css时不要忘记引号",[22,54643,54644],{},"使用className或者classList时也不要忘记引号",[22,54646,54647],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[22,54649,54650],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[22,54652,54653],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[22,54655,54656],{},"若： let arr=['1','2',3] arr[0]=1",[22,54658,54659],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[22,54661,54662],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[58,54664,54666],{"id":54665},"_315-操作表单元素","3.1.5 操作表单元素",[19,54668,54669],{},[22,54670,54671],{},"天生的属性",[63,54673,54674],{},[29,54675],{"alt":138,"src":54676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[63,54678,54679],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[63,54681,54682],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[63,54684,54685],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[63,54687,54688],{},[29,54689],{"alt":138,"src":54690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[133,54692,54694],{"className":51531,"code":54693,"language":51533,"meta":138,"style":138},"在复选框中如果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",[140,54695,54696,54701,54732,54737,54742,54747,54752,54756,54761,54766,54783,54795,54800],{"__ignoreMap":138},[143,54697,54698],{"class":145,"line":146},[143,54699,54700],{"class":149},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[143,54702,54703,54705,54707,54710,54712,54715,54717,54719,54721,54723,54725,54727,54730],{"class":145,"line":35},[143,54704,150],{"class":149},[143,54706,746],{"class":153},[143,54708,54709],{"class":156}," type",[143,54711,160],{"class":149},[143,54713,54714],{"class":163},"\"checkbox\"",[143,54716,15819],{"class":156},[143,54718,160],{"class":149},[143,54720,8552],{"class":163},[143,54722,15858],{"class":156},[143,54724,160],{"class":149},[143,54726,8552],{"class":163},[143,54728,54729],{"class":156}," checked",[143,54731,183],{"class":149},[143,54733,54734],{"class":145,"line":46},[143,54735,54736],{"class":149},"不选的话：\n",[143,54738,54739],{"class":145,"line":293},[143,54740,54741],{"class":149},"const input = document.querySelector('input')\n",[143,54743,54744],{"class":145,"line":306},[143,54745,54746],{"class":149},"input.checked=false\n",[143,54748,54749],{"class":145,"line":319},[143,54750,54751],{"class":149},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[143,54753,54754],{"class":145,"line":332},[143,54755,3300],{"emptyLinePlaceholder":976},[143,54757,54758],{"class":145,"line":345},[143,54759,54760],{"class":149},"禁用按钮：\n",[143,54762,54763],{"class":145,"line":701},[143,54764,54765],{"class":149},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[143,54767,54768,54770,54773,54776,54779,54781],{"class":145,"line":707},[143,54769,150],{"class":149},[143,54771,54772],{"class":153},"button",[143,54774,54775],{"class":156}," disabled",[143,54777,54778],{"class":149},">点击\u003C\u002F",[143,54780,54772],{"class":153},[143,54782,183],{"class":149},[143,54784,54785,54787,54789,54791,54793],{"class":145,"line":727},[143,54786,150],{"class":149},[143,54788,54772],{"class":153},[143,54790,54778],{"class":149},[143,54792,54772],{"class":153},[143,54794,183],{"class":149},[143,54796,54797],{"class":145,"line":2518},[143,54798,54799],{"class":149},"const bt = document.querySelector('button')\n",[143,54801,54802],{"class":145,"line":2524},[143,54803,54804],{"class":149},"bt.disabled = false\n",[19,54806,54807],{"start":35},[22,54808,54809],{},"自定义属性",[63,54811,54812],{},[29,54813],{"alt":138,"src":54814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[133,54816,54818],{"className":53954,"code":54817,"language":53956,"meta":138,"style":138},"\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",[140,54819,54820,54828,54856,54875,54894,54913,54932,54940,54945,54950,54955,54960,54968],{"__ignoreMap":138},[143,54821,54822,54824,54826],{"class":145,"line":146},[143,54823,150],{"class":149},[143,54825,52688],{"class":153},[143,54827,183],{"class":149},[143,54829,54830,54832,54834,54837,54839,54841,54844,54846,54849,54852,54854],{"class":145,"line":35},[143,54831,634],{"class":149},[143,54833,614],{"class":153},[143,54835,54836],{"class":156}," data-id",[143,54838,160],{"class":149},[143,54840,4578],{"class":163},[143,54842,54843],{"class":156}," data-spm",[143,54845,160],{"class":149},[143,54847,54848],{"class":163},"\"我不知道\"",[143,54850,54851],{"class":149},">1\u003C\u002F",[143,54853,614],{"class":153},[143,54855,183],{"class":149},[143,54857,54858,54860,54862,54864,54866,54868,54871,54873],{"class":145,"line":46},[143,54859,634],{"class":149},[143,54861,614],{"class":153},[143,54863,54836],{"class":156},[143,54865,160],{"class":149},[143,54867,4601],{"class":163},[143,54869,54870],{"class":149},">2\u003C\u002F",[143,54872,614],{"class":153},[143,54874,183],{"class":149},[143,54876,54877,54879,54881,54883,54885,54887,54890,54892],{"class":145,"line":293},[143,54878,634],{"class":149},[143,54880,614],{"class":153},[143,54882,54836],{"class":156},[143,54884,160],{"class":149},[143,54886,4614],{"class":163},[143,54888,54889],{"class":149},">3\u003C\u002F",[143,54891,614],{"class":153},[143,54893,183],{"class":149},[143,54895,54896,54898,54900,54902,54904,54906,54909,54911],{"class":145,"line":306},[143,54897,634],{"class":149},[143,54899,614],{"class":153},[143,54901,54836],{"class":156},[143,54903,160],{"class":149},[143,54905,4627],{"class":163},[143,54907,54908],{"class":149},">4\u003C\u002F",[143,54910,614],{"class":153},[143,54912,183],{"class":149},[143,54914,54915,54917,54919,54921,54923,54925,54928,54930],{"class":145,"line":319},[143,54916,634],{"class":149},[143,54918,614],{"class":153},[143,54920,54836],{"class":156},[143,54922,160],{"class":149},[143,54924,4648],{"class":163},[143,54926,54927],{"class":149},">5\u003C\u002F",[143,54929,614],{"class":153},[143,54931,183],{"class":149},[143,54933,54934,54936,54938],{"class":145,"line":332},[143,54935,634],{"class":149},[143,54937,52701],{"class":153},[143,54939,183],{"class":149},[143,54941,54942],{"class":145,"line":345},[143,54943,54944],{"class":149},"    const one = document.querySelector('div')\n",[143,54946,54947],{"class":145,"line":701},[143,54948,54949],{"class":149},"    console.log(one.dataset)\n",[143,54951,54952],{"class":145,"line":707},[143,54953,54954],{"class":149},"    console.log(one.dataset.id)\n",[143,54956,54957],{"class":145,"line":727},[143,54958,54959],{"class":149},"    console.log(one.dataset.spm)\n",[143,54961,54962,54964,54966],{"class":145,"line":2518},[143,54963,53304],{"class":149},[143,54965,52701],{"class":153},[143,54967,183],{"class":149},[143,54969,54970,54972,54974],{"class":145,"line":2524},[143,54971,730],{"class":149},[143,54973,52688],{"class":153},[143,54975,183],{"class":149},[63,54977,54978],{},[29,54979],{"alt":138,"src":54980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[63,54982,54983],{},"document.querySelector选择的是第一个对象（元素）",[58,54985,54987],{"id":54986},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[63,54989,54990],{},[29,54991],{"alt":138,"src":54992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[63,54994,54995],{},[29,54996],{"alt":138,"src":54997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[63,54999,55000],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52701,55002,55003],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[63,55005,55006],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52701,55008,55009],{},"\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",[63,55011,55012],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[63,55014,55015],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[63,55017,55018],{},"单位为毫秒！！！",[63,55020,55021],{},"可以搭配匿名函数来用！！！",[63,55023,55024],{},"setInterval(function () {",[63,55026,55027],{},"alert('两秒执行一次')",[63,55029,55030],{},"}, 2000)",[63,55032,55033],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[63,55035,55036],{},"function fn() {",[63,55038,55039],{},"document.write(1)",[63,55041,366],{},[63,55043,55044],{},"setInterval(fn, 1000)",[63,55046,55047],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[63,55049,55050],{},"setInterval('fn()', 1000)",[63,55052,55053],{},[29,55054],{"alt":138,"src":55055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22896,55057,55059],{"id":55058},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[133,55061,55063],{"className":51531,"code":55062,"language":51533,"meta":138,"style":138},"\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",[140,55064,55065,55075,55089,55093,55101,55115,55135,55147,55155,55159,55167,55204,55209,55214,55219,55227,55235,55257,55265,55270,55292,55297,55302,55313,55318,55338,55346,55361,55376,55387,55392,55402,55412,55416,55425,55429,55437,55445,55449],{"__ignoreMap":138},[143,55066,55067,55069,55071,55073],{"class":145,"line":146},[143,55068,52195],{"class":149},[143,55070,52198],{"class":153},[143,55072,52201],{"class":156},[143,55074,183],{"class":149},[143,55076,55077,55079,55081,55083,55085,55087],{"class":145,"line":35},[143,55078,150],{"class":149},[143,55080,51533],{"class":153},[143,55082,52212],{"class":156},[143,55084,160],{"class":149},[143,55086,52217],{"class":163},[143,55088,183],{"class":149},[143,55090,55091],{"class":145,"line":46},[143,55092,3300],{"emptyLinePlaceholder":976},[143,55094,55095,55097,55099],{"class":145,"line":293},[143,55096,150],{"class":149},[143,55098,52230],{"class":153},[143,55100,183],{"class":149},[143,55102,55103,55105,55107,55109,55111,55113],{"class":145,"line":306},[143,55104,634],{"class":149},[143,55106,52240],{"class":153},[143,55108,52243],{"class":156},[143,55110,160],{"class":149},[143,55112,52248],{"class":163},[143,55114,183],{"class":149},[143,55116,55117,55119,55121,55123,55125,55127,55129,55131,55133],{"class":145,"line":319},[143,55118,634],{"class":149},[143,55120,52240],{"class":153},[143,55122,15819],{"class":156},[143,55124,160],{"class":149},[143,55126,52287],{"class":163},[143,55128,52267],{"class":156},[143,55130,160],{"class":149},[143,55132,52294],{"class":163},[143,55134,183],{"class":149},[143,55136,55137,55139,55141,55143,55145],{"class":145,"line":332},[143,55138,634],{"class":149},[143,55140,52303],{"class":153},[143,55142,52306],{"class":149},[143,55144,52303],{"class":153},[143,55146,183],{"class":149},[143,55148,55149,55151,55153],{"class":145,"line":345},[143,55150,730],{"class":149},[143,55152,52230],{"class":153},[143,55154,183],{"class":149},[143,55156,55157],{"class":145,"line":701},[143,55158,3300],{"emptyLinePlaceholder":976},[143,55160,55161,55163,55165],{"class":145,"line":707},[143,55162,150],{"class":149},[143,55164,52688],{"class":153},[143,55166,183],{"class":149},[143,55168,55169,55171,55174,55176,55178,55180,55182,55184,55186,55189,55191,55194,55197,55199,55202],{"class":145,"line":727},[143,55170,634],{"class":149},[143,55172,55173],{"class":153},"textarea",[143,55175,15819],{"class":156},[143,55177,160],{"class":149},[143,55179,8552],{"class":163},[143,55181,15858],{"class":156},[143,55183,160],{"class":149},[143,55185,8552],{"class":163},[143,55187,55188],{"class":156}," cols",[143,55190,160],{"class":149},[143,55192,55193],{"class":163},"\"30\"",[143,55195,55196],{"class":156}," rows",[143,55198,160],{"class":149},[143,55200,55201],{"class":163},"\"10\"",[143,55203,183],{"class":149},[143,55205,55206],{"class":145,"line":2518},[143,55207,55208],{"class":149},"        用户注册协议\n",[143,55210,55211],{"class":145,"line":2524},[143,55212,55213],{"class":149},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[143,55215,55216],{"class":145,"line":2529},[143,55217,55218],{"class":149},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[143,55220,55221,55223,55225],{"class":145,"line":2543},[143,55222,52665],{"class":149},[143,55224,55173],{"class":153},[143,55226,183],{"class":149},[143,55228,55229,55231,55233],{"class":145,"line":2548},[143,55230,634],{"class":149},[143,55232,54602],{"class":153},[143,55234,183],{"class":149},[143,55236,55237,55239,55241,55243,55245,55248,55250,55253,55255],{"class":145,"line":2554},[143,55238,634],{"class":149},[143,55240,54772],{"class":153},[143,55242,617],{"class":156},[143,55244,160],{"class":149},[143,55246,55247],{"class":163},"\"btn\"",[143,55249,54775],{"class":156},[143,55251,55252],{"class":149},">我已经阅读用户协议(5)\u003C\u002F",[143,55254,54772],{"class":153},[143,55256,183],{"class":149},[143,55258,55259,55261,55263],{"class":145,"line":2575},[143,55260,634],{"class":149},[143,55262,52701],{"class":153},[143,55264,183],{"class":149},[143,55266,55267],{"class":145,"line":2580},[143,55268,55269],{"class":266},"    \u002F\u002F 1. 获取元素\n",[143,55271,55272,55274,55277,55279,55282,55285,55287,55290],{"class":145,"line":2594},[143,55273,12121],{"class":755},[143,55275,55276],{"class":280}," btn",[143,55278,14464],{"class":755},[143,55280,55281],{"class":149}," document.",[143,55283,55284],{"class":156},"querySelector",[143,55286,1049],{"class":149},[143,55288,55289],{"class":163},"'.btn'",[143,55291,1055],{"class":149},[143,55293,55294],{"class":145,"line":2599},[143,55295,55296],{"class":266},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[143,55298,55299],{"class":145,"line":2628},[143,55300,55301],{"class":266},"    \u002F\u002F 2. 倒计时\n",[143,55303,55304,55306,55308,55310],{"class":145,"line":2633},[143,55305,53106],{"class":755},[143,55307,10338],{"class":149},[143,55309,160],{"class":755},[143,55311,55312],{"class":280}," 5\n",[143,55314,55315],{"class":145,"line":2650},[143,55316,55317],{"class":266},"    \u002F\u002F 2.1 开启定时器\n",[143,55319,55320,55322,55325,55327,55330,55332,55335],{"class":145,"line":2655},[143,55321,53106],{"class":755},[143,55323,55324],{"class":149}," n ",[143,55326,160],{"class":755},[143,55328,55329],{"class":156}," setInterval",[143,55331,1049],{"class":149},[143,55333,55334],{"class":755},"function",[143,55336,55337],{"class":149}," () {\n",[143,55339,55340,55343],{"class":145,"line":2660},[143,55341,55342],{"class":149},"      i",[143,55344,55345],{"class":755},"--\n",[143,55347,55348,55351,55353,55356,55358],{"class":145,"line":2665},[143,55349,55350],{"class":149},"      btn.innerHTML ",[143,55352,160],{"class":755},[143,55354,55355],{"class":163}," `我已经阅读用户协议(${",[143,55357,1482],{"class":149},[143,55359,55360],{"class":163},"})`\n",[143,55362,55363,55366,55369,55372,55374],{"class":145,"line":2679},[143,55364,55365],{"class":755},"      if",[143,55367,55368],{"class":149}," (i ",[143,55370,55371],{"class":755},"===",[143,55373,4993],{"class":280},[143,55375,13342],{"class":149},[143,55377,55378,55381,55384],{"class":145,"line":2684},[143,55379,55380],{"class":156},"        clearInterval",[143,55382,55383],{"class":149},"(n)  ",[143,55385,55386],{"class":266},"\u002F\u002F 关闭定时器\n",[143,55388,55389],{"class":145,"line":3477},[143,55390,55391],{"class":266},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[143,55393,55394,55397,55399],{"class":145,"line":3491},[143,55395,55396],{"class":149},"        btn.disabled ",[143,55398,160],{"class":755},[143,55400,55401],{"class":280}," false\n",[143,55403,55404,55407,55409],{"class":145,"line":3499},[143,55405,55406],{"class":149},"        btn.innerHTML ",[143,55408,160],{"class":755},[143,55410,55411],{"class":163}," '同意'\n",[143,55413,55414],{"class":145,"line":3504},[143,55415,53285],{"class":149},[143,55417,55418,55421,55423],{"class":145,"line":3510},[143,55419,55420],{"class":149},"    }, ",[143,55422,7310],{"class":280},[143,55424,1055],{"class":149},[143,55426,55427],{"class":145,"line":3516},[143,55428,3300],{"emptyLinePlaceholder":976},[143,55430,55431,55433,55435],{"class":145,"line":3521},[143,55432,53304],{"class":149},[143,55434,52701],{"class":153},[143,55436,183],{"class":149},[143,55438,55439,55441,55443],{"class":145,"line":8848},[143,55440,730],{"class":149},[143,55442,52688],{"class":153},[143,55444,183],{"class":149},[143,55446,55447],{"class":145,"line":8872},[143,55448,3300],{"emptyLinePlaceholder":976},[143,55450,55451,55453,55455],{"class":145,"line":8877},[143,55452,730],{"class":149},[143,55454,51533],{"class":153},[143,55456,183],{"class":149},[63,55458,55459],{},"不要一直想着用死循环,避免死循环",[63,55461,55462,55465],{},[140,55463,55464],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22896,55467,55469],{"id":55468},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[19,55471,55472],{},[22,55473,55474],{},"法1",[133,55476,55478],{"className":51531,"code":55477,"language":51533,"meta":138,"style":138},"\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",[140,55479,55480,55490,55504,55508,55516,55530,55550,55562,55570,55576,55587,55598,55602,55606,55613,55625,55629,55633,55640,55652,55666,55679,55693,55697,55701,55708,55719,55730,55741,55753,55765,55777,55781,55785,55793,55803,55816,55828,55841,55845,55849,55856,55866,55878,55890,55901,55912,55922,55934,55946,55950,55954,55963,55975,55987,56015,56028,56032,56036,56043,56054,56058,56066,56074,56078,56086,56100,56115,56137,56145,56160,56173,56181,56202,56214,56226,56238,56250,56262,56274,56286,56295,56303,56311,56319,56331,56354,56373,56392,56411,56430,56449,56468,56488,56492,56512,56531,56551,56572,56583,56600,56610,56620,56630,56635,56640,56645,56650,56675,56688,56692,56715,56719,56727,56735,56743,56747],{"__ignoreMap":138},[143,55481,55482,55484,55486,55488],{"class":145,"line":146},[143,55483,52195],{"class":149},[143,55485,52198],{"class":153},[143,55487,52201],{"class":156},[143,55489,183],{"class":149},[143,55491,55492,55494,55496,55498,55500,55502],{"class":145,"line":35},[143,55493,150],{"class":149},[143,55495,51533],{"class":153},[143,55497,52212],{"class":156},[143,55499,160],{"class":149},[143,55501,52217],{"class":163},[143,55503,183],{"class":149},[143,55505,55506],{"class":145,"line":46},[143,55507,3300],{"emptyLinePlaceholder":976},[143,55509,55510,55512,55514],{"class":145,"line":293},[143,55511,150],{"class":149},[143,55513,52230],{"class":153},[143,55515,183],{"class":149},[143,55517,55518,55520,55522,55524,55526,55528],{"class":145,"line":306},[143,55519,634],{"class":149},[143,55521,52240],{"class":153},[143,55523,52243],{"class":156},[143,55525,160],{"class":149},[143,55527,52248],{"class":163},[143,55529,183],{"class":149},[143,55531,55532,55534,55536,55538,55540,55542,55544,55546,55548],{"class":145,"line":319},[143,55533,634],{"class":149},[143,55535,52240],{"class":153},[143,55537,15819],{"class":156},[143,55539,160],{"class":149},[143,55541,52287],{"class":163},[143,55543,52267],{"class":156},[143,55545,160],{"class":149},[143,55547,52294],{"class":163},[143,55549,183],{"class":149},[143,55551,55552,55554,55556,55558,55560],{"class":145,"line":332},[143,55553,634],{"class":149},[143,55555,52303],{"class":153},[143,55557,52306],{"class":149},[143,55559,52303],{"class":153},[143,55561,183],{"class":149},[143,55563,55564,55566,55568],{"class":145,"line":345},[143,55565,634],{"class":149},[143,55567,954],{"class":153},[143,55569,183],{"class":149},[143,55571,55572,55574],{"class":145,"line":701},[143,55573,7303],{"class":153},[143,55575,275],{"class":149},[143,55577,55578,55581,55583,55585],{"class":145,"line":707},[143,55579,55580],{"class":280},"      padding",[143,55582,284],{"class":149},[143,55584,1234],{"class":280},[143,55586,290],{"class":149},[143,55588,55589,55592,55594,55596],{"class":145,"line":727},[143,55590,55591],{"class":280},"      margin",[143,55593,284],{"class":149},[143,55595,1234],{"class":280},[143,55597,290],{"class":149},[143,55599,55600],{"class":145,"line":2518},[143,55601,3087],{"class":149},[143,55603,55604],{"class":145,"line":2524},[143,55605,3300],{"emptyLinePlaceholder":976},[143,55607,55608,55611],{"class":145,"line":2529},[143,55609,55610],{"class":153},"    li",[143,55612,275],{"class":149},[143,55614,55615,55618,55620,55623],{"class":145,"line":2543},[143,55616,55617],{"class":280},"      list-style",[143,55619,284],{"class":149},[143,55621,55622],{"class":280},"none",[143,55624,290],{"class":149},[143,55626,55627],{"class":145,"line":2548},[143,55628,3087],{"class":149},[143,55630,55631],{"class":145,"line":2554},[143,55632,3300],{"emptyLinePlaceholder":976},[143,55634,55635,55638],{"class":145,"line":2575},[143,55636,55637],{"class":156},"    .box",[143,55639,275],{"class":149},[143,55641,55642,55645,55647,55650],{"class":145,"line":2580},[143,55643,55644],{"class":280},"      position",[143,55646,284],{"class":149},[143,55648,55649],{"class":280},"relative",[143,55651,290],{"class":149},[143,55653,55654,55657,55659,55662,55664],{"class":145,"line":2594},[143,55655,55656],{"class":280},"      width",[143,55658,284],{"class":149},[143,55660,55661],{"class":280},"976",[143,55663,774],{"class":755},[143,55665,290],{"class":149},[143,55667,55668,55671,55673,55675,55677],{"class":145,"line":2599},[143,55669,55670],{"class":280},"      height",[143,55672,284],{"class":149},[143,55674,2442],{"class":280},[143,55676,774],{"class":755},[143,55678,290],{"class":149},[143,55680,55681,55683,55685,55687,55689,55691],{"class":145,"line":2628},[143,55682,55591],{"class":280},[143,55684,284],{"class":149},[143,55686,1352],{"class":280},[143,55688,774],{"class":755},[143,55690,52448],{"class":280},[143,55692,290],{"class":149},[143,55694,55695],{"class":145,"line":2633},[143,55696,3087],{"class":149},[143,55698,55699],{"class":145,"line":2650},[143,55700,3300],{"emptyLinePlaceholder":976},[143,55702,55703,55706],{"class":145,"line":2655},[143,55704,55705],{"class":156},"    .slider-footer",[143,55707,275],{"class":149},[143,55709,55710,55712,55714,55717],{"class":145,"line":2660},[143,55711,55644],{"class":280},[143,55713,284],{"class":149},[143,55715,55716],{"class":280},"absolute",[143,55718,290],{"class":149},[143,55720,55721,55724,55726,55728],{"class":145,"line":2665},[143,55722,55723],{"class":280},"      left",[143,55725,284],{"class":149},[143,55727,1234],{"class":280},[143,55729,290],{"class":149},[143,55731,55732,55735,55737,55739],{"class":145,"line":2679},[143,55733,55734],{"class":280},"      bottom",[143,55736,284],{"class":149},[143,55738,1234],{"class":280},[143,55740,290],{"class":149},[143,55742,55743,55745,55747,55749,55751],{"class":145,"line":2684},[143,55744,55656],{"class":280},[143,55746,284],{"class":149},[143,55748,1352],{"class":280},[143,55750,1369],{"class":755},[143,55752,290],{"class":149},[143,55754,55755,55757,55759,55761,55763],{"class":145,"line":3477},[143,55756,55670],{"class":280},[143,55758,284],{"class":149},[143,55760,1616],{"class":280},[143,55762,1369],{"class":755},[143,55764,290],{"class":149},[143,55766,55767,55770,55772,55775],{"class":145,"line":3491},[143,55768,55769],{"class":280},"      background-color",[143,55771,284],{"class":149},[143,55773,55774],{"class":280},"skyblue",[143,55776,290],{"class":149},[143,55778,55779],{"class":145,"line":3499},[143,55780,3087],{"class":149},[143,55782,55783],{"class":145,"line":3504},[143,55784,3300],{"emptyLinePlaceholder":976},[143,55786,55787,55789,55791],{"class":145,"line":3510},[143,55788,55705],{"class":156},[143,55790,7725],{"class":153},[143,55792,275],{"class":149},[143,55794,55795,55797,55799,55801],{"class":145,"line":3516},[143,55796,55644],{"class":280},[143,55798,284],{"class":149},[143,55800,55716],{"class":280},[143,55802,290],{"class":149},[143,55804,55805,55808,55810,55812,55814],{"class":145,"line":3521},[143,55806,55807],{"class":280},"      font-size",[143,55809,284],{"class":149},[143,55811,1941],{"class":280},[143,55813,774],{"class":755},[143,55815,290],{"class":149},[143,55817,55818,55820,55822,55824,55826],{"class":145,"line":8848},[143,55819,55723],{"class":280},[143,55821,284],{"class":149},[143,55823,1741],{"class":280},[143,55825,774],{"class":755},[143,55827,290],{"class":149},[143,55829,55830,55833,55835,55837,55839],{"class":145,"line":8872},[143,55831,55832],{"class":280},"      top",[143,55834,284],{"class":149},[143,55836,1360],{"class":280},[143,55838,774],{"class":755},[143,55840,290],{"class":149},[143,55842,55843],{"class":145,"line":8877},[143,55844,3087],{"class":149},[143,55846,55847],{"class":145,"line":8883},[143,55848,3300],{"emptyLinePlaceholder":976},[143,55850,55851,55854],{"class":145,"line":8910},[143,55852,55853],{"class":153},"    ul",[143,55855,275],{"class":149},[143,55857,55858,55860,55862,55864],{"class":145,"line":8915},[143,55859,55644],{"class":280},[143,55861,284],{"class":149},[143,55863,55716],{"class":280},[143,55865,290],{"class":149},[143,55867,55868,55870,55872,55874,55876],{"class":145,"line":8921},[143,55869,55832],{"class":280},[143,55871,284],{"class":149},[143,55873,1822],{"class":280},[143,55875,774],{"class":755},[143,55877,290],{"class":149},[143,55879,55880,55882,55884,55886,55888],{"class":145,"line":8933},[143,55881,55723],{"class":280},[143,55883,284],{"class":149},[143,55885,1741],{"class":280},[143,55887,774],{"class":755},[143,55889,290],{"class":149},[143,55891,55892,55895,55897,55899],{"class":145,"line":8945},[143,55893,55894],{"class":280},"      display",[143,55896,284],{"class":149},[143,55898,287],{"class":280},[143,55900,290],{"class":149},[143,55902,55903,55906,55908,55910],{"class":145,"line":8957},[143,55904,55905],{"class":280},"      justify-content",[143,55907,284],{"class":149},[143,55909,314],{"class":280},[143,55911,290],{"class":149},[143,55913,55914,55916,55918,55920],{"class":145,"line":10616},[143,55915,55644],{"class":280},[143,55917,284],{"class":149},[143,55919,55716],{"class":280},[143,55921,290],{"class":149},[143,55923,55924,55926,55928,55930,55932],{"class":145,"line":10641},[143,55925,55656],{"class":280},[143,55927,284],{"class":149},[143,55929,4892],{"class":280},[143,55931,774],{"class":755},[143,55933,290],{"class":149},[143,55935,55936,55938,55940,55942,55944],{"class":145,"line":10664},[143,55937,55670],{"class":280},[143,55939,284],{"class":149},[143,55941,1741],{"class":280},[143,55943,774],{"class":755},[143,55945,290],{"class":149},[143,55947,55948],{"class":145,"line":10688},[143,55949,3087],{"class":149},[143,55951,55952],{"class":145,"line":10693},[143,55953,3300],{"emptyLinePlaceholder":976},[143,55955,55956,55958,55961],{"class":145,"line":10698},[143,55957,55853],{"class":153},[143,55959,55960],{"class":153}," li",[143,55962,275],{"class":149},[143,55964,55965,55967,55969,55971,55973],{"class":145,"line":10703},[143,55966,55656],{"class":280},[143,55968,284],{"class":149},[143,55970,1741],{"class":280},[143,55972,774],{"class":755},[143,55974,290],{"class":149},[143,55976,55977,55979,55981,55983,55985],{"class":145,"line":10712},[143,55978,55670],{"class":280},[143,55980,284],{"class":149},[143,55982,1741],{"class":280},[143,55984,774],{"class":755},[143,55986,290],{"class":149},[143,55988,55989,55991,55993,55996,55998,56000,56002,56004,56006,56008,56010,56013],{"class":145,"line":10717},[143,55990,55769],{"class":280},[143,55992,284],{"class":149},[143,55994,55995],{"class":280},"rgba",[143,55997,1049],{"class":149},[143,55999,1234],{"class":280},[143,56001,13335],{"class":149},[143,56003,1234],{"class":280},[143,56005,13335],{"class":149},[143,56007,1234],{"class":280},[143,56009,13335],{"class":149},[143,56011,56012],{"class":280},".4",[143,56014,3619],{"class":149},[143,56016,56017,56020,56022,56024,56026],{"class":145,"line":10723},[143,56018,56019],{"class":280},"      border-radius",[143,56021,284],{"class":149},[143,56023,1487],{"class":280},[143,56025,774],{"class":755},[143,56027,290],{"class":149},[143,56029,56030],{"class":145,"line":10744},[143,56031,3087],{"class":149},[143,56033,56034],{"class":145,"line":10750},[143,56035,3300],{"emptyLinePlaceholder":976},[143,56037,56038,56041],{"class":145,"line":10764},[143,56039,56040],{"class":156},"    .activate",[143,56042,275],{"class":149},[143,56044,56045,56047,56049,56052],{"class":145,"line":10770},[143,56046,55769],{"class":280},[143,56048,284],{"class":149},[143,56050,56051],{"class":280},"#f7f7f7",[143,56053,290],{"class":149},[143,56055,56056],{"class":145,"line":10797},[143,56057,3087],{"class":149},[143,56059,56060,56062,56064],{"class":145,"line":10806},[143,56061,53304],{"class":149},[143,56063,954],{"class":153},[143,56065,183],{"class":149},[143,56067,56068,56070,56072],{"class":145,"line":10812},[143,56069,730],{"class":149},[143,56071,52230],{"class":153},[143,56073,183],{"class":149},[143,56075,56076],{"class":145,"line":10820},[143,56077,3300],{"emptyLinePlaceholder":976},[143,56079,56080,56082,56084],{"class":145,"line":10825},[143,56081,150],{"class":149},[143,56083,52688],{"class":153},[143,56085,183],{"class":149},[143,56087,56088,56090,56092,56094,56096,56098],{"class":145,"line":17502},[143,56089,634],{"class":149},[143,56091,614],{"class":153},[143,56093,617],{"class":156},[143,56095,160],{"class":149},[143,56097,54377],{"class":163},[143,56099,183],{"class":149},[143,56101,56102,56104,56106,56108,56110,56113],{"class":145,"line":17508},[143,56103,52237],{"class":149},[143,56105,614],{"class":153},[143,56107,617],{"class":156},[143,56109,160],{"class":149},[143,56111,56112],{"class":163},"\"slider-wrapper\"",[143,56114,183],{"class":149},[143,56116,56117,56120,56122,56124,56126,56129,56131,56133,56135],{"class":145,"line":17531},[143,56118,56119],{"class":149},"      \u003C",[143,56121,29],{"class":153},[143,56123,157],{"class":156},[143,56125,160],{"class":149},[143,56127,56128],{"class":163},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[143,56130,167],{"class":156},[143,56132,160],{"class":149},[143,56134,8552],{"class":163},[143,56136,183],{"class":149},[143,56138,56139,56141,56143],{"class":145,"line":17537},[143,56140,52665],{"class":149},[143,56142,614],{"class":153},[143,56144,183],{"class":149},[143,56146,56147,56149,56151,56153,56155,56158],{"class":145,"line":17560},[143,56148,52237],{"class":149},[143,56150,614],{"class":153},[143,56152,617],{"class":156},[143,56154,160],{"class":149},[143,56156,56157],{"class":163},"\"slider-footer\"",[143,56159,183],{"class":149},[143,56161,56162,56164,56166,56169,56171],{"class":145,"line":17574},[143,56163,56119],{"class":149},[143,56165,63],{"class":153},[143,56167,56168],{"class":149},">对人类来说会不会太超前了?\u003C\u002F",[143,56170,63],{"class":153},[143,56172,183],{"class":149},[143,56174,56175,56177,56179],{"class":145,"line":17594},[143,56176,56119],{"class":149},[143,56178,232],{"class":153},[143,56180,183],{"class":149},[143,56182,56183,56186,56188,56190,56192,56195,56198,56200],{"class":145,"line":17600},[143,56184,56185],{"class":149},"        \u003C",[143,56187,22],{"class":153},[143,56189,617],{"class":156},[143,56191,160],{"class":149},[143,56193,56194],{"class":163},"\"activate\"",[143,56196,56197],{"class":149},">\u003C\u002F",[143,56199,22],{"class":153},[143,56201,183],{"class":149},[143,56203,56204,56206,56208,56210,56212],{"class":145,"line":17611},[143,56205,56185],{"class":149},[143,56207,22],{"class":153},[143,56209,56197],{"class":149},[143,56211,22],{"class":153},[143,56213,183],{"class":149},[143,56215,56216,56218,56220,56222,56224],{"class":145,"line":17634},[143,56217,56185],{"class":149},[143,56219,22],{"class":153},[143,56221,56197],{"class":149},[143,56223,22],{"class":153},[143,56225,183],{"class":149},[143,56227,56228,56230,56232,56234,56236],{"class":145,"line":17656},[143,56229,56185],{"class":149},[143,56231,22],{"class":153},[143,56233,56197],{"class":149},[143,56235,22],{"class":153},[143,56237,183],{"class":149},[143,56239,56240,56242,56244,56246,56248],{"class":145,"line":17661},[143,56241,56185],{"class":149},[143,56243,22],{"class":153},[143,56245,56197],{"class":149},[143,56247,22],{"class":153},[143,56249,183],{"class":149},[143,56251,56252,56254,56256,56258,56260],{"class":145,"line":17667},[143,56253,56185],{"class":149},[143,56255,22],{"class":153},[143,56257,56197],{"class":149},[143,56259,22],{"class":153},[143,56261,183],{"class":149},[143,56263,56264,56266,56268,56270,56272],{"class":145,"line":17681},[143,56265,56185],{"class":149},[143,56267,22],{"class":153},[143,56269,56197],{"class":149},[143,56271,22],{"class":153},[143,56273,183],{"class":149},[143,56275,56276,56278,56280,56282,56284],{"class":145,"line":17694},[143,56277,56185],{"class":149},[143,56279,22],{"class":153},[143,56281,56197],{"class":149},[143,56283,22],{"class":153},[143,56285,183],{"class":149},[143,56287,56288,56291,56293],{"class":145,"line":17699},[143,56289,56290],{"class":149},"      \u003C\u002F",[143,56292,232],{"class":153},[143,56294,183],{"class":149},[143,56296,56297,56299,56301],{"class":145,"line":17713},[143,56298,52665],{"class":149},[143,56300,614],{"class":153},[143,56302,183],{"class":149},[143,56304,56305,56307,56309],{"class":145,"line":17718},[143,56306,53304],{"class":149},[143,56308,614],{"class":153},[143,56310,183],{"class":149},[143,56312,56313,56315,56317],{"class":145,"line":17724},[143,56314,634],{"class":149},[143,56316,52701],{"class":153},[143,56318,183],{"class":149},[143,56320,56321,56323,56326,56328],{"class":145,"line":17729},[143,56322,12121],{"class":755},[143,56324,56325],{"class":280}," arrImage",[143,56327,14464],{"class":755},[143,56329,56330],{"class":149}," [\n",[143,56332,56333,56336,56339,56342,56345,56348,56351],{"class":145,"line":17743},[143,56334,56335],{"class":149},"      { url: ",[143,56337,56338],{"class":163},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[143,56340,56341],{"class":149},", title: ",[143,56343,56344],{"class":163},"'对人类来说会不会太超前了?'",[143,56346,56347],{"class":149},", color: ",[143,56349,56350],{"class":163},"'rgba(100,67,68)'",[143,56352,56353],{"class":149}," },\n",[143,56355,56356,56358,56361,56363,56366,56368,56371],{"class":145,"line":17748},[143,56357,56335],{"class":149},[143,56359,56360],{"class":163},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[143,56362,56341],{"class":149},[143,56364,56365],{"class":163},"'开启剑与雪的黑暗传说!'",[143,56367,56347],{"class":149},[143,56369,56370],{"class":163},"'rgba(43,35,26)'",[143,56372,56353],{"class":149},[143,56374,56375,56377,56380,56382,56385,56387,56390],{"class":145,"line":17753},[143,56376,56335],{"class":149},[143,56378,56379],{"class":163},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[143,56381,56341],{"class":149},[143,56383,56384],{"class":163},"'真正的jo厨出现了!'",[143,56386,56347],{"class":149},[143,56388,56389],{"class":163},"'rgba(36,31,33)'",[143,56391,56353],{"class":149},[143,56393,56394,56396,56399,56401,56404,56406,56409],{"class":145,"line":17767},[143,56395,56335],{"class":149},[143,56397,56398],{"class":163},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[143,56400,56341],{"class":149},[143,56402,56403],{"class":163},"'李玉刚:让世界通过b站看到东方大国文化'",[143,56405,56347],{"class":149},[143,56407,56408],{"class":163},"'rgba(139,98,66)'",[143,56410,56353],{"class":149},[143,56412,56413,56415,56418,56420,56423,56425,56428],{"class":145,"line":17779},[143,56414,56335],{"class":149},[143,56416,56417],{"class":163},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[143,56419,56341],{"class":149},[143,56421,56422],{"class":163},"'快来分享你的寒假日常吧'",[143,56424,56347],{"class":149},[143,56426,56427],{"class":163},"'rgba(67,90,92)'",[143,56429,56353],{"class":149},[143,56431,56432,56434,56437,56439,56442,56444,56447],{"class":145,"line":17784},[143,56433,56335],{"class":149},[143,56435,56436],{"class":163},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[143,56438,56341],{"class":149},[143,56440,56441],{"class":163},"'哔哩哔哩小年YEAR'",[143,56443,56347],{"class":149},[143,56445,56446],{"class":163},"'rgba(166,131,143)'",[143,56448,56353],{"class":149},[143,56450,56451,56453,56456,56458,56461,56463,56466],{"class":145,"line":17797},[143,56452,56335],{"class":149},[143,56454,56455],{"class":163},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[143,56457,56341],{"class":149},[143,56459,56460],{"class":163},"'一站式解决你的电脑配置问题'",[143,56462,56347],{"class":149},[143,56464,56465],{"class":163},"'rgba(53,29,25)'",[143,56467,56353],{"class":149},[143,56469,56470,56472,56475,56477,56480,56482,56485],{"class":145,"line":17802},[143,56471,56335],{"class":149},[143,56473,56474],{"class":163},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[143,56476,56341],{"class":149},[143,56478,56479],{"class":163},"'谁不想和小猫咪贴贴呢?'",[143,56481,56347],{"class":149},[143,56483,56484],{"class":163},"'rgba(99,72,114)'",[143,56486,56487],{"class":149}," }\n",[143,56489,56490],{"class":145,"line":17807},[143,56491,53996],{"class":149},[143,56493,56494,56496,56499,56501,56503,56505,56507,56510],{"class":145,"line":17812},[143,56495,12121],{"class":755},[143,56497,56498],{"class":280}," img",[143,56500,14464],{"class":755},[143,56502,55281],{"class":149},[143,56504,55284],{"class":156},[143,56506,1049],{"class":149},[143,56508,56509],{"class":163},"'.slider-wrapper img'",[143,56511,1055],{"class":149},[143,56513,56514,56516,56518,56520,56522,56524,56526,56529],{"class":145,"line":17825},[143,56515,12121],{"class":755},[143,56517,7725],{"class":280},[143,56519,14464],{"class":755},[143,56521,55281],{"class":149},[143,56523,55284],{"class":156},[143,56525,1049],{"class":149},[143,56527,56528],{"class":163},"'.slider-footer p'",[143,56530,1055],{"class":149},[143,56532,56533,56535,56538,56540,56542,56544,56546,56549],{"class":145,"line":17830},[143,56534,12121],{"class":755},[143,56536,56537],{"class":280}," color",[143,56539,14464],{"class":755},[143,56541,55281],{"class":149},[143,56543,55284],{"class":156},[143,56545,1049],{"class":149},[143,56547,56548],{"class":163},"'.slider-footer'",[143,56550,1055],{"class":149},[143,56552,56553,56555,56558,56560,56562,56565,56567,56570],{"class":145,"line":33531},[143,56554,12121],{"class":755},[143,56556,56557],{"class":280}," lis",[143,56559,14464],{"class":755},[143,56561,55281],{"class":149},[143,56563,56564],{"class":156},"querySelectorAll",[143,56566,1049],{"class":149},[143,56568,56569],{"class":163},"'.slider-footer ul li'",[143,56571,1055],{"class":149},[143,56573,56574,56576,56578,56580],{"class":145,"line":33537},[143,56575,53106],{"class":755},[143,56577,10338],{"class":149},[143,56579,160],{"class":755},[143,56581,56582],{"class":280}," 1\n",[143,56584,56585,56587,56590,56592,56594,56596,56598],{"class":145,"line":33543},[143,56586,53106],{"class":755},[143,56588,56589],{"class":149}," timer ",[143,56591,160],{"class":755},[143,56593,55329],{"class":156},[143,56595,1049],{"class":149},[143,56597,55334],{"class":755},[143,56599,55337],{"class":149},[143,56601,56602,56605,56607],{"class":145,"line":33549},[143,56603,56604],{"class":149},"      img.src ",[143,56606,160],{"class":755},[143,56608,56609],{"class":149}," arrImage[i].url\n",[143,56611,56612,56615,56617],{"class":145,"line":33555},[143,56613,56614],{"class":149},"      p.innerHTML ",[143,56616,160],{"class":755},[143,56618,56619],{"class":149}," arrImage[i].title\n",[143,56621,56622,56625,56627],{"class":145,"line":33566},[143,56623,56624],{"class":149},"      color.style.backgroundColor ",[143,56626,160],{"class":755},[143,56628,56629],{"class":149}," arrImage[i].color\n",[143,56631,56632],{"class":145,"line":33572},[143,56633,56634],{"class":266},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[143,56636,56637],{"class":145,"line":33592},[143,56638,56639],{"class":266},"      \u002F\u002F li.classList.add('activate')\n",[143,56641,56642],{"class":145,"line":33598},[143,56643,56644],{"class":266},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[143,56646,56647],{"class":145,"line":33609},[143,56648,56649],{"class":266},"      \u002F\u002F lis[i].classList.remove('activate')\n",[143,56651,56652,56655,56657,56659,56662,56665,56668,56670,56673],{"class":145,"line":33615},[143,56653,56654],{"class":149},"      document.",[143,56656,55284],{"class":156},[143,56658,1049],{"class":149},[143,56660,56661],{"class":163},"'.activate'",[143,56663,56664],{"class":149},")?.classList.",[143,56666,56667],{"class":156},"toggle",[143,56669,1049],{"class":149},[143,56671,56672],{"class":163},"'activate'",[143,56674,1055],{"class":149},[143,56676,56677,56680,56682,56684,56686],{"class":145,"line":33621},[143,56678,56679],{"class":149},"      lis[i].classList.",[143,56681,6234],{"class":156},[143,56683,1049],{"class":149},[143,56685,56672],{"class":163},[143,56687,1055],{"class":149},[143,56689,56690],{"class":145,"line":33627},[143,56691,3300],{"emptyLinePlaceholder":976},[143,56693,56694,56697,56699,56701,56703,56705,56707,56709,56712],{"class":145,"line":33633},[143,56695,56696],{"class":149},"      i ",[143,56698,160],{"class":755},[143,56700,55368],{"class":149},[143,56702,1522],{"class":755},[143,56704,26016],{"class":280},[143,56706,14614],{"class":149},[143,56708,1369],{"class":755},[143,56710,56711],{"class":149}," arrImage.",[143,56713,56714],{"class":280},"length\n",[143,56716,56717],{"class":145,"line":33639},[143,56718,3300],{"emptyLinePlaceholder":976},[143,56720,56721,56723,56725],{"class":145,"line":33645},[143,56722,55420],{"class":149},[143,56724,7310],{"class":280},[143,56726,1055],{"class":149},[143,56728,56729,56731,56733],{"class":145,"line":33651},[143,56730,53304],{"class":149},[143,56732,52701],{"class":153},[143,56734,183],{"class":149},[143,56736,56737,56739,56741],{"class":145,"line":33671},[143,56738,730],{"class":149},[143,56740,52688],{"class":153},[143,56742,183],{"class":149},[143,56744,56745],{"class":145,"line":33677},[143,56746,3300],{"emptyLinePlaceholder":976},[143,56748,56749,56751,56753],{"class":145,"line":33693},[143,56750,730],{"class":149},[143,56752,51533],{"class":153},[143,56754,183],{"class":149},[63,56756,56757],{},[29,56758],{"alt":138,"src":56759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[63,56761,56762],{},"?.就是短路保护,确保输出正常进行",[63,56764,56765],{},"不要忘记取余%,有时候可以用",[63,56767,56768],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[19,56770,56771],{"start":35},[22,56772,56773],{},"法2",[133,56775,56777],{"className":51531,"code":56776,"language":51533,"meta":138,"style":138},"\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",[140,56778,56779,56789,56803,56807,56815,56829,56849,56861,56869,56875,56885,56895,56899,56903,56909,56919,56923,56927,56933,56943,56955,56967,56981,56985,56989,56995,57005,57015,57025,57037,57049,57059,57063,57067,57075,57085,57097,57109,57121,57125,57129,57135,57145,57157,57169,57179,57189,57199,57211,57223,57227,57231,57239,57251,57263,57289,57301,57305,57309,57315,57325,57329,57337,57345,57349,57357,57371,57385,57405,57413,57427,57439,57447,57465,57477,57489,57501,57513,57525,57537,57549,57557,57565,57573,57581,57592,57608,57624,57640,57656,57672,57688,57704,57720,57724,57729,57747,57765,57775,57780,57785,57796,57802,57817,57826,57830,57835,57844,57849,57858,57863,57868,57873,57896,57926,57930,57938,57942,57950,57958,57962],{"__ignoreMap":138},[143,56780,56781,56783,56785,56787],{"class":145,"line":146},[143,56782,52195],{"class":149},[143,56784,52198],{"class":153},[143,56786,52201],{"class":156},[143,56788,183],{"class":149},[143,56790,56791,56793,56795,56797,56799,56801],{"class":145,"line":35},[143,56792,150],{"class":149},[143,56794,51533],{"class":153},[143,56796,52212],{"class":156},[143,56798,160],{"class":149},[143,56800,52217],{"class":163},[143,56802,183],{"class":149},[143,56804,56805],{"class":145,"line":46},[143,56806,3300],{"emptyLinePlaceholder":976},[143,56808,56809,56811,56813],{"class":145,"line":293},[143,56810,150],{"class":149},[143,56812,52230],{"class":153},[143,56814,183],{"class":149},[143,56816,56817,56819,56821,56823,56825,56827],{"class":145,"line":306},[143,56818,634],{"class":149},[143,56820,52240],{"class":153},[143,56822,52243],{"class":156},[143,56824,160],{"class":149},[143,56826,52248],{"class":163},[143,56828,183],{"class":149},[143,56830,56831,56833,56835,56837,56839,56841,56843,56845,56847],{"class":145,"line":319},[143,56832,634],{"class":149},[143,56834,52240],{"class":153},[143,56836,15819],{"class":156},[143,56838,160],{"class":149},[143,56840,52287],{"class":163},[143,56842,52267],{"class":156},[143,56844,160],{"class":149},[143,56846,52294],{"class":163},[143,56848,183],{"class":149},[143,56850,56851,56853,56855,56857,56859],{"class":145,"line":332},[143,56852,634],{"class":149},[143,56854,52303],{"class":153},[143,56856,52306],{"class":149},[143,56858,52303],{"class":153},[143,56860,183],{"class":149},[143,56862,56863,56865,56867],{"class":145,"line":345},[143,56864,634],{"class":149},[143,56866,954],{"class":153},[143,56868,183],{"class":149},[143,56870,56871,56873],{"class":145,"line":701},[143,56872,7303],{"class":153},[143,56874,275],{"class":149},[143,56876,56877,56879,56881,56883],{"class":145,"line":707},[143,56878,55580],{"class":280},[143,56880,284],{"class":149},[143,56882,1234],{"class":280},[143,56884,290],{"class":149},[143,56886,56887,56889,56891,56893],{"class":145,"line":727},[143,56888,55591],{"class":280},[143,56890,284],{"class":149},[143,56892,1234],{"class":280},[143,56894,290],{"class":149},[143,56896,56897],{"class":145,"line":2518},[143,56898,3087],{"class":149},[143,56900,56901],{"class":145,"line":2524},[143,56902,3300],{"emptyLinePlaceholder":976},[143,56904,56905,56907],{"class":145,"line":2529},[143,56906,55610],{"class":153},[143,56908,275],{"class":149},[143,56910,56911,56913,56915,56917],{"class":145,"line":2543},[143,56912,55617],{"class":280},[143,56914,284],{"class":149},[143,56916,55622],{"class":280},[143,56918,290],{"class":149},[143,56920,56921],{"class":145,"line":2548},[143,56922,3087],{"class":149},[143,56924,56925],{"class":145,"line":2554},[143,56926,3300],{"emptyLinePlaceholder":976},[143,56928,56929,56931],{"class":145,"line":2575},[143,56930,55637],{"class":156},[143,56932,275],{"class":149},[143,56934,56935,56937,56939,56941],{"class":145,"line":2580},[143,56936,55644],{"class":280},[143,56938,284],{"class":149},[143,56940,55649],{"class":280},[143,56942,290],{"class":149},[143,56944,56945,56947,56949,56951,56953],{"class":145,"line":2594},[143,56946,55656],{"class":280},[143,56948,284],{"class":149},[143,56950,55661],{"class":280},[143,56952,774],{"class":755},[143,56954,290],{"class":149},[143,56956,56957,56959,56961,56963,56965],{"class":145,"line":2599},[143,56958,55670],{"class":280},[143,56960,284],{"class":149},[143,56962,2442],{"class":280},[143,56964,774],{"class":755},[143,56966,290],{"class":149},[143,56968,56969,56971,56973,56975,56977,56979],{"class":145,"line":2628},[143,56970,55591],{"class":280},[143,56972,284],{"class":149},[143,56974,1352],{"class":280},[143,56976,774],{"class":755},[143,56978,52448],{"class":280},[143,56980,290],{"class":149},[143,56982,56983],{"class":145,"line":2633},[143,56984,3087],{"class":149},[143,56986,56987],{"class":145,"line":2650},[143,56988,3300],{"emptyLinePlaceholder":976},[143,56990,56991,56993],{"class":145,"line":2655},[143,56992,55705],{"class":156},[143,56994,275],{"class":149},[143,56996,56997,56999,57001,57003],{"class":145,"line":2660},[143,56998,55644],{"class":280},[143,57000,284],{"class":149},[143,57002,55716],{"class":280},[143,57004,290],{"class":149},[143,57006,57007,57009,57011,57013],{"class":145,"line":2665},[143,57008,55723],{"class":280},[143,57010,284],{"class":149},[143,57012,1234],{"class":280},[143,57014,290],{"class":149},[143,57016,57017,57019,57021,57023],{"class":145,"line":2679},[143,57018,55734],{"class":280},[143,57020,284],{"class":149},[143,57022,1234],{"class":280},[143,57024,290],{"class":149},[143,57026,57027,57029,57031,57033,57035],{"class":145,"line":2684},[143,57028,55656],{"class":280},[143,57030,284],{"class":149},[143,57032,1352],{"class":280},[143,57034,1369],{"class":755},[143,57036,290],{"class":149},[143,57038,57039,57041,57043,57045,57047],{"class":145,"line":3477},[143,57040,55670],{"class":280},[143,57042,284],{"class":149},[143,57044,1616],{"class":280},[143,57046,1369],{"class":755},[143,57048,290],{"class":149},[143,57050,57051,57053,57055,57057],{"class":145,"line":3491},[143,57052,55769],{"class":280},[143,57054,284],{"class":149},[143,57056,55774],{"class":280},[143,57058,290],{"class":149},[143,57060,57061],{"class":145,"line":3499},[143,57062,3087],{"class":149},[143,57064,57065],{"class":145,"line":3504},[143,57066,3300],{"emptyLinePlaceholder":976},[143,57068,57069,57071,57073],{"class":145,"line":3510},[143,57070,55705],{"class":156},[143,57072,7725],{"class":153},[143,57074,275],{"class":149},[143,57076,57077,57079,57081,57083],{"class":145,"line":3516},[143,57078,55644],{"class":280},[143,57080,284],{"class":149},[143,57082,55716],{"class":280},[143,57084,290],{"class":149},[143,57086,57087,57089,57091,57093,57095],{"class":145,"line":3521},[143,57088,55807],{"class":280},[143,57090,284],{"class":149},[143,57092,1941],{"class":280},[143,57094,774],{"class":755},[143,57096,290],{"class":149},[143,57098,57099,57101,57103,57105,57107],{"class":145,"line":8848},[143,57100,55723],{"class":280},[143,57102,284],{"class":149},[143,57104,1741],{"class":280},[143,57106,774],{"class":755},[143,57108,290],{"class":149},[143,57110,57111,57113,57115,57117,57119],{"class":145,"line":8872},[143,57112,55832],{"class":280},[143,57114,284],{"class":149},[143,57116,1360],{"class":280},[143,57118,774],{"class":755},[143,57120,290],{"class":149},[143,57122,57123],{"class":145,"line":8877},[143,57124,3087],{"class":149},[143,57126,57127],{"class":145,"line":8883},[143,57128,3300],{"emptyLinePlaceholder":976},[143,57130,57131,57133],{"class":145,"line":8910},[143,57132,55853],{"class":153},[143,57134,275],{"class":149},[143,57136,57137,57139,57141,57143],{"class":145,"line":8915},[143,57138,55644],{"class":280},[143,57140,284],{"class":149},[143,57142,55716],{"class":280},[143,57144,290],{"class":149},[143,57146,57147,57149,57151,57153,57155],{"class":145,"line":8921},[143,57148,55832],{"class":280},[143,57150,284],{"class":149},[143,57152,1822],{"class":280},[143,57154,774],{"class":755},[143,57156,290],{"class":149},[143,57158,57159,57161,57163,57165,57167],{"class":145,"line":8933},[143,57160,55723],{"class":280},[143,57162,284],{"class":149},[143,57164,1741],{"class":280},[143,57166,774],{"class":755},[143,57168,290],{"class":149},[143,57170,57171,57173,57175,57177],{"class":145,"line":8945},[143,57172,55894],{"class":280},[143,57174,284],{"class":149},[143,57176,287],{"class":280},[143,57178,290],{"class":149},[143,57180,57181,57183,57185,57187],{"class":145,"line":8957},[143,57182,55905],{"class":280},[143,57184,284],{"class":149},[143,57186,314],{"class":280},[143,57188,290],{"class":149},[143,57190,57191,57193,57195,57197],{"class":145,"line":10616},[143,57192,55644],{"class":280},[143,57194,284],{"class":149},[143,57196,55716],{"class":280},[143,57198,290],{"class":149},[143,57200,57201,57203,57205,57207,57209],{"class":145,"line":10641},[143,57202,55656],{"class":280},[143,57204,284],{"class":149},[143,57206,4892],{"class":280},[143,57208,774],{"class":755},[143,57210,290],{"class":149},[143,57212,57213,57215,57217,57219,57221],{"class":145,"line":10664},[143,57214,55670],{"class":280},[143,57216,284],{"class":149},[143,57218,1741],{"class":280},[143,57220,774],{"class":755},[143,57222,290],{"class":149},[143,57224,57225],{"class":145,"line":10688},[143,57226,3087],{"class":149},[143,57228,57229],{"class":145,"line":10693},[143,57230,3300],{"emptyLinePlaceholder":976},[143,57232,57233,57235,57237],{"class":145,"line":10698},[143,57234,55853],{"class":153},[143,57236,55960],{"class":153},[143,57238,275],{"class":149},[143,57240,57241,57243,57245,57247,57249],{"class":145,"line":10703},[143,57242,55656],{"class":280},[143,57244,284],{"class":149},[143,57246,1741],{"class":280},[143,57248,774],{"class":755},[143,57250,290],{"class":149},[143,57252,57253,57255,57257,57259,57261],{"class":145,"line":10712},[143,57254,55670],{"class":280},[143,57256,284],{"class":149},[143,57258,1741],{"class":280},[143,57260,774],{"class":755},[143,57262,290],{"class":149},[143,57264,57265,57267,57269,57271,57273,57275,57277,57279,57281,57283,57285,57287],{"class":145,"line":10717},[143,57266,55769],{"class":280},[143,57268,284],{"class":149},[143,57270,55995],{"class":280},[143,57272,1049],{"class":149},[143,57274,1234],{"class":280},[143,57276,13335],{"class":149},[143,57278,1234],{"class":280},[143,57280,13335],{"class":149},[143,57282,1234],{"class":280},[143,57284,13335],{"class":149},[143,57286,56012],{"class":280},[143,57288,3619],{"class":149},[143,57290,57291,57293,57295,57297,57299],{"class":145,"line":10723},[143,57292,56019],{"class":280},[143,57294,284],{"class":149},[143,57296,1487],{"class":280},[143,57298,774],{"class":755},[143,57300,290],{"class":149},[143,57302,57303],{"class":145,"line":10744},[143,57304,3087],{"class":149},[143,57306,57307],{"class":145,"line":10750},[143,57308,3300],{"emptyLinePlaceholder":976},[143,57310,57311,57313],{"class":145,"line":10764},[143,57312,56040],{"class":156},[143,57314,275],{"class":149},[143,57316,57317,57319,57321,57323],{"class":145,"line":10770},[143,57318,55769],{"class":280},[143,57320,284],{"class":149},[143,57322,56051],{"class":280},[143,57324,290],{"class":149},[143,57326,57327],{"class":145,"line":10797},[143,57328,3087],{"class":149},[143,57330,57331,57333,57335],{"class":145,"line":10806},[143,57332,53304],{"class":149},[143,57334,954],{"class":153},[143,57336,183],{"class":149},[143,57338,57339,57341,57343],{"class":145,"line":10812},[143,57340,730],{"class":149},[143,57342,52230],{"class":153},[143,57344,183],{"class":149},[143,57346,57347],{"class":145,"line":10820},[143,57348,3300],{"emptyLinePlaceholder":976},[143,57350,57351,57353,57355],{"class":145,"line":10825},[143,57352,150],{"class":149},[143,57354,52688],{"class":153},[143,57356,183],{"class":149},[143,57358,57359,57361,57363,57365,57367,57369],{"class":145,"line":17502},[143,57360,634],{"class":149},[143,57362,614],{"class":153},[143,57364,617],{"class":156},[143,57366,160],{"class":149},[143,57368,54377],{"class":163},[143,57370,183],{"class":149},[143,57372,57373,57375,57377,57379,57381,57383],{"class":145,"line":17508},[143,57374,52237],{"class":149},[143,57376,614],{"class":153},[143,57378,617],{"class":156},[143,57380,160],{"class":149},[143,57382,56112],{"class":163},[143,57384,183],{"class":149},[143,57386,57387,57389,57391,57393,57395,57397,57399,57401,57403],{"class":145,"line":17531},[143,57388,56119],{"class":149},[143,57390,29],{"class":153},[143,57392,157],{"class":156},[143,57394,160],{"class":149},[143,57396,56128],{"class":163},[143,57398,167],{"class":156},[143,57400,160],{"class":149},[143,57402,8552],{"class":163},[143,57404,183],{"class":149},[143,57406,57407,57409,57411],{"class":145,"line":17537},[143,57408,52665],{"class":149},[143,57410,614],{"class":153},[143,57412,183],{"class":149},[143,57414,57415,57417,57419,57421,57423,57425],{"class":145,"line":17560},[143,57416,52237],{"class":149},[143,57418,614],{"class":153},[143,57420,617],{"class":156},[143,57422,160],{"class":149},[143,57424,56157],{"class":163},[143,57426,183],{"class":149},[143,57428,57429,57431,57433,57435,57437],{"class":145,"line":17574},[143,57430,56119],{"class":149},[143,57432,63],{"class":153},[143,57434,56168],{"class":149},[143,57436,63],{"class":153},[143,57438,183],{"class":149},[143,57440,57441,57443,57445],{"class":145,"line":17594},[143,57442,56119],{"class":149},[143,57444,232],{"class":153},[143,57446,183],{"class":149},[143,57448,57449,57451,57453,57455,57457,57459,57461,57463],{"class":145,"line":17600},[143,57450,56185],{"class":149},[143,57452,22],{"class":153},[143,57454,617],{"class":156},[143,57456,160],{"class":149},[143,57458,56194],{"class":163},[143,57460,56197],{"class":149},[143,57462,22],{"class":153},[143,57464,183],{"class":149},[143,57466,57467,57469,57471,57473,57475],{"class":145,"line":17611},[143,57468,56185],{"class":149},[143,57470,22],{"class":153},[143,57472,56197],{"class":149},[143,57474,22],{"class":153},[143,57476,183],{"class":149},[143,57478,57479,57481,57483,57485,57487],{"class":145,"line":17634},[143,57480,56185],{"class":149},[143,57482,22],{"class":153},[143,57484,56197],{"class":149},[143,57486,22],{"class":153},[143,57488,183],{"class":149},[143,57490,57491,57493,57495,57497,57499],{"class":145,"line":17656},[143,57492,56185],{"class":149},[143,57494,22],{"class":153},[143,57496,56197],{"class":149},[143,57498,22],{"class":153},[143,57500,183],{"class":149},[143,57502,57503,57505,57507,57509,57511],{"class":145,"line":17661},[143,57504,56185],{"class":149},[143,57506,22],{"class":153},[143,57508,56197],{"class":149},[143,57510,22],{"class":153},[143,57512,183],{"class":149},[143,57514,57515,57517,57519,57521,57523],{"class":145,"line":17667},[143,57516,56185],{"class":149},[143,57518,22],{"class":153},[143,57520,56197],{"class":149},[143,57522,22],{"class":153},[143,57524,183],{"class":149},[143,57526,57527,57529,57531,57533,57535],{"class":145,"line":17681},[143,57528,56185],{"class":149},[143,57530,22],{"class":153},[143,57532,56197],{"class":149},[143,57534,22],{"class":153},[143,57536,183],{"class":149},[143,57538,57539,57541,57543,57545,57547],{"class":145,"line":17694},[143,57540,56185],{"class":149},[143,57542,22],{"class":153},[143,57544,56197],{"class":149},[143,57546,22],{"class":153},[143,57548,183],{"class":149},[143,57550,57551,57553,57555],{"class":145,"line":17699},[143,57552,56290],{"class":149},[143,57554,232],{"class":153},[143,57556,183],{"class":149},[143,57558,57559,57561,57563],{"class":145,"line":17713},[143,57560,52665],{"class":149},[143,57562,614],{"class":153},[143,57564,183],{"class":149},[143,57566,57567,57569,57571],{"class":145,"line":17718},[143,57568,53304],{"class":149},[143,57570,614],{"class":153},[143,57572,183],{"class":149},[143,57574,57575,57577,57579],{"class":145,"line":17724},[143,57576,634],{"class":149},[143,57578,52701],{"class":153},[143,57580,183],{"class":149},[143,57582,57583,57585,57588,57590],{"class":145,"line":17729},[143,57584,12121],{"class":755},[143,57586,57587],{"class":280}," sliderData",[143,57589,14464],{"class":755},[143,57591,56330],{"class":149},[143,57593,57594,57596,57598,57600,57602,57604,57606],{"class":145,"line":17743},[143,57595,56335],{"class":149},[143,57597,56338],{"class":163},[143,57599,56341],{"class":149},[143,57601,56344],{"class":163},[143,57603,56347],{"class":149},[143,57605,56350],{"class":163},[143,57607,56353],{"class":149},[143,57609,57610,57612,57614,57616,57618,57620,57622],{"class":145,"line":17748},[143,57611,56335],{"class":149},[143,57613,56360],{"class":163},[143,57615,56341],{"class":149},[143,57617,56365],{"class":163},[143,57619,56347],{"class":149},[143,57621,56370],{"class":163},[143,57623,56353],{"class":149},[143,57625,57626,57628,57630,57632,57634,57636,57638],{"class":145,"line":17753},[143,57627,56335],{"class":149},[143,57629,56379],{"class":163},[143,57631,56341],{"class":149},[143,57633,56384],{"class":163},[143,57635,56347],{"class":149},[143,57637,56389],{"class":163},[143,57639,56353],{"class":149},[143,57641,57642,57644,57646,57648,57650,57652,57654],{"class":145,"line":17767},[143,57643,56335],{"class":149},[143,57645,56398],{"class":163},[143,57647,56341],{"class":149},[143,57649,56403],{"class":163},[143,57651,56347],{"class":149},[143,57653,56408],{"class":163},[143,57655,56353],{"class":149},[143,57657,57658,57660,57662,57664,57666,57668,57670],{"class":145,"line":17779},[143,57659,56335],{"class":149},[143,57661,56417],{"class":163},[143,57663,56341],{"class":149},[143,57665,56422],{"class":163},[143,57667,56347],{"class":149},[143,57669,56427],{"class":163},[143,57671,56353],{"class":149},[143,57673,57674,57676,57678,57680,57682,57684,57686],{"class":145,"line":17784},[143,57675,56335],{"class":149},[143,57677,56436],{"class":163},[143,57679,56341],{"class":149},[143,57681,56441],{"class":163},[143,57683,56347],{"class":149},[143,57685,56446],{"class":163},[143,57687,56353],{"class":149},[143,57689,57690,57692,57694,57696,57698,57700,57702],{"class":145,"line":17797},[143,57691,56335],{"class":149},[143,57693,56455],{"class":163},[143,57695,56341],{"class":149},[143,57697,56460],{"class":163},[143,57699,56347],{"class":149},[143,57701,56465],{"class":163},[143,57703,56353],{"class":149},[143,57705,57706,57708,57710,57712,57714,57716,57718],{"class":145,"line":17802},[143,57707,56335],{"class":149},[143,57709,56474],{"class":163},[143,57711,56341],{"class":149},[143,57713,56479],{"class":163},[143,57715,56347],{"class":149},[143,57717,56484],{"class":163},[143,57719,56487],{"class":149},[143,57721,57722],{"class":145,"line":17807},[143,57723,53996],{"class":149},[143,57725,57726],{"class":145,"line":17812},[143,57727,57728],{"class":266},"    \u002F\u002F 1.获取元素\n",[143,57730,57731,57733,57735,57737,57739,57741,57743,57745],{"class":145,"line":17825},[143,57732,12121],{"class":755},[143,57734,56498],{"class":280},[143,57736,14464],{"class":755},[143,57738,55281],{"class":149},[143,57740,55284],{"class":156},[143,57742,1049],{"class":149},[143,57744,56509],{"class":163},[143,57746,1055],{"class":149},[143,57748,57749,57751,57753,57755,57757,57759,57761,57763],{"class":145,"line":17830},[143,57750,12121],{"class":755},[143,57752,7725],{"class":280},[143,57754,14464],{"class":755},[143,57756,55281],{"class":149},[143,57758,55284],{"class":156},[143,57760,1049],{"class":149},[143,57762,56528],{"class":163},[143,57764,1055],{"class":149},[143,57766,57767,57769,57771,57773],{"class":145,"line":33531},[143,57768,53106],{"class":755},[143,57770,10338],{"class":149},[143,57772,160],{"class":755},[143,57774,48231],{"class":280},[143,57776,57777],{"class":145,"line":33537},[143,57778,57779],{"class":266},"    \u002F\u002F 2.开启定时器\n",[143,57781,57782],{"class":145,"line":33543},[143,57783,57784],{"class":266},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[143,57786,57787,57790,57792,57794],{"class":145,"line":33549},[143,57788,57789],{"class":156},"    setInterval",[143,57791,1049],{"class":149},[143,57793,55334],{"class":755},[143,57795,55337],{"class":149},[143,57797,57798,57800],{"class":145,"line":33555},[143,57799,55342],{"class":149},[143,57801,3602],{"class":755},[143,57803,57804,57806,57808,57810,57813,57815],{"class":145,"line":33566},[143,57805,55365],{"class":755},[143,57807,55368],{"class":149},[143,57809,2611],{"class":755},[143,57811,57812],{"class":149}," sliderData.",[143,57814,52856],{"class":280},[143,57816,13342],{"class":149},[143,57818,57819,57822,57824],{"class":145,"line":33572},[143,57820,57821],{"class":149},"        i ",[143,57823,160],{"class":755},[143,57825,48231],{"class":280},[143,57827,57828],{"class":145,"line":33592},[143,57829,53285],{"class":149},[143,57831,57832],{"class":145,"line":33598},[143,57833,57834],{"class":266},"      \u002F\u002F 更换图片路径\n",[143,57836,57837,57839,57841],{"class":145,"line":33609},[143,57838,56604],{"class":149},[143,57840,160],{"class":755},[143,57842,57843],{"class":149}," sliderData[i].url\n",[143,57845,57846],{"class":145,"line":33615},[143,57847,57848],{"class":266},"      \u002F\u002F 把文字写到p里面\n",[143,57850,57851,57853,57855],{"class":145,"line":33621},[143,57852,56614],{"class":149},[143,57854,160],{"class":755},[143,57856,57857],{"class":149}," sliderData[i].title\n",[143,57859,57860],{"class":145,"line":33627},[143,57861,57862],{"class":266},"      \u002F\u002F 小圆点\n",[143,57864,57865],{"class":145,"line":33633},[143,57866,57867],{"class":266},"      \u002F\u002F 先删除以前的active\n",[143,57869,57870],{"class":145,"line":33639},[143,57871,57872],{"class":266},"      \u002F\u002F 只让当前li添加active\n",[143,57874,57875,57877,57879,57881,57884,57887,57890,57892,57894],{"class":145,"line":33645},[143,57876,56654],{"class":149},[143,57878,55284],{"class":156},[143,57880,1049],{"class":149},[143,57882,57883],{"class":163},"'.slider-footer .activate'",[143,57885,57886],{"class":149},").classList.",[143,57888,57889],{"class":156},"remove",[143,57891,1049],{"class":149},[143,57893,56672],{"class":163},[143,57895,1055],{"class":149},[143,57897,57898,57900,57902,57904,57907,57909,57911,57913,57916,57918,57920,57922,57924],{"class":145,"line":33651},[143,57899,56654],{"class":149},[143,57901,55284],{"class":156},[143,57903,1049],{"class":149},[143,57905,57906],{"class":163},"`.slider-footer ul li:nth-child(${",[143,57908,1482],{"class":149},[143,57910,46464],{"class":755},[143,57912,26016],{"class":280},[143,57914,57915],{"class":163},"})`",[143,57917,57886],{"class":149},[143,57919,6234],{"class":156},[143,57921,1049],{"class":149},[143,57923,56672],{"class":163},[143,57925,1055],{"class":149},[143,57927,57928],{"class":145,"line":33671},[143,57929,3300],{"emptyLinePlaceholder":976},[143,57931,57932,57934,57936],{"class":145,"line":33677},[143,57933,55420],{"class":149},[143,57935,7310],{"class":280},[143,57937,1055],{"class":149},[143,57939,57940],{"class":145,"line":33693},[143,57941,3300],{"emptyLinePlaceholder":976},[143,57943,57944,57946,57948],{"class":145,"line":33699},[143,57945,53304],{"class":149},[143,57947,52701],{"class":153},[143,57949,183],{"class":149},[143,57951,57952,57954,57956],{"class":145,"line":33713},[143,57953,730],{"class":149},[143,57955,52688],{"class":153},[143,57957,183],{"class":149},[143,57959,57960],{"class":145,"line":33719},[143,57961,3300],{"emptyLinePlaceholder":976},[143,57963,57964,57966,57968],{"class":145,"line":33734},[143,57965,730],{"class":149},[143,57967,51533],{"class":153},[143,57969,183],{"class":149},[58,57971,57973],{"id":57972},"_317-重要知识点","3.1.7 重要知识点",[63,57975,57976,57977],{},"浏览器在渲染文本时， ",[25,57978,57979],{},"没有空格或换行符就没有“断行点”",[63,57981,57982],{},[29,57983],{"alt":138,"src":57984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[63,57986,57987],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[63,57989,57990],{},[29,57991],{"alt":138,"src":57992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[63,57994,57995],{},[29,57996],{"alt":138,"src":57997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57999,58001],{"id":58000},"_32-dom事件基础","3.2 DOM事件基础",[58,58003,58005],{"id":58004},"_321-事件监听","3.2.1 事件监听",[63,58007,58008],{},[29,58009],{"alt":138,"src":58010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[63,58012,58013],{},"事件监听有响应的发生",[63,58015,58016],{},[29,58017],{"alt":138,"src":58018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[63,58020,58021],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[63,58023,58024],{},"对于有名函数,要执行的函数名后边不要加()",[58,58026,58028],{"id":58027},"_322-随机点名案例","3.2.2 随机点名案例",[133,58030,58032],{"className":51531,"code":58031,"language":51533,"meta":138,"style":138},"\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",[140,58033,58034,58044,58058,58062,58070,58084,58104,58116,58124,58130,58140,58150,58154,58158,58165,58176,58180,58184,58190,58202,58216,58226,58238,58251,58255,58259,58266,58270,58283,58295,58307,58311,58315,58319,58326,58336,58340,58344,58353,58365,58377,58392,58396,58404,58412,58416,58424,58437,58451,58464,58484,58492,58507,58527,58547,58555,58559,58567,58572,58608,58628,58633,58652,58657,58668,58673,58684,58689,58708,58723,58728,58754,58764,58773,58778,58794,58799,58804,58809,58824,58828,58832,58837,58856,58873,58881,58886,58901,58905,58909,58917,58925,58929],{"__ignoreMap":138},[143,58035,58036,58038,58040,58042],{"class":145,"line":146},[143,58037,52195],{"class":149},[143,58039,52198],{"class":153},[143,58041,52201],{"class":156},[143,58043,183],{"class":149},[143,58045,58046,58048,58050,58052,58054,58056],{"class":145,"line":35},[143,58047,150],{"class":149},[143,58049,51533],{"class":153},[143,58051,52212],{"class":156},[143,58053,160],{"class":149},[143,58055,52217],{"class":163},[143,58057,183],{"class":149},[143,58059,58060],{"class":145,"line":46},[143,58061,3300],{"emptyLinePlaceholder":976},[143,58063,58064,58066,58068],{"class":145,"line":293},[143,58065,150],{"class":149},[143,58067,52230],{"class":153},[143,58069,183],{"class":149},[143,58071,58072,58074,58076,58078,58080,58082],{"class":145,"line":306},[143,58073,634],{"class":149},[143,58075,52240],{"class":153},[143,58077,52243],{"class":156},[143,58079,160],{"class":149},[143,58081,52248],{"class":163},[143,58083,183],{"class":149},[143,58085,58086,58088,58090,58092,58094,58096,58098,58100,58102],{"class":145,"line":319},[143,58087,634],{"class":149},[143,58089,52240],{"class":153},[143,58091,15819],{"class":156},[143,58093,160],{"class":149},[143,58095,52287],{"class":163},[143,58097,52267],{"class":156},[143,58099,160],{"class":149},[143,58101,52294],{"class":163},[143,58103,183],{"class":149},[143,58105,58106,58108,58110,58112,58114],{"class":145,"line":332},[143,58107,634],{"class":149},[143,58109,52303],{"class":153},[143,58111,52306],{"class":149},[143,58113,52303],{"class":153},[143,58115,183],{"class":149},[143,58117,58118,58120,58122],{"class":145,"line":345},[143,58119,634],{"class":149},[143,58121,954],{"class":153},[143,58123,183],{"class":149},[143,58125,58126,58128],{"class":145,"line":701},[143,58127,7303],{"class":153},[143,58129,275],{"class":149},[143,58131,58132,58134,58136,58138],{"class":145,"line":707},[143,58133,55591],{"class":280},[143,58135,284],{"class":149},[143,58137,1234],{"class":280},[143,58139,290],{"class":149},[143,58141,58142,58144,58146,58148],{"class":145,"line":727},[143,58143,55580],{"class":280},[143,58145,284],{"class":149},[143,58147,1234],{"class":280},[143,58149,290],{"class":149},[143,58151,58152],{"class":145,"line":2518},[143,58153,3087],{"class":149},[143,58155,58156],{"class":145,"line":2524},[143,58157,3300],{"emptyLinePlaceholder":976},[143,58159,58160,58163],{"class":145,"line":2529},[143,58161,58162],{"class":153},"    h2",[143,58164,275],{"class":149},[143,58166,58167,58170,58172,58174],{"class":145,"line":2543},[143,58168,58169],{"class":280},"      text-align",[143,58171,284],{"class":149},[143,58173,327],{"class":280},[143,58175,290],{"class":149},[143,58177,58178],{"class":145,"line":2548},[143,58179,3087],{"class":149},[143,58181,58182],{"class":145,"line":2554},[143,58183,3300],{"emptyLinePlaceholder":976},[143,58185,58186,58188],{"class":145,"line":2575},[143,58187,55637],{"class":156},[143,58189,275],{"class":149},[143,58191,58192,58194,58196,58198,58200],{"class":145,"line":2580},[143,58193,55656],{"class":280},[143,58195,284],{"class":149},[143,58197,2442],{"class":280},[143,58199,774],{"class":755},[143,58201,290],{"class":149},[143,58203,58204,58206,58208,58210,58212,58214],{"class":145,"line":2594},[143,58205,55591],{"class":280},[143,58207,284],{"class":149},[143,58209,1697],{"class":280},[143,58211,774],{"class":755},[143,58213,52448],{"class":280},[143,58215,290],{"class":149},[143,58217,58218,58220,58222,58224],{"class":145,"line":2599},[143,58219,55894],{"class":280},[143,58221,284],{"class":149},[143,58223,287],{"class":280},[143,58225,290],{"class":149},[143,58227,58228,58230,58232,58234,58236],{"class":145,"line":2628},[143,58229,55807],{"class":280},[143,58231,284],{"class":149},[143,58233,1866],{"class":280},[143,58235,774],{"class":755},[143,58237,290],{"class":149},[143,58239,58240,58243,58245,58247,58249],{"class":145,"line":2633},[143,58241,58242],{"class":280},"      line-height",[143,58244,284],{"class":149},[143,58246,1442],{"class":280},[143,58248,774],{"class":755},[143,58250,290],{"class":149},[143,58252,58253],{"class":145,"line":2650},[143,58254,3087],{"class":149},[143,58256,58257],{"class":145,"line":2655},[143,58258,3300],{"emptyLinePlaceholder":976},[143,58260,58261,58264],{"class":145,"line":2660},[143,58262,58263],{"class":156},"    .qs",[143,58265,275],{"class":149},[143,58267,58268],{"class":145,"line":2665},[143,58269,3300],{"emptyLinePlaceholder":976},[143,58271,58272,58274,58276,58279,58281],{"class":145,"line":2679},[143,58273,55656],{"class":280},[143,58275,284],{"class":149},[143,58277,58278],{"class":280},"450",[143,58280,774],{"class":755},[143,58282,290],{"class":149},[143,58284,58285,58287,58289,58291,58293],{"class":145,"line":2684},[143,58286,55670],{"class":280},[143,58288,284],{"class":149},[143,58290,1442],{"class":280},[143,58292,774],{"class":755},[143,58294,290],{"class":149},[143,58296,58297,58300,58302,58305],{"class":145,"line":3477},[143,58298,58299],{"class":280},"      color",[143,58301,284],{"class":149},[143,58303,58304],{"class":280},"red",[143,58306,290],{"class":149},[143,58308,58309],{"class":145,"line":3491},[143,58310,3300],{"emptyLinePlaceholder":976},[143,58312,58313],{"class":145,"line":3499},[143,58314,3087],{"class":149},[143,58316,58317],{"class":145,"line":3504},[143,58318,3300],{"emptyLinePlaceholder":976},[143,58320,58321,58324],{"class":145,"line":3510},[143,58322,58323],{"class":156},"    .btns",[143,58325,275],{"class":149},[143,58327,58328,58330,58332,58334],{"class":145,"line":3516},[143,58329,58169],{"class":280},[143,58331,284],{"class":149},[143,58333,327],{"class":280},[143,58335,290],{"class":149},[143,58337,58338],{"class":145,"line":3521},[143,58339,3087],{"class":149},[143,58341,58342],{"class":145,"line":8848},[143,58343,3300],{"emptyLinePlaceholder":976},[143,58345,58346,58348,58351],{"class":145,"line":8872},[143,58347,58323],{"class":156},[143,58349,58350],{"class":153}," button",[143,58352,275],{"class":149},[143,58354,58355,58357,58359,58361,58363],{"class":145,"line":8877},[143,58356,55656],{"class":280},[143,58358,284],{"class":149},[143,58360,1858],{"class":280},[143,58362,774],{"class":755},[143,58364,290],{"class":149},[143,58366,58367,58369,58371,58373,58375],{"class":145,"line":8883},[143,58368,55670],{"class":280},[143,58370,284],{"class":149},[143,58372,1314],{"class":280},[143,58374,774],{"class":755},[143,58376,290],{"class":149},[143,58378,58379,58381,58383,58385,58388,58390],{"class":145,"line":8910},[143,58380,55591],{"class":280},[143,58382,284],{"class":149},[143,58384,1234],{"class":280},[143,58386,58387],{"class":280}," 50",[143,58389,774],{"class":755},[143,58391,290],{"class":149},[143,58393,58394],{"class":145,"line":8915},[143,58395,3087],{"class":149},[143,58397,58398,58400,58402],{"class":145,"line":8921},[143,58399,53304],{"class":149},[143,58401,954],{"class":153},[143,58403,183],{"class":149},[143,58405,58406,58408,58410],{"class":145,"line":8933},[143,58407,730],{"class":149},[143,58409,52230],{"class":153},[143,58411,183],{"class":149},[143,58413,58414],{"class":145,"line":8945},[143,58415,3300],{"emptyLinePlaceholder":976},[143,58417,58418,58420,58422],{"class":145,"line":8957},[143,58419,150],{"class":149},[143,58421,52688],{"class":153},[143,58423,183],{"class":149},[143,58425,58426,58428,58430,58433,58435],{"class":145,"line":10616},[143,58427,634],{"class":149},[143,58429,14],{"class":153},[143,58431,58432],{"class":149},">随机点名\u003C\u002F",[143,58434,14],{"class":153},[143,58436,183],{"class":149},[143,58438,58439,58441,58443,58445,58447,58449],{"class":145,"line":10641},[143,58440,634],{"class":149},[143,58442,614],{"class":153},[143,58444,617],{"class":156},[143,58446,160],{"class":149},[143,58448,54377],{"class":163},[143,58450,183],{"class":149},[143,58452,58453,58455,58457,58460,58462],{"class":145,"line":10664},[143,58454,52237],{"class":149},[143,58456,143],{"class":153},[143,58458,58459],{"class":149},">名字是：\u003C\u002F",[143,58461,143],{"class":153},[143,58463,183],{"class":149},[143,58465,58466,58468,58470,58472,58474,58477,58480,58482],{"class":145,"line":10688},[143,58467,52237],{"class":149},[143,58469,614],{"class":153},[143,58471,617],{"class":156},[143,58473,160],{"class":149},[143,58475,58476],{"class":163},"\"qs\"",[143,58478,58479],{"class":149},">这里显示姓名\u003C\u002F",[143,58481,614],{"class":153},[143,58483,183],{"class":149},[143,58485,58486,58488,58490],{"class":145,"line":10693},[143,58487,53304],{"class":149},[143,58489,614],{"class":153},[143,58491,183],{"class":149},[143,58493,58494,58496,58498,58500,58502,58505],{"class":145,"line":10698},[143,58495,634],{"class":149},[143,58497,614],{"class":153},[143,58499,617],{"class":156},[143,58501,160],{"class":149},[143,58503,58504],{"class":163},"\"btns\"",[143,58506,183],{"class":149},[143,58508,58509,58511,58513,58515,58517,58520,58523,58525],{"class":145,"line":10703},[143,58510,52237],{"class":149},[143,58512,54772],{"class":153},[143,58514,617],{"class":156},[143,58516,160],{"class":149},[143,58518,58519],{"class":163},"\"start\"",[143,58521,58522],{"class":149},">开始\u003C\u002F",[143,58524,54772],{"class":153},[143,58526,183],{"class":149},[143,58528,58529,58531,58533,58535,58537,58540,58543,58545],{"class":145,"line":10712},[143,58530,52237],{"class":149},[143,58532,54772],{"class":153},[143,58534,617],{"class":156},[143,58536,160],{"class":149},[143,58538,58539],{"class":163},"\"end\"",[143,58541,58542],{"class":149},">结束\u003C\u002F",[143,58544,54772],{"class":153},[143,58546,183],{"class":149},[143,58548,58549,58551,58553],{"class":145,"line":10717},[143,58550,53304],{"class":149},[143,58552,614],{"class":153},[143,58554,183],{"class":149},[143,58556,58557],{"class":145,"line":10723},[143,58558,3300],{"emptyLinePlaceholder":976},[143,58560,58561,58563,58565],{"class":145,"line":10744},[143,58562,634],{"class":149},[143,58564,52701],{"class":153},[143,58566,183],{"class":149},[143,58568,58569],{"class":145,"line":10750},[143,58570,58571],{"class":266},"    \u002F\u002F 数据数组\n",[143,58573,58574,58576,58579,58581,58583,58586,58588,58591,58593,58596,58598,58601,58603,58606],{"class":145,"line":10764},[143,58575,12121],{"class":755},[143,58577,58578],{"class":280}," arr",[143,58580,14464],{"class":755},[143,58582,53113],{"class":149},[143,58584,58585],{"class":163},"'马超'",[143,58587,13335],{"class":149},[143,58589,58590],{"class":163},"'黄忠'",[143,58592,13335],{"class":149},[143,58594,58595],{"class":163},"'赵云'",[143,58597,13335],{"class":149},[143,58599,58600],{"class":163},"'关羽'",[143,58602,13335],{"class":149},[143,58604,58605],{"class":163},"'张飞'",[143,58607,34144],{"class":149},[143,58609,58610,58612,58615,58617,58619,58621,58623,58626],{"class":145,"line":10770},[143,58611,12121],{"class":755},[143,58613,58614],{"class":280}," qs",[143,58616,14464],{"class":755},[143,58618,55281],{"class":149},[143,58620,55284],{"class":156},[143,58622,1049],{"class":149},[143,58624,58625],{"class":163},"'.qs'",[143,58627,1055],{"class":149},[143,58629,58630],{"class":145,"line":10797},[143,58631,58632],{"class":266},"    \u002F\u002F 1.业务1.开始按钮模块\n",[143,58634,58635,58637,58639,58641,58643,58645,58647,58650],{"class":145,"line":10806},[143,58636,12121],{"class":755},[143,58638,5084],{"class":280},[143,58640,14464],{"class":755},[143,58642,55281],{"class":149},[143,58644,55284],{"class":156},[143,58646,1049],{"class":149},[143,58648,58649],{"class":163},"'.start'",[143,58651,1055],{"class":149},[143,58653,58654],{"class":145,"line":10812},[143,58655,58656],{"class":266},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[143,58658,58659,58661,58664,58666],{"class":145,"line":10820},[143,58660,53106],{"class":755},[143,58662,58663],{"class":149}," timerId ",[143,58665,160],{"class":755},[143,58667,48231],{"class":280},[143,58669,58670],{"class":145,"line":10825},[143,58671,58672],{"class":266},"    \u002F\u002F 随机号要全局变量\n",[143,58674,58675,58677,58680,58682],{"class":145,"line":17502},[143,58676,53106],{"class":755},[143,58678,58679],{"class":149}," random ",[143,58681,160],{"class":755},[143,58683,48231],{"class":280},[143,58685,58686],{"class":145,"line":17508},[143,58687,58688],{"class":266},"    \u002F\u002F 1.1 添加点击事件\n",[143,58690,58691,58694,58697,58699,58702,58704,58706],{"class":145,"line":17531},[143,58692,58693],{"class":149},"    start.",[143,58695,58696],{"class":156},"addEventListener",[143,58698,1049],{"class":149},[143,58700,58701],{"class":163},"'click'",[143,58703,13335],{"class":149},[143,58705,55334],{"class":755},[143,58707,55337],{"class":149},[143,58709,58710,58713,58715,58717,58719,58721],{"class":145,"line":17537},[143,58711,58712],{"class":149},"      timerId ",[143,58714,160],{"class":755},[143,58716,55329],{"class":156},[143,58718,1049],{"class":149},[143,58720,55334],{"class":755},[143,58722,55337],{"class":149},[143,58724,58725],{"class":145,"line":17560},[143,58726,58727],{"class":266},"        \u002F\u002F 随机数\n",[143,58729,58730,58733,58735,58738,58741,58744,58746,58748,58750,58752],{"class":145,"line":17574},[143,58731,58732],{"class":149},"        random ",[143,58734,160],{"class":755},[143,58736,58737],{"class":156}," parseInt",[143,58739,58740],{"class":149},"(Math.",[143,58742,58743],{"class":156},"random",[143,58745,13950],{"class":149},[143,58747,1496],{"class":755},[143,58749,52853],{"class":149},[143,58751,52856],{"class":280},[143,58753,1055],{"class":149},[143,58755,58756,58759,58761],{"class":145,"line":17594},[143,58757,58758],{"class":149},"        qs.innerHTML ",[143,58760,160],{"class":755},[143,58762,58763],{"class":149}," arr[random]\n",[143,58765,58766,58769,58771],{"class":145,"line":17600},[143,58767,58768],{"class":149},"      }, ",[143,58770,1314],{"class":280},[143,58772,1055],{"class":149},[143,58774,58775],{"class":145,"line":17611},[143,58776,58777],{"class":266},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[143,58779,58780,58782,58785,58787,58790,58792],{"class":145,"line":17634},[143,58781,55365],{"class":755},[143,58783,58784],{"class":149}," (arr.",[143,58786,52856],{"class":280},[143,58788,58789],{"class":755}," ===",[143,58791,26016],{"class":280},[143,58793,13342],{"class":149},[143,58795,58796],{"class":145,"line":17656},[143,58797,58798],{"class":266},"        \u002F\u002F start.disabled = true\n",[143,58800,58801],{"class":145,"line":17661},[143,58802,58803],{"class":266},"        \u002F\u002F end.disabled = true\n",[143,58805,58806],{"class":145,"line":17667},[143,58807,58808],{"class":266},"        \u002F\u002F 可以合起来写\n",[143,58810,58811,58814,58816,58819,58821],{"class":145,"line":17681},[143,58812,58813],{"class":149},"        start.disabled ",[143,58815,160],{"class":755},[143,58817,58818],{"class":149}," end.disabled ",[143,58820,160],{"class":755},[143,58822,58823],{"class":280}," true\n",[143,58825,58826],{"class":145,"line":17694},[143,58827,53285],{"class":149},[143,58829,58830],{"class":145,"line":17699},[143,58831,34359],{"class":149},[143,58833,58834],{"class":145,"line":17713},[143,58835,58836],{"class":266},"    \u002F\u002F 1.2 关闭按钮模块\n",[143,58838,58839,58841,58843,58845,58847,58849,58851,58854],{"class":145,"line":17718},[143,58840,12121],{"class":755},[143,58842,5100],{"class":280},[143,58844,14464],{"class":755},[143,58846,55281],{"class":149},[143,58848,55284],{"class":156},[143,58850,1049],{"class":149},[143,58852,58853],{"class":163},"'.end'",[143,58855,1055],{"class":149},[143,58857,58858,58861,58863,58865,58867,58869,58871],{"class":145,"line":17724},[143,58859,58860],{"class":149},"    end.",[143,58862,58696],{"class":156},[143,58864,1049],{"class":149},[143,58866,58701],{"class":163},[143,58868,13335],{"class":149},[143,58870,55334],{"class":755},[143,58872,55337],{"class":149},[143,58874,58875,58878],{"class":145,"line":17729},[143,58876,58877],{"class":156},"      clearInterval",[143,58879,58880],{"class":149},"(timerId)\n",[143,58882,58883],{"class":145,"line":17743},[143,58884,58885],{"class":266},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[143,58887,58888,58891,58894,58897,58899],{"class":145,"line":17748},[143,58889,58890],{"class":149},"      arr.",[143,58892,58893],{"class":156},"splice",[143,58895,58896],{"class":149},"(random, ",[143,58898,771],{"class":280},[143,58900,1055],{"class":149},[143,58902,58903],{"class":145,"line":17753},[143,58904,34359],{"class":149},[143,58906,58907],{"class":145,"line":17767},[143,58908,3300],{"emptyLinePlaceholder":976},[143,58910,58911,58913,58915],{"class":145,"line":17779},[143,58912,53304],{"class":149},[143,58914,52701],{"class":153},[143,58916,183],{"class":149},[143,58918,58919,58921,58923],{"class":145,"line":17784},[143,58920,730],{"class":149},[143,58922,52688],{"class":153},[143,58924,183],{"class":149},[143,58926,58927],{"class":145,"line":17797},[143,58928,3300],{"emptyLinePlaceholder":976},[143,58930,58931,58933,58935],{"class":145,"line":17802},[143,58932,730],{"class":149},[143,58934,51533],{"class":153},[143,58936,183],{"class":149},[63,58938,58939],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[58,58941,58943],{"id":58942},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[133,58945,58947],{"className":51531,"code":58946,"language":51533,"meta":138,"style":138},"\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",[140,58948,58949,58959,58973,58977,58985,58999,59019,59031,59039,59043,59051,59063,59071,59090,59107,59123,59133,59137,59145,59153,59157],{"__ignoreMap":138},[143,58950,58951,58953,58955,58957],{"class":145,"line":146},[143,58952,52195],{"class":149},[143,58954,52198],{"class":153},[143,58956,52201],{"class":156},[143,58958,183],{"class":149},[143,58960,58961,58963,58965,58967,58969,58971],{"class":145,"line":35},[143,58962,150],{"class":149},[143,58964,51533],{"class":153},[143,58966,52212],{"class":156},[143,58968,160],{"class":149},[143,58970,52217],{"class":163},[143,58972,183],{"class":149},[143,58974,58975],{"class":145,"line":46},[143,58976,3300],{"emptyLinePlaceholder":976},[143,58978,58979,58981,58983],{"class":145,"line":293},[143,58980,150],{"class":149},[143,58982,52230],{"class":153},[143,58984,183],{"class":149},[143,58986,58987,58989,58991,58993,58995,58997],{"class":145,"line":306},[143,58988,634],{"class":149},[143,58990,52240],{"class":153},[143,58992,52243],{"class":156},[143,58994,160],{"class":149},[143,58996,52248],{"class":163},[143,58998,183],{"class":149},[143,59000,59001,59003,59005,59007,59009,59011,59013,59015,59017],{"class":145,"line":319},[143,59002,634],{"class":149},[143,59004,52240],{"class":153},[143,59006,15819],{"class":156},[143,59008,160],{"class":149},[143,59010,52287],{"class":163},[143,59012,52267],{"class":156},[143,59014,160],{"class":149},[143,59016,52294],{"class":163},[143,59018,183],{"class":149},[143,59020,59021,59023,59025,59027,59029],{"class":145,"line":332},[143,59022,634],{"class":149},[143,59024,52303],{"class":153},[143,59026,52306],{"class":149},[143,59028,52303],{"class":153},[143,59030,183],{"class":149},[143,59032,59033,59035,59037],{"class":145,"line":345},[143,59034,730],{"class":149},[143,59036,52230],{"class":153},[143,59038,183],{"class":149},[143,59040,59041],{"class":145,"line":701},[143,59042,3300],{"emptyLinePlaceholder":976},[143,59044,59045,59047,59049],{"class":145,"line":707},[143,59046,150],{"class":149},[143,59048,52688],{"class":153},[143,59050,183],{"class":149},[143,59052,59053,59055,59057,59059,59061],{"class":145,"line":727},[143,59054,634],{"class":149},[143,59056,54772],{"class":153},[143,59058,54778],{"class":149},[143,59060,54772],{"class":153},[143,59062,183],{"class":149},[143,59064,59065,59067,59069],{"class":145,"line":2518},[143,59066,634],{"class":149},[143,59068,52701],{"class":153},[143,59070,183],{"class":149},[143,59072,59073,59075,59077,59079,59081,59083,59085,59088],{"class":145,"line":2524},[143,59074,12121],{"class":755},[143,59076,55276],{"class":280},[143,59078,14464],{"class":755},[143,59080,55281],{"class":149},[143,59082,55284],{"class":156},[143,59084,1049],{"class":149},[143,59086,59087],{"class":163},"'button'",[143,59089,1055],{"class":149},[143,59091,59092,59095,59097,59099,59101,59103,59105],{"class":145,"line":2529},[143,59093,59094],{"class":149},"    btn.",[143,59096,58696],{"class":156},[143,59098,1049],{"class":149},[143,59100,58701],{"class":163},[143,59102,13335],{"class":149},[143,59104,55334],{"class":755},[143,59106,55337],{"class":149},[143,59108,59109,59112,59114,59116,59119,59121],{"class":145,"line":2543},[143,59110,59111],{"class":755},"      const",[143,59113,3140],{"class":280},[143,59115,14464],{"class":755},[143,59117,59118],{"class":149}," Math.",[143,59120,58743],{"class":156},[143,59122,2876],{"class":149},[143,59124,59125,59128,59131],{"class":145,"line":2548},[143,59126,59127],{"class":149},"      console.",[143,59129,59130],{"class":156},"log",[143,59132,1062],{"class":149},[143,59134,59135],{"class":145,"line":2554},[143,59136,34359],{"class":149},[143,59138,59139,59141,59143],{"class":145,"line":2575},[143,59140,53304],{"class":149},[143,59142,52701],{"class":153},[143,59144,183],{"class":149},[143,59146,59147,59149,59151],{"class":145,"line":2580},[143,59148,730],{"class":149},[143,59150,52688],{"class":153},[143,59152,183],{"class":149},[143,59154,59155],{"class":145,"line":2594},[143,59156,3300],{"emptyLinePlaceholder":976},[143,59158,59159,59161,59163],{"class":145,"line":2599},[143,59160,730],{"class":149},[143,59162,51533],{"class":153},[143,59164,183],{"class":149},[63,59166,59167],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[63,59169,59170],{},"常量不可以重新赋值",[63,59172,59173],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[133,59175,59177],{"className":51531,"code":59176,"language":51533,"meta":138,"style":138},"\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",[140,59178,59179,59189,59203,59207,59215,59229,59249,59261,59269,59273,59281,59293,59301,59312,59330,59346,59360,59368,59372,59380,59388,59392],{"__ignoreMap":138},[143,59180,59181,59183,59185,59187],{"class":145,"line":146},[143,59182,52195],{"class":149},[143,59184,52198],{"class":153},[143,59186,52201],{"class":156},[143,59188,183],{"class":149},[143,59190,59191,59193,59195,59197,59199,59201],{"class":145,"line":35},[143,59192,150],{"class":149},[143,59194,51533],{"class":153},[143,59196,52212],{"class":156},[143,59198,160],{"class":149},[143,59200,52217],{"class":163},[143,59202,183],{"class":149},[143,59204,59205],{"class":145,"line":46},[143,59206,3300],{"emptyLinePlaceholder":976},[143,59208,59209,59211,59213],{"class":145,"line":293},[143,59210,150],{"class":149},[143,59212,52230],{"class":153},[143,59214,183],{"class":149},[143,59216,59217,59219,59221,59223,59225,59227],{"class":145,"line":306},[143,59218,634],{"class":149},[143,59220,52240],{"class":153},[143,59222,52243],{"class":156},[143,59224,160],{"class":149},[143,59226,52248],{"class":163},[143,59228,183],{"class":149},[143,59230,59231,59233,59235,59237,59239,59241,59243,59245,59247],{"class":145,"line":319},[143,59232,634],{"class":149},[143,59234,52240],{"class":153},[143,59236,15819],{"class":156},[143,59238,160],{"class":149},[143,59240,52287],{"class":163},[143,59242,52267],{"class":156},[143,59244,160],{"class":149},[143,59246,52294],{"class":163},[143,59248,183],{"class":149},[143,59250,59251,59253,59255,59257,59259],{"class":145,"line":332},[143,59252,634],{"class":149},[143,59254,52303],{"class":153},[143,59256,52306],{"class":149},[143,59258,52303],{"class":153},[143,59260,183],{"class":149},[143,59262,59263,59265,59267],{"class":145,"line":345},[143,59264,730],{"class":149},[143,59266,52230],{"class":153},[143,59268,183],{"class":149},[143,59270,59271],{"class":145,"line":701},[143,59272,3300],{"emptyLinePlaceholder":976},[143,59274,59275,59277,59279],{"class":145,"line":707},[143,59276,150],{"class":149},[143,59278,52688],{"class":153},[143,59280,183],{"class":149},[143,59282,59283,59285,59287,59289,59291],{"class":145,"line":727},[143,59284,634],{"class":149},[143,59286,54772],{"class":153},[143,59288,54778],{"class":149},[143,59290,54772],{"class":153},[143,59292,183],{"class":149},[143,59294,59295,59297,59299],{"class":145,"line":2518},[143,59296,634],{"class":149},[143,59298,52701],{"class":153},[143,59300,183],{"class":149},[143,59302,59303,59305,59307,59309],{"class":145,"line":2524},[143,59304,12121],{"class":755},[143,59306,3140],{"class":280},[143,59308,14464],{"class":755},[143,59310,59311],{"class":280}," 10\n",[143,59313,59314,59316,59318,59320,59322,59324,59326,59328],{"class":145,"line":2529},[143,59315,12121],{"class":755},[143,59317,55276],{"class":280},[143,59319,14464],{"class":755},[143,59321,55281],{"class":149},[143,59323,55284],{"class":156},[143,59325,1049],{"class":149},[143,59327,59087],{"class":163},[143,59329,1055],{"class":149},[143,59331,59332,59334,59336,59338,59340,59342,59344],{"class":145,"line":2543},[143,59333,59094],{"class":149},[143,59335,58696],{"class":156},[143,59337,1049],{"class":149},[143,59339,58701],{"class":163},[143,59341,13335],{"class":149},[143,59343,55334],{"class":755},[143,59345,55337],{"class":149},[143,59347,59348,59350,59352,59354,59356,59358],{"class":145,"line":2548},[143,59349,59111],{"class":755},[143,59351,3140],{"class":280},[143,59353,14464],{"class":755},[143,59355,59118],{"class":149},[143,59357,58743],{"class":156},[143,59359,2876],{"class":149},[143,59361,59362,59364,59366],{"class":145,"line":2554},[143,59363,59127],{"class":149},[143,59365,59130],{"class":156},[143,59367,1062],{"class":149},[143,59369,59370],{"class":145,"line":2575},[143,59371,34359],{"class":149},[143,59373,59374,59376,59378],{"class":145,"line":2580},[143,59375,53304],{"class":149},[143,59377,52701],{"class":153},[143,59379,183],{"class":149},[143,59381,59382,59384,59386],{"class":145,"line":2594},[143,59383,730],{"class":149},[143,59385,52688],{"class":153},[143,59387,183],{"class":149},[143,59389,59390],{"class":145,"line":2599},[143,59391,3300],{"emptyLinePlaceholder":976},[143,59393,59394,59396,59398],{"class":145,"line":2628},[143,59395,730],{"class":149},[143,59397,51533],{"class":153},[143,59399,183],{"class":149},[63,59401,59402],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[133,59404,59406],{"className":51531,"code":59405,"language":51533,"meta":138,"style":138},"\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",[140,59407,59408,59418,59432,59436,59444,59458,59478,59490,59498,59502,59510,59522,59530,59540,59558,59574,59587,59595,59599,59607,59615,59619],{"__ignoreMap":138},[143,59409,59410,59412,59414,59416],{"class":145,"line":146},[143,59411,52195],{"class":149},[143,59413,52198],{"class":153},[143,59415,52201],{"class":156},[143,59417,183],{"class":149},[143,59419,59420,59422,59424,59426,59428,59430],{"class":145,"line":35},[143,59421,150],{"class":149},[143,59423,51533],{"class":153},[143,59425,52212],{"class":156},[143,59427,160],{"class":149},[143,59429,52217],{"class":163},[143,59431,183],{"class":149},[143,59433,59434],{"class":145,"line":46},[143,59435,3300],{"emptyLinePlaceholder":976},[143,59437,59438,59440,59442],{"class":145,"line":293},[143,59439,150],{"class":149},[143,59441,52230],{"class":153},[143,59443,183],{"class":149},[143,59445,59446,59448,59450,59452,59454,59456],{"class":145,"line":306},[143,59447,634],{"class":149},[143,59449,52240],{"class":153},[143,59451,52243],{"class":156},[143,59453,160],{"class":149},[143,59455,52248],{"class":163},[143,59457,183],{"class":149},[143,59459,59460,59462,59464,59466,59468,59470,59472,59474,59476],{"class":145,"line":319},[143,59461,634],{"class":149},[143,59463,52240],{"class":153},[143,59465,15819],{"class":156},[143,59467,160],{"class":149},[143,59469,52287],{"class":163},[143,59471,52267],{"class":156},[143,59473,160],{"class":149},[143,59475,52294],{"class":163},[143,59477,183],{"class":149},[143,59479,59480,59482,59484,59486,59488],{"class":145,"line":332},[143,59481,634],{"class":149},[143,59483,52303],{"class":153},[143,59485,52306],{"class":149},[143,59487,52303],{"class":153},[143,59489,183],{"class":149},[143,59491,59492,59494,59496],{"class":145,"line":345},[143,59493,730],{"class":149},[143,59495,52230],{"class":153},[143,59497,183],{"class":149},[143,59499,59500],{"class":145,"line":701},[143,59501,3300],{"emptyLinePlaceholder":976},[143,59503,59504,59506,59508],{"class":145,"line":707},[143,59505,150],{"class":149},[143,59507,52688],{"class":153},[143,59509,183],{"class":149},[143,59511,59512,59514,59516,59518,59520],{"class":145,"line":727},[143,59513,634],{"class":149},[143,59515,54772],{"class":153},[143,59517,54778],{"class":149},[143,59519,54772],{"class":153},[143,59521,183],{"class":149},[143,59523,59524,59526,59528],{"class":145,"line":2518},[143,59525,634],{"class":149},[143,59527,52701],{"class":153},[143,59529,183],{"class":149},[143,59531,59532,59534,59536,59538],{"class":145,"line":2524},[143,59533,12121],{"class":755},[143,59535,3140],{"class":280},[143,59537,14464],{"class":755},[143,59539,59311],{"class":280},[143,59541,59542,59544,59546,59548,59550,59552,59554,59556],{"class":145,"line":2529},[143,59543,12121],{"class":755},[143,59545,55276],{"class":280},[143,59547,14464],{"class":755},[143,59549,55281],{"class":149},[143,59551,55284],{"class":156},[143,59553,1049],{"class":149},[143,59555,59087],{"class":163},[143,59557,1055],{"class":149},[143,59559,59560,59562,59564,59566,59568,59570,59572],{"class":145,"line":2543},[143,59561,59094],{"class":149},[143,59563,58696],{"class":156},[143,59565,1049],{"class":149},[143,59567,58701],{"class":163},[143,59569,13335],{"class":149},[143,59571,55334],{"class":755},[143,59573,55337],{"class":149},[143,59575,59576,59579,59581,59583,59585],{"class":145,"line":2548},[143,59577,59578],{"class":149},"      num ",[143,59580,160],{"class":755},[143,59582,59118],{"class":149},[143,59584,58743],{"class":156},[143,59586,2876],{"class":149},[143,59588,59589,59591,59593],{"class":145,"line":2554},[143,59590,59127],{"class":149},[143,59592,59130],{"class":156},[143,59594,1062],{"class":149},[143,59596,59597],{"class":145,"line":2575},[143,59598,34359],{"class":149},[143,59600,59601,59603,59605],{"class":145,"line":2580},[143,59602,53304],{"class":149},[143,59604,52701],{"class":153},[143,59606,183],{"class":149},[143,59608,59609,59611,59613],{"class":145,"line":2594},[143,59610,730],{"class":149},[143,59612,52688],{"class":153},[143,59614,183],{"class":149},[143,59616,59617],{"class":145,"line":2599},[143,59618,3300],{"emptyLinePlaceholder":976},[143,59620,59621,59623,59625],{"class":145,"line":2628},[143,59622,730],{"class":149},[143,59624,51533],{"class":153},[143,59626,183],{"class":149},[63,59628,59629],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[58,59631,59633],{"id":59632},"_324-事件监听版本","3.2.4 事件监听版本",[63,59635,59636],{},[29,59637],{"alt":138,"src":59638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[63,59640,59641],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[63,59643,59644],{},"这种方式会覆盖前边的事件监听:",[133,59646,59648],{"className":51531,"code":59647,"language":51533,"meta":138,"style":138},"\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",[140,59649,59650,59660,59674,59678,59686,59700,59720,59732,59740,59744,59752,59764,59772,59790,59804,59815,59819,59831,59841,59845,59853,59861,59865],{"__ignoreMap":138},[143,59651,59652,59654,59656,59658],{"class":145,"line":146},[143,59653,52195],{"class":149},[143,59655,52198],{"class":153},[143,59657,52201],{"class":156},[143,59659,183],{"class":149},[143,59661,59662,59664,59666,59668,59670,59672],{"class":145,"line":35},[143,59663,150],{"class":149},[143,59665,51533],{"class":153},[143,59667,52212],{"class":156},[143,59669,160],{"class":149},[143,59671,52217],{"class":163},[143,59673,183],{"class":149},[143,59675,59676],{"class":145,"line":46},[143,59677,3300],{"emptyLinePlaceholder":976},[143,59679,59680,59682,59684],{"class":145,"line":293},[143,59681,150],{"class":149},[143,59683,52230],{"class":153},[143,59685,183],{"class":149},[143,59687,59688,59690,59692,59694,59696,59698],{"class":145,"line":306},[143,59689,634],{"class":149},[143,59691,52240],{"class":153},[143,59693,52243],{"class":156},[143,59695,160],{"class":149},[143,59697,52248],{"class":163},[143,59699,183],{"class":149},[143,59701,59702,59704,59706,59708,59710,59712,59714,59716,59718],{"class":145,"line":319},[143,59703,634],{"class":149},[143,59705,52240],{"class":153},[143,59707,15819],{"class":156},[143,59709,160],{"class":149},[143,59711,52287],{"class":163},[143,59713,52267],{"class":156},[143,59715,160],{"class":149},[143,59717,52294],{"class":163},[143,59719,183],{"class":149},[143,59721,59722,59724,59726,59728,59730],{"class":145,"line":332},[143,59723,634],{"class":149},[143,59725,52303],{"class":153},[143,59727,52306],{"class":149},[143,59729,52303],{"class":153},[143,59731,183],{"class":149},[143,59733,59734,59736,59738],{"class":145,"line":345},[143,59735,730],{"class":149},[143,59737,52230],{"class":153},[143,59739,183],{"class":149},[143,59741,59742],{"class":145,"line":701},[143,59743,3300],{"emptyLinePlaceholder":976},[143,59745,59746,59748,59750],{"class":145,"line":707},[143,59747,150],{"class":149},[143,59749,52688],{"class":153},[143,59751,183],{"class":149},[143,59753,59754,59756,59758,59760,59762],{"class":145,"line":727},[143,59755,634],{"class":149},[143,59757,54772],{"class":153},[143,59759,54778],{"class":149},[143,59761,54772],{"class":153},[143,59763,183],{"class":149},[143,59765,59766,59768,59770],{"class":145,"line":2518},[143,59767,634],{"class":149},[143,59769,52701],{"class":153},[143,59771,183],{"class":149},[143,59773,59774,59776,59778,59780,59782,59784,59786,59788],{"class":145,"line":2524},[143,59775,12121],{"class":755},[143,59777,55276],{"class":280},[143,59779,14464],{"class":755},[143,59781,55281],{"class":149},[143,59783,55284],{"class":156},[143,59785,1049],{"class":149},[143,59787,59087],{"class":163},[143,59789,1055],{"class":149},[143,59791,59792,59794,59797,59799,59802],{"class":145,"line":2529},[143,59793,59094],{"class":149},[143,59795,59796],{"class":156},"onclick",[143,59798,14464],{"class":755},[143,59800,59801],{"class":755}," function",[143,59803,55337],{"class":149},[143,59805,59806,59809,59811,59813],{"class":145,"line":2543},[143,59807,59808],{"class":156},"      alert",[143,59810,1049],{"class":149},[143,59812,1513],{"class":280},[143,59814,1055],{"class":149},[143,59816,59817],{"class":145,"line":2548},[143,59818,3087],{"class":149},[143,59820,59821,59823,59825,59827,59829],{"class":145,"line":2554},[143,59822,59094],{"class":149},[143,59824,59796],{"class":156},[143,59826,14464],{"class":755},[143,59828,59801],{"class":755},[143,59830,55337],{"class":149},[143,59832,59833,59835,59837,59839],{"class":145,"line":2575},[143,59834,59808],{"class":156},[143,59836,1049],{"class":149},[143,59838,1791],{"class":280},[143,59840,1055],{"class":149},[143,59842,59843],{"class":145,"line":2580},[143,59844,3087],{"class":149},[143,59846,59847,59849,59851],{"class":145,"line":2594},[143,59848,53304],{"class":149},[143,59850,52701],{"class":153},[143,59852,183],{"class":149},[143,59854,59855,59857,59859],{"class":145,"line":2599},[143,59856,730],{"class":149},[143,59858,52688],{"class":153},[143,59860,183],{"class":149},[143,59862,59863],{"class":145,"line":2628},[143,59864,3300],{"emptyLinePlaceholder":976},[143,59866,59867,59869,59871],{"class":145,"line":2633},[143,59868,730],{"class":149},[143,59870,51533],{"class":153},[143,59872,183],{"class":149},[63,59874,59875],{},"只要点击就输出结果为22,前边11被覆盖了",[133,59877,59879],{"className":51531,"code":59878,"language":51533,"meta":138,"style":138},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[140,59880,59881,59886,59891,59895,59900,59905],{"__ignoreMap":138},[143,59882,59883],{"class":145,"line":146},[143,59884,59885],{"class":149},"  btn.addEventListener('click', function () {\n",[143,59887,59888],{"class":145,"line":35},[143,59889,59890],{"class":149},"      alert(11)\n",[143,59892,59893],{"class":145,"line":46},[143,59894,34359],{"class":149},[143,59896,59897],{"class":145,"line":293},[143,59898,59899],{"class":149},"    btn.addEventListener('click', function () {\n",[143,59901,59902],{"class":145,"line":306},[143,59903,59904],{"class":149},"      alert(22)\n",[143,59906,59907],{"class":145,"line":319},[143,59908,34359],{"class":149},[63,59910,59911],{},"点击第一次输出11,第二次点击为22",[58,59913,59915],{"id":59914},"_325-事件类型","3.2.5 事件类型",[63,59917,59918],{},[29,59919],{"alt":138,"src":59920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22896,59922,59924],{"id":59923},"_3251-鼠标事件","3.2.5.1 鼠标事件",[63,59926,59927],{},"补充知识:",[63,59929,59930],{},"轮播图自动播放模块,可以使用",[63,59932,59933],{},"let timerId = setInterval(function () {",[63,59935,59936],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[63,59938,59939],{},"用js方法模拟进行点击事件,click必须加()",[63,59941,59942],{},"next.click()",[63,59944,59945],{},"}, 1000)",[63,59947,59948],{},[29,59949],{"alt":138,"src":59950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[133,59952,59954],{"className":53954,"code":59953,"language":53956,"meta":138,"style":138},"\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",[140,59955,59956,59960,59970,59984,59988,59996,60011,60031,60051,60064,60072,60077,60082,60086,60090,60095,60100,60105,60110,60114,60118,60123,60128,60133,60137,60141,60146,60150,60155,60160,60164,60168,60173,60178,60183,60188,60193,60197,60201,60206,60211,60216,60221,60226,60230,60234,60239,60244,60249,60254,60259,60264,60269,60274,60279,60284,60288,60292,60297,60302,60306,60310,60315,60320,60324,60329,60334,60338,60342,60347,60351,60356,60361,60365,60370,60374,60378,60383,60388,60393,60398,60403,60408,60413,60417,60421,60425,60430,60435,60440,60445,60449,60457,60465,60469,60477,60492,60506,60527,60535,60549,60562,60577,60596,60608,60620,60632,60644,60656,60668,60680,60688,60703,60727,60751,60759,60767,60775,60783,60788,60793,60798,60803,60808,60813,60818,60823,60828,60833,60837,60842,60847,60852,60857,60862,60867,60872,60877,60882,60886,60891,60896,60901,60906,60911,60916,60921,60926,60931,60936,60941,60946,60950,60954,60959,60964,60969,60973,60978,60983,60988,60993,60998,61002,61007,61011,61015,61019,61023,61027,61031,61036,61041,61046,61051,61056,61061,61066,61071,61076,61080,61084,61089,61094,61099,61104,61109,61113,61118,61123,61128,61133,61138,61143,61147,61151,61156,61160,61165,61169,61174,61179,61184,61189,61194,61199,61203,61211,61219,61223],{"__ignoreMap":138},[143,59957,59958],{"class":145,"line":146},[143,59959,3300],{"emptyLinePlaceholder":976},[143,59961,59962,59964,59966,59968],{"class":145,"line":35},[143,59963,52195],{"class":149},[143,59965,52198],{"class":755},[143,59967,52201],{"class":280},[143,59969,183],{"class":149},[143,59971,59972,59974,59976,59978,59980,59982],{"class":145,"line":46},[143,59973,150],{"class":149},[143,59975,51533],{"class":153},[143,59977,52212],{"class":156},[143,59979,160],{"class":149},[143,59981,52217],{"class":163},[143,59983,183],{"class":149},[143,59985,59986],{"class":145,"line":293},[143,59987,3300],{"emptyLinePlaceholder":976},[143,59989,59990,59992,59994],{"class":145,"line":306},[143,59991,150],{"class":149},[143,59993,52230],{"class":153},[143,59995,183],{"class":149},[143,59997,59998,60000,60002,60004,60006,60008],{"class":145,"line":319},[143,59999,634],{"class":149},[143,60001,52240],{"class":153},[143,60003,52243],{"class":156},[143,60005,160],{"class":149},[143,60007,52248],{"class":163},[143,60009,60010],{"class":149}," \u002F>\n",[143,60012,60013,60015,60017,60019,60021,60023,60025,60027,60029],{"class":145,"line":332},[143,60014,634],{"class":149},[143,60016,52240],{"class":153},[143,60018,52259],{"class":156},[143,60020,160],{"class":149},[143,60022,52264],{"class":163},[143,60024,52267],{"class":156},[143,60026,160],{"class":149},[143,60028,52272],{"class":163},[143,60030,60010],{"class":149},[143,60032,60033,60035,60037,60039,60041,60043,60045,60047,60049],{"class":145,"line":345},[143,60034,634],{"class":149},[143,60036,52240],{"class":153},[143,60038,15819],{"class":156},[143,60040,160],{"class":149},[143,60042,52287],{"class":163},[143,60044,52267],{"class":156},[143,60046,160],{"class":149},[143,60048,52294],{"class":163},[143,60050,60010],{"class":149},[143,60052,60053,60055,60057,60060,60062],{"class":145,"line":701},[143,60054,634],{"class":149},[143,60056,52303],{"class":153},[143,60058,60059],{"class":149},">轮播图点击切换\u003C\u002F",[143,60061,52303],{"class":153},[143,60063,183],{"class":149},[143,60065,60066,60068,60070],{"class":145,"line":707},[143,60067,634],{"class":149},[143,60069,954],{"class":153},[143,60071,183],{"class":149},[143,60073,60074],{"class":145,"line":727},[143,60075,60076],{"class":149},"    * {\n",[143,60078,60079],{"class":145,"line":2518},[143,60080,60081],{"class":149},"      box-sizing: border-box;\n",[143,60083,60084],{"class":145,"line":2524},[143,60085,3087],{"class":149},[143,60087,60088],{"class":145,"line":2529},[143,60089,3300],{"emptyLinePlaceholder":976},[143,60091,60092],{"class":145,"line":2543},[143,60093,60094],{"class":149},"    .slider {\n",[143,60096,60097],{"class":145,"line":2548},[143,60098,60099],{"class":149},"      width: 560px;\n",[143,60101,60102],{"class":145,"line":2554},[143,60103,60104],{"class":149},"      height: 400px;\n",[143,60106,60107],{"class":145,"line":2575},[143,60108,60109],{"class":149},"      overflow: hidden;\n",[143,60111,60112],{"class":145,"line":2580},[143,60113,3087],{"class":149},[143,60115,60116],{"class":145,"line":2594},[143,60117,3300],{"emptyLinePlaceholder":976},[143,60119,60120],{"class":145,"line":2599},[143,60121,60122],{"class":149},"    .slider-wrapper {\n",[143,60124,60125],{"class":145,"line":2628},[143,60126,60127],{"class":149},"      width: 100%;\n",[143,60129,60130],{"class":145,"line":2633},[143,60131,60132],{"class":149},"      height: 320px;\n",[143,60134,60135],{"class":145,"line":2650},[143,60136,3087],{"class":149},[143,60138,60139],{"class":145,"line":2655},[143,60140,3300],{"emptyLinePlaceholder":976},[143,60142,60143],{"class":145,"line":2660},[143,60144,60145],{"class":149},"    .slider-wrapper img {\n",[143,60147,60148],{"class":145,"line":2665},[143,60149,60127],{"class":149},[143,60151,60152],{"class":145,"line":2679},[143,60153,60154],{"class":149},"      height: 100%;\n",[143,60156,60157],{"class":145,"line":2684},[143,60158,60159],{"class":149},"      display: block;\n",[143,60161,60162],{"class":145,"line":3477},[143,60163,3087],{"class":149},[143,60165,60166],{"class":145,"line":3491},[143,60167,3300],{"emptyLinePlaceholder":976},[143,60169,60170],{"class":145,"line":3499},[143,60171,60172],{"class":149},"    .slider-footer {\n",[143,60174,60175],{"class":145,"line":3504},[143,60176,60177],{"class":149},"      height: 80px;\n",[143,60179,60180],{"class":145,"line":3510},[143,60181,60182],{"class":149},"      background-color: rgb(100, 67, 68);\n",[143,60184,60185],{"class":145,"line":3516},[143,60186,60187],{"class":149},"      padding: 12px 12px 0 12px;\n",[143,60189,60190],{"class":145,"line":3521},[143,60191,60192],{"class":149},"      position: relative;\n",[143,60194,60195],{"class":145,"line":8848},[143,60196,3087],{"class":149},[143,60198,60199],{"class":145,"line":8872},[143,60200,3300],{"emptyLinePlaceholder":976},[143,60202,60203],{"class":145,"line":8877},[143,60204,60205],{"class":149},"    .slider-footer .toggle {\n",[143,60207,60208],{"class":145,"line":8883},[143,60209,60210],{"class":149},"      position: absolute;\n",[143,60212,60213],{"class":145,"line":8910},[143,60214,60215],{"class":149},"      right: 0;\n",[143,60217,60218],{"class":145,"line":8915},[143,60219,60220],{"class":149},"      top: 12px;\n",[143,60222,60223],{"class":145,"line":8921},[143,60224,60225],{"class":149},"      display: flex;\n",[143,60227,60228],{"class":145,"line":8933},[143,60229,3087],{"class":149},[143,60231,60232],{"class":145,"line":8945},[143,60233,3300],{"emptyLinePlaceholder":976},[143,60235,60236],{"class":145,"line":8957},[143,60237,60238],{"class":149},"    .slider-footer .toggle button {\n",[143,60240,60241],{"class":145,"line":10616},[143,60242,60243],{"class":149},"      margin-right: 12px;\n",[143,60245,60246],{"class":145,"line":10641},[143,60247,60248],{"class":149},"      width: 28px;\n",[143,60250,60251],{"class":145,"line":10664},[143,60252,60253],{"class":149},"      height: 28px;\n",[143,60255,60256],{"class":145,"line":10688},[143,60257,60258],{"class":149},"      appearance: none;\n",[143,60260,60261],{"class":145,"line":10693},[143,60262,60263],{"class":149},"      border: none;\n",[143,60265,60266],{"class":145,"line":10698},[143,60267,60268],{"class":149},"      background: rgba(255, 255, 255, 0.1);\n",[143,60270,60271],{"class":145,"line":10703},[143,60272,60273],{"class":149},"      color: #fff;\n",[143,60275,60276],{"class":145,"line":10712},[143,60277,60278],{"class":149},"      border-radius: 4px;\n",[143,60280,60281],{"class":145,"line":10717},[143,60282,60283],{"class":149},"      cursor: pointer;\n",[143,60285,60286],{"class":145,"line":10723},[143,60287,3087],{"class":149},[143,60289,60290],{"class":145,"line":10744},[143,60291,3300],{"emptyLinePlaceholder":976},[143,60293,60294],{"class":145,"line":10750},[143,60295,60296],{"class":149},"    .slider-footer .toggle button:hover {\n",[143,60298,60299],{"class":145,"line":10764},[143,60300,60301],{"class":149},"      background: rgba(255, 255, 255, 0.2);\n",[143,60303,60304],{"class":145,"line":10770},[143,60305,3087],{"class":149},[143,60307,60308],{"class":145,"line":10797},[143,60309,3300],{"emptyLinePlaceholder":976},[143,60311,60312],{"class":145,"line":10806},[143,60313,60314],{"class":149},"    .slider-footer p {\n",[143,60316,60317],{"class":145,"line":10812},[143,60318,60319],{"class":149},"      margin: 0;\n",[143,60321,60322],{"class":145,"line":10820},[143,60323,60273],{"class":149},[143,60325,60326],{"class":145,"line":10825},[143,60327,60328],{"class":149},"      font-size: 18px;\n",[143,60330,60331],{"class":145,"line":17502},[143,60332,60333],{"class":149},"      margin-bottom: 10px;\n",[143,60335,60336],{"class":145,"line":17508},[143,60337,3087],{"class":149},[143,60339,60340],{"class":145,"line":17531},[143,60341,3300],{"emptyLinePlaceholder":976},[143,60343,60344],{"class":145,"line":17537},[143,60345,60346],{"class":149},"    .slider-indicator {\n",[143,60348,60349],{"class":145,"line":17560},[143,60350,60319],{"class":149},[143,60352,60353],{"class":145,"line":17574},[143,60354,60355],{"class":149},"      padding: 0;\n",[143,60357,60358],{"class":145,"line":17594},[143,60359,60360],{"class":149},"      list-style: none;\n",[143,60362,60363],{"class":145,"line":17600},[143,60364,60225],{"class":149},[143,60366,60367],{"class":145,"line":17611},[143,60368,60369],{"class":149},"      align-items: center;\n",[143,60371,60372],{"class":145,"line":17634},[143,60373,3087],{"class":149},[143,60375,60376],{"class":145,"line":17656},[143,60377,3300],{"emptyLinePlaceholder":976},[143,60379,60380],{"class":145,"line":17661},[143,60381,60382],{"class":149},"    .slider-indicator li {\n",[143,60384,60385],{"class":145,"line":17667},[143,60386,60387],{"class":149},"      width: 8px;\n",[143,60389,60390],{"class":145,"line":17681},[143,60391,60392],{"class":149},"      height: 8px;\n",[143,60394,60395],{"class":145,"line":17694},[143,60396,60397],{"class":149},"      margin: 4px;\n",[143,60399,60400],{"class":145,"line":17699},[143,60401,60402],{"class":149},"      border-radius: 50%;\n",[143,60404,60405],{"class":145,"line":17713},[143,60406,60407],{"class":149},"      background: #fff;\n",[143,60409,60410],{"class":145,"line":17718},[143,60411,60412],{"class":149},"      opacity: 0.4;\n",[143,60414,60415],{"class":145,"line":17724},[143,60416,60283],{"class":149},[143,60418,60419],{"class":145,"line":17729},[143,60420,3087],{"class":149},[143,60422,60423],{"class":145,"line":17743},[143,60424,3300],{"emptyLinePlaceholder":976},[143,60426,60427],{"class":145,"line":17748},[143,60428,60429],{"class":149},"    .slider-indicator li.active {\n",[143,60431,60432],{"class":145,"line":17753},[143,60433,60434],{"class":149},"      width: 12px;\n",[143,60436,60437],{"class":145,"line":17767},[143,60438,60439],{"class":149},"      height: 12px;\n",[143,60441,60442],{"class":145,"line":17779},[143,60443,60444],{"class":149},"      opacity: 1;\n",[143,60446,60447],{"class":145,"line":17784},[143,60448,3087],{"class":149},[143,60450,60451,60453,60455],{"class":145,"line":17797},[143,60452,53304],{"class":149},[143,60454,954],{"class":153},[143,60456,183],{"class":149},[143,60458,60459,60461,60463],{"class":145,"line":17802},[143,60460,730],{"class":149},[143,60462,52230],{"class":153},[143,60464,183],{"class":149},[143,60466,60467],{"class":145,"line":17807},[143,60468,3300],{"emptyLinePlaceholder":976},[143,60470,60471,60473,60475],{"class":145,"line":17812},[143,60472,150],{"class":149},[143,60474,52688],{"class":153},[143,60476,183],{"class":149},[143,60478,60479,60481,60483,60485,60487,60490],{"class":145,"line":17825},[143,60480,634],{"class":149},[143,60482,614],{"class":153},[143,60484,617],{"class":156},[143,60486,160],{"class":149},[143,60488,60489],{"class":163},"\"slider\"",[143,60491,183],{"class":149},[143,60493,60494,60496,60498,60500,60502,60504],{"class":145,"line":17830},[143,60495,52237],{"class":149},[143,60497,614],{"class":153},[143,60499,617],{"class":156},[143,60501,160],{"class":149},[143,60503,56112],{"class":163},[143,60505,183],{"class":149},[143,60507,60508,60510,60512,60514,60516,60519,60521,60523,60525],{"class":145,"line":33531},[143,60509,56119],{"class":149},[143,60511,29],{"class":153},[143,60513,157],{"class":156},[143,60515,160],{"class":149},[143,60517,60518],{"class":163},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[143,60520,167],{"class":156},[143,60522,160],{"class":149},[143,60524,8552],{"class":163},[143,60526,60010],{"class":149},[143,60528,60529,60531,60533],{"class":145,"line":33537},[143,60530,52665],{"class":149},[143,60532,614],{"class":153},[143,60534,183],{"class":149},[143,60536,60537,60539,60541,60543,60545,60547],{"class":145,"line":33543},[143,60538,52237],{"class":149},[143,60540,614],{"class":153},[143,60542,617],{"class":156},[143,60544,160],{"class":149},[143,60546,56157],{"class":163},[143,60548,183],{"class":149},[143,60550,60551,60553,60555,60558,60560],{"class":145,"line":33549},[143,60552,56119],{"class":149},[143,60554,63],{"class":153},[143,60556,60557],{"class":149},">对人类来说会不会太超前了？\u003C\u002F",[143,60559,63],{"class":153},[143,60561,183],{"class":149},[143,60563,60564,60566,60568,60570,60572,60575],{"class":145,"line":33555},[143,60565,56119],{"class":149},[143,60567,232],{"class":153},[143,60569,617],{"class":156},[143,60571,160],{"class":149},[143,60573,60574],{"class":163},"\"slider-indicator\"",[143,60576,183],{"class":149},[143,60578,60579,60581,60583,60585,60587,60590,60592,60594],{"class":145,"line":33566},[143,60580,56185],{"class":149},[143,60582,22],{"class":153},[143,60584,617],{"class":156},[143,60586,160],{"class":149},[143,60588,60589],{"class":163},"\"active\"",[143,60591,56197],{"class":149},[143,60593,22],{"class":153},[143,60595,183],{"class":149},[143,60597,60598,60600,60602,60604,60606],{"class":145,"line":33572},[143,60599,56185],{"class":149},[143,60601,22],{"class":153},[143,60603,56197],{"class":149},[143,60605,22],{"class":153},[143,60607,183],{"class":149},[143,60609,60610,60612,60614,60616,60618],{"class":145,"line":33592},[143,60611,56185],{"class":149},[143,60613,22],{"class":153},[143,60615,56197],{"class":149},[143,60617,22],{"class":153},[143,60619,183],{"class":149},[143,60621,60622,60624,60626,60628,60630],{"class":145,"line":33598},[143,60623,56185],{"class":149},[143,60625,22],{"class":153},[143,60627,56197],{"class":149},[143,60629,22],{"class":153},[143,60631,183],{"class":149},[143,60633,60634,60636,60638,60640,60642],{"class":145,"line":33609},[143,60635,56185],{"class":149},[143,60637,22],{"class":153},[143,60639,56197],{"class":149},[143,60641,22],{"class":153},[143,60643,183],{"class":149},[143,60645,60646,60648,60650,60652,60654],{"class":145,"line":33615},[143,60647,56185],{"class":149},[143,60649,22],{"class":153},[143,60651,56197],{"class":149},[143,60653,22],{"class":153},[143,60655,183],{"class":149},[143,60657,60658,60660,60662,60664,60666],{"class":145,"line":33621},[143,60659,56185],{"class":149},[143,60661,22],{"class":153},[143,60663,56197],{"class":149},[143,60665,22],{"class":153},[143,60667,183],{"class":149},[143,60669,60670,60672,60674,60676,60678],{"class":145,"line":33627},[143,60671,56185],{"class":149},[143,60673,22],{"class":153},[143,60675,56197],{"class":149},[143,60677,22],{"class":153},[143,60679,183],{"class":149},[143,60681,60682,60684,60686],{"class":145,"line":33633},[143,60683,56290],{"class":149},[143,60685,232],{"class":153},[143,60687,183],{"class":149},[143,60689,60690,60692,60694,60696,60698,60701],{"class":145,"line":33639},[143,60691,56119],{"class":149},[143,60693,614],{"class":153},[143,60695,617],{"class":156},[143,60697,160],{"class":149},[143,60699,60700],{"class":163},"\"toggle\"",[143,60702,183],{"class":149},[143,60704,60705,60707,60709,60711,60713,60716,60718,60721,60723,60725],{"class":145,"line":33645},[143,60706,56185],{"class":149},[143,60708,54772],{"class":153},[143,60710,617],{"class":156},[143,60712,160],{"class":149},[143,60714,60715],{"class":163},"\"prev\"",[143,60717,1998],{"class":149},[143,60719,60720],{"class":280},"&lt;",[143,60722,730],{"class":149},[143,60724,54772],{"class":153},[143,60726,183],{"class":149},[143,60728,60729,60731,60733,60735,60737,60740,60742,60745,60747,60749],{"class":145,"line":33651},[143,60730,56185],{"class":149},[143,60732,54772],{"class":153},[143,60734,617],{"class":156},[143,60736,160],{"class":149},[143,60738,60739],{"class":163},"\"next\"",[143,60741,1998],{"class":149},[143,60743,60744],{"class":280},"&gt;",[143,60746,730],{"class":149},[143,60748,54772],{"class":153},[143,60750,183],{"class":149},[143,60752,60753,60755,60757],{"class":145,"line":33671},[143,60754,56290],{"class":149},[143,60756,614],{"class":153},[143,60758,183],{"class":149},[143,60760,60761,60763,60765],{"class":145,"line":33677},[143,60762,52665],{"class":149},[143,60764,614],{"class":153},[143,60766,183],{"class":149},[143,60768,60769,60771,60773],{"class":145,"line":33693},[143,60770,53304],{"class":149},[143,60772,614],{"class":153},[143,60774,183],{"class":149},[143,60776,60777,60779,60781],{"class":145,"line":33699},[143,60778,634],{"class":149},[143,60780,52701],{"class":153},[143,60782,183],{"class":149},[143,60784,60785],{"class":145,"line":33713},[143,60786,60787],{"class":149},"    \u002F\u002F 1. 初始数据\n",[143,60789,60790],{"class":145,"line":33719},[143,60791,60792],{"class":149},"    const data = [\n",[143,60794,60795],{"class":145,"line":33734},[143,60796,60797],{"class":149},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[143,60799,60800],{"class":145,"line":33740},[143,60801,60802],{"class":149},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[143,60804,60805],{"class":145,"line":33749},[143,60806,60807],{"class":149},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[143,60809,60810],{"class":145,"line":33755},[143,60811,60812],{"class":149},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[143,60814,60815],{"class":145,"line":33764},[143,60816,60817],{"class":149},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[143,60819,60820],{"class":145,"line":33770},[143,60821,60822],{"class":149},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[143,60824,60825],{"class":145,"line":33776},[143,60826,60827],{"class":149},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[143,60829,60830],{"class":145,"line":33785},[143,60831,60832],{"class":149},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[143,60834,60835],{"class":145,"line":33791},[143,60836,53996],{"class":149},[143,60838,60839],{"class":145,"line":33802},[143,60840,60841],{"class":149},"    \u002F\u002F 获取元素\n",[143,60843,60844],{"class":145,"line":33808},[143,60845,60846],{"class":149},"    const img = document.querySelector('.slider-wrapper img')\n",[143,60848,60849],{"class":145,"line":33827},[143,60850,60851],{"class":149},"    const p = document.querySelector('.slider-footer p')\n",[143,60853,60854],{"class":145,"line":33833},[143,60855,60856],{"class":149},"    const footer = document.querySelector('.slider-footer')\n",[143,60858,60859],{"class":145,"line":33844},[143,60860,60861],{"class":149},"    \u002F\u002F 1. 右按钮业务\n",[143,60863,60864],{"class":145,"line":33850},[143,60865,60866],{"class":149},"    \u002F\u002F 1.1 获取右侧按钮 \n",[143,60868,60869],{"class":145,"line":33870},[143,60870,60871],{"class":149},"    const next = document.querySelector('.next')\n",[143,60873,60874],{"class":145,"line":33886},[143,60875,60876],{"class":149},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[143,60878,60879],{"class":145,"line":33892},[143,60880,60881],{"class":149},"    \u002F\u002F 1.2 注册点击事件\n",[143,60883,60884],{"class":145,"line":33906},[143,60885,3300],{"emptyLinePlaceholder":976},[143,60887,60888],{"class":145,"line":33912},[143,60889,60890],{"class":149},"    next.addEventListener('click', function () {\n",[143,60892,60893],{"class":145,"line":33918},[143,60894,60895],{"class":149},"      \u002F\u002F console.log(11)\n",[143,60897,60898],{"class":145,"line":33929},[143,60899,60900],{"class":149},"      i++\n",[143,60902,60903],{"class":145,"line":33935},[143,60904,60905],{"class":149},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[143,60907,60908],{"class":145,"line":33941},[143,60909,60910],{"class":149},"      \u002F\u002F if (i >= 8) {\n",[143,60912,60913],{"class":145,"line":33951},[143,60914,60915],{"class":149},"      \u002F\u002F   i = 0\n",[143,60917,60918],{"class":145,"line":33957},[143,60919,60920],{"class":149},"      \u002F\u002F }\n",[143,60922,60923],{"class":145,"line":33968},[143,60924,60925],{"class":149},"      i = i >= data.length ? 0 : i\n",[143,60927,60928],{"class":145,"line":33974},[143,60929,60930],{"class":149},"      \u002F\u002F 1.3 得到对应的对象\n",[143,60932,60933],{"class":145,"line":33984},[143,60934,60935],{"class":149},"      \u002F\u002F console.log(data[i])\n",[143,60937,60938],{"class":145,"line":33989},[143,60939,60940],{"class":149},"      \u002F\u002F 调用函数\n",[143,60942,60943],{"class":145,"line":33995},[143,60944,60945],{"class":149},"      toggle()\n",[143,60947,60948],{"class":145,"line":34044},[143,60949,34359],{"class":149},[143,60951,60952],{"class":145,"line":34091},[143,60953,3300],{"emptyLinePlaceholder":976},[143,60955,60956],{"class":145,"line":34096},[143,60957,60958],{"class":149},"    \u002F\u002F 2. 左侧按钮业务\n",[143,60960,60961],{"class":145,"line":34102},[143,60962,60963],{"class":149},"    \u002F\u002F 2.1 获取左侧按钮 \n",[143,60965,60966],{"class":145,"line":34121},[143,60967,60968],{"class":149},"    const prev = document.querySelector('.prev')\n",[143,60970,60971],{"class":145,"line":34127},[143,60972,60881],{"class":149},[143,60974,60975],{"class":145,"line":34147},[143,60976,60977],{"class":149},"    prev.addEventListener('click', function () {\n",[143,60979,60980],{"class":145,"line":34153},[143,60981,60982],{"class":149},"      i--\n",[143,60984,60985],{"class":145,"line":34159},[143,60986,60987],{"class":149},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[143,60989,60990],{"class":145,"line":34169},[143,60991,60992],{"class":149},"      \u002F\u002F if (i \u003C 0) {\n",[143,60994,60995],{"class":145,"line":34174},[143,60996,60997],{"class":149},"      \u002F\u002F   i = 7\n",[143,60999,61000],{"class":145,"line":34180},[143,61001,60920],{"class":149},[143,61003,61004],{"class":145,"line":34196},[143,61005,61006],{"class":149},"      i = i \u003C 0 ? data.length - 1 : i\n",[143,61008,61009],{"class":145,"line":34241},[143,61010,60930],{"class":149},[143,61012,61013],{"class":145,"line":34247},[143,61014,60935],{"class":149},[143,61016,61017],{"class":145,"line":34253},[143,61018,60940],{"class":149},[143,61020,61021],{"class":145,"line":34259},[143,61022,60945],{"class":149},[143,61024,61025],{"class":145,"line":34270},[143,61026,34359],{"class":149},[143,61028,61029],{"class":145,"line":34276},[143,61030,3300],{"emptyLinePlaceholder":976},[143,61032,61033],{"class":145,"line":34282},[143,61034,61035],{"class":149},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[143,61037,61038],{"class":145,"line":34288},[143,61039,61040],{"class":149},"    function toggle() {\n",[143,61042,61043],{"class":145,"line":34306},[143,61044,61045],{"class":149},"      \u002F\u002F 1.4 渲染对应的数据\n",[143,61047,61048],{"class":145,"line":34320},[143,61049,61050],{"class":149},"      img.src = data[i].url\n",[143,61052,61053],{"class":145,"line":34329},[143,61054,61055],{"class":149},"      p.innerHTML = data[i].title\n",[143,61057,61058],{"class":145,"line":34338},[143,61059,61060],{"class":149},"      footer.style.backgroundColor = data[i].color\n",[143,61062,61063],{"class":145,"line":34347},[143,61064,61065],{"class":149},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[143,61067,61068],{"class":145,"line":34356},[143,61069,61070],{"class":149},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[143,61072,61073],{"class":145,"line":34362},[143,61074,61075],{"class":149},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[143,61077,61078],{"class":145,"line":34368},[143,61079,3087],{"class":149},[143,61081,61082],{"class":145,"line":34376},[143,61083,3300],{"emptyLinePlaceholder":976},[143,61085,61086],{"class":145,"line":34381},[143,61087,61088],{"class":149},"    \u002F\u002F 3. 自动播放模块\n",[143,61090,61091],{"class":145,"line":34387},[143,61092,61093],{"class":149},"    let timerId = setInterval(function () {\n",[143,61095,61096],{"class":145,"line":34398},[143,61097,61098],{"class":149},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[143,61100,61101],{"class":145,"line":34404},[143,61102,61103],{"class":149},"      next.click()\n",[143,61105,61106],{"class":145,"line":34424},[143,61107,61108],{"class":149},"    }, 1000)\n",[143,61110,61111],{"class":145,"line":34430},[143,61112,3300],{"emptyLinePlaceholder":976},[143,61114,61115],{"class":145,"line":34436},[143,61116,61117],{"class":149},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[143,61119,61120],{"class":145,"line":34442},[143,61121,61122],{"class":149},"    const slider = document.querySelector('.slider')\n",[143,61124,61125],{"class":145,"line":34459},[143,61126,61127],{"class":149},"    \u002F\u002F 注册事件\n",[143,61129,61130],{"class":145,"line":34465},[143,61131,61132],{"class":149},"    slider.addEventListener('mouseenter', function () {\n",[143,61134,61135],{"class":145,"line":34471},[143,61136,61137],{"class":149},"      \u002F\u002F 停止定时器\n",[143,61139,61140],{"class":145,"line":34477},[143,61141,61142],{"class":149},"      clearInterval(timerId)\n",[143,61144,61145],{"class":145,"line":34483},[143,61146,34359],{"class":149},[143,61148,61149],{"class":145,"line":34489},[143,61150,3300],{"emptyLinePlaceholder":976},[143,61152,61153],{"class":145,"line":34516},[143,61154,61155],{"class":149},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[143,61157,61158],{"class":145,"line":34540},[143,61159,61127],{"class":149},[143,61161,61162],{"class":145,"line":34546},[143,61163,61164],{"class":149},"    slider.addEventListener('mouseleave', function () {\n",[143,61166,61167],{"class":145,"line":34552},[143,61168,61137],{"class":149},[143,61170,61171],{"class":145,"line":34558},[143,61172,61173],{"class":149},"      if (timerId) clearInterval(timerId)\n",[143,61175,61176],{"class":145,"line":34569},[143,61177,61178],{"class":149},"      \u002F\u002F 开启定时器\n",[143,61180,61181],{"class":145,"line":34580},[143,61182,61183],{"class":149},"      timerId = setInterval(function () {\n",[143,61185,61186],{"class":145,"line":34586},[143,61187,61188],{"class":149},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[143,61190,61191],{"class":145,"line":34603},[143,61192,61193],{"class":149},"        next.click()\n",[143,61195,61196],{"class":145,"line":34626},[143,61197,61198],{"class":149},"      }, 1000)\n",[143,61200,61201],{"class":145,"line":34649},[143,61202,34359],{"class":149},[143,61204,61205,61207,61209],{"class":145,"line":34655},[143,61206,53304],{"class":149},[143,61208,52701],{"class":153},[143,61210,183],{"class":149},[143,61212,61213,61215,61217],{"class":145,"line":34660},[143,61214,730],{"class":149},[143,61216,52688],{"class":153},[143,61218,183],{"class":149},[143,61220,61221],{"class":145,"line":34669},[143,61222,3300],{"emptyLinePlaceholder":976},[143,61224,61225,61227,61229],{"class":145,"line":34679},[143,61226,730],{"class":149},[143,61228,51533],{"class":153},[143,61230,183],{"class":149},[22896,61232,61234],{"id":61233},"_3252-焦点事件","3.2.5.2 焦点事件",[63,61236,61237],{},"小米搜索框案例：",[133,61239,61241],{"className":51531,"code":61240,"language":51533,"meta":138,"style":138},"\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",[140,61242,61243,61253,61267,61271,61279,61293,61313,61333,61345,61353,61359,61369,61379,61391,61395,61399,61406,61410,61421,61425,61429,61436,61447,61460,61474,61478,61482,61491,61503,61515,61529,61542,61555,61573,61584,61588,61592,61601,61618,61622,61626,61633,61643,61653,61664,61677,61689,61705,61716,61728,61732,61736,61744,61755,61772,61784,61796,61807,61811,61815,61826,61837,61841,61849,61853,61861,61865,61873,61888,61911,61926,61957,61984,62011,62038,62065,62092,62119,62128,62136,62144,62149,62169,62189,62194,62199,62217,62222,62232,62237,62251,62256,62261,62278,62287,62299,62303,62311,62319,62323],{"__ignoreMap":138},[143,61244,61245,61247,61249,61251],{"class":145,"line":146},[143,61246,52195],{"class":149},[143,61248,52198],{"class":153},[143,61250,52201],{"class":156},[143,61252,183],{"class":149},[143,61254,61255,61257,61259,61261,61263,61265],{"class":145,"line":35},[143,61256,150],{"class":149},[143,61258,51533],{"class":153},[143,61260,52212],{"class":156},[143,61262,160],{"class":149},[143,61264,52217],{"class":163},[143,61266,183],{"class":149},[143,61268,61269],{"class":145,"line":46},[143,61270,3300],{"emptyLinePlaceholder":976},[143,61272,61273,61275,61277],{"class":145,"line":293},[143,61274,150],{"class":149},[143,61276,52230],{"class":153},[143,61278,183],{"class":149},[143,61280,61281,61283,61285,61287,61289,61291],{"class":145,"line":306},[143,61282,52237],{"class":149},[143,61284,52240],{"class":153},[143,61286,52243],{"class":156},[143,61288,160],{"class":149},[143,61290,52248],{"class":163},[143,61292,183],{"class":149},[143,61294,61295,61297,61299,61301,61303,61305,61307,61309,61311],{"class":145,"line":319},[143,61296,52237],{"class":149},[143,61298,52240],{"class":153},[143,61300,52259],{"class":156},[143,61302,160],{"class":149},[143,61304,52264],{"class":163},[143,61306,52267],{"class":156},[143,61308,160],{"class":149},[143,61310,52272],{"class":163},[143,61312,183],{"class":149},[143,61314,61315,61317,61319,61321,61323,61325,61327,61329,61331],{"class":145,"line":332},[143,61316,52237],{"class":149},[143,61318,52240],{"class":153},[143,61320,15819],{"class":156},[143,61322,160],{"class":149},[143,61324,52287],{"class":163},[143,61326,52267],{"class":156},[143,61328,160],{"class":149},[143,61330,52294],{"class":163},[143,61332,183],{"class":149},[143,61334,61335,61337,61339,61341,61343],{"class":145,"line":345},[143,61336,52237],{"class":149},[143,61338,52303],{"class":153},[143,61340,52306],{"class":149},[143,61342,52303],{"class":153},[143,61344,183],{"class":149},[143,61346,61347,61349,61351],{"class":145,"line":701},[143,61348,52237],{"class":149},[143,61350,954],{"class":153},[143,61352,183],{"class":149},[143,61354,61355,61357],{"class":145,"line":707},[143,61356,52323],{"class":153},[143,61358,275],{"class":149},[143,61360,61361,61363,61365,61367],{"class":145,"line":727},[143,61362,52330],{"class":280},[143,61364,284],{"class":149},[143,61366,1234],{"class":280},[143,61368,290],{"class":149},[143,61370,61371,61373,61375,61377],{"class":145,"line":2518},[143,61372,52341],{"class":280},[143,61374,284],{"class":149},[143,61376,1234],{"class":280},[143,61378,290],{"class":149},[143,61380,61381,61384,61386,61389],{"class":145,"line":2524},[143,61382,61383],{"class":280},"            box-sizing",[143,61385,284],{"class":149},[143,61387,61388],{"class":280},"border-box",[143,61390,290],{"class":149},[143,61392,61393],{"class":145,"line":2529},[143,61394,3429],{"class":149},[143,61396,61397],{"class":145,"line":2543},[143,61398,3300],{"emptyLinePlaceholder":976},[143,61400,61401,61404],{"class":145,"line":2548},[143,61402,61403],{"class":153},"        ul",[143,61405,275],{"class":149},[143,61407,61408],{"class":145,"line":2554},[143,61409,3300],{"emptyLinePlaceholder":976},[143,61411,61412,61415,61417,61419],{"class":145,"line":2575},[143,61413,61414],{"class":280},"            list-style",[143,61416,284],{"class":149},[143,61418,55622],{"class":280},[143,61420,290],{"class":149},[143,61422,61423],{"class":145,"line":2580},[143,61424,3429],{"class":149},[143,61426,61427],{"class":145,"line":2594},[143,61428,3300],{"emptyLinePlaceholder":976},[143,61430,61431,61434],{"class":145,"line":2599},[143,61432,61433],{"class":156},"        .mi",[143,61435,275],{"class":149},[143,61437,61438,61441,61443,61445],{"class":145,"line":2628},[143,61439,61440],{"class":280},"            position",[143,61442,284],{"class":149},[143,61444,55649],{"class":280},[143,61446,290],{"class":149},[143,61448,61449,61451,61453,61456,61458],{"class":145,"line":2633},[143,61450,52378],{"class":280},[143,61452,284],{"class":149},[143,61454,61455],{"class":280},"223",[143,61457,774],{"class":755},[143,61459,290],{"class":149},[143,61461,61462,61464,61466,61468,61470,61472],{"class":145,"line":2650},[143,61463,52330],{"class":280},[143,61465,284],{"class":149},[143,61467,1352],{"class":280},[143,61469,774],{"class":755},[143,61471,52448],{"class":280},[143,61473,290],{"class":149},[143,61475,61476],{"class":145,"line":2655},[143,61477,3429],{"class":149},[143,61479,61480],{"class":145,"line":2660},[143,61481,3300],{"emptyLinePlaceholder":976},[143,61483,61484,61486,61489],{"class":145,"line":2665},[143,61485,61433],{"class":156},[143,61487,61488],{"class":153}," input",[143,61490,275],{"class":149},[143,61492,61493,61495,61497,61499,61501],{"class":145,"line":2679},[143,61494,52378],{"class":280},[143,61496,284],{"class":149},[143,61498,61455],{"class":280},[143,61500,774],{"class":755},[143,61502,290],{"class":149},[143,61504,61505,61507,61509,61511,61513],{"class":145,"line":2684},[143,61506,52392],{"class":280},[143,61508,284],{"class":149},[143,61510,1648],{"class":280},[143,61512,774],{"class":755},[143,61514,290],{"class":149},[143,61516,61517,61519,61521,61523,61525,61527],{"class":145,"line":3477},[143,61518,52341],{"class":280},[143,61520,284],{"class":149},[143,61522,1234],{"class":280},[143,61524,2938],{"class":280},[143,61526,774],{"class":755},[143,61528,290],{"class":149},[143,61530,61531,61534,61536,61538,61540],{"class":145,"line":3491},[143,61532,61533],{"class":280},"            font-size",[143,61535,284],{"class":149},[143,61537,1590],{"class":280},[143,61539,774],{"class":755},[143,61541,290],{"class":149},[143,61543,61544,61547,61549,61551,61553],{"class":145,"line":3499},[143,61545,61546],{"class":280},"            line-height",[143,61548,284],{"class":149},[143,61550,1648],{"class":280},[143,61552,774],{"class":755},[143,61554,290],{"class":149},[143,61556,61557,61560,61562,61564,61566,61568,61571],{"class":145,"line":3504},[143,61558,61559],{"class":280},"            border",[143,61561,284],{"class":149},[143,61563,771],{"class":280},[143,61565,774],{"class":755},[143,61567,777],{"class":280},[143,61569,61570],{"class":280}," #e0e0e0",[143,61572,290],{"class":149},[143,61574,61575,61578,61580,61582],{"class":145,"line":3510},[143,61576,61577],{"class":280},"            outline",[143,61579,284],{"class":149},[143,61581,55622],{"class":280},[143,61583,290],{"class":149},[143,61585,61586],{"class":145,"line":3516},[143,61587,3429],{"class":149},[143,61589,61590],{"class":145,"line":3521},[143,61591,3300],{"emptyLinePlaceholder":976},[143,61593,61594,61596,61599],{"class":145,"line":8848},[143,61595,61433],{"class":156},[143,61597,61598],{"class":156}," .search",[143,61600,275],{"class":149},[143,61602,61603,61605,61607,61609,61611,61613,61616],{"class":145,"line":8872},[143,61604,61559],{"class":280},[143,61606,284],{"class":149},[143,61608,771],{"class":280},[143,61610,774],{"class":755},[143,61612,777],{"class":280},[143,61614,61615],{"class":280}," #ff6700",[143,61617,290],{"class":149},[143,61619,61620],{"class":145,"line":8877},[143,61621,3429],{"class":149},[143,61623,61624],{"class":145,"line":8883},[143,61625,3300],{"emptyLinePlaceholder":976},[143,61627,61628,61631],{"class":145,"line":8910},[143,61629,61630],{"class":156},"        .result-list",[143,61632,275],{"class":149},[143,61634,61635,61637,61639,61641],{"class":145,"line":8915},[143,61636,52367],{"class":280},[143,61638,284],{"class":149},[143,61640,55622],{"class":280},[143,61642,290],{"class":149},[143,61644,61645,61647,61649,61651],{"class":145,"line":8921},[143,61646,61440],{"class":280},[143,61648,284],{"class":149},[143,61650,55716],{"class":280},[143,61652,290],{"class":149},[143,61654,61655,61658,61660,61662],{"class":145,"line":8933},[143,61656,61657],{"class":280},"            left",[143,61659,284],{"class":149},[143,61661,1234],{"class":280},[143,61663,290],{"class":149},[143,61665,61666,61669,61671,61673,61675],{"class":145,"line":8945},[143,61667,61668],{"class":280},"            top",[143,61670,284],{"class":149},[143,61672,1648],{"class":280},[143,61674,774],{"class":755},[143,61676,290],{"class":149},[143,61678,61679,61681,61683,61685,61687],{"class":145,"line":8957},[143,61680,52378],{"class":280},[143,61682,284],{"class":149},[143,61684,61455],{"class":280},[143,61686,774],{"class":755},[143,61688,290],{"class":149},[143,61690,61691,61693,61695,61697,61699,61701,61703],{"class":145,"line":10616},[143,61692,61559],{"class":280},[143,61694,284],{"class":149},[143,61696,771],{"class":280},[143,61698,774],{"class":755},[143,61700,777],{"class":280},[143,61702,61615],{"class":280},[143,61704,290],{"class":149},[143,61706,61707,61710,61712,61714],{"class":145,"line":10641},[143,61708,61709],{"class":280},"            border-top",[143,61711,284],{"class":149},[143,61713,1234],{"class":280},[143,61715,290],{"class":149},[143,61717,61718,61721,61723,61726],{"class":145,"line":10664},[143,61719,61720],{"class":280},"            background",[143,61722,284],{"class":149},[143,61724,61725],{"class":280},"#fff",[143,61727,290],{"class":149},[143,61729,61730],{"class":145,"line":10688},[143,61731,3429],{"class":149},[143,61733,61734],{"class":145,"line":10693},[143,61735,3300],{"emptyLinePlaceholder":976},[143,61737,61738,61740,61742],{"class":145,"line":10698},[143,61739,61630],{"class":156},[143,61741,2302],{"class":153},[143,61743,275],{"class":149},[143,61745,61746,61748,61750,61753],{"class":145,"line":10703},[143,61747,52367],{"class":280},[143,61749,284],{"class":149},[143,61751,61752],{"class":280},"block",[143,61754,290],{"class":149},[143,61756,61757,61759,61761,61763,61765,61768,61770],{"class":145,"line":10712},[143,61758,52341],{"class":280},[143,61760,284],{"class":149},[143,61762,1385],{"class":280},[143,61764,774],{"class":755},[143,61766,61767],{"class":280}," 15",[143,61769,774],{"class":755},[143,61771,290],{"class":149},[143,61773,61774,61776,61778,61780,61782],{"class":145,"line":10717},[143,61775,61533],{"class":280},[143,61777,284],{"class":149},[143,61779,1539],{"class":280},[143,61781,774],{"class":755},[143,61783,290],{"class":149},[143,61785,61786,61789,61791,61794],{"class":145,"line":10723},[143,61787,61788],{"class":280},"            color",[143,61790,284],{"class":149},[143,61792,61793],{"class":280},"#424242",[143,61795,290],{"class":149},[143,61797,61798,61801,61803,61805],{"class":145,"line":10744},[143,61799,61800],{"class":280},"            text-decoration",[143,61802,284],{"class":149},[143,61804,55622],{"class":280},[143,61806,290],{"class":149},[143,61808,61809],{"class":145,"line":10750},[143,61810,3429],{"class":149},[143,61812,61813],{"class":145,"line":10764},[143,61814,3300],{"emptyLinePlaceholder":976},[143,61816,61817,61819,61821,61824],{"class":145,"line":10770},[143,61818,61630],{"class":156},[143,61820,2302],{"class":153},[143,61822,61823],{"class":156},":hover",[143,61825,275],{"class":149},[143,61827,61828,61830,61832,61835],{"class":145,"line":10797},[143,61829,52530],{"class":280},[143,61831,284],{"class":149},[143,61833,61834],{"class":280},"#eee",[143,61836,290],{"class":149},[143,61838,61839],{"class":145,"line":10806},[143,61840,3429],{"class":149},[143,61842,61843,61845,61847],{"class":145,"line":10812},[143,61844,52665],{"class":149},[143,61846,954],{"class":153},[143,61848,183],{"class":149},[143,61850,61851],{"class":145,"line":10820},[143,61852,3300],{"emptyLinePlaceholder":976},[143,61854,61855,61857,61859],{"class":145,"line":10825},[143,61856,730],{"class":149},[143,61858,52230],{"class":153},[143,61860,183],{"class":149},[143,61862,61863],{"class":145,"line":17502},[143,61864,3300],{"emptyLinePlaceholder":976},[143,61866,61867,61869,61871],{"class":145,"line":17508},[143,61868,150],{"class":149},[143,61870,52688],{"class":153},[143,61872,183],{"class":149},[143,61874,61875,61877,61879,61881,61883,61886],{"class":145,"line":17531},[143,61876,52237],{"class":149},[143,61878,614],{"class":153},[143,61880,617],{"class":156},[143,61882,160],{"class":149},[143,61884,61885],{"class":163},"\"mi\"",[143,61887,183],{"class":149},[143,61889,61890,61892,61894,61896,61898,61901,61904,61906,61909],{"class":145,"line":17537},[143,61891,56185],{"class":149},[143,61893,746],{"class":153},[143,61895,54709],{"class":156},[143,61897,160],{"class":149},[143,61899,61900],{"class":163},"\"search\"",[143,61902,61903],{"class":156}," placeholder",[143,61905,160],{"class":149},[143,61907,61908],{"class":163},"\"小米笔记本\"",[143,61910,183],{"class":149},[143,61912,61913,61915,61917,61919,61921,61924],{"class":145,"line":17560},[143,61914,56185],{"class":149},[143,61916,232],{"class":153},[143,61918,617],{"class":156},[143,61920,160],{"class":149},[143,61922,61923],{"class":163},"\"result-list\"",[143,61925,183],{"class":149},[143,61927,61928,61931,61933,61936,61938,61941,61943,61946,61949,61951,61953,61955],{"class":145,"line":17574},[143,61929,61930],{"class":149},"            \u003C",[143,61932,22],{"class":153},[143,61934,61935],{"class":149},">\u003C",[143,61937,67],{"class":153},[143,61939,61940],{"class":156}," href",[143,61942,160],{"class":149},[143,61944,61945],{"class":163},"\"#\"",[143,61947,61948],{"class":149},">全部商品\u003C\u002F",[143,61950,67],{"class":153},[143,61952,56197],{"class":149},[143,61954,22],{"class":153},[143,61956,183],{"class":149},[143,61958,61959,61961,61963,61965,61967,61969,61971,61973,61976,61978,61980,61982],{"class":145,"line":17594},[143,61960,61930],{"class":149},[143,61962,22],{"class":153},[143,61964,61935],{"class":149},[143,61966,67],{"class":153},[143,61968,61940],{"class":156},[143,61970,160],{"class":149},[143,61972,61945],{"class":163},[143,61974,61975],{"class":149},">小米11\u003C\u002F",[143,61977,67],{"class":153},[143,61979,56197],{"class":149},[143,61981,22],{"class":153},[143,61983,183],{"class":149},[143,61985,61986,61988,61990,61992,61994,61996,61998,62000,62003,62005,62007,62009],{"class":145,"line":17600},[143,61987,61930],{"class":149},[143,61989,22],{"class":153},[143,61991,61935],{"class":149},[143,61993,67],{"class":153},[143,61995,61940],{"class":156},[143,61997,160],{"class":149},[143,61999,61945],{"class":163},[143,62001,62002],{"class":149},">小米10S\u003C\u002F",[143,62004,67],{"class":153},[143,62006,56197],{"class":149},[143,62008,22],{"class":153},[143,62010,183],{"class":149},[143,62012,62013,62015,62017,62019,62021,62023,62025,62027,62030,62032,62034,62036],{"class":145,"line":17611},[143,62014,61930],{"class":149},[143,62016,22],{"class":153},[143,62018,61935],{"class":149},[143,62020,67],{"class":153},[143,62022,61940],{"class":156},[143,62024,160],{"class":149},[143,62026,61945],{"class":163},[143,62028,62029],{"class":149},">小米笔记本\u003C\u002F",[143,62031,67],{"class":153},[143,62033,56197],{"class":149},[143,62035,22],{"class":153},[143,62037,183],{"class":149},[143,62039,62040,62042,62044,62046,62048,62050,62052,62054,62057,62059,62061,62063],{"class":145,"line":17634},[143,62041,61930],{"class":149},[143,62043,22],{"class":153},[143,62045,61935],{"class":149},[143,62047,67],{"class":153},[143,62049,61940],{"class":156},[143,62051,160],{"class":149},[143,62053,61945],{"class":163},[143,62055,62056],{"class":149},">小米手机\u003C\u002F",[143,62058,67],{"class":153},[143,62060,56197],{"class":149},[143,62062,22],{"class":153},[143,62064,183],{"class":149},[143,62066,62067,62069,62071,62073,62075,62077,62079,62081,62084,62086,62088,62090],{"class":145,"line":17656},[143,62068,61930],{"class":149},[143,62070,22],{"class":153},[143,62072,61935],{"class":149},[143,62074,67],{"class":153},[143,62076,61940],{"class":156},[143,62078,160],{"class":149},[143,62080,61945],{"class":163},[143,62082,62083],{"class":149},">黑鲨4\u003C\u002F",[143,62085,67],{"class":153},[143,62087,56197],{"class":149},[143,62089,22],{"class":153},[143,62091,183],{"class":149},[143,62093,62094,62096,62098,62100,62102,62104,62106,62108,62111,62113,62115,62117],{"class":145,"line":17661},[143,62095,61930],{"class":149},[143,62097,22],{"class":153},[143,62099,61935],{"class":149},[143,62101,67],{"class":153},[143,62103,61940],{"class":156},[143,62105,160],{"class":149},[143,62107,61945],{"class":163},[143,62109,62110],{"class":149},">空调\u003C\u002F",[143,62112,67],{"class":153},[143,62114,56197],{"class":149},[143,62116,22],{"class":153},[143,62118,183],{"class":149},[143,62120,62121,62124,62126],{"class":145,"line":17667},[143,62122,62123],{"class":149},"        \u003C\u002F",[143,62125,232],{"class":153},[143,62127,183],{"class":149},[143,62129,62130,62132,62134],{"class":145,"line":17681},[143,62131,52665],{"class":149},[143,62133,614],{"class":153},[143,62135,183],{"class":149},[143,62137,62138,62140,62142],{"class":145,"line":17694},[143,62139,52237],{"class":149},[143,62141,52701],{"class":153},[143,62143,183],{"class":149},[143,62145,62146],{"class":145,"line":17699},[143,62147,62148],{"class":266},"        \u002F\u002F 1. 获取元素\n",[143,62150,62151,62154,62156,62158,62160,62162,62164,62167],{"class":145,"line":17713},[143,62152,62153],{"class":755},"        const",[143,62155,61488],{"class":280},[143,62157,14464],{"class":755},[143,62159,55281],{"class":149},[143,62161,55284],{"class":156},[143,62163,1049],{"class":149},[143,62165,62166],{"class":163},"'[type=search]'",[143,62168,1055],{"class":149},[143,62170,62171,62173,62176,62178,62180,62182,62184,62187],{"class":145,"line":17718},[143,62172,62153],{"class":755},[143,62174,62175],{"class":280}," ul",[143,62177,14464],{"class":755},[143,62179,55281],{"class":149},[143,62181,55284],{"class":156},[143,62183,1049],{"class":149},[143,62185,62186],{"class":163},"'.result-list'",[143,62188,1055],{"class":149},[143,62190,62191],{"class":145,"line":17724},[143,62192,62193],{"class":266},"        \u002F\u002F console.log(input)\n",[143,62195,62196],{"class":145,"line":17729},[143,62197,62198],{"class":266},"        \u002F\u002F 2. 监听事件 获得焦点\n",[143,62200,62201,62204,62206,62208,62211,62213,62215],{"class":145,"line":17743},[143,62202,62203],{"class":149},"        input.",[143,62205,58696],{"class":156},[143,62207,1049],{"class":149},[143,62209,62210],{"class":163},"'focus'",[143,62212,13335],{"class":149},[143,62214,55334],{"class":755},[143,62216,55337],{"class":149},[143,62218,62219],{"class":145,"line":17748},[143,62220,62221],{"class":266},"            \u002F\u002F ul显示\n",[143,62223,62224,62227,62229],{"class":145,"line":17753},[143,62225,62226],{"class":149},"            ul.style.display ",[143,62228,160],{"class":755},[143,62230,62231],{"class":163}," 'block'\n",[143,62233,62234],{"class":145,"line":17767},[143,62235,62236],{"class":266},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[143,62238,62239,62242,62244,62246,62249],{"class":145,"line":17779},[143,62240,62241],{"class":149},"            input.classList.",[143,62243,6234],{"class":156},[143,62245,1049],{"class":149},[143,62247,62248],{"class":163},"'search'",[143,62250,1055],{"class":149},[143,62252,62253],{"class":145,"line":17784},[143,62254,62255],{"class":149},"        })\n",[143,62257,62258],{"class":145,"line":17797},[143,62259,62260],{"class":266},"        \u002F\u002F 3. 监听事件 失去焦点\n",[143,62262,62263,62265,62267,62269,62272,62274,62276],{"class":145,"line":17802},[143,62264,62203],{"class":149},[143,62266,58696],{"class":156},[143,62268,1049],{"class":149},[143,62270,62271],{"class":163},"'blur'",[143,62273,13335],{"class":149},[143,62275,55334],{"class":755},[143,62277,55337],{"class":149},[143,62279,62280,62282,62284],{"class":145,"line":17807},[143,62281,62226],{"class":149},[143,62283,160],{"class":755},[143,62285,62286],{"class":163}," 'none'\n",[143,62288,62289,62291,62293,62295,62297],{"class":145,"line":17812},[143,62290,62241],{"class":149},[143,62292,57889],{"class":156},[143,62294,1049],{"class":149},[143,62296,62248],{"class":163},[143,62298,1055],{"class":149},[143,62300,62301],{"class":145,"line":17825},[143,62302,62255],{"class":149},[143,62304,62305,62307,62309],{"class":145,"line":17830},[143,62306,52665],{"class":149},[143,62308,52701],{"class":153},[143,62310,183],{"class":149},[143,62312,62313,62315,62317],{"class":145,"line":33531},[143,62314,730],{"class":149},[143,62316,52688],{"class":153},[143,62318,183],{"class":149},[143,62320,62321],{"class":145,"line":33537},[143,62322,3300],{"emptyLinePlaceholder":976},[143,62324,62325,62327,62329],{"class":145,"line":33543},[143,62326,730],{"class":149},[143,62328,51533],{"class":153},[143,62330,183],{"class":149},[22896,62332,62334],{"id":62333},"_3253-键盘事件","3.2.5.3 键盘事件",[63,62336,62337],{},"评论字数统计案例",[63,62339,62340],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[63,62342,62343],{},"牢记focus伪类选择器",[52240,62345],{"charSet":62346},"UTF-8",[52240,62348],{"name":62349,"content":62350},"viewport","width=device-width, initial-scale=1.0",[52303,62352,62353],{},"Document",[954,62355,62356],{},"\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",[746,62358],{"type":6087},[232,62360,62361,62364],{},[22,62362,62363],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[22,62365,62366],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[133,62368,62370],{"className":51531,"code":62369,"language":51533,"meta":138,"style":138},"\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",[140,62371,62372,62382,62396,62400,62408,62422,62442,62462,62475,62483,62490,62503,62517,62527,62537,62541,62545,62552,62564,62576,62588,62600,62629,62642,62646,62650,62659,62670,62682,62693,62704,62716,62727,62739,62755,62767,62771,62775,62786,62797,62807,62819,62823,62827,62835,62846,62856,62867,62879,62892,62904,62916,62920,62924,62933,62945,62956,62969,62980,62994,62998,63002,63009,63021,63033,63043,63047,63051,63060,63072,63082,63086,63090,63101,63111,63130,63143,63147,63151,63161,63171,63175,63179,63190,63201,63213,63225,63229,63233,63244,63255,63269,63273,63277,63288,63298,63310,63314,63322,63330,63334,63342,63357,63376,63416,63429,63437,63451,63471,63479,63494,63517,63535,63550,63570,63589,63609,63617,63625,63633,63641,63661,63681,63686,63703,63712,63716,63721,63737,63745,63749,63754,63771,63776,63801,63805,63809,63814,63819,63827,63835,63839],{"__ignoreMap":138},[143,62373,62374,62376,62378,62380],{"class":145,"line":146},[143,62375,52195],{"class":149},[143,62377,52198],{"class":153},[143,62379,52201],{"class":156},[143,62381,183],{"class":149},[143,62383,62384,62386,62388,62390,62392,62394],{"class":145,"line":35},[143,62385,150],{"class":149},[143,62387,51533],{"class":153},[143,62389,52212],{"class":156},[143,62391,160],{"class":149},[143,62393,52217],{"class":163},[143,62395,183],{"class":149},[143,62397,62398],{"class":145,"line":46},[143,62399,3300],{"emptyLinePlaceholder":976},[143,62401,62402,62404,62406],{"class":145,"line":293},[143,62403,150],{"class":149},[143,62405,52230],{"class":153},[143,62407,183],{"class":149},[143,62409,62410,62412,62414,62416,62418,62420],{"class":145,"line":306},[143,62411,634],{"class":149},[143,62413,52240],{"class":153},[143,62415,52243],{"class":156},[143,62417,160],{"class":149},[143,62419,52248],{"class":163},[143,62421,183],{"class":149},[143,62423,62424,62426,62428,62430,62432,62434,62436,62438,62440],{"class":145,"line":319},[143,62425,634],{"class":149},[143,62427,52240],{"class":153},[143,62429,52259],{"class":156},[143,62431,160],{"class":149},[143,62433,52264],{"class":163},[143,62435,52267],{"class":156},[143,62437,160],{"class":149},[143,62439,52272],{"class":163},[143,62441,183],{"class":149},[143,62443,62444,62446,62448,62450,62452,62454,62456,62458,62460],{"class":145,"line":332},[143,62445,634],{"class":149},[143,62447,52240],{"class":153},[143,62449,15819],{"class":156},[143,62451,160],{"class":149},[143,62453,52287],{"class":163},[143,62455,52267],{"class":156},[143,62457,160],{"class":149},[143,62459,52294],{"class":163},[143,62461,183],{"class":149},[143,62463,62464,62466,62468,62471,62473],{"class":145,"line":345},[143,62465,634],{"class":149},[143,62467,52303],{"class":153},[143,62469,62470],{"class":149},">评论回车发布\u003C\u002F",[143,62472,52303],{"class":153},[143,62474,183],{"class":149},[143,62476,62477,62479,62481],{"class":145,"line":701},[143,62478,634],{"class":149},[143,62480,954],{"class":153},[143,62482,183],{"class":149},[143,62484,62485,62488],{"class":145,"line":707},[143,62486,62487],{"class":156},"    .wrapper",[143,62489,275],{"class":149},[143,62491,62492,62495,62497,62499,62501],{"class":145,"line":727},[143,62493,62494],{"class":280},"      min-width",[143,62496,284],{"class":149},[143,62498,4887],{"class":280},[143,62500,774],{"class":755},[143,62502,290],{"class":149},[143,62504,62505,62508,62510,62513,62515],{"class":145,"line":2518},[143,62506,62507],{"class":280},"      max-width",[143,62509,284],{"class":149},[143,62511,62512],{"class":280},"800",[143,62514,774],{"class":755},[143,62516,290],{"class":149},[143,62518,62519,62521,62523,62525],{"class":145,"line":2524},[143,62520,55894],{"class":280},[143,62522,284],{"class":149},[143,62524,287],{"class":280},[143,62526,290],{"class":149},[143,62528,62529,62531,62533,62535],{"class":145,"line":2529},[143,62530,55905],{"class":280},[143,62532,284],{"class":149},[143,62534,52472],{"class":280},[143,62536,290],{"class":149},[143,62538,62539],{"class":145,"line":2543},[143,62540,3087],{"class":149},[143,62542,62543],{"class":145,"line":2548},[143,62544,3300],{"emptyLinePlaceholder":976},[143,62546,62547,62550],{"class":145,"line":2554},[143,62548,62549],{"class":156},"    .avatar",[143,62551,275],{"class":149},[143,62553,62554,62556,62558,62560,62562],{"class":145,"line":2575},[143,62555,55656],{"class":280},[143,62557,284],{"class":149},[143,62559,1648],{"class":280},[143,62561,774],{"class":755},[143,62563,290],{"class":149},[143,62565,62566,62568,62570,62572,62574],{"class":145,"line":2580},[143,62567,55670],{"class":280},[143,62569,284],{"class":149},[143,62571,1648],{"class":280},[143,62573,774],{"class":755},[143,62575,290],{"class":149},[143,62577,62578,62580,62582,62584,62586],{"class":145,"line":2594},[143,62579,56019],{"class":280},[143,62581,284],{"class":149},[143,62583,1697],{"class":280},[143,62585,1369],{"class":755},[143,62587,290],{"class":149},[143,62589,62590,62593,62595,62598],{"class":145,"line":2599},[143,62591,62592],{"class":280},"      overflow",[143,62594,284],{"class":149},[143,62596,62597],{"class":280},"hidden",[143,62599,290],{"class":149},[143,62601,62602,62605,62607,62610,62612,62615,62617,62620,62622,62624,62627],{"class":145,"line":2628},[143,62603,62604],{"class":280},"      background",[143,62606,284],{"class":149},[143,62608,62609],{"class":280},"url",[143,62611,1049],{"class":149},[143,62613,62614],{"class":6116},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[143,62616,14614],{"class":149},[143,62618,62619],{"class":280},"no-repeat",[143,62621,18042],{"class":280},[143,62623,25876],{"class":149},[143,62625,62626],{"class":280},"cover",[143,62628,290],{"class":149},[143,62630,62631,62634,62636,62638,62640],{"class":145,"line":2633},[143,62632,62633],{"class":280},"      margin-right",[143,62635,284],{"class":149},[143,62637,1741],{"class":280},[143,62639,774],{"class":755},[143,62641,290],{"class":149},[143,62643,62644],{"class":145,"line":2650},[143,62645,3087],{"class":149},[143,62647,62648],{"class":145,"line":2655},[143,62649,3300],{"emptyLinePlaceholder":976},[143,62651,62652,62654,62657],{"class":145,"line":2660},[143,62653,62487],{"class":156},[143,62655,62656],{"class":153}," textarea",[143,62658,275],{"class":149},[143,62660,62661,62664,62666,62668],{"class":145,"line":2665},[143,62662,62663],{"class":280},"      outline",[143,62665,284],{"class":149},[143,62667,55622],{"class":280},[143,62669,290],{"class":149},[143,62671,62672,62675,62677,62680],{"class":145,"line":2679},[143,62673,62674],{"class":280},"      border-color",[143,62676,284],{"class":149},[143,62678,62679],{"class":280},"transparent",[143,62681,290],{"class":149},[143,62683,62684,62687,62689,62691],{"class":145,"line":2684},[143,62685,62686],{"class":280},"      resize",[143,62688,284],{"class":149},[143,62690,55622],{"class":280},[143,62692,290],{"class":149},[143,62694,62695,62697,62699,62702],{"class":145,"line":3477},[143,62696,62604],{"class":280},[143,62698,284],{"class":149},[143,62700,62701],{"class":280},"#f5f5f5",[143,62703,290],{"class":149},[143,62705,62706,62708,62710,62712,62714],{"class":145,"line":3491},[143,62707,56019],{"class":280},[143,62709,284],{"class":149},[143,62711,1334],{"class":280},[143,62713,774],{"class":755},[143,62715,290],{"class":149},[143,62717,62718,62721,62723,62725],{"class":145,"line":3499},[143,62719,62720],{"class":280},"      flex",[143,62722,284],{"class":149},[143,62724,771],{"class":280},[143,62726,290],{"class":149},[143,62728,62729,62731,62733,62735,62737],{"class":145,"line":3504},[143,62730,55580],{"class":280},[143,62732,284],{"class":149},[143,62734,1487],{"class":280},[143,62736,774],{"class":755},[143,62738,290],{"class":149},[143,62740,62741,62744,62746,62748,62751,62753],{"class":145,"line":3510},[143,62742,62743],{"class":280},"      transition",[143,62745,284],{"class":149},[143,62747,29019],{"class":280},[143,62749,62750],{"class":280}," 0.5",[143,62752,1736],{"class":755},[143,62754,290],{"class":149},[143,62756,62757,62759,62761,62763,62765],{"class":145,"line":3516},[143,62758,55670],{"class":280},[143,62760,284],{"class":149},[143,62762,1989],{"class":280},[143,62764,774],{"class":755},[143,62766,290],{"class":149},[143,62768,62769],{"class":145,"line":3521},[143,62770,3087],{"class":149},[143,62772,62773],{"class":145,"line":8848},[143,62774,3300],{"emptyLinePlaceholder":976},[143,62776,62777,62779,62781,62784],{"class":145,"line":8872},[143,62778,62487],{"class":156},[143,62780,62656],{"class":153},[143,62782,62783],{"class":156},":focus",[143,62785,275],{"class":149},[143,62787,62788,62790,62792,62795],{"class":145,"line":8877},[143,62789,62674],{"class":280},[143,62791,284],{"class":149},[143,62793,62794],{"class":280},"#e4e4e4",[143,62796,290],{"class":149},[143,62798,62799,62801,62803,62805],{"class":145,"line":8883},[143,62800,62604],{"class":280},[143,62802,284],{"class":149},[143,62804,61725],{"class":280},[143,62806,290],{"class":149},[143,62808,62809,62811,62813,62815,62817],{"class":145,"line":8910},[143,62810,55670],{"class":280},[143,62812,284],{"class":149},[143,62814,1697],{"class":280},[143,62816,774],{"class":755},[143,62818,290],{"class":149},[143,62820,62821],{"class":145,"line":8915},[143,62822,3087],{"class":149},[143,62824,62825],{"class":145,"line":8921},[143,62826,3300],{"emptyLinePlaceholder":976},[143,62828,62829,62831,62833],{"class":145,"line":8933},[143,62830,62487],{"class":156},[143,62832,58350],{"class":153},[143,62834,275],{"class":149},[143,62836,62837,62839,62841,62844],{"class":145,"line":8945},[143,62838,62604],{"class":280},[143,62840,284],{"class":149},[143,62842,62843],{"class":280},"#00aeec",[143,62845,290],{"class":149},[143,62847,62848,62850,62852,62854],{"class":145,"line":8957},[143,62849,58299],{"class":280},[143,62851,284],{"class":149},[143,62853,61725],{"class":280},[143,62855,290],{"class":149},[143,62857,62858,62861,62863,62865],{"class":145,"line":10616},[143,62859,62860],{"class":280},"      border",[143,62862,284],{"class":149},[143,62864,55622],{"class":280},[143,62866,290],{"class":149},[143,62868,62869,62871,62873,62875,62877],{"class":145,"line":10641},[143,62870,56019],{"class":280},[143,62872,284],{"class":149},[143,62874,1334],{"class":280},[143,62876,774],{"class":755},[143,62878,290],{"class":149},[143,62880,62881,62884,62886,62888,62890],{"class":145,"line":10664},[143,62882,62883],{"class":280},"      margin-left",[143,62885,284],{"class":149},[143,62887,1487],{"class":280},[143,62889,774],{"class":755},[143,62891,290],{"class":149},[143,62893,62894,62896,62898,62900,62902],{"class":145,"line":10688},[143,62895,55656],{"class":280},[143,62897,284],{"class":149},[143,62899,1397],{"class":280},[143,62901,774],{"class":755},[143,62903,290],{"class":149},[143,62905,62906,62909,62911,62914],{"class":145,"line":10693},[143,62907,62908],{"class":280},"      cursor",[143,62910,284],{"class":149},[143,62912,62913],{"class":280},"pointer",[143,62915,290],{"class":149},[143,62917,62918],{"class":145,"line":10698},[143,62919,3087],{"class":149},[143,62921,62922],{"class":145,"line":10703},[143,62923,3300],{"emptyLinePlaceholder":976},[143,62925,62926,62928,62931],{"class":145,"line":10712},[143,62927,62487],{"class":156},[143,62929,62930],{"class":156}," .total",[143,62932,275],{"class":149},[143,62934,62935,62937,62939,62941,62943],{"class":145,"line":10717},[143,62936,62633],{"class":280},[143,62938,284],{"class":149},[143,62940,1653],{"class":280},[143,62942,774],{"class":755},[143,62944,290],{"class":149},[143,62946,62947,62949,62951,62954],{"class":145,"line":10723},[143,62948,58299],{"class":280},[143,62950,284],{"class":149},[143,62952,62953],{"class":280},"#999",[143,62955,290],{"class":149},[143,62957,62958,62961,62963,62965,62967],{"class":145,"line":10744},[143,62959,62960],{"class":280},"      margin-top",[143,62962,284],{"class":149},[143,62964,1360],{"class":280},[143,62966,774],{"class":755},[143,62968,290],{"class":149},[143,62970,62971,62974,62976,62978],{"class":145,"line":10750},[143,62972,62973],{"class":280},"      opacity",[143,62975,284],{"class":149},[143,62977,1234],{"class":280},[143,62979,290],{"class":149},[143,62981,62982,62984,62986,62988,62990,62992],{"class":145,"line":10764},[143,62983,62743],{"class":280},[143,62985,284],{"class":149},[143,62987,29019],{"class":280},[143,62989,62750],{"class":280},[143,62991,1736],{"class":755},[143,62993,290],{"class":149},[143,62995,62996],{"class":145,"line":10770},[143,62997,3087],{"class":149},[143,62999,63000],{"class":145,"line":10797},[143,63001,3300],{"emptyLinePlaceholder":976},[143,63003,63004,63007],{"class":145,"line":10806},[143,63005,63006],{"class":156},"    .list",[143,63008,275],{"class":149},[143,63010,63011,63013,63015,63017,63019],{"class":145,"line":10812},[143,63012,62494],{"class":280},[143,63014,284],{"class":149},[143,63016,4887],{"class":280},[143,63018,774],{"class":755},[143,63020,290],{"class":149},[143,63022,63023,63025,63027,63029,63031],{"class":145,"line":10820},[143,63024,62507],{"class":280},[143,63026,284],{"class":149},[143,63028,62512],{"class":280},[143,63030,774],{"class":755},[143,63032,290],{"class":149},[143,63034,63035,63037,63039,63041],{"class":145,"line":10825},[143,63036,55894],{"class":280},[143,63038,284],{"class":149},[143,63040,287],{"class":280},[143,63042,290],{"class":149},[143,63044,63045],{"class":145,"line":17502},[143,63046,3087],{"class":149},[143,63048,63049],{"class":145,"line":17508},[143,63050,3300],{"emptyLinePlaceholder":976},[143,63052,63053,63055,63058],{"class":145,"line":17531},[143,63054,63006],{"class":156},[143,63056,63057],{"class":156}," .item",[143,63059,275],{"class":149},[143,63061,63062,63064,63066,63068,63070],{"class":145,"line":17537},[143,63063,55656],{"class":280},[143,63065,284],{"class":149},[143,63067,1352],{"class":280},[143,63069,1369],{"class":755},[143,63071,290],{"class":149},[143,63073,63074,63076,63078,63080],{"class":145,"line":17560},[143,63075,55894],{"class":280},[143,63077,284],{"class":149},[143,63079,287],{"class":280},[143,63081,290],{"class":149},[143,63083,63084],{"class":145,"line":17574},[143,63085,3087],{"class":149},[143,63087,63088],{"class":145,"line":17594},[143,63089,3300],{"emptyLinePlaceholder":976},[143,63091,63092,63094,63096,63099],{"class":145,"line":17600},[143,63093,63006],{"class":156},[143,63095,63057],{"class":156},[143,63097,63098],{"class":156}," .info",[143,63100,275],{"class":149},[143,63102,63103,63105,63107,63109],{"class":145,"line":17611},[143,63104,62720],{"class":280},[143,63106,284],{"class":149},[143,63108,771],{"class":280},[143,63110,290],{"class":149},[143,63112,63113,63116,63118,63120,63122,63125,63128],{"class":145,"line":17634},[143,63114,63115],{"class":280},"      border-bottom",[143,63117,284],{"class":149},[143,63119,771],{"class":280},[143,63121,774],{"class":755},[143,63123,63124],{"class":280}," dashed",[143,63126,63127],{"class":280}," #e4e4e4",[143,63129,290],{"class":149},[143,63131,63132,63135,63137,63139,63141],{"class":145,"line":17656},[143,63133,63134],{"class":280},"      padding-bottom",[143,63136,284],{"class":149},[143,63138,1487],{"class":280},[143,63140,774],{"class":755},[143,63142,290],{"class":149},[143,63144,63145],{"class":145,"line":17661},[143,63146,3087],{"class":149},[143,63148,63149],{"class":145,"line":17667},[143,63150,3300],{"emptyLinePlaceholder":976},[143,63152,63153,63155,63157,63159],{"class":145,"line":17681},[143,63154,63006],{"class":156},[143,63156,63057],{"class":156},[143,63158,7725],{"class":153},[143,63160,275],{"class":149},[143,63162,63163,63165,63167,63169],{"class":145,"line":17694},[143,63164,55591],{"class":280},[143,63166,284],{"class":149},[143,63168,1234],{"class":280},[143,63170,290],{"class":149},[143,63172,63173],{"class":145,"line":17699},[143,63174,3087],{"class":149},[143,63176,63177],{"class":145,"line":17713},[143,63178,3300],{"emptyLinePlaceholder":976},[143,63180,63181,63183,63185,63188],{"class":145,"line":17718},[143,63182,63006],{"class":156},[143,63184,63057],{"class":156},[143,63186,63187],{"class":156}," .name",[143,63189,275],{"class":149},[143,63191,63192,63194,63196,63199],{"class":145,"line":17724},[143,63193,58299],{"class":280},[143,63195,284],{"class":149},[143,63197,63198],{"class":280},"#FB7299",[143,63200,290],{"class":149},[143,63202,63203,63205,63207,63209,63211],{"class":145,"line":17729},[143,63204,55807],{"class":280},[143,63206,284],{"class":149},[143,63208,1590],{"class":280},[143,63210,774],{"class":755},[143,63212,290],{"class":149},[143,63214,63215,63218,63220,63223],{"class":145,"line":17743},[143,63216,63217],{"class":280},"      font-weight",[143,63219,284],{"class":149},[143,63221,63222],{"class":280},"bold",[143,63224,290],{"class":149},[143,63226,63227],{"class":145,"line":17748},[143,63228,3087],{"class":149},[143,63230,63231],{"class":145,"line":17753},[143,63232,3300],{"emptyLinePlaceholder":976},[143,63234,63235,63237,63239,63242],{"class":145,"line":17767},[143,63236,63006],{"class":156},[143,63238,63057],{"class":156},[143,63240,63241],{"class":156}," .text",[143,63243,275],{"class":149},[143,63245,63246,63248,63250,63253],{"class":145,"line":17779},[143,63247,58299],{"class":280},[143,63249,284],{"class":149},[143,63251,63252],{"class":280},"#333",[143,63254,290],{"class":149},[143,63256,63257,63259,63261,63263,63265,63267],{"class":145,"line":17784},[143,63258,55580],{"class":280},[143,63260,284],{"class":149},[143,63262,1487],{"class":280},[143,63264,774],{"class":755},[143,63266,4993],{"class":280},[143,63268,290],{"class":149},[143,63270,63271],{"class":145,"line":17797},[143,63272,3087],{"class":149},[143,63274,63275],{"class":145,"line":17802},[143,63276,3300],{"emptyLinePlaceholder":976},[143,63278,63279,63281,63283,63286],{"class":145,"line":17807},[143,63280,63006],{"class":156},[143,63282,63057],{"class":156},[143,63284,63285],{"class":156}," .time",[143,63287,275],{"class":149},[143,63289,63290,63292,63294,63296],{"class":145,"line":17812},[143,63291,58299],{"class":280},[143,63293,284],{"class":149},[143,63295,62953],{"class":280},[143,63297,290],{"class":149},[143,63299,63300,63302,63304,63306,63308],{"class":145,"line":17825},[143,63301,55807],{"class":280},[143,63303,284],{"class":149},[143,63305,1539],{"class":280},[143,63307,774],{"class":755},[143,63309,290],{"class":149},[143,63311,63312],{"class":145,"line":17830},[143,63313,3087],{"class":149},[143,63315,63316,63318,63320],{"class":145,"line":33531},[143,63317,53304],{"class":149},[143,63319,954],{"class":153},[143,63321,183],{"class":149},[143,63323,63324,63326,63328],{"class":145,"line":33537},[143,63325,730],{"class":149},[143,63327,52230],{"class":153},[143,63329,183],{"class":149},[143,63331,63332],{"class":145,"line":33543},[143,63333,3300],{"emptyLinePlaceholder":976},[143,63335,63336,63338,63340],{"class":145,"line":33549},[143,63337,150],{"class":149},[143,63339,52688],{"class":153},[143,63341,183],{"class":149},[143,63343,63344,63346,63348,63350,63352,63355],{"class":145,"line":33555},[143,63345,634],{"class":149},[143,63347,614],{"class":153},[143,63349,617],{"class":156},[143,63351,160],{"class":149},[143,63353,63354],{"class":163},"\"wrapper\"",[143,63356,183],{"class":149},[143,63358,63359,63361,63363,63365,63367,63370,63372,63374],{"class":145,"line":33566},[143,63360,52237],{"class":149},[143,63362,1482],{"class":153},[143,63364,617],{"class":156},[143,63366,160],{"class":149},[143,63368,63369],{"class":163},"\"avatar\"",[143,63371,56197],{"class":149},[143,63373,1482],{"class":153},[143,63375,183],{"class":149},[143,63377,63378,63380,63382,63384,63386,63389,63391,63393,63396,63398,63400,63402,63405,63407,63410,63412,63414],{"class":145,"line":33572},[143,63379,52237],{"class":149},[143,63381,55173],{"class":153},[143,63383,15858],{"class":156},[143,63385,160],{"class":149},[143,63387,63388],{"class":163},"\"tx\"",[143,63390,61903],{"class":156},[143,63392,160],{"class":149},[143,63394,63395],{"class":163},"\"发一条友善的评论\"",[143,63397,55196],{"class":156},[143,63399,160],{"class":149},[143,63401,4601],{"class":163},[143,63403,63404],{"class":156}," maxlength",[143,63406,160],{"class":149},[143,63408,63409],{"class":163},"\"200\"",[143,63411,56197],{"class":149},[143,63413,55173],{"class":153},[143,63415,183],{"class":149},[143,63417,63418,63420,63422,63425,63427],{"class":145,"line":33592},[143,63419,52237],{"class":149},[143,63421,54772],{"class":153},[143,63423,63424],{"class":149},">发布\u003C\u002F",[143,63426,54772],{"class":153},[143,63428,183],{"class":149},[143,63430,63431,63433,63435],{"class":145,"line":33598},[143,63432,53304],{"class":149},[143,63434,614],{"class":153},[143,63436,183],{"class":149},[143,63438,63439,63441,63443,63445,63447,63449],{"class":145,"line":33609},[143,63440,634],{"class":149},[143,63442,614],{"class":153},[143,63444,617],{"class":156},[143,63446,160],{"class":149},[143,63448,63354],{"class":163},[143,63450,183],{"class":149},[143,63452,63453,63455,63457,63459,63461,63464,63467,63469],{"class":145,"line":33615},[143,63454,52237],{"class":149},[143,63456,143],{"class":153},[143,63458,617],{"class":156},[143,63460,160],{"class":149},[143,63462,63463],{"class":163},"\"total\"",[143,63465,63466],{"class":149},">0\u002F200字\u003C\u002F",[143,63468,143],{"class":153},[143,63470,183],{"class":149},[143,63472,63473,63475,63477],{"class":145,"line":33621},[143,63474,53304],{"class":149},[143,63476,614],{"class":153},[143,63478,183],{"class":149},[143,63480,63481,63483,63485,63487,63489,63492],{"class":145,"line":33627},[143,63482,634],{"class":149},[143,63484,614],{"class":153},[143,63486,617],{"class":156},[143,63488,160],{"class":149},[143,63490,63491],{"class":163},"\"list\"",[143,63493,183],{"class":149},[143,63495,63496,63498,63500,63502,63504,63507,63510,63512,63515],{"class":145,"line":33633},[143,63497,52237],{"class":149},[143,63499,614],{"class":153},[143,63501,617],{"class":156},[143,63503,160],{"class":149},[143,63505,63506],{"class":163},"\"item\"",[143,63508,63509],{"class":156}," style",[143,63511,160],{"class":149},[143,63513,63514],{"class":163},"\"display: none;\"",[143,63516,183],{"class":149},[143,63518,63519,63521,63523,63525,63527,63529,63531,63533],{"class":145,"line":33639},[143,63520,56119],{"class":149},[143,63522,1482],{"class":153},[143,63524,617],{"class":156},[143,63526,160],{"class":149},[143,63528,63369],{"class":163},[143,63530,56197],{"class":149},[143,63532,1482],{"class":153},[143,63534,183],{"class":149},[143,63536,63537,63539,63541,63543,63545,63548],{"class":145,"line":33645},[143,63538,56119],{"class":149},[143,63540,614],{"class":153},[143,63542,617],{"class":156},[143,63544,160],{"class":149},[143,63546,63547],{"class":163},"\"info\"",[143,63549,183],{"class":149},[143,63551,63552,63554,63556,63558,63560,63563,63566,63568],{"class":145,"line":33651},[143,63553,56185],{"class":149},[143,63555,63],{"class":153},[143,63557,617],{"class":156},[143,63559,160],{"class":149},[143,63561,63562],{"class":163},"\"name\"",[143,63564,63565],{"class":149},">清风徐来\u003C\u002F",[143,63567,63],{"class":153},[143,63569,183],{"class":149},[143,63571,63572,63574,63576,63578,63580,63582,63585,63587],{"class":145,"line":33671},[143,63573,56185],{"class":149},[143,63575,63],{"class":153},[143,63577,617],{"class":156},[143,63579,160],{"class":149},[143,63581,758],{"class":163},[143,63583,63584],{"class":149},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[143,63586,63],{"class":153},[143,63588,183],{"class":149},[143,63590,63591,63593,63595,63597,63599,63602,63605,63607],{"class":145,"line":33677},[143,63592,56185],{"class":149},[143,63594,63],{"class":153},[143,63596,617],{"class":156},[143,63598,160],{"class":149},[143,63600,63601],{"class":163},"\"time\"",[143,63603,63604],{"class":149},">2022-10-10 20:29:21\u003C\u002F",[143,63606,63],{"class":153},[143,63608,183],{"class":149},[143,63610,63611,63613,63615],{"class":145,"line":33693},[143,63612,56290],{"class":149},[143,63614,614],{"class":153},[143,63616,183],{"class":149},[143,63618,63619,63621,63623],{"class":145,"line":33699},[143,63620,52665],{"class":149},[143,63622,614],{"class":153},[143,63624,183],{"class":149},[143,63626,63627,63629,63631],{"class":145,"line":33713},[143,63628,53304],{"class":149},[143,63630,614],{"class":153},[143,63632,183],{"class":149},[143,63634,63635,63637,63639],{"class":145,"line":33719},[143,63636,634],{"class":149},[143,63638,52701],{"class":153},[143,63640,183],{"class":149},[143,63642,63643,63645,63648,63650,63652,63654,63656,63659],{"class":145,"line":33734},[143,63644,12121],{"class":755},[143,63646,63647],{"class":280}," tx",[143,63649,14464],{"class":755},[143,63651,55281],{"class":149},[143,63653,55284],{"class":156},[143,63655,1049],{"class":149},[143,63657,63658],{"class":163},"'#tx'",[143,63660,1055],{"class":149},[143,63662,63663,63665,63668,63670,63672,63674,63676,63679],{"class":145,"line":33740},[143,63664,12121],{"class":755},[143,63666,63667],{"class":280}," total",[143,63669,14464],{"class":755},[143,63671,55281],{"class":149},[143,63673,55284],{"class":156},[143,63675,1049],{"class":149},[143,63677,63678],{"class":163},"'.total'",[143,63680,1055],{"class":149},[143,63682,63683],{"class":145,"line":33749},[143,63684,63685],{"class":266},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[143,63687,63688,63691,63693,63695,63697,63699,63701],{"class":145,"line":33755},[143,63689,63690],{"class":149},"    tx.",[143,63692,58696],{"class":156},[143,63694,1049],{"class":149},[143,63696,62210],{"class":163},[143,63698,13335],{"class":149},[143,63700,55334],{"class":755},[143,63702,55337],{"class":149},[143,63704,63705,63708,63710],{"class":145,"line":33764},[143,63706,63707],{"class":149},"      total.style.opacity ",[143,63709,160],{"class":755},[143,63711,56582],{"class":280},[143,63713,63714],{"class":145,"line":33770},[143,63715,34359],{"class":149},[143,63717,63718],{"class":145,"line":33776},[143,63719,63720],{"class":266},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[143,63722,63723,63725,63727,63729,63731,63733,63735],{"class":145,"line":33785},[143,63724,63690],{"class":149},[143,63726,58696],{"class":156},[143,63728,1049],{"class":149},[143,63730,62271],{"class":163},[143,63732,13335],{"class":149},[143,63734,55334],{"class":755},[143,63736,55337],{"class":149},[143,63738,63739,63741,63743],{"class":145,"line":33791},[143,63740,63707],{"class":149},[143,63742,160],{"class":755},[143,63744,48231],{"class":280},[143,63746,63747],{"class":145,"line":33802},[143,63748,34359],{"class":149},[143,63750,63751],{"class":145,"line":33808},[143,63752,63753],{"class":266},"    \u002F\u002F 3. 检测用户输入\n",[143,63755,63756,63758,63760,63762,63765,63767,63769],{"class":145,"line":33827},[143,63757,63690],{"class":149},[143,63759,58696],{"class":156},[143,63761,1049],{"class":149},[143,63763,63764],{"class":163},"'input'",[143,63766,13335],{"class":149},[143,63768,55334],{"class":755},[143,63770,55337],{"class":149},[143,63772,63773],{"class":145,"line":33833},[143,63774,63775],{"class":266},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[143,63777,63778,63781,63783,63786,63789,63791,63794,63796,63798],{"class":145,"line":33844},[143,63779,63780],{"class":149},"      total.innerHTML ",[143,63782,160],{"class":755},[143,63784,63785],{"class":163}," `${",[143,63787,63788],{"class":149},"tx",[143,63790,1599],{"class":163},[143,63792,63793],{"class":149},"value",[143,63795,1599],{"class":163},[143,63797,52856],{"class":280},[143,63799,63800],{"class":163},"}\u002F200字`\n",[143,63802,63803],{"class":145,"line":33850},[143,63804,34359],{"class":149},[143,63806,63807],{"class":145,"line":33870},[143,63808,3300],{"emptyLinePlaceholder":976},[143,63810,63811],{"class":145,"line":33886},[143,63812,63813],{"class":266},"    \u002F\u002F const str = 'andy'\n",[143,63815,63816],{"class":145,"line":33892},[143,63817,63818],{"class":266},"    \u002F\u002F console.log(str.length)\n",[143,63820,63821,63823,63825],{"class":145,"line":33906},[143,63822,53304],{"class":149},[143,63824,52701],{"class":153},[143,63826,183],{"class":149},[143,63828,63829,63831,63833],{"class":145,"line":33912},[143,63830,730],{"class":149},[143,63832,52688],{"class":153},[143,63834,183],{"class":149},[143,63836,63837],{"class":145,"line":33918},[143,63838,3300],{"emptyLinePlaceholder":976},[143,63840,63841,63843,63845],{"class":145,"line":33929},[143,63842,730],{"class":149},[143,63844,51533],{"class":153},[143,63846,183],{"class":149},[22896,63848,63850],{"id":63849},"_3254-change事件","3.2.5.4 change事件",[63,63852,63853],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[63,63855,63856],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[63,63858,63859],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[133,63861,63863],{"className":51531,"code":63862,"language":51533,"meta":138,"style":138},"\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",[140,63864,63865,63875,63889,63893,63901,63915,63935,63947,63955,63959,63967,63981,63989,64007,64025,64037,64041,64049,64057,64061],{"__ignoreMap":138},[143,63866,63867,63869,63871,63873],{"class":145,"line":146},[143,63868,52195],{"class":149},[143,63870,52198],{"class":153},[143,63872,52201],{"class":156},[143,63874,183],{"class":149},[143,63876,63877,63879,63881,63883,63885,63887],{"class":145,"line":35},[143,63878,150],{"class":149},[143,63880,51533],{"class":153},[143,63882,52212],{"class":156},[143,63884,160],{"class":149},[143,63886,52217],{"class":163},[143,63888,183],{"class":149},[143,63890,63891],{"class":145,"line":46},[143,63892,3300],{"emptyLinePlaceholder":976},[143,63894,63895,63897,63899],{"class":145,"line":293},[143,63896,150],{"class":149},[143,63898,52230],{"class":153},[143,63900,183],{"class":149},[143,63902,63903,63905,63907,63909,63911,63913],{"class":145,"line":306},[143,63904,634],{"class":149},[143,63906,52240],{"class":153},[143,63908,52243],{"class":156},[143,63910,160],{"class":149},[143,63912,52248],{"class":163},[143,63914,183],{"class":149},[143,63916,63917,63919,63921,63923,63925,63927,63929,63931,63933],{"class":145,"line":319},[143,63918,634],{"class":149},[143,63920,52240],{"class":153},[143,63922,15819],{"class":156},[143,63924,160],{"class":149},[143,63926,52287],{"class":163},[143,63928,52267],{"class":156},[143,63930,160],{"class":149},[143,63932,52294],{"class":163},[143,63934,183],{"class":149},[143,63936,63937,63939,63941,63943,63945],{"class":145,"line":332},[143,63938,634],{"class":149},[143,63940,52303],{"class":153},[143,63942,52306],{"class":149},[143,63944,52303],{"class":153},[143,63946,183],{"class":149},[143,63948,63949,63951,63953],{"class":145,"line":345},[143,63950,730],{"class":149},[143,63952,52230],{"class":153},[143,63954,183],{"class":149},[143,63956,63957],{"class":145,"line":701},[143,63958,3300],{"emptyLinePlaceholder":976},[143,63960,63961,63963,63965],{"class":145,"line":707},[143,63962,150],{"class":149},[143,63964,52688],{"class":153},[143,63966,183],{"class":149},[143,63968,63969,63971,63973,63975,63977,63979],{"class":145,"line":727},[143,63970,634],{"class":149},[143,63972,746],{"class":153},[143,63974,54709],{"class":156},[143,63976,160],{"class":149},[143,63978,758],{"class":163},[143,63980,183],{"class":149},[143,63982,63983,63985,63987],{"class":145,"line":2518},[143,63984,634],{"class":149},[143,63986,52701],{"class":153},[143,63988,183],{"class":149},[143,63990,63991,63993,63995,63997,63999,64001,64003,64005],{"class":145,"line":2524},[143,63992,12121],{"class":755},[143,63994,61488],{"class":280},[143,63996,14464],{"class":755},[143,63998,55281],{"class":149},[143,64000,55284],{"class":156},[143,64002,1049],{"class":149},[143,64004,63764],{"class":163},[143,64006,1055],{"class":149},[143,64008,64009,64012,64014,64016,64019,64021,64023],{"class":145,"line":2529},[143,64010,64011],{"class":149},"    input.",[143,64013,58696],{"class":156},[143,64015,1049],{"class":149},[143,64017,64018],{"class":163},"'change'",[143,64020,13335],{"class":149},[143,64022,55334],{"class":755},[143,64024,55337],{"class":149},[143,64026,64027,64029,64031,64033,64035],{"class":145,"line":2543},[143,64028,59127],{"class":149},[143,64030,59130],{"class":156},[143,64032,1049],{"class":149},[143,64034,1634],{"class":280},[143,64036,1055],{"class":149},[143,64038,64039],{"class":145,"line":2548},[143,64040,34359],{"class":149},[143,64042,64043,64045,64047],{"class":145,"line":2554},[143,64044,53304],{"class":149},[143,64046,52701],{"class":153},[143,64048,183],{"class":149},[143,64050,64051,64053,64055],{"class":145,"line":2575},[143,64052,730],{"class":149},[143,64054,52688],{"class":153},[143,64056,183],{"class":149},[143,64058,64059],{"class":145,"line":2580},[143,64060,3300],{"emptyLinePlaceholder":976},[143,64062,64063,64065,64067],{"class":145,"line":2594},[143,64064,730],{"class":149},[143,64066,51533],{"class":153},[143,64068,183],{"class":149},[63,64070,64071],{},"总结：内容发生改变才回去触发",[58,64073,64075],{"id":64074},"_326-事件对象","3.2.6 事件对象",[22896,64077,64079],{"id":64078},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[63,64081,64082],{},[29,64083],{"alt":138,"src":64084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[63,64086,64087],{},[29,64088],{"alt":138,"src":64089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[63,64091,64092],{},"点击一次，就输出了事件对象，它是个对象",[63,64094,64095],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[63,64097,64098],{},[29,64099],{"alt":138,"src":64100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22896,64102,64104],{"id":64103},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[63,64106,64107],{},[29,64108],{"alt":138,"src":64109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[63,64111,64112],{},"实现按特殊字符才是实现打印输出效果：",[133,64114,64116],{"className":53954,"code":64115,"language":53956,"meta":138,"style":138},"\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",[140,64117,64118,64126,64131,64145,64153,64158,64163,64168,64173,64178,64183,64188,64193,64198,64202,64206,64214],{"__ignoreMap":138},[143,64119,64120,64122,64124],{"class":145,"line":146},[143,64121,150],{"class":149},[143,64123,52688],{"class":153},[143,64125,183],{"class":149},[143,64127,64128],{"class":145,"line":35},[143,64129,64130],{"class":266},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[143,64132,64133,64135,64137,64139,64141,64143],{"class":145,"line":46},[143,64134,634],{"class":149},[143,64136,746],{"class":153},[143,64138,54709],{"class":156},[143,64140,160],{"class":149},[143,64142,758],{"class":163},[143,64144,183],{"class":149},[143,64146,64147,64149,64151],{"class":145,"line":293},[143,64148,634],{"class":149},[143,64150,52701],{"class":153},[143,64152,183],{"class":149},[143,64154,64155],{"class":145,"line":306},[143,64156,64157],{"class":149},"    \u002F\u002F const btn = document.querySelector('button')\n",[143,64159,64160],{"class":145,"line":319},[143,64161,64162],{"class":149},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[143,64164,64165],{"class":145,"line":332},[143,64166,64167],{"class":149},"    \u002F\u002F   console.log(e);\n",[143,64169,64170],{"class":145,"line":345},[143,64171,64172],{"class":149},"    \u002F\u002F })\n",[143,64174,64175],{"class":145,"line":701},[143,64176,64177],{"class":149},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[143,64179,64180],{"class":145,"line":707},[143,64181,64182],{"class":149},"    const input = document.querySelector('input')\n",[143,64184,64185],{"class":145,"line":727},[143,64186,64187],{"class":149},"    input.addEventListener('keyup', function (e) {\n",[143,64189,64190],{"class":145,"line":2518},[143,64191,64192],{"class":149},"      if (e.key === 'Enter') {\n",[143,64194,64195],{"class":145,"line":2524},[143,64196,64197],{"class":149},"        console.log('我按下了回车键')\n",[143,64199,64200],{"class":145,"line":2529},[143,64201,53285],{"class":149},[143,64203,64204],{"class":145,"line":2543},[143,64205,34359],{"class":149},[143,64207,64208,64210,64212],{"class":145,"line":2548},[143,64209,53304],{"class":149},[143,64211,52701],{"class":153},[143,64213,183],{"class":149},[143,64215,64216,64218,64220],{"class":145,"line":2554},[143,64217,730],{"class":149},[143,64219,52688],{"class":153},[143,64221,183],{"class":149},[22896,64223,64225],{"id":64224},"_3263-trim方法","3.2.6.3 trim方法",[63,64227,64228],{},[29,64229],{"alt":138,"src":64230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[63,64232,64233],{},[29,64234],{"alt":138,"src":64235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[63,64237,64238],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[63,64240,64241],{},"str.trim()",[58,64243,64245],{"id":64244},"_327-环境对象","3.2.7 环境对象",[63,64247,64248],{},[29,64249],{"alt":138,"src":64250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[63,64252,64253],{},[29,64254],{"alt":138,"src":64255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[63,64257,64258],{},[29,64259],{"alt":138,"src":64260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[63,64262,64263],{},"实际函数调用是window.fn()",[63,64265,64266],{},"普通函数里面this指向的是window",[232,64268,64269,64272,64275],{},[22,64270,64271],{},"在普通函数下，this指向的是window",[22,64273,64274],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[22,64276,64277],{},"箭头函数没有this",[63,64279,64280],{},"粗略记法就是：谁调用，this就指向谁",[63,64282,64283],{},[29,64284],{"alt":138,"src":64285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[63,64287,64288],{},[29,64289],{"alt":138,"src":64290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[63,64292,64293],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[63,64295,64296],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[133,64298,64300],{"className":53954,"code":64299,"language":53956,"meta":138,"style":138},"\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",[140,64301,64302,64310,64322,64330,64335,64340,64345,64350,64354,64362],{"__ignoreMap":138},[143,64303,64304,64306,64308],{"class":145,"line":146},[143,64305,150],{"class":149},[143,64307,52688],{"class":153},[143,64309,183],{"class":149},[143,64311,64312,64314,64316,64318,64320],{"class":145,"line":35},[143,64313,634],{"class":149},[143,64315,54772],{"class":153},[143,64317,54778],{"class":149},[143,64319,54772],{"class":153},[143,64321,183],{"class":149},[143,64323,64324,64326,64328],{"class":145,"line":46},[143,64325,634],{"class":149},[143,64327,52701],{"class":153},[143,64329,183],{"class":149},[143,64331,64332],{"class":145,"line":293},[143,64333,64334],{"class":149},"    const button = document.querySelector('button')\n",[143,64336,64337],{"class":145,"line":306},[143,64338,64339],{"class":149},"    button.addEventListener('click', function () {\n",[143,64341,64342],{"class":145,"line":319},[143,64343,64344],{"class":149},"      \u002F\u002F console.log(this);\n",[143,64346,64347],{"class":145,"line":332},[143,64348,64349],{"class":149},"      this.style.color = 'pink'\n",[143,64351,64352],{"class":145,"line":345},[143,64353,34359],{"class":149},[143,64355,64356,64358,64360],{"class":145,"line":701},[143,64357,53304],{"class":149},[143,64359,52701],{"class":153},[143,64361,183],{"class":149},[143,64363,64364,64366,64368],{"class":145,"line":707},[143,64365,730],{"class":149},[143,64367,52688],{"class":153},[143,64369,183],{"class":149},[58,64371,64373],{"id":64372},"_328-回调函数","3.2.8 回调函数",[63,64375,64376],{},[29,64377],{"alt":138,"src":64378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[63,64380,64381],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[63,64383,12232],{},[232,64385,64386,64389,64392],{},[22,64387,64388],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[22,64390,64391],{},"回调函数本质还是函数，只不过把它当成参数使用",[22,64393,64394],{},"使用匿名函数做为回调函数比较常见",[58,64396,64398],{"id":64397},"_329-tab栏切换","3.2.9 tab栏切换",[63,64400,64401],{},[29,64402],{"alt":138,"src":64403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[133,64405,64407],{"className":51531,"code":64406,"language":51533,"meta":138,"style":138},"\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",[140,64408,64409,64419,64433,64437,64445,64459,64479,64499,64512,64520,64526,64536,64546,64550,64554,64561,64574,64587,64599,64615,64619,64623,64630,64642,64654,64666,64676,64686,64690,64694,64703,64715,64726,64738,64742,64746,64754,64764,64774,64784,64788,64792,64802,64816,64828,64832,64836,64848,64859,64876,64886,64890,64894,64909,64920,64930,64934,64938,64945,64960,64964,64968,64976,64986,64990,64994,65003,65013,65017,65025,65033,65037,65045,65060,65075,65088,65096,65130,65157,65184,65211,65238,65246,65254,65269,65306,65341,65376,65411,65446,65454,65462,65470,65475,65480,65500,65505,65534,65539,65544,65562,65567,65572,65577,65599,65604,65620,65624,65629,65634,65655,65660,65689,65693,65698,65702,65710,65718,65722],{"__ignoreMap":138},[143,64410,64411,64413,64415,64417],{"class":145,"line":146},[143,64412,52195],{"class":149},[143,64414,52198],{"class":153},[143,64416,52201],{"class":156},[143,64418,183],{"class":149},[143,64420,64421,64423,64425,64427,64429,64431],{"class":145,"line":35},[143,64422,150],{"class":149},[143,64424,51533],{"class":153},[143,64426,52212],{"class":156},[143,64428,160],{"class":149},[143,64430,52217],{"class":163},[143,64432,183],{"class":149},[143,64434,64435],{"class":145,"line":46},[143,64436,3300],{"emptyLinePlaceholder":976},[143,64438,64439,64441,64443],{"class":145,"line":293},[143,64440,150],{"class":149},[143,64442,52230],{"class":153},[143,64444,183],{"class":149},[143,64446,64447,64449,64451,64453,64455,64457],{"class":145,"line":306},[143,64448,634],{"class":149},[143,64450,52240],{"class":153},[143,64452,52243],{"class":156},[143,64454,160],{"class":149},[143,64456,52248],{"class":163},[143,64458,60010],{"class":149},[143,64460,64461,64463,64465,64467,64469,64471,64473,64475,64477],{"class":145,"line":319},[143,64462,634],{"class":149},[143,64464,52240],{"class":153},[143,64466,52259],{"class":156},[143,64468,160],{"class":149},[143,64470,52264],{"class":163},[143,64472,52267],{"class":156},[143,64474,160],{"class":149},[143,64476,52272],{"class":163},[143,64478,60010],{"class":149},[143,64480,64481,64483,64485,64487,64489,64491,64493,64495,64497],{"class":145,"line":332},[143,64482,634],{"class":149},[143,64484,52240],{"class":153},[143,64486,15819],{"class":156},[143,64488,160],{"class":149},[143,64490,52287],{"class":163},[143,64492,52267],{"class":156},[143,64494,160],{"class":149},[143,64496,52294],{"class":163},[143,64498,60010],{"class":149},[143,64500,64501,64503,64505,64508,64510],{"class":145,"line":345},[143,64502,634],{"class":149},[143,64504,52303],{"class":153},[143,64506,64507],{"class":149},">tab栏切换\u003C\u002F",[143,64509,52303],{"class":153},[143,64511,183],{"class":149},[143,64513,64514,64516,64518],{"class":145,"line":701},[143,64515,634],{"class":149},[143,64517,954],{"class":153},[143,64519,183],{"class":149},[143,64521,64522,64524],{"class":145,"line":707},[143,64523,7303],{"class":153},[143,64525,275],{"class":149},[143,64527,64528,64530,64532,64534],{"class":145,"line":727},[143,64529,55591],{"class":280},[143,64531,284],{"class":149},[143,64533,1234],{"class":280},[143,64535,290],{"class":149},[143,64537,64538,64540,64542,64544],{"class":145,"line":2518},[143,64539,55580],{"class":280},[143,64541,284],{"class":149},[143,64543,1234],{"class":280},[143,64545,290],{"class":149},[143,64547,64548],{"class":145,"line":2524},[143,64549,3087],{"class":149},[143,64551,64552],{"class":145,"line":2529},[143,64553,3300],{"emptyLinePlaceholder":976},[143,64555,64556,64559],{"class":145,"line":2543},[143,64557,64558],{"class":156},"    .tab",[143,64560,275],{"class":149},[143,64562,64563,64565,64567,64570,64572],{"class":145,"line":2548},[143,64564,55656],{"class":280},[143,64566,284],{"class":149},[143,64568,64569],{"class":280},"590",[143,64571,774],{"class":755},[143,64573,290],{"class":149},[143,64575,64576,64578,64580,64583,64585],{"class":145,"line":2554},[143,64577,55670],{"class":280},[143,64579,284],{"class":149},[143,64581,64582],{"class":280},"340",[143,64584,774],{"class":755},[143,64586,290],{"class":149},[143,64588,64589,64591,64593,64595,64597],{"class":145,"line":2575},[143,64590,55591],{"class":280},[143,64592,284],{"class":149},[143,64594,1741],{"class":280},[143,64596,774],{"class":755},[143,64598,290],{"class":149},[143,64600,64601,64603,64605,64607,64609,64611,64613],{"class":145,"line":2580},[143,64602,62860],{"class":280},[143,64604,284],{"class":149},[143,64606,771],{"class":280},[143,64608,774],{"class":755},[143,64610,777],{"class":280},[143,64612,63127],{"class":280},[143,64614,290],{"class":149},[143,64616,64617],{"class":145,"line":2594},[143,64618,3087],{"class":149},[143,64620,64621],{"class":145,"line":2599},[143,64622,3300],{"emptyLinePlaceholder":976},[143,64624,64625,64628],{"class":145,"line":2628},[143,64626,64627],{"class":156},"    .tab-nav",[143,64629,275],{"class":149},[143,64631,64632,64634,64636,64638,64640],{"class":145,"line":2633},[143,64633,55656],{"class":280},[143,64635,284],{"class":149},[143,64637,1352],{"class":280},[143,64639,1369],{"class":755},[143,64641,290],{"class":149},[143,64643,64644,64646,64648,64650,64652],{"class":145,"line":2650},[143,64645,55670],{"class":280},[143,64647,284],{"class":149},[143,64649,1947],{"class":280},[143,64651,774],{"class":755},[143,64653,290],{"class":149},[143,64655,64656,64658,64660,64662,64664],{"class":145,"line":2655},[143,64657,58242],{"class":280},[143,64659,284],{"class":149},[143,64661,1947],{"class":280},[143,64663,774],{"class":755},[143,64665,290],{"class":149},[143,64667,64668,64670,64672,64674],{"class":145,"line":2660},[143,64669,55894],{"class":280},[143,64671,284],{"class":149},[143,64673,287],{"class":280},[143,64675,290],{"class":149},[143,64677,64678,64680,64682,64684],{"class":145,"line":2665},[143,64679,55905],{"class":280},[143,64681,284],{"class":149},[143,64683,314],{"class":280},[143,64685,290],{"class":149},[143,64687,64688],{"class":145,"line":2679},[143,64689,3087],{"class":149},[143,64691,64692],{"class":145,"line":2684},[143,64693,3300],{"emptyLinePlaceholder":976},[143,64695,64696,64698,64701],{"class":145,"line":3477},[143,64697,64627],{"class":156},[143,64699,64700],{"class":153}," h3",[143,64702,275],{"class":149},[143,64704,64705,64707,64709,64711,64713],{"class":145,"line":3491},[143,64706,55807],{"class":280},[143,64708,284],{"class":149},[143,64710,1841],{"class":280},[143,64712,774],{"class":755},[143,64714,290],{"class":149},[143,64716,64717,64719,64721,64724],{"class":145,"line":3499},[143,64718,63217],{"class":280},[143,64720,284],{"class":149},[143,64722,64723],{"class":280},"normal",[143,64725,290],{"class":149},[143,64727,64728,64730,64732,64734,64736],{"class":145,"line":3504},[143,64729,62883],{"class":280},[143,64731,284],{"class":149},[143,64733,1741],{"class":280},[143,64735,774],{"class":755},[143,64737,290],{"class":149},[143,64739,64740],{"class":145,"line":3510},[143,64741,3087],{"class":149},[143,64743,64744],{"class":145,"line":3516},[143,64745,3300],{"emptyLinePlaceholder":976},[143,64747,64748,64750,64752],{"class":145,"line":3521},[143,64749,64627],{"class":156},[143,64751,62175],{"class":153},[143,64753,275],{"class":149},[143,64755,64756,64758,64760,64762],{"class":145,"line":8848},[143,64757,55617],{"class":280},[143,64759,284],{"class":149},[143,64761,55622],{"class":280},[143,64763,290],{"class":149},[143,64765,64766,64768,64770,64772],{"class":145,"line":8872},[143,64767,55894],{"class":280},[143,64769,284],{"class":149},[143,64771,287],{"class":280},[143,64773,290],{"class":149},[143,64775,64776,64778,64780,64782],{"class":145,"line":8877},[143,64777,55905],{"class":280},[143,64779,284],{"class":149},[143,64781,52472],{"class":280},[143,64783,290],{"class":149},[143,64785,64786],{"class":145,"line":8883},[143,64787,3087],{"class":149},[143,64789,64790],{"class":145,"line":8910},[143,64791,3300],{"emptyLinePlaceholder":976},[143,64793,64794,64796,64798,64800],{"class":145,"line":8915},[143,64795,64627],{"class":156},[143,64797,62175],{"class":153},[143,64799,55960],{"class":153},[143,64801,275],{"class":149},[143,64803,64804,64806,64808,64810,64812,64814],{"class":145,"line":8921},[143,64805,55591],{"class":280},[143,64807,284],{"class":149},[143,64809,1234],{"class":280},[143,64811,9850],{"class":280},[143,64813,774],{"class":755},[143,64815,290],{"class":149},[143,64817,64818,64820,64822,64824,64826],{"class":145,"line":8933},[143,64819,55807],{"class":280},[143,64821,284],{"class":149},[143,64823,1590],{"class":280},[143,64825,774],{"class":755},[143,64827,290],{"class":149},[143,64829,64830],{"class":145,"line":8945},[143,64831,3087],{"class":149},[143,64833,64834],{"class":145,"line":8957},[143,64835,3300],{"emptyLinePlaceholder":976},[143,64837,64838,64840,64842,64844,64846],{"class":145,"line":10616},[143,64839,64627],{"class":156},[143,64841,62175],{"class":153},[143,64843,55960],{"class":153},[143,64845,2302],{"class":153},[143,64847,275],{"class":149},[143,64849,64850,64853,64855,64857],{"class":145,"line":10641},[143,64851,64852],{"class":280},"      text-decoration",[143,64854,284],{"class":149},[143,64856,55622],{"class":280},[143,64858,290],{"class":149},[143,64860,64861,64863,64865,64867,64869,64871,64874],{"class":145,"line":10664},[143,64862,63115],{"class":280},[143,64864,284],{"class":149},[143,64866,1122],{"class":280},[143,64868,774],{"class":755},[143,64870,777],{"class":280},[143,64872,64873],{"class":280}," transparent",[143,64875,290],{"class":149},[143,64877,64878,64880,64882,64884],{"class":145,"line":10688},[143,64879,58299],{"class":280},[143,64881,284],{"class":149},[143,64883,63252],{"class":280},[143,64885,290],{"class":149},[143,64887,64888],{"class":145,"line":10693},[143,64889,3087],{"class":149},[143,64891,64892],{"class":145,"line":10698},[143,64893,3300],{"emptyLinePlaceholder":976},[143,64895,64896,64898,64900,64902,64904,64907],{"class":145,"line":10703},[143,64897,64627],{"class":156},[143,64899,62175],{"class":153},[143,64901,55960],{"class":153},[143,64903,2302],{"class":153},[143,64905,64906],{"class":156},".active",[143,64908,275],{"class":149},[143,64910,64911,64913,64915,64918],{"class":145,"line":10712},[143,64912,62674],{"class":280},[143,64914,284],{"class":149},[143,64916,64917],{"class":280},"#e1251b",[143,64919,290],{"class":149},[143,64921,64922,64924,64926,64928],{"class":145,"line":10717},[143,64923,58299],{"class":280},[143,64925,284],{"class":149},[143,64927,64917],{"class":280},[143,64929,290],{"class":149},[143,64931,64932],{"class":145,"line":10723},[143,64933,3087],{"class":149},[143,64935,64936],{"class":145,"line":10744},[143,64937,3300],{"emptyLinePlaceholder":976},[143,64939,64940,64943],{"class":145,"line":10750},[143,64941,64942],{"class":156},"    .tab-content",[143,64944,275],{"class":149},[143,64946,64947,64949,64951,64953,64956,64958],{"class":145,"line":10764},[143,64948,55580],{"class":280},[143,64950,284],{"class":149},[143,64952,1234],{"class":280},[143,64954,64955],{"class":280}," 16",[143,64957,774],{"class":755},[143,64959,290],{"class":149},[143,64961,64962],{"class":145,"line":10770},[143,64963,3087],{"class":149},[143,64965,64966],{"class":145,"line":10797},[143,64967,3300],{"emptyLinePlaceholder":976},[143,64969,64970,64972,64974],{"class":145,"line":10806},[143,64971,64942],{"class":156},[143,64973,63057],{"class":156},[143,64975,275],{"class":149},[143,64977,64978,64980,64982,64984],{"class":145,"line":10812},[143,64979,55894],{"class":280},[143,64981,284],{"class":149},[143,64983,55622],{"class":280},[143,64985,290],{"class":149},[143,64987,64988],{"class":145,"line":10820},[143,64989,3087],{"class":149},[143,64991,64992],{"class":145,"line":10825},[143,64993,3300],{"emptyLinePlaceholder":976},[143,64995,64996,64998,65001],{"class":145,"line":17502},[143,64997,64942],{"class":156},[143,64999,65000],{"class":156}," .item.active",[143,65002,275],{"class":149},[143,65004,65005,65007,65009,65011],{"class":145,"line":17508},[143,65006,55894],{"class":280},[143,65008,284],{"class":149},[143,65010,61752],{"class":280},[143,65012,290],{"class":149},[143,65014,65015],{"class":145,"line":17531},[143,65016,3087],{"class":149},[143,65018,65019,65021,65023],{"class":145,"line":17537},[143,65020,53304],{"class":149},[143,65022,954],{"class":153},[143,65024,183],{"class":149},[143,65026,65027,65029,65031],{"class":145,"line":17560},[143,65028,730],{"class":149},[143,65030,52230],{"class":153},[143,65032,183],{"class":149},[143,65034,65035],{"class":145,"line":17574},[143,65036,3300],{"emptyLinePlaceholder":976},[143,65038,65039,65041,65043],{"class":145,"line":17594},[143,65040,150],{"class":149},[143,65042,52688],{"class":153},[143,65044,183],{"class":149},[143,65046,65047,65049,65051,65053,65055,65058],{"class":145,"line":17600},[143,65048,634],{"class":149},[143,65050,614],{"class":153},[143,65052,617],{"class":156},[143,65054,160],{"class":149},[143,65056,65057],{"class":163},"\"tab\"",[143,65059,183],{"class":149},[143,65061,65062,65064,65066,65068,65070,65073],{"class":145,"line":17611},[143,65063,52237],{"class":149},[143,65065,614],{"class":153},[143,65067,617],{"class":156},[143,65069,160],{"class":149},[143,65071,65072],{"class":163},"\"tab-nav\"",[143,65074,183],{"class":149},[143,65076,65077,65079,65081,65084,65086],{"class":145,"line":17634},[143,65078,56119],{"class":149},[143,65080,58],{"class":153},[143,65082,65083],{"class":149},">每日特价\u003C\u002F",[143,65085,58],{"class":153},[143,65087,183],{"class":149},[143,65089,65090,65092,65094],{"class":145,"line":17656},[143,65091,56119],{"class":149},[143,65093,232],{"class":153},[143,65095,183],{"class":149},[143,65097,65098,65100,65102,65104,65106,65108,65110,65112,65114,65116,65119,65122,65124,65126,65128],{"class":145,"line":17661},[143,65099,56185],{"class":149},[143,65101,22],{"class":153},[143,65103,61935],{"class":149},[143,65105,67],{"class":153},[143,65107,617],{"class":156},[143,65109,160],{"class":149},[143,65111,60589],{"class":163},[143,65113,61940],{"class":156},[143,65115,160],{"class":149},[143,65117,65118],{"class":163},"\"javascript:;\"",[143,65120,65121],{"class":149},">精选\u003C\u002F",[143,65123,67],{"class":153},[143,65125,56197],{"class":149},[143,65127,22],{"class":153},[143,65129,183],{"class":149},[143,65131,65132,65134,65136,65138,65140,65142,65144,65146,65149,65151,65153,65155],{"class":145,"line":17667},[143,65133,56185],{"class":149},[143,65135,22],{"class":153},[143,65137,61935],{"class":149},[143,65139,67],{"class":153},[143,65141,61940],{"class":156},[143,65143,160],{"class":149},[143,65145,65118],{"class":163},[143,65147,65148],{"class":149},">美食\u003C\u002F",[143,65150,67],{"class":153},[143,65152,56197],{"class":149},[143,65154,22],{"class":153},[143,65156,183],{"class":149},[143,65158,65159,65161,65163,65165,65167,65169,65171,65173,65176,65178,65180,65182],{"class":145,"line":17681},[143,65160,56185],{"class":149},[143,65162,22],{"class":153},[143,65164,61935],{"class":149},[143,65166,67],{"class":153},[143,65168,61940],{"class":156},[143,65170,160],{"class":149},[143,65172,65118],{"class":163},[143,65174,65175],{"class":149},">百货\u003C\u002F",[143,65177,67],{"class":153},[143,65179,56197],{"class":149},[143,65181,22],{"class":153},[143,65183,183],{"class":149},[143,65185,65186,65188,65190,65192,65194,65196,65198,65200,65203,65205,65207,65209],{"class":145,"line":17694},[143,65187,56185],{"class":149},[143,65189,22],{"class":153},[143,65191,61935],{"class":149},[143,65193,67],{"class":153},[143,65195,61940],{"class":156},[143,65197,160],{"class":149},[143,65199,65118],{"class":163},[143,65201,65202],{"class":149},">个护\u003C\u002F",[143,65204,67],{"class":153},[143,65206,56197],{"class":149},[143,65208,22],{"class":153},[143,65210,183],{"class":149},[143,65212,65213,65215,65217,65219,65221,65223,65225,65227,65230,65232,65234,65236],{"class":145,"line":17699},[143,65214,56185],{"class":149},[143,65216,22],{"class":153},[143,65218,61935],{"class":149},[143,65220,67],{"class":153},[143,65222,61940],{"class":156},[143,65224,160],{"class":149},[143,65226,65118],{"class":163},[143,65228,65229],{"class":149},">预告\u003C\u002F",[143,65231,67],{"class":153},[143,65233,56197],{"class":149},[143,65235,22],{"class":153},[143,65237,183],{"class":149},[143,65239,65240,65242,65244],{"class":145,"line":17713},[143,65241,56290],{"class":149},[143,65243,232],{"class":153},[143,65245,183],{"class":149},[143,65247,65248,65250,65252],{"class":145,"line":17718},[143,65249,52665],{"class":149},[143,65251,614],{"class":153},[143,65253,183],{"class":149},[143,65255,65256,65258,65260,65262,65264,65267],{"class":145,"line":17724},[143,65257,52237],{"class":149},[143,65259,614],{"class":153},[143,65261,617],{"class":156},[143,65263,160],{"class":149},[143,65265,65266],{"class":163},"\"tab-content\"",[143,65268,183],{"class":149},[143,65270,65271,65273,65275,65277,65279,65282,65284,65286,65288,65290,65293,65295,65297,65299,65302,65304],{"class":145,"line":17729},[143,65272,56119],{"class":149},[143,65274,614],{"class":153},[143,65276,617],{"class":156},[143,65278,160],{"class":149},[143,65280,65281],{"class":163},"\"item active\"",[143,65283,61935],{"class":149},[143,65285,29],{"class":153},[143,65287,157],{"class":156},[143,65289,160],{"class":149},[143,65291,65292],{"class":163},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[143,65294,167],{"class":156},[143,65296,160],{"class":149},[143,65298,8552],{"class":163},[143,65300,65301],{"class":149}," \u002F>\u003C\u002F",[143,65303,614],{"class":153},[143,65305,183],{"class":149},[143,65307,65308,65310,65312,65314,65316,65318,65320,65322,65324,65326,65329,65331,65333,65335,65337,65339],{"class":145,"line":17743},[143,65309,56119],{"class":149},[143,65311,614],{"class":153},[143,65313,617],{"class":156},[143,65315,160],{"class":149},[143,65317,63506],{"class":163},[143,65319,61935],{"class":149},[143,65321,29],{"class":153},[143,65323,157],{"class":156},[143,65325,160],{"class":149},[143,65327,65328],{"class":163},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[143,65330,167],{"class":156},[143,65332,160],{"class":149},[143,65334,8552],{"class":163},[143,65336,65301],{"class":149},[143,65338,614],{"class":153},[143,65340,183],{"class":149},[143,65342,65343,65345,65347,65349,65351,65353,65355,65357,65359,65361,65364,65366,65368,65370,65372,65374],{"class":145,"line":17748},[143,65344,56119],{"class":149},[143,65346,614],{"class":153},[143,65348,617],{"class":156},[143,65350,160],{"class":149},[143,65352,63506],{"class":163},[143,65354,61935],{"class":149},[143,65356,29],{"class":153},[143,65358,157],{"class":156},[143,65360,160],{"class":149},[143,65362,65363],{"class":163},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[143,65365,167],{"class":156},[143,65367,160],{"class":149},[143,65369,8552],{"class":163},[143,65371,65301],{"class":149},[143,65373,614],{"class":153},[143,65375,183],{"class":149},[143,65377,65378,65380,65382,65384,65386,65388,65390,65392,65394,65396,65399,65401,65403,65405,65407,65409],{"class":145,"line":17753},[143,65379,56119],{"class":149},[143,65381,614],{"class":153},[143,65383,617],{"class":156},[143,65385,160],{"class":149},[143,65387,63506],{"class":163},[143,65389,61935],{"class":149},[143,65391,29],{"class":153},[143,65393,157],{"class":156},[143,65395,160],{"class":149},[143,65397,65398],{"class":163},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[143,65400,167],{"class":156},[143,65402,160],{"class":149},[143,65404,8552],{"class":163},[143,65406,65301],{"class":149},[143,65408,614],{"class":153},[143,65410,183],{"class":149},[143,65412,65413,65415,65417,65419,65421,65423,65425,65427,65429,65431,65434,65436,65438,65440,65442,65444],{"class":145,"line":17767},[143,65414,56119],{"class":149},[143,65416,614],{"class":153},[143,65418,617],{"class":156},[143,65420,160],{"class":149},[143,65422,63506],{"class":163},[143,65424,61935],{"class":149},[143,65426,29],{"class":153},[143,65428,157],{"class":156},[143,65430,160],{"class":149},[143,65432,65433],{"class":163},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[143,65435,167],{"class":156},[143,65437,160],{"class":149},[143,65439,8552],{"class":163},[143,65441,65301],{"class":149},[143,65443,614],{"class":153},[143,65445,183],{"class":149},[143,65447,65448,65450,65452],{"class":145,"line":17779},[143,65449,52665],{"class":149},[143,65451,614],{"class":153},[143,65453,183],{"class":149},[143,65455,65456,65458,65460],{"class":145,"line":17784},[143,65457,53304],{"class":149},[143,65459,614],{"class":153},[143,65461,183],{"class":149},[143,65463,65464,65466,65468],{"class":145,"line":17797},[143,65465,634],{"class":149},[143,65467,52701],{"class":153},[143,65469,183],{"class":149},[143,65471,65472],{"class":145,"line":17802},[143,65473,65474],{"class":266},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[143,65476,65477],{"class":145,"line":17807},[143,65478,65479],{"class":266},"    \u002F\u002F 1.1 获取 a 元素 \n",[143,65481,65482,65484,65487,65489,65491,65493,65495,65498],{"class":145,"line":17812},[143,65483,12121],{"class":755},[143,65485,65486],{"class":280}," as",[143,65488,14464],{"class":755},[143,65490,55281],{"class":149},[143,65492,56564],{"class":156},[143,65494,1049],{"class":149},[143,65496,65497],{"class":163},"'.tab-nav a'",[143,65499,1055],{"class":149},[143,65501,65502],{"class":145,"line":17825},[143,65503,65504],{"class":266},"    \u002F\u002F console.log(as) \n",[143,65506,65507,65509,65511,65513,65515,65517,65519,65521,65523,65526,65528,65530,65532],{"class":145,"line":17830},[143,65508,4101],{"class":755},[143,65510,2559],{"class":149},[143,65512,52735],{"class":755},[143,65514,10338],{"class":149},[143,65516,160],{"class":755},[143,65518,4993],{"class":280},[143,65520,10345],{"class":149},[143,65522,150],{"class":755},[143,65524,65525],{"class":149}," as.",[143,65527,52856],{"class":280},[143,65529,4114],{"class":149},[143,65531,3192],{"class":755},[143,65533,13342],{"class":149},[143,65535,65536],{"class":145,"line":33531},[143,65537,65538],{"class":266},"      \u002F\u002F console.log(as[i])\n",[143,65540,65541],{"class":145,"line":33537},[143,65542,65543],{"class":266},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[143,65545,65546,65549,65551,65553,65556,65558,65560],{"class":145,"line":33543},[143,65547,65548],{"class":149},"      as[i].",[143,65550,58696],{"class":156},[143,65552,1049],{"class":149},[143,65554,65555],{"class":163},"'mouseenter'",[143,65557,13335],{"class":149},[143,65559,55334],{"class":755},[143,65561,55337],{"class":149},[143,65563,65564],{"class":145,"line":33549},[143,65565,65566],{"class":266},"        \u002F\u002F console.log('鼠标经过')\n",[143,65568,65569],{"class":145,"line":33555},[143,65570,65571],{"class":266},"        \u002F\u002F 排他思想  \n",[143,65573,65574],{"class":145,"line":33566},[143,65575,65576],{"class":266},"        \u002F\u002F 干掉别人 移除类active\n",[143,65578,65579,65581,65583,65585,65588,65590,65592,65594,65597],{"class":145,"line":33572},[143,65580,52813],{"class":149},[143,65582,55284],{"class":156},[143,65584,1049],{"class":149},[143,65586,65587],{"class":163},"'.tab-nav .active'",[143,65589,57886],{"class":149},[143,65591,57889],{"class":156},[143,65593,1049],{"class":149},[143,65595,65596],{"class":163},"'active'",[143,65598,1055],{"class":149},[143,65600,65601],{"class":145,"line":33592},[143,65602,65603],{"class":266},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[143,65605,65606,65609,65612,65614,65616,65618],{"class":145,"line":33598},[143,65607,65608],{"class":280},"        this",[143,65610,65611],{"class":149},".classList.",[143,65613,6234],{"class":156},[143,65615,1049],{"class":149},[143,65617,65596],{"class":163},[143,65619,1055],{"class":149},[143,65621,65622],{"class":145,"line":33609},[143,65623,3300],{"emptyLinePlaceholder":976},[143,65625,65626],{"class":145,"line":33615},[143,65627,65628],{"class":266},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[143,65630,65631],{"class":145,"line":33621},[143,65632,65633],{"class":266},"        \u002F\u002F 干掉别人\n",[143,65635,65636,65638,65640,65642,65645,65647,65649,65651,65653],{"class":145,"line":33627},[143,65637,52813],{"class":149},[143,65639,55284],{"class":156},[143,65641,1049],{"class":149},[143,65643,65644],{"class":163},"'.tab-content .active'",[143,65646,57886],{"class":149},[143,65648,57889],{"class":156},[143,65650,1049],{"class":149},[143,65652,65596],{"class":163},[143,65654,1055],{"class":149},[143,65656,65657],{"class":145,"line":33633},[143,65658,65659],{"class":266},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[143,65661,65662,65664,65666,65668,65671,65673,65675,65677,65679,65681,65683,65685,65687],{"class":145,"line":33639},[143,65663,52813],{"class":149},[143,65665,55284],{"class":156},[143,65667,1049],{"class":149},[143,65669,65670],{"class":163},"`.tab-content .item:nth-child(${",[143,65672,1482],{"class":149},[143,65674,46464],{"class":755},[143,65676,26016],{"class":280},[143,65678,57915],{"class":163},[143,65680,57886],{"class":149},[143,65682,6234],{"class":156},[143,65684,1049],{"class":149},[143,65686,65596],{"class":163},[143,65688,1055],{"class":149},[143,65690,65691],{"class":145,"line":33645},[143,65692,3300],{"emptyLinePlaceholder":976},[143,65694,65695],{"class":145,"line":33651},[143,65696,65697],{"class":149},"      })\n",[143,65699,65700],{"class":145,"line":33671},[143,65701,3087],{"class":149},[143,65703,65704,65706,65708],{"class":145,"line":33677},[143,65705,53304],{"class":149},[143,65707,52701],{"class":153},[143,65709,183],{"class":149},[143,65711,65712,65714,65716],{"class":145,"line":33693},[143,65713,730],{"class":149},[143,65715,52688],{"class":153},[143,65717,183],{"class":149},[143,65719,65720],{"class":145,"line":33699},[143,65721,3300],{"emptyLinePlaceholder":976},[143,65723,65724,65726,65728],{"class":145,"line":33713},[143,65725,730],{"class":149},[143,65727,51533],{"class":153},[143,65729,183],{"class":149},[63,65731,65732],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[63,65734,65735],{},"在监听事件中，this指向的就是他的调用者",[63,65737,65738],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[63,65740,54606],{},[63,65742,65743],{},"(function () {",[63,65745,65746],{},"const list = document.querySelector('.xtx-elevator-list')",[63,65748,65749],{},"list.addEventListener('click', function (e) {",[63,65751,65752],{},"if (e.target.tagName === 'A') {",[63,65754,65755],{},"\u002F\u002F 排他思想",[63,65757,65758],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[63,65760,65761],{},"const old = document.querySelector('.xtx-elevator-list .active')",[63,65763,65764],{},"\u002F\u002F console.log(old);",[63,65766,65767],{},"\u002F\u002F 判断",[63,65769,65770],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[63,65772,65773],{},"if (old) old.classList.remove('active')",[63,65775,65776],{},"e.target.classList.add('active')",[63,65778,366],{},[63,65780,53351],{},[63,65782,65783],{},"})();",[58,65785,65787],{"id":65786},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[133,65789,65791],{"className":51531,"code":65790,"language":51533,"meta":138,"style":138},"\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",[140,65792,65793,65803,65807,65815,65819,65833,65847,65859,65867,65873,65883,65893,65897,65901,65908,65920,65931,65948,65961,65975,65985,65989,65993,66000,66011,66029,66039,66051,66055,66059,66066,66083,66094,66106,66110,66114,66121,66133,66137,66145,66153,66157,66165,66173,66181,66196,66240,66248,66261,66274,66287,66295,66303,66311,66339,66347,66359,66372,66385,66393,66401,66409,66435,66443,66456,66468,66481,66489,66497,66505,66531,66539,66552,66564,66577,66585,66593,66601,66606,66626,66631,66651,66656,66673,66678,66686,66691,66720,66733,66737,66741,66746,66750,66778,66783,66800,66805,66810,66815,66820,66846,66850,66854,66862,66870,66874],{"__ignoreMap":138},[143,65794,65795,65797,65799,65801],{"class":145,"line":146},[143,65796,52195],{"class":149},[143,65798,52198],{"class":153},[143,65800,52201],{"class":156},[143,65802,183],{"class":149},[143,65804,65805],{"class":145,"line":35},[143,65806,3300],{"emptyLinePlaceholder":976},[143,65808,65809,65811,65813],{"class":145,"line":46},[143,65810,150],{"class":149},[143,65812,51533],{"class":153},[143,65814,183],{"class":149},[143,65816,65817],{"class":145,"line":293},[143,65818,3300],{"emptyLinePlaceholder":976},[143,65820,65821,65823,65825,65827,65829,65831],{"class":145,"line":306},[143,65822,150],{"class":149},[143,65824,52230],{"class":153},[143,65826,52212],{"class":156},[143,65828,160],{"class":149},[143,65830,52217],{"class":163},[143,65832,183],{"class":149},[143,65834,65835,65837,65839,65841,65843,65845],{"class":145,"line":319},[143,65836,634],{"class":149},[143,65838,52240],{"class":153},[143,65840,52243],{"class":156},[143,65842,160],{"class":149},[143,65844,52248],{"class":163},[143,65846,183],{"class":149},[143,65848,65849,65851,65853,65855,65857],{"class":145,"line":332},[143,65850,634],{"class":149},[143,65852,52303],{"class":153},[143,65854,56197],{"class":149},[143,65856,52303],{"class":153},[143,65858,183],{"class":149},[143,65860,65861,65863,65865],{"class":145,"line":345},[143,65862,634],{"class":149},[143,65864,954],{"class":153},[143,65866,183],{"class":149},[143,65868,65869,65871],{"class":145,"line":701},[143,65870,7303],{"class":153},[143,65872,275],{"class":149},[143,65874,65875,65877,65879,65881],{"class":145,"line":707},[143,65876,55591],{"class":280},[143,65878,284],{"class":149},[143,65880,1234],{"class":280},[143,65882,290],{"class":149},[143,65884,65885,65887,65889,65891],{"class":145,"line":727},[143,65886,55580],{"class":280},[143,65888,284],{"class":149},[143,65890,1234],{"class":280},[143,65892,290],{"class":149},[143,65894,65895],{"class":145,"line":2518},[143,65896,3087],{"class":149},[143,65898,65899],{"class":145,"line":2524},[143,65900,3300],{"emptyLinePlaceholder":976},[143,65902,65903,65906],{"class":145,"line":2529},[143,65904,65905],{"class":153},"    table",[143,65907,275],{"class":149},[143,65909,65910,65913,65915,65918],{"class":145,"line":2543},[143,65911,65912],{"class":280},"      border-collapse",[143,65914,284],{"class":149},[143,65916,65917],{"class":280},"collapse",[143,65919,290],{"class":149},[143,65921,65922,65925,65927,65929],{"class":145,"line":2548},[143,65923,65924],{"class":280},"      border-spacing",[143,65926,284],{"class":149},[143,65928,1234],{"class":280},[143,65930,290],{"class":149},[143,65932,65933,65935,65937,65939,65941,65943,65946],{"class":145,"line":2554},[143,65934,62860],{"class":280},[143,65936,284],{"class":149},[143,65938,771],{"class":280},[143,65940,774],{"class":755},[143,65942,777],{"class":280},[143,65944,65945],{"class":280}," #c0c0c0",[143,65947,290],{"class":149},[143,65949,65950,65952,65954,65957,65959],{"class":145,"line":2575},[143,65951,55656],{"class":280},[143,65953,284],{"class":149},[143,65955,65956],{"class":280},"500",[143,65958,774],{"class":755},[143,65960,290],{"class":149},[143,65962,65963,65965,65967,65969,65971,65973],{"class":145,"line":2580},[143,65964,55591],{"class":280},[143,65966,284],{"class":149},[143,65968,1352],{"class":280},[143,65970,774],{"class":755},[143,65972,52448],{"class":280},[143,65974,290],{"class":149},[143,65976,65977,65979,65981,65983],{"class":145,"line":2594},[143,65978,58169],{"class":280},[143,65980,284],{"class":149},[143,65982,327],{"class":280},[143,65984,290],{"class":149},[143,65986,65987],{"class":145,"line":2599},[143,65988,3087],{"class":149},[143,65990,65991],{"class":145,"line":2628},[143,65992,3300],{"emptyLinePlaceholder":976},[143,65994,65995,65998],{"class":145,"line":2633},[143,65996,65997],{"class":153},"    th",[143,65999,275],{"class":149},[143,66001,66002,66004,66006,66009],{"class":145,"line":2650},[143,66003,55769],{"class":280},[143,66005,284],{"class":149},[143,66007,66008],{"class":280},"#09c",[143,66010,290],{"class":149},[143,66012,66013,66016,66018,66020,66022,66024,66027],{"class":145,"line":2655},[143,66014,66015],{"class":280},"      font",[143,66017,284],{"class":149},[143,66019,63222],{"class":280},[143,66021,64955],{"class":280},[143,66023,774],{"class":755},[143,66025,66026],{"class":163}," \"微软雅黑\"",[143,66028,290],{"class":149},[143,66030,66031,66033,66035,66037],{"class":145,"line":2660},[143,66032,58299],{"class":280},[143,66034,284],{"class":149},[143,66036,61725],{"class":280},[143,66038,290],{"class":149},[143,66040,66041,66043,66045,66047,66049],{"class":145,"line":2665},[143,66042,55670],{"class":280},[143,66044,284],{"class":149},[143,66046,1841],{"class":280},[143,66048,774],{"class":755},[143,66050,290],{"class":149},[143,66052,66053],{"class":145,"line":2679},[143,66054,3087],{"class":149},[143,66056,66057],{"class":145,"line":2684},[143,66058,3300],{"emptyLinePlaceholder":976},[143,66060,66061,66064],{"class":145,"line":3477},[143,66062,66063],{"class":153},"    td",[143,66065,275],{"class":149},[143,66067,66068,66070,66072,66074,66076,66078,66081],{"class":145,"line":3491},[143,66069,62860],{"class":280},[143,66071,284],{"class":149},[143,66073,771],{"class":280},[143,66075,774],{"class":755},[143,66077,777],{"class":280},[143,66079,66080],{"class":280}," #d0d0d0",[143,66082,290],{"class":149},[143,66084,66085,66087,66089,66092],{"class":145,"line":3499},[143,66086,58299],{"class":280},[143,66088,284],{"class":149},[143,66090,66091],{"class":280},"#404060",[143,66093,290],{"class":149},[143,66095,66096,66098,66100,66102,66104],{"class":145,"line":3504},[143,66097,55580],{"class":280},[143,66099,284],{"class":149},[143,66101,1487],{"class":280},[143,66103,774],{"class":755},[143,66105,290],{"class":149},[143,66107,66108],{"class":145,"line":3510},[143,66109,3087],{"class":149},[143,66111,66112],{"class":145,"line":3516},[143,66113,3300],{"emptyLinePlaceholder":976},[143,66115,66116,66119],{"class":145,"line":3521},[143,66117,66118],{"class":156},"    .allCheck",[143,66120,275],{"class":149},[143,66122,66123,66125,66127,66129,66131],{"class":145,"line":8848},[143,66124,55656],{"class":280},[143,66126,284],{"class":149},[143,66128,1653],{"class":280},[143,66130,774],{"class":755},[143,66132,290],{"class":149},[143,66134,66135],{"class":145,"line":8872},[143,66136,3087],{"class":149},[143,66138,66139,66141,66143],{"class":145,"line":8877},[143,66140,53304],{"class":149},[143,66142,954],{"class":153},[143,66144,183],{"class":149},[143,66146,66147,66149,66151],{"class":145,"line":8883},[143,66148,730],{"class":149},[143,66150,52230],{"class":153},[143,66152,183],{"class":149},[143,66154,66155],{"class":145,"line":8910},[143,66156,3300],{"emptyLinePlaceholder":976},[143,66158,66159,66161,66163],{"class":145,"line":8915},[143,66160,150],{"class":149},[143,66162,52688],{"class":153},[143,66164,183],{"class":149},[143,66166,66167,66169,66171],{"class":145,"line":8921},[143,66168,634],{"class":149},[143,66170,1181],{"class":153},[143,66172,183],{"class":149},[143,66174,66175,66177,66179],{"class":145,"line":8933},[143,66176,52237],{"class":149},[143,66178,1187],{"class":153},[143,66180,183],{"class":149},[143,66182,66183,66185,66187,66189,66191,66194],{"class":145,"line":8945},[143,66184,56119],{"class":149},[143,66186,1190],{"class":153},[143,66188,617],{"class":156},[143,66190,160],{"class":149},[143,66192,66193],{"class":163},"\"allCheck\"",[143,66195,183],{"class":149},[143,66197,66198,66200,66202,66204,66206,66208,66210,66212,66214,66216,66218,66221,66224,66226,66228,66230,66233,66236,66238],{"class":145,"line":8957},[143,66199,56185],{"class":149},[143,66201,746],{"class":153},[143,66203,54709],{"class":156},[143,66205,160],{"class":149},[143,66207,54714],{"class":163},[143,66209,15819],{"class":156},[143,66211,160],{"class":149},[143,66213,8552],{"class":163},[143,66215,15858],{"class":156},[143,66217,160],{"class":149},[143,66219,66220],{"class":163},"\"checkAll\"",[143,66222,66223],{"class":149},"> \u003C",[143,66225,143],{"class":153},[143,66227,617],{"class":156},[143,66229,160],{"class":149},[143,66231,66232],{"class":163},"\"all\"",[143,66234,66235],{"class":149},">全选\u003C\u002F",[143,66237,143],{"class":153},[143,66239,183],{"class":149},[143,66241,66242,66244,66246],{"class":145,"line":10616},[143,66243,56290],{"class":149},[143,66245,1190],{"class":153},[143,66247,183],{"class":149},[143,66249,66250,66252,66254,66257,66259],{"class":145,"line":10641},[143,66251,56119],{"class":149},[143,66253,1190],{"class":153},[143,66255,66256],{"class":149},">商品\u003C\u002F",[143,66258,1190],{"class":153},[143,66260,183],{"class":149},[143,66262,66263,66265,66267,66270,66272],{"class":145,"line":10664},[143,66264,56119],{"class":149},[143,66266,1190],{"class":153},[143,66268,66269],{"class":149},">商家\u003C\u002F",[143,66271,1190],{"class":153},[143,66273,183],{"class":149},[143,66275,66276,66278,66280,66283,66285],{"class":145,"line":10688},[143,66277,56119],{"class":149},[143,66279,1190],{"class":153},[143,66281,66282],{"class":149},">价格\u003C\u002F",[143,66284,1190],{"class":153},[143,66286,183],{"class":149},[143,66288,66289,66291,66293],{"class":145,"line":10693},[143,66290,52665],{"class":149},[143,66292,1187],{"class":153},[143,66294,183],{"class":149},[143,66296,66297,66299,66301],{"class":145,"line":10698},[143,66298,52237],{"class":149},[143,66300,1187],{"class":153},[143,66302,183],{"class":149},[143,66304,66305,66307,66309],{"class":145,"line":10703},[143,66306,56119],{"class":149},[143,66308,1232],{"class":153},[143,66310,183],{"class":149},[143,66312,66313,66315,66317,66319,66321,66323,66325,66327,66330,66332,66334,66337],{"class":145,"line":10712},[143,66314,56185],{"class":149},[143,66316,746],{"class":153},[143,66318,54709],{"class":156},[143,66320,160],{"class":149},[143,66322,54714],{"class":163},[143,66324,15819],{"class":156},[143,66326,160],{"class":149},[143,66328,66329],{"class":163},"\"check\"",[143,66331,617],{"class":156},[143,66333,160],{"class":149},[143,66335,66336],{"class":163},"\"ck\"",[143,66338,183],{"class":149},[143,66340,66341,66343,66345],{"class":145,"line":10717},[143,66342,56290],{"class":149},[143,66344,1232],{"class":153},[143,66346,183],{"class":149},[143,66348,66349,66351,66353,66355,66357],{"class":145,"line":10723},[143,66350,56119],{"class":149},[143,66352,1232],{"class":153},[143,66354,62056],{"class":149},[143,66356,1232],{"class":153},[143,66358,183],{"class":149},[143,66360,66361,66363,66365,66368,66370],{"class":145,"line":10744},[143,66362,56119],{"class":149},[143,66364,1232],{"class":153},[143,66366,66367],{"class":149},">小米\u003C\u002F",[143,66369,1232],{"class":153},[143,66371,183],{"class":149},[143,66373,66374,66376,66378,66381,66383],{"class":145,"line":10750},[143,66375,56119],{"class":149},[143,66377,1232],{"class":153},[143,66379,66380],{"class":149},">￥1999\u003C\u002F",[143,66382,1232],{"class":153},[143,66384,183],{"class":149},[143,66386,66387,66389,66391],{"class":145,"line":10764},[143,66388,52665],{"class":149},[143,66390,1187],{"class":153},[143,66392,183],{"class":149},[143,66394,66395,66397,66399],{"class":145,"line":10770},[143,66396,52237],{"class":149},[143,66398,1187],{"class":153},[143,66400,183],{"class":149},[143,66402,66403,66405,66407],{"class":145,"line":10797},[143,66404,56119],{"class":149},[143,66406,1232],{"class":153},[143,66408,183],{"class":149},[143,66410,66411,66413,66415,66417,66419,66421,66423,66425,66427,66429,66431,66433],{"class":145,"line":10806},[143,66412,56185],{"class":149},[143,66414,746],{"class":153},[143,66416,54709],{"class":156},[143,66418,160],{"class":149},[143,66420,54714],{"class":163},[143,66422,15819],{"class":156},[143,66424,160],{"class":149},[143,66426,66329],{"class":163},[143,66428,617],{"class":156},[143,66430,160],{"class":149},[143,66432,66336],{"class":163},[143,66434,183],{"class":149},[143,66436,66437,66439,66441],{"class":145,"line":10812},[143,66438,56290],{"class":149},[143,66440,1232],{"class":153},[143,66442,183],{"class":149},[143,66444,66445,66447,66449,66452,66454],{"class":145,"line":10820},[143,66446,56119],{"class":149},[143,66448,1232],{"class":153},[143,66450,66451],{"class":149},">小米净水器\u003C\u002F",[143,66453,1232],{"class":153},[143,66455,183],{"class":149},[143,66457,66458,66460,66462,66464,66466],{"class":145,"line":10825},[143,66459,56119],{"class":149},[143,66461,1232],{"class":153},[143,66463,66367],{"class":149},[143,66465,1232],{"class":153},[143,66467,183],{"class":149},[143,66469,66470,66472,66474,66477,66479],{"class":145,"line":17502},[143,66471,56119],{"class":149},[143,66473,1232],{"class":153},[143,66475,66476],{"class":149},">￥4999\u003C\u002F",[143,66478,1232],{"class":153},[143,66480,183],{"class":149},[143,66482,66483,66485,66487],{"class":145,"line":17508},[143,66484,52665],{"class":149},[143,66486,1187],{"class":153},[143,66488,183],{"class":149},[143,66490,66491,66493,66495],{"class":145,"line":17531},[143,66492,52237],{"class":149},[143,66494,1187],{"class":153},[143,66496,183],{"class":149},[143,66498,66499,66501,66503],{"class":145,"line":17537},[143,66500,56119],{"class":149},[143,66502,1232],{"class":153},[143,66504,183],{"class":149},[143,66506,66507,66509,66511,66513,66515,66517,66519,66521,66523,66525,66527,66529],{"class":145,"line":17560},[143,66508,56185],{"class":149},[143,66510,746],{"class":153},[143,66512,54709],{"class":156},[143,66514,160],{"class":149},[143,66516,54714],{"class":163},[143,66518,15819],{"class":156},[143,66520,160],{"class":149},[143,66522,66329],{"class":163},[143,66524,617],{"class":156},[143,66526,160],{"class":149},[143,66528,66336],{"class":163},[143,66530,183],{"class":149},[143,66532,66533,66535,66537],{"class":145,"line":17574},[143,66534,56290],{"class":149},[143,66536,1232],{"class":153},[143,66538,183],{"class":149},[143,66540,66541,66543,66545,66548,66550],{"class":145,"line":17594},[143,66542,56119],{"class":149},[143,66544,1232],{"class":153},[143,66546,66547],{"class":149},">小米电视\u003C\u002F",[143,66549,1232],{"class":153},[143,66551,183],{"class":149},[143,66553,66554,66556,66558,66560,66562],{"class":145,"line":17600},[143,66555,56119],{"class":149},[143,66557,1232],{"class":153},[143,66559,66367],{"class":149},[143,66561,1232],{"class":153},[143,66563,183],{"class":149},[143,66565,66566,66568,66570,66573,66575],{"class":145,"line":17611},[143,66567,56119],{"class":149},[143,66569,1232],{"class":153},[143,66571,66572],{"class":149},">￥5999\u003C\u002F",[143,66574,1232],{"class":153},[143,66576,183],{"class":149},[143,66578,66579,66581,66583],{"class":145,"line":17634},[143,66580,52665],{"class":149},[143,66582,1187],{"class":153},[143,66584,183],{"class":149},[143,66586,66587,66589,66591],{"class":145,"line":17656},[143,66588,53304],{"class":149},[143,66590,1181],{"class":153},[143,66592,183],{"class":149},[143,66594,66595,66597,66599],{"class":145,"line":17661},[143,66596,634],{"class":149},[143,66598,52701],{"class":153},[143,66600,183],{"class":149},[143,66602,66603],{"class":145,"line":17667},[143,66604,66605],{"class":266},"    \u002F\u002F 1. 获取大复选框\n",[143,66607,66608,66610,66613,66615,66617,66619,66621,66624],{"class":145,"line":17681},[143,66609,12121],{"class":755},[143,66611,66612],{"class":280}," checkAll",[143,66614,14464],{"class":755},[143,66616,55281],{"class":149},[143,66618,55284],{"class":156},[143,66620,1049],{"class":149},[143,66622,66623],{"class":163},"'#checkAll'",[143,66625,1055],{"class":149},[143,66627,66628],{"class":145,"line":17694},[143,66629,66630],{"class":266},"    \u002F\u002F 2. 获取所有的小复选框\n",[143,66632,66633,66635,66638,66640,66642,66644,66646,66649],{"class":145,"line":17699},[143,66634,12121],{"class":755},[143,66636,66637],{"class":280}," cks",[143,66639,14464],{"class":755},[143,66641,55281],{"class":149},[143,66643,56564],{"class":156},[143,66645,1049],{"class":149},[143,66647,66648],{"class":163},"'.ck'",[143,66650,1055],{"class":149},[143,66652,66653],{"class":145,"line":17713},[143,66654,66655],{"class":266},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[143,66657,66658,66661,66663,66665,66667,66669,66671],{"class":145,"line":17718},[143,66659,66660],{"class":149},"    checkAll.",[143,66662,58696],{"class":156},[143,66664,1049],{"class":149},[143,66666,58701],{"class":163},[143,66668,13335],{"class":149},[143,66670,55334],{"class":755},[143,66672,55337],{"class":149},[143,66674,66675],{"class":145,"line":17724},[143,66676,66677],{"class":266},"      \u002F\u002F 得到当前大复选框的选中状态\n",[143,66679,66680,66683],{"class":145,"line":17729},[143,66681,66682],{"class":266},"      \u002F\u002F console.log(checkAll.checked)",[143,66684,66685],{"class":266},"  \u002F\u002F 得到 是 true 或者是 false\n",[143,66687,66688],{"class":145,"line":17743},[143,66689,66690],{"class":266},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[143,66692,66693,66695,66697,66699,66701,66703,66705,66707,66709,66712,66714,66716,66718],{"class":145,"line":17748},[143,66694,53171],{"class":755},[143,66696,2559],{"class":149},[143,66698,52735],{"class":755},[143,66700,10338],{"class":149},[143,66702,160],{"class":755},[143,66704,4993],{"class":280},[143,66706,10345],{"class":149},[143,66708,150],{"class":755},[143,66710,66711],{"class":149}," cks.",[143,66713,52856],{"class":280},[143,66715,4114],{"class":149},[143,66717,3192],{"class":755},[143,66719,13342],{"class":149},[143,66721,66722,66725,66727,66730],{"class":145,"line":17753},[143,66723,66724],{"class":149},"        cks[i].checked ",[143,66726,160],{"class":755},[143,66728,66729],{"class":280}," this",[143,66731,66732],{"class":149},".checked\n",[143,66734,66735],{"class":145,"line":17767},[143,66736,53285],{"class":149},[143,66738,66739],{"class":145,"line":17779},[143,66740,34359],{"class":149},[143,66742,66743],{"class":145,"line":17784},[143,66744,66745],{"class":266},"    \u002F\u002F 5. 小复选框控制大复选框\n",[143,66747,66748],{"class":145,"line":17797},[143,66749,3300],{"emptyLinePlaceholder":976},[143,66751,66752,66754,66756,66758,66760,66762,66764,66766,66768,66770,66772,66774,66776],{"class":145,"line":17802},[143,66753,4101],{"class":755},[143,66755,2559],{"class":149},[143,66757,52735],{"class":755},[143,66759,10338],{"class":149},[143,66761,160],{"class":755},[143,66763,4993],{"class":280},[143,66765,10345],{"class":149},[143,66767,150],{"class":755},[143,66769,66711],{"class":149},[143,66771,52856],{"class":280},[143,66773,4114],{"class":149},[143,66775,3192],{"class":755},[143,66777,13342],{"class":149},[143,66779,66780],{"class":145,"line":17807},[143,66781,66782],{"class":266},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[143,66784,66785,66788,66790,66792,66794,66796,66798],{"class":145,"line":17812},[143,66786,66787],{"class":149},"      cks[i].",[143,66789,58696],{"class":156},[143,66791,1049],{"class":149},[143,66793,58701],{"class":163},[143,66795,13335],{"class":149},[143,66797,55334],{"class":755},[143,66799,55337],{"class":149},[143,66801,66802],{"class":145,"line":17825},[143,66803,66804],{"class":266},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[143,66806,66807],{"class":145,"line":17830},[143,66808,66809],{"class":266},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[143,66811,66812],{"class":145,"line":33531},[143,66813,66814],{"class":266},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[143,66816,66817],{"class":145,"line":33537},[143,66818,66819],{"class":266},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[143,66821,66822,66825,66827,66829,66831,66833,66836,66838,66840,66842,66844],{"class":145,"line":33543},[143,66823,66824],{"class":149},"        checkAll.checked ",[143,66826,160],{"class":755},[143,66828,55281],{"class":149},[143,66830,56564],{"class":156},[143,66832,1049],{"class":149},[143,66834,66835],{"class":163},"'.ck:checked'",[143,66837,31724],{"class":149},[143,66839,52856],{"class":280},[143,66841,58789],{"class":755},[143,66843,66711],{"class":149},[143,66845,56714],{"class":280},[143,66847,66848],{"class":145,"line":33549},[143,66849,65697],{"class":149},[143,66851,66852],{"class":145,"line":33555},[143,66853,3087],{"class":149},[143,66855,66856,66858,66860],{"class":145,"line":33566},[143,66857,53304],{"class":149},[143,66859,52701],{"class":153},[143,66861,183],{"class":149},[143,66863,66864,66866,66868],{"class":145,"line":33572},[143,66865,730],{"class":149},[143,66867,52688],{"class":153},[143,66869,183],{"class":149},[143,66871,66872],{"class":145,"line":33592},[143,66873,3300],{"emptyLinePlaceholder":976},[143,66875,66876,66878,66880],{"class":145,"line":33598},[143,66877,730],{"class":149},[143,66879,51533],{"class":153},[143,66881,183],{"class":149},[63,66883,66884],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[63,66886,66887],{},"用好之间比较得到的布尔值！！！",[63,66889,66890,66891,66894,66895,2559,66898,1625,66900,66903],{},"在 JS 里访问的时候，",[140,66892,66893],{},"checkbox.checked"," 是一个 ",[25,66896,66897],{},"布尔值",[140,66899,2266],{},[140,66901,66902],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[63,66905,66906,66907,66910,66911],{},"HTML 的 ",[140,66908,66909],{},"checked=\"checked\""," 只是 ",[25,66912,66913,66914,66917],{},"初始值；JS 的 ",[140,66915,66916],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[63,66919,66920],{},"：checked是一个伪类选择器",[63,66922,66923],{},[29,66924],{"alt":138,"src":66925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[63,66927,66928,66931],{},[66929,66930],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[63,66933,66934],{},[29,66935],{"alt":138,"src":66936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66938,66940],{"id":66939},"_33-dom事件进阶","3.3 DOM事件进阶",[58,66942,66944],{"id":66943},"_331-事件流","3.3.1 事件流",[63,66946,66947],{},[29,66948],{"alt":138,"src":66949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22896,66951,66953],{"id":66952},"_3311-事件捕获","3.3.1.1 事件捕获",[63,66955,66956],{},[29,66957],{"alt":138,"src":66958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[133,66960,66962],{"className":51531,"code":66961,"language":51533,"meta":138,"style":138},"\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",[140,66963,66964,66974,66988,66992,67000,67014,67034,67046,67054,67061,67073,67085,67095,67099,67103,67110,67122,67134,67144,67148,67156,67164,67168,67176,67191,67210,67218,67226,67246,67266,67282,67293,67301,67318,67329,67337,67354,67365,67373,67381,67389,67393],{"__ignoreMap":138},[143,66965,66966,66968,66970,66972],{"class":145,"line":146},[143,66967,52195],{"class":149},[143,66969,52198],{"class":153},[143,66971,52201],{"class":156},[143,66973,183],{"class":149},[143,66975,66976,66978,66980,66982,66984,66986],{"class":145,"line":35},[143,66977,150],{"class":149},[143,66979,51533],{"class":153},[143,66981,52212],{"class":156},[143,66983,160],{"class":149},[143,66985,52217],{"class":163},[143,66987,183],{"class":149},[143,66989,66990],{"class":145,"line":46},[143,66991,3300],{"emptyLinePlaceholder":976},[143,66993,66994,66996,66998],{"class":145,"line":293},[143,66995,150],{"class":149},[143,66997,52230],{"class":153},[143,66999,183],{"class":149},[143,67001,67002,67004,67006,67008,67010,67012],{"class":145,"line":306},[143,67003,634],{"class":149},[143,67005,52240],{"class":153},[143,67007,52243],{"class":156},[143,67009,160],{"class":149},[143,67011,52248],{"class":163},[143,67013,183],{"class":149},[143,67015,67016,67018,67020,67022,67024,67026,67028,67030,67032],{"class":145,"line":319},[143,67017,634],{"class":149},[143,67019,52240],{"class":153},[143,67021,15819],{"class":156},[143,67023,160],{"class":149},[143,67025,52287],{"class":163},[143,67027,52267],{"class":156},[143,67029,160],{"class":149},[143,67031,52294],{"class":163},[143,67033,183],{"class":149},[143,67035,67036,67038,67040,67042,67044],{"class":145,"line":332},[143,67037,634],{"class":149},[143,67039,52303],{"class":153},[143,67041,52306],{"class":149},[143,67043,52303],{"class":153},[143,67045,183],{"class":149},[143,67047,67048,67050,67052],{"class":145,"line":345},[143,67049,634],{"class":149},[143,67051,954],{"class":153},[143,67053,183],{"class":149},[143,67055,67056,67059],{"class":145,"line":701},[143,67057,67058],{"class":156},"    .father",[143,67060,275],{"class":149},[143,67062,67063,67065,67067,67069,67071],{"class":145,"line":707},[143,67064,55656],{"class":280},[143,67066,284],{"class":149},[143,67068,65956],{"class":280},[143,67070,774],{"class":755},[143,67072,290],{"class":149},[143,67074,67075,67077,67079,67081,67083],{"class":145,"line":727},[143,67076,55670],{"class":280},[143,67078,284],{"class":149},[143,67080,65956],{"class":280},[143,67082,774],{"class":755},[143,67084,290],{"class":149},[143,67086,67087,67089,67091,67093],{"class":145,"line":2518},[143,67088,55769],{"class":280},[143,67090,284],{"class":149},[143,67092,52535],{"class":280},[143,67094,290],{"class":149},[143,67096,67097],{"class":145,"line":2524},[143,67098,3087],{"class":149},[143,67100,67101],{"class":145,"line":2529},[143,67102,3300],{"emptyLinePlaceholder":976},[143,67104,67105,67108],{"class":145,"line":2543},[143,67106,67107],{"class":156},"    .son",[143,67109,275],{"class":149},[143,67111,67112,67114,67116,67118,67120],{"class":145,"line":2548},[143,67113,55656],{"class":280},[143,67115,284],{"class":149},[143,67117,2623],{"class":280},[143,67119,774],{"class":755},[143,67121,290],{"class":149},[143,67123,67124,67126,67128,67130,67132],{"class":145,"line":2554},[143,67125,55670],{"class":280},[143,67127,284],{"class":149},[143,67129,2623],{"class":280},[143,67131,774],{"class":755},[143,67133,290],{"class":149},[143,67135,67136,67138,67140,67142],{"class":145,"line":2575},[143,67137,55769],{"class":280},[143,67139,284],{"class":149},[143,67141,55774],{"class":280},[143,67143,290],{"class":149},[143,67145,67146],{"class":145,"line":2580},[143,67147,3087],{"class":149},[143,67149,67150,67152,67154],{"class":145,"line":2594},[143,67151,53304],{"class":149},[143,67153,954],{"class":153},[143,67155,183],{"class":149},[143,67157,67158,67160,67162],{"class":145,"line":2599},[143,67159,730],{"class":149},[143,67161,52230],{"class":153},[143,67163,183],{"class":149},[143,67165,67166],{"class":145,"line":2628},[143,67167,3300],{"emptyLinePlaceholder":976},[143,67169,67170,67172,67174],{"class":145,"line":2633},[143,67171,150],{"class":149},[143,67173,52688],{"class":153},[143,67175,183],{"class":149},[143,67177,67178,67180,67182,67184,67186,67189],{"class":145,"line":2650},[143,67179,634],{"class":149},[143,67181,614],{"class":153},[143,67183,617],{"class":156},[143,67185,160],{"class":149},[143,67187,67188],{"class":163},"\"father\"",[143,67190,183],{"class":149},[143,67192,67193,67195,67197,67199,67201,67204,67206,67208],{"class":145,"line":2655},[143,67194,52237],{"class":149},[143,67196,614],{"class":153},[143,67198,617],{"class":156},[143,67200,160],{"class":149},[143,67202,67203],{"class":163},"\"son\"",[143,67205,56197],{"class":149},[143,67207,614],{"class":153},[143,67209,183],{"class":149},[143,67211,67212,67214,67216],{"class":145,"line":2660},[143,67213,53304],{"class":149},[143,67215,614],{"class":153},[143,67217,183],{"class":149},[143,67219,67220,67222,67224],{"class":145,"line":2665},[143,67221,634],{"class":149},[143,67223,52701],{"class":153},[143,67225,183],{"class":149},[143,67227,67228,67230,67233,67235,67237,67239,67241,67244],{"class":145,"line":2679},[143,67229,12121],{"class":755},[143,67231,67232],{"class":280}," fa",[143,67234,14464],{"class":755},[143,67236,55281],{"class":149},[143,67238,55284],{"class":156},[143,67240,1049],{"class":149},[143,67242,67243],{"class":163},"'.father'",[143,67245,1055],{"class":149},[143,67247,67248,67250,67253,67255,67257,67259,67261,67264],{"class":145,"line":2684},[143,67249,12121],{"class":755},[143,67251,67252],{"class":280}," son",[143,67254,14464],{"class":755},[143,67256,55281],{"class":149},[143,67258,55284],{"class":156},[143,67260,1049],{"class":149},[143,67262,67263],{"class":163},"'.son'",[143,67265,1055],{"class":149},[143,67267,67268,67270,67272,67274,67276,67278,67280],{"class":145,"line":3477},[143,67269,53294],{"class":149},[143,67271,58696],{"class":156},[143,67273,1049],{"class":149},[143,67275,58701],{"class":163},[143,67277,13335],{"class":149},[143,67279,55334],{"class":755},[143,67281,55337],{"class":149},[143,67283,67284,67286,67288,67291],{"class":145,"line":3491},[143,67285,59808],{"class":156},[143,67287,1049],{"class":149},[143,67289,67290],{"class":163},"'woshiu1'",[143,67292,1055],{"class":149},[143,67294,67295,67297,67299],{"class":145,"line":3499},[143,67296,55420],{"class":149},[143,67298,2266],{"class":280},[143,67300,1055],{"class":149},[143,67302,67303,67306,67308,67310,67312,67314,67316],{"class":145,"line":3504},[143,67304,67305],{"class":149},"    fa.",[143,67307,58696],{"class":156},[143,67309,1049],{"class":149},[143,67311,58701],{"class":163},[143,67313,13335],{"class":149},[143,67315,55334],{"class":755},[143,67317,55337],{"class":149},[143,67319,67320,67322,67324,67327],{"class":145,"line":3510},[143,67321,59808],{"class":156},[143,67323,1049],{"class":149},[143,67325,67326],{"class":163},"'1'",[143,67328,1055],{"class":149},[143,67330,67331,67333,67335],{"class":145,"line":3516},[143,67332,55420],{"class":149},[143,67334,2266],{"class":280},[143,67336,1055],{"class":149},[143,67338,67339,67342,67344,67346,67348,67350,67352],{"class":145,"line":3521},[143,67340,67341],{"class":149},"    son.",[143,67343,58696],{"class":156},[143,67345,1049],{"class":149},[143,67347,58701],{"class":163},[143,67349,13335],{"class":149},[143,67351,55334],{"class":755},[143,67353,55337],{"class":149},[143,67355,67356,67358,67360,67363],{"class":145,"line":8848},[143,67357,59808],{"class":156},[143,67359,1049],{"class":149},[143,67361,67362],{"class":163},"'2'",[143,67364,1055],{"class":149},[143,67366,67367,67369,67371],{"class":145,"line":8872},[143,67368,55420],{"class":149},[143,67370,2266],{"class":280},[143,67372,1055],{"class":149},[143,67374,67375,67377,67379],{"class":145,"line":8877},[143,67376,53304],{"class":149},[143,67378,52701],{"class":153},[143,67380,183],{"class":149},[143,67382,67383,67385,67387],{"class":145,"line":8883},[143,67384,730],{"class":149},[143,67386,52688],{"class":153},[143,67388,183],{"class":149},[143,67390,67391],{"class":145,"line":8910},[143,67392,3300],{"emptyLinePlaceholder":976},[143,67394,67395,67397,67399],{"class":145,"line":8915},[143,67396,730],{"class":149},[143,67398,51533],{"class":153},[143,67400,183],{"class":149},[63,67402,67403],{},[29,67404],{"alt":138,"src":67405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[63,67407,67408],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22896,67410,67412],{"id":67411},"_3312-事件冒泡","3.3.1.2 事件冒泡",[63,67414,67415],{},[29,67416],{"alt":138,"src":67417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[63,67419,67420],{},"反着来",[63,67422,67423],{},"注意是同名事件，比如都是‘click’",[22896,67425,67427],{"id":67426},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[63,67429,67430],{},[29,67431],{"alt":138,"src":67432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22896,67434,67436],{"id":67435},"_3314-解绑事件","3.3.1.4 解绑事件",[63,67438,67439],{},[29,67440],{"alt":138,"src":67441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[63,67443,67444],{},[29,67445],{"alt":138,"src":67446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22896,67448,67450],{"id":67449},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[19,67452,67453],{},[22,67454,67455],{},"事件类型的区别",[63,67457,67458],{},[29,67459],{"alt":138,"src":67460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[63,67462,67463],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[19,67465,67466],{"start":35},[22,67467,67468],{},"注册事件的区别",[63,67470,67471],{},[29,67472],{"alt":138,"src":67473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22896,67475,67477],{"id":67476},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[63,67479,67480],{},[29,67481],{"alt":138,"src":67482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[63,67484,67485],{},[29,67486],{"alt":138,"src":67487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[133,67489,67491],{"className":53954,"code":67490,"language":53956,"meta":138,"style":138},"\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",[140,67492,67493,67501,67518,67541,67549,67554,67559,67564,67568,67576,67584],{"__ignoreMap":138},[143,67494,67495,67497,67499],{"class":145,"line":146},[143,67496,150],{"class":149},[143,67498,52688],{"class":153},[143,67500,183],{"class":149},[143,67502,67503,67505,67508,67511,67513,67516],{"class":145,"line":35},[143,67504,634],{"class":149},[143,67506,67507],{"class":153},"form",[143,67509,67510],{"class":156}," action",[143,67512,160],{"class":149},[143,67514,67515],{"class":163},"\"http:\u002F\u002Fwww.itcast.cn\"",[143,67517,183],{"class":149},[143,67519,67520,67522,67524,67526,67528,67531,67534,67536,67539],{"class":145,"line":46},[143,67521,52237],{"class":149},[143,67523,746],{"class":153},[143,67525,54709],{"class":156},[143,67527,160],{"class":149},[143,67529,67530],{"class":163},"\"submit\"",[143,67532,67533],{"class":156}," value",[143,67535,160],{"class":149},[143,67537,67538],{"class":163},"\"免费注册\"",[143,67540,183],{"class":149},[143,67542,67543,67545,67547],{"class":145,"line":293},[143,67544,52237],{"class":149},[143,67546,52701],{"class":153},[143,67548,183],{"class":149},[143,67550,67551],{"class":145,"line":306},[143,67552,67553],{"class":149},"      const form = document.querySelector('form')\n",[143,67555,67556],{"class":145,"line":319},[143,67557,67558],{"class":149},"      form.addEventListener('submit', function (e) {\n",[143,67560,67561],{"class":145,"line":332},[143,67562,67563],{"class":149},"        e.preventDefault()\n",[143,67565,67566],{"class":145,"line":345},[143,67567,65697],{"class":149},[143,67569,67570,67572,67574],{"class":145,"line":701},[143,67571,52665],{"class":149},[143,67573,52701],{"class":153},[143,67575,183],{"class":149},[143,67577,67578,67580,67582],{"class":145,"line":707},[143,67579,53304],{"class":149},[143,67581,67507],{"class":153},[143,67583,183],{"class":149},[143,67585,67586,67588,67590],{"class":145,"line":727},[143,67587,730],{"class":149},[143,67589,52688],{"class":153},[143,67591,183],{"class":149},[63,67593,67594],{},"点击不在跳转！！！",[58,67596,67598],{"id":67597},"_332-事件委托","3.3.2 事件委托",[63,67600,67601],{},[29,67602],{"alt":138,"src":67603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[133,67605,67607],{"className":51531,"code":67606,"language":51533,"meta":138,"style":138},"\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",[140,67608,67609,67619,67633,67637,67645,67659,67679,67691,67699,67703,67711,67719,67731,67743,67755,67767,67779,67792,67800,67808,67813,67832,67853,67858,67863,67868,67873,67882,67886,67896,67900,67905,67910,67924,67934,67938,67942,67950,67958,67962],{"__ignoreMap":138},[143,67610,67611,67613,67615,67617],{"class":145,"line":146},[143,67612,52195],{"class":149},[143,67614,52198],{"class":153},[143,67616,52201],{"class":156},[143,67618,183],{"class":149},[143,67620,67621,67623,67625,67627,67629,67631],{"class":145,"line":35},[143,67622,150],{"class":149},[143,67624,51533],{"class":153},[143,67626,52212],{"class":156},[143,67628,160],{"class":149},[143,67630,52217],{"class":163},[143,67632,183],{"class":149},[143,67634,67635],{"class":145,"line":46},[143,67636,3300],{"emptyLinePlaceholder":976},[143,67638,67639,67641,67643],{"class":145,"line":293},[143,67640,150],{"class":149},[143,67642,52230],{"class":153},[143,67644,183],{"class":149},[143,67646,67647,67649,67651,67653,67655,67657],{"class":145,"line":306},[143,67648,634],{"class":149},[143,67650,52240],{"class":153},[143,67652,52243],{"class":156},[143,67654,160],{"class":149},[143,67656,52248],{"class":163},[143,67658,183],{"class":149},[143,67660,67661,67663,67665,67667,67669,67671,67673,67675,67677],{"class":145,"line":319},[143,67662,634],{"class":149},[143,67664,52240],{"class":153},[143,67666,15819],{"class":156},[143,67668,160],{"class":149},[143,67670,52287],{"class":163},[143,67672,52267],{"class":156},[143,67674,160],{"class":149},[143,67676,52294],{"class":163},[143,67678,183],{"class":149},[143,67680,67681,67683,67685,67687,67689],{"class":145,"line":332},[143,67682,634],{"class":149},[143,67684,52303],{"class":153},[143,67686,52306],{"class":149},[143,67688,52303],{"class":153},[143,67690,183],{"class":149},[143,67692,67693,67695,67697],{"class":145,"line":345},[143,67694,730],{"class":149},[143,67696,52230],{"class":153},[143,67698,183],{"class":149},[143,67700,67701],{"class":145,"line":701},[143,67702,3300],{"emptyLinePlaceholder":976},[143,67704,67705,67707,67709],{"class":145,"line":707},[143,67706,150],{"class":149},[143,67708,52688],{"class":153},[143,67710,183],{"class":149},[143,67712,67713,67715,67717],{"class":145,"line":727},[143,67714,634],{"class":149},[143,67716,232],{"class":153},[143,67718,183],{"class":149},[143,67720,67721,67723,67725,67727,67729],{"class":145,"line":2518},[143,67722,52237],{"class":149},[143,67724,22],{"class":153},[143,67726,54851],{"class":149},[143,67728,22],{"class":153},[143,67730,183],{"class":149},[143,67732,67733,67735,67737,67739,67741],{"class":145,"line":2524},[143,67734,52237],{"class":149},[143,67736,22],{"class":153},[143,67738,54870],{"class":149},[143,67740,22],{"class":153},[143,67742,183],{"class":149},[143,67744,67745,67747,67749,67751,67753],{"class":145,"line":2529},[143,67746,52237],{"class":149},[143,67748,22],{"class":153},[143,67750,54889],{"class":149},[143,67752,22],{"class":153},[143,67754,183],{"class":149},[143,67756,67757,67759,67761,67763,67765],{"class":145,"line":2543},[143,67758,52237],{"class":149},[143,67760,22],{"class":153},[143,67762,54908],{"class":149},[143,67764,22],{"class":153},[143,67766,183],{"class":149},[143,67768,67769,67771,67773,67775,67777],{"class":145,"line":2548},[143,67770,52237],{"class":149},[143,67772,22],{"class":153},[143,67774,54927],{"class":149},[143,67776,22],{"class":153},[143,67778,183],{"class":149},[143,67780,67781,67783,67785,67788,67790],{"class":145,"line":2554},[143,67782,52237],{"class":149},[143,67784,63],{"class":153},[143,67786,67787],{"class":149},">我不需要变色\u003C\u002F",[143,67789,63],{"class":153},[143,67791,183],{"class":149},[143,67793,67794,67796,67798],{"class":145,"line":2575},[143,67795,53304],{"class":149},[143,67797,232],{"class":153},[143,67799,183],{"class":149},[143,67801,67802,67804,67806],{"class":145,"line":2580},[143,67803,634],{"class":149},[143,67805,52701],{"class":153},[143,67807,183],{"class":149},[143,67809,67810],{"class":145,"line":2594},[143,67811,67812],{"class":266},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[143,67814,67815,67817,67819,67821,67823,67825,67827,67830],{"class":145,"line":2599},[143,67816,12121],{"class":755},[143,67818,62175],{"class":280},[143,67820,14464],{"class":755},[143,67822,55281],{"class":149},[143,67824,55284],{"class":156},[143,67826,1049],{"class":149},[143,67828,67829],{"class":163},"'ul'",[143,67831,1055],{"class":149},[143,67833,67834,67837,67839,67841,67843,67845,67847,67849,67851],{"class":145,"line":2628},[143,67835,67836],{"class":149},"    ul.",[143,67838,58696],{"class":156},[143,67840,1049],{"class":149},[143,67842,58701],{"class":163},[143,67844,13335],{"class":149},[143,67846,55334],{"class":755},[143,67848,2559],{"class":149},[143,67850,1119],{"class":6116},[143,67852,13342],{"class":149},[143,67854,67855],{"class":145,"line":2633},[143,67856,67857],{"class":266},"      \u002F\u002F alert(1)\n",[143,67859,67860],{"class":145,"line":2650},[143,67861,67862],{"class":266},"      \u002F\u002F e.target就是我们点击的对象\n",[143,67864,67865],{"class":145,"line":2655},[143,67866,67867],{"class":266},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[143,67869,67870],{"class":145,"line":2660},[143,67871,67872],{"class":266},"      \u002F\u002F e.target.style.color = 'red'\n",[143,67874,67875,67877,67879],{"class":145,"line":2665},[143,67876,59127],{"class":149},[143,67878,59130],{"class":156},[143,67880,67881],{"class":149},"(e)\n",[143,67883,67884],{"class":145,"line":2679},[143,67885,3300],{"emptyLinePlaceholder":976},[143,67887,67888,67890,67893],{"class":145,"line":2684},[143,67889,59127],{"class":149},[143,67891,67892],{"class":156},"dir",[143,67894,67895],{"class":149},"(e.target)\n",[143,67897,67898],{"class":145,"line":3477},[143,67899,3300],{"emptyLinePlaceholder":976},[143,67901,67902],{"class":145,"line":3491},[143,67903,67904],{"class":266},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[143,67906,67907],{"class":145,"line":3499},[143,67908,67909],{"class":266},"      \u002F\u002F 通过tagName来进行判断\n",[143,67911,67912,67914,67917,67919,67922],{"class":145,"line":3504},[143,67913,55365],{"class":755},[143,67915,67916],{"class":149}," (e.target.tagName ",[143,67918,55371],{"class":755},[143,67920,67921],{"class":163}," 'LI'",[143,67923,13342],{"class":149},[143,67925,67926,67929,67931],{"class":145,"line":3510},[143,67927,67928],{"class":149},"        e.target.style.color ",[143,67930,160],{"class":755},[143,67932,67933],{"class":163}," 'red'\n",[143,67935,67936],{"class":145,"line":3516},[143,67937,53285],{"class":149},[143,67939,67940],{"class":145,"line":3521},[143,67941,34359],{"class":149},[143,67943,67944,67946,67948],{"class":145,"line":8848},[143,67945,53304],{"class":149},[143,67947,52701],{"class":153},[143,67949,183],{"class":149},[143,67951,67952,67954,67956],{"class":145,"line":8872},[143,67953,730],{"class":149},[143,67955,52688],{"class":153},[143,67957,183],{"class":149},[143,67959,67960],{"class":145,"line":8877},[143,67961,3300],{"emptyLinePlaceholder":976},[143,67963,67964,67966,67968],{"class":145,"line":8883},[143,67965,730],{"class":149},[143,67967,51533],{"class":153},[143,67969,183],{"class":149},[63,67971,67972],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[63,67974,67975],{},"if(e.target.ragName==='P') {}",[63,67977,67978],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[63,67980,67981],{},"通过事件委托的方式实现tab栏切换改造：",[63,67983,67984],{},"一定要记住自定义属性！！！！！！",[63,67986,67987],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[63,67989,67990],{},"id是自定义的属性名",[63,67992,67993],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[133,67995,67997],{"className":51531,"code":67996,"language":51533,"meta":138,"style":138},"\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",[140,67998,67999,68009,68023,68027,68035,68049,68069,68089,68101,68109,68115,68125,68135,68139,68143,68149,68161,68173,68185,68201,68205,68209,68215,68227,68239,68251,68261,68271,68275,68279,68287,68299,68309,68321,68325,68329,68337,68347,68357,68367,68371,68375,68385,68399,68411,68415,68419,68431,68441,68457,68467,68471,68475,68489,68499,68509,68513,68517,68523,68537,68541,68545,68553,68563,68567,68571,68580,68590,68594,68602,68610,68614,68622,68636,68650,68662,68670,68709,68741,68773,68805,68837,68845,68853,68867,68901,68935,68969,69003,69037,69045,69053,69061,69066,69071,69090,69095,69115,69123,69128,69141,69162,69175,69179,69184,69189,69202,69222,69250,69254,69258,69262,69270,69278,69282],{"__ignoreMap":138},[143,68000,68001,68003,68005,68007],{"class":145,"line":146},[143,68002,52195],{"class":149},[143,68004,52198],{"class":153},[143,68006,52201],{"class":156},[143,68008,183],{"class":149},[143,68010,68011,68013,68015,68017,68019,68021],{"class":145,"line":35},[143,68012,150],{"class":149},[143,68014,51533],{"class":153},[143,68016,52212],{"class":156},[143,68018,160],{"class":149},[143,68020,52217],{"class":163},[143,68022,183],{"class":149},[143,68024,68025],{"class":145,"line":46},[143,68026,3300],{"emptyLinePlaceholder":976},[143,68028,68029,68031,68033],{"class":145,"line":293},[143,68030,150],{"class":149},[143,68032,52230],{"class":153},[143,68034,183],{"class":149},[143,68036,68037,68039,68041,68043,68045,68047],{"class":145,"line":306},[143,68038,634],{"class":149},[143,68040,52240],{"class":153},[143,68042,52243],{"class":156},[143,68044,160],{"class":149},[143,68046,52248],{"class":163},[143,68048,60010],{"class":149},[143,68050,68051,68053,68055,68057,68059,68061,68063,68065,68067],{"class":145,"line":319},[143,68052,634],{"class":149},[143,68054,52240],{"class":153},[143,68056,52259],{"class":156},[143,68058,160],{"class":149},[143,68060,52264],{"class":163},[143,68062,52267],{"class":156},[143,68064,160],{"class":149},[143,68066,52272],{"class":163},[143,68068,60010],{"class":149},[143,68070,68071,68073,68075,68077,68079,68081,68083,68085,68087],{"class":145,"line":332},[143,68072,634],{"class":149},[143,68074,52240],{"class":153},[143,68076,15819],{"class":156},[143,68078,160],{"class":149},[143,68080,52287],{"class":163},[143,68082,52267],{"class":156},[143,68084,160],{"class":149},[143,68086,52294],{"class":163},[143,68088,60010],{"class":149},[143,68090,68091,68093,68095,68097,68099],{"class":145,"line":345},[143,68092,634],{"class":149},[143,68094,52303],{"class":153},[143,68096,64507],{"class":149},[143,68098,52303],{"class":153},[143,68100,183],{"class":149},[143,68102,68103,68105,68107],{"class":145,"line":701},[143,68104,634],{"class":149},[143,68106,954],{"class":153},[143,68108,183],{"class":149},[143,68110,68111,68113],{"class":145,"line":707},[143,68112,7303],{"class":153},[143,68114,275],{"class":149},[143,68116,68117,68119,68121,68123],{"class":145,"line":727},[143,68118,55591],{"class":280},[143,68120,284],{"class":149},[143,68122,1234],{"class":280},[143,68124,290],{"class":149},[143,68126,68127,68129,68131,68133],{"class":145,"line":2518},[143,68128,55580],{"class":280},[143,68130,284],{"class":149},[143,68132,1234],{"class":280},[143,68134,290],{"class":149},[143,68136,68137],{"class":145,"line":2524},[143,68138,3087],{"class":149},[143,68140,68141],{"class":145,"line":2529},[143,68142,3300],{"emptyLinePlaceholder":976},[143,68144,68145,68147],{"class":145,"line":2543},[143,68146,64558],{"class":156},[143,68148,275],{"class":149},[143,68150,68151,68153,68155,68157,68159],{"class":145,"line":2548},[143,68152,55656],{"class":280},[143,68154,284],{"class":149},[143,68156,64569],{"class":280},[143,68158,774],{"class":755},[143,68160,290],{"class":149},[143,68162,68163,68165,68167,68169,68171],{"class":145,"line":2554},[143,68164,55670],{"class":280},[143,68166,284],{"class":149},[143,68168,64582],{"class":280},[143,68170,774],{"class":755},[143,68172,290],{"class":149},[143,68174,68175,68177,68179,68181,68183],{"class":145,"line":2575},[143,68176,55591],{"class":280},[143,68178,284],{"class":149},[143,68180,1741],{"class":280},[143,68182,774],{"class":755},[143,68184,290],{"class":149},[143,68186,68187,68189,68191,68193,68195,68197,68199],{"class":145,"line":2580},[143,68188,62860],{"class":280},[143,68190,284],{"class":149},[143,68192,771],{"class":280},[143,68194,774],{"class":755},[143,68196,777],{"class":280},[143,68198,63127],{"class":280},[143,68200,290],{"class":149},[143,68202,68203],{"class":145,"line":2594},[143,68204,3087],{"class":149},[143,68206,68207],{"class":145,"line":2599},[143,68208,3300],{"emptyLinePlaceholder":976},[143,68210,68211,68213],{"class":145,"line":2628},[143,68212,64627],{"class":156},[143,68214,275],{"class":149},[143,68216,68217,68219,68221,68223,68225],{"class":145,"line":2633},[143,68218,55656],{"class":280},[143,68220,284],{"class":149},[143,68222,1352],{"class":280},[143,68224,1369],{"class":755},[143,68226,290],{"class":149},[143,68228,68229,68231,68233,68235,68237],{"class":145,"line":2650},[143,68230,55670],{"class":280},[143,68232,284],{"class":149},[143,68234,1947],{"class":280},[143,68236,774],{"class":755},[143,68238,290],{"class":149},[143,68240,68241,68243,68245,68247,68249],{"class":145,"line":2655},[143,68242,58242],{"class":280},[143,68244,284],{"class":149},[143,68246,1947],{"class":280},[143,68248,774],{"class":755},[143,68250,290],{"class":149},[143,68252,68253,68255,68257,68259],{"class":145,"line":2660},[143,68254,55894],{"class":280},[143,68256,284],{"class":149},[143,68258,287],{"class":280},[143,68260,290],{"class":149},[143,68262,68263,68265,68267,68269],{"class":145,"line":2665},[143,68264,55905],{"class":280},[143,68266,284],{"class":149},[143,68268,314],{"class":280},[143,68270,290],{"class":149},[143,68272,68273],{"class":145,"line":2679},[143,68274,3087],{"class":149},[143,68276,68277],{"class":145,"line":2684},[143,68278,3300],{"emptyLinePlaceholder":976},[143,68280,68281,68283,68285],{"class":145,"line":3477},[143,68282,64627],{"class":156},[143,68284,64700],{"class":153},[143,68286,275],{"class":149},[143,68288,68289,68291,68293,68295,68297],{"class":145,"line":3491},[143,68290,55807],{"class":280},[143,68292,284],{"class":149},[143,68294,1841],{"class":280},[143,68296,774],{"class":755},[143,68298,290],{"class":149},[143,68300,68301,68303,68305,68307],{"class":145,"line":3499},[143,68302,63217],{"class":280},[143,68304,284],{"class":149},[143,68306,64723],{"class":280},[143,68308,290],{"class":149},[143,68310,68311,68313,68315,68317,68319],{"class":145,"line":3504},[143,68312,62883],{"class":280},[143,68314,284],{"class":149},[143,68316,1741],{"class":280},[143,68318,774],{"class":755},[143,68320,290],{"class":149},[143,68322,68323],{"class":145,"line":3510},[143,68324,3087],{"class":149},[143,68326,68327],{"class":145,"line":3516},[143,68328,3300],{"emptyLinePlaceholder":976},[143,68330,68331,68333,68335],{"class":145,"line":3521},[143,68332,64627],{"class":156},[143,68334,62175],{"class":153},[143,68336,275],{"class":149},[143,68338,68339,68341,68343,68345],{"class":145,"line":8848},[143,68340,55617],{"class":280},[143,68342,284],{"class":149},[143,68344,55622],{"class":280},[143,68346,290],{"class":149},[143,68348,68349,68351,68353,68355],{"class":145,"line":8872},[143,68350,55894],{"class":280},[143,68352,284],{"class":149},[143,68354,287],{"class":280},[143,68356,290],{"class":149},[143,68358,68359,68361,68363,68365],{"class":145,"line":8877},[143,68360,55905],{"class":280},[143,68362,284],{"class":149},[143,68364,52472],{"class":280},[143,68366,290],{"class":149},[143,68368,68369],{"class":145,"line":8883},[143,68370,3087],{"class":149},[143,68372,68373],{"class":145,"line":8910},[143,68374,3300],{"emptyLinePlaceholder":976},[143,68376,68377,68379,68381,68383],{"class":145,"line":8915},[143,68378,64627],{"class":156},[143,68380,62175],{"class":153},[143,68382,55960],{"class":153},[143,68384,275],{"class":149},[143,68386,68387,68389,68391,68393,68395,68397],{"class":145,"line":8921},[143,68388,55591],{"class":280},[143,68390,284],{"class":149},[143,68392,1234],{"class":280},[143,68394,9850],{"class":280},[143,68396,774],{"class":755},[143,68398,290],{"class":149},[143,68400,68401,68403,68405,68407,68409],{"class":145,"line":8933},[143,68402,55807],{"class":280},[143,68404,284],{"class":149},[143,68406,1590],{"class":280},[143,68408,774],{"class":755},[143,68410,290],{"class":149},[143,68412,68413],{"class":145,"line":8945},[143,68414,3087],{"class":149},[143,68416,68417],{"class":145,"line":8957},[143,68418,3300],{"emptyLinePlaceholder":976},[143,68420,68421,68423,68425,68427,68429],{"class":145,"line":10616},[143,68422,64627],{"class":156},[143,68424,62175],{"class":153},[143,68426,55960],{"class":153},[143,68428,2302],{"class":153},[143,68430,275],{"class":149},[143,68432,68433,68435,68437,68439],{"class":145,"line":10641},[143,68434,64852],{"class":280},[143,68436,284],{"class":149},[143,68438,55622],{"class":280},[143,68440,290],{"class":149},[143,68442,68443,68445,68447,68449,68451,68453,68455],{"class":145,"line":10664},[143,68444,63115],{"class":280},[143,68446,284],{"class":149},[143,68448,1122],{"class":280},[143,68450,774],{"class":755},[143,68452,777],{"class":280},[143,68454,64873],{"class":280},[143,68456,290],{"class":149},[143,68458,68459,68461,68463,68465],{"class":145,"line":10688},[143,68460,58299],{"class":280},[143,68462,284],{"class":149},[143,68464,63252],{"class":280},[143,68466,290],{"class":149},[143,68468,68469],{"class":145,"line":10693},[143,68470,3087],{"class":149},[143,68472,68473],{"class":145,"line":10698},[143,68474,3300],{"emptyLinePlaceholder":976},[143,68476,68477,68479,68481,68483,68485,68487],{"class":145,"line":10703},[143,68478,64627],{"class":156},[143,68480,62175],{"class":153},[143,68482,55960],{"class":153},[143,68484,2302],{"class":153},[143,68486,64906],{"class":156},[143,68488,275],{"class":149},[143,68490,68491,68493,68495,68497],{"class":145,"line":10712},[143,68492,62674],{"class":280},[143,68494,284],{"class":149},[143,68496,64917],{"class":280},[143,68498,290],{"class":149},[143,68500,68501,68503,68505,68507],{"class":145,"line":10717},[143,68502,58299],{"class":280},[143,68504,284],{"class":149},[143,68506,64917],{"class":280},[143,68508,290],{"class":149},[143,68510,68511],{"class":145,"line":10723},[143,68512,3087],{"class":149},[143,68514,68515],{"class":145,"line":10744},[143,68516,3300],{"emptyLinePlaceholder":976},[143,68518,68519,68521],{"class":145,"line":10750},[143,68520,64942],{"class":156},[143,68522,275],{"class":149},[143,68524,68525,68527,68529,68531,68533,68535],{"class":145,"line":10764},[143,68526,55580],{"class":280},[143,68528,284],{"class":149},[143,68530,1234],{"class":280},[143,68532,64955],{"class":280},[143,68534,774],{"class":755},[143,68536,290],{"class":149},[143,68538,68539],{"class":145,"line":10770},[143,68540,3087],{"class":149},[143,68542,68543],{"class":145,"line":10797},[143,68544,3300],{"emptyLinePlaceholder":976},[143,68546,68547,68549,68551],{"class":145,"line":10806},[143,68548,64942],{"class":156},[143,68550,63057],{"class":156},[143,68552,275],{"class":149},[143,68554,68555,68557,68559,68561],{"class":145,"line":10812},[143,68556,55894],{"class":280},[143,68558,284],{"class":149},[143,68560,55622],{"class":280},[143,68562,290],{"class":149},[143,68564,68565],{"class":145,"line":10820},[143,68566,3087],{"class":149},[143,68568,68569],{"class":145,"line":10825},[143,68570,3300],{"emptyLinePlaceholder":976},[143,68572,68573,68575,68578],{"class":145,"line":17502},[143,68574,64942],{"class":156},[143,68576,68577],{"class":156}," .active",[143,68579,275],{"class":149},[143,68581,68582,68584,68586,68588],{"class":145,"line":17508},[143,68583,55894],{"class":280},[143,68585,284],{"class":149},[143,68587,61752],{"class":280},[143,68589,290],{"class":149},[143,68591,68592],{"class":145,"line":17531},[143,68593,3087],{"class":149},[143,68595,68596,68598,68600],{"class":145,"line":17537},[143,68597,53304],{"class":149},[143,68599,954],{"class":153},[143,68601,183],{"class":149},[143,68603,68604,68606,68608],{"class":145,"line":17560},[143,68605,730],{"class":149},[143,68607,52230],{"class":153},[143,68609,183],{"class":149},[143,68611,68612],{"class":145,"line":17574},[143,68613,3300],{"emptyLinePlaceholder":976},[143,68615,68616,68618,68620],{"class":145,"line":17594},[143,68617,150],{"class":149},[143,68619,52688],{"class":153},[143,68621,183],{"class":149},[143,68623,68624,68626,68628,68630,68632,68634],{"class":145,"line":17600},[143,68625,634],{"class":149},[143,68627,614],{"class":153},[143,68629,617],{"class":156},[143,68631,160],{"class":149},[143,68633,65057],{"class":163},[143,68635,183],{"class":149},[143,68637,68638,68640,68642,68644,68646,68648],{"class":145,"line":17611},[143,68639,52237],{"class":149},[143,68641,614],{"class":153},[143,68643,617],{"class":156},[143,68645,160],{"class":149},[143,68647,65072],{"class":163},[143,68649,183],{"class":149},[143,68651,68652,68654,68656,68658,68660],{"class":145,"line":17634},[143,68653,56119],{"class":149},[143,68655,58],{"class":153},[143,68657,65083],{"class":149},[143,68659,58],{"class":153},[143,68661,183],{"class":149},[143,68663,68664,68666,68668],{"class":145,"line":17656},[143,68665,56119],{"class":149},[143,68667,232],{"class":153},[143,68669,183],{"class":149},[143,68671,68672,68674,68676,68678,68680,68682,68684,68686,68688,68690,68692,68694,68696,68699,68701,68703,68705,68707],{"class":145,"line":17661},[143,68673,56185],{"class":149},[143,68675,22],{"class":153},[143,68677,61935],{"class":149},[143,68679,67],{"class":153},[143,68681,617],{"class":156},[143,68683,160],{"class":149},[143,68685,60589],{"class":163},[143,68687,61940],{"class":156},[143,68689,160],{"class":149},[143,68691,65118],{"class":163},[143,68693,54836],{"class":156},[143,68695,160],{"class":149},[143,68697,68698],{"class":163},"\"0\"",[143,68700,65121],{"class":149},[143,68702,67],{"class":153},[143,68704,56197],{"class":149},[143,68706,22],{"class":153},[143,68708,183],{"class":149},[143,68710,68711,68713,68715,68717,68719,68721,68723,68725,68727,68729,68731,68733,68735,68737,68739],{"class":145,"line":17667},[143,68712,56185],{"class":149},[143,68714,22],{"class":153},[143,68716,61935],{"class":149},[143,68718,67],{"class":153},[143,68720,61940],{"class":156},[143,68722,160],{"class":149},[143,68724,65118],{"class":163},[143,68726,54836],{"class":156},[143,68728,160],{"class":149},[143,68730,4578],{"class":163},[143,68732,65148],{"class":149},[143,68734,67],{"class":153},[143,68736,56197],{"class":149},[143,68738,22],{"class":153},[143,68740,183],{"class":149},[143,68742,68743,68745,68747,68749,68751,68753,68755,68757,68759,68761,68763,68765,68767,68769,68771],{"class":145,"line":17681},[143,68744,56185],{"class":149},[143,68746,22],{"class":153},[143,68748,61935],{"class":149},[143,68750,67],{"class":153},[143,68752,61940],{"class":156},[143,68754,160],{"class":149},[143,68756,65118],{"class":163},[143,68758,54836],{"class":156},[143,68760,160],{"class":149},[143,68762,4601],{"class":163},[143,68764,65175],{"class":149},[143,68766,67],{"class":153},[143,68768,56197],{"class":149},[143,68770,22],{"class":153},[143,68772,183],{"class":149},[143,68774,68775,68777,68779,68781,68783,68785,68787,68789,68791,68793,68795,68797,68799,68801,68803],{"class":145,"line":17694},[143,68776,56185],{"class":149},[143,68778,22],{"class":153},[143,68780,61935],{"class":149},[143,68782,67],{"class":153},[143,68784,61940],{"class":156},[143,68786,160],{"class":149},[143,68788,65118],{"class":163},[143,68790,54836],{"class":156},[143,68792,160],{"class":149},[143,68794,4614],{"class":163},[143,68796,65202],{"class":149},[143,68798,67],{"class":153},[143,68800,56197],{"class":149},[143,68802,22],{"class":153},[143,68804,183],{"class":149},[143,68806,68807,68809,68811,68813,68815,68817,68819,68821,68823,68825,68827,68829,68831,68833,68835],{"class":145,"line":17699},[143,68808,56185],{"class":149},[143,68810,22],{"class":153},[143,68812,61935],{"class":149},[143,68814,67],{"class":153},[143,68816,61940],{"class":156},[143,68818,160],{"class":149},[143,68820,65118],{"class":163},[143,68822,54836],{"class":156},[143,68824,160],{"class":149},[143,68826,4627],{"class":163},[143,68828,65229],{"class":149},[143,68830,67],{"class":153},[143,68832,56197],{"class":149},[143,68834,22],{"class":153},[143,68836,183],{"class":149},[143,68838,68839,68841,68843],{"class":145,"line":17713},[143,68840,56290],{"class":149},[143,68842,232],{"class":153},[143,68844,183],{"class":149},[143,68846,68847,68849,68851],{"class":145,"line":17718},[143,68848,52665],{"class":149},[143,68850,614],{"class":153},[143,68852,183],{"class":149},[143,68854,68855,68857,68859,68861,68863,68865],{"class":145,"line":17724},[143,68856,52237],{"class":149},[143,68858,614],{"class":153},[143,68860,617],{"class":156},[143,68862,160],{"class":149},[143,68864,65266],{"class":163},[143,68866,183],{"class":149},[143,68868,68869,68871,68873,68875,68877,68879,68881,68883,68885,68887,68889,68891,68893,68895,68897,68899],{"class":145,"line":17729},[143,68870,56119],{"class":149},[143,68872,614],{"class":153},[143,68874,617],{"class":156},[143,68876,160],{"class":149},[143,68878,65281],{"class":163},[143,68880,61935],{"class":149},[143,68882,29],{"class":153},[143,68884,157],{"class":156},[143,68886,160],{"class":149},[143,68888,65292],{"class":163},[143,68890,167],{"class":156},[143,68892,160],{"class":149},[143,68894,8552],{"class":163},[143,68896,65301],{"class":149},[143,68898,614],{"class":153},[143,68900,183],{"class":149},[143,68902,68903,68905,68907,68909,68911,68913,68915,68917,68919,68921,68923,68925,68927,68929,68931,68933],{"class":145,"line":17743},[143,68904,56119],{"class":149},[143,68906,614],{"class":153},[143,68908,617],{"class":156},[143,68910,160],{"class":149},[143,68912,63506],{"class":163},[143,68914,61935],{"class":149},[143,68916,29],{"class":153},[143,68918,157],{"class":156},[143,68920,160],{"class":149},[143,68922,65328],{"class":163},[143,68924,167],{"class":156},[143,68926,160],{"class":149},[143,68928,8552],{"class":163},[143,68930,65301],{"class":149},[143,68932,614],{"class":153},[143,68934,183],{"class":149},[143,68936,68937,68939,68941,68943,68945,68947,68949,68951,68953,68955,68957,68959,68961,68963,68965,68967],{"class":145,"line":17748},[143,68938,56119],{"class":149},[143,68940,614],{"class":153},[143,68942,617],{"class":156},[143,68944,160],{"class":149},[143,68946,63506],{"class":163},[143,68948,61935],{"class":149},[143,68950,29],{"class":153},[143,68952,157],{"class":156},[143,68954,160],{"class":149},[143,68956,65363],{"class":163},[143,68958,167],{"class":156},[143,68960,160],{"class":149},[143,68962,8552],{"class":163},[143,68964,65301],{"class":149},[143,68966,614],{"class":153},[143,68968,183],{"class":149},[143,68970,68971,68973,68975,68977,68979,68981,68983,68985,68987,68989,68991,68993,68995,68997,68999,69001],{"class":145,"line":17753},[143,68972,56119],{"class":149},[143,68974,614],{"class":153},[143,68976,617],{"class":156},[143,68978,160],{"class":149},[143,68980,63506],{"class":163},[143,68982,61935],{"class":149},[143,68984,29],{"class":153},[143,68986,157],{"class":156},[143,68988,160],{"class":149},[143,68990,65398],{"class":163},[143,68992,167],{"class":156},[143,68994,160],{"class":149},[143,68996,8552],{"class":163},[143,68998,65301],{"class":149},[143,69000,614],{"class":153},[143,69002,183],{"class":149},[143,69004,69005,69007,69009,69011,69013,69015,69017,69019,69021,69023,69025,69027,69029,69031,69033,69035],{"class":145,"line":17767},[143,69006,56119],{"class":149},[143,69008,614],{"class":153},[143,69010,617],{"class":156},[143,69012,160],{"class":149},[143,69014,63506],{"class":163},[143,69016,61935],{"class":149},[143,69018,29],{"class":153},[143,69020,157],{"class":156},[143,69022,160],{"class":149},[143,69024,65433],{"class":163},[143,69026,167],{"class":156},[143,69028,160],{"class":149},[143,69030,8552],{"class":163},[143,69032,65301],{"class":149},[143,69034,614],{"class":153},[143,69036,183],{"class":149},[143,69038,69039,69041,69043],{"class":145,"line":17779},[143,69040,52665],{"class":149},[143,69042,614],{"class":153},[143,69044,183],{"class":149},[143,69046,69047,69049,69051],{"class":145,"line":17784},[143,69048,53304],{"class":149},[143,69050,614],{"class":153},[143,69052,183],{"class":149},[143,69054,69055,69057,69059],{"class":145,"line":17797},[143,69056,634],{"class":149},[143,69058,52701],{"class":153},[143,69060,183],{"class":149},[143,69062,69063],{"class":145,"line":17802},[143,69064,69065],{"class":266},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[143,69067,69068],{"class":145,"line":17807},[143,69069,69070],{"class":266},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[143,69072,69073,69075,69077,69079,69081,69083,69085,69088],{"class":145,"line":17812},[143,69074,12121],{"class":755},[143,69076,62175],{"class":280},[143,69078,14464],{"class":755},[143,69080,55281],{"class":149},[143,69082,55284],{"class":156},[143,69084,1049],{"class":149},[143,69086,69087],{"class":163},"'.tab-nav ul'",[143,69089,1055],{"class":149},[143,69091,69092],{"class":145,"line":17825},[143,69093,69094],{"class":266},"    \u002F\u002F 2.添加事件\n",[143,69096,69097,69099,69101,69103,69105,69107,69109,69111,69113],{"class":145,"line":17830},[143,69098,67836],{"class":149},[143,69100,58696],{"class":156},[143,69102,1049],{"class":149},[143,69104,58701],{"class":163},[143,69106,13335],{"class":149},[143,69108,55334],{"class":755},[143,69110,2559],{"class":149},[143,69112,1119],{"class":6116},[143,69114,13342],{"class":149},[143,69116,69117,69119,69121],{"class":145,"line":33531},[143,69118,59127],{"class":149},[143,69120,67892],{"class":156},[143,69122,67895],{"class":149},[143,69124,69125],{"class":145,"line":33537},[143,69126,69127],{"class":266},"      \u002F\u002Fe.targer是我们点击的对象\n",[143,69129,69130,69132,69134,69136,69139],{"class":145,"line":33543},[143,69131,55365],{"class":755},[143,69133,67916],{"class":149},[143,69135,55371],{"class":755},[143,69137,69138],{"class":163}," 'A'",[143,69140,13342],{"class":149},[143,69142,69143,69145,69147,69149,69152,69154,69156,69158,69160],{"class":145,"line":33549},[143,69144,52813],{"class":149},[143,69146,55284],{"class":156},[143,69148,1049],{"class":149},[143,69150,69151],{"class":163},"'.active'",[143,69153,57886],{"class":149},[143,69155,57889],{"class":156},[143,69157,1049],{"class":149},[143,69159,65596],{"class":163},[143,69161,1055],{"class":149},[143,69163,69164,69167,69169,69171,69173],{"class":145,"line":33555},[143,69165,69166],{"class":149},"        e.target.classList.",[143,69168,6234],{"class":156},[143,69170,1049],{"class":149},[143,69172,65596],{"class":163},[143,69174,1055],{"class":149},[143,69176,69177],{"class":145,"line":33566},[143,69178,3300],{"emptyLinePlaceholder":976},[143,69180,69181],{"class":145,"line":33572},[143,69182,69183],{"class":266},"        \u002F\u002F 下面大盒子模块\n",[143,69185,69186],{"class":145,"line":33592},[143,69187,69188],{"class":266},"        \u002F\u002F console.log(e.target.dataset.id)\n",[143,69190,69191,69193,69195,69197,69199],{"class":145,"line":33598},[143,69192,62153],{"class":755},[143,69194,3932],{"class":280},[143,69196,14464],{"class":755},[143,69198,46464],{"class":755},[143,69200,69201],{"class":149},"e.target.dataset.id\n",[143,69203,69204,69206,69208,69210,69212,69214,69216,69218,69220],{"class":145,"line":33609},[143,69205,52813],{"class":149},[143,69207,55284],{"class":156},[143,69209,1049],{"class":149},[143,69211,65644],{"class":163},[143,69213,57886],{"class":149},[143,69215,57889],{"class":156},[143,69217,1049],{"class":149},[143,69219,65596],{"class":163},[143,69221,1055],{"class":149},[143,69223,69224,69226,69228,69230,69232,69234,69236,69238,69240,69242,69244,69246,69248],{"class":145,"line":33615},[143,69225,52813],{"class":149},[143,69227,55284],{"class":156},[143,69229,1049],{"class":149},[143,69231,65670],{"class":163},[143,69233,1482],{"class":149},[143,69235,46464],{"class":755},[143,69237,26016],{"class":280},[143,69239,57915],{"class":163},[143,69241,57886],{"class":149},[143,69243,6234],{"class":156},[143,69245,1049],{"class":149},[143,69247,65596],{"class":163},[143,69249,1055],{"class":149},[143,69251,69252],{"class":145,"line":33621},[143,69253,3300],{"emptyLinePlaceholder":976},[143,69255,69256],{"class":145,"line":33627},[143,69257,53285],{"class":149},[143,69259,69260],{"class":145,"line":33633},[143,69261,34359],{"class":149},[143,69263,69264,69266,69268],{"class":145,"line":33639},[143,69265,53304],{"class":149},[143,69267,52701],{"class":153},[143,69269,183],{"class":149},[143,69271,69272,69274,69276],{"class":145,"line":33645},[143,69273,730],{"class":149},[143,69275,52688],{"class":153},[143,69277,183],{"class":149},[143,69279,69280],{"class":145,"line":33651},[143,69281,3300],{"emptyLinePlaceholder":976},[143,69283,69284,69286,69288],{"class":145,"line":33671},[143,69285,730],{"class":149},[143,69287,51533],{"class":153},[143,69289,183],{"class":149},[58,69291,69293],{"id":69292},"_333-页面加载事件","3.3.3 页面加载事件",[19,69295,69296],{},[22,69297,69298],{},"load",[63,69300,69301],{},[29,69302],{"alt":138,"src":69303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[63,69305,69306],{},"window代表整个窗口，比document还要大",[63,69308,69309],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[63,69311,69312],{},"img.addEventListener('load', function () {",[63,69314,69315],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[63,69317,53351],{},[19,69319,69320],{"start":35},[22,69321,69322],{},"DOMContentLoaded",[63,69324,69325],{},[29,69326],{"alt":138,"src":69327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[63,69329,69330],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[58,69332,69334],{"id":69333},"_334-元素滚动事件","3.3.4 元素滚动事件",[63,69336,69337],{},[29,69338],{"alt":138,"src":69339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[63,69341,69342],{},[29,69343],{"alt":138,"src":69344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[63,69346,69347],{},[29,69348],{"alt":138,"src":69349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[63,69351,69352],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[63,69354,69355],{},"获得的是数字型数据，不带单位",[63,69357,69358],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[63,69360,69361],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[63,69363,69364],{},"它是通过document.documentElement来获取",[63,69366,69367],{},[29,69368],{"alt":138,"src":69369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[63,69371,69372],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[58,69374,69376],{"id":69375},"_335-页面缩放事件","3.3.5 页面缩放事件",[63,69378,69379],{},[29,69380],{"alt":138,"src":69381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[63,69383,69384],{},[29,69385],{"alt":138,"src":69386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[58,69388,69390],{"id":69389},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[63,69392,69393],{},[29,69394],{"alt":138,"src":69395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[63,69397,69398],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[63,69400,69401],{},[29,69402],{"alt":138,"src":69403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[63,69405,69406],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[63,69408,69409],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[63,69411,69412],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[63,69414,69415],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[63,69417,69418],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[63,69420,69421],{},[29,69422],{"alt":138,"src":69423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[63,69425,69426],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[63,69428,69429],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[63,69431,69432],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[63,69434,69435],{},"e.pageX-box.getBoundingClientRect()",[58,69437,69439],{"id":69438},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[63,69441,69442],{},[29,69443],{"alt":138,"src":69444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[63,69446,69447],{},"这个是相对于视口来说的，它是个方法，不是属性值",[58,69449,69451],{"id":69450},"_338-总结","3.3.8 总结",[63,69453,69454],{},[29,69455],{"alt":138,"src":69456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[63,69458,69459],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[63,69461,69462],{},"修改盒子的宽高只能通过width和height来实现",[58,69464,69466],{"id":69465},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[133,69468,69470],{"className":51531,"code":69469,"language":51533,"meta":138,"style":138},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[140,69471,69472,69477,69482,69487,69492],{"__ignoreMap":138},[143,69473,69474],{"class":145,"line":146},[143,69475,69476],{"class":149},"\u002F* 页面滑动 *\u002F\n",[143,69478,69479],{"class":145,"line":35},[143,69480,69481],{"class":149},"html {\n",[143,69483,69484],{"class":145,"line":46},[143,69485,69486],{"class":149},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[143,69488,69489],{"class":145,"line":293},[143,69490,69491],{"class":149},"  scroll-behavior: smooth;\n",[143,69493,69494],{"class":145,"line":306},[143,69495,348],{"class":149},[63,69497,69498],{},"默认是auto",[58,69500,69502],{"id":69501},"_3310-日期对象","3.3.10 日期对象",[22896,69504,69506],{"id":69505},"_33101-实例化","3.3.10.1 实例化",[63,69508,69509],{},[29,69510],{"alt":138,"src":69511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22896,69513,69515],{"id":69514},"_33102-时期对象方法","3.3.10.2 时期对象方法",[63,69517,69518],{},[29,69519],{"alt":138,"src":69520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[63,69522,69523],{},"月份+1",[63,69525,69526],{},"老外认为第一天为0，星期天",[63,69528,69529],{},"方法使用的时候必须要跟括号",[63,69531,69532],{},"快速获得日期",[63,69534,69535],{},"\u002F\u002F 得到年月日",[63,69537,69538],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[63,69540,69541],{},"\u002F\u002F 得到当地日期",[63,69543,69544],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[63,69546,69547],{},"\u002F\u002F 得到当地时间",[63,69549,69550],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[63,69552,69553],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[63,69555,69556],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52701,69558,69559],{},"\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",[63,69561,69562],{},"学会去封装函数！",[22896,69564,69566],{"id":69565},"_33103-时间戳","3.3.10.3 时间戳",[63,69568,69569],{},[29,69570],{"alt":138,"src":69571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[63,69573,69574],{},[29,69575],{"alt":138,"src":69576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[63,69578,69579],{},"三种方法记住一个就可以",[58,69581,69583],{"id":69582},"_3311-节点操作","3.3.11 节点操作",[22896,69585,69587],{"id":69586},"_33111-dom节点","3.3.11.1 DOM节点",[63,69589,69590],{},[29,69591],{"alt":138,"src":69592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[63,69594,69595],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22896,69597,69599],{"id":69598},"_33112-查找节点","3.3.11.2 查找节点",[63,69601,69602],{},"前边的document.querySelector()是获取的元素",[63,69604,69605],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[63,69607,69608],{},[29,69609],{"alt":138,"src":69610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[19,69612,69613],{},[22,69614,69615],{},"父节点",[63,69617,69618],{},[29,69619],{"alt":138,"src":69620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[19,69622,69623],{"start":35},[22,69624,69625],{},"子节点",[63,69627,69628],{},[29,69629],{"alt":138,"src":69630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[63,69632,69633],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[63,69635,69636],{},"children获得的是伪数组，是亲儿子",[19,69638,69639],{"start":46},[22,69640,69641],{},"兄弟节点",[63,69643,69644],{},[29,69645],{"alt":138,"src":69646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22896,69648,69650],{"id":69649},"_33113-增加节点","3.3.11.3 增加节点",[63,69652,69653],{},[29,69654],{"alt":138,"src":69655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[63,69657,69658],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[63,69660,69661],{},[29,69662],{"alt":138,"src":69663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[63,69665,69666],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[63,69668,69669],{},"下面是写法的部分展示，就按照下边的格式来写",[63,69671,69672],{},"例：",[52701,69674,69675],{},"\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",[63,69677,69678],{},[29,69679],{"alt":138,"src":69680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[63,69682,69683],{},"false只克隆标签，里边的内容不会克隆过来",[133,69685,69687],{"className":51531,"code":69686,"language":51533,"meta":138,"style":138},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[140,69688,69689],{"__ignoreMap":138},[143,69690,69691],{"class":145,"line":146},[143,69692,69686],{"class":149},[22896,69694,69696],{"id":69695},"_33114-删除节点","3.3.11.4 删除节点",[63,69698,69699],{},[29,69700],{"alt":138,"src":69701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[63,69703,69704],{},"父亲删儿子",[63,69706,69707],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[58,69709,69711],{"id":69710},"_3312-m端事件","3.3.12 M端事件",[63,69713,69714],{},"M端就是移动端",[63,69716,69717],{},[29,69718],{"alt":138,"src":69719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[58,69721,69723],{"id":69722},"_3313-插件","3.3.13 插件",[63,69725,69726],{},"要熟悉官网！！！",[63,69728,69729],{},[67,69730,69731],{"href":69731,"rel":69732},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[71],[63,69734,69735],{},[67,69736,69737],{"href":69737,"rel":69738},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[71],[58,69740,69742],{"id":69741},"_3314-学生信息表","3.3.14 学生信息表",[19,69744,69745,69748,69751,69754,69757,69760,69763,69766],{},[22,69746,69747],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[22,69749,69750],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[22,69752,69753],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[22,69755,69756],{},"用好表单元素自带的属性，value,name等",[22,69758,69759],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[22,69761,69762],{},"不要忘记事件对象",[22,69764,69765],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[22,69767,69768],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[63,69770,597],{},[133,69772,69774],{"className":51531,"code":69773,"language":51533,"meta":138,"style":138},"\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",[140,69775,69776,69786,69800,69804,69812,69826,69846,69867,69880,69904,69912,69916,69924,69937,69958,69986,70014,70019,70041,70061,70080,70088,70116,70138,70158,70178,70198,70218,70238,70246,70266,70274,70278,70291,70299,70307,70315,70328,70341,70354,70367,70380,70393,70406,70414,70422,70430,70435,70440,70445,70450,70455,70460,70465,70470,70475,70480,70485,70490,70495,70503,70511,70519,70523,70543,70562,70582,70602,70622,70642,70646,70651,70671,70676,70686,70691,70696,70716,70738,70743,70753,70757,70761,70766,70771,70800,70814,70829,70833,70837,70841,70846,70857,70870,70875,70880,70885,70890,70895,70899,70904,70909,70918,70923,70928,70940,70945,70952,70956,70961,70971,70976,70986,70991,71019,71040,71050,71070,71088,71105,71122,71139,71156,71160,71170,71175,71180,71185,71196,71200,71204,71208,71213,71218,71239,71251,71256,71261,71266,71280,71285,71292,71296,71300,71308,71312,71320,71324],{"__ignoreMap":138},[143,69777,69778,69780,69782,69784],{"class":145,"line":146},[143,69779,52195],{"class":149},[143,69781,52198],{"class":153},[143,69783,52201],{"class":156},[143,69785,183],{"class":149},[143,69787,69788,69790,69792,69794,69796,69798],{"class":145,"line":35},[143,69789,150],{"class":149},[143,69791,51533],{"class":153},[143,69793,52212],{"class":156},[143,69795,160],{"class":149},[143,69797,52217],{"class":163},[143,69799,183],{"class":149},[143,69801,69802],{"class":145,"line":46},[143,69803,3300],{"emptyLinePlaceholder":976},[143,69805,69806,69808,69810],{"class":145,"line":293},[143,69807,150],{"class":149},[143,69809,52230],{"class":153},[143,69811,183],{"class":149},[143,69813,69814,69816,69818,69820,69822,69824],{"class":145,"line":306},[143,69815,634],{"class":149},[143,69817,52240],{"class":153},[143,69819,52243],{"class":156},[143,69821,160],{"class":149},[143,69823,52248],{"class":163},[143,69825,60010],{"class":149},[143,69827,69828,69830,69832,69834,69836,69838,69840,69842,69844],{"class":145,"line":319},[143,69829,634],{"class":149},[143,69831,52240],{"class":153},[143,69833,15819],{"class":156},[143,69835,160],{"class":149},[143,69837,52287],{"class":163},[143,69839,52267],{"class":156},[143,69841,160],{"class":149},[143,69843,52294],{"class":163},[143,69845,60010],{"class":149},[143,69847,69848,69850,69852,69854,69856,69858,69860,69862,69865],{"class":145,"line":332},[143,69849,634],{"class":149},[143,69851,52240],{"class":153},[143,69853,52259],{"class":156},[143,69855,160],{"class":149},[143,69857,52264],{"class":163},[143,69859,52267],{"class":156},[143,69861,160],{"class":149},[143,69863,69864],{"class":163},"\"ie=edge\"",[143,69866,60010],{"class":149},[143,69868,69869,69871,69873,69876,69878],{"class":145,"line":345},[143,69870,634],{"class":149},[143,69872,52303],{"class":153},[143,69874,69875],{"class":149},">学生信息管理\u003C\u002F",[143,69877,52303],{"class":153},[143,69879,183],{"class":149},[143,69881,69882,69884,69887,69890,69892,69895,69897,69899,69902],{"class":145,"line":701},[143,69883,634],{"class":149},[143,69885,69886],{"class":153},"link",[143,69888,69889],{"class":156}," rel",[143,69891,160],{"class":149},[143,69893,69894],{"class":163},"\"stylesheet\"",[143,69896,61940],{"class":156},[143,69898,160],{"class":149},[143,69900,69901],{"class":163},"\"css\u002Findex.css\"",[143,69903,60010],{"class":149},[143,69905,69906,69908,69910],{"class":145,"line":707},[143,69907,730],{"class":149},[143,69909,52230],{"class":153},[143,69911,183],{"class":149},[143,69913,69914],{"class":145,"line":727},[143,69915,3300],{"emptyLinePlaceholder":976},[143,69917,69918,69920,69922],{"class":145,"line":2518},[143,69919,150],{"class":149},[143,69921,52688],{"class":153},[143,69923,183],{"class":149},[143,69925,69926,69928,69930,69933,69935],{"class":145,"line":2524},[143,69927,634],{"class":149},[143,69929,10],{"class":153},[143,69931,69932],{"class":149},">新增学员\u003C\u002F",[143,69934,10],{"class":153},[143,69936,183],{"class":149},[143,69938,69939,69941,69943,69945,69947,69949,69952,69954,69956],{"class":145,"line":2529},[143,69940,634],{"class":149},[143,69942,67507],{"class":153},[143,69944,617],{"class":156},[143,69946,160],{"class":149},[143,69948,63547],{"class":163},[143,69950,69951],{"class":156}," autocomplete",[143,69953,160],{"class":149},[143,69955,32674],{"class":163},[143,69957,183],{"class":149},[143,69959,69960,69963,69965,69967,69969,69971,69973,69975,69978,69980,69982,69984],{"class":145,"line":2543},[143,69961,69962],{"class":149},"    姓名：\u003C",[143,69964,746],{"class":153},[143,69966,54709],{"class":156},[143,69968,160],{"class":149},[143,69970,758],{"class":163},[143,69972,617],{"class":156},[143,69974,160],{"class":149},[143,69976,69977],{"class":163},"\"uname\"",[143,69979,15819],{"class":156},[143,69981,160],{"class":149},[143,69983,69977],{"class":163},[143,69985,60010],{"class":149},[143,69987,69988,69991,69993,69995,69997,69999,70001,70003,70006,70008,70010,70012],{"class":145,"line":2548},[143,69989,69990],{"class":149},"    年龄：\u003C",[143,69992,746],{"class":153},[143,69994,54709],{"class":156},[143,69996,160],{"class":149},[143,69998,758],{"class":163},[143,70000,617],{"class":156},[143,70002,160],{"class":149},[143,70004,70005],{"class":163},"\"age\"",[143,70007,15819],{"class":156},[143,70009,160],{"class":149},[143,70011,70005],{"class":163},[143,70013,60010],{"class":149},[143,70015,70016],{"class":145,"line":2554},[143,70017,70018],{"class":149},"    性别:\n",[143,70020,70021,70023,70026,70028,70030,70033,70035,70037,70039],{"class":145,"line":2575},[143,70022,52237],{"class":149},[143,70024,70025],{"class":153},"select",[143,70027,15819],{"class":156},[143,70029,160],{"class":149},[143,70031,70032],{"class":163},"\"gender\"",[143,70034,617],{"class":156},[143,70036,160],{"class":149},[143,70038,70032],{"class":163},[143,70040,183],{"class":149},[143,70042,70043,70045,70048,70050,70052,70054,70057,70059],{"class":145,"line":2580},[143,70044,56119],{"class":149},[143,70046,70047],{"class":153},"option",[143,70049,67533],{"class":156},[143,70051,160],{"class":149},[143,70053,10861],{"class":163},[143,70055,70056],{"class":149},">男\u003C\u002F",[143,70058,70047],{"class":153},[143,70060,183],{"class":149},[143,70062,70063,70065,70067,70069,70071,70073,70076,70078],{"class":145,"line":2594},[143,70064,56119],{"class":149},[143,70066,70047],{"class":153},[143,70068,67533],{"class":156},[143,70070,160],{"class":149},[143,70072,10930],{"class":163},[143,70074,70075],{"class":149},">女\u003C\u002F",[143,70077,70047],{"class":153},[143,70079,183],{"class":149},[143,70081,70082,70084,70086],{"class":145,"line":2599},[143,70083,52665],{"class":149},[143,70085,70025],{"class":153},[143,70087,183],{"class":149},[143,70089,70090,70093,70095,70097,70099,70101,70103,70105,70108,70110,70112,70114],{"class":145,"line":2628},[143,70091,70092],{"class":149},"    薪资：\u003C",[143,70094,746],{"class":153},[143,70096,54709],{"class":156},[143,70098,160],{"class":149},[143,70100,758],{"class":163},[143,70102,617],{"class":156},[143,70104,160],{"class":149},[143,70106,70107],{"class":163},"\"salary\"",[143,70109,15819],{"class":156},[143,70111,160],{"class":149},[143,70113,70107],{"class":163},[143,70115,60010],{"class":149},[143,70117,70118,70121,70123,70125,70127,70130,70132,70134,70136],{"class":145,"line":2633},[143,70119,70120],{"class":149},"    就业城市：\u003C",[143,70122,70025],{"class":153},[143,70124,15819],{"class":156},[143,70126,160],{"class":149},[143,70128,70129],{"class":163},"\"city\"",[143,70131,617],{"class":156},[143,70133,160],{"class":149},[143,70135,70129],{"class":163},[143,70137,183],{"class":149},[143,70139,70140,70142,70144,70146,70148,70151,70154,70156],{"class":145,"line":2650},[143,70141,56119],{"class":149},[143,70143,70047],{"class":153},[143,70145,67533],{"class":156},[143,70147,160],{"class":149},[143,70149,70150],{"class":163},"\"北京\"",[143,70152,70153],{"class":149},">北京\u003C\u002F",[143,70155,70047],{"class":153},[143,70157,183],{"class":149},[143,70159,70160,70162,70164,70166,70168,70171,70174,70176],{"class":145,"line":2655},[143,70161,56119],{"class":149},[143,70163,70047],{"class":153},[143,70165,67533],{"class":156},[143,70167,160],{"class":149},[143,70169,70170],{"class":163},"\"上海\"",[143,70172,70173],{"class":149},">上海\u003C\u002F",[143,70175,70047],{"class":153},[143,70177,183],{"class":149},[143,70179,70180,70182,70184,70186,70188,70191,70194,70196],{"class":145,"line":2660},[143,70181,56119],{"class":149},[143,70183,70047],{"class":153},[143,70185,67533],{"class":156},[143,70187,160],{"class":149},[143,70189,70190],{"class":163},"\"广州\"",[143,70192,70193],{"class":149},">广州\u003C\u002F",[143,70195,70047],{"class":153},[143,70197,183],{"class":149},[143,70199,70200,70202,70204,70206,70208,70211,70214,70216],{"class":145,"line":2665},[143,70201,56119],{"class":149},[143,70203,70047],{"class":153},[143,70205,67533],{"class":156},[143,70207,160],{"class":149},[143,70209,70210],{"class":163},"\"深圳\"",[143,70212,70213],{"class":149},">深圳\u003C\u002F",[143,70215,70047],{"class":153},[143,70217,183],{"class":149},[143,70219,70220,70222,70224,70226,70228,70231,70234,70236],{"class":145,"line":2679},[143,70221,56119],{"class":149},[143,70223,70047],{"class":153},[143,70225,67533],{"class":156},[143,70227,160],{"class":149},[143,70229,70230],{"class":163},"\"曹县\"",[143,70232,70233],{"class":149},">曹县\u003C\u002F",[143,70235,70047],{"class":153},[143,70237,183],{"class":149},[143,70239,70240,70242,70244],{"class":145,"line":2684},[143,70241,52665],{"class":149},[143,70243,70025],{"class":153},[143,70245,183],{"class":149},[143,70247,70248,70250,70252,70254,70256,70259,70262,70264],{"class":145,"line":3477},[143,70249,52237],{"class":149},[143,70251,54772],{"class":153},[143,70253,617],{"class":156},[143,70255,160],{"class":149},[143,70257,70258],{"class":163},"\"add\"",[143,70260,70261],{"class":149},">录入\u003C\u002F",[143,70263,54772],{"class":153},[143,70265,183],{"class":149},[143,70267,70268,70270,70272],{"class":145,"line":3491},[143,70269,53304],{"class":149},[143,70271,67507],{"class":153},[143,70273,183],{"class":149},[143,70275,70276],{"class":145,"line":3499},[143,70277,3300],{"emptyLinePlaceholder":976},[143,70279,70280,70282,70284,70287,70289],{"class":145,"line":3504},[143,70281,634],{"class":149},[143,70283,10],{"class":153},[143,70285,70286],{"class":149},">就业榜\u003C\u002F",[143,70288,10],{"class":153},[143,70290,183],{"class":149},[143,70292,70293,70295,70297],{"class":145,"line":3510},[143,70294,634],{"class":149},[143,70296,1181],{"class":153},[143,70298,183],{"class":149},[143,70300,70301,70303,70305],{"class":145,"line":3516},[143,70302,52237],{"class":149},[143,70304,1184],{"class":153},[143,70306,183],{"class":149},[143,70308,70309,70311,70313],{"class":145,"line":3521},[143,70310,56119],{"class":149},[143,70312,1187],{"class":153},[143,70314,183],{"class":149},[143,70316,70317,70319,70321,70324,70326],{"class":145,"line":8848},[143,70318,56185],{"class":149},[143,70320,1190],{"class":153},[143,70322,70323],{"class":149},">序号\u003C\u002F",[143,70325,1190],{"class":153},[143,70327,183],{"class":149},[143,70329,70330,70332,70334,70337,70339],{"class":145,"line":8872},[143,70331,56185],{"class":149},[143,70333,1190],{"class":153},[143,70335,70336],{"class":149},">姓名\u003C\u002F",[143,70338,1190],{"class":153},[143,70340,183],{"class":149},[143,70342,70343,70345,70347,70350,70352],{"class":145,"line":8877},[143,70344,56185],{"class":149},[143,70346,1190],{"class":153},[143,70348,70349],{"class":149},">年龄\u003C\u002F",[143,70351,1190],{"class":153},[143,70353,183],{"class":149},[143,70355,70356,70358,70360,70363,70365],{"class":145,"line":8883},[143,70357,56185],{"class":149},[143,70359,1190],{"class":153},[143,70361,70362],{"class":149},">性别\u003C\u002F",[143,70364,1190],{"class":153},[143,70366,183],{"class":149},[143,70368,70369,70371,70373,70376,70378],{"class":145,"line":8910},[143,70370,56185],{"class":149},[143,70372,1190],{"class":153},[143,70374,70375],{"class":149},">薪资\u003C\u002F",[143,70377,1190],{"class":153},[143,70379,183],{"class":149},[143,70381,70382,70384,70386,70389,70391],{"class":145,"line":8915},[143,70383,56185],{"class":149},[143,70385,1190],{"class":153},[143,70387,70388],{"class":149},">就业城市\u003C\u002F",[143,70390,1190],{"class":153},[143,70392,183],{"class":149},[143,70394,70395,70397,70399,70402,70404],{"class":145,"line":8921},[143,70396,56185],{"class":149},[143,70398,1190],{"class":153},[143,70400,70401],{"class":149},">操作\u003C\u002F",[143,70403,1190],{"class":153},[143,70405,183],{"class":149},[143,70407,70408,70410,70412],{"class":145,"line":8933},[143,70409,56290],{"class":149},[143,70411,1187],{"class":153},[143,70413,183],{"class":149},[143,70415,70416,70418,70420],{"class":145,"line":8945},[143,70417,52665],{"class":149},[143,70419,1184],{"class":153},[143,70421,183],{"class":149},[143,70423,70424,70426,70428],{"class":145,"line":8957},[143,70425,52237],{"class":149},[143,70427,1227],{"class":153},[143,70429,183],{"class":149},[143,70431,70432],{"class":145,"line":10616},[143,70433,70434],{"class":266},"      \u003C!-- \n",[143,70436,70437],{"class":145,"line":10641},[143,70438,70439],{"class":266},"        \u003Ctr>\n",[143,70441,70442],{"class":145,"line":10664},[143,70443,70444],{"class":266},"          \u003Ctd>1001\u003C\u002Ftd>\n",[143,70446,70447],{"class":145,"line":10688},[143,70448,70449],{"class":266},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[143,70451,70452],{"class":145,"line":10693},[143,70453,70454],{"class":266},"          \u003Ctd>19\u003C\u002Ftd>\n",[143,70456,70457],{"class":145,"line":10698},[143,70458,70459],{"class":266},"          \u003Ctd>男\u003C\u002Ftd>\n",[143,70461,70462],{"class":145,"line":10703},[143,70463,70464],{"class":266},"          \u003Ctd>15000\u003C\u002Ftd>\n",[143,70466,70467],{"class":145,"line":10712},[143,70468,70469],{"class":266},"          \u003Ctd>上海\u003C\u002Ftd>\n",[143,70471,70472],{"class":145,"line":10717},[143,70473,70474],{"class":266},"          \u003Ctd>\n",[143,70476,70477],{"class":145,"line":10723},[143,70478,70479],{"class":266},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[143,70481,70482],{"class":145,"line":10744},[143,70483,70484],{"class":266},"          \u003C\u002Ftd>\n",[143,70486,70487],{"class":145,"line":10750},[143,70488,70489],{"class":266},"        \u003C\u002Ftr> \n",[143,70491,70492],{"class":145,"line":10764},[143,70493,70494],{"class":266},"        -->\n",[143,70496,70497,70499,70501],{"class":145,"line":10770},[143,70498,52665],{"class":149},[143,70500,1227],{"class":153},[143,70502,183],{"class":149},[143,70504,70505,70507,70509],{"class":145,"line":10797},[143,70506,53304],{"class":149},[143,70508,1181],{"class":153},[143,70510,183],{"class":149},[143,70512,70513,70515,70517],{"class":145,"line":10806},[143,70514,634],{"class":149},[143,70516,52701],{"class":153},[143,70518,183],{"class":149},[143,70520,70521],{"class":145,"line":10812},[143,70522,60841],{"class":266},[143,70524,70525,70527,70530,70532,70534,70536,70538,70541],{"class":145,"line":10820},[143,70526,12121],{"class":755},[143,70528,70529],{"class":280}," uname",[143,70531,14464],{"class":755},[143,70533,55281],{"class":149},[143,70535,55284],{"class":156},[143,70537,1049],{"class":149},[143,70539,70540],{"class":163},"'.uname'",[143,70542,1055],{"class":149},[143,70544,70545,70547,70549,70551,70553,70555,70557,70560],{"class":145,"line":10825},[143,70546,12121],{"class":755},[143,70548,16587],{"class":280},[143,70550,14464],{"class":755},[143,70552,55281],{"class":149},[143,70554,55284],{"class":156},[143,70556,1049],{"class":149},[143,70558,70559],{"class":163},"'.age'",[143,70561,1055],{"class":149},[143,70563,70564,70566,70569,70571,70573,70575,70577,70580],{"class":145,"line":17502},[143,70565,12121],{"class":755},[143,70567,70568],{"class":280}," gender",[143,70570,14464],{"class":755},[143,70572,55281],{"class":149},[143,70574,55284],{"class":156},[143,70576,1049],{"class":149},[143,70578,70579],{"class":163},"'.gender'",[143,70581,1055],{"class":149},[143,70583,70584,70586,70589,70591,70593,70595,70597,70600],{"class":145,"line":17508},[143,70585,12121],{"class":755},[143,70587,70588],{"class":280}," salary",[143,70590,14464],{"class":755},[143,70592,55281],{"class":149},[143,70594,55284],{"class":156},[143,70596,1049],{"class":149},[143,70598,70599],{"class":163},"'.salary'",[143,70601,1055],{"class":149},[143,70603,70604,70606,70609,70611,70613,70615,70617,70620],{"class":145,"line":17531},[143,70605,12121],{"class":755},[143,70607,70608],{"class":280}," city",[143,70610,14464],{"class":755},[143,70612,55281],{"class":149},[143,70614,55284],{"class":156},[143,70616,1049],{"class":149},[143,70618,70619],{"class":163},"'.city'",[143,70621,1055],{"class":149},[143,70623,70624,70626,70629,70631,70633,70635,70637,70640],{"class":145,"line":17537},[143,70625,12121],{"class":755},[143,70627,70628],{"class":280}," tbody",[143,70630,14464],{"class":755},[143,70632,55281],{"class":149},[143,70634,55284],{"class":156},[143,70636,1049],{"class":149},[143,70638,70639],{"class":163},"'tbody'",[143,70641,1055],{"class":149},[143,70643,70644],{"class":145,"line":17560},[143,70645,3300],{"emptyLinePlaceholder":976},[143,70647,70648],{"class":145,"line":17574},[143,70649,70650],{"class":266},"    \u002F\u002F 获取所有带有name属性的元素\n",[143,70652,70653,70655,70658,70660,70662,70664,70666,70669],{"class":145,"line":17594},[143,70654,12121],{"class":755},[143,70656,70657],{"class":280}," items",[143,70659,14464],{"class":755},[143,70661,55281],{"class":149},[143,70663,56564],{"class":156},[143,70665,1049],{"class":149},[143,70667,70668],{"class":163},"'[name]'",[143,70670,1055],{"class":149},[143,70672,70673],{"class":145,"line":17600},[143,70674,70675],{"class":266},"    \u002F\u002F 声明一个空的数组\n",[143,70677,70678,70680,70682,70684],{"class":145,"line":17611},[143,70679,12121],{"class":755},[143,70681,58578],{"class":280},[143,70683,14464],{"class":755},[143,70685,52726],{"class":149},[143,70687,70688],{"class":145,"line":17634},[143,70689,70690],{"class":266},"    \u002F\u002F 1.录入模块\n",[143,70692,70693],{"class":145,"line":17656},[143,70694,70695],{"class":266},"    \u002F\u002F 1.1这是一个表单提交事件\n",[143,70697,70698,70700,70703,70705,70707,70709,70711,70714],{"class":145,"line":17661},[143,70699,12121],{"class":755},[143,70701,70702],{"class":280}," info",[143,70704,14464],{"class":755},[143,70706,55281],{"class":149},[143,70708,55284],{"class":156},[143,70710,1049],{"class":149},[143,70712,70713],{"class":163},"'.info'",[143,70715,1055],{"class":149},[143,70717,70718,70721,70723,70725,70728,70730,70732,70734,70736],{"class":145,"line":17667},[143,70719,70720],{"class":149},"    info.",[143,70722,58696],{"class":156},[143,70724,1049],{"class":149},[143,70726,70727],{"class":163},"'submit'",[143,70729,13335],{"class":149},[143,70731,55334],{"class":755},[143,70733,2559],{"class":149},[143,70735,1119],{"class":6116},[143,70737,13342],{"class":149},[143,70739,70740],{"class":145,"line":17681},[143,70741,70742],{"class":266},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[143,70744,70745,70748,70751],{"class":145,"line":17694},[143,70746,70747],{"class":149},"      e.",[143,70749,70750],{"class":156},"preventDefault",[143,70752,2876],{"class":149},[143,70754,70755],{"class":145,"line":17699},[143,70756,60895],{"class":266},[143,70758,70759],{"class":145,"line":17713},[143,70760,3300],{"emptyLinePlaceholder":976},[143,70762,70763],{"class":145,"line":17718},[143,70764,70765],{"class":266},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[143,70767,70768],{"class":145,"line":17724},[143,70769,70770],{"class":266},"      \u002F\u002F 先遍历循环\n",[143,70772,70773,70775,70777,70779,70781,70783,70785,70787,70789,70792,70794,70796,70798],{"class":145,"line":17729},[143,70774,53171],{"class":755},[143,70776,2559],{"class":149},[143,70778,52735],{"class":755},[143,70780,10338],{"class":149},[143,70782,160],{"class":755},[143,70784,4993],{"class":280},[143,70786,10345],{"class":149},[143,70788,150],{"class":755},[143,70790,70791],{"class":149}," items.",[143,70793,52856],{"class":280},[143,70795,4114],{"class":149},[143,70797,3192],{"class":755},[143,70799,13342],{"class":149},[143,70801,70802,70804,70807,70809,70812],{"class":145,"line":17743},[143,70803,3397],{"class":755},[143,70805,70806],{"class":149}," (items[i].value ",[143,70808,55371],{"class":755},[143,70810,70811],{"class":163}," ''",[143,70813,13342],{"class":149},[143,70815,70816,70819,70822,70824,70827],{"class":145,"line":17748},[143,70817,70818],{"class":755},"          return",[143,70820,70821],{"class":156}," alert",[143,70823,1049],{"class":149},[143,70825,70826],{"class":163},"'输入内容不能为空'",[143,70828,1055],{"class":149},[143,70830,70831],{"class":145,"line":17753},[143,70832,3429],{"class":149},[143,70834,70835],{"class":145,"line":17767},[143,70836,53285],{"class":149},[143,70838,70839],{"class":145,"line":17779},[143,70840,3300],{"emptyLinePlaceholder":976},[143,70842,70843],{"class":145,"line":17784},[143,70844,70845],{"class":266},"      \u002F\u002F 创建新的对象\n",[143,70847,70848,70850,70853,70855],{"class":145,"line":17797},[143,70849,59111],{"class":755},[143,70851,70852],{"class":280}," obj",[143,70854,14464],{"class":755},[143,70856,275],{"class":149},[143,70858,70859,70862,70864,70866,70868],{"class":145,"line":17802},[143,70860,70861],{"class":149},"        stuID: arr.",[143,70863,52856],{"class":280},[143,70865,46464],{"class":755},[143,70867,26016],{"class":280},[143,70869,32364],{"class":149},[143,70871,70872],{"class":145,"line":17807},[143,70873,70874],{"class":149},"        uname: uname.value,\n",[143,70876,70877],{"class":145,"line":17812},[143,70878,70879],{"class":149},"        age: age.value,\n",[143,70881,70882],{"class":145,"line":17825},[143,70883,70884],{"class":149},"        gender: gender.value,\n",[143,70886,70887],{"class":145,"line":17830},[143,70888,70889],{"class":149},"        salary: salary.value,\n",[143,70891,70892],{"class":145,"line":33531},[143,70893,70894],{"class":149},"        city: city.value\n",[143,70896,70897],{"class":145,"line":33537},[143,70898,53285],{"class":149},[143,70900,70901],{"class":145,"line":33543},[143,70902,70903],{"class":266},"      \u002F\u002F console.log(obj);\n",[143,70905,70906],{"class":145,"line":33549},[143,70907,70908],{"class":266},"      \u002F\u002F 追加到数组里面\n",[143,70910,70911,70913,70915],{"class":145,"line":33555},[143,70912,58890],{"class":149},[143,70914,52772],{"class":156},[143,70916,70917],{"class":149},"(obj)\n",[143,70919,70920],{"class":145,"line":33566},[143,70921,70922],{"class":266},"      \u002F\u002F console.log(arr);\n",[143,70924,70925],{"class":145,"line":33572},[143,70926,70927],{"class":266},"      \u002F\u002F 清空表单  reset重置表单\n",[143,70929,70930,70933,70935,70938],{"class":145,"line":33592},[143,70931,70932],{"class":280},"      this",[143,70934,1599],{"class":149},[143,70936,70937],{"class":156},"reset",[143,70939,2876],{"class":149},[143,70941,70942],{"class":145,"line":33598},[143,70943,70944],{"class":266},"      \u002F\u002F 调用渲染函数\n",[143,70946,70947,70950],{"class":145,"line":33609},[143,70948,70949],{"class":156},"      render",[143,70951,2876],{"class":149},[143,70953,70954],{"class":145,"line":33615},[143,70955,34359],{"class":149},[143,70957,70958],{"class":145,"line":33621},[143,70959,70960],{"class":266},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[143,70962,70963,70966,70969],{"class":145,"line":33627},[143,70964,70965],{"class":755},"    function",[143,70967,70968],{"class":156}," render",[143,70970,11753],{"class":149},[143,70972,70973],{"class":145,"line":33633},[143,70974,70975],{"class":266},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[143,70977,70978,70981,70983],{"class":145,"line":33639},[143,70979,70980],{"class":149},"      tbody.innerHTML ",[143,70982,160],{"class":755},[143,70984,70985],{"class":163}," ''\n",[143,70987,70988],{"class":145,"line":33645},[143,70989,70990],{"class":266},"      \u002F\u002F 遍历数组\n",[143,70992,70993,70995,70997,70999,71001,71003,71005,71007,71009,71011,71013,71015,71017],{"class":145,"line":33651},[143,70994,53171],{"class":755},[143,70996,2559],{"class":149},[143,70998,52735],{"class":755},[143,71000,10338],{"class":149},[143,71002,160],{"class":755},[143,71004,4993],{"class":280},[143,71006,10345],{"class":149},[143,71008,150],{"class":755},[143,71010,52853],{"class":149},[143,71012,52856],{"class":280},[143,71014,4114],{"class":149},[143,71016,3192],{"class":755},[143,71018,13342],{"class":149},[143,71020,71021,71023,71026,71028,71030,71033,71035,71038],{"class":145,"line":33671},[143,71022,62153],{"class":755},[143,71024,71025],{"class":280}," tr",[143,71027,14464],{"class":755},[143,71029,55281],{"class":149},[143,71031,71032],{"class":156},"createElement",[143,71034,1049],{"class":149},[143,71036,71037],{"class":163},"'tr'",[143,71039,1055],{"class":149},[143,71041,71042,71045,71047],{"class":145,"line":33677},[143,71043,71044],{"class":149},"        tr.innerHTML ",[143,71046,160],{"class":755},[143,71048,71049],{"class":163}," `\n",[143,71051,71052,71055,71057,71059,71061,71064,71067],{"class":145,"line":33693},[143,71053,71054],{"class":163},"        \u003Ctd>${",[143,71056,4780],{"class":149},[143,71058,749],{"class":163},[143,71060,1482],{"class":149},[143,71062,71063],{"class":163},"].",[143,71065,71066],{"class":149},"stuID",[143,71068,71069],{"class":163},"}\u003C\u002Ftd>\n",[143,71071,71072,71075,71077,71079,71081,71083,71086],{"class":145,"line":33699},[143,71073,71074],{"class":163},"          \u003Ctd>${",[143,71076,4780],{"class":149},[143,71078,749],{"class":163},[143,71080,1482],{"class":149},[143,71082,71063],{"class":163},[143,71084,71085],{"class":149},"uname",[143,71087,71069],{"class":163},[143,71089,71090,71092,71094,71096,71098,71100,71103],{"class":145,"line":33713},[143,71091,71074],{"class":163},[143,71093,4780],{"class":149},[143,71095,749],{"class":163},[143,71097,1482],{"class":149},[143,71099,71063],{"class":163},[143,71101,71102],{"class":149},"age",[143,71104,71069],{"class":163},[143,71106,71107,71109,71111,71113,71115,71117,71120],{"class":145,"line":33719},[143,71108,71074],{"class":163},[143,71110,4780],{"class":149},[143,71112,749],{"class":163},[143,71114,1482],{"class":149},[143,71116,71063],{"class":163},[143,71118,71119],{"class":149},"gender",[143,71121,71069],{"class":163},[143,71123,71124,71126,71128,71130,71132,71134,71137],{"class":145,"line":33734},[143,71125,71074],{"class":163},[143,71127,4780],{"class":149},[143,71129,749],{"class":163},[143,71131,1482],{"class":149},[143,71133,71063],{"class":163},[143,71135,71136],{"class":149},"salary",[143,71138,71069],{"class":163},[143,71140,71141,71143,71145,71147,71149,71151,71154],{"class":145,"line":33740},[143,71142,71074],{"class":163},[143,71144,4780],{"class":149},[143,71146,749],{"class":163},[143,71148,1482],{"class":149},[143,71150,71063],{"class":163},[143,71152,71153],{"class":149},"city",[143,71155,71069],{"class":163},[143,71157,71158],{"class":145,"line":33749},[143,71159,70474],{"class":163},[143,71161,71162,71165,71167],{"class":145,"line":33755},[143,71163,71164],{"class":163},"            \u003Ca href=\"javascript:\" data-id=${",[143,71166,1482],{"class":149},[143,71168,71169],{"class":163},"}>删除\u003C\u002Fa>\n",[143,71171,71172],{"class":145,"line":33764},[143,71173,71174],{"class":163},"          \u003C\u002Ftd> \n",[143,71176,71177],{"class":145,"line":33770},[143,71178,71179],{"class":163},"          `\n",[143,71181,71182],{"class":145,"line":33776},[143,71183,71184],{"class":266},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[143,71186,71187,71190,71193],{"class":145,"line":33785},[143,71188,71189],{"class":149},"        tbody.",[143,71191,71192],{"class":156},"appendChild",[143,71194,71195],{"class":149},"(tr)\n",[143,71197,71198],{"class":145,"line":33791},[143,71199,53285],{"class":149},[143,71201,71202],{"class":145,"line":33802},[143,71203,3087],{"class":149},[143,71205,71206],{"class":145,"line":33808},[143,71207,3300],{"emptyLinePlaceholder":976},[143,71209,71210],{"class":145,"line":33827},[143,71211,71212],{"class":266},"    \u002F\u002F 3.删除委托\n",[143,71214,71215],{"class":145,"line":33833},[143,71216,71217],{"class":266},"    \u002F\u002F 3.1 事件委托 tbody\n",[143,71219,71220,71223,71225,71227,71229,71231,71233,71235,71237],{"class":145,"line":33844},[143,71221,71222],{"class":149},"    tbody.",[143,71224,58696],{"class":156},[143,71226,1049],{"class":149},[143,71228,58701],{"class":163},[143,71230,13335],{"class":149},[143,71232,55334],{"class":755},[143,71234,2559],{"class":149},[143,71236,1119],{"class":6116},[143,71238,13342],{"class":149},[143,71240,71241,71243,71245,71247,71249],{"class":145,"line":33850},[143,71242,55365],{"class":755},[143,71244,67916],{"class":149},[143,71246,55371],{"class":755},[143,71248,69138],{"class":163},[143,71250,13342],{"class":149},[143,71252,71253],{"class":145,"line":33870},[143,71254,71255],{"class":266},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[143,71257,71258],{"class":145,"line":33886},[143,71259,71260],{"class":266},"        \u002F\u002F console.log(e.target.dataset.id);\n",[143,71262,71263],{"class":145,"line":33892},[143,71264,71265],{"class":266},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[143,71267,71268,71271,71273,71276,71278],{"class":145,"line":33906},[143,71269,71270],{"class":149},"        arr.",[143,71272,58893],{"class":156},[143,71274,71275],{"class":149},"(e.target.dataset.id, ",[143,71277,771],{"class":280},[143,71279,1055],{"class":149},[143,71281,71282],{"class":145,"line":33912},[143,71283,71284],{"class":266},"        \u002F\u002F 重新渲染一次\n",[143,71286,71287,71290],{"class":145,"line":33918},[143,71288,71289],{"class":156},"        render",[143,71291,2876],{"class":149},[143,71293,71294],{"class":145,"line":33929},[143,71295,53285],{"class":149},[143,71297,71298],{"class":145,"line":33935},[143,71299,34359],{"class":149},[143,71301,71302,71304,71306],{"class":145,"line":33941},[143,71303,53304],{"class":149},[143,71305,52701],{"class":153},[143,71307,183],{"class":149},[143,71309,71310],{"class":145,"line":33951},[143,71311,3300],{"emptyLinePlaceholder":976},[143,71313,71314,71316,71318],{"class":145,"line":33957},[143,71315,730],{"class":149},[143,71317,52688],{"class":153},[143,71319,183],{"class":149},[143,71321,71322],{"class":145,"line":33968},[143,71323,3300],{"emptyLinePlaceholder":976},[143,71325,71326,71328,71330],{"class":145,"line":33974},[143,71327,730],{"class":149},[143,71329,51533],{"class":153},[143,71331,183],{"class":149},[63,71333,351],{},[133,71335,71339],{"className":71336,"code":71337,"language":71338,"meta":138,"style":138},"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",[140,71340,71341,71346,71356,71365,71369,71373,71378,71388,71393,71397,71402,71412,71417,71426,71430,71434,71439,71444,71454,71464,71469,71473,71478,71487,71497,71502,71512,71522,71526,71531,71539,71543,71548,71553,71558,71566,71575,71579,71584,71593,71597,71602,71611,71615,71620,71629,71638,71646,71650,71655,71664,71674,71683,71693,71699,71708,71718,71728,71732,71737,71746,71754,71764,71772,71780,71789,71799,71807,71811,71816,71825],{"__ignoreMap":138},[143,71342,71343],{"class":145,"line":146},[143,71344,71345],{"class":149},"* {\n",[143,71347,71348,71351,71353],{"class":145,"line":35},[143,71349,71350],{"class":153},"  margin",[143,71352,284],{"class":149},[143,71354,71355],{"class":163},"0;\n",[143,71357,71358,71361,71363],{"class":145,"line":46},[143,71359,71360],{"class":163},"  padding",[143,71362,284],{"class":149},[143,71364,71355],{"class":163},[143,71366,71367],{"class":145,"line":293},[143,71368,348],{"class":149},[143,71370,71371],{"class":145,"line":306},[143,71372,3300],{"emptyLinePlaceholder":976},[143,71374,71375],{"class":145,"line":319},[143,71376,71377],{"class":163},"a {\n",[143,71379,71380,71383,71385],{"class":145,"line":332},[143,71381,71382],{"class":153},"  text-decoration",[143,71384,284],{"class":149},[143,71386,71387],{"class":163},"none;\n",[143,71389,71390],{"class":145,"line":345},[143,71391,71392],{"class":163},"  color:#721c24;\n",[143,71394,71395],{"class":145,"line":701},[143,71396,348],{"class":149},[143,71398,71399],{"class":145,"line":707},[143,71400,71401],{"class":163},"h1 {\n",[143,71403,71404,71407,71409],{"class":145,"line":727},[143,71405,71406],{"class":153},"  text-align",[143,71408,284],{"class":149},[143,71410,71411],{"class":163},"center;\n",[143,71413,71414],{"class":145,"line":2518},[143,71415,71416],{"class":163},"  color:#333;\n",[143,71418,71419,71421,71423],{"class":145,"line":2524},[143,71420,71350],{"class":153},[143,71422,284],{"class":149},[143,71424,71425],{"class":163},"20px 0;\n",[143,71427,71428],{"class":145,"line":2529},[143,71429,3574],{"class":149},[143,71431,71432],{"class":145,"line":2543},[143,71433,348],{"class":149},[143,71435,71436],{"class":145,"line":2548},[143,71437,71438],{"class":163},"table {\n",[143,71440,71441],{"class":145,"line":2554},[143,71442,71443],{"class":163},"  margin:0 auto;\n",[143,71445,71446,71449,71451],{"class":145,"line":2575},[143,71447,71448],{"class":153},"  width",[143,71450,284],{"class":149},[143,71452,71453],{"class":163},"800px;\n",[143,71455,71456,71459,71461],{"class":145,"line":2580},[143,71457,71458],{"class":153},"  border-collapse",[143,71460,284],{"class":149},[143,71462,71463],{"class":163},"collapse;\n",[143,71465,71466],{"class":145,"line":2594},[143,71467,71468],{"class":163},"  color:#004085;\n",[143,71470,71471],{"class":145,"line":2599},[143,71472,348],{"class":149},[143,71474,71475],{"class":145,"line":2628},[143,71476,71477],{"class":163},"th {\n",[143,71479,71480,71482,71484],{"class":145,"line":2633},[143,71481,71360],{"class":153},[143,71483,284],{"class":149},[143,71485,71486],{"class":163},"10px;\n",[143,71488,71489,71492,71494],{"class":145,"line":2650},[143,71490,71491],{"class":153},"  background",[143,71493,284],{"class":149},[143,71495,71496],{"class":266},"#cfe5ff;\n",[143,71498,71499],{"class":145,"line":2655},[143,71500,71501],{"class":149},"  \n",[143,71503,71504,71507,71509],{"class":145,"line":2660},[143,71505,71506],{"class":153},"  font-size",[143,71508,284],{"class":149},[143,71510,71511],{"class":163},"20px;\n",[143,71513,71514,71517,71519],{"class":145,"line":2665},[143,71515,71516],{"class":153},"  font-weight",[143,71518,284],{"class":149},[143,71520,71521],{"class":163},"400;\n",[143,71523,71524],{"class":145,"line":2679},[143,71525,348],{"class":149},[143,71527,71528],{"class":145,"line":2684},[143,71529,71530],{"class":163},"td,th {\n",[143,71532,71533,71536],{"class":145,"line":3477},[143,71534,71535],{"class":163},"  border:1px solid",[143,71537,71538],{"class":266}," #b8daff;\n",[143,71540,71541],{"class":145,"line":3491},[143,71542,348],{"class":149},[143,71544,71545],{"class":145,"line":3499},[143,71546,71547],{"class":163},"td {\n",[143,71549,71550],{"class":145,"line":3504},[143,71551,71552],{"class":163},"  padding:10px;\n",[143,71554,71555],{"class":145,"line":3510},[143,71556,71557],{"class":163},"  color:#666;\n",[143,71559,71560,71562,71564],{"class":145,"line":3516},[143,71561,71406],{"class":153},[143,71563,284],{"class":149},[143,71565,71411],{"class":163},[143,71567,71568,71570,71572],{"class":145,"line":3521},[143,71569,71506],{"class":153},[143,71571,284],{"class":149},[143,71573,71574],{"class":163},"16px;\n",[143,71576,71577],{"class":145,"line":8848},[143,71578,348],{"class":149},[143,71580,71581],{"class":145,"line":8872},[143,71582,71583],{"class":163},"tbody tr {\n",[143,71585,71586,71588,71590],{"class":145,"line":8877},[143,71587,71491],{"class":153},[143,71589,284],{"class":149},[143,71591,71592],{"class":266},"#fff;\n",[143,71594,71595],{"class":145,"line":8883},[143,71596,348],{"class":149},[143,71598,71599],{"class":145,"line":8910},[143,71600,71601],{"class":163},"tbody tr:hover {\n",[143,71603,71604,71606,71608],{"class":145,"line":8915},[143,71605,71491],{"class":153},[143,71607,284],{"class":149},[143,71609,71610],{"class":266},"#e1ecf8;\n",[143,71612,71613],{"class":145,"line":8921},[143,71614,348],{"class":149},[143,71616,71617],{"class":145,"line":8933},[143,71618,71619],{"class":163},".info {\n",[143,71621,71622,71624,71626],{"class":145,"line":8945},[143,71623,71448],{"class":153},[143,71625,284],{"class":149},[143,71627,71628],{"class":163},"900px;\n",[143,71630,71631,71633,71635],{"class":145,"line":8957},[143,71632,71350],{"class":153},[143,71634,284],{"class":149},[143,71636,71637],{"class":163},"50px auto;\n",[143,71639,71640,71642,71644],{"class":145,"line":10616},[143,71641,71406],{"class":153},[143,71643,284],{"class":149},[143,71645,71411],{"class":163},[143,71647,71648],{"class":145,"line":10641},[143,71649,348],{"class":149},[143,71651,71652],{"class":145,"line":10664},[143,71653,71654],{"class":163},".info  input, .info select {\n",[143,71656,71657,71659,71661],{"class":145,"line":10688},[143,71658,71448],{"class":153},[143,71660,284],{"class":149},[143,71662,71663],{"class":163},"80px;\n",[143,71665,71666,71669,71671],{"class":145,"line":10693},[143,71667,71668],{"class":153},"  height",[143,71670,284],{"class":149},[143,71672,71673],{"class":163},"27px;\n",[143,71675,71676,71679,71681],{"class":145,"line":10698},[143,71677,71678],{"class":153},"  outline",[143,71680,284],{"class":149},[143,71682,71387],{"class":163},[143,71684,71685,71688,71690],{"class":145,"line":10703},[143,71686,71687],{"class":153},"  border-radius",[143,71689,284],{"class":149},[143,71691,71692],{"class":163},"5px;\n",[143,71694,71695,71697],{"class":145,"line":10712},[143,71696,71535],{"class":163},[143,71698,71538],{"class":266},[143,71700,71701,71704,71706],{"class":145,"line":10717},[143,71702,71703],{"class":153},"  padding-left",[143,71705,284],{"class":149},[143,71707,71692],{"class":163},[143,71709,71710,71713,71715],{"class":145,"line":10723},[143,71711,71712],{"class":153},"  box-sizing",[143,71714,284],{"class":149},[143,71716,71717],{"class":163},"border-box;\n",[143,71719,71720,71723,71725],{"class":145,"line":10744},[143,71721,71722],{"class":153},"  margin-right",[143,71724,284],{"class":149},[143,71726,71727],{"class":163},"15px;\n",[143,71729,71730],{"class":145,"line":10750},[143,71731,348],{"class":149},[143,71733,71734],{"class":145,"line":10764},[143,71735,71736],{"class":163},".info button {\n",[143,71738,71739,71741,71743],{"class":145,"line":10770},[143,71740,71448],{"class":153},[143,71742,284],{"class":149},[143,71744,71745],{"class":163},"60px;\n",[143,71747,71748,71750,71752],{"class":145,"line":10797},[143,71749,71668],{"class":153},[143,71751,284],{"class":149},[143,71753,71673],{"class":163},[143,71755,71756,71759,71761],{"class":145,"line":10806},[143,71757,71758],{"class":153},"  background-color",[143,71760,284],{"class":149},[143,71762,71763],{"class":266},"#004085;\n",[143,71765,71766,71768,71770],{"class":145,"line":10812},[143,71767,71678],{"class":153},[143,71769,284],{"class":149},[143,71771,71387],{"class":163},[143,71773,71774,71776,71778],{"class":145,"line":10820},[143,71775,766],{"class":153},[143,71777,284],{"class":149},[143,71779,71355],{"class":163},[143,71781,71782,71785,71787],{"class":145,"line":10825},[143,71783,71784],{"class":153},"  color",[143,71786,284],{"class":149},[143,71788,71592],{"class":266},[143,71790,71791,71794,71796],{"class":145,"line":17502},[143,71792,71793],{"class":153},"  cursor",[143,71795,284],{"class":149},[143,71797,71798],{"class":163},"pointer;\n",[143,71800,71801,71803,71805],{"class":145,"line":17508},[143,71802,71687],{"class":153},[143,71804,284],{"class":149},[143,71806,71692],{"class":163},[143,71808,71809],{"class":145,"line":17531},[143,71810,348],{"class":149},[143,71812,71813],{"class":145,"line":17537},[143,71814,71815],{"class":163},".info .age {\n",[143,71817,71818,71820,71822],{"class":145,"line":17560},[143,71819,71448],{"class":153},[143,71821,284],{"class":149},[143,71823,71824],{"class":163},"50px;\n",[143,71826,71827],{"class":145,"line":17574},[143,71828,348],{"class":149},[63,71830,71831],{},"思路：",[63,71833,71834],{},[29,71835],{"alt":138,"src":71836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[63,71838,71839],{},[29,71840],{"alt":138,"src":71841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[63,71843,71844],{},[29,71845],{"alt":138,"src":71846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[58,71848,71850],{"id":71849},"_3315-重绘回流","3.3.15 重绘回流",[63,71852,71853],{},[29,71854],{"alt":138,"src":71855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[63,71857,71858],{},[29,71859],{"alt":138,"src":71860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[63,71862,71863],{},[29,71864],{"alt":138,"src":71865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71867,71869],{"id":71868},"_34-bom","3.4 BOM",[63,71871,71872],{},[29,71873],{"alt":138,"src":71874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[63,71876,71877],{},"平时写的document省略了window而已，实际上是window.document",[63,71879,71880],{},"函数也是这样，调用的时候实际为window.fn()",[63,71882,71883],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[63,71885,71886],{},"window大部分情况下可以省略",[58,71888,71890],{"id":71889},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[63,71892,71893],{},"只执行一次",[63,71895,71896],{},[29,71897],{"alt":138,"src":71898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[63,71900,71901],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[63,71903,71904],{},[29,71905],{"alt":138,"src":71906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[58,71908,71910],{"id":71909},"_342-js执行机制","3.4.2 JS执行机制",[63,71912,71913],{},[29,71914],{"alt":138,"src":71915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[63,71917,71918],{},"两个的结果都是1111 3333 2222",[63,71920,71921],{},[29,71922],{"alt":138,"src":71923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[63,71925,71926],{},[29,71927],{"alt":138,"src":71928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[63,71930,71931],{},[29,71932],{"alt":138,"src":71933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[63,71935,71936],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[63,71938,71939],{},"工作流程：",[63,71941,71942],{},[29,71943],{"alt":138,"src":71944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[63,71946,71947],{},[29,71948],{"alt":138,"src":71949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[63,71951,71952],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[63,71954,71955],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[58,71957,71959],{"id":71958},"_343-location对象","3.4.3 location对象",[63,71961,71962],{},"location对象属于window这个全局对象下的，可以 省略window",[63,71964,71965],{},[29,71966],{"alt":138,"src":71967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[63,71969,71970],{},"href可以跳转页面",[19,71972,71973],{},[22,71974,71975],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[63,71977,71978],{},"search得到提交信息之后网站后边的地址",[63,71980,71981],{},[29,71982],{"alt":138,"src":71983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[63,71985,71986],{},[29,71987],{"alt":138,"src":71988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[19,71990,71991],{"start":35},[22,71992,71993],{},"hash:这个获取单页面应用#后边的地址",[63,71995,71996],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[63,71998,71999],{},[29,72000],{"alt":138,"src":72001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[133,72003,72005],{"className":53954,"code":72004,"language":53956,"meta":138,"style":138},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[140,72006,72007,72027,72047],{"__ignoreMap":138},[143,72008,72009,72011,72013,72015,72017,72020,72023,72025],{"class":145,"line":146},[143,72010,634],{"class":149},[143,72012,67],{"class":153},[143,72014,61940],{"class":156},[143,72016,160],{"class":149},[143,72018,72019],{"class":163},"\"#\u002Fmy\"",[143,72021,72022],{"class":149},">我的\u003C\u002F",[143,72024,67],{"class":153},[143,72026,183],{"class":149},[143,72028,72029,72031,72033,72035,72037,72040,72043,72045],{"class":145,"line":35},[143,72030,634],{"class":149},[143,72032,67],{"class":153},[143,72034,61940],{"class":156},[143,72036,160],{"class":149},[143,72038,72039],{"class":163},"\"#\u002Ffriend\"",[143,72041,72042],{"class":149},">关注\u003C\u002F",[143,72044,67],{"class":153},[143,72046,183],{"class":149},[143,72048,72049,72051,72053,72055,72057,72060,72063,72065],{"class":145,"line":46},[143,72050,634],{"class":149},[143,72052,67],{"class":153},[143,72054,61940],{"class":156},[143,72056,160],{"class":149},[143,72058,72059],{"class":163},"\"#\u002Fdownload\"",[143,72061,72062],{"class":149},">下载\u003C\u002F",[143,72064,67],{"class":153},[143,72066,183],{"class":149},[63,72068,72069],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[19,72071,72072],{"start":46},[22,72073,72074,72075,72077,72078,72080],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54602,72076],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54602,72079],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[58,72082,72084],{"id":72083},"_345-navigator对象","3.4.5 navigator对象",[63,72086,72087],{},[29,72088],{"alt":138,"src":72089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[133,72091,72095],{"className":72092,"code":72093,"language":72094,"meta":138,"style":138},"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",[140,72096,72097,72102,72113,72125,72130,72181,72222,72227,72240,72252,72257],{"__ignoreMap":138},[143,72098,72099],{"class":145,"line":146},[143,72100,72101],{"class":266},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[143,72103,72104,72106,72108,72110],{"class":145,"line":35},[143,72105,1268],{"class":755},[143,72107,1049],{"class":149},[143,72109,55334],{"class":755},[143,72111,72112],{"class":149}," () { \n",[143,72114,72115,72117,72120,72122],{"class":145,"line":46},[143,72116,7692],{"class":755},[143,72118,72119],{"class":280}," userAgent",[143,72121,14464],{"class":755},[143,72123,72124],{"class":149}," navigator.userAgent \n",[143,72126,72127],{"class":145,"line":293},[143,72128,72129],{"class":266},"\u002F\u002F 验证是否为Android或iPhone \n",[143,72131,72132,72134,72137,72139,72142,72145,72147,72149,72152,72154,72157,72161,72163,72165,72167,72170,72172,72174,72176,72178],{"class":145,"line":306},[143,72133,7692],{"class":755},[143,72135,72136],{"class":280}," android",[143,72138,14464],{"class":755},[143,72140,72141],{"class":149}," userAgent.",[143,72143,72144],{"class":156},"match",[143,72146,1049],{"class":149},[143,72148,1625],{"class":163},[143,72150,72151],{"class":48875},"(Android);",[143,72153,2024],{"class":755},[143,72155,72156],{"class":280},"[\\s",[143,72158,72160],{"class":72159},"snhLl","\\\u002F",[143,72162,1979],{"class":280},[143,72164,1522],{"class":755},[143,72166,1049],{"class":48875},[143,72168,72169],{"class":280},"[\\d.]",[143,72171,1522],{"class":755},[143,72173,1470],{"class":48875},[143,72175,2024],{"class":755},[143,72177,1625],{"class":163},[143,72179,72180],{"class":149},") \n",[143,72182,72183,72185,72188,72190,72192,72194,72196,72198,72201,72204,72207,72209,72211,72214,72216,72218,72220],{"class":145,"line":319},[143,72184,7692],{"class":755},[143,72186,72187],{"class":280}," iphone",[143,72189,14464],{"class":755},[143,72191,72141],{"class":149},[143,72193,72144],{"class":156},[143,72195,1049],{"class":149},[143,72197,1625],{"class":163},[143,72199,72200],{"class":48875},"(iPhone",[143,72202,72203],{"class":280},"\\s",[143,72205,72206],{"class":48875},"OS)",[143,72208,72203],{"class":280},[143,72210,1049],{"class":48875},[143,72212,72213],{"class":280},"[\\d_]",[143,72215,1522],{"class":755},[143,72217,1470],{"class":48875},[143,72219,1625],{"class":163},[143,72221,72180],{"class":149},[143,72223,72224],{"class":145,"line":332},[143,72225,72226],{"class":266},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[143,72228,72229,72231,72234,72237],{"class":145,"line":345},[143,72230,2434],{"class":755},[143,72232,72233],{"class":149}," (android ",[143,72235,72236],{"class":755},"||",[143,72238,72239],{"class":149}," iphone) { \n",[143,72241,72242,72245,72247,72250],{"class":145,"line":701},[143,72243,72244],{"class":149},"location.href ",[143,72246,160],{"class":755},[143,72248,72249],{"class":163}," 'http:\u002F\u002Fm.itcast.cn'",[143,72251,3574],{"class":149},[143,72253,72254],{"class":145,"line":707},[143,72255,72256],{"class":149},"} \n",[143,72258,72259],{"class":145,"line":727},[143,72260,72261],{"class":149},"})()\n",[58,72263,72265],{"id":72264},"_346-histroy对象","3.4.6 histroy对象",[63,72267,72268],{},[29,72269],{"alt":138,"src":72270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[63,72272,72273],{},"浏览器地址的前进与后退!!!",[63,72275,72276],{},"history.back() 等效于 history.go(-1)",[63,72278,72279],{},"history.forward() 等效于 history.go(1)",[14,72281,72283],{"id":72282},"_35-本地存储","3.5 本地存储",[19,72285,72286,72289,72292],{},[22,72287,72288],{},"数据存储在用户浏览器中",[22,72290,72291],{},"设置、读取方便、甚至页面刷新不丢失数据",[22,72293,72294],{},"容量较大，sessionStorage和localStorage约 5M 左右",[58,72296,72298],{"id":72297},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[63,72300,72301],{},"只能存储字符串",[63,72303,72304],{},[29,72305],{"alt":138,"src":72306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[63,72308,72309],{},[29,72310],{"alt":138,"src":72311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[63,72313,72314],{},"键值对要加引号,不然就会当变量来看了",[63,72316,72317],{},"localStorage.setItem('uname', 'pink')",[63,72319,72320],{},"刷新之后信息不再丢失",[63,72322,72323],{},"操作key,value会跟着变",[63,72325,72326],{},"删除只删除键就可以,即名字",[63,72328,72317],{},[63,72330,72331],{},"改:",[63,72333,72334],{},"localStorage.setItem('uname','red')",[63,72336,72337],{},"有这个键就是改,没有这个键就是改",[63,72339,72340],{},[29,72341],{"alt":138,"src":72342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[63,72344,72345],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[63,72347,72348],{},[29,72349],{"alt":138,"src":72350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[63,72352,72353],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[58,72355,72357],{"id":72356},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[63,72359,72360],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[63,72362,72363],{},"特性:",[19,72365,72366,72369,72372,72375],{},[22,72367,72368],{},"生命周期为关闭浏览器窗口",[22,72370,72371],{},"在同一个窗口(页面)下数据可以共享",[22,72373,72374],{},"以键值对的形式存储使用",[22,72376,72377],{},"用法跟localStorage 基本相同",[58,72379,72381],{"id":72380},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[63,72383,72384],{},"本地只能存储字符串,无法直接存储复杂数据类型",[133,72386,72388],{"className":53954,"code":72387,"language":53956,"meta":138,"style":138},"\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",[140,72389,72390,72398,72403,72408,72413,72418,72422,72427,72432],{"__ignoreMap":138},[143,72391,72392,72394,72396],{"class":145,"line":146},[143,72393,150],{"class":149},[143,72395,52701],{"class":153},[143,72397,183],{"class":149},[143,72399,72400],{"class":145,"line":35},[143,72401,72402],{"class":149},"    const obj = {\n",[143,72404,72405],{"class":145,"line":46},[143,72406,72407],{"class":149},"      uname: 'pink老师',\n",[143,72409,72410],{"class":145,"line":293},[143,72411,72412],{"class":149},"      age: 18,\n",[143,72414,72415],{"class":145,"line":306},[143,72416,72417],{"class":149},"      gender: '女'\n",[143,72419,72420],{"class":145,"line":319},[143,72421,3087],{"class":149},[143,72423,72424],{"class":145,"line":332},[143,72425,72426],{"class":149},"    \u002F\u002F 存储复杂数据类型\n",[143,72428,72429],{"class":145,"line":345},[143,72430,72431],{"class":149},"    localStorage.setItem('obj', obj)\n",[143,72433,72434,72436,72438],{"class":145,"line":701},[143,72435,53304],{"class":149},[143,72437,52701],{"class":153},[143,72439,183],{"class":149},[63,72441,72442],{},[29,72443],{"alt":138,"src":72444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[63,72446,72447],{},"如果获取一下数据:",[63,72449,72450],{},"log(localStorage.getItem('obj'))",[63,72452,72453],{},[29,72454],{"alt":138,"src":72455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[63,72457,72458],{},"发现直接存对象是使用不了的!!!",[22896,72460,72462],{"id":72461},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[63,72464,72465],{},[29,72466],{"alt":138,"src":72467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[133,72469,72471],{"className":51531,"code":72470,"language":51533,"meta":138,"style":138},"\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",[140,72472,72473,72481,72491,72501,72510,72518,72522,72526,72552,72571,72579,72583,72588,72593],{"__ignoreMap":138},[143,72474,72475,72477,72479],{"class":145,"line":146},[143,72476,150],{"class":149},[143,72478,52701],{"class":153},[143,72480,183],{"class":149},[143,72482,72483,72485,72487,72489],{"class":145,"line":35},[143,72484,12121],{"class":755},[143,72486,70852],{"class":280},[143,72488,14464],{"class":755},[143,72490,275],{"class":149},[143,72492,72493,72496,72499],{"class":145,"line":46},[143,72494,72495],{"class":149},"      uname: ",[143,72497,72498],{"class":163},"'pink老师'",[143,72500,32364],{"class":149},[143,72502,72503,72506,72508],{"class":145,"line":293},[143,72504,72505],{"class":149},"      age: ",[143,72507,1691],{"class":280},[143,72509,32364],{"class":149},[143,72511,72512,72515],{"class":145,"line":306},[143,72513,72514],{"class":149},"      gender: ",[143,72516,72517],{"class":163},"'女'\n",[143,72519,72520],{"class":145,"line":319},[143,72521,3087],{"class":149},[143,72523,72524],{"class":145,"line":332},[143,72525,72426],{"class":266},[143,72527,72528,72531,72534,72536,72539,72541,72544,72546,72549],{"class":145,"line":345},[143,72529,72530],{"class":149},"  localStorage.",[143,72532,72533],{"class":156},"setItem",[143,72535,1049],{"class":149},[143,72537,72538],{"class":163},"'obj'",[143,72540,13335],{"class":149},[143,72542,72543],{"class":280},"JSON",[143,72545,1599],{"class":149},[143,72547,72548],{"class":156},"stringify",[143,72550,72551],{"class":149},"(obj))\n",[143,72553,72554,72557,72559,72562,72565,72567,72569],{"class":145,"line":701},[143,72555,72556],{"class":149},"  console.",[143,72558,59130],{"class":156},[143,72560,72561],{"class":149},"(localStorage.",[143,72563,72564],{"class":156},"getItem",[143,72566,1049],{"class":149},[143,72568,72538],{"class":163},[143,72570,31395],{"class":149},[143,72572,72573,72575,72577],{"class":145,"line":707},[143,72574,53304],{"class":149},[143,72576,52701],{"class":153},[143,72578,183],{"class":149},[143,72580,72581],{"class":145,"line":727},[143,72582,71501],{"class":149},[143,72584,72585],{"class":145,"line":2518},[143,72586,72587],{"class":149},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[143,72589,72590],{"class":145,"line":2524},[143,72591,72592],{"class":149},"  类型是字符串的\n",[143,72594,72595],{"class":145,"line":2529},[143,72596,72597],{"class":149},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22896,72599,72601],{"id":72600},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[63,72603,72604],{},[29,72605],{"alt":138,"src":72606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[63,72608,72609],{},[29,72610],{"alt":138,"src":72611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[133,72613,72615],{"className":53954,"code":72614,"language":53956,"meta":138,"style":138},"  \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",[140,72616,72617,72625,72629,72633,72637,72641,72645,72650,72655,72660,72665,72670,72675,72680,72685],{"__ignoreMap":138},[143,72618,72619,72621,72623],{"class":145,"line":146},[143,72620,634],{"class":149},[143,72622,52701],{"class":153},[143,72624,183],{"class":149},[143,72626,72627],{"class":145,"line":35},[143,72628,72402],{"class":149},[143,72630,72631],{"class":145,"line":46},[143,72632,72407],{"class":149},[143,72634,72635],{"class":145,"line":293},[143,72636,72412],{"class":149},[143,72638,72639],{"class":145,"line":306},[143,72640,72417],{"class":149},[143,72642,72643],{"class":145,"line":319},[143,72644,3087],{"class":149},[143,72646,72647],{"class":145,"line":332},[143,72648,72649],{"class":149},"    \u002F\u002F 1.存储复杂数据类型\n",[143,72651,72652],{"class":145,"line":345},[143,72653,72654],{"class":149},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[143,72656,72657],{"class":145,"line":701},[143,72658,72659],{"class":149},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[143,72661,72662],{"class":145,"line":707},[143,72663,72664],{"class":149},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[143,72666,72667],{"class":145,"line":727},[143,72668,72669],{"class":149},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[143,72671,72672],{"class":145,"line":2518},[143,72673,72674],{"class":149},"    \u002F\u002F 取\n",[143,72676,72677],{"class":145,"line":2524},[143,72678,72679],{"class":149},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[143,72681,72682],{"class":145,"line":2529},[143,72683,72684],{"class":149},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[143,72686,72687,72689,72691],{"class":145,"line":2543},[143,72688,53304],{"class":149},[143,72690,52701],{"class":153},[143,72692,183],{"class":149},[63,72694,72695],{},[29,72696],{"alt":138,"src":72697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[58,72699,72701],{"id":72700},"_356-数组map方法","3.5.6 数组map方法",[63,72703,72704],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[63,72706,72707],{},[29,72708],{"alt":138,"src":72709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[63,72711,72712],{},[29,72713],{"alt":138,"src":72714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[63,72716,72717,72720],{},[25,72718,72719],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[63,72722,72723],{},"map有返回值，但是forEach没有返回值",[63,72725,72726],{},"map是个方法。用的时候要加 ()",[63,72728,72729],{},"map返回的是一个数组",[58,72731,72733],{"id":72732},"_357-数组中join方法","3.5.7 数组中join方法",[63,72735,72736],{},[29,72737],{"alt":138,"src":72738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[63,72740,72741],{},"类似于python中拼接字符串一样！",[19,72743,72744,72747,72750],{},[22,72745,72746],{},"小括号为空则逗号分开",[22,72748,72749],{},"小括号为空字符串 ''，则元素之间没有分隔符",[22,72751,72752],{},"小括号用啥符号就用进行分割",[58,72754,72756],{"id":72755},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[19,72758,72759,72762,72765,72768,72771],{},[22,72760,72761],{},"记住本地时间获取快速方式：new Date().toDateString()",[22,72763,72764],{},"尽量减少DOM操作，用好map+join的渲染方式",[22,72766,72767],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[22,72769,72770],{},"return可以实现函数的结束",[22,72772,72773],{},"禁止跳转是 preventDefault() 不要忘记",[133,72775,72777],{"className":51531,"code":72776,"language":51533,"meta":138,"style":138},"\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",[140,72778,72779,72789,72803,72807,72815,72829,72849,72861,72869,72875,72885,72895,72899,72903,72909,72919,72931,72935,72939,72946,72958,72972,72982,72986,72990,72997,73004,73011,73023,73035,73045,73057,73061,73065,73072,73079,73091,73103,73113,73125,73155,73159,73163,73170,73182,73194,73218,73228,73238,73242,73246,73254,73265,73277,73289,73301,73318,73330,73342,73346,73350,73357,73369,73381,73393,73404,73422,73435,73447,73471,73482,73486,73490,73498,73508,73512,73516,73522,73534,73545,73555,73559,73563,73569,73591,73595,73599,73605,73611,73623,73633,73645,73675,73688,73705,73709,73713,73724,73746,73756,73760,73764,73777,73787,73799,73811,73823,73835,73845,73855,73865,73876,73889,73893,73901,73909,73913,73921,73934,73954,73987,74020,74053,74079,74097,74115,74123,74149,74167,74185,74203,74221,74239,74247,74255,74273,74281,74310,74318,74326,74334,74347,74359,74371,74383,74395,74407,74420,74432,74440,74448,74456,74461,74466,74470,74474,74478,74482,74486,74490,74495,74500,74505,74510,74518,74526,74534,74539,74544,74549,74554,74559,74564,74569,74574,74579,74584,74589,74594,74599,74604,74608,74613,74618,74628,74637,74641,74646,74655,74671,74713,74753,74792,74857,74865,74869,74874,74892,74900,74905,74910,74940,74946,74951,74964,74976,74988,75000,75012,75024,75036,75040,75050,75054,75059,75064,75068,75077,75081,75086,75091,75110,75115,75135,75139,75144,75148,75153,75171,75189,75207,75226,75245,75264,75269,75275,75296,75302,75311,75317,75323,75329,75356,75369,75374,75384,75390,75396,75402,75408,75413,75419,75425,75431,75437,75470,75475,75480,75485,75490,75496,75502,75508,75519,75524,75530,75537,75551,75557,75581,75586,75591,75597,75603,75624,75630,75643,75649,75655,75661,75667,75672,75678,75684,75690,75708,75722,75728,75736,75742,75764,75769,75774,75779,75784,75789,75798,75807,75812],{"__ignoreMap":138},[143,72780,72781,72783,72785,72787],{"class":145,"line":146},[143,72782,52195],{"class":149},[143,72784,52198],{"class":153},[143,72786,52201],{"class":156},[143,72788,183],{"class":149},[143,72790,72791,72793,72795,72797,72799,72801],{"class":145,"line":35},[143,72792,150],{"class":149},[143,72794,51533],{"class":153},[143,72796,52212],{"class":156},[143,72798,160],{"class":149},[143,72800,52217],{"class":163},[143,72802,183],{"class":149},[143,72804,72805],{"class":145,"line":46},[143,72806,3300],{"emptyLinePlaceholder":976},[143,72808,72809,72811,72813],{"class":145,"line":293},[143,72810,150],{"class":149},[143,72812,52230],{"class":153},[143,72814,183],{"class":149},[143,72816,72817,72819,72821,72823,72825,72827],{"class":145,"line":306},[143,72818,634],{"class":149},[143,72820,52240],{"class":153},[143,72822,52243],{"class":156},[143,72824,160],{"class":149},[143,72826,52248],{"class":163},[143,72828,183],{"class":149},[143,72830,72831,72833,72835,72837,72839,72841,72843,72845,72847],{"class":145,"line":319},[143,72832,634],{"class":149},[143,72834,52240],{"class":153},[143,72836,15819],{"class":156},[143,72838,160],{"class":149},[143,72840,52287],{"class":163},[143,72842,52267],{"class":156},[143,72844,160],{"class":149},[143,72846,52294],{"class":163},[143,72848,183],{"class":149},[143,72850,72851,72853,72855,72857,72859],{"class":145,"line":332},[143,72852,634],{"class":149},[143,72854,52303],{"class":153},[143,72856,52306],{"class":149},[143,72858,52303],{"class":153},[143,72860,183],{"class":149},[143,72862,72863,72865,72867],{"class":145,"line":345},[143,72864,634],{"class":149},[143,72866,954],{"class":153},[143,72868,183],{"class":149},[143,72870,72871,72873],{"class":145,"line":701},[143,72872,7303],{"class":153},[143,72874,275],{"class":149},[143,72876,72877,72879,72881,72883],{"class":145,"line":707},[143,72878,55580],{"class":280},[143,72880,284],{"class":149},[143,72882,1234],{"class":280},[143,72884,290],{"class":149},[143,72886,72887,72889,72891,72893],{"class":145,"line":727},[143,72888,55591],{"class":280},[143,72890,284],{"class":149},[143,72892,1234],{"class":280},[143,72894,290],{"class":149},[143,72896,72897],{"class":145,"line":2518},[143,72898,3087],{"class":149},[143,72900,72901],{"class":145,"line":2524},[143,72902,3300],{"emptyLinePlaceholder":976},[143,72904,72905,72907],{"class":145,"line":2529},[143,72906,58162],{"class":153},[143,72908,275],{"class":149},[143,72910,72911,72913,72915,72917],{"class":145,"line":2543},[143,72912,58169],{"class":280},[143,72914,284],{"class":149},[143,72916,327],{"class":280},[143,72918,290],{"class":149},[143,72920,72921,72923,72925,72927,72929],{"class":145,"line":2548},[143,72922,62960],{"class":280},[143,72924,284],{"class":149},[143,72926,1741],{"class":280},[143,72928,774],{"class":755},[143,72930,290],{"class":149},[143,72932,72933],{"class":145,"line":2554},[143,72934,3087],{"class":149},[143,72936,72937],{"class":145,"line":2575},[143,72938,3300],{"emptyLinePlaceholder":976},[143,72940,72941,72944],{"class":145,"line":2580},[143,72942,72943],{"class":156},"    .info",[143,72945,275],{"class":149},[143,72947,72948,72950,72952,72954,72956],{"class":145,"line":2594},[143,72949,55656],{"class":280},[143,72951,284],{"class":149},[143,72953,52383],{"class":280},[143,72955,774],{"class":755},[143,72957,290],{"class":149},[143,72959,72960,72962,72964,72966,72968,72970],{"class":145,"line":2599},[143,72961,55591],{"class":280},[143,72963,284],{"class":149},[143,72965,1487],{"class":280},[143,72967,774],{"class":755},[143,72969,52448],{"class":280},[143,72971,290],{"class":149},[143,72973,72974,72976,72978,72980],{"class":145,"line":2628},[143,72975,58169],{"class":280},[143,72977,284],{"class":149},[143,72979,327],{"class":280},[143,72981,290],{"class":149},[143,72983,72984],{"class":145,"line":2633},[143,72985,3087],{"class":149},[143,72987,72988],{"class":145,"line":2650},[143,72989,3300],{"emptyLinePlaceholder":976},[143,72991,72992,72995],{"class":145,"line":2655},[143,72993,72994],{"class":156},"    .uname",[143,72996,32364],{"class":149},[143,72998,72999,73002],{"class":145,"line":2660},[143,73000,73001],{"class":156},"    .age",[143,73003,32364],{"class":149},[143,73005,73006,73009],{"class":145,"line":2665},[143,73007,73008],{"class":156},"    .salary",[143,73010,275],{"class":149},[143,73012,73013,73015,73017,73019,73021],{"class":145,"line":2679},[143,73014,55656],{"class":280},[143,73016,284],{"class":149},[143,73018,1352],{"class":280},[143,73020,774],{"class":755},[143,73022,290],{"class":149},[143,73024,73025,73027,73029,73031,73033],{"class":145,"line":2684},[143,73026,55670],{"class":280},[143,73028,284],{"class":149},[143,73030,1741],{"class":280},[143,73032,774],{"class":755},[143,73034,290],{"class":149},[143,73036,73037,73039,73041,73043],{"class":145,"line":3477},[143,73038,62663],{"class":280},[143,73040,284],{"class":149},[143,73042,55622],{"class":280},[143,73044,290],{"class":149},[143,73046,73047,73049,73051,73053,73055],{"class":145,"line":3491},[143,73048,62633],{"class":280},[143,73050,284],{"class":149},[143,73052,1616],{"class":280},[143,73054,774],{"class":755},[143,73056,290],{"class":149},[143,73058,73059],{"class":145,"line":3499},[143,73060,3087],{"class":149},[143,73062,73063],{"class":145,"line":3504},[143,73064,3300],{"emptyLinePlaceholder":976},[143,73066,73067,73070],{"class":145,"line":3510},[143,73068,73069],{"class":156},"    .gender",[143,73071,32364],{"class":149},[143,73073,73074,73077],{"class":145,"line":3516},[143,73075,73076],{"class":156},"    .city",[143,73078,275],{"class":149},[143,73080,73081,73083,73085,73087,73089],{"class":145,"line":3521},[143,73082,55656],{"class":280},[143,73084,284],{"class":149},[143,73086,1352],{"class":280},[143,73088,774],{"class":755},[143,73090,290],{"class":149},[143,73092,73093,73095,73097,73099,73101],{"class":145,"line":8848},[143,73094,55670],{"class":280},[143,73096,284],{"class":149},[143,73098,1866],{"class":280},[143,73100,774],{"class":755},[143,73102,290],{"class":149},[143,73104,73105,73107,73109,73111],{"class":145,"line":8872},[143,73106,62663],{"class":280},[143,73108,284],{"class":149},[143,73110,55622],{"class":280},[143,73112,290],{"class":149},[143,73114,73115,73117,73119,73121,73123],{"class":145,"line":8877},[143,73116,62633],{"class":280},[143,73118,284],{"class":149},[143,73120,1616],{"class":280},[143,73122,774],{"class":755},[143,73124,290],{"class":149},[143,73126,73127,73129,73131,73133,73135,73137,73140,73142,73144,73146,73149,73151,73153],{"class":145,"line":8883},[143,73128,62860],{"class":280},[143,73130,284],{"class":149},[143,73132,771],{"class":280},[143,73134,774],{"class":755},[143,73136,777],{"class":280},[143,73138,73139],{"class":280}," rgb",[143,73141,1049],{"class":149},[143,73143,2623],{"class":280},[143,73145,13335],{"class":149},[143,73147,73148],{"class":280},"197",[143,73150,13335],{"class":149},[143,73152,73148],{"class":280},[143,73154,3619],{"class":149},[143,73156,73157],{"class":145,"line":8910},[143,73158,3087],{"class":149},[143,73160,73161],{"class":145,"line":8915},[143,73162,3300],{"emptyLinePlaceholder":976},[143,73164,73165,73168],{"class":145,"line":8921},[143,73166,73167],{"class":153},"    button",[143,73169,275],{"class":149},[143,73171,73172,73174,73176,73178,73180],{"class":145,"line":8933},[143,73173,55670],{"class":280},[143,73175,284],{"class":149},[143,73177,1866],{"class":280},[143,73179,774],{"class":755},[143,73181,290],{"class":149},[143,73183,73184,73186,73188,73190,73192],{"class":145,"line":8945},[143,73185,55656],{"class":280},[143,73187,284],{"class":149},[143,73189,1525],{"class":280},[143,73191,774],{"class":755},[143,73193,290],{"class":149},[143,73195,73196,73198,73200,73203,73205,73207,73209,73212,73214,73216],{"class":145,"line":8957},[143,73197,55769],{"class":280},[143,73199,284],{"class":149},[143,73201,73202],{"class":280},"rgb",[143,73204,1049],{"class":149},[143,73206,2007],{"class":280},[143,73208,13335],{"class":149},[143,73210,73211],{"class":280},"187",[143,73213,13335],{"class":149},[143,73215,1340],{"class":280},[143,73217,3619],{"class":149},[143,73219,73220,73222,73224,73226],{"class":145,"line":10616},[143,73221,58299],{"class":280},[143,73223,284],{"class":149},[143,73225,61725],{"class":280},[143,73227,290],{"class":149},[143,73229,73230,73232,73234,73236],{"class":145,"line":10641},[143,73231,62860],{"class":280},[143,73233,284],{"class":149},[143,73235,1234],{"class":280},[143,73237,290],{"class":149},[143,73239,73240],{"class":145,"line":10664},[143,73241,3087],{"class":149},[143,73243,73244],{"class":145,"line":10688},[143,73245,3300],{"emptyLinePlaceholder":976},[143,73247,73248,73250,73252],{"class":145,"line":10693},[143,73249,73167],{"class":153},[143,73251,52577],{"class":153},[143,73253,275],{"class":149},[143,73255,73256,73258,73260,73263],{"class":145,"line":10698},[143,73257,55894],{"class":280},[143,73259,284],{"class":149},[143,73261,73262],{"class":280},"inline-block",[143,73264,290],{"class":149},[143,73266,73267,73269,73271,73273,73275],{"class":145,"line":10703},[143,73268,55656],{"class":280},[143,73270,284],{"class":149},[143,73272,1487],{"class":280},[143,73274,774],{"class":755},[143,73276,290],{"class":149},[143,73278,73279,73281,73283,73285,73287],{"class":145,"line":10712},[143,73280,55670],{"class":280},[143,73282,284],{"class":149},[143,73284,1487],{"class":280},[143,73286,774],{"class":755},[143,73288,290],{"class":149},[143,73290,73291,73293,73295,73297,73299],{"class":145,"line":10717},[143,73292,58242],{"class":280},[143,73294,284],{"class":149},[143,73296,1513],{"class":280},[143,73298,774],{"class":755},[143,73300,290],{"class":149},[143,73302,73303,73305,73307,73309,73311,73313,73316],{"class":145,"line":10723},[143,73304,62860],{"class":280},[143,73306,284],{"class":149},[143,73308,771],{"class":280},[143,73310,774],{"class":755},[143,73312,777],{"class":280},[143,73314,73315],{"class":280}," #fff",[143,73317,290],{"class":149},[143,73319,73320,73322,73324,73326,73328],{"class":145,"line":10744},[143,73321,56019],{"class":280},[143,73323,284],{"class":149},[143,73325,1360],{"class":280},[143,73327,774],{"class":755},[143,73329,290],{"class":149},[143,73331,73332,73334,73336,73338,73340],{"class":145,"line":10750},[143,73333,62633],{"class":280},[143,73335,284],{"class":149},[143,73337,771],{"class":280},[143,73339,774],{"class":755},[143,73341,290],{"class":149},[143,73343,73344],{"class":145,"line":10764},[143,73345,3087],{"class":149},[143,73347,73348],{"class":145,"line":10770},[143,73349,3300],{"emptyLinePlaceholder":976},[143,73351,73352,73355],{"class":145,"line":10797},[143,73353,73354],{"class":156},"    .total",[143,73356,275],{"class":149},[143,73358,73359,73361,73363,73365,73367],{"class":145,"line":10806},[143,73360,55656],{"class":280},[143,73362,284],{"class":149},[143,73364,62512],{"class":280},[143,73366,774],{"class":755},[143,73368,290],{"class":149},[143,73370,73371,73373,73375,73377,73379],{"class":145,"line":10812},[143,73372,55670],{"class":280},[143,73374,284],{"class":149},[143,73376,1442],{"class":280},[143,73378,774],{"class":755},[143,73380,290],{"class":149},[143,73382,73383,73385,73387,73389,73391],{"class":145,"line":10820},[143,73384,58242],{"class":280},[143,73386,284],{"class":149},[143,73388,1442],{"class":280},[143,73390,774],{"class":755},[143,73392,290],{"class":149},[143,73394,73395,73397,73399,73402],{"class":145,"line":10825},[143,73396,58169],{"class":280},[143,73398,284],{"class":149},[143,73400,73401],{"class":280},"right",[143,73403,290],{"class":149},[143,73405,73406,73408,73410,73412,73414,73416,73418,73420],{"class":145,"line":17502},[143,73407,55591],{"class":280},[143,73409,284],{"class":149},[143,73411,1442],{"class":280},[143,73413,774],{"class":755},[143,73415,52448],{"class":280},[143,73417,2938],{"class":280},[143,73419,774],{"class":755},[143,73421,290],{"class":149},[143,73423,73424,73427,73429,73431,73433],{"class":145,"line":17508},[143,73425,73426],{"class":280},"      padding-right",[143,73428,284],{"class":149},[143,73430,1487],{"class":280},[143,73432,774],{"class":755},[143,73434,290],{"class":149},[143,73436,73437,73439,73441,73443,73445],{"class":145,"line":17531},[143,73438,55807],{"class":280},[143,73440,284],{"class":149},[143,73442,1564],{"class":280},[143,73444,774],{"class":755},[143,73446,290],{"class":149},[143,73448,73449,73451,73453,73455,73457,73460,73462,73465,73467,73469],{"class":145,"line":17537},[143,73450,55769],{"class":280},[143,73452,284],{"class":149},[143,73454,73202],{"class":280},[143,73456,1049],{"class":149},[143,73458,73459],{"class":280},"237",[143,73461,13335],{"class":149},[143,73463,73464],{"class":280},"235",[143,73466,13335],{"class":149},[143,73468,73464],{"class":280},[143,73470,3619],{"class":149},[143,73472,73473,73476,73478,73480],{"class":145,"line":17560},[143,73474,73475],{"class":280},"      box-sizing",[143,73477,284],{"class":149},[143,73479,61388],{"class":280},[143,73481,290],{"class":149},[143,73483,73484],{"class":145,"line":17574},[143,73485,3087],{"class":149},[143,73487,73488],{"class":145,"line":17594},[143,73489,3300],{"emptyLinePlaceholder":976},[143,73491,73492,73494,73496],{"class":145,"line":17600},[143,73493,73354],{"class":156},[143,73495,52577],{"class":153},[143,73497,275],{"class":149},[143,73499,73500,73502,73504,73506],{"class":145,"line":17611},[143,73501,58299],{"class":280},[143,73503,284],{"class":149},[143,73505,58304],{"class":280},[143,73507,290],{"class":149},[143,73509,73510],{"class":145,"line":17634},[143,73511,3087],{"class":149},[143,73513,73514],{"class":145,"line":17656},[143,73515,3300],{"emptyLinePlaceholder":976},[143,73517,73518,73520],{"class":145,"line":17661},[143,73519,65905],{"class":153},[143,73521,275],{"class":149},[143,73523,73524,73526,73528,73530,73532],{"class":145,"line":17667},[143,73525,55656],{"class":280},[143,73527,284],{"class":149},[143,73529,62512],{"class":280},[143,73531,774],{"class":755},[143,73533,290],{"class":149},[143,73535,73536,73538,73540,73543],{"class":145,"line":17681},[143,73537,55591],{"class":280},[143,73539,284],{"class":149},[143,73541,73542],{"class":280},"auto",[143,73544,290],{"class":149},[143,73546,73547,73549,73551,73553],{"class":145,"line":17694},[143,73548,65912],{"class":280},[143,73550,284],{"class":149},[143,73552,65917],{"class":280},[143,73554,290],{"class":149},[143,73556,73557],{"class":145,"line":17699},[143,73558,3087],{"class":149},[143,73560,73561],{"class":145,"line":17713},[143,73562,3300],{"emptyLinePlaceholder":976},[143,73564,73565,73567],{"class":145,"line":17718},[143,73566,65997],{"class":153},[143,73568,275],{"class":149},[143,73570,73571,73573,73575,73577,73579,73581,73583,73585,73587,73589],{"class":145,"line":17724},[143,73572,55769],{"class":280},[143,73574,284],{"class":149},[143,73576,73202],{"class":280},[143,73578,1049],{"class":149},[143,73580,73459],{"class":280},[143,73582,13335],{"class":149},[143,73584,73464],{"class":280},[143,73586,13335],{"class":149},[143,73588,73464],{"class":280},[143,73590,3619],{"class":149},[143,73592,73593],{"class":145,"line":17729},[143,73594,3087],{"class":149},[143,73596,73597],{"class":145,"line":17743},[143,73598,3300],{"emptyLinePlaceholder":976},[143,73600,73601,73603],{"class":145,"line":17748},[143,73602,65997],{"class":153},[143,73604,32364],{"class":149},[143,73606,73607,73609],{"class":145,"line":17753},[143,73608,66063],{"class":153},[143,73610,275],{"class":149},[143,73612,73613,73615,73617,73619,73621],{"class":145,"line":17767},[143,73614,55670],{"class":280},[143,73616,284],{"class":149},[143,73618,1314],{"class":280},[143,73620,774],{"class":755},[143,73622,290],{"class":149},[143,73624,73625,73627,73629,73631],{"class":145,"line":17779},[143,73626,58169],{"class":280},[143,73628,284],{"class":149},[143,73630,24634],{"class":280},[143,73632,290],{"class":149},[143,73634,73635,73637,73639,73641,73643],{"class":145,"line":17784},[143,73636,55807],{"class":280},[143,73638,284],{"class":149},[143,73640,1590],{"class":280},[143,73642,774],{"class":755},[143,73644,290],{"class":149},[143,73646,73647,73649,73651,73653,73655,73657,73659,73661,73664,73666,73669,73671,73673],{"class":145,"line":17797},[143,73648,62860],{"class":280},[143,73650,284],{"class":149},[143,73652,771],{"class":280},[143,73654,774],{"class":755},[143,73656,777],{"class":280},[143,73658,73139],{"class":280},[143,73660,1049],{"class":149},[143,73662,73663],{"class":280},"228",[143,73665,13335],{"class":149},[143,73667,73668],{"class":280},"225",[143,73670,13335],{"class":149},[143,73672,73668],{"class":280},[143,73674,3619],{"class":149},[143,73676,73677,73680,73682,73684,73686],{"class":145,"line":17802},[143,73678,73679],{"class":280},"      padding-left",[143,73681,284],{"class":149},[143,73683,1360],{"class":280},[143,73685,774],{"class":755},[143,73687,290],{"class":149},[143,73689,73690,73692,73694,73696,73699,73701,73703],{"class":145,"line":17807},[143,73691,62743],{"class":280},[143,73693,284],{"class":149},[143,73695,29019],{"class":280},[143,73697,73698],{"class":280}," linear",[143,73700,62750],{"class":280},[143,73702,1736],{"class":755},[143,73704,290],{"class":149},[143,73706,73707],{"class":145,"line":17812},[143,73708,3087],{"class":149},[143,73710,73711],{"class":145,"line":17825},[143,73712,3300],{"emptyLinePlaceholder":976},[143,73714,73715,73718,73720,73722],{"class":145,"line":17830},[143,73716,73717],{"class":153},"    tbody",[143,73719,71025],{"class":153},[143,73721,61823],{"class":156},[143,73723,275],{"class":149},[143,73725,73726,73728,73730,73732,73734,73736,73738,73740,73742,73744],{"class":145,"line":33531},[143,73727,55769],{"class":280},[143,73729,284],{"class":149},[143,73731,73202],{"class":280},[143,73733,1049],{"class":149},[143,73735,73459],{"class":280},[143,73737,13335],{"class":149},[143,73739,73464],{"class":280},[143,73741,13335],{"class":149},[143,73743,73464],{"class":280},[143,73745,3619],{"class":149},[143,73747,73748,73750,73752,73754],{"class":145,"line":33537},[143,73749,62908],{"class":280},[143,73751,284],{"class":149},[143,73753,62913],{"class":280},[143,73755,290],{"class":149},[143,73757,73758],{"class":145,"line":33543},[143,73759,3087],{"class":149},[143,73761,73762],{"class":145,"line":33549},[143,73763,3300],{"emptyLinePlaceholder":976},[143,73765,73766,73768,73770,73773,73775],{"class":145,"line":33555},[143,73767,73717],{"class":153},[143,73769,71025],{"class":153},[143,73771,73772],{"class":153}," td",[143,73774,2302],{"class":153},[143,73776,275],{"class":149},[143,73778,73779,73781,73783,73785],{"class":145,"line":33566},[143,73780,55894],{"class":280},[143,73782,284],{"class":149},[143,73784,61752],{"class":280},[143,73786,290],{"class":149},[143,73788,73789,73791,73793,73795,73797],{"class":145,"line":33572},[143,73790,55656],{"class":280},[143,73792,284],{"class":149},[143,73794,1947],{"class":280},[143,73796,774],{"class":755},[143,73798,290],{"class":149},[143,73800,73801,73803,73805,73807,73809],{"class":145,"line":33592},[143,73802,55670],{"class":280},[143,73804,284],{"class":149},[143,73806,1866],{"class":280},[143,73808,774],{"class":755},[143,73810,290],{"class":149},[143,73812,73813,73815,73817,73819,73821],{"class":145,"line":33598},[143,73814,58242],{"class":280},[143,73816,284],{"class":149},[143,73818,1866],{"class":280},[143,73820,774],{"class":755},[143,73822,290],{"class":149},[143,73824,73825,73827,73829,73831,73833],{"class":145,"line":33609},[143,73826,62960],{"class":280},[143,73828,284],{"class":149},[143,73830,1122],{"class":280},[143,73832,774],{"class":755},[143,73834,290],{"class":149},[143,73836,73837,73839,73841,73843],{"class":145,"line":33615},[143,73838,58299],{"class":280},[143,73840,284],{"class":149},[143,73842,61725],{"class":280},[143,73844,290],{"class":149},[143,73846,73847,73849,73851,73853],{"class":145,"line":33621},[143,73848,58169],{"class":280},[143,73850,284],{"class":149},[143,73852,327],{"class":280},[143,73854,290],{"class":149},[143,73856,73857,73859,73861,73863],{"class":145,"line":33627},[143,73858,64852],{"class":280},[143,73860,284],{"class":149},[143,73862,55622],{"class":280},[143,73864,290],{"class":149},[143,73866,73867,73869,73871,73874],{"class":145,"line":33633},[143,73868,55769],{"class":280},[143,73870,284],{"class":149},[143,73872,73873],{"class":280},"orange",[143,73875,290],{"class":149},[143,73877,73878,73880,73882,73885,73887],{"class":145,"line":33639},[143,73879,56019],{"class":280},[143,73881,284],{"class":149},[143,73883,73884],{"class":280},"12.5",[143,73886,774],{"class":755},[143,73888,290],{"class":149},[143,73890,73891],{"class":145,"line":33645},[143,73892,3087],{"class":149},[143,73894,73895,73897,73899],{"class":145,"line":33651},[143,73896,53304],{"class":149},[143,73898,954],{"class":153},[143,73900,183],{"class":149},[143,73902,73903,73905,73907],{"class":145,"line":33671},[143,73904,730],{"class":149},[143,73906,52230],{"class":153},[143,73908,183],{"class":149},[143,73910,73911],{"class":145,"line":33677},[143,73912,3300],{"emptyLinePlaceholder":976},[143,73914,73915,73917,73919],{"class":145,"line":33693},[143,73916,150],{"class":149},[143,73918,52688],{"class":153},[143,73920,183],{"class":149},[143,73922,73923,73925,73927,73930,73932],{"class":145,"line":33699},[143,73924,634],{"class":149},[143,73926,14],{"class":153},[143,73928,73929],{"class":149},">学生就业统计表\u003C\u002F",[143,73931,14],{"class":153},[143,73933,183],{"class":149},[143,73935,73936,73938,73940,73942,73944,73946,73948,73950,73952],{"class":145,"line":33713},[143,73937,634],{"class":149},[143,73939,67507],{"class":153},[143,73941,617],{"class":156},[143,73943,160],{"class":149},[143,73945,63547],{"class":163},[143,73947,69951],{"class":156},[143,73949,160],{"class":149},[143,73951,32674],{"class":163},[143,73953,183],{"class":149},[143,73955,73956,73958,73960,73962,73964,73966,73968,73970,73972,73974,73976,73979,73981,73983,73985],{"class":145,"line":33719},[143,73957,52237],{"class":149},[143,73959,746],{"class":153},[143,73961,54709],{"class":156},[143,73963,160],{"class":149},[143,73965,758],{"class":163},[143,73967,15819],{"class":156},[143,73969,160],{"class":149},[143,73971,69977],{"class":163},[143,73973,61903],{"class":156},[143,73975,160],{"class":149},[143,73977,73978],{"class":163},"\"姓名\"",[143,73980,617],{"class":156},[143,73982,160],{"class":149},[143,73984,69977],{"class":163},[143,73986,183],{"class":149},[143,73988,73989,73991,73993,73995,73997,73999,74001,74003,74005,74007,74009,74012,74014,74016,74018],{"class":145,"line":33734},[143,73990,52237],{"class":149},[143,73992,746],{"class":153},[143,73994,54709],{"class":156},[143,73996,160],{"class":149},[143,73998,758],{"class":163},[143,74000,15819],{"class":156},[143,74002,160],{"class":149},[143,74004,70005],{"class":163},[143,74006,61903],{"class":156},[143,74008,160],{"class":149},[143,74010,74011],{"class":163},"\"年龄\"",[143,74013,617],{"class":156},[143,74015,160],{"class":149},[143,74017,70005],{"class":163},[143,74019,183],{"class":149},[143,74021,74022,74024,74026,74028,74030,74032,74034,74036,74038,74040,74042,74045,74047,74049,74051],{"class":145,"line":33740},[143,74023,52237],{"class":149},[143,74025,746],{"class":153},[143,74027,54709],{"class":156},[143,74029,160],{"class":149},[143,74031,758],{"class":163},[143,74033,15819],{"class":156},[143,74035,160],{"class":149},[143,74037,70107],{"class":163},[143,74039,61903],{"class":156},[143,74041,160],{"class":149},[143,74043,74044],{"class":163},"\"薪资\"",[143,74046,617],{"class":156},[143,74048,160],{"class":149},[143,74050,70107],{"class":163},[143,74052,183],{"class":149},[143,74054,74055,74057,74059,74061,74063,74065,74067,74069,74071,74073,74075,74077],{"class":145,"line":33749},[143,74056,52237],{"class":149},[143,74058,70025],{"class":153},[143,74060,15819],{"class":156},[143,74062,160],{"class":149},[143,74064,70032],{"class":163},[143,74066,15858],{"class":156},[143,74068,160],{"class":149},[143,74070,8552],{"class":163},[143,74072,617],{"class":156},[143,74074,160],{"class":149},[143,74076,70032],{"class":163},[143,74078,183],{"class":149},[143,74080,74081,74083,74085,74087,74089,74091,74093,74095],{"class":145,"line":33755},[143,74082,56119],{"class":149},[143,74084,70047],{"class":153},[143,74086,67533],{"class":156},[143,74088,160],{"class":149},[143,74090,10861],{"class":163},[143,74092,70056],{"class":149},[143,74094,70047],{"class":153},[143,74096,183],{"class":149},[143,74098,74099,74101,74103,74105,74107,74109,74111,74113],{"class":145,"line":33764},[143,74100,56119],{"class":149},[143,74102,70047],{"class":153},[143,74104,67533],{"class":156},[143,74106,160],{"class":149},[143,74108,10930],{"class":163},[143,74110,70075],{"class":149},[143,74112,70047],{"class":153},[143,74114,183],{"class":149},[143,74116,74117,74119,74121],{"class":145,"line":33770},[143,74118,52665],{"class":149},[143,74120,70025],{"class":153},[143,74122,183],{"class":149},[143,74124,74125,74127,74129,74131,74133,74135,74137,74139,74141,74143,74145,74147],{"class":145,"line":33776},[143,74126,52237],{"class":149},[143,74128,70025],{"class":153},[143,74130,15819],{"class":156},[143,74132,160],{"class":149},[143,74134,70129],{"class":163},[143,74136,15858],{"class":156},[143,74138,160],{"class":149},[143,74140,8552],{"class":163},[143,74142,617],{"class":156},[143,74144,160],{"class":149},[143,74146,70129],{"class":163},[143,74148,183],{"class":149},[143,74150,74151,74153,74155,74157,74159,74161,74163,74165],{"class":145,"line":33785},[143,74152,56119],{"class":149},[143,74154,70047],{"class":153},[143,74156,67533],{"class":156},[143,74158,160],{"class":149},[143,74160,70150],{"class":163},[143,74162,70153],{"class":149},[143,74164,70047],{"class":153},[143,74166,183],{"class":149},[143,74168,74169,74171,74173,74175,74177,74179,74181,74183],{"class":145,"line":33791},[143,74170,56119],{"class":149},[143,74172,70047],{"class":153},[143,74174,67533],{"class":156},[143,74176,160],{"class":149},[143,74178,70170],{"class":163},[143,74180,70173],{"class":149},[143,74182,70047],{"class":153},[143,74184,183],{"class":149},[143,74186,74187,74189,74191,74193,74195,74197,74199,74201],{"class":145,"line":33802},[143,74188,56119],{"class":149},[143,74190,70047],{"class":153},[143,74192,67533],{"class":156},[143,74194,160],{"class":149},[143,74196,70190],{"class":163},[143,74198,70193],{"class":149},[143,74200,70047],{"class":153},[143,74202,183],{"class":149},[143,74204,74205,74207,74209,74211,74213,74215,74217,74219],{"class":145,"line":33808},[143,74206,56119],{"class":149},[143,74208,70047],{"class":153},[143,74210,67533],{"class":156},[143,74212,160],{"class":149},[143,74214,70210],{"class":163},[143,74216,70213],{"class":149},[143,74218,70047],{"class":153},[143,74220,183],{"class":149},[143,74222,74223,74225,74227,74229,74231,74233,74235,74237],{"class":145,"line":33827},[143,74224,56119],{"class":149},[143,74226,70047],{"class":153},[143,74228,67533],{"class":156},[143,74230,160],{"class":149},[143,74232,70230],{"class":163},[143,74234,70233],{"class":149},[143,74236,70047],{"class":153},[143,74238,183],{"class":149},[143,74240,74241,74243,74245],{"class":145,"line":33833},[143,74242,52665],{"class":149},[143,74244,70025],{"class":153},[143,74246,183],{"class":149},[143,74248,74249,74251,74253],{"class":145,"line":33844},[143,74250,52237],{"class":149},[143,74252,54772],{"class":153},[143,74254,183],{"class":149},[143,74256,74257,74259,74261,74264,74266,74269,74271],{"class":145,"line":33850},[143,74258,56119],{"class":149},[143,74260,143],{"class":153},[143,74262,74263],{"class":149},">+\u003C\u002F",[143,74265,143],{"class":153},[143,74267,74268],{"class":149},">添加\u003C\u002F",[143,74270,54772],{"class":153},[143,74272,183],{"class":149},[143,74274,74275,74277,74279],{"class":145,"line":33870},[143,74276,53304],{"class":149},[143,74278,67507],{"class":153},[143,74280,183],{"class":149},[143,74282,74283,74285,74287,74289,74291,74293,74296,74298,74301,74303,74306,74308],{"class":145,"line":33886},[143,74284,634],{"class":149},[143,74286,614],{"class":153},[143,74288,617],{"class":156},[143,74290,160],{"class":149},[143,74292,63463],{"class":163},[143,74294,74295],{"class":149},">共有数据 \u003C",[143,74297,143],{"class":153},[143,74299,74300],{"class":149},">0\u003C\u002F",[143,74302,143],{"class":153},[143,74304,74305],{"class":149},"> 条\u003C\u002F",[143,74307,614],{"class":153},[143,74309,183],{"class":149},[143,74311,74312,74314,74316],{"class":145,"line":33892},[143,74313,634],{"class":149},[143,74315,1181],{"class":153},[143,74317,183],{"class":149},[143,74319,74320,74322,74324],{"class":145,"line":33906},[143,74321,52237],{"class":149},[143,74323,1184],{"class":153},[143,74325,183],{"class":149},[143,74327,74328,74330,74332],{"class":145,"line":33912},[143,74329,56119],{"class":149},[143,74331,1187],{"class":153},[143,74333,183],{"class":149},[143,74335,74336,74338,74340,74343,74345],{"class":145,"line":33918},[143,74337,56185],{"class":149},[143,74339,1190],{"class":153},[143,74341,74342],{"class":149},">ID\u003C\u002F",[143,74344,1190],{"class":153},[143,74346,183],{"class":149},[143,74348,74349,74351,74353,74355,74357],{"class":145,"line":33929},[143,74350,56185],{"class":149},[143,74352,1190],{"class":153},[143,74354,70336],{"class":149},[143,74356,1190],{"class":153},[143,74358,183],{"class":149},[143,74360,74361,74363,74365,74367,74369],{"class":145,"line":33935},[143,74362,56185],{"class":149},[143,74364,1190],{"class":153},[143,74366,70349],{"class":149},[143,74368,1190],{"class":153},[143,74370,183],{"class":149},[143,74372,74373,74375,74377,74379,74381],{"class":145,"line":33941},[143,74374,56185],{"class":149},[143,74376,1190],{"class":153},[143,74378,70362],{"class":149},[143,74380,1190],{"class":153},[143,74382,183],{"class":149},[143,74384,74385,74387,74389,74391,74393],{"class":145,"line":33951},[143,74386,56185],{"class":149},[143,74388,1190],{"class":153},[143,74390,70375],{"class":149},[143,74392,1190],{"class":153},[143,74394,183],{"class":149},[143,74396,74397,74399,74401,74403,74405],{"class":145,"line":33957},[143,74398,56185],{"class":149},[143,74400,1190],{"class":153},[143,74402,70388],{"class":149},[143,74404,1190],{"class":153},[143,74406,183],{"class":149},[143,74408,74409,74411,74413,74416,74418],{"class":145,"line":33968},[143,74410,56185],{"class":149},[143,74412,1190],{"class":153},[143,74414,74415],{"class":149},">录入时间\u003C\u002F",[143,74417,1190],{"class":153},[143,74419,183],{"class":149},[143,74421,74422,74424,74426,74428,74430],{"class":145,"line":33974},[143,74423,56185],{"class":149},[143,74425,1190],{"class":153},[143,74427,70401],{"class":149},[143,74429,1190],{"class":153},[143,74431,183],{"class":149},[143,74433,74434,74436,74438],{"class":145,"line":33984},[143,74435,56290],{"class":149},[143,74437,1187],{"class":153},[143,74439,183],{"class":149},[143,74441,74442,74444,74446],{"class":145,"line":33989},[143,74443,52665],{"class":149},[143,74445,1184],{"class":153},[143,74447,183],{"class":149},[143,74449,74450,74452,74454],{"class":145,"line":33995},[143,74451,52237],{"class":149},[143,74453,1227],{"class":153},[143,74455,183],{"class":149},[143,74457,74458],{"class":145,"line":34044},[143,74459,74460],{"class":266},"      \u003C!-- \u003Ctr>\n",[143,74462,74463],{"class":145,"line":34091},[143,74464,74465],{"class":266},"        \u003Ctd>1\u003C\u002Ftd>\n",[143,74467,74468],{"class":145,"line":34096},[143,74469,74465],{"class":266},[143,74471,74472],{"class":145,"line":34102},[143,74473,74465],{"class":266},[143,74475,74476],{"class":145,"line":34121},[143,74477,74465],{"class":266},[143,74479,74480],{"class":145,"line":34127},[143,74481,74465],{"class":266},[143,74483,74484],{"class":145,"line":34147},[143,74485,74465],{"class":266},[143,74487,74488],{"class":145,"line":34153},[143,74489,74465],{"class":266},[143,74491,74492],{"class":145,"line":34159},[143,74493,74494],{"class":266},"        \u003Ctd>\n",[143,74496,74497],{"class":145,"line":34169},[143,74498,74499],{"class":266},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[143,74501,74502],{"class":145,"line":34174},[143,74503,74504],{"class":266},"        \u003C\u002Ftd>\n",[143,74506,74507],{"class":145,"line":34180},[143,74508,74509],{"class":266},"      \u003C\u002Ftr> -->\n",[143,74511,74512,74514,74516],{"class":145,"line":34196},[143,74513,52665],{"class":149},[143,74515,1227],{"class":153},[143,74517,183],{"class":149},[143,74519,74520,74522,74524],{"class":145,"line":34241},[143,74521,53304],{"class":149},[143,74523,1181],{"class":153},[143,74525,183],{"class":149},[143,74527,74528,74530,74532],{"class":145,"line":34247},[143,74529,634],{"class":149},[143,74531,52701],{"class":153},[143,74533,183],{"class":149},[143,74535,74536],{"class":145,"line":34253},[143,74537,74538],{"class":266},"    \u002F\u002F const initData = [{\n",[143,74540,74541],{"class":145,"line":34259},[143,74542,74543],{"class":266},"    \u002F\u002F   unameId: 1,\n",[143,74545,74546],{"class":145,"line":34270},[143,74547,74548],{"class":266},"    \u002F\u002F   uname: '华晨宇',\n",[143,74550,74551],{"class":145,"line":34276},[143,74552,74553],{"class":266},"    \u002F\u002F   age: 22,\n",[143,74555,74556],{"class":145,"line":34282},[143,74557,74558],{"class":266},"    \u002F\u002F   salary: 12000,\n",[143,74560,74561],{"class":145,"line":34288},[143,74562,74563],{"class":266},"    \u002F\u002F   gender: '男',\n",[143,74565,74566],{"class":145,"line":34306},[143,74567,74568],{"class":266},"    \u002F\u002F   city: '北京',\n",[143,74570,74571],{"class":145,"line":34320},[143,74572,74573],{"class":266},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[143,74575,74576],{"class":145,"line":34329},[143,74577,74578],{"class":266},"    \u002F\u002F }]\n",[143,74580,74581],{"class":145,"line":34338},[143,74582,74583],{"class":266},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[143,74585,74586],{"class":145,"line":34347},[143,74587,74588],{"class":266},"    \u002F\u002F 1.渲染业务\n",[143,74590,74591],{"class":145,"line":34356},[143,74592,74593],{"class":266},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[143,74595,74596],{"class":145,"line":34362},[143,74597,74598],{"class":266},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[143,74600,74601],{"class":145,"line":34368},[143,74602,74603],{"class":266},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[143,74605,74606],{"class":145,"line":34376},[143,74607,3300],{"emptyLinePlaceholder":976},[143,74609,74610],{"class":145,"line":34381},[143,74611,74612],{"class":266},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[143,74614,74615],{"class":145,"line":34387},[143,74616,74617],{"class":266},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[143,74619,74620,74622,74624,74626],{"class":145,"line":34398},[143,74621,12121],{"class":755},[143,74623,58578],{"class":280},[143,74625,14464],{"class":755},[143,74627,52726],{"class":149},[143,74629,74630,74633,74635],{"class":145,"line":34404},[143,74631,74632],{"class":149},"    console.",[143,74634,59130],{"class":156},[143,74636,53299],{"class":149},[143,74638,74639],{"class":145,"line":34424},[143,74640,3300],{"emptyLinePlaceholder":976},[143,74642,74643],{"class":145,"line":34430},[143,74644,74645],{"class":266},"    \u002F\u002F 时间函数\n",[143,74647,74648,74650,74653],{"class":145,"line":34436},[143,74649,70965],{"class":755},[143,74651,74652],{"class":156}," getTime",[143,74654,11753],{"class":149},[143,74656,74657,74659,74662,74664,74666,74669],{"class":145,"line":34442},[143,74658,59111],{"class":755},[143,74660,74661],{"class":280}," date",[143,74663,14464],{"class":755},[143,74665,12478],{"class":755},[143,74667,74668],{"class":156}," Date",[143,74670,2876],{"class":149},[143,74672,74673,74675,74677,74679,74682,74685,74687,74689,74691,74694,74697,74699,74701,74703,74705,74707,74709,74711],{"class":145,"line":34459},[143,74674,59111],{"class":755},[143,74676,16989],{"class":280},[143,74678,14464],{"class":755},[143,74680,74681],{"class":149}," date.",[143,74683,74684],{"class":156},"getHours",[143,74686,13950],{"class":149},[143,74688,150],{"class":755},[143,74690,2938],{"class":280},[143,74692,74693],{"class":755}," ?",[143,74695,74696],{"class":163}," '0'",[143,74698,46464],{"class":755},[143,74700,74681],{"class":149},[143,74702,74684],{"class":156},[143,74704,13950],{"class":149},[143,74706,1900],{"class":755},[143,74708,74681],{"class":149},[143,74710,74684],{"class":156},[143,74712,2876],{"class":149},[143,74714,74715,74717,74720,74722,74724,74727,74729,74731,74733,74735,74737,74739,74741,74743,74745,74747,74749,74751],{"class":145,"line":34465},[143,74716,59111],{"class":755},[143,74718,74719],{"class":280}," m",[143,74721,14464],{"class":755},[143,74723,74681],{"class":149},[143,74725,74726],{"class":156},"getMinutes",[143,74728,13950],{"class":149},[143,74730,150],{"class":755},[143,74732,2938],{"class":280},[143,74734,74693],{"class":755},[143,74736,74696],{"class":163},[143,74738,46464],{"class":755},[143,74740,74681],{"class":149},[143,74742,74726],{"class":156},[143,74744,13950],{"class":149},[143,74746,1900],{"class":755},[143,74748,74681],{"class":149},[143,74750,74726],{"class":156},[143,74752,2876],{"class":149},[143,74754,74755,74757,74759,74761,74763,74766,74768,74770,74772,74774,74776,74778,74780,74782,74784,74786,74788,74790],{"class":145,"line":34471},[143,74756,59111],{"class":755},[143,74758,9328],{"class":280},[143,74760,14464],{"class":755},[143,74762,74681],{"class":149},[143,74764,74765],{"class":156},"getSeconds",[143,74767,13950],{"class":149},[143,74769,150],{"class":755},[143,74771,2938],{"class":280},[143,74773,74693],{"class":755},[143,74775,74696],{"class":163},[143,74777,46464],{"class":755},[143,74779,74681],{"class":149},[143,74781,74765],{"class":156},[143,74783,13950],{"class":149},[143,74785,1900],{"class":755},[143,74787,74681],{"class":149},[143,74789,74765],{"class":156},[143,74791,2876],{"class":149},[143,74793,74794,74796,74799,74801,74803,74806,74808,74811,74813,74816,74818,74820,74823,74825,74827,74829,74831,74833,74835,74838,74840,74843,74845,74848,74850,74852,74854],{"class":145,"line":34477},[143,74795,59111],{"class":755},[143,74797,74798],{"class":280}," str",[143,74800,14464],{"class":755},[143,74802,63785],{"class":163},[143,74804,74805],{"class":149},"date",[143,74807,1599],{"class":163},[143,74809,74810],{"class":156},"getFullYear",[143,74812,3327],{"class":163},[143,74814,74815],{"class":163},"}\u002F${",[143,74817,74805],{"class":149},[143,74819,1599],{"class":163},[143,74821,74822],{"class":156},"getMonth",[143,74824,13950],{"class":163},[143,74826,1522],{"class":755},[143,74828,26016],{"class":280},[143,74830,74815],{"class":163},[143,74832,74805],{"class":149},[143,74834,1599],{"class":163},[143,74836,74837],{"class":156},"getDate",[143,74839,3327],{"class":163},[143,74841,74842],{"class":163},"} ${",[143,74844,1456],{"class":149},[143,74846,74847],{"class":163},"}:${",[143,74849,1585],{"class":149},[143,74851,74847],{"class":163},[143,74853,1736],{"class":149},[143,74855,74856],{"class":163},"}`\n",[143,74858,74859,74862],{"class":145,"line":34483},[143,74860,74861],{"class":755},"      return",[143,74863,74864],{"class":149}," str\n",[143,74866,74867],{"class":145,"line":34489},[143,74868,3087],{"class":149},[143,74870,74871],{"class":145,"line":34516},[143,74872,74873],{"class":266},"    \u002F\u002F 渲染函数\n",[143,74875,74876,74878,74880,74882,74884,74886,74888,74890],{"class":145,"line":34540},[143,74877,12121],{"class":755},[143,74879,70628],{"class":280},[143,74881,14464],{"class":755},[143,74883,55281],{"class":149},[143,74885,55284],{"class":156},[143,74887,1049],{"class":149},[143,74889,70639],{"class":163},[143,74891,1055],{"class":149},[143,74893,74894,74896,74898],{"class":145,"line":34546},[143,74895,70965],{"class":755},[143,74897,70968],{"class":156},[143,74899,11753],{"class":149},[143,74901,74902],{"class":145,"line":34552},[143,74903,74904],{"class":266},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[143,74906,74907],{"class":145,"line":34558},[143,74908,74909],{"class":266},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[143,74911,74912,74914,74917,74919,74921,74924,74926,74928,74930,74933,74935,74938],{"class":145,"line":34569},[143,74913,59111],{"class":755},[143,74915,74916],{"class":280}," trArr",[143,74918,14464],{"class":755},[143,74920,52853],{"class":149},[143,74922,74923],{"class":156},"map",[143,74925,1049],{"class":149},[143,74927,55334],{"class":755},[143,74929,2559],{"class":149},[143,74931,74932],{"class":6116},"ele",[143,74934,13335],{"class":149},[143,74936,74937],{"class":6116},"index",[143,74939,13342],{"class":149},[143,74941,74942,74944],{"class":145,"line":34580},[143,74943,15651],{"class":755},[143,74945,71049],{"class":163},[143,74947,74948],{"class":145,"line":34586},[143,74949,74950],{"class":163},"      \u003Ctr>\n",[143,74952,74953,74955,74957,74959,74962],{"class":145,"line":34603},[143,74954,71054],{"class":163},[143,74956,74932],{"class":149},[143,74958,1599],{"class":163},[143,74960,74961],{"class":149},"unameId",[143,74963,71069],{"class":163},[143,74965,74966,74968,74970,74972,74974],{"class":145,"line":34626},[143,74967,71054],{"class":163},[143,74969,74932],{"class":149},[143,74971,1599],{"class":163},[143,74973,71085],{"class":149},[143,74975,71069],{"class":163},[143,74977,74978,74980,74982,74984,74986],{"class":145,"line":34649},[143,74979,71054],{"class":163},[143,74981,74932],{"class":149},[143,74983,1599],{"class":163},[143,74985,71102],{"class":149},[143,74987,71069],{"class":163},[143,74989,74990,74992,74994,74996,74998],{"class":145,"line":34655},[143,74991,71054],{"class":163},[143,74993,74932],{"class":149},[143,74995,1599],{"class":163},[143,74997,71119],{"class":149},[143,74999,71069],{"class":163},[143,75001,75002,75004,75006,75008,75010],{"class":145,"line":34660},[143,75003,71054],{"class":163},[143,75005,74932],{"class":149},[143,75007,1599],{"class":163},[143,75009,71136],{"class":149},[143,75011,71069],{"class":163},[143,75013,75014,75016,75018,75020,75022],{"class":145,"line":34669},[143,75015,71054],{"class":163},[143,75017,74932],{"class":149},[143,75019,1599],{"class":163},[143,75021,71153],{"class":149},[143,75023,71069],{"class":163},[143,75025,75026,75028,75030,75032,75034],{"class":145,"line":34679},[143,75027,71054],{"class":163},[143,75029,74932],{"class":149},[143,75031,1599],{"class":163},[143,75033,3287],{"class":149},[143,75035,71069],{"class":163},[143,75037,75038],{"class":145,"line":34685},[143,75039,74494],{"class":163},[143,75041,75042,75045,75047],{"class":145,"line":34690},[143,75043,75044],{"class":163},"          \u003Ca href=\"#\" data-id=\"${",[143,75046,74937],{"class":149},[143,75048,75049],{"class":163},"}\">删除\u003C\u002Fa>\n",[143,75051,75052],{"class":145,"line":34696},[143,75053,74504],{"class":163},[143,75055,75056],{"class":145,"line":34709},[143,75057,75058],{"class":163},"      \u003C\u002Ftr>\n",[143,75060,75061],{"class":145,"line":34715},[143,75062,75063],{"class":163},"  `\n",[143,75065,75066],{"class":145,"line":34726},[143,75067,65697],{"class":149},[143,75069,75070,75072,75074],{"class":145,"line":34737},[143,75071,59127],{"class":149},[143,75073,59130],{"class":156},[143,75075,75076],{"class":149},"(trArr)\n",[143,75078,75079],{"class":145,"line":34756},[143,75080,3300],{"emptyLinePlaceholder":976},[143,75082,75083],{"class":145,"line":50416},[143,75084,75085],{"class":266},"      \u002F\u002F (2) 把数组转换为字符串join\n",[143,75087,75088],{"class":145,"line":50421},[143,75089,75090],{"class":266},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[143,75092,75093,75095,75097,75100,75103,75105,75108],{"class":145,"line":50430},[143,75094,70980],{"class":149},[143,75096,160],{"class":755},[143,75098,75099],{"class":149}," trArr.",[143,75101,75102],{"class":156},"join",[143,75104,1049],{"class":149},[143,75106,75107],{"class":163},"''",[143,75109,1055],{"class":149},[143,75111,75112],{"class":145,"line":50439},[143,75113,75114],{"class":266},"      \u002F\u002F 显示共有几条\n",[143,75116,75117,75119,75121,75123,75126,75129,75131,75133],{"class":145,"line":50444},[143,75118,56654],{"class":149},[143,75120,55284],{"class":156},[143,75122,1049],{"class":149},[143,75124,75125],{"class":163},"'.total span'",[143,75127,75128],{"class":149},").innerHTML ",[143,75130,160],{"class":755},[143,75132,52853],{"class":149},[143,75134,56714],{"class":280},[143,75136,75137],{"class":145,"line":50449},[143,75138,3087],{"class":149},[143,75140,75141],{"class":145,"line":50454},[143,75142,75143],{"class":266},"    \u002F\u002F render()\n",[143,75145,75146],{"class":145,"line":50467},[143,75147,3300],{"emptyLinePlaceholder":976},[143,75149,75150],{"class":145,"line":50472},[143,75151,75152],{"class":266},"    \u002F\u002F 获取DOM对象\n",[143,75154,75155,75157,75159,75161,75163,75165,75167,75169],{"class":145,"line":50481},[143,75156,12121],{"class":755},[143,75158,70702],{"class":280},[143,75160,14464],{"class":755},[143,75162,55281],{"class":149},[143,75164,55284],{"class":156},[143,75166,1049],{"class":149},[143,75168,70713],{"class":163},[143,75170,1055],{"class":149},[143,75172,75173,75175,75177,75179,75181,75183,75185,75187],{"class":145,"line":50490},[143,75174,12121],{"class":755},[143,75176,70529],{"class":280},[143,75178,14464],{"class":755},[143,75180,55281],{"class":149},[143,75182,55284],{"class":156},[143,75184,1049],{"class":149},[143,75186,70540],{"class":163},[143,75188,1055],{"class":149},[143,75190,75191,75193,75195,75197,75199,75201,75203,75205],{"class":145,"line":50507},[143,75192,12121],{"class":755},[143,75194,16587],{"class":280},[143,75196,14464],{"class":755},[143,75198,55281],{"class":149},[143,75200,55284],{"class":156},[143,75202,1049],{"class":149},[143,75204,70559],{"class":163},[143,75206,1055],{"class":149},[143,75208,75210,75212,75214,75216,75218,75220,75222,75224],{"class":145,"line":75209},231,[143,75211,12121],{"class":755},[143,75213,70588],{"class":280},[143,75215,14464],{"class":755},[143,75217,55281],{"class":149},[143,75219,55284],{"class":156},[143,75221,1049],{"class":149},[143,75223,70599],{"class":163},[143,75225,1055],{"class":149},[143,75227,75229,75231,75233,75235,75237,75239,75241,75243],{"class":145,"line":75228},232,[143,75230,12121],{"class":755},[143,75232,70568],{"class":280},[143,75234,14464],{"class":755},[143,75236,55281],{"class":149},[143,75238,55284],{"class":156},[143,75240,1049],{"class":149},[143,75242,70579],{"class":163},[143,75244,1055],{"class":149},[143,75246,75248,75250,75252,75254,75256,75258,75260,75262],{"class":145,"line":75247},233,[143,75249,12121],{"class":755},[143,75251,70608],{"class":280},[143,75253,14464],{"class":755},[143,75255,55281],{"class":149},[143,75257,55284],{"class":156},[143,75259,1049],{"class":149},[143,75261,70619],{"class":163},[143,75263,1055],{"class":149},[143,75265,75267],{"class":145,"line":75266},234,[143,75268,3300],{"emptyLinePlaceholder":976},[143,75270,75272],{"class":145,"line":75271},235,[143,75273,75274],{"class":266},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[143,75276,75278,75280,75282,75284,75286,75288,75290,75292,75294],{"class":145,"line":75277},236,[143,75279,70720],{"class":149},[143,75281,58696],{"class":156},[143,75283,1049],{"class":149},[143,75285,70727],{"class":163},[143,75287,13335],{"class":149},[143,75289,55334],{"class":755},[143,75291,2559],{"class":149},[143,75293,1119],{"class":6116},[143,75295,13342],{"class":149},[143,75297,75299],{"class":145,"line":75298},237,[143,75300,75301],{"class":266},"      \u002F\u002F 禁止浏览器跳转\n",[143,75303,75305,75307,75309],{"class":145,"line":75304},238,[143,75306,70747],{"class":149},[143,75308,70750],{"class":156},[143,75310,2876],{"class":149},[143,75312,75314],{"class":145,"line":75313},239,[143,75315,75316],{"class":266},"      \u002F\u002F 非空判断\n",[143,75318,75320],{"class":145,"line":75319},240,[143,75321,75322],{"class":266},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[143,75324,75326],{"class":145,"line":75325},241,[143,75327,75328],{"class":266},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[143,75330,75332,75334,75336,75338,75341,75343,75346,75349,75351,75353],{"class":145,"line":75331},242,[143,75333,55365],{"class":755},[143,75335,2559],{"class":149},[143,75337,1268],{"class":755},[143,75339,75340],{"class":149},"uname.value ",[143,75342,72236],{"class":755},[143,75344,75345],{"class":755}," !",[143,75347,75348],{"class":149},"age.value ",[143,75350,72236],{"class":755},[143,75352,75345],{"class":755},[143,75354,75355],{"class":149},"salary.value) {\n",[143,75357,75359,75361,75363,75365,75367],{"class":145,"line":75358},243,[143,75360,15651],{"class":755},[143,75362,70821],{"class":156},[143,75364,1049],{"class":149},[143,75366,70826],{"class":163},[143,75368,1055],{"class":149},[143,75370,75372],{"class":145,"line":75371},244,[143,75373,53285],{"class":149},[143,75375,75377,75379,75381],{"class":145,"line":75376},245,[143,75378,58890],{"class":149},[143,75380,52772],{"class":156},[143,75382,75383],{"class":149},"({\n",[143,75385,75387],{"class":145,"line":75386},246,[143,75388,75389],{"class":266},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[143,75391,75393],{"class":145,"line":75392},247,[143,75394,75395],{"class":266},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[143,75397,75399],{"class":145,"line":75398},248,[143,75400,75401],{"class":266},"        \u002F\u002F 对象的序号应为数组长度+1\n",[143,75403,75405],{"class":145,"line":75404},249,[143,75406,75407],{"class":266},"        \u002F\u002F unameId: arr.length + 1,\n",[143,75409,75411],{"class":145,"line":75410},250,[143,75412,3300],{"emptyLinePlaceholder":976},[143,75414,75416],{"class":145,"line":75415},251,[143,75417,75418],{"class":266},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[143,75420,75422],{"class":145,"line":75421},252,[143,75423,75424],{"class":266},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[143,75426,75428],{"class":145,"line":75427},253,[143,75429,75430],{"class":266},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[143,75432,75434],{"class":145,"line":75433},254,[143,75435,75436],{"class":266},"        \u002F\u002F 0当假看\n",[143,75438,75440,75443,75445,75447,75450,75452,75454,75456,75459,75461,75463,75466,75468],{"class":145,"line":75439},255,[143,75441,75442],{"class":149},"        unameId: arr.",[143,75444,52856],{"class":280},[143,75446,74693],{"class":755},[143,75448,75449],{"class":149}," arr[arr.",[143,75451,52856],{"class":280},[143,75453,53158],{"class":755},[143,75455,26016],{"class":280},[143,75457,75458],{"class":149},"].unameId ",[143,75460,1522],{"class":755},[143,75462,26016],{"class":280},[143,75464,75465],{"class":755}," :",[143,75467,26016],{"class":280},[143,75469,32364],{"class":149},[143,75471,75473],{"class":145,"line":75472},256,[143,75474,70874],{"class":149},[143,75476,75478],{"class":145,"line":75477},257,[143,75479,70879],{"class":149},[143,75481,75483],{"class":145,"line":75482},258,[143,75484,70889],{"class":149},[143,75486,75488],{"class":145,"line":75487},259,[143,75489,70884],{"class":149},[143,75491,75493],{"class":145,"line":75492},260,[143,75494,75495],{"class":149},"        city: city.value,\n",[143,75497,75499],{"class":145,"line":75498},261,[143,75500,75501],{"class":266},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[143,75503,75505],{"class":145,"line":75504},262,[143,75506,75507],{"class":266},"        \u002F\u002F time: new Date().toDateString()\n",[143,75509,75511,75514,75517],{"class":145,"line":75510},263,[143,75512,75513],{"class":149},"        time: ",[143,75515,75516],{"class":156},"getTime",[143,75518,2876],{"class":149},[143,75520,75522],{"class":145,"line":75521},264,[143,75523,65697],{"class":149},[143,75525,75527],{"class":145,"line":75526},265,[143,75528,75529],{"class":266},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[143,75531,75533,75535],{"class":145,"line":75532},266,[143,75534,70949],{"class":156},[143,75536,2876],{"class":149},[143,75538,75540,75542,75544,75546,75548],{"class":145,"line":75539},267,[143,75541,70932],{"class":280},[143,75543,1599],{"class":149},[143,75545,70937],{"class":156},[143,75547,13950],{"class":149},[143,75549,75550],{"class":266},"\u002F\u002F重置表单\n",[143,75552,75554],{"class":145,"line":75553},268,[143,75555,75556],{"class":266},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[143,75558,75560,75563,75565,75567,75570,75572,75574,75576,75578],{"class":145,"line":75559},269,[143,75561,75562],{"class":149},"      localStorage.",[143,75564,72533],{"class":156},[143,75566,1049],{"class":149},[143,75568,75569],{"class":163},"'data'",[143,75571,13335],{"class":149},[143,75573,72543],{"class":280},[143,75575,1599],{"class":149},[143,75577,72548],{"class":156},[143,75579,75580],{"class":149},"(arr))\n",[143,75582,75584],{"class":145,"line":75583},270,[143,75585,34359],{"class":149},[143,75587,75589],{"class":145,"line":75588},271,[143,75590,3300],{"emptyLinePlaceholder":976},[143,75592,75594],{"class":145,"line":75593},272,[143,75595,75596],{"class":266},"    \u002F\u002F 3.删除业务\n",[143,75598,75600],{"class":145,"line":75599},273,[143,75601,75602],{"class":266},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[143,75604,75606,75608,75610,75612,75614,75616,75618,75620,75622],{"class":145,"line":75605},274,[143,75607,71222],{"class":149},[143,75609,58696],{"class":156},[143,75611,1049],{"class":149},[143,75613,58701],{"class":163},[143,75615,13335],{"class":149},[143,75617,55334],{"class":755},[143,75619,2559],{"class":149},[143,75621,1119],{"class":6116},[143,75623,13342],{"class":149},[143,75625,75627],{"class":145,"line":75626},275,[143,75628,75629],{"class":266},"      \u002F\u002F 判断是否点击的是删除按钮\n",[143,75631,75633,75635,75637,75639,75641],{"class":145,"line":75632},276,[143,75634,55365],{"class":755},[143,75636,67916],{"class":149},[143,75638,55371],{"class":755},[143,75640,69138],{"class":163},[143,75642,13342],{"class":149},[143,75644,75646],{"class":145,"line":75645},277,[143,75647,75648],{"class":266},"        \u002F\u002F alert(1)\n",[143,75650,75652],{"class":145,"line":75651},278,[143,75653,75654],{"class":266},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[143,75656,75658],{"class":145,"line":75657},279,[143,75659,75660],{"class":266},"        \u002F\u002F console.log(e.target)\n",[143,75662,75664],{"class":145,"line":75663},280,[143,75665,75666],{"class":266},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[143,75668,75670],{"class":145,"line":75669},281,[143,75671,3300],{"emptyLinePlaceholder":976},[143,75673,75675],{"class":145,"line":75674},282,[143,75676,75677],{"class":266},"        \u002F\u002F 确认框，确然是否真的要删除\n",[143,75679,75681],{"class":145,"line":75680},283,[143,75682,75683],{"class":266},"        \u002F\u002F confirm()为确认框\n",[143,75685,75687],{"class":145,"line":75686},284,[143,75688,75689],{"class":266},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[143,75691,75693,75695,75697,75700,75702,75705],{"class":145,"line":75692},285,[143,75694,3397],{"class":755},[143,75696,2559],{"class":149},[143,75698,75699],{"class":156},"confirm",[143,75701,1049],{"class":149},[143,75703,75704],{"class":163},"'您确定要删除这条数据吗？'",[143,75706,75707],{"class":149},")) {\n",[143,75709,75711,75714,75716,75718,75720],{"class":145,"line":75710},286,[143,75712,75713],{"class":149},"          arr.",[143,75715,58893],{"class":156},[143,75717,71275],{"class":149},[143,75719,771],{"class":280},[143,75721,1055],{"class":149},[143,75723,75725],{"class":145,"line":75724},287,[143,75726,75727],{"class":266},"          \u002F\u002F 3.4 重新渲染页面\n",[143,75729,75731,75734],{"class":145,"line":75730},288,[143,75732,75733],{"class":156},"          render",[143,75735,2876],{"class":149},[143,75737,75739],{"class":145,"line":75738},289,[143,75740,75741],{"class":266},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[143,75743,75745,75748,75750,75752,75754,75756,75758,75760,75762],{"class":145,"line":75744},290,[143,75746,75747],{"class":149},"          localStorage.",[143,75749,72533],{"class":156},[143,75751,1049],{"class":149},[143,75753,75569],{"class":163},[143,75755,13335],{"class":149},[143,75757,72543],{"class":280},[143,75759,1599],{"class":149},[143,75761,72548],{"class":156},[143,75763,75580],{"class":149},[143,75765,75767],{"class":145,"line":75766},291,[143,75768,3429],{"class":149},[143,75770,75772],{"class":145,"line":75771},292,[143,75773,53285],{"class":149},[143,75775,75777],{"class":145,"line":75776},293,[143,75778,3300],{"emptyLinePlaceholder":976},[143,75780,75782],{"class":145,"line":75781},294,[143,75783,34359],{"class":149},[143,75785,75787],{"class":145,"line":75786},295,[143,75788,3300],{"emptyLinePlaceholder":976},[143,75790,75792,75794,75796],{"class":145,"line":75791},296,[143,75793,53304],{"class":149},[143,75795,52701],{"class":153},[143,75797,183],{"class":149},[143,75799,75801,75803,75805],{"class":145,"line":75800},297,[143,75802,730],{"class":149},[143,75804,52688],{"class":153},[143,75806,183],{"class":149},[143,75808,75810],{"class":145,"line":75809},298,[143,75811,3300],{"emptyLinePlaceholder":976},[143,75813,75815,75817,75819],{"class":145,"line":75814},299,[143,75816,730],{"class":149},[143,75818,51533],{"class":153},[143,75820,183],{"class":149},[14,75822,75824],{"id":75823},"_36-正则表达式","3.6 正则表达式",[63,75826,75827],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[63,75829,75830],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[63,75832,75833],{},"正则表达式的作用：",[232,75835,75836,75843,75849],{},[22,75837,75838,75839,75842],{},"表单验证（ ",[25,75840,75841],{},"匹配"," ）",[22,75844,75845,75846,75842],{},"过滤敏感词（ ",[25,75847,75848],{},"替换",[22,75850,75851,75852,75842],{},"字符串中提取我们想要的部分（ ",[25,75853,75854],{},"提取",[58,75856,75858],{"id":75857},"_361-语法","3.6.1 语法",[63,75860,75861],{},"正则表达式使用步骤：",[19,75863,75864,75867],{},[22,75865,75866],{},"定义规则",[22,75868,75869],{},"查找是否匹配",[63,75871,75872],{},"正则表达式里边不需要写引号",[63,75874,75875],{},[29,75876],{"alt":138,"src":75877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[63,75879,75880],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[63,75882,75883],{},"reg.test(str)",[63,75885,75886],{},[29,75887],{"alt":138,"src":75888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[63,75890,75891],{},[29,75892],{"alt":138,"src":75893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[58,75895,75897],{"id":75896},"_362-元字符","3.6.2 元字符",[19,75899,75900,75903,75906,75909,75916],{},[22,75901,75902],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[22,75904,75905],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[22,75907,75908],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[22,75910,75911,75912],{},"正则验证工具：",[67,75913,75914],{"href":75914,"rel":75915},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[71],[22,75917,75918],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22896,75920,75922],{"id":75921},"_3621-边界符","3.6.2.1 边界符",[63,75924,75925],{},[29,75926],{"alt":138,"src":75927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[63,75929,75930],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[63,75932,75933],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[63,75935,75936],{},"只匹配一次",[63,75938,75939],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22896,75941,75943],{"id":75942},"_3622-量词","3.6.2.2 量词",[63,75945,75946],{},[29,75947],{"alt":138,"src":75948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[63,75950,75951],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22896,75953,75955],{"id":75954},"_3623-元字符","3.6.2.3 元字符",[63,75957,75958],{},[29,75959],{"alt":138,"src":75960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[63,75962,75963],{},"匹配的是a或b或c []只选一个",[63,75965,75966],{},[29,75967],{"alt":138,"src":75968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[63,75970,75971],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[63,75973,75974],{},[29,75975],{"alt":138,"src":75976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[63,75978,75979],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[63,75981,75982],{},[29,75983],{"alt":138,"src":75984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[133,75986,75988],{"className":51531,"code":75987,"language":51533,"meta":138,"style":138},"\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",[140,75989,75990,76000,76014,76018,76026,76040,76060,76072,76080,76084,76092,76100,76105,76136,76163,76191,76195,76200,76228,76259,76264,76269,76300,76332,76364,76368,76373,76404,76434,76464,76468,76473,76504,76535,76565,76595,76599,76604,76637,76641,76646,76677,76708,76712,76717,76748,76778,76809,76813,76818,76850,76881,76912,76939,76970,77002,77035,77066,77097,77129,77160,77168,77176,77180],{"__ignoreMap":138},[143,75991,75992,75994,75996,75998],{"class":145,"line":146},[143,75993,52195],{"class":149},[143,75995,52198],{"class":153},[143,75997,52201],{"class":156},[143,75999,183],{"class":149},[143,76001,76002,76004,76006,76008,76010,76012],{"class":145,"line":35},[143,76003,150],{"class":149},[143,76005,51533],{"class":153},[143,76007,52212],{"class":156},[143,76009,160],{"class":149},[143,76011,52217],{"class":163},[143,76013,183],{"class":149},[143,76015,76016],{"class":145,"line":46},[143,76017,3300],{"emptyLinePlaceholder":976},[143,76019,76020,76022,76024],{"class":145,"line":293},[143,76021,150],{"class":149},[143,76023,52230],{"class":153},[143,76025,183],{"class":149},[143,76027,76028,76030,76032,76034,76036,76038],{"class":145,"line":306},[143,76029,634],{"class":149},[143,76031,52240],{"class":153},[143,76033,52243],{"class":156},[143,76035,160],{"class":149},[143,76037,52248],{"class":163},[143,76039,183],{"class":149},[143,76041,76042,76044,76046,76048,76050,76052,76054,76056,76058],{"class":145,"line":319},[143,76043,634],{"class":149},[143,76045,52240],{"class":153},[143,76047,15819],{"class":156},[143,76049,160],{"class":149},[143,76051,52287],{"class":163},[143,76053,52267],{"class":156},[143,76055,160],{"class":149},[143,76057,52294],{"class":163},[143,76059,183],{"class":149},[143,76061,76062,76064,76066,76068,76070],{"class":145,"line":332},[143,76063,634],{"class":149},[143,76065,52303],{"class":153},[143,76067,52306],{"class":149},[143,76069,52303],{"class":153},[143,76071,183],{"class":149},[143,76073,76074,76076,76078],{"class":145,"line":345},[143,76075,730],{"class":149},[143,76077,52230],{"class":153},[143,76079,183],{"class":149},[143,76081,76082],{"class":145,"line":701},[143,76083,3300],{"emptyLinePlaceholder":976},[143,76085,76086,76088,76090],{"class":145,"line":707},[143,76087,150],{"class":149},[143,76089,52688],{"class":153},[143,76091,183],{"class":149},[143,76093,76094,76096,76098],{"class":145,"line":727},[143,76095,634],{"class":149},[143,76097,52701],{"class":153},[143,76099,183],{"class":149},[143,76101,76102],{"class":145,"line":2518},[143,76103,76104],{"class":266},"    \u002F\u002F 元字符中\n",[143,76106,76107,76109,76111,76113,76115,76118,76120,76122,76125,76127,76130,76133],{"class":145,"line":2524},[143,76108,74632],{"class":149},[143,76110,59130],{"class":156},[143,76112,1049],{"class":149},[143,76114,1625],{"class":163},[143,76116,76117],{"class":48875},"哈",[143,76119,1625],{"class":163},[143,76121,1599],{"class":149},[143,76123,76124],{"class":156},"test",[143,76126,1049],{"class":149},[143,76128,76129],{"class":163},"'哈'",[143,76131,76132],{"class":149},"))  ",[143,76134,76135],{"class":266},"\u002F\u002Ftrue\n",[143,76137,76138,76140,76142,76144,76146,76148,76150,76152,76154,76156,76159,76161],{"class":145,"line":2529},[143,76139,74632],{"class":149},[143,76141,59130],{"class":156},[143,76143,1049],{"class":149},[143,76145,1625],{"class":163},[143,76147,76117],{"class":48875},[143,76149,1625],{"class":163},[143,76151,1599],{"class":149},[143,76153,76124],{"class":156},[143,76155,1049],{"class":149},[143,76157,76158],{"class":163},"'哈哈'",[143,76160,76132],{"class":149},[143,76162,76135],{"class":266},[143,76164,76165,76167,76169,76171,76173,76175,76177,76179,76181,76183,76186,76189],{"class":145,"line":2543},[143,76166,74632],{"class":149},[143,76168,59130],{"class":156},[143,76170,1049],{"class":149},[143,76172,1625],{"class":163},[143,76174,76117],{"class":48875},[143,76176,1625],{"class":163},[143,76178,1599],{"class":149},[143,76180,76124],{"class":156},[143,76182,1049],{"class":149},[143,76184,76185],{"class":163},"'二哈'",[143,76187,76188],{"class":149},"))   ",[143,76190,76135],{"class":266},[143,76192,76193],{"class":145,"line":2548},[143,76194,3300],{"emptyLinePlaceholder":976},[143,76196,76197],{"class":145,"line":2554},[143,76198,76199],{"class":266},"    \u002F\u002F 1.边界符\n",[143,76201,76202,76204,76206,76208,76210,76212,76214,76216,76218,76220,76222,76224,76226],{"class":145,"line":2575},[143,76203,74632],{"class":149},[143,76205,59130],{"class":156},[143,76207,1049],{"class":149},[143,76209,1625],{"class":163},[143,76211,2004],{"class":755},[143,76213,76117],{"class":48875},[143,76215,1625],{"class":163},[143,76217,1599],{"class":149},[143,76219,76124],{"class":156},[143,76221,1049],{"class":149},[143,76223,76129],{"class":163},[143,76225,76132],{"class":149},[143,76227,76135],{"class":266},[143,76229,76230,76232,76234,76236,76238,76240,76242,76244,76246,76248,76250,76252,76254,76256],{"class":145,"line":2580},[143,76231,74632],{"class":149},[143,76233,59130],{"class":156},[143,76235,1049],{"class":149},[143,76237,1625],{"class":163},[143,76239,2004],{"class":755},[143,76241,76117],{"class":48875},[143,76243,1343],{"class":755},[143,76245,1625],{"class":163},[143,76247,1599],{"class":149},[143,76249,76124],{"class":156},[143,76251,1049],{"class":149},[143,76253,76158],{"class":163},[143,76255,76132],{"class":149},[143,76257,76258],{"class":266},"\u002F\u002Ffalse\n",[143,76260,76261],{"class":145,"line":2594},[143,76262,76263],{"class":266},"    \u002F\u002F 2.量词\n",[143,76265,76266],{"class":145,"line":2599},[143,76267,76268],{"class":266},"    \u002F\u002F 量词 * 类似于 >= 0\n",[143,76270,76271,76273,76275,76277,76279,76281,76283,76286,76288,76290,76292,76294,76296,76298],{"class":145,"line":2628},[143,76272,74632],{"class":149},[143,76274,59130],{"class":156},[143,76276,1049],{"class":149},[143,76278,1625],{"class":163},[143,76280,2004],{"class":755},[143,76282,76117],{"class":48875},[143,76284,76285],{"class":755},"*$",[143,76287,1625],{"class":163},[143,76289,1599],{"class":149},[143,76291,76124],{"class":156},[143,76293,1049],{"class":149},[143,76295,76158],{"class":163},[143,76297,76132],{"class":149},[143,76299,76135],{"class":266},[143,76301,76302,76304,76306,76308,76310,76312,76314,76316,76318,76320,76322,76324,76327,76329],{"class":145,"line":2633},[143,76303,74632],{"class":149},[143,76305,59130],{"class":156},[143,76307,1049],{"class":149},[143,76309,1625],{"class":163},[143,76311,2004],{"class":755},[143,76313,76117],{"class":48875},[143,76315,76285],{"class":755},[143,76317,1625],{"class":163},[143,76319,1599],{"class":149},[143,76321,76124],{"class":156},[143,76323,1049],{"class":149},[143,76325,76326],{"class":163},"'二哈好傻'",[143,76328,76132],{"class":149},[143,76330,76331],{"class":266},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[143,76333,76334,76336,76338,76340,76342,76344,76346,76348,76350,76352,76354,76356,76359,76361],{"class":145,"line":2650},[143,76335,74632],{"class":149},[143,76337,59130],{"class":156},[143,76339,1049],{"class":149},[143,76341,1625],{"class":163},[143,76343,2004],{"class":755},[143,76345,76117],{"class":48875},[143,76347,76285],{"class":755},[143,76349,1625],{"class":163},[143,76351,1599],{"class":149},[143,76353,76124],{"class":156},[143,76355,1049],{"class":149},[143,76357,76358],{"class":163},"'哈好哈'",[143,76360,76188],{"class":149},[143,76362,76363],{"class":266},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[143,76365,76366],{"class":145,"line":2655},[143,76367,3300],{"emptyLinePlaceholder":976},[143,76369,76370],{"class":145,"line":2660},[143,76371,76372],{"class":266},"    \u002F\u002F +类似于>=1\n",[143,76374,76375,76377,76379,76381,76383,76385,76387,76390,76392,76394,76396,76398,76400,76402],{"class":145,"line":2665},[143,76376,74632],{"class":149},[143,76378,59130],{"class":156},[143,76380,1049],{"class":149},[143,76382,1625],{"class":163},[143,76384,2004],{"class":755},[143,76386,76117],{"class":48875},[143,76388,76389],{"class":755},"+$",[143,76391,1625],{"class":163},[143,76393,1599],{"class":149},[143,76395,76124],{"class":156},[143,76397,1049],{"class":149},[143,76399,76158],{"class":163},[143,76401,76132],{"class":149},[143,76403,76135],{"class":266},[143,76405,76406,76408,76410,76412,76414,76416,76418,76420,76422,76424,76426,76428,76430,76432],{"class":145,"line":2679},[143,76407,74632],{"class":149},[143,76409,59130],{"class":156},[143,76411,1049],{"class":149},[143,76413,1625],{"class":163},[143,76415,2004],{"class":755},[143,76417,76117],{"class":48875},[143,76419,76389],{"class":755},[143,76421,1625],{"class":163},[143,76423,1599],{"class":149},[143,76425,76124],{"class":156},[143,76427,1049],{"class":149},[143,76429,76326],{"class":163},[143,76431,76132],{"class":149},[143,76433,76331],{"class":266},[143,76435,76436,76438,76440,76442,76444,76446,76448,76450,76452,76454,76456,76458,76460,76462],{"class":145,"line":2684},[143,76437,74632],{"class":149},[143,76439,59130],{"class":156},[143,76441,1049],{"class":149},[143,76443,1625],{"class":163},[143,76445,2004],{"class":755},[143,76447,76117],{"class":48875},[143,76449,76389],{"class":755},[143,76451,1625],{"class":163},[143,76453,1599],{"class":149},[143,76455,76124],{"class":156},[143,76457,1049],{"class":149},[143,76459,76358],{"class":163},[143,76461,76188],{"class":149},[143,76463,76258],{"class":266},[143,76465,76466],{"class":145,"line":3477},[143,76467,3300],{"emptyLinePlaceholder":976},[143,76469,76470],{"class":145,"line":3491},[143,76471,76472],{"class":266},"    \u002F\u002F ?类似于0次或一次\n",[143,76474,76475,76477,76479,76481,76483,76485,76488,76490,76492,76494,76496,76498,76500,76502],{"class":145,"line":3499},[143,76476,74632],{"class":149},[143,76478,59130],{"class":156},[143,76480,1049],{"class":149},[143,76482,1625],{"class":163},[143,76484,2004],{"class":755},[143,76486,76487],{"class":48875},"哈？",[143,76489,1343],{"class":755},[143,76491,1625],{"class":163},[143,76493,1599],{"class":149},[143,76495,76124],{"class":156},[143,76497,1049],{"class":149},[143,76499,75107],{"class":163},[143,76501,76188],{"class":149},[143,76503,76135],{"class":266},[143,76505,76506,76508,76510,76512,76514,76516,76518,76521,76523,76525,76527,76529,76531,76533],{"class":145,"line":3504},[143,76507,74632],{"class":149},[143,76509,59130],{"class":156},[143,76511,1049],{"class":149},[143,76513,1625],{"class":163},[143,76515,2004],{"class":755},[143,76517,76117],{"class":48875},[143,76519,76520],{"class":755},"?$",[143,76522,1625],{"class":163},[143,76524,1599],{"class":149},[143,76526,76124],{"class":156},[143,76528,1049],{"class":149},[143,76530,76158],{"class":163},[143,76532,76132],{"class":149},[143,76534,76258],{"class":266},[143,76536,76537,76539,76541,76543,76545,76547,76549,76551,76553,76555,76557,76559,76561,76563],{"class":145,"line":3510},[143,76538,74632],{"class":149},[143,76540,59130],{"class":156},[143,76542,1049],{"class":149},[143,76544,1625],{"class":163},[143,76546,2004],{"class":755},[143,76548,76117],{"class":48875},[143,76550,76520],{"class":755},[143,76552,1625],{"class":163},[143,76554,1599],{"class":149},[143,76556,76124],{"class":156},[143,76558,1049],{"class":149},[143,76560,76326],{"class":163},[143,76562,76132],{"class":149},[143,76564,76331],{"class":266},[143,76566,76567,76569,76571,76573,76575,76577,76579,76581,76583,76585,76587,76589,76591,76593],{"class":145,"line":3516},[143,76568,74632],{"class":149},[143,76570,59130],{"class":156},[143,76572,1049],{"class":149},[143,76574,1625],{"class":163},[143,76576,2004],{"class":755},[143,76578,76117],{"class":48875},[143,76580,76520],{"class":755},[143,76582,1625],{"class":163},[143,76584,1599],{"class":149},[143,76586,76124],{"class":156},[143,76588,1049],{"class":149},[143,76590,76358],{"class":163},[143,76592,76132],{"class":149},[143,76594,76258],{"class":266},[143,76596,76597],{"class":145,"line":3521},[143,76598,3300],{"emptyLinePlaceholder":976},[143,76600,76601],{"class":145,"line":8848},[143,76602,76603],{"class":266},"    \u002F\u002F {n}写几，就必须出现几次\n",[143,76605,76606,76608,76610,76612,76614,76616,76618,76621,76623,76625,76627,76629,76632,76635],{"class":145,"line":8872},[143,76607,74632],{"class":149},[143,76609,59130],{"class":156},[143,76611,1049],{"class":149},[143,76613,1625],{"class":163},[143,76615,2004],{"class":755},[143,76617,76117],{"class":48875},[143,76619,76620],{"class":755},"{4}$",[143,76622,1625],{"class":163},[143,76624,1599],{"class":149},[143,76626,76124],{"class":156},[143,76628,1049],{"class":149},[143,76630,76631],{"class":163},"'哈哈哈哈'",[143,76633,76634],{"class":149},")) ",[143,76636,76135],{"class":266},[143,76638,76639],{"class":145,"line":8877},[143,76640,3300],{"emptyLinePlaceholder":976},[143,76642,76643],{"class":145,"line":8883},[143,76644,76645],{"class":266},"    \u002F\u002F {n,}大于等于n次\n",[143,76647,76648,76650,76652,76654,76656,76658,76660,76663,76665,76667,76669,76671,76673,76675],{"class":145,"line":8910},[143,76649,74632],{"class":149},[143,76651,59130],{"class":156},[143,76653,1049],{"class":149},[143,76655,1625],{"class":163},[143,76657,2004],{"class":755},[143,76659,76117],{"class":48875},[143,76661,76662],{"class":755},"{4,}$",[143,76664,1625],{"class":163},[143,76666,1599],{"class":149},[143,76668,76124],{"class":156},[143,76670,1049],{"class":149},[143,76672,76631],{"class":163},[143,76674,76634],{"class":149},[143,76676,76135],{"class":266},[143,76678,76679,76681,76683,76685,76687,76689,76691,76693,76695,76697,76699,76701,76704,76706],{"class":145,"line":8915},[143,76680,74632],{"class":149},[143,76682,59130],{"class":156},[143,76684,1049],{"class":149},[143,76686,1625],{"class":163},[143,76688,2004],{"class":755},[143,76690,76117],{"class":48875},[143,76692,76662],{"class":755},[143,76694,1625],{"class":163},[143,76696,1599],{"class":149},[143,76698,76124],{"class":156},[143,76700,1049],{"class":149},[143,76702,76703],{"class":163},"'哈哈哈哈哈'",[143,76705,76634],{"class":149},[143,76707,76135],{"class":266},[143,76709,76710],{"class":145,"line":8921},[143,76711,3300],{"emptyLinePlaceholder":976},[143,76713,76714],{"class":145,"line":8933},[143,76715,76716],{"class":266},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[143,76718,76719,76721,76723,76725,76727,76729,76731,76734,76736,76738,76740,76742,76744,76746],{"class":145,"line":8945},[143,76720,74632],{"class":149},[143,76722,59130],{"class":156},[143,76724,1049],{"class":149},[143,76726,1625],{"class":163},[143,76728,2004],{"class":755},[143,76730,76117],{"class":48875},[143,76732,76733],{"class":755},"{4,6}$",[143,76735,1625],{"class":163},[143,76737,1599],{"class":149},[143,76739,76124],{"class":156},[143,76741,1049],{"class":149},[143,76743,76631],{"class":163},[143,76745,76634],{"class":149},[143,76747,76135],{"class":266},[143,76749,76750,76752,76754,76756,76758,76760,76762,76764,76766,76768,76770,76772,76774,76776],{"class":145,"line":8957},[143,76751,74632],{"class":149},[143,76753,59130],{"class":156},[143,76755,1049],{"class":149},[143,76757,1625],{"class":163},[143,76759,2004],{"class":755},[143,76761,76117],{"class":48875},[143,76763,76733],{"class":755},[143,76765,1625],{"class":163},[143,76767,1599],{"class":149},[143,76769,76124],{"class":156},[143,76771,1049],{"class":149},[143,76773,76703],{"class":163},[143,76775,76634],{"class":149},[143,76777,76135],{"class":266},[143,76779,76780,76782,76784,76786,76788,76790,76792,76794,76796,76798,76800,76802,76805,76807],{"class":145,"line":10616},[143,76781,74632],{"class":149},[143,76783,59130],{"class":156},[143,76785,1049],{"class":149},[143,76787,1625],{"class":163},[143,76789,2004],{"class":755},[143,76791,76117],{"class":48875},[143,76793,76733],{"class":755},[143,76795,1625],{"class":163},[143,76797,1599],{"class":149},[143,76799,76124],{"class":156},[143,76801,1049],{"class":149},[143,76803,76804],{"class":163},"'哈哈哈哈哈哈哈'",[143,76806,76634],{"class":149},[143,76808,76258],{"class":266},[143,76810,76811],{"class":145,"line":10641},[143,76812,3300],{"emptyLinePlaceholder":976},[143,76814,76815],{"class":145,"line":10664},[143,76816,76817],{"class":266},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[143,76819,76820,76822,76824,76826,76828,76830,76833,76835,76837,76839,76841,76843,76846,76848],{"class":145,"line":10688},[143,76821,74632],{"class":149},[143,76823,59130],{"class":156},[143,76825,1049],{"class":149},[143,76827,1625],{"class":163},[143,76829,2004],{"class":755},[143,76831,76832],{"class":280},"[abc]",[143,76834,1343],{"class":755},[143,76836,1625],{"class":163},[143,76838,1599],{"class":149},[143,76840,76124],{"class":156},[143,76842,1049],{"class":149},[143,76844,76845],{"class":163},"'a'",[143,76847,76132],{"class":149},[143,76849,76135],{"class":266},[143,76851,76852,76854,76856,76858,76860,76862,76864,76866,76868,76870,76872,76874,76877,76879],{"class":145,"line":10693},[143,76853,74632],{"class":149},[143,76855,59130],{"class":156},[143,76857,1049],{"class":149},[143,76859,1625],{"class":163},[143,76861,2004],{"class":755},[143,76863,76832],{"class":280},[143,76865,1343],{"class":755},[143,76867,1625],{"class":163},[143,76869,1599],{"class":149},[143,76871,76124],{"class":156},[143,76873,1049],{"class":149},[143,76875,76876],{"class":163},"'b'",[143,76878,76132],{"class":149},[143,76880,76135],{"class":266},[143,76882,76883,76885,76887,76889,76891,76893,76895,76897,76899,76901,76903,76905,76908,76910],{"class":145,"line":10698},[143,76884,74632],{"class":149},[143,76886,59130],{"class":156},[143,76888,1049],{"class":149},[143,76890,1625],{"class":163},[143,76892,2004],{"class":755},[143,76894,76832],{"class":280},[143,76896,1343],{"class":755},[143,76898,1625],{"class":163},[143,76900,1599],{"class":149},[143,76902,76124],{"class":156},[143,76904,1049],{"class":149},[143,76906,76907],{"class":163},"'c'",[143,76909,76132],{"class":149},[143,76911,76135],{"class":266},[143,76913,76914,76916,76918,76920,76922,76924,76926,76928,76930,76932,76935,76937],{"class":145,"line":10703},[143,76915,74632],{"class":149},[143,76917,59130],{"class":156},[143,76919,1049],{"class":149},[143,76921,1625],{"class":163},[143,76923,76832],{"class":280},[143,76925,1625],{"class":163},[143,76927,1599],{"class":149},[143,76929,76124],{"class":156},[143,76931,1049],{"class":149},[143,76933,76934],{"class":163},"'ab'",[143,76936,76132],{"class":149},[143,76938,76135],{"class":266},[143,76940,76941,76943,76945,76947,76949,76951,76953,76955,76957,76959,76961,76963,76965,76967],{"class":145,"line":10712},[143,76942,74632],{"class":149},[143,76944,59130],{"class":156},[143,76946,1049],{"class":149},[143,76948,1625],{"class":163},[143,76950,2004],{"class":755},[143,76952,76832],{"class":280},[143,76954,1343],{"class":755},[143,76956,1625],{"class":163},[143,76958,1599],{"class":149},[143,76960,76124],{"class":156},[143,76962,1049],{"class":149},[143,76964,76934],{"class":163},[143,76966,76132],{"class":149},[143,76968,76969],{"class":266},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[143,76971,76972,76974,76976,76978,76980,76982,76984,76987,76989,76991,76993,76995,76997,76999],{"class":145,"line":10717},[143,76973,74632],{"class":149},[143,76975,59130],{"class":156},[143,76977,1049],{"class":149},[143,76979,1625],{"class":163},[143,76981,2004],{"class":755},[143,76983,76832],{"class":280},[143,76985,76986],{"class":755},"{2}$",[143,76988,1625],{"class":163},[143,76990,1599],{"class":149},[143,76992,76124],{"class":156},[143,76994,1049],{"class":149},[143,76996,76934],{"class":163},[143,76998,76132],{"class":149},[143,77000,77001],{"class":266},"\u002F\u002Ftrue   可以选两个\n",[143,77003,77004,77006,77008,77010,77012,77014,77017,77019,77021,77023,77025,77027,77030,77032],{"class":145,"line":10723},[143,77005,74632],{"class":149},[143,77007,59130],{"class":156},[143,77009,1049],{"class":149},[143,77011,1625],{"class":163},[143,77013,2004],{"class":755},[143,77015,77016],{"class":280},"[a-z]",[143,77018,1343],{"class":755},[143,77020,1625],{"class":163},[143,77022,1599],{"class":149},[143,77024,76124],{"class":156},[143,77026,1049],{"class":149},[143,77028,77029],{"class":163},"'p'",[143,77031,76188],{"class":149},[143,77033,77034],{"class":266},"\u002F\u002Ftrue   依然只能选一个\n",[143,77036,77037,77039,77041,77043,77045,77047,77050,77052,77054,77056,77058,77060,77062,77064],{"class":145,"line":10744},[143,77038,74632],{"class":149},[143,77040,59130],{"class":156},[143,77042,1049],{"class":149},[143,77044,1625],{"class":163},[143,77046,2004],{"class":755},[143,77048,77049],{"class":280},"[A-Z]",[143,77051,1343],{"class":755},[143,77053,1625],{"class":163},[143,77055,1599],{"class":149},[143,77057,76124],{"class":156},[143,77059,1049],{"class":149},[143,77061,77029],{"class":163},[143,77063,76188],{"class":149},[143,77065,76258],{"class":266},[143,77067,77068,77070,77072,77074,77076,77078,77080,77082,77084,77086,77088,77090,77093,77095],{"class":145,"line":10750},[143,77069,74632],{"class":149},[143,77071,59130],{"class":156},[143,77073,1049],{"class":149},[143,77075,1625],{"class":163},[143,77077,2004],{"class":755},[143,77079,77049],{"class":280},[143,77081,1343],{"class":755},[143,77083,1625],{"class":163},[143,77085,1599],{"class":149},[143,77087,76124],{"class":156},[143,77089,1049],{"class":149},[143,77091,77092],{"class":163},"'P'",[143,77094,76188],{"class":149},[143,77096,76135],{"class":266},[143,77098,77099,77101,77103,77105,77107,77109,77112,77114,77116,77118,77120,77122,77125,77127],{"class":145,"line":10764},[143,77100,74632],{"class":149},[143,77102,59130],{"class":156},[143,77104,1049],{"class":149},[143,77106,1625],{"class":163},[143,77108,2004],{"class":755},[143,77110,77111],{"class":280},"[0-9]",[143,77113,1343],{"class":755},[143,77115,1625],{"class":163},[143,77117,1599],{"class":149},[143,77119,76124],{"class":156},[143,77121,1049],{"class":149},[143,77123,77124],{"class":163},"'0'",[143,77126,76188],{"class":149},[143,77128,76135],{"class":266},[143,77130,77131,77133,77135,77137,77139,77141,77144,77146,77148,77150,77152,77154,77156,77158],{"class":145,"line":10770},[143,77132,74632],{"class":149},[143,77134,59130],{"class":156},[143,77136,1049],{"class":149},[143,77138,1625],{"class":163},[143,77140,2004],{"class":755},[143,77142,77143],{"class":280},"[a-zA-Z0-9]",[143,77145,1343],{"class":755},[143,77147,1625],{"class":163},[143,77149,1599],{"class":149},[143,77151,76124],{"class":156},[143,77153,1049],{"class":149},[143,77155,77029],{"class":163},[143,77157,76132],{"class":149},[143,77159,76135],{"class":266},[143,77161,77162,77164,77166],{"class":145,"line":10797},[143,77163,53304],{"class":149},[143,77165,52701],{"class":153},[143,77167,183],{"class":149},[143,77169,77170,77172,77174],{"class":145,"line":10806},[143,77171,730],{"class":149},[143,77173,52688],{"class":153},[143,77175,183],{"class":149},[143,77177,77178],{"class":145,"line":10812},[143,77179,3300],{"emptyLinePlaceholder":976},[143,77181,77182,77184,77186],{"class":145,"line":10820},[143,77183,730],{"class":149},[143,77185,51533],{"class":153},[143,77187,183],{"class":149},[22896,77189,77191],{"id":77190},"_3624-修饰符","3.6.2.4 修饰符",[63,77193,77194],{},[29,77195],{"alt":138,"src":77196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[63,77198,77199],{},"replace是个方法，使用的时候一定不要忘记括号()",[63,77201,77202],{},[29,77203],{"alt":138,"src":77204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[133,77206,77208],{"className":51531,"code":77207,"language":51533,"meta":138,"style":138},"\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",[140,77209,77210,77220,77234,77242,77256,77276,77288,77296,77304,77312,77344,77375,77380,77412,77423,77456,77465,77473,77481],{"__ignoreMap":138},[143,77211,77212,77214,77216,77218],{"class":145,"line":146},[143,77213,52195],{"class":149},[143,77215,52198],{"class":153},[143,77217,52201],{"class":156},[143,77219,183],{"class":149},[143,77221,77222,77224,77226,77228,77230,77232],{"class":145,"line":35},[143,77223,150],{"class":149},[143,77225,51533],{"class":153},[143,77227,52212],{"class":156},[143,77229,160],{"class":149},[143,77231,52217],{"class":163},[143,77233,183],{"class":149},[143,77235,77236,77238,77240],{"class":145,"line":46},[143,77237,150],{"class":149},[143,77239,52230],{"class":153},[143,77241,183],{"class":149},[143,77243,77244,77246,77248,77250,77252,77254],{"class":145,"line":293},[143,77245,634],{"class":149},[143,77247,52240],{"class":153},[143,77249,52243],{"class":156},[143,77251,160],{"class":149},[143,77253,52248],{"class":163},[143,77255,183],{"class":149},[143,77257,77258,77260,77262,77264,77266,77268,77270,77272,77274],{"class":145,"line":306},[143,77259,634],{"class":149},[143,77261,52240],{"class":153},[143,77263,15819],{"class":156},[143,77265,160],{"class":149},[143,77267,52287],{"class":163},[143,77269,52267],{"class":156},[143,77271,160],{"class":149},[143,77273,52294],{"class":163},[143,77275,183],{"class":149},[143,77277,77278,77280,77282,77284,77286],{"class":145,"line":319},[143,77279,634],{"class":149},[143,77281,52303],{"class":153},[143,77283,52306],{"class":149},[143,77285,52303],{"class":153},[143,77287,183],{"class":149},[143,77289,77290,77292,77294],{"class":145,"line":332},[143,77291,730],{"class":149},[143,77293,52230],{"class":153},[143,77295,183],{"class":149},[143,77297,77298,77300,77302],{"class":145,"line":345},[143,77299,150],{"class":149},[143,77301,52688],{"class":153},[143,77303,183],{"class":149},[143,77305,77306,77308,77310],{"class":145,"line":701},[143,77307,634],{"class":149},[143,77309,52701],{"class":153},[143,77311,183],{"class":149},[143,77313,77314,77316,77318,77320,77322,77324,77327,77329,77331,77333,77335,77337,77340,77342],{"class":145,"line":707},[143,77315,74632],{"class":149},[143,77317,59130],{"class":156},[143,77319,1049],{"class":149},[143,77321,1625],{"class":163},[143,77323,2004],{"class":755},[143,77325,77326],{"class":48875},"java",[143,77328,1343],{"class":755},[143,77330,1625],{"class":163},[143,77332,1599],{"class":149},[143,77334,76124],{"class":156},[143,77336,1049],{"class":149},[143,77338,77339],{"class":163},"'java'",[143,77341,76634],{"class":149},[143,77343,76135],{"class":266},[143,77345,77346,77348,77350,77352,77354,77356,77358,77360,77362,77364,77366,77368,77371,77373],{"class":145,"line":727},[143,77347,74632],{"class":149},[143,77349,59130],{"class":156},[143,77351,1049],{"class":149},[143,77353,1625],{"class":163},[143,77355,2004],{"class":755},[143,77357,77326],{"class":48875},[143,77359,1343],{"class":755},[143,77361,1625],{"class":163},[143,77363,1599],{"class":149},[143,77365,76124],{"class":156},[143,77367,1049],{"class":149},[143,77369,77370],{"class":163},"'Java'",[143,77372,76634],{"class":149},[143,77374,76258],{"class":266},[143,77376,77377],{"class":145,"line":2518},[143,77378,77379],{"class":266},"    \u002F\u002F 不区分大小写、\n",[143,77381,77382,77384,77386,77388,77390,77392,77394,77396,77398,77400,77402,77404,77406,77408,77410],{"class":145,"line":2524},[143,77383,74632],{"class":149},[143,77385,59130],{"class":156},[143,77387,1049],{"class":149},[143,77389,1625],{"class":163},[143,77391,2004],{"class":755},[143,77393,77326],{"class":48875},[143,77395,1343],{"class":755},[143,77397,1625],{"class":163},[143,77399,1482],{"class":755},[143,77401,1599],{"class":149},[143,77403,76124],{"class":156},[143,77405,1049],{"class":149},[143,77407,77370],{"class":163},[143,77409,76634],{"class":149},[143,77411,76135],{"class":266},[143,77413,77414,77416,77418,77420],{"class":145,"line":2529},[143,77415,12121],{"class":755},[143,77417,74798],{"class":280},[143,77419,14464],{"class":755},[143,77421,77422],{"class":163}," 'java是一门编程语言，学完java工资很高'\n",[143,77424,77425,77427,77430,77432,77435,77438,77440,77442,77444,77446,77449,77451,77454],{"class":145,"line":2543},[143,77426,12121],{"class":755},[143,77428,77429],{"class":280}," result",[143,77431,14464],{"class":755},[143,77433,77434],{"class":149}," str.",[143,77436,77437],{"class":156},"replace",[143,77439,1049],{"class":149},[143,77441,1625],{"class":163},[143,77443,77326],{"class":48875},[143,77445,1625],{"class":163},[143,77447,77448],{"class":755},"ig",[143,77450,13335],{"class":149},[143,77452,77453],{"class":163},"'前端'",[143,77455,1055],{"class":149},[143,77457,77458,77460,77462],{"class":145,"line":2548},[143,77459,74632],{"class":149},[143,77461,59130],{"class":156},[143,77463,77464],{"class":149},"(result)\n",[143,77466,77467,77469,77471],{"class":145,"line":2554},[143,77468,53304],{"class":149},[143,77470,52701],{"class":153},[143,77472,183],{"class":149},[143,77474,77475,77477,77479],{"class":145,"line":2575},[143,77476,730],{"class":149},[143,77478,52688],{"class":153},[143,77480,183],{"class":149},[143,77482,77483,77485,77487],{"class":145,"line":2580},[143,77484,730],{"class":149},[143,77486,51533],{"class":153},[143,77488,183],{"class":149},[954,77490,77491],{},"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":138,"searchDepth":35,"depth":35,"links":77493},[77494,77504,77516,77533,77540,77548],{"id":54247,"depth":35,"text":54248,"children":77495},[77496,77497,77498,77499,77500,77501,77502,77503],{"id":54251,"depth":46,"text":54252},{"id":54284,"depth":46,"text":54285},{"id":54323,"depth":46,"text":54324},{"id":54480,"depth":46,"text":54481},{"id":54528,"depth":46,"text":54529},{"id":54665,"depth":46,"text":54666},{"id":54986,"depth":46,"text":54987},{"id":57972,"depth":46,"text":57973},{"id":58000,"depth":35,"text":58001,"children":77505},[77506,77507,77508,77509,77510,77511,77512,77513,77514,77515],{"id":58004,"depth":46,"text":58005},{"id":58027,"depth":46,"text":58028},{"id":58942,"depth":46,"text":58943},{"id":59632,"depth":46,"text":59633},{"id":59914,"depth":46,"text":59915},{"id":64074,"depth":46,"text":64075},{"id":64244,"depth":46,"text":64245},{"id":64372,"depth":46,"text":64373},{"id":64397,"depth":46,"text":64398},{"id":65786,"depth":46,"text":65787},{"id":66939,"depth":35,"text":66940,"children":77517},[77518,77519,77520,77521,77522,77523,77524,77525,77526,77527,77528,77529,77530,77531,77532],{"id":66943,"depth":46,"text":66944},{"id":67597,"depth":46,"text":67598},{"id":69292,"depth":46,"text":69293},{"id":69333,"depth":46,"text":69334},{"id":69375,"depth":46,"text":69376},{"id":69389,"depth":46,"text":69390},{"id":69438,"depth":46,"text":69439},{"id":69450,"depth":46,"text":69451},{"id":69465,"depth":46,"text":69466},{"id":69501,"depth":46,"text":69502},{"id":69582,"depth":46,"text":69583},{"id":69710,"depth":46,"text":69711},{"id":69722,"depth":46,"text":69723},{"id":69741,"depth":46,"text":69742},{"id":71849,"depth":46,"text":71850},{"id":71868,"depth":35,"text":71869,"children":77534},[77535,77536,77537,77538,77539],{"id":71889,"depth":46,"text":71890},{"id":71909,"depth":46,"text":71910},{"id":71958,"depth":46,"text":71959},{"id":72083,"depth":46,"text":72084},{"id":72264,"depth":46,"text":72265},{"id":72282,"depth":35,"text":72283,"children":77541},[77542,77543,77544,77545,77546,77547],{"id":72297,"depth":46,"text":72298},{"id":72356,"depth":46,"text":72357},{"id":72380,"depth":46,"text":72381},{"id":72700,"depth":46,"text":72701},{"id":72732,"depth":46,"text":72733},{"id":72755,"depth":46,"text":72756},{"id":75823,"depth":35,"text":75824,"children":77549},[77550,77551],{"id":75857,"depth":46,"text":75858},{"id":75896,"depth":46,"text":75897},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54219,"description":973},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77558,"title":77559,"body":77560,"description":973,"extension":974,"meta":93695,"navigation":976,"path":93696,"seo":93697,"stem":93698,"__hash__":93699},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77561,"toc":93631},[77562,77565,77568,77572,77576,77581,77586,77597,77601,77606,77609,77613,77616,77621,77625,77629,77632,77637,77640,77644,77647,77655,77658,77662,77667,77672,77675,77679,77684,77689,77692,77696,77701,77704,77709,77712,77717,77720,77725,77730,77733,77736,77740,77745,77750,77753,77757,77761,77764,77767,77770,77774,77778,77783,77788,77791,77795,77800,77805,77808,77811,77814,77817,77820,77823,77826,77829,77832,77837,77841,77846,77851,77854,77857,77860,77863,77866,77869,77872,77875,77879,77883,77886,77889,77892,77897,77899,77902,77905,77908,77911,77914,77917,77920,77923,77926,77929,77932,77935,77938,77943,77948,77953,77956,77960,77963,77968,77972,77974,77985,77990,78091,78094,78097,78100,78103,78106,78109,78112,78115,78117,78120,78123,78126,78129,78132,78134,78137,78140,78143,78146,78149,78152,78154,78157,78159,78161,78164,78168,78172,78175,78178,78181,78184,78187,78190,78193,78196,78199,78204,78324,78327,78330,78335,78338,78341,78344,78347,78352,78355,78358,78361,78364,78369,78372,78472,78537,78611,78615,78618,78621,78625,78628,78642,78671,78674,78677,78680,78683,78686,78689,78692,78694,78697,78700,78703,78706,78710,78715,78719,78724,78799,78802,78985,78988,78991,78994,78997,79000,79002,79005,79008,79011,79014,79017,79020,79022,79026,79029,79034,79037,79040,79043,79046,79048,79053,79056,79059,79062,79065,79067,79072,79075,79078,79080,79082,79085,79089,79092,79095,79100,79103,79106,79109,79159,79164,79168,79173,79176,79245,79248,79257,79261,79266,79269,79272,79280,79283,79300,81101,81105,81109,81114,81117,81121,81127,81133,81285,81290,81295,81298,81301,81304,81307,81310,81313,81316,81319,81322,81325,81328,81331,81336,81340,81343,81354,81358,81363,81366,81369,81372,81375,81378,81380,81383,81386,81389,81392,81394,81411,81414,81418,81421,81426,81431,81434,81437,81441,81444,81447,81456,81459,81463,81466,81471,81476,81543,81547,81550,81553,81558,81563,81649,81654,81658,81661,81664,81679,81682,81687,81691,81696,81805,81808,81819,81969,81973,81978,82087,82091,82096,82101,82106,82109,82116,82136,82172,82336,82341,82344,82349,82356,82359,82362,82365,82424,82480,82536,82540,82545,82860,82863,82867,82870,82875,82984,82989,82993,82998,83002,83073,83077,83079,83082,83085,83123,83399,83403,83420,83486,83520,83524,83527,83532,83561,83568,83577,83582,83597,83602,83611,83614,83751,83755,83817,83821,83826,84071,84075,84080,84083,84086,84089,84092,84096,84101,85682,85686,85690,85696,85699,85704,85708,85711,85716,85719,85730,85734,85739,85743,85748,85753,85756,85761,85765,85769,85772,85777,85782,85785,85788,85791,85913,85918,86020,86023,86026,86030,86035,86207,86212,86216,86219,86224,86290,86295,86298,86429,86432,86437,86440,86443,86534,86539,86542,86545,86548,86551,86556,86561,86564,86569,86574,86579,86583,86586,86589,86594,86599,86604,86609,86663,86666,86669,86674,86677,86680,86685,86690,86695,86699,86704,86718,86723,86726,86731,86735,86740,86745,86750,86755,86760,86765,86770,86775,86778,86782,86787,86790,86793,86796,86801,86806,86809,86812,86816,86819,86822,86827,86832,86837,86842,86845,86850,86855,86916,86921,86924,86929,88170,88175,88179,88183,88188,88191,88196,88201,88204,88209,88211,88216,88220,88223,88226,88237,88241,88246,88251,88306,88311,88316,88321,88532,88537,88541,88546,88549,88551,88554,88557,89004,89009,89016,89022,89025,89028,89292,89297,89301,89566,89571,89575,89580,89585,89590,89595,89926,89929,89934,89939,89942,89946,89950,89955,89960,89965,89970,89975,89980,89984,89987,89992,89997,90000,90074,90079,90084,90089,90091,90094,90464,90469,90474,90479,90482,90485,90587,90592,90597,90700,90704,90709,90713,90717,90722,90727,90730,90735,90738,90741,91134,91139,91142,91145,91148,91151,91671,91675,91680,91685,91690,91693,91698,91701,91704,92086,92091,92093,92095,92098,92101,92613,92617,92678,92681,92684,92687,92691,92694,92699,92704,93628],[10,77563,77559],{"id":77564},"_4js进阶",[63,77566,77567],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,77569,77571],{"id":77570},"_41-作用域","4.1 作用域",[58,77573,77575],{"id":77574},"_411-局部作用域","4.1.1 局部作用域",[63,77577,77578],{},[29,77579],{"alt":138,"src":77580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[63,77582,77583],{},[29,77584],{"alt":138,"src":77585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[232,77587,77588,77591,77594],{},[22,77589,77590],{},"函数作用域在函数内部",[22,77592,77593],{},"块级作用域在{}",[22,77595,77596],{},"对象的那个{}不是作用域，不是块作用域",[58,77598,77600],{"id":77599},"_412-全局作用域","4.1.2 全局作用域",[63,77602,77603],{},[29,77604],{"alt":138,"src":77605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[63,77607,77608],{},"window.a=10不要这样写",[58,77610,77612],{"id":77611},"_413-作用域链","4.1.3 作用域链",[63,77614,77615],{},"变量查找机制",[63,77617,77618],{},[29,77619],{"alt":138,"src":77620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77622,77624],{"id":77623},"_42-垃圾回收机制","4.2 垃圾回收机制",[58,77626,77628],{"id":77627},"_421-大体介绍","4.2.1 大体介绍",[63,77630,77631],{},"垃圾回收机制(Garbage Collection) 简称 GC",[63,77633,77634],{},[29,77635],{"alt":138,"src":77636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[63,77638,77639],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[58,77641,77643],{"id":77642},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[63,77645,77646],{},"堆栈空间分配区别：",[19,77648,77649,77652],{},[22,77650,77651],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[22,77653,77654],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[63,77656,77657],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22896,77659,77661],{"id":77660},"_4221-引用计数","4.2.2.1 引用计数",[63,77663,77664],{},[29,77665],{"alt":138,"src":77666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[63,77668,77669],{},[29,77670],{"alt":138,"src":77671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[63,77673,77674],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22896,77676,77678],{"id":77677},"_4222-标记清除法","4.2.2.2 标记清除法",[63,77680,77681],{},[29,77682],{"alt":138,"src":77683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[63,77685,77686],{},[29,77687],{"alt":138,"src":77688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[63,77690,77691],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,77693,77695],{"id":77694},"_43-闭包","4.3 闭包",[63,77697,77698],{},[29,77699],{"alt":138,"src":77700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[63,77702,77703],{},"闭包：内层函数+外层函数的变量",[63,77705,77706],{},[29,77707],{"alt":138,"src":77708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[63,77710,77711],{},"closure就是闭包",[63,77713,77714],{},[29,77715],{"alt":138,"src":77716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[63,77718,77719],{},"内层函数必须包含外层函数的变量才是闭包",[63,77721,77722],{},[29,77723],{"alt":138,"src":77724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[63,77726,77727],{},[29,77728],{"alt":138,"src":77729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[63,77731,77732],{},"闭包可能会引起内存泄漏",[63,77734,77735],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77737,77739],{"id":77738},"_44-变量提升","4.4 变量提升",[63,77741,77742],{},[29,77743],{"alt":138,"src":77744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[63,77746,77747],{},[29,77748],{"alt":138,"src":77749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[63,77751,77752],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77754,77756],{"id":77755},"_45-函数进阶","4.5 函数进阶",[58,77758,77760],{"id":77759},"_451-函数提升","4.5.1 函数提升",[63,77762,77763],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[63,77765,77766],{},"只提升函数声明，不提升函数调用",[52701,77768,77769],{},"\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",[58,77771,77773],{"id":77772},"_452-函数参数","4.5.2 函数参数",[22896,77775,77777],{"id":77776},"_4521-动态参数","4.5.2.1 动态参数",[63,77779,77780],{},[29,77781],{"alt":138,"src":77782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[63,77784,77785],{},[29,77786],{"alt":138,"src":77787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[63,77789,77790],{},"箭头函数里边没有arguments",[22896,77792,77794],{"id":77793},"_4522-剩余参数","4.5.2.2 剩余参数",[63,77796,77797],{},[29,77798],{"alt":138,"src":77799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[63,77801,77802],{},[29,77803],{"alt":138,"src":77804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[63,77806,77807],{},"剩余参数使用的时候不需要写...",[63,77809,77810],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[63,77812,77813],{},"  function getSum(a,b,...arr) {",[63,77815,77816],{},"  console.log(11)",[63,77818,77819],{},"  }",[63,77821,77822],{},"  getSum(1,2,3,4)",[63,77824,77825],{},"  将1传给a，2传给b，剩下的传给剩余参数",[63,77827,77828],{},"  getSum(1,2)",[63,77830,77831],{},"  将1传给a，2传给b，剩余参数为一个空数组",[63,77833,77834],{},[29,77835],{"alt":138,"src":77836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22896,77838,77840],{"id":77839},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[63,77842,77843],{},[29,77844],{"alt":138,"src":77845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[63,77847,77848],{},[29,77849],{"alt":138,"src":77850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[63,77852,77853],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[63,77855,77856],{},"展开运算符可以用于数组之间的合并：",[63,77858,77859],{},"const arr1 = [1, 2, 3]",[63,77861,77862],{},"const arr2 = [3, 4, 5]",[63,77864,77865],{},"const arr = [...arr1, ...arr2]",[63,77867,77868],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[63,77870,77871],{},"剩余参数：函数参数使用，得到真数组",[63,77873,77874],{},"展开运算符：数组中使用，数组展开",[58,77876,77878],{"id":77877},"_453-箭头函数","4.5.3 箭头函数",[22896,77880,77882],{"id":77881},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[63,77884,77885],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[63,77887,77888],{},"它不是万能的！！！",[63,77890,77891],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[63,77893,77894],{},[29,77895],{"alt":138,"src":77896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[63,77898,110],{},[63,77900,77901],{},"① 只有一个形参的时候，可以省略小括号：",[63,77903,77904],{},"const fn=x=>{console.log(x)}",[63,77906,77907],{},"② 只有一行代码时可以省略大括号：",[63,77909,77910],{},"const fn=x=>console.log(11)",[63,77912,77913],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[63,77915,77916],{},"const fn=x=>x+x",[63,77918,77919],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[63,77921,77922],{},"⑤ 阻止表单默认提交：",[63,77924,77925],{},"const form = document.querySelector('form')",[63,77927,77928],{},"form.addEventListener('click', ev => ev.preventDefault())",[63,77930,77931],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[63,77933,77934],{},"const fn=uname=>({uname:uname})",[63,77936,77937],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[63,77939,77940],{},[29,77941],{"alt":138,"src":77942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[63,77944,77945],{},[29,77946],{"alt":138,"src":77947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[63,77949,77950],{},[29,77951],{"alt":138,"src":77952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[63,77954,77955],{},"一定不要忘记用()，有()就理解为自带return",[22896,77957,77959],{"id":77958},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[63,77961,77962],{},"箭头函数是没有动态参数的arguments",[63,77964,77965],{},[29,77966],{"alt":138,"src":77967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22896,77969,77971],{"id":77970},"_4533-箭头函数this","4.5.3.3 箭头函数this",[63,77973,12232],{},[19,77975,77976,77979,77982],{},[22,77977,77978],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[22,77980,77981],{},"事件回调函数使用箭头函数时，this 为全局的 window",[22,77983,77984],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[63,77986,77987],{},[29,77988],{"alt":138,"src":77989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[133,77991,77993],{"className":53954,"code":77992,"language":53956,"meta":138,"style":138},"  \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",[140,77994,77995,78003,78008,78013,78018,78023,78028,78032,78037,78041,78045,78050,78055,78060,78064,78068,78073,78078,78083],{"__ignoreMap":138},[143,77996,77997,77999,78001],{"class":145,"line":146},[143,77998,634],{"class":149},[143,78000,52701],{"class":153},[143,78002,183],{"class":149},[143,78004,78005],{"class":145,"line":35},[143,78006,78007],{"class":149},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[143,78009,78010],{"class":145,"line":46},[143,78011,78012],{"class":149},"    console.log(this) \u002F\u002F指向window\n",[143,78014,78015],{"class":145,"line":293},[143,78016,78017],{"class":149},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[143,78019,78020],{"class":145,"line":306},[143,78021,78022],{"class":149},"    function fn() {\n",[143,78024,78025],{"class":145,"line":319},[143,78026,78027],{"class":149},"      console.log(this)  \u002F\u002F指向window\n",[143,78029,78030],{"class":145,"line":332},[143,78031,3087],{"class":149},[143,78033,78034],{"class":145,"line":345},[143,78035,78036],{"class":149},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[143,78038,78039],{"class":145,"line":701},[143,78040,3300],{"emptyLinePlaceholder":976},[143,78042,78043],{"class":145,"line":707},[143,78044,72402],{"class":149},[143,78046,78047],{"class":145,"line":727},[143,78048,78049],{"class":149},"      name: 'andy',\n",[143,78051,78052],{"class":145,"line":2518},[143,78053,78054],{"class":149},"      sayHai: function () {\n",[143,78056,78057],{"class":145,"line":2524},[143,78058,78059],{"class":149},"        console.log(this)\n",[143,78061,78062],{"class":145,"line":2529},[143,78063,53285],{"class":149},[143,78065,78066],{"class":145,"line":2543},[143,78067,3087],{"class":149},[143,78069,78070],{"class":145,"line":2548},[143,78071,78072],{"class":149},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[143,78074,78075],{"class":145,"line":2554},[143,78076,78077],{"class":149},"    \u002F\u002F 2.箭头函数的this\n",[143,78079,78080],{"class":145,"line":2575},[143,78081,78082],{"class":149},"    const fn = () => console.log(this)\n",[143,78084,78085,78087,78089],{"class":145,"line":2580},[143,78086,53304],{"class":149},[143,78088,52701],{"class":153},[143,78090,183],{"class":149},[63,78092,78093],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[63,78095,78096],{},"const fn = () => console.log(this)",[63,78098,78099],{},"fn() \u002F\u002F指向window",[63,78101,78102],{},"\u002F\u002F 3.对象方法箭头函数 this",[63,78104,78105],{},"①",[63,78107,78108],{},"const obj = {",[63,78110,78111],{},"uname: 'pink老师',",[63,78113,78114],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[63,78116,366],{},[63,78118,78119],{},"调用对象里边的函数",[63,78121,78122],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[63,78124,78125],{},"obj.sayHai()",[63,78127,78128],{},"②",[63,78130,78131],{},"const obj1 = {",[63,78133,78111],{},[63,78135,78136],{},"sayHai: function () {",[63,78138,78139],{},"let i = 10",[63,78141,78142],{},"const count = () => {",[63,78144,78145],{},"console.log(this)",[63,78147,78148],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[63,78150,78151],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[63,78153,366],{},[63,78155,78156],{},"count()",[63,78158,366],{},[63,78160,366],{},[63,78162,78163],{},"obj1.sayHai()",[14,78165,78167],{"id":78166},"_46-解构赋值","4.6 解构赋值",[58,78169,78171],{"id":78170},"_461-数组解构","4.6.1 数组解构",[63,78173,78174],{},"以前要是使用数组中的值的话：",[63,78176,78177],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[63,78179,78180],{},"const arr=[100,60,80]",[63,78182,78183],{},"const max=arr[0]",[63,78185,78186],{},"const min=arr[1]",[63,78188,78189],{},"const avg=arr[2]",[63,78191,78192],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[63,78194,78195],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[63,78197,78198],{},"这个写法就类似于上边的那种用很多const的方法",[63,78200,78201],{},[29,78202],{"alt":138,"src":78203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[133,78205,78207],{"className":51531,"code":78206,"language":51533,"meta":138,"style":138},"①变量之间交换值:\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",[140,78208,78209,78214,78219,78224,78229,78234,78238,78242,78247,78251,78256,78261,78265,78270,78275,78286,78296,78301,78306,78311,78315,78319],{"__ignoreMap":138},[143,78210,78211],{"class":145,"line":146},[143,78212,78213],{"class":149},"①变量之间交换值:\n",[143,78215,78216],{"class":145,"line":35},[143,78217,78218],{"class":149},"let a=1\n",[143,78220,78221],{"class":145,"line":46},[143,78222,78223],{"class":149},"let b=2;\n",[143,78225,78226],{"class":145,"line":293},[143,78227,78228],{"class":149},"必须加这行代码，不然就会报错\n",[143,78230,78231],{"class":145,"line":306},[143,78232,78233],{"class":149},"[b,a]=[a,b]\n",[143,78235,78236],{"class":145,"line":319},[143,78237,3300],{"emptyLinePlaceholder":976},[143,78239,78240],{"class":145,"line":332},[143,78241,3300],{"emptyLinePlaceholder":976},[143,78243,78244],{"class":145,"line":345},[143,78245,78246],{"class":149},"可以写成下面的方式：\n",[143,78248,78249],{"class":145,"line":701},[143,78250,78218],{"class":149},[143,78252,78253],{"class":145,"line":707},[143,78254,78255],{"class":149},"let b=2\n",[143,78257,78258],{"class":145,"line":727},[143,78259,78260],{"class":149},";[b,a]=[a,b]\n",[143,78262,78263],{"class":145,"line":2518},[143,78264,3300],{"emptyLinePlaceholder":976},[143,78266,78267],{"class":145,"line":2524},[143,78268,78269],{"class":149},"②排序\n",[143,78271,78272],{"class":145,"line":2529},[143,78273,78274],{"class":149},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[143,78276,78277,78280,78283],{"class":145,"line":2543},[143,78278,78279],{"class":149},"for (let i = 0; i ",[143,78281,150],{"class":78282},"s7hpK",[143,78284,78285],{"class":149}," arr1.length; i++) {\n",[143,78287,78288,78291,78293],{"class":145,"line":2548},[143,78289,78290],{"class":149},"   for (let j = 0; j ",[143,78292,150],{"class":78282},[143,78294,78295],{"class":149}," arr1.length - 1; j++) {\n",[143,78297,78298],{"class":145,"line":2554},[143,78299,78300],{"class":149},"      if (arr1[j] > arr1[j + 1]) {\n",[143,78302,78303],{"class":145,"line":2575},[143,78304,78305],{"class":149},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[143,78307,78308],{"class":145,"line":2580},[143,78309,78310],{"class":149},"       }\n",[143,78312,78313],{"class":145,"line":2594},[143,78314,5209],{"class":149},[143,78316,78317],{"class":145,"line":2599},[143,78318,348],{"class":149},[143,78320,78321],{"class":145,"line":2628},[143,78322,78323],{"class":149},"console.log(arr1)\n",[63,78325,78326],{},"数组解构的细节：",[63,78328,78329],{},"①变量多，单元值少",[63,78331,78332],{},[29,78333],{"alt":138,"src":78334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[63,78336,78337],{},"防止出现undefined的方法：",[63,78339,78340],{},"const [a=0,b=0] =[1]",[63,78342,78343],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[63,78345,78346],{},"②变量少，单元值多",[63,78348,78349],{},[29,78350],{"alt":138,"src":78351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[63,78353,78354],{},"此时可以使用剩余参数来接收多余的值",[63,78356,78357],{},"const [a,b,...c]=[1,2,3,4]",[63,78359,78360],{},"console.log(c) 输出[3,4]",[63,78362,78363],{},"③可以按需导入，忽略某些返回值",[63,78365,78366],{},[29,78367],{"alt":138,"src":78368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[63,78370,78371],{},"④支持多维数组的结构",[133,78373,78377],{"className":78374,"code":78375,"language":78376,"meta":138,"style":138},"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",[140,78378,78379,78407,78423,78438,78453],{"__ignoreMap":138},[143,78380,78381,78383,78385,78387,78389,78391,78393,78395,78398,78400,78402,78404],{"class":145,"line":146},[143,78382,7692],{"class":755},[143,78384,52721],{"class":149},[143,78386,160],{"class":755},[143,78388,53113],{"class":149},[143,78390,771],{"class":280},[143,78392,13335],{"class":149},[143,78394,1122],{"class":280},[143,78396,78397],{"class":149},", [",[143,78399,1116],{"class":280},[143,78401,13335],{"class":149},[143,78403,1334],{"class":280},[143,78405,78406],{"class":149},"]]\n",[143,78408,78409,78412,78414,78416,78418,78420],{"class":145,"line":35},[143,78410,78411],{"class":149},"console.",[143,78413,59130],{"class":156},[143,78415,4751],{"class":149},[143,78417,1234],{"class":280},[143,78419,5116],{"class":149},[143,78421,78422],{"class":266},"  \u002F\u002F1\n",[143,78424,78425,78427,78429,78431,78433,78435],{"class":145,"line":46},[143,78426,78411],{"class":149},[143,78428,59130],{"class":156},[143,78430,4751],{"class":149},[143,78432,771],{"class":280},[143,78434,5116],{"class":149},[143,78436,78437],{"class":266},"  \u002F\u002F2\n",[143,78439,78440,78442,78444,78446,78448,78450],{"class":145,"line":293},[143,78441,78411],{"class":149},[143,78443,59130],{"class":156},[143,78445,4751],{"class":149},[143,78447,1122],{"class":280},[143,78449,5116],{"class":149},[143,78451,78452],{"class":266},"  \u002F\u002F[3,4]\n",[143,78454,78455,78457,78459,78461,78463,78465,78467,78469],{"class":145,"line":306},[143,78456,78411],{"class":149},[143,78458,59130],{"class":156},[143,78460,4751],{"class":149},[143,78462,1122],{"class":280},[143,78464,5801],{"class":149},[143,78466,1234],{"class":280},[143,78468,5116],{"class":149},[143,78470,78471],{"class":266},"  \u002F\u002F3\n",[133,78473,78475],{"className":78374,"code":78474,"language":78376,"meta":138,"style":138},"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",[140,78476,78477,78504,78515,78526],{"__ignoreMap":138},[143,78478,78479,78481,78484,78486,78488,78490,78492,78494,78496,78498,78500,78502],{"class":145,"line":146},[143,78480,7692],{"class":755},[143,78482,78483],{"class":149}," [a, b, c] ",[143,78485,160],{"class":755},[143,78487,53113],{"class":149},[143,78489,771],{"class":280},[143,78491,13335],{"class":149},[143,78493,1122],{"class":280},[143,78495,78397],{"class":149},[143,78497,1116],{"class":280},[143,78499,13335],{"class":149},[143,78501,1334],{"class":280},[143,78503,78406],{"class":149},[143,78505,78506,78508,78510,78513],{"class":145,"line":35},[143,78507,78411],{"class":149},[143,78509,59130],{"class":156},[143,78511,78512],{"class":149},"(a)",[143,78514,78422],{"class":266},[143,78516,78517,78519,78521,78524],{"class":145,"line":46},[143,78518,78411],{"class":149},[143,78520,59130],{"class":156},[143,78522,78523],{"class":149},"(b)",[143,78525,78437],{"class":266},[143,78527,78528,78530,78532,78535],{"class":145,"line":293},[143,78529,78411],{"class":149},[143,78531,59130],{"class":156},[143,78533,78534],{"class":149},"(c)",[143,78536,78452],{"class":266},[133,78538,78540],{"className":78374,"code":78539,"language":78376,"meta":138,"style":138},"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",[140,78541,78542,78569,78579,78589,78599],{"__ignoreMap":138},[143,78543,78544,78546,78549,78551,78553,78555,78557,78559,78561,78563,78565,78567],{"class":145,"line":146},[143,78545,7692],{"class":755},[143,78547,78548],{"class":149}," [a, b, [c, d]] ",[143,78550,160],{"class":755},[143,78552,53113],{"class":149},[143,78554,771],{"class":280},[143,78556,13335],{"class":149},[143,78558,1122],{"class":280},[143,78560,78397],{"class":149},[143,78562,1116],{"class":280},[143,78564,13335],{"class":149},[143,78566,1334],{"class":280},[143,78568,78406],{"class":149},[143,78570,78571,78573,78575,78577],{"class":145,"line":35},[143,78572,78411],{"class":149},[143,78574,59130],{"class":156},[143,78576,78512],{"class":149},[143,78578,78422],{"class":266},[143,78580,78581,78583,78585,78587],{"class":145,"line":46},[143,78582,78411],{"class":149},[143,78584,59130],{"class":156},[143,78586,78523],{"class":149},[143,78588,78437],{"class":266},[143,78590,78591,78593,78595,78597],{"class":145,"line":293},[143,78592,78411],{"class":149},[143,78594,59130],{"class":156},[143,78596,78534],{"class":149},[143,78598,78471],{"class":266},[143,78600,78601,78603,78605,78608],{"class":145,"line":306},[143,78602,78411],{"class":149},[143,78604,59130],{"class":156},[143,78606,78607],{"class":149},"(d)",[143,78609,78610],{"class":266},"  \u002F\u002F4\n",[58,78612,78614],{"id":78613},"_462-对象解构","4.6.2 对象解构",[63,78616,78617],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[63,78619,78620],{},"用的非常非常多！！！！！！",[22896,78622,78624],{"id":78623},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[63,78626,78627],{},"基本语法：",[19,78629,78630,78633,78636,78639],{},[22,78631,78632],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[22,78634,78635],{},"对象属性的值将被赋值给与属性名相同的变量",[22,78637,78638],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[22,78640,78641],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[133,78643,78645],{"className":51531,"code":78644,"language":51533,"meta":138,"style":138},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[140,78646,78647,78652,78657,78662,78666],{"__ignoreMap":138},[143,78648,78649],{"class":145,"line":146},[143,78650,78651],{"class":149},"const obj = {\n",[143,78653,78654],{"class":145,"line":35},[143,78655,78656],{"class":149},"   uname: 'pink老师',\n",[143,78658,78659],{"class":145,"line":46},[143,78660,78661],{"class":149},"   age: 18,\n",[143,78663,78664],{"class":145,"line":293},[143,78665,348],{"class":149},[143,78667,78668],{"class":145,"line":306},[143,78669,78670],{"class":149},"const { uname, age } = obj\n",[63,78672,78673],{},"上方代码这样写等价于：",[63,78675,78676],{},"const uname等价于obj.uname",[63,78678,78679],{},"变量名可以重新改名：",[63,78681,78682],{},"const uname='red老师'",[63,78684,78685],{},"const user={",[63,78687,78688],{},"  uname:'pink老师',",[63,78690,78691],{},"  age:18",[63,78693,366],{},[63,78695,78696],{},"const {uname,age}=user",[63,78698,78699],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[63,78701,78702],{},"const {旧变量名：新变量名}=对象",[63,78704,78705],{},"const {uname:username,age}=user",[22896,78707,78709],{"id":78708},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[63,78711,78712],{},[29,78713],{"alt":138,"src":78714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22896,78716,78718],{"id":78717},"_4623-多级对象解构","4.6.2.3 多级对象解构",[63,78720,78721],{},[29,78722],{"alt":138,"src":78723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[133,78725,78727],{"className":53954,"code":78726,"language":53956,"meta":138,"style":138},"  \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",[140,78728,78729,78737,78742,78747,78752,78757,78762,78767,78772,78777,78781,78786,78791],{"__ignoreMap":138},[143,78730,78731,78733,78735],{"class":145,"line":146},[143,78732,634],{"class":149},[143,78734,52701],{"class":153},[143,78736,183],{"class":149},[143,78738,78739],{"class":145,"line":35},[143,78740,78741],{"class":149},"    const pig = {\n",[143,78743,78744],{"class":145,"line":46},[143,78745,78746],{"class":149},"      name: '佩奇',\n",[143,78748,78749],{"class":145,"line":293},[143,78750,78751],{"class":149},"      family: {\n",[143,78753,78754],{"class":145,"line":306},[143,78755,78756],{"class":149},"        mother: '猪妈妈',\n",[143,78758,78759],{"class":145,"line":319},[143,78760,78761],{"class":149},"        father: '猪爸爸',\n",[143,78763,78764],{"class":145,"line":332},[143,78765,78766],{"class":149},"        sister: '乔治'\n",[143,78768,78769],{"class":145,"line":345},[143,78770,78771],{"class":149},"      },\n",[143,78773,78774],{"class":145,"line":701},[143,78775,78776],{"class":149},"      age: 6\n",[143,78778,78779],{"class":145,"line":707},[143,78780,3087],{"class":149},[143,78782,78783],{"class":145,"line":727},[143,78784,78785],{"class":149},"    \u002F\u002F 多级对象解构\n",[143,78787,78788],{"class":145,"line":2518},[143,78789,78790],{"class":149},"    const { name, family: { mother, father, sister }, age } = pig\n",[143,78792,78793,78795,78797],{"class":145,"line":2524},[143,78794,53304],{"class":149},[143,78796,52701],{"class":153},[143,78798,183],{"class":149},[63,78800,78801],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[133,78803,78806],{"className":78804,"code":78805,"language":77326,"meta":138,"style":138},"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",[140,78807,78808,78813,78824,78836,78848,78857,78861,78872,78884,78894,78899,78903,78913,78924,78933,78937,78941,78952,78963,78972,78976,78981],{"__ignoreMap":138},[143,78809,78810],{"class":145,"line":146},[143,78811,78812],{"class":266},"    \u002F\u002F 这是后台传递过来的数据\n",[143,78814,78815,78817,78820,78822],{"class":145,"line":35},[143,78816,12121],{"class":755},[143,78818,78819],{"class":149}," msg ",[143,78821,160],{"class":755},[143,78823,275],{"class":149},[143,78825,78826,78829,78831,78834],{"class":145,"line":46},[143,78827,78828],{"class":163},"      \"code\"",[143,78830,1900],{"class":755},[143,78832,78833],{"class":280}," 200",[143,78835,32364],{"class":149},[143,78837,78838,78841,78843,78846],{"class":145,"line":293},[143,78839,78840],{"class":163},"      \"msg\"",[143,78842,1900],{"class":755},[143,78844,78845],{"class":163}," \"获取新闻列表成功\"",[143,78847,32364],{"class":149},[143,78849,78850,78853,78855],{"class":145,"line":306},[143,78851,78852],{"class":163},"      \"data\"",[143,78854,1900],{"class":755},[143,78856,56330],{"class":149},[143,78858,78859],{"class":145,"line":319},[143,78860,3410],{"class":149},[143,78862,78863,78866,78868,78870],{"class":145,"line":332},[143,78864,78865],{"class":163},"          \"id\"",[143,78867,1900],{"class":755},[143,78869,26016],{"class":280},[143,78871,32364],{"class":149},[143,78873,78874,78877,78879,78882],{"class":145,"line":345},[143,78875,78876],{"class":163},"          \"title\"",[143,78878,1900],{"class":755},[143,78880,78881],{"class":163}," \"5G商用自己，三大运用商收入下降\"",[143,78883,32364],{"class":149},[143,78885,78886,78889,78891],{"class":145,"line":701},[143,78887,78888],{"class":163},"          \"count\"",[143,78890,1900],{"class":755},[143,78892,78893],{"class":280}," 58\n",[143,78895,78896],{"class":145,"line":707},[143,78897,78898],{"class":149},"        },\n",[143,78900,78901],{"class":145,"line":727},[143,78902,3410],{"class":149},[143,78904,78905,78907,78909,78911],{"class":145,"line":2518},[143,78906,78865],{"class":163},[143,78908,1900],{"class":755},[143,78910,15654],{"class":280},[143,78912,32364],{"class":149},[143,78914,78915,78917,78919,78922],{"class":145,"line":2524},[143,78916,78876],{"class":163},[143,78918,1900],{"class":755},[143,78920,78921],{"class":163}," \"国际媒体头条速览\"",[143,78923,32364],{"class":149},[143,78925,78926,78928,78930],{"class":145,"line":2529},[143,78927,78888],{"class":163},[143,78929,1900],{"class":755},[143,78931,78932],{"class":280}," 56\n",[143,78934,78935],{"class":145,"line":2543},[143,78936,78898],{"class":149},[143,78938,78939],{"class":145,"line":2548},[143,78940,3410],{"class":149},[143,78942,78943,78945,78947,78950],{"class":145,"line":2554},[143,78944,78865],{"class":163},[143,78946,1900],{"class":755},[143,78948,78949],{"class":280}," 3",[143,78951,32364],{"class":149},[143,78953,78954,78956,78958,78961],{"class":145,"line":2575},[143,78955,78876],{"class":163},[143,78957,1900],{"class":755},[143,78959,78960],{"class":163}," \"乌克兰和俄罗斯持续冲突\"",[143,78962,32364],{"class":149},[143,78964,78965,78967,78969],{"class":145,"line":2580},[143,78966,78888],{"class":163},[143,78968,1900],{"class":755},[143,78970,78971],{"class":280}," 1669\n",[143,78973,78974],{"class":145,"line":2594},[143,78975,78898],{"class":149},[143,78977,78978],{"class":145,"line":2599},[143,78979,78980],{"class":149},"      ]\n",[143,78982,78983],{"class":145,"line":2628},[143,78984,3087],{"class":149},[63,78986,78987],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[63,78989,78990],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[63,78992,78993],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[63,78995,78996],{},"function({data}) {",[63,78998,78999],{},"console.log(data)",[63,79001,366],{},[63,79003,79004],{},"render(msg)",[63,79006,79007],{},"实参传递给形参的时候解构了",[63,79009,79010],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[63,79012,79013],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[63,79015,79016],{},"function render({data:mydata}) {",[63,79018,79019],{},"  console.log(data)",[63,79021,366],{},[58,79023,79025],{"id":79024},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[63,79027,79028],{},"有两种情况：一个是数组结构，一个是立即执行函数",[19,79030,79031],{},[22,79032,79033],{},"如果对一个数组进行遍历，有两种方式：",[63,79035,79036],{},"①法1",[63,79038,79039],{},"const arr=[1,2,3]",[63,79041,79042],{},"arr.map(function(item,index) {",[63,79044,79045],{},"  console.log(item)",[63,79047,53351],{},[63,79049,79050],{},[29,79051],{"alt":138,"src":79052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[63,79054,79055],{},"②法2",[63,79057,79058],{},"const str='pink'",[63,79060,79061],{},"[1,2,3].map(function(item,index) {",[63,79063,79064],{},"console.log(item)",[63,79066,53351],{},[63,79068,79069],{},[29,79070],{"alt":138,"src":79071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[63,79073,79074],{},"此时会报错",[63,79076,79077],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[63,79079,79064],{},[63,79081,53351],{},[63,79083,79084],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79086,79088],{"id":79087},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[63,79090,79091],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[63,79093,79094],{},"可以理解为加强版的for循环",[63,79096,79097],{},[29,79098],{"alt":138,"src":79099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[63,79101,79102],{},"里边不写return，不返回数组，只遍历不返回",[63,79104,79105],{},"map是返回数组",[63,79107,79108],{},"forEach主要用于遍历数组对象",[133,79110,79112],{"className":53954,"code":79111,"language":53956,"meta":138,"style":138},"  \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",[140,79113,79114,79122,79127,79132,79137,79142,79146,79151],{"__ignoreMap":138},[143,79115,79116,79118,79120],{"class":145,"line":146},[143,79117,634],{"class":149},[143,79119,52701],{"class":153},[143,79121,183],{"class":149},[143,79123,79124],{"class":145,"line":35},[143,79125,79126],{"class":149},"    const arr = ['red', 'green', 'pink']\n",[143,79128,79129],{"class":145,"line":46},[143,79130,79131],{"class":149},"    const result = arr.forEach(function (item, index) {\n",[143,79133,79134],{"class":145,"line":293},[143,79135,79136],{"class":149},"      console.log(item)\n",[143,79138,79139],{"class":145,"line":306},[143,79140,79141],{"class":149},"      console.log(index)\n",[143,79143,79144],{"class":145,"line":319},[143,79145,34359],{"class":149},[143,79147,79148],{"class":145,"line":332},[143,79149,79150],{"class":149},"    console.log(result)\n",[143,79152,79153,79155,79157],{"class":145,"line":345},[143,79154,53304],{"class":149},[143,79156,52701],{"class":153},[143,79158,183],{"class":149},[63,79160,79161],{},[29,79162],{"alt":138,"src":79163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79165,79167],{"id":79166},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[63,79169,79170],{},[29,79171],{"alt":138,"src":79172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[63,79174,79175],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[133,79177,79179],{"className":53954,"code":79178,"language":53956,"meta":138,"style":138},"\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",[140,79180,79181,79189,79197,79202,79207,79211,79215,79220,79224,79229,79237],{"__ignoreMap":138},[143,79182,79183,79185,79187],{"class":145,"line":146},[143,79184,150],{"class":149},[143,79186,52688],{"class":153},[143,79188,183],{"class":149},[143,79190,79191,79193,79195],{"class":145,"line":35},[143,79192,634],{"class":149},[143,79194,52701],{"class":153},[143,79196,183],{"class":149},[143,79198,79199],{"class":145,"line":46},[143,79200,79201],{"class":149},"    const arr = [10, 20, 30]\n",[143,79203,79204],{"class":145,"line":293},[143,79205,79206],{"class":149},"    const newArr = arr.filter(function (item, index) {\n",[143,79208,79209],{"class":145,"line":306},[143,79210,79136],{"class":149},[143,79212,79213],{"class":145,"line":319},[143,79214,79141],{"class":149},[143,79216,79217],{"class":145,"line":332},[143,79218,79219],{"class":149},"      return item >= 20\n",[143,79221,79222],{"class":145,"line":345},[143,79223,34359],{"class":149},[143,79225,79226],{"class":145,"line":701},[143,79227,79228],{"class":149},"    console.log(newArr)\n",[143,79230,79231,79233,79235],{"class":145,"line":707},[143,79232,53304],{"class":149},[143,79234,52701],{"class":153},[143,79236,183],{"class":149},[143,79238,79239,79241,79243],{"class":145,"line":727},[143,79240,730],{"class":149},[143,79242,52688],{"class":153},[143,79244,183],{"class":149},[63,79246,79247],{},"这个也可以写成箭头函数：",[133,79249,79251],{"className":51531,"code":79250,"language":51533,"meta":138,"style":138},"const newArr = arr.filter(item => item >= 20)\n",[140,79252,79253],{"__ignoreMap":138},[143,79254,79255],{"class":145,"line":146},[143,79256,79250],{"class":149},[14,79258,79260],{"id":79259},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[63,79262,79263],{},[29,79264],{"alt":138,"src":79265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[63,79267,79268],{},"步骤：",[63,79270,79271],{},"①：渲染页面模块",[232,79273,79274,79277],{},[22,79275,79276],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[22,79278,79279],{},"用forEach+字符串的形式",[63,79281,79282],{},"②：点击不同需求，显示不同页面内容",[232,79284,79285,79288,79291,79294,79297],{},[22,79286,79287],{},"点击采取事件委托方式 .filter",[22,79289,79290],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[22,79292,79293],{},"筛选条件是根据点击的 data-index 来判断",[22,79295,79296],{},"可以使用对象解构，把事件对象解构",[22,79298,79299],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[133,79301,79303],{"className":51531,"code":79302,"language":51533,"meta":138,"style":138},"\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",[140,79304,79305,79315,79329,79333,79341,79355,79375,79387,79395,79401,79411,79421,79431,79435,79439,79445,79458,79470,79480,79491,79495,79499,79506,79519,79531,79548,79566,79579,79583,79587,79599,79609,79613,79617,79624,79665,79692,79702,79706,79710,79718,79730,79734,79738,79746,79758,79770,79781,79785,79789,79798,79810,79821,79825,79829,79838,79850,79862,79866,79870,79877,79887,79899,79911,79926,79930,79934,79942,79958,79968,79978,79988,80000,80004,80008,80018,80029,80039,80043,80051,80059,80063,80071,80086,80112,80137,80162,80181,80189,80203,80208,80213,80218,80223,80228,80236,80244,80249,80260,80265,80275,80285,80295,80305,80309,80313,80322,80331,80340,80349,80353,80357,80366,80375,80384,80393,80397,80401,80410,80419,80428,80437,80441,80445,80454,80463,80472,80481,80485,80489,80498,80507,80516,80525,80529,80533,80542,80551,80560,80569,80573,80577,80586,80595,80603,80612,80616,80620,80624,80629,80641,80646,80658,80662,80679,80707,80716,80721,80731,80741,80750,80755,80760,80764,80769,80786,80790,80795,80803,80808,80835,80840,80860,80865,80877,80882,80887,80892,80903,80917,80954,80972,81005,81022,81046,81050,81055,81061,81065,81069,81073,81081,81089,81093],{"__ignoreMap":138},[143,79306,79307,79309,79311,79313],{"class":145,"line":146},[143,79308,52195],{"class":149},[143,79310,52198],{"class":153},[143,79312,52201],{"class":156},[143,79314,183],{"class":149},[143,79316,79317,79319,79321,79323,79325,79327],{"class":145,"line":35},[143,79318,150],{"class":149},[143,79320,51533],{"class":153},[143,79322,52212],{"class":156},[143,79324,160],{"class":149},[143,79326,52217],{"class":163},[143,79328,183],{"class":149},[143,79330,79331],{"class":145,"line":46},[143,79332,3300],{"emptyLinePlaceholder":976},[143,79334,79335,79337,79339],{"class":145,"line":293},[143,79336,150],{"class":149},[143,79338,52230],{"class":153},[143,79340,183],{"class":149},[143,79342,79343,79345,79347,79349,79351,79353],{"class":145,"line":306},[143,79344,634],{"class":149},[143,79346,52240],{"class":153},[143,79348,52243],{"class":156},[143,79350,160],{"class":149},[143,79352,52248],{"class":163},[143,79354,183],{"class":149},[143,79356,79357,79359,79361,79363,79365,79367,79369,79371,79373],{"class":145,"line":319},[143,79358,634],{"class":149},[143,79360,52240],{"class":153},[143,79362,15819],{"class":156},[143,79364,160],{"class":149},[143,79366,52287],{"class":163},[143,79368,52267],{"class":156},[143,79370,160],{"class":149},[143,79372,52294],{"class":163},[143,79374,183],{"class":149},[143,79376,79377,79379,79381,79383,79385],{"class":145,"line":332},[143,79378,634],{"class":149},[143,79380,52303],{"class":153},[143,79382,52306],{"class":149},[143,79384,52303],{"class":153},[143,79386,183],{"class":149},[143,79388,79389,79391,79393],{"class":145,"line":345},[143,79390,634],{"class":149},[143,79392,954],{"class":153},[143,79394,183],{"class":149},[143,79396,79397,79399],{"class":145,"line":701},[143,79398,7303],{"class":153},[143,79400,275],{"class":149},[143,79402,79403,79405,79407,79409],{"class":145,"line":707},[143,79404,55580],{"class":280},[143,79406,284],{"class":149},[143,79408,1234],{"class":280},[143,79410,290],{"class":149},[143,79412,79413,79415,79417,79419],{"class":145,"line":727},[143,79414,55591],{"class":280},[143,79416,284],{"class":149},[143,79418,1234],{"class":280},[143,79420,290],{"class":149},[143,79422,79423,79425,79427,79429],{"class":145,"line":2518},[143,79424,73475],{"class":280},[143,79426,284],{"class":149},[143,79428,61388],{"class":280},[143,79430,290],{"class":149},[143,79432,79433],{"class":145,"line":2524},[143,79434,3087],{"class":149},[143,79436,79437],{"class":145,"line":2529},[143,79438,3300],{"emptyLinePlaceholder":976},[143,79440,79441,79443],{"class":145,"line":2543},[143,79442,63006],{"class":156},[143,79444,275],{"class":149},[143,79446,79447,79449,79451,79454,79456],{"class":145,"line":2548},[143,79448,55656],{"class":280},[143,79450,284],{"class":149},[143,79452,79453],{"class":280},"990",[143,79455,774],{"class":755},[143,79457,290],{"class":149},[143,79459,79460,79462,79464,79466,79468],{"class":145,"line":2554},[143,79461,55591],{"class":280},[143,79463,284],{"class":149},[143,79465,1234],{"class":280},[143,79467,52448],{"class":280},[143,79469,290],{"class":149},[143,79471,79472,79474,79476,79478],{"class":145,"line":2575},[143,79473,55894],{"class":280},[143,79475,284],{"class":149},[143,79477,287],{"class":280},[143,79479,290],{"class":149},[143,79481,79482,79485,79487,79489],{"class":145,"line":2580},[143,79483,79484],{"class":280},"      flex-wrap",[143,79486,284],{"class":149},[143,79488,340],{"class":280},[143,79490,290],{"class":149},[143,79492,79493],{"class":145,"line":2594},[143,79494,3087],{"class":149},[143,79496,79497],{"class":145,"line":2599},[143,79498,3300],{"emptyLinePlaceholder":976},[143,79500,79501,79504],{"class":145,"line":2628},[143,79502,79503],{"class":156},"    .item",[143,79505,275],{"class":149},[143,79507,79508,79510,79512,79515,79517],{"class":145,"line":2633},[143,79509,55656],{"class":280},[143,79511,284],{"class":149},[143,79513,79514],{"class":280},"240",[143,79516,774],{"class":755},[143,79518,290],{"class":149},[143,79520,79521,79523,79525,79527,79529],{"class":145,"line":2650},[143,79522,62883],{"class":280},[143,79524,284],{"class":149},[143,79526,1487],{"class":280},[143,79528,774],{"class":755},[143,79530,290],{"class":149},[143,79532,79533,79535,79537,79539,79541,79544,79546],{"class":145,"line":2655},[143,79534,55580],{"class":280},[143,79536,284],{"class":149},[143,79538,1741],{"class":280},[143,79540,774],{"class":755},[143,79542,79543],{"class":280}," 30",[143,79545,774],{"class":755},[143,79547,290],{"class":149},[143,79549,79550,79552,79554,79556,79559,79562,79564],{"class":145,"line":2660},[143,79551,62743],{"class":280},[143,79553,284],{"class":149},[143,79555,29019],{"class":280},[143,79557,79558],{"class":280}," ease",[143,79560,79561],{"class":280}," .5",[143,79563,1736],{"class":755},[143,79565,290],{"class":149},[143,79567,79568,79571,79573,79575,79577],{"class":145,"line":2665},[143,79569,79570],{"class":280},"      margin-bottom",[143,79572,284],{"class":149},[143,79574,1741],{"class":280},[143,79576,774],{"class":755},[143,79578,290],{"class":149},[143,79580,79581],{"class":145,"line":2679},[143,79582,3087],{"class":149},[143,79584,79585],{"class":145,"line":2684},[143,79586,3300],{"emptyLinePlaceholder":976},[143,79588,79589,79592,79594,79597],{"class":145,"line":3477},[143,79590,79591],{"class":156},"    .item:nth-child",[143,79593,1049],{"class":149},[143,79595,79596],{"class":280},"4n",[143,79598,13342],{"class":149},[143,79600,79601,79603,79605,79607],{"class":145,"line":3491},[143,79602,62883],{"class":280},[143,79604,284],{"class":149},[143,79606,1234],{"class":280},[143,79608,290],{"class":149},[143,79610,79611],{"class":145,"line":3499},[143,79612,3087],{"class":149},[143,79614,79615],{"class":145,"line":3504},[143,79616,3300],{"emptyLinePlaceholder":976},[143,79618,79619,79622],{"class":145,"line":3510},[143,79620,79621],{"class":156},"    .item:hover",[143,79623,275],{"class":149},[143,79625,79626,79629,79631,79633,79635,79637,79639,79641,79643,79646,79648,79650,79652,79654,79656,79658,79660,79663],{"class":145,"line":3516},[143,79627,79628],{"class":280},"      box-shadow",[143,79630,284],{"class":149},[143,79632,1234],{"class":280},[143,79634,774],{"class":755},[143,79636,4993],{"class":280},[143,79638,774],{"class":755},[143,79640,3048],{"class":280},[143,79642,774],{"class":755},[143,79644,79645],{"class":280}," rgba",[143,79647,1049],{"class":149},[143,79649,1234],{"class":280},[143,79651,13335],{"class":149},[143,79653,1234],{"class":280},[143,79655,13335],{"class":149},[143,79657,1234],{"class":280},[143,79659,13335],{"class":149},[143,79661,79662],{"class":280},".2",[143,79664,3619],{"class":149},[143,79666,79667,79670,79672,79675,79677,79679,79681,79684,79686,79688,79690],{"class":145,"line":3521},[143,79668,79669],{"class":280},"      transform",[143,79671,284],{"class":149},[143,79673,79674],{"class":280},"translate3d",[143,79676,1049],{"class":149},[143,79678,1234],{"class":280},[143,79680,13335],{"class":149},[143,79682,79683],{"class":280},"-4",[143,79685,774],{"class":755},[143,79687,13335],{"class":149},[143,79689,1234],{"class":280},[143,79691,3619],{"class":149},[143,79693,79694,79696,79698,79700],{"class":145,"line":8848},[143,79695,62908],{"class":280},[143,79697,284],{"class":149},[143,79699,62913],{"class":280},[143,79701,290],{"class":149},[143,79703,79704],{"class":145,"line":8872},[143,79705,3087],{"class":149},[143,79707,79708],{"class":145,"line":8877},[143,79709,3300],{"emptyLinePlaceholder":976},[143,79711,79712,79714,79716],{"class":145,"line":8883},[143,79713,79503],{"class":156},[143,79715,56498],{"class":153},[143,79717,275],{"class":149},[143,79719,79720,79722,79724,79726,79728],{"class":145,"line":8910},[143,79721,55656],{"class":280},[143,79723,284],{"class":149},[143,79725,1352],{"class":280},[143,79727,1369],{"class":755},[143,79729,290],{"class":149},[143,79731,79732],{"class":145,"line":8915},[143,79733,3087],{"class":149},[143,79735,79736],{"class":145,"line":8921},[143,79737,3300],{"emptyLinePlaceholder":976},[143,79739,79740,79742,79744],{"class":145,"line":8933},[143,79741,79503],{"class":156},[143,79743,63187],{"class":156},[143,79745,275],{"class":149},[143,79747,79748,79750,79752,79754,79756],{"class":145,"line":8945},[143,79749,55807],{"class":280},[143,79751,284],{"class":149},[143,79753,1691],{"class":280},[143,79755,774],{"class":755},[143,79757,290],{"class":149},[143,79759,79760,79762,79764,79766,79768],{"class":145,"line":8957},[143,79761,79570],{"class":280},[143,79763,284],{"class":149},[143,79765,1487],{"class":280},[143,79767,774],{"class":755},[143,79769,290],{"class":149},[143,79771,79772,79774,79776,79779],{"class":145,"line":10616},[143,79773,58299],{"class":280},[143,79775,284],{"class":149},[143,79777,79778],{"class":280},"#666",[143,79780,290],{"class":149},[143,79782,79783],{"class":145,"line":10641},[143,79784,3087],{"class":149},[143,79786,79787],{"class":145,"line":10664},[143,79788,3300],{"emptyLinePlaceholder":976},[143,79790,79791,79793,79796],{"class":145,"line":10688},[143,79792,79503],{"class":156},[143,79794,79795],{"class":156}," .price",[143,79797,275],{"class":149},[143,79799,79800,79802,79804,79806,79808],{"class":145,"line":10693},[143,79801,55807],{"class":280},[143,79803,284],{"class":149},[143,79805,1791],{"class":280},[143,79807,774],{"class":755},[143,79809,290],{"class":149},[143,79811,79812,79814,79816,79819],{"class":145,"line":10698},[143,79813,58299],{"class":280},[143,79815,284],{"class":149},[143,79817,79818],{"class":280},"firebrick",[143,79820,290],{"class":149},[143,79822,79823],{"class":145,"line":10703},[143,79824,3087],{"class":149},[143,79826,79827],{"class":145,"line":10712},[143,79828,3300],{"emptyLinePlaceholder":976},[143,79830,79831,79833,79836],{"class":145,"line":10717},[143,79832,79503],{"class":156},[143,79834,79835],{"class":156}," .price::before",[143,79837,275],{"class":149},[143,79839,79840,79843,79845,79848],{"class":145,"line":10723},[143,79841,79842],{"class":280},"      content",[143,79844,284],{"class":149},[143,79846,79847],{"class":163},"'￥'",[143,79849,290],{"class":149},[143,79851,79852,79854,79856,79858,79860],{"class":145,"line":10744},[143,79853,55807],{"class":280},[143,79855,284],{"class":149},[143,79857,1590],{"class":280},[143,79859,774],{"class":755},[143,79861,290],{"class":149},[143,79863,79864],{"class":145,"line":10750},[143,79865,3087],{"class":149},[143,79867,79868],{"class":145,"line":10764},[143,79869,3300],{"emptyLinePlaceholder":976},[143,79871,79872,79875],{"class":145,"line":10770},[143,79873,79874],{"class":156},"    .filter",[143,79876,275],{"class":149},[143,79878,79879,79881,79883,79885],{"class":145,"line":10797},[143,79880,55894],{"class":280},[143,79882,284],{"class":149},[143,79884,287],{"class":280},[143,79886,290],{"class":149},[143,79888,79889,79891,79893,79895,79897],{"class":145,"line":10806},[143,79890,55656],{"class":280},[143,79892,284],{"class":149},[143,79894,79453],{"class":280},[143,79896,774],{"class":755},[143,79898,290],{"class":149},[143,79900,79901,79903,79905,79907,79909],{"class":145,"line":10812},[143,79902,55591],{"class":280},[143,79904,284],{"class":149},[143,79906,1234],{"class":280},[143,79908,52448],{"class":280},[143,79910,290],{"class":149},[143,79912,79913,79915,79917,79919,79921,79923],{"class":145,"line":10820},[143,79914,55580],{"class":280},[143,79916,284],{"class":149},[143,79918,1697],{"class":280},[143,79920,774],{"class":755},[143,79922,79543],{"class":280},[143,79924,79925],{"class":755},"px\n",[143,79927,79928],{"class":145,"line":10825},[143,79929,3087],{"class":149},[143,79931,79932],{"class":145,"line":17502},[143,79933,3300],{"emptyLinePlaceholder":976},[143,79935,79936,79938,79940],{"class":145,"line":17508},[143,79937,79874],{"class":156},[143,79939,2302],{"class":153},[143,79941,275],{"class":149},[143,79943,79944,79946,79948,79950,79952,79954,79956],{"class":145,"line":17531},[143,79945,55580],{"class":280},[143,79947,284],{"class":149},[143,79949,1487],{"class":280},[143,79951,774],{"class":755},[143,79953,9850],{"class":280},[143,79955,774],{"class":755},[143,79957,290],{"class":149},[143,79959,79960,79962,79964,79966],{"class":145,"line":17537},[143,79961,62604],{"class":280},[143,79963,284],{"class":149},[143,79965,62701],{"class":280},[143,79967,290],{"class":149},[143,79969,79970,79972,79974,79976],{"class":145,"line":17560},[143,79971,58299],{"class":280},[143,79973,284],{"class":149},[143,79975,79778],{"class":280},[143,79977,290],{"class":149},[143,79979,79980,79982,79984,79986],{"class":145,"line":17574},[143,79981,64852],{"class":280},[143,79983,284],{"class":149},[143,79985,55622],{"class":280},[143,79987,290],{"class":149},[143,79989,79990,79992,79994,79996,79998],{"class":145,"line":17594},[143,79991,62633],{"class":280},[143,79993,284],{"class":149},[143,79995,1741],{"class":280},[143,79997,774],{"class":755},[143,79999,290],{"class":149},[143,80001,80002],{"class":145,"line":17600},[143,80003,3087],{"class":149},[143,80005,80006],{"class":145,"line":17611},[143,80007,3300],{"emptyLinePlaceholder":976},[143,80009,80010,80012,80014,80016],{"class":145,"line":17634},[143,80011,79874],{"class":156},[143,80013,2302],{"class":153},[143,80015,62783],{"class":156},[143,80017,275],{"class":149},[143,80019,80020,80022,80024,80027],{"class":145,"line":17656},[143,80021,55769],{"class":280},[143,80023,284],{"class":149},[143,80025,80026],{"class":280},"#05943c",[143,80028,290],{"class":149},[143,80030,80031,80033,80035,80037],{"class":145,"line":17661},[143,80032,58299],{"class":280},[143,80034,284],{"class":149},[143,80036,61725],{"class":280},[143,80038,290],{"class":149},[143,80040,80041],{"class":145,"line":17667},[143,80042,3087],{"class":149},[143,80044,80045,80047,80049],{"class":145,"line":17681},[143,80046,53304],{"class":149},[143,80048,954],{"class":153},[143,80050,183],{"class":149},[143,80052,80053,80055,80057],{"class":145,"line":17694},[143,80054,730],{"class":149},[143,80056,52230],{"class":153},[143,80058,183],{"class":149},[143,80060,80061],{"class":145,"line":17699},[143,80062,3300],{"emptyLinePlaceholder":976},[143,80064,80065,80067,80069],{"class":145,"line":17713},[143,80066,150],{"class":149},[143,80068,52688],{"class":153},[143,80070,183],{"class":149},[143,80072,80073,80075,80077,80079,80081,80084],{"class":145,"line":17718},[143,80074,634],{"class":149},[143,80076,614],{"class":153},[143,80078,617],{"class":156},[143,80080,160],{"class":149},[143,80082,80083],{"class":163},"\"filter\"",[143,80085,183],{"class":149},[143,80087,80088,80090,80092,80094,80096,80098,80101,80103,80105,80108,80110],{"class":145,"line":17724},[143,80089,52237],{"class":149},[143,80091,67],{"class":153},[143,80093,61940],{"class":156},[143,80095,160],{"class":149},[143,80097,61945],{"class":163},[143,80099,80100],{"class":156}," data-index",[143,80102,160],{"class":149},[143,80104,4578],{"class":163},[143,80106,80107],{"class":149},">0-100元\u003C\u002F",[143,80109,67],{"class":153},[143,80111,183],{"class":149},[143,80113,80114,80116,80118,80120,80122,80124,80126,80128,80130,80133,80135],{"class":145,"line":17729},[143,80115,52237],{"class":149},[143,80117,67],{"class":153},[143,80119,61940],{"class":156},[143,80121,160],{"class":149},[143,80123,61945],{"class":163},[143,80125,80100],{"class":156},[143,80127,160],{"class":149},[143,80129,4601],{"class":163},[143,80131,80132],{"class":149},">100-300元\u003C\u002F",[143,80134,67],{"class":153},[143,80136,183],{"class":149},[143,80138,80139,80141,80143,80145,80147,80149,80151,80153,80155,80158,80160],{"class":145,"line":17743},[143,80140,52237],{"class":149},[143,80142,67],{"class":153},[143,80144,61940],{"class":156},[143,80146,160],{"class":149},[143,80148,61945],{"class":163},[143,80150,80100],{"class":156},[143,80152,160],{"class":149},[143,80154,4614],{"class":163},[143,80156,80157],{"class":149},">300元以上\u003C\u002F",[143,80159,67],{"class":153},[143,80161,183],{"class":149},[143,80163,80164,80166,80168,80170,80172,80174,80177,80179],{"class":145,"line":17748},[143,80165,52237],{"class":149},[143,80167,67],{"class":153},[143,80169,61940],{"class":156},[143,80171,160],{"class":149},[143,80173,61945],{"class":163},[143,80175,80176],{"class":149},">全部区间\u003C\u002F",[143,80178,67],{"class":153},[143,80180,183],{"class":149},[143,80182,80183,80185,80187],{"class":145,"line":17753},[143,80184,53304],{"class":149},[143,80186,614],{"class":153},[143,80188,183],{"class":149},[143,80190,80191,80193,80195,80197,80199,80201],{"class":145,"line":17767},[143,80192,634],{"class":149},[143,80194,614],{"class":153},[143,80196,617],{"class":156},[143,80198,160],{"class":149},[143,80200,63491],{"class":163},[143,80202,183],{"class":149},[143,80204,80205],{"class":145,"line":17779},[143,80206,80207],{"class":266},"    \u003C!-- \u003Cdiv class=\"item\">\n",[143,80209,80210],{"class":145,"line":17784},[143,80211,80212],{"class":266},"      \u003Cimg src=\"\" alt=\"\">\n",[143,80214,80215],{"class":145,"line":17797},[143,80216,80217],{"class":266},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[143,80219,80220],{"class":145,"line":17802},[143,80221,80222],{"class":266},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[143,80224,80225],{"class":145,"line":17807},[143,80226,80227],{"class":266},"    \u003C\u002Fdiv> -->\n",[143,80229,80230,80232,80234],{"class":145,"line":17812},[143,80231,53304],{"class":149},[143,80233,614],{"class":153},[143,80235,183],{"class":149},[143,80237,80238,80240,80242],{"class":145,"line":17825},[143,80239,634],{"class":149},[143,80241,52701],{"class":153},[143,80243,183],{"class":149},[143,80245,80246],{"class":145,"line":17830},[143,80247,80248],{"class":266},"    \u002F\u002F 2. 初始化数据\n",[143,80250,80251,80253,80256,80258],{"class":145,"line":33531},[143,80252,12121],{"class":755},[143,80254,80255],{"class":280}," goodsList",[143,80257,14464],{"class":755},[143,80259,56330],{"class":149},[143,80261,80262],{"class":145,"line":33537},[143,80263,80264],{"class":149},"      {\n",[143,80266,80267,80270,80273],{"class":145,"line":33543},[143,80268,80269],{"class":149},"        id: ",[143,80271,80272],{"class":163},"'4001172'",[143,80274,32364],{"class":149},[143,80276,80277,80280,80283],{"class":145,"line":33549},[143,80278,80279],{"class":149},"        name: ",[143,80281,80282],{"class":163},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[143,80284,32364],{"class":149},[143,80286,80287,80290,80293],{"class":145,"line":33555},[143,80288,80289],{"class":149},"        price: ",[143,80291,80292],{"class":163},"'289.00'",[143,80294,32364],{"class":149},[143,80296,80297,80300,80303],{"class":145,"line":33566},[143,80298,80299],{"class":149},"        picture: ",[143,80301,80302],{"class":163},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[143,80304,32364],{"class":149},[143,80306,80307],{"class":145,"line":33572},[143,80308,78771],{"class":149},[143,80310,80311],{"class":145,"line":33592},[143,80312,80264],{"class":149},[143,80314,80315,80317,80320],{"class":145,"line":33598},[143,80316,80269],{"class":149},[143,80318,80319],{"class":163},"'4001594'",[143,80321,32364],{"class":149},[143,80323,80324,80326,80329],{"class":145,"line":33609},[143,80325,80279],{"class":149},[143,80327,80328],{"class":163},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[143,80330,32364],{"class":149},[143,80332,80333,80335,80338],{"class":145,"line":33615},[143,80334,80289],{"class":149},[143,80336,80337],{"class":163},"'288.00'",[143,80339,32364],{"class":149},[143,80341,80342,80344,80347],{"class":145,"line":33621},[143,80343,80299],{"class":149},[143,80345,80346],{"class":163},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[143,80348,32364],{"class":149},[143,80350,80351],{"class":145,"line":33627},[143,80352,78771],{"class":149},[143,80354,80355],{"class":145,"line":33633},[143,80356,80264],{"class":149},[143,80358,80359,80361,80364],{"class":145,"line":33639},[143,80360,80269],{"class":149},[143,80362,80363],{"class":163},"'4001009'",[143,80365,32364],{"class":149},[143,80367,80368,80370,80373],{"class":145,"line":33645},[143,80369,80279],{"class":149},[143,80371,80372],{"class":163},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[143,80374,32364],{"class":149},[143,80376,80377,80379,80382],{"class":145,"line":33651},[143,80378,80289],{"class":149},[143,80380,80381],{"class":163},"'109.00'",[143,80383,32364],{"class":149},[143,80385,80386,80388,80391],{"class":145,"line":33671},[143,80387,80299],{"class":149},[143,80389,80390],{"class":163},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[143,80392,32364],{"class":149},[143,80394,80395],{"class":145,"line":33677},[143,80396,78771],{"class":149},[143,80398,80399],{"class":145,"line":33693},[143,80400,80264],{"class":149},[143,80402,80403,80405,80408],{"class":145,"line":33699},[143,80404,80269],{"class":149},[143,80406,80407],{"class":163},"'4001874'",[143,80409,32364],{"class":149},[143,80411,80412,80414,80417],{"class":145,"line":33713},[143,80413,80279],{"class":149},[143,80415,80416],{"class":163},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[143,80418,32364],{"class":149},[143,80420,80421,80423,80426],{"class":145,"line":33719},[143,80422,80289],{"class":149},[143,80424,80425],{"class":163},"'488.00'",[143,80427,32364],{"class":149},[143,80429,80430,80432,80435],{"class":145,"line":33734},[143,80431,80299],{"class":149},[143,80433,80434],{"class":163},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[143,80436,32364],{"class":149},[143,80438,80439],{"class":145,"line":33740},[143,80440,78771],{"class":149},[143,80442,80443],{"class":145,"line":33749},[143,80444,80264],{"class":149},[143,80446,80447,80449,80452],{"class":145,"line":33755},[143,80448,80269],{"class":149},[143,80450,80451],{"class":163},"'4001649'",[143,80453,32364],{"class":149},[143,80455,80456,80458,80461],{"class":145,"line":33764},[143,80457,80279],{"class":149},[143,80459,80460],{"class":163},"'大师监制龙泉青瓷茶叶罐'",[143,80462,32364],{"class":149},[143,80464,80465,80467,80470],{"class":145,"line":33770},[143,80466,80289],{"class":149},[143,80468,80469],{"class":163},"'139.00'",[143,80471,32364],{"class":149},[143,80473,80474,80476,80479],{"class":145,"line":33776},[143,80475,80299],{"class":149},[143,80477,80478],{"class":163},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[143,80480,32364],{"class":149},[143,80482,80483],{"class":145,"line":33785},[143,80484,78771],{"class":149},[143,80486,80487],{"class":145,"line":33791},[143,80488,80264],{"class":149},[143,80490,80491,80493,80496],{"class":145,"line":33802},[143,80492,80269],{"class":149},[143,80494,80495],{"class":163},"'3997185'",[143,80497,32364],{"class":149},[143,80499,80500,80502,80505],{"class":145,"line":33808},[143,80501,80279],{"class":149},[143,80503,80504],{"class":163},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[143,80506,32364],{"class":149},[143,80508,80509,80511,80514],{"class":145,"line":33827},[143,80510,80289],{"class":149},[143,80512,80513],{"class":163},"'108.00'",[143,80515,32364],{"class":149},[143,80517,80518,80520,80523],{"class":145,"line":33833},[143,80519,80299],{"class":149},[143,80521,80522],{"class":163},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[143,80524,32364],{"class":149},[143,80526,80527],{"class":145,"line":33844},[143,80528,78771],{"class":149},[143,80530,80531],{"class":145,"line":33850},[143,80532,80264],{"class":149},[143,80534,80535,80537,80540],{"class":145,"line":33870},[143,80536,80269],{"class":149},[143,80538,80539],{"class":163},"'3997403'",[143,80541,32364],{"class":149},[143,80543,80544,80546,80549],{"class":145,"line":33886},[143,80545,80279],{"class":149},[143,80547,80548],{"class":163},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[143,80550,32364],{"class":149},[143,80552,80553,80555,80558],{"class":145,"line":33892},[143,80554,80289],{"class":149},[143,80556,80557],{"class":163},"'100.00'",[143,80559,32364],{"class":149},[143,80561,80562,80564,80567],{"class":145,"line":33906},[143,80563,80299],{"class":149},[143,80565,80566],{"class":163},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[143,80568,32364],{"class":149},[143,80570,80571],{"class":145,"line":33912},[143,80572,78771],{"class":149},[143,80574,80575],{"class":145,"line":33918},[143,80576,80264],{"class":149},[143,80578,80579,80581,80584],{"class":145,"line":33929},[143,80580,80269],{"class":149},[143,80582,80583],{"class":163},"'3998274'",[143,80585,32364],{"class":149},[143,80587,80588,80590,80593],{"class":145,"line":33935},[143,80589,80279],{"class":149},[143,80591,80592],{"class":163},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[143,80594,32364],{"class":149},[143,80596,80597,80599,80601],{"class":145,"line":33941},[143,80598,80289],{"class":149},[143,80600,80469],{"class":163},[143,80602,32364],{"class":149},[143,80604,80605,80607,80610],{"class":145,"line":33951},[143,80606,80299],{"class":149},[143,80608,80609],{"class":163},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[143,80611,32364],{"class":149},[143,80613,80614],{"class":145,"line":33957},[143,80615,78771],{"class":149},[143,80617,80618],{"class":145,"line":33968},[143,80619,53996],{"class":149},[143,80621,80622],{"class":145,"line":33974},[143,80623,3300],{"emptyLinePlaceholder":976},[143,80625,80626],{"class":145,"line":33984},[143,80627,80628],{"class":266},"    \u002F\u002F 1.渲染函数\n",[143,80630,80631,80633,80635,80637,80639],{"class":145,"line":33989},[143,80632,70965],{"class":755},[143,80634,70968],{"class":156},[143,80636,1049],{"class":149},[143,80638,4780],{"class":6116},[143,80640,13342],{"class":149},[143,80642,80643],{"class":145,"line":33995},[143,80644,80645],{"class":266},"      \u002F\u002F 声明空字符串\n",[143,80647,80648,80651,80654,80656],{"class":145,"line":34044},[143,80649,80650],{"class":755},"      let",[143,80652,80653],{"class":149}," str ",[143,80655,160],{"class":755},[143,80657,70985],{"class":163},[143,80659,80660],{"class":145,"line":34091},[143,80661,70990],{"class":266},[143,80663,80664,80666,80669,80671,80674,80677],{"class":145,"line":34096},[143,80665,58890],{"class":149},[143,80667,80668],{"class":156},"forEach",[143,80670,1049],{"class":149},[143,80672,80673],{"class":6116},"item",[143,80675,80676],{"class":755}," =>",[143,80678,275],{"class":149},[143,80680,80681,80683,80686,80689,80691,80694,80696,80699,80702,80704],{"class":145,"line":34102},[143,80682,62153],{"class":755},[143,80684,80685],{"class":149}," { ",[143,80687,80688],{"class":280},"name",[143,80690,13335],{"class":149},[143,80692,80693],{"class":280},"price",[143,80695,13335],{"class":149},[143,80697,80698],{"class":280},"picture",[143,80700,80701],{"class":149}," } ",[143,80703,160],{"class":755},[143,80705,80706],{"class":149}," item\n",[143,80708,80709,80712,80714],{"class":145,"line":34121},[143,80710,80711],{"class":149},"        str ",[143,80713,10377],{"class":755},[143,80715,71049],{"class":163},[143,80717,80718],{"class":145,"line":34127},[143,80719,80720],{"class":163},"          \u003Cdiv class=\"item\">\n",[143,80722,80723,80726,80728],{"class":145,"line":34147},[143,80724,80725],{"class":163},"            \u003Cimg src=\"${",[143,80727,80698],{"class":149},[143,80729,80730],{"class":163},"}\" alt=\"\">\n",[143,80732,80733,80736,80738],{"class":145,"line":34153},[143,80734,80735],{"class":163},"            \u003Cp class=\"name\">${",[143,80737,80688],{"class":149},[143,80739,80740],{"class":163},"}\u003C\u002Fp>\n",[143,80742,80743,80746,80748],{"class":145,"line":34159},[143,80744,80745],{"class":163},"            \u003Cp class=\"price\">${",[143,80747,80693],{"class":149},[143,80749,80740],{"class":163},[143,80751,80752],{"class":145,"line":34169},[143,80753,80754],{"class":163},"          \u003C\u002Fdiv>\n",[143,80756,80757],{"class":145,"line":34174},[143,80758,80759],{"class":163},"        `\n",[143,80761,80762],{"class":145,"line":34180},[143,80763,65697],{"class":149},[143,80765,80766],{"class":145,"line":34196},[143,80767,80768],{"class":266},"      \u002F\u002F 追加给List\n",[143,80770,80771,80773,80775,80777,80780,80782,80784],{"class":145,"line":34241},[143,80772,56654],{"class":149},[143,80774,55284],{"class":156},[143,80776,1049],{"class":149},[143,80778,80779],{"class":163},"'.list'",[143,80781,75128],{"class":149},[143,80783,160],{"class":755},[143,80785,74864],{"class":149},[143,80787,80788],{"class":145,"line":34247},[143,80789,3087],{"class":149},[143,80791,80792],{"class":145,"line":34253},[143,80793,80794],{"class":266},"    \u002F\u002F 页面一打开就需要渲染\n",[143,80796,80797,80800],{"class":145,"line":34259},[143,80798,80799],{"class":156},"    render",[143,80801,80802],{"class":149},"(goodsList)\n",[143,80804,80805],{"class":145,"line":34270},[143,80806,80807],{"class":266},"    \u002F\u002F 2.过滤筛选\n",[143,80809,80810,80812,80814,80816,80819,80821,80823,80825,80827,80829,80831,80833],{"class":145,"line":34276},[143,80811,53294],{"class":149},[143,80813,55284],{"class":156},[143,80815,1049],{"class":149},[143,80817,80818],{"class":163},"'.filter'",[143,80820,31724],{"class":149},[143,80822,58696],{"class":156},[143,80824,1049],{"class":149},[143,80826,58701],{"class":163},[143,80828,13335],{"class":149},[143,80830,1119],{"class":6116},[143,80832,80676],{"class":755},[143,80834,275],{"class":149},[143,80836,80837],{"class":145,"line":34282},[143,80838,80839],{"class":266},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[143,80841,80842,80844,80846,80849,80851,80853,80855,80857],{"class":145,"line":34288},[143,80843,59111],{"class":755},[143,80845,80685],{"class":149},[143,80847,80848],{"class":280},"tagName",[143,80850,13335],{"class":149},[143,80852,32435],{"class":280},[143,80854,80701],{"class":149},[143,80856,160],{"class":755},[143,80858,80859],{"class":149}," e.target\n",[143,80861,80862],{"class":145,"line":34306},[143,80863,80864],{"class":266},"      \u002F\u002F 判断\n",[143,80866,80867,80869,80871,80873,80875],{"class":145,"line":34320},[143,80868,55365],{"class":755},[143,80870,67916],{"class":149},[143,80872,55371],{"class":755},[143,80874,69138],{"class":163},[143,80876,13342],{"class":149},[143,80878,80879],{"class":145,"line":34329},[143,80880,80881],{"class":266},"        \u002F\u002F console.log(11)\n",[143,80883,80884],{"class":145,"line":34338},[143,80885,80886],{"class":266},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[143,80888,80889],{"class":145,"line":34347},[143,80890,80891],{"class":266},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[143,80893,80894,80896,80898,80900],{"class":145,"line":34356},[143,80895,52718],{"class":755},[143,80897,52721],{"class":149},[143,80899,160],{"class":755},[143,80901,80902],{"class":149}," goodsList\n",[143,80904,80905,80907,80910,80912,80915],{"class":145,"line":34362},[143,80906,3397],{"class":755},[143,80908,80909],{"class":149}," (dataset.index ",[143,80911,55371],{"class":755},[143,80913,80914],{"class":163}," '1'",[143,80916,13342],{"class":149},[143,80918,80919,80922,80924,80927,80930,80932,80934,80936,80939,80941,80943,80946,80948,80950,80952],{"class":145,"line":34368},[143,80920,80921],{"class":149},"          arr ",[143,80923,160],{"class":755},[143,80925,80926],{"class":149}," goodsList.",[143,80928,80929],{"class":156},"filter",[143,80931,1049],{"class":149},[143,80933,80673],{"class":6116},[143,80935,80676],{"class":755},[143,80937,80938],{"class":149}," item.price ",[143,80940,2611],{"class":755},[143,80942,4993],{"class":280},[143,80944,80945],{"class":755}," &&",[143,80947,80938],{"class":149},[143,80949,2490],{"class":755},[143,80951,6654],{"class":280},[143,80953,1055],{"class":149},[143,80955,80956,80959,80961,80963,80965,80967,80970],{"class":145,"line":34376},[143,80957,80958],{"class":149},"        } ",[143,80960,2602],{"class":755},[143,80962,2605],{"class":755},[143,80964,80909],{"class":149},[143,80966,55371],{"class":755},[143,80968,80969],{"class":163}," '2'",[143,80971,13342],{"class":149},[143,80973,80974,80976,80978,80980,80982,80984,80986,80988,80990,80992,80994,80996,80998,81000,81003],{"class":145,"line":34381},[143,80975,80921],{"class":149},[143,80977,160],{"class":755},[143,80979,80926],{"class":149},[143,80981,80929],{"class":156},[143,80983,1049],{"class":149},[143,80985,80673],{"class":6116},[143,80987,80676],{"class":755},[143,80989,80938],{"class":149},[143,80991,2611],{"class":755},[143,80993,6654],{"class":280},[143,80995,80945],{"class":755},[143,80997,80938],{"class":149},[143,80999,2490],{"class":755},[143,81001,81002],{"class":280}," 300",[143,81004,1055],{"class":149},[143,81006,81007,81009,81011,81013,81015,81017,81020],{"class":145,"line":34387},[143,81008,80958],{"class":149},[143,81010,2602],{"class":755},[143,81012,2605],{"class":755},[143,81014,80909],{"class":149},[143,81016,55371],{"class":755},[143,81018,81019],{"class":163}," '3'",[143,81021,13342],{"class":149},[143,81023,81024,81026,81028,81030,81032,81034,81036,81038,81040,81042,81044],{"class":145,"line":34398},[143,81025,80921],{"class":149},[143,81027,160],{"class":755},[143,81029,80926],{"class":149},[143,81031,80929],{"class":156},[143,81033,1049],{"class":149},[143,81035,80673],{"class":6116},[143,81037,80676],{"class":755},[143,81039,80938],{"class":149},[143,81041,2611],{"class":755},[143,81043,81002],{"class":280},[143,81045,1055],{"class":149},[143,81047,81048],{"class":145,"line":34404},[143,81049,3429],{"class":149},[143,81051,81052],{"class":145,"line":34424},[143,81053,81054],{"class":266},"        \u002F\u002F 渲染函数\n",[143,81056,81057,81059],{"class":145,"line":34430},[143,81058,71289],{"class":156},[143,81060,53299],{"class":149},[143,81062,81063],{"class":145,"line":34436},[143,81064,53285],{"class":149},[143,81066,81067],{"class":145,"line":34442},[143,81068,3300],{"emptyLinePlaceholder":976},[143,81070,81071],{"class":145,"line":34459},[143,81072,34359],{"class":149},[143,81074,81075,81077,81079],{"class":145,"line":34465},[143,81076,53304],{"class":149},[143,81078,52701],{"class":153},[143,81080,183],{"class":149},[143,81082,81083,81085,81087],{"class":145,"line":34471},[143,81084,730],{"class":149},[143,81086,52688],{"class":153},[143,81088,183],{"class":149},[143,81090,81091],{"class":145,"line":34477},[143,81092,3300],{"emptyLinePlaceholder":976},[143,81094,81095,81097,81099],{"class":145,"line":34483},[143,81096,730],{"class":149},[143,81098,51533],{"class":153},[143,81100,183],{"class":149},[14,81102,81104],{"id":81103},"_410-深入了解对象","4.10 深入了解对象",[58,81106,81108],{"id":81107},"_4101-创建对象","4.10.1 创建对象",[63,81110,81111],{},[29,81112],{"alt":138,"src":81113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[63,81115,81116],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[58,81118,81120],{"id":81119},"_4102-构造函数","4.10.2 构造函数",[63,81122,81123,81126],{},[25,81124,81125],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[63,81128,81129,81132],{},[25,81130,81131],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[133,81134,81136],{"className":51531,"code":81135,"language":51533,"meta":138,"style":138},"\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",[140,81137,81138,81146,81151,81172,81185,81197,81209,81213,81218,81245,81250,81277],{"__ignoreMap":138},[143,81139,81140,81142,81144],{"class":145,"line":146},[143,81141,150],{"class":149},[143,81143,52701],{"class":153},[143,81145,183],{"class":149},[143,81147,81148],{"class":145,"line":35},[143,81149,81150],{"class":266},"\u002F\u002F例：\n",[143,81152,81153,81155,81158,81160,81162,81164,81166,81168,81170],{"class":145,"line":46},[143,81154,55334],{"class":755},[143,81156,81157],{"class":156}," Pig",[143,81159,1049],{"class":149},[143,81161,80688],{"class":6116},[143,81163,1419],{"class":149},[143,81165,71102],{"class":6116},[143,81167,1419],{"class":149},[143,81169,71119],{"class":6116},[143,81171,13342],{"class":149},[143,81173,81174,81177,81180,81182],{"class":145,"line":293},[143,81175,81176],{"class":280},"    this",[143,81178,81179],{"class":149},".name",[143,81181,160],{"class":755},[143,81183,81184],{"class":149},"name\n",[143,81186,81187,81189,81192,81194],{"class":145,"line":306},[143,81188,81176],{"class":280},[143,81190,81191],{"class":149},".age",[143,81193,160],{"class":755},[143,81195,81196],{"class":149},"age\n",[143,81198,81199,81201,81204,81206],{"class":145,"line":319},[143,81200,81176],{"class":280},[143,81202,81203],{"class":149},".gender",[143,81205,160],{"class":755},[143,81207,81208],{"class":149},"gender    \n",[143,81210,81211],{"class":145,"line":332},[143,81212,348],{"class":149},[143,81214,81215],{"class":145,"line":345},[143,81216,81217],{"class":266},"\u002F\u002F创建佩奇对象\n",[143,81219,81220,81222,81225,81227,81229,81231,81234,81236,81238,81240,81243],{"class":145,"line":701},[143,81221,7692],{"class":755},[143,81223,81224],{"class":280}," Peppa",[143,81226,12617],{"class":755},[143,81228,81157],{"class":156},[143,81230,1049],{"class":149},[143,81232,81233],{"class":163},"'佩奇'",[143,81235,1419],{"class":149},[143,81237,1385],{"class":280},[143,81239,1419],{"class":149},[143,81241,81242],{"class":163},"'女'",[143,81244,1055],{"class":149},[143,81246,81247],{"class":145,"line":707},[143,81248,81249],{"class":266},"\u002F\u002F创建乔治对象\n",[143,81251,81252,81254,81257,81259,81261,81263,81266,81268,81270,81272,81275],{"class":145,"line":727},[143,81253,7692],{"class":755},[143,81255,81256],{"class":280}," George",[143,81258,12617],{"class":755},[143,81260,81157],{"class":156},[143,81262,1049],{"class":149},[143,81264,81265],{"class":163},"'乔治'",[143,81267,1419],{"class":149},[143,81269,1116],{"class":280},[143,81271,1419],{"class":149},[143,81273,81274],{"class":163},"'男'",[143,81276,1055],{"class":149},[143,81278,81279,81281,81283],{"class":145,"line":2518},[143,81280,730],{"class":149},[143,81282,52701],{"class":153},[143,81284,183],{"class":149},[63,81286,81287],{},[29,81288],{"alt":138,"src":81289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[63,81291,81292],{},[29,81293],{"alt":138,"src":81294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[63,81296,81297],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[63,81299,81300],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[63,81302,81303],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[63,81305,81306],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[63,81308,81309],{},"这里用等号是因为：对象.属性=值",[63,81311,81312],{},"①利用对象字面量创建对象",[63,81314,81315],{},"const o={",[63,81317,81318],{},"name:'pink'",[63,81320,81321],{},"} ②利用new Object创建对象",[63,81323,81324],{},"const o=new Object({name:'pink'})",[63,81326,81327],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[63,81329,81330],{},"构造函数创建对象的执行过程：",[63,81332,81333],{},[29,81334],{"alt":138,"src":81335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[58,81337,81339],{"id":81338},"_4103-实例成员","4.10.3 实例成员",[63,81341,81342],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[19,81344,81345,81348,81351],{},[22,81346,81347],{},"实例对象的属性和方法即为实例成员",[22,81349,81350],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[22,81352,81353],{},"构造函数创建的实例对象彼此独立互不影响",[58,81355,81357],{"id":81356},"_4104-静态成员","4.10.4 静态成员",[63,81359,81360],{},[29,81361],{"alt":138,"src":81362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[63,81364,81365],{},"静态成员有Date.now() Math.PI Math.random()",[63,81367,81368],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[63,81370,81371],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[63,81373,81374],{},"function Pig(name) n {",[63,81376,81377],{},"this.name=name",[63,81379,366],{},[63,81381,81382],{},"Pig.eyes=2",[63,81384,81385],{},"Pig.sayHai=function () { console.log(this) }",[63,81387,81388],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[63,81390,81391],{},"console.log(Pig.eyes) \u002F\u002F2",[63,81393,12232],{},[19,81395,81396,81399,81402,81405,81408],{},[22,81397,81398],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[22,81400,81401],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[22,81403,81404],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[22,81406,81407],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[22,81409,81410],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[63,81412,81413],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[58,81415,81417],{"id":81416},"_4105-内置构造函数","4.10.5 内置构造函数",[63,81419,81420],{},"内置构造函数包含：",[63,81422,81423],{},[29,81424],{"alt":138,"src":81425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[63,81427,81428],{},[29,81429],{"alt":138,"src":81430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[63,81432,81433],{},"这些基本数据类型，js对他们进行了包装",[52701,81435,81436],{},"\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",[22896,81438,81440],{"id":81439},"_41051-object","4.10.5.1 Object",[63,81442,81443],{},"Object 是内置的构造函数，用于创建普通对象",[63,81445,81446],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[133,81448,81450],{"className":51531,"code":81449,"language":51533,"meta":138,"style":138},"const user=new Object({name:'小明',age:15})\n",[140,81451,81452],{"__ignoreMap":138},[143,81453,81454],{"class":145,"line":146},[143,81455,81449],{"class":149},[63,81457,81458],{},"三个常用的静态方法：",[23808,81460,81462],{"id":81461},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[63,81464,81465],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[63,81467,81468],{},[29,81469],{"alt":138,"src":81470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[63,81472,81473],{},[29,81474],{"alt":138,"src":81475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[133,81477,81479],{"className":53954,"code":81478,"language":53956,"meta":138,"style":138},"\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",[140,81480,81481,81489,81497,81502,81507,81512,81517,81522,81527,81535],{"__ignoreMap":138},[143,81482,81483,81485,81487],{"class":145,"line":146},[143,81484,150],{"class":149},[143,81486,52688],{"class":153},[143,81488,183],{"class":149},[143,81490,81491,81493,81495],{"class":145,"line":35},[143,81492,634],{"class":149},[143,81494,52701],{"class":153},[143,81496,183],{"class":149},[143,81498,81499],{"class":145,"line":46},[143,81500,81501],{"class":149},"    const o = { name: 'pink', age: 6 }\n",[143,81503,81504],{"class":145,"line":293},[143,81505,81506],{"class":149},"    \u002F\u002F 获得所有属性名\n",[143,81508,81509],{"class":145,"line":306},[143,81510,81511],{"class":149},"    const arr = Object.keys(o)\n",[143,81513,81514],{"class":145,"line":319},[143,81515,81516],{"class":149},"    console.log(arr)\n",[143,81518,81519],{"class":145,"line":332},[143,81520,81521],{"class":149},"    \u002F\u002F 获得所有属性值\n",[143,81523,81524],{"class":145,"line":345},[143,81525,81526],{"class":149},"    console.log(Object.values(o))\n",[143,81528,81529,81531,81533],{"class":145,"line":701},[143,81530,53304],{"class":149},[143,81532,52701],{"class":153},[143,81534,183],{"class":149},[143,81536,81537,81539,81541],{"class":145,"line":707},[143,81538,730],{"class":149},[143,81540,52688],{"class":153},[143,81542,183],{"class":149},[23808,81544,81546],{"id":81545},"_410512-object-assign","4.10.5.1.2 Object. assign",[63,81548,81549],{},"Object.assign(oo,o)",[63,81551,81552],{},"后的东西添加给前 是追加",[63,81554,81555],{},[29,81556],{"alt":138,"src":81557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[63,81559,81560],{},[29,81561],{"alt":138,"src":81562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[133,81564,81566],{"className":53954,"code":81565,"language":53956,"meta":138,"style":138},"\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",[140,81567,81568,81576,81584,81588,81592,81596,81600,81604,81608,81613,81618,81623,81628,81633,81641],{"__ignoreMap":138},[143,81569,81570,81572,81574],{"class":145,"line":146},[143,81571,150],{"class":149},[143,81573,52688],{"class":153},[143,81575,183],{"class":149},[143,81577,81578,81580,81582],{"class":145,"line":35},[143,81579,634],{"class":149},[143,81581,52701],{"class":153},[143,81583,183],{"class":149},[143,81585,81586],{"class":145,"line":46},[143,81587,81501],{"class":149},[143,81589,81590],{"class":145,"line":293},[143,81591,81506],{"class":149},[143,81593,81594],{"class":145,"line":306},[143,81595,81511],{"class":149},[143,81597,81598],{"class":145,"line":319},[143,81599,81516],{"class":149},[143,81601,81602],{"class":145,"line":332},[143,81603,81521],{"class":149},[143,81605,81606],{"class":145,"line":345},[143,81607,81526],{"class":149},[143,81609,81610],{"class":145,"line":701},[143,81611,81612],{"class":149},"    const oo = {}\n",[143,81614,81615],{"class":145,"line":707},[143,81616,81617],{"class":149},"    Object.assign(oo, o)\n",[143,81619,81620],{"class":145,"line":727},[143,81621,81622],{"class":149},"    console.log(oo)\n",[143,81624,81625],{"class":145,"line":2518},[143,81626,81627],{"class":149},"    Object.assign(o, { gender: '女' })\n",[143,81629,81630],{"class":145,"line":2524},[143,81631,81632],{"class":149},"    console.log(o)\n",[143,81634,81635,81637,81639],{"class":145,"line":2529},[143,81636,53304],{"class":149},[143,81638,52701],{"class":153},[143,81640,183],{"class":149},[143,81642,81643,81645,81647],{"class":145,"line":2543},[143,81644,730],{"class":149},[143,81646,52688],{"class":153},[143,81648,183],{"class":149},[63,81650,81651],{},[29,81652],{"alt":138,"src":81653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22896,81655,81657],{"id":81656},"_41052-array","4.10.5.2 Array",[63,81659,81660],{},"Array 是内置的构造函数，用于创建数组",[63,81662,81663],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[133,81665,81667],{"className":51531,"code":81666,"language":51533,"meta":138,"style":138},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[140,81668,81669,81674],{"__ignoreMap":138},[143,81670,81671],{"class":145,"line":146},[143,81672,81673],{"class":149},"const arr=new Array(3,5)\n",[143,81675,81676],{"class":145,"line":35},[143,81677,81678],{"class":149},"console.log(arr)  \u002F\u002F[3,5]\n",[63,81680,81681],{},"Array的实例方法，这个方法是实例成员",[63,81683,81684],{},[29,81685],{"alt":138,"src":81686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23808,81688,81690],{"id":81689},"_410521-reduce","4.10.5.2.1 reduce",[63,81692,81693],{},[29,81694],{"alt":138,"src":81695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[133,81697,81699],{"className":53954,"code":81698,"language":53956,"meta":138,"style":138},"\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",[140,81700,81701,81709,81717,81722,81727,81732,81737,81741,81746,81751,81756,81760,81765,81770,81774,81779,81784,81789,81797],{"__ignoreMap":138},[143,81702,81703,81705,81707],{"class":145,"line":146},[143,81704,150],{"class":149},[143,81706,52688],{"class":153},[143,81708,183],{"class":149},[143,81710,81711,81713,81715],{"class":145,"line":35},[143,81712,634],{"class":149},[143,81714,52701],{"class":153},[143,81716,183],{"class":149},[143,81718,81719],{"class":145,"line":46},[143,81720,81721],{"class":149},"    const arr = [1, 5, 8]\n",[143,81723,81724],{"class":145,"line":293},[143,81725,81726],{"class":149},"    \u002F\u002F 1.没有初始值\n",[143,81728,81729],{"class":145,"line":306},[143,81730,81731],{"class":149},"    const total = arr.reduce(function (prev, current) {\n",[143,81733,81734],{"class":145,"line":319},[143,81735,81736],{"class":149},"      return prev + current\n",[143,81738,81739],{"class":145,"line":332},[143,81740,34359],{"class":149},[143,81742,81743],{"class":145,"line":345},[143,81744,81745],{"class":149},"    console.log(total)   \u002F\u002F14\n",[143,81747,81748],{"class":145,"line":701},[143,81749,81750],{"class":149},"    \u002F\u002F 2.有初始值\n",[143,81752,81753],{"class":145,"line":707},[143,81754,81755],{"class":149},"    const total1 = arr.reduce(function (prev, current) {\n",[143,81757,81758],{"class":145,"line":727},[143,81759,81736],{"class":149},[143,81761,81762],{"class":145,"line":2518},[143,81763,81764],{"class":149},"    }, 10)\n",[143,81766,81767],{"class":145,"line":2524},[143,81768,81769],{"class":149},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[143,81771,81772],{"class":145,"line":2529},[143,81773,3300],{"emptyLinePlaceholder":976},[143,81775,81776],{"class":145,"line":2543},[143,81777,81778],{"class":149},"    \u002F\u002F 3.箭头函数写法\n",[143,81780,81781],{"class":145,"line":2548},[143,81782,81783],{"class":149},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[143,81785,81786],{"class":145,"line":2554},[143,81787,81788],{"class":149},"    console.log(total2)   \u002F\u002F24\n",[143,81790,81791,81793,81795],{"class":145,"line":2575},[143,81792,53304],{"class":149},[143,81794,52701],{"class":153},[143,81796,183],{"class":149},[143,81798,81799,81801,81803],{"class":145,"line":2580},[143,81800,730],{"class":149},[143,81802,52688],{"class":153},[143,81804,183],{"class":149},[63,81806,81807],{},"执行过程：",[19,81809,81810,81813,81816],{},[22,81811,81812],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[22,81814,81815],{},"每一次循环，把返回值给作为下一次循环的上一次值",[22,81817,81818],{},"如果有起始值，则起始值作为上一次值",[133,81820,81822],{"className":53954,"code":81821,"language":53956,"meta":138,"style":138},"\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",[140,81823,81824,81832,81840,81844,81848,81852,81856,81860,81864,81869,81874,81879,81884,81889,81893,81897,81901,81905,81909,81913,81918,81922,81927,81931,81936,81941,81945,81949,81953,81961],{"__ignoreMap":138},[143,81825,81826,81828,81830],{"class":145,"line":146},[143,81827,150],{"class":149},[143,81829,52688],{"class":153},[143,81831,183],{"class":149},[143,81833,81834,81836,81838],{"class":145,"line":35},[143,81835,634],{"class":149},[143,81837,52701],{"class":153},[143,81839,183],{"class":149},[143,81841,81842],{"class":145,"line":46},[143,81843,81721],{"class":149},[143,81845,81846],{"class":145,"line":293},[143,81847,81726],{"class":149},[143,81849,81850],{"class":145,"line":306},[143,81851,81731],{"class":149},[143,81853,81854],{"class":145,"line":319},[143,81855,81736],{"class":149},[143,81857,81858],{"class":145,"line":332},[143,81859,34359],{"class":149},[143,81861,81862],{"class":145,"line":345},[143,81863,81745],{"class":149},[143,81865,81866],{"class":145,"line":701},[143,81867,81868],{"class":149},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[143,81870,81871],{"class":145,"line":707},[143,81872,81873],{"class":149},"    \u002F\u002F     1              5                    6\n",[143,81875,81876],{"class":145,"line":727},[143,81877,81878],{"class":149},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[143,81880,81881],{"class":145,"line":2518},[143,81882,81883],{"class":149},"    \u002F\u002F     6              8                    14\n",[143,81885,81886],{"class":145,"line":2524},[143,81887,81888],{"class":149},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[143,81890,81891],{"class":145,"line":2529},[143,81892,81750],{"class":149},[143,81894,81895],{"class":145,"line":2543},[143,81896,81755],{"class":149},[143,81898,81899],{"class":145,"line":2548},[143,81900,81736],{"class":149},[143,81902,81903],{"class":145,"line":2554},[143,81904,81764],{"class":149},[143,81906,81907],{"class":145,"line":2575},[143,81908,81769],{"class":149},[143,81910,81911],{"class":145,"line":2580},[143,81912,81868],{"class":149},[143,81914,81915],{"class":145,"line":2594},[143,81916,81917],{"class":149},"    \u002F\u002F     10             1                     11\n",[143,81919,81920],{"class":145,"line":2599},[143,81921,81878],{"class":149},[143,81923,81924],{"class":145,"line":2628},[143,81925,81926],{"class":149},"    \u002F\u002F     11             5                    16\n",[143,81928,81929],{"class":145,"line":2633},[143,81930,81878],{"class":149},[143,81932,81933],{"class":145,"line":2650},[143,81934,81935],{"class":149},"    \u002F\u002F     16             8                    24\n",[143,81937,81938],{"class":145,"line":2655},[143,81939,81940],{"class":149},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[143,81942,81943],{"class":145,"line":2660},[143,81944,81778],{"class":149},[143,81946,81947],{"class":145,"line":2665},[143,81948,81783],{"class":149},[143,81950,81951],{"class":145,"line":2679},[143,81952,81788],{"class":149},[143,81954,81955,81957,81959],{"class":145,"line":2684},[143,81956,53304],{"class":149},[143,81958,52701],{"class":153},[143,81960,183],{"class":149},[143,81962,81963,81965,81967],{"class":145,"line":3477},[143,81964,730],{"class":149},[143,81966,52688],{"class":153},[143,81968,183],{"class":149},[23808,81970,81972],{"id":81971},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[63,81974,81975],{},[29,81976],{"alt":138,"src":81977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[133,81979,81981],{"className":53954,"code":81980,"language":53956,"meta":138,"style":138},"\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",[140,81982,81983,81991,81999,82004,82009,82014,82019,82023,82028,82033,82038,82043,82048,82053,82057,82062,82066,82071,82079],{"__ignoreMap":138},[143,81984,81985,81987,81989],{"class":145,"line":146},[143,81986,150],{"class":149},[143,81988,52688],{"class":153},[143,81990,183],{"class":149},[143,81992,81993,81995,81997],{"class":145,"line":35},[143,81994,634],{"class":149},[143,81996,52701],{"class":153},[143,81998,183],{"class":149},[143,82000,82001],{"class":145,"line":46},[143,82002,82003],{"class":149},"    const arr = [\n",[143,82005,82006],{"class":145,"line":293},[143,82007,82008],{"class":149},"      { name: '张三', salary: 10000 },\n",[143,82010,82011],{"class":145,"line":306},[143,82012,82013],{"class":149},"      { name: '李四', salary: 10000 },\n",[143,82015,82016],{"class":145,"line":319},[143,82017,82018],{"class":149},"      { name: '王五', salary: 10000 }\n",[143,82020,82021],{"class":145,"line":332},[143,82022,53996],{"class":149},[143,82024,82025],{"class":145,"line":345},[143,82026,82027],{"class":149},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[143,82029,82030],{"class":145,"line":701},[143,82031,82032],{"class":149},"    \u002F\u002F prev是累计值\n",[143,82034,82035],{"class":145,"line":707},[143,82036,82037],{"class":149},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[143,82039,82040],{"class":145,"line":727},[143,82041,82042],{"class":149},"    console.log(total)\n",[143,82044,82045],{"class":145,"line":2518},[143,82046,82047],{"class":149},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[143,82049,82050],{"class":145,"line":2524},[143,82051,82052],{"class":149},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[143,82054,82055],{"class":145,"line":2529},[143,82056,82047],{"class":149},[143,82058,82059],{"class":145,"line":2543},[143,82060,82061],{"class":149},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[143,82063,82064],{"class":145,"line":2548},[143,82065,82047],{"class":149},[143,82067,82068],{"class":145,"line":2554},[143,82069,82070],{"class":149},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[143,82072,82073,82075,82077],{"class":145,"line":2575},[143,82074,53304],{"class":149},[143,82076,52701],{"class":153},[143,82078,183],{"class":149},[143,82080,82081,82083,82085],{"class":145,"line":2580},[143,82082,730],{"class":149},[143,82084,52688],{"class":153},[143,82086,183],{"class":149},[23808,82088,82090],{"id":82089},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[63,82092,82093],{},[29,82094],{"alt":138,"src":82095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[63,82097,82098],{},[29,82099],{"alt":138,"src":82100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[19,82102,82103],{},[22,82104,82105],{},"find()",[63,82107,82108],{},"循环查找，找到第一个就ok",[63,82110,82111],{},[67,82112,82115],{"href":82113,"rel":82114},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[71],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[133,82117,82119],{"className":51531,"code":82118,"language":51533,"meta":138,"style":138},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[140,82120,82121,82126,82131],{"__ignoreMap":138},[143,82122,82123],{"class":145,"line":146},[143,82124,82125],{"class":149},"const array1 = [5, 12, 8, 130, 44]\n",[143,82127,82128],{"class":145,"line":35},[143,82129,82130],{"class":149},"const found = array1.find((element) => element > 10)\n",[143,82132,82133],{"class":145,"line":46},[143,82134,82135],{"class":149},"console.log(found)  \u002F\u002F12\n",[63,82137,82138,82140,82141,82146,82147,82150,82151,82153,82154,82159,82160,82162,82163,82165,82166,82168,82169],{},[140,82139,82105],{}," 方法是一个",[67,82142,82145],{"href":82143,"rel":82144},"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",[71],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[140,82148,82149],{},"callbackFn"," 函数，直到 ",[140,82152,82149],{}," 返回一个",[67,82155,82158],{"href":82156,"rel":82157},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[71],"真值","。然后 ",[140,82161,82105],{}," 返回该元素并停止迭代数组。如果 ",[140,82164,82149],{}," 从未返回真值，则 ",[140,82167,82105],{}," 返回 ",[140,82170,82171],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[133,82173,82175],{"className":53954,"code":82174,"language":53956,"meta":138,"style":138},"\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",[140,82176,82177,82185,82193,82198,82203,82208,82212,82217,82222,82226,82231,82236,82240,82244,82249,82254,82258,82262,82267,82272,82277,82282,82287,82291,82296,82301,82306,82311,82315,82320,82328],{"__ignoreMap":138},[143,82178,82179,82181,82183],{"class":145,"line":146},[143,82180,150],{"class":149},[143,82182,52688],{"class":153},[143,82184,183],{"class":149},[143,82186,82187,82189,82191],{"class":145,"line":35},[143,82188,634],{"class":149},[143,82190,52701],{"class":153},[143,82192,183],{"class":149},[143,82194,82195],{"class":145,"line":46},[143,82196,82197],{"class":149},"    const arr = ['red', 'blue', 'green']\n",[143,82199,82200],{"class":145,"line":293},[143,82201,82202],{"class":149},"    const found = arr.find(item => item === 'pink')\n",[143,82204,82205],{"class":145,"line":306},[143,82206,82207],{"class":149},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[143,82209,82210],{"class":145,"line":319},[143,82211,3300],{"emptyLinePlaceholder":976},[143,82213,82214],{"class":145,"line":332},[143,82215,82216],{"class":149},"    \u002F\u002F 使用场景，用于查找数据\n",[143,82218,82219],{"class":145,"line":345},[143,82220,82221],{"class":149},"    const arr1 = [\n",[143,82223,82224],{"class":145,"line":701},[143,82225,80264],{"class":149},[143,82227,82228],{"class":145,"line":707},[143,82229,82230],{"class":149},"        name: '小米',\n",[143,82232,82233],{"class":145,"line":727},[143,82234,82235],{"class":149},"        price: 1999\n",[143,82237,82238],{"class":145,"line":2518},[143,82239,78771],{"class":149},[143,82241,82242],{"class":145,"line":2524},[143,82243,80264],{"class":149},[143,82245,82246],{"class":145,"line":2529},[143,82247,82248],{"class":149},"        name: '华为',\n",[143,82250,82251],{"class":145,"line":2543},[143,82252,82253],{"class":149},"        price: 3999\n",[143,82255,82256],{"class":145,"line":2548},[143,82257,53285],{"class":149},[143,82259,82260],{"class":145,"line":2554},[143,82261,53996],{"class":149},[143,82263,82264],{"class":145,"line":2575},[143,82265,82266],{"class":149},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[143,82268,82269],{"class":145,"line":2580},[143,82270,82271],{"class":149},"    \u002F\u002F const found1 = arr1.find(item => {\n",[143,82273,82274],{"class":145,"line":2594},[143,82275,82276],{"class":149},"    \u002F\u002F   if (item.name === '小米') {\n",[143,82278,82279],{"class":145,"line":2599},[143,82280,82281],{"class":149},"    \u002F\u002F     return item\n",[143,82283,82284],{"class":145,"line":2628},[143,82285,82286],{"class":149},"    \u002F\u002F   }\n",[143,82288,82289],{"class":145,"line":2633},[143,82290,64172],{"class":149},[143,82292,82293],{"class":145,"line":2650},[143,82294,82295],{"class":149},"    \u002F\u002F 另一种写法\n",[143,82297,82298],{"class":145,"line":2655},[143,82299,82300],{"class":149},"    const found1 = arr1.find(item => {\n",[143,82302,82303],{"class":145,"line":2660},[143,82304,82305],{"class":149},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[143,82307,82308],{"class":145,"line":2665},[143,82309,82310],{"class":149},"      return item.name = '小米'\n",[143,82312,82313],{"class":145,"line":2679},[143,82314,34359],{"class":149},[143,82316,82317],{"class":145,"line":2684},[143,82318,82319],{"class":149},"    console.log(found1)\n",[143,82321,82322,82324,82326],{"class":145,"line":3477},[143,82323,53304],{"class":149},[143,82325,52701],{"class":153},[143,82327,183],{"class":149},[143,82329,82330,82332,82334],{"class":145,"line":3491},[143,82331,730],{"class":149},[143,82333,52688],{"class":153},[143,82335,183],{"class":149},[63,82337,82338],{},[29,82339],{"alt":138,"src":82340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[63,82342,82343],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[19,82345,82346],{"start":35},[22,82347,82348],{},"every()返回的是布尔值",[63,82350,82351],{},[67,82352,82355],{"href":82353,"rel":82354},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[71],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[63,82357,82358],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[63,82360,82361],{},"some是只有有一个就没问题",[63,82363,82364],{},"every是必须全是才行",[133,82366,82370],{"className":82367,"code":82368,"language":82369,"meta":138,"style":138},"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",[140,82371,82372,82388,82402,82406,82415],{"__ignoreMap":138},[143,82373,82374,82376,82379,82381,82383,82386],{"class":145,"line":146},[143,82375,55334],{"class":755},[143,82377,82378],{"class":149}," isBigEnough(element, ",[143,82380,74937],{"class":755},[143,82382,13335],{"class":149},[143,82384,82385],{"class":755},"array",[143,82387,13342],{"class":149},[143,82389,82390,82393,82396,82398,82400],{"class":145,"line":35},[143,82391,82392],{"class":755},"  return",[143,82394,82395],{"class":149}," element ",[143,82397,2611],{"class":755},[143,82399,2938],{"class":280},[143,82401,290],{"class":149},[143,82403,82404],{"class":145,"line":46},[143,82405,348],{"class":149},[143,82407,82408,82411,82413],{"class":145,"line":293},[143,82409,82410],{"class":149},"[12, 5, 8, 130, 44].every(isBigEnough); ",[143,82412,34227],{"class":755},[143,82414,55401],{"class":149},[143,82416,82417,82420,82422],{"class":145,"line":306},[143,82418,82419],{"class":149},"[12, 54, 18, 130, 44].every(isBigEnough); ",[143,82421,34227],{"class":755},[143,82423,58823],{"class":149},[133,82425,82427],{"className":53954,"code":82426,"language":53956,"meta":138,"style":138},"\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",[140,82428,82429,82437,82445,82450,82454,82459,82464,82472],{"__ignoreMap":138},[143,82430,82431,82433,82435],{"class":145,"line":146},[143,82432,150],{"class":149},[143,82434,52688],{"class":153},[143,82436,183],{"class":149},[143,82438,82439,82441,82443],{"class":145,"line":35},[143,82440,634],{"class":149},[143,82442,52701],{"class":153},[143,82444,183],{"class":149},[143,82446,82447],{"class":145,"line":46},[143,82448,82449],{"class":149},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[143,82451,82452],{"class":145,"line":293},[143,82453,79201],{"class":149},[143,82455,82456],{"class":145,"line":306},[143,82457,82458],{"class":149},"    const flag = arr.every(item => item >= 10)\n",[143,82460,82461],{"class":145,"line":319},[143,82462,82463],{"class":149},"    console.log(flag)    \u002F\u002Ftrue\n",[143,82465,82466,82468,82470],{"class":145,"line":332},[143,82467,53304],{"class":149},[143,82469,52701],{"class":153},[143,82471,183],{"class":149},[143,82473,82474,82476,82478],{"class":145,"line":345},[143,82475,730],{"class":149},[143,82477,52688],{"class":153},[143,82479,183],{"class":149},[133,82481,82483],{"className":53954,"code":82482,"language":53956,"meta":138,"style":138},"\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",[140,82484,82485,82493,82501,82505,82510,82515,82520,82528],{"__ignoreMap":138},[143,82486,82487,82489,82491],{"class":145,"line":146},[143,82488,150],{"class":149},[143,82490,52688],{"class":153},[143,82492,183],{"class":149},[143,82494,82495,82497,82499],{"class":145,"line":35},[143,82496,634],{"class":149},[143,82498,52701],{"class":153},[143,82500,183],{"class":149},[143,82502,82503],{"class":145,"line":46},[143,82504,82449],{"class":149},[143,82506,82507],{"class":145,"line":293},[143,82508,82509],{"class":149},"    const arr = [10, 0, 5]\n",[143,82511,82512],{"class":145,"line":306},[143,82513,82514],{"class":149},"    const flag = arr.some(item => item >= 10)\n",[143,82516,82517],{"class":145,"line":319},[143,82518,82519],{"class":149},"    console.log(flag)   \u002F\u002Ftrue\n",[143,82521,82522,82524,82526],{"class":145,"line":332},[143,82523,53304],{"class":149},[143,82525,52701],{"class":153},[143,82527,183],{"class":149},[143,82529,82530,82532,82534],{"class":145,"line":345},[143,82531,730],{"class":149},[143,82533,52688],{"class":153},[143,82535,183],{"class":149},[23808,82537,82539],{"id":82538},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[63,82541,82542],{},[29,82543],{"alt":138,"src":82544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[133,82546,82548],{"className":51531,"code":82547,"language":51533,"meta":138,"style":138},"\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",[140,82549,82550,82560,82574,82578,82586,82600,82620,82632,82640,82647,82659,82671,82683,82695,82705,82715,82719,82727,82735,82739,82747,82759,82767,82789,82794,82799,82832,82840,82848,82852],{"__ignoreMap":138},[143,82551,82552,82554,82556,82558],{"class":145,"line":146},[143,82553,52195],{"class":149},[143,82555,52198],{"class":153},[143,82557,52201],{"class":156},[143,82559,183],{"class":149},[143,82561,82562,82564,82566,82568,82570,82572],{"class":145,"line":35},[143,82563,150],{"class":149},[143,82565,51533],{"class":153},[143,82567,52212],{"class":156},[143,82569,160],{"class":149},[143,82571,52217],{"class":163},[143,82573,183],{"class":149},[143,82575,82576],{"class":145,"line":46},[143,82577,3300],{"emptyLinePlaceholder":976},[143,82579,82580,82582,82584],{"class":145,"line":293},[143,82581,150],{"class":149},[143,82583,52230],{"class":153},[143,82585,183],{"class":149},[143,82587,82588,82590,82592,82594,82596,82598],{"class":145,"line":306},[143,82589,634],{"class":149},[143,82591,52240],{"class":153},[143,82593,52243],{"class":156},[143,82595,160],{"class":149},[143,82597,52248],{"class":163},[143,82599,183],{"class":149},[143,82601,82602,82604,82606,82608,82610,82612,82614,82616,82618],{"class":145,"line":319},[143,82603,634],{"class":149},[143,82605,52240],{"class":153},[143,82607,15819],{"class":156},[143,82609,160],{"class":149},[143,82611,52287],{"class":163},[143,82613,52267],{"class":156},[143,82615,160],{"class":149},[143,82617,52294],{"class":163},[143,82619,183],{"class":149},[143,82621,82622,82624,82626,82628,82630],{"class":145,"line":332},[143,82623,634],{"class":149},[143,82625,52303],{"class":153},[143,82627,52306],{"class":149},[143,82629,52303],{"class":153},[143,82631,183],{"class":149},[143,82633,82634,82636,82638],{"class":145,"line":345},[143,82635,634],{"class":149},[143,82637,954],{"class":153},[143,82639,183],{"class":149},[143,82641,82642,82645],{"class":145,"line":701},[143,82643,82644],{"class":153},"    div",[143,82646,275],{"class":149},[143,82648,82649,82651,82653,82655,82657],{"class":145,"line":707},[143,82650,55656],{"class":280},[143,82652,284],{"class":149},[143,82654,2623],{"class":280},[143,82656,774],{"class":755},[143,82658,290],{"class":149},[143,82660,82661,82663,82665,82667,82669],{"class":145,"line":727},[143,82662,55670],{"class":280},[143,82664,284],{"class":149},[143,82666,1442],{"class":280},[143,82668,774],{"class":755},[143,82670,290],{"class":149},[143,82672,82673,82675,82677,82679,82681],{"class":145,"line":2518},[143,82674,58242],{"class":280},[143,82676,284],{"class":149},[143,82678,1442],{"class":280},[143,82680,774],{"class":755},[143,82682,290],{"class":149},[143,82684,82685,82687,82689,82691,82693],{"class":145,"line":2524},[143,82686,66015],{"class":280},[143,82688,284],{"class":149},[143,82690,1539],{"class":280},[143,82692,774],{"class":755},[143,82694,290],{"class":149},[143,82696,82697,82699,82701,82703],{"class":145,"line":2529},[143,82698,58169],{"class":280},[143,82700,284],{"class":149},[143,82702,327],{"class":280},[143,82704,290],{"class":149},[143,82706,82707,82709,82711,82713],{"class":145,"line":2543},[143,82708,55769],{"class":280},[143,82710,284],{"class":149},[143,82712,52535],{"class":280},[143,82714,290],{"class":149},[143,82716,82717],{"class":145,"line":2548},[143,82718,3087],{"class":149},[143,82720,82721,82723,82725],{"class":145,"line":2554},[143,82722,53304],{"class":149},[143,82724,954],{"class":153},[143,82726,183],{"class":149},[143,82728,82729,82731,82733],{"class":145,"line":2575},[143,82730,730],{"class":149},[143,82732,52230],{"class":153},[143,82734,183],{"class":149},[143,82736,82737],{"class":145,"line":2580},[143,82738,3300],{"emptyLinePlaceholder":976},[143,82740,82741,82743,82745],{"class":145,"line":2594},[143,82742,150],{"class":149},[143,82744,52688],{"class":153},[143,82746,183],{"class":149},[143,82748,82749,82751,82753,82755,82757],{"class":145,"line":2599},[143,82750,634],{"class":149},[143,82752,614],{"class":153},[143,82754,56197],{"class":149},[143,82756,614],{"class":153},[143,82758,183],{"class":149},[143,82760,82761,82763,82765],{"class":145,"line":2628},[143,82762,634],{"class":149},[143,82764,52701],{"class":153},[143,82766,183],{"class":149},[143,82768,82769,82771,82774,82776,82779,82782,82784,82787],{"class":145,"line":2633},[143,82770,12121],{"class":755},[143,82772,82773],{"class":280}," spec",[143,82775,14464],{"class":755},[143,82777,82778],{"class":149}," { size: ",[143,82780,82781],{"class":163},"'40cm*40cm'",[143,82783,56347],{"class":149},[143,82785,82786],{"class":163},"'黑色'",[143,82788,56487],{"class":149},[143,82790,82791],{"class":145,"line":2650},[143,82792,82793],{"class":266},"    \u002F\u002F const arr = Object.values(spec)\n",[143,82795,82796],{"class":145,"line":2655},[143,82797,82798],{"class":266},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[143,82800,82801,82803,82805,82807,82810,82812,82814,82817,82820,82823,82825,82827,82830],{"class":145,"line":2660},[143,82802,53294],{"class":149},[143,82804,55284],{"class":156},[143,82806,1049],{"class":149},[143,82808,82809],{"class":163},"'div'",[143,82811,75128],{"class":149},[143,82813,160],{"class":755},[143,82815,82816],{"class":149}," Object.",[143,82818,82819],{"class":156},"values",[143,82821,82822],{"class":149},"(spec).",[143,82824,75102],{"class":156},[143,82826,1049],{"class":149},[143,82828,82829],{"class":163},"'\u002F'",[143,82831,1055],{"class":149},[143,82833,82834,82836,82838],{"class":145,"line":2665},[143,82835,53304],{"class":149},[143,82837,52701],{"class":153},[143,82839,183],{"class":149},[143,82841,82842,82844,82846],{"class":145,"line":2679},[143,82843,730],{"class":149},[143,82845,52688],{"class":153},[143,82847,183],{"class":149},[143,82849,82850],{"class":145,"line":2684},[143,82851,3300],{"emptyLinePlaceholder":976},[143,82853,82854,82856,82858],{"class":145,"line":3477},[143,82855,730],{"class":149},[143,82857,51533],{"class":153},[143,82859,183],{"class":149},[63,82861,82862],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23808,82864,82866],{"id":82865},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[63,82868,82869],{},"静态方法，将伪数组转换为真数组",[63,82871,82872],{},[29,82873],{"alt":138,"src":82874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[133,82876,82878],{"className":53954,"code":82877,"language":53956,"meta":138,"style":138},"\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",[140,82879,82880,82888,82896,82908,82920,82932,82940,82948,82953,82958,82963,82968,82976],{"__ignoreMap":138},[143,82881,82882,82884,82886],{"class":145,"line":146},[143,82883,150],{"class":149},[143,82885,52688],{"class":153},[143,82887,183],{"class":149},[143,82889,82890,82892,82894],{"class":145,"line":35},[143,82891,634],{"class":149},[143,82893,232],{"class":153},[143,82895,183],{"class":149},[143,82897,82898,82900,82902,82904,82906],{"class":145,"line":46},[143,82899,52237],{"class":149},[143,82901,22],{"class":153},[143,82903,56197],{"class":149},[143,82905,22],{"class":153},[143,82907,183],{"class":149},[143,82909,82910,82912,82914,82916,82918],{"class":145,"line":293},[143,82911,52237],{"class":149},[143,82913,22],{"class":153},[143,82915,56197],{"class":149},[143,82917,22],{"class":153},[143,82919,183],{"class":149},[143,82921,82922,82924,82926,82928,82930],{"class":145,"line":306},[143,82923,52237],{"class":149},[143,82925,22],{"class":153},[143,82927,56197],{"class":149},[143,82929,22],{"class":153},[143,82931,183],{"class":149},[143,82933,82934,82936,82938],{"class":145,"line":319},[143,82935,53304],{"class":149},[143,82937,232],{"class":153},[143,82939,183],{"class":149},[143,82941,82942,82944,82946],{"class":145,"line":332},[143,82943,634],{"class":149},[143,82945,52701],{"class":153},[143,82947,183],{"class":149},[143,82949,82950],{"class":145,"line":345},[143,82951,82952],{"class":149},"    const lis = document.querySelectorAll('li')\n",[143,82954,82955],{"class":145,"line":701},[143,82956,82957],{"class":149},"    const liss = Array.from(lis)\n",[143,82959,82960],{"class":145,"line":707},[143,82961,82962],{"class":149},"    liss.pop()\n",[143,82964,82965],{"class":145,"line":727},[143,82966,82967],{"class":149},"    console.log(liss)\n",[143,82969,82970,82972,82974],{"class":145,"line":2518},[143,82971,53304],{"class":149},[143,82973,52701],{"class":153},[143,82975,183],{"class":149},[143,82977,82978,82980,82982],{"class":145,"line":2524},[143,82979,730],{"class":149},[143,82981,52688],{"class":153},[143,82983,183],{"class":149},[63,82985,82986],{},[29,82987],{"alt":138,"src":82988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22896,82990,82992],{"id":82991},"_41053-string","4.10.5.3 String",[63,82994,82995],{},[29,82996],{"alt":138,"src":82997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23808,82999,83001],{"id":83000},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[133,83003,83005],{"className":53954,"code":83004,"language":53956,"meta":138,"style":138},"\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",[140,83006,83007,83015,83023,83028,83033,83038,83042,83047,83052,83057,83065],{"__ignoreMap":138},[143,83008,83009,83011,83013],{"class":145,"line":146},[143,83010,150],{"class":149},[143,83012,52688],{"class":153},[143,83014,183],{"class":149},[143,83016,83017,83019,83021],{"class":145,"line":35},[143,83018,634],{"class":149},[143,83020,52701],{"class":153},[143,83022,183],{"class":149},[143,83024,83025],{"class":145,"line":46},[143,83026,83027],{"class":149},"    \u002F\u002F 把字符串转化为数组\n",[143,83029,83030],{"class":145,"line":293},[143,83031,83032],{"class":149},"    const str = 'pink,red'\n",[143,83034,83035],{"class":145,"line":306},[143,83036,83037],{"class":149},"    const arr = str.split(',')\n",[143,83039,83040],{"class":145,"line":319},[143,83041,81516],{"class":149},[143,83043,83044],{"class":145,"line":332},[143,83045,83046],{"class":149},"    const str1 = '2025-8-25'\n",[143,83048,83049],{"class":145,"line":345},[143,83050,83051],{"class":149},"    const arr1 = str1.split('-')\n",[143,83053,83054],{"class":145,"line":701},[143,83055,83056],{"class":149},"    console.log(arr1)\n",[143,83058,83059,83061,83063],{"class":145,"line":707},[143,83060,53304],{"class":149},[143,83062,52701],{"class":153},[143,83064,183],{"class":149},[143,83066,83067,83069,83071],{"class":145,"line":727},[143,83068,730],{"class":149},[143,83070,52688],{"class":153},[143,83072,183],{"class":149},[23808,83074,83076],{"id":83075},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[63,83078,6081],{},[63,83080,83081],{},"substring(indexStart)",[63,83083,83084],{},"substring(indexStart, indexEnd)",[232,83086,83087,83098,83110,83120],{},[22,83088,83089,83090,83093,83094,83097],{},"如果省略了 ",[140,83091,83092],{},"indexEnd","，则 ",[140,83095,83096],{},"substring()"," 提取字符直到字符串的末尾",[22,83099,83100,83101,83104,83105,83093,83107,83109],{},"如果 ",[140,83102,83103],{},"indexStart"," 等于 ",[140,83106,83092],{},[140,83108,83096],{}," 返回一个空字符串",[22,83111,83100,83112,83114,83115,83093,83117,83119],{},[140,83113,83103],{}," 大于 ",[140,83116,83092],{},[140,83118,83096],{}," 的效果就像交换了这两个参数一样",[22,83121,83122],{},"结束的索引号不包含想要截取的部分",[133,83124,83126],{"className":82367,"code":83125,"language":82369,"meta":138,"style":138},"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",[140,83127,83128,83140,83144,83178,83208,83212,83243,83247,83274,83304,83334,83338,83369],{"__ignoreMap":138},[143,83129,83130,83133,83135,83138],{"class":145,"line":146},[143,83131,83132],{"class":149},"const anyString ",[143,83134,160],{"class":755},[143,83136,83137],{"class":163}," \"Mozilla\"",[143,83139,290],{"class":149},[143,83141,83142],{"class":145,"line":35},[143,83143,3300],{"emptyLinePlaceholder":976},[143,83145,83146,83149,83151,83153,83155,83158,83160,83163,83165,83167,83169,83171,83173,83175],{"class":145,"line":46},[143,83147,83148],{"class":280},"console",[143,83150,1599],{"class":149},[143,83152,59130],{"class":280},[143,83154,1049],{"class":149},[143,83156,83157],{"class":280},"anyString",[143,83159,1599],{"class":149},[143,83161,83162],{"class":280},"substring",[143,83164,1049],{"class":149},[143,83166,1234],{"class":280},[143,83168,13335],{"class":149},[143,83170,771],{"class":280},[143,83172,76132],{"class":149},[143,83174,34227],{"class":755},[143,83176,83177],{"class":163}," 'M'\n",[143,83179,83180,83182,83184,83186,83188,83190,83192,83194,83196,83198,83200,83202,83204,83206],{"class":145,"line":293},[143,83181,83148],{"class":280},[143,83183,1599],{"class":149},[143,83185,59130],{"class":280},[143,83187,1049],{"class":149},[143,83189,83157],{"class":280},[143,83191,1599],{"class":149},[143,83193,83162],{"class":280},[143,83195,1049],{"class":149},[143,83197,771],{"class":280},[143,83199,13335],{"class":149},[143,83201,1234],{"class":280},[143,83203,76132],{"class":149},[143,83205,34227],{"class":755},[143,83207,83177],{"class":163},[143,83209,83210],{"class":145,"line":306},[143,83211,3300],{"emptyLinePlaceholder":976},[143,83213,83214,83216,83218,83220,83222,83224,83226,83228,83230,83232,83234,83236,83238,83240],{"class":145,"line":319},[143,83215,83148],{"class":280},[143,83217,1599],{"class":149},[143,83219,59130],{"class":280},[143,83221,1049],{"class":149},[143,83223,83157],{"class":280},[143,83225,1599],{"class":149},[143,83227,83162],{"class":280},[143,83229,1049],{"class":149},[143,83231,1234],{"class":280},[143,83233,13335],{"class":149},[143,83235,1385],{"class":280},[143,83237,76132],{"class":149},[143,83239,34227],{"class":755},[143,83241,83242],{"class":163}," 'Mozill'\n",[143,83244,83245],{"class":145,"line":332},[143,83246,3300],{"emptyLinePlaceholder":976},[143,83248,83249,83251,83253,83255,83257,83259,83261,83263,83265,83267,83269,83271],{"class":145,"line":345},[143,83250,83148],{"class":280},[143,83252,1599],{"class":149},[143,83254,59130],{"class":280},[143,83256,1049],{"class":149},[143,83258,83157],{"class":280},[143,83260,1599],{"class":149},[143,83262,83162],{"class":280},[143,83264,1049],{"class":149},[143,83266,1334],{"class":280},[143,83268,76132],{"class":149},[143,83270,34227],{"class":755},[143,83272,83273],{"class":163}," 'lla'\n",[143,83275,83276,83278,83280,83282,83284,83286,83288,83290,83292,83294,83296,83298,83300,83302],{"class":145,"line":701},[143,83277,83148],{"class":280},[143,83279,1599],{"class":149},[143,83281,59130],{"class":280},[143,83283,1049],{"class":149},[143,83285,83157],{"class":280},[143,83287,1599],{"class":149},[143,83289,83162],{"class":280},[143,83291,1049],{"class":149},[143,83293,1334],{"class":280},[143,83295,13335],{"class":149},[143,83297,1410],{"class":280},[143,83299,76188],{"class":149},[143,83301,34227],{"class":755},[143,83303,83273],{"class":163},[143,83305,83306,83308,83310,83312,83314,83316,83318,83320,83322,83324,83326,83328,83330,83332],{"class":145,"line":707},[143,83307,83148],{"class":280},[143,83309,1599],{"class":149},[143,83311,59130],{"class":280},[143,83313,1049],{"class":149},[143,83315,83157],{"class":280},[143,83317,1599],{"class":149},[143,83319,83162],{"class":280},[143,83321,1049],{"class":149},[143,83323,1410],{"class":280},[143,83325,13335],{"class":149},[143,83327,1334],{"class":280},[143,83329,76132],{"class":149},[143,83331,34227],{"class":755},[143,83333,83273],{"class":163},[143,83335,83336],{"class":145,"line":727},[143,83337,3300],{"emptyLinePlaceholder":976},[143,83339,83340,83342,83344,83346,83348,83350,83352,83354,83356,83358,83360,83362,83364,83366],{"class":145,"line":2518},[143,83341,83148],{"class":280},[143,83343,1599],{"class":149},[143,83345,59130],{"class":280},[143,83347,1049],{"class":149},[143,83349,83157],{"class":280},[143,83351,1599],{"class":149},[143,83353,83162],{"class":280},[143,83355,1049],{"class":149},[143,83357,1234],{"class":280},[143,83359,13335],{"class":149},[143,83361,1410],{"class":280},[143,83363,76132],{"class":149},[143,83365,34227],{"class":755},[143,83367,83368],{"class":163}," 'Mozilla'\n",[143,83370,83371,83373,83375,83377,83379,83381,83383,83385,83387,83389,83391,83393,83395,83397],{"class":145,"line":2524},[143,83372,83148],{"class":280},[143,83374,1599],{"class":149},[143,83376,59130],{"class":280},[143,83378,1049],{"class":149},[143,83380,83157],{"class":280},[143,83382,1599],{"class":149},[143,83384,83162],{"class":280},[143,83386,1049],{"class":149},[143,83388,1234],{"class":280},[143,83390,13335],{"class":149},[143,83392,1487],{"class":280},[143,83394,76132],{"class":149},[143,83396,34227],{"class":755},[143,83398,83368],{"class":163},[23808,83400,83402],{"id":83401},"_410533-startswith","4.10.5.3.3 startsWith",[63,83404,83405,83408,83409,83414,83415,83417,83418],{},[140,83406,83407],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[25,83410,83411],{},[140,83412,83413],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[140,83416,2266],{}," 或 ",[140,83419,66902],{},[133,83421,83423],{"className":78374,"code":83422,"language":78376,"meta":138,"style":138},"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",[140,83424,83425,83437,83456,83461,83481],{"__ignoreMap":138},[143,83426,83427,83429,83432,83434],{"class":145,"line":146},[143,83428,7692],{"class":755},[143,83430,83431],{"class":149}," str1 ",[143,83433,160],{"class":755},[143,83435,83436],{"class":163}," \"Saturday night plans\"\n",[143,83438,83439,83441,83443,83446,83449,83451,83454],{"class":145,"line":35},[143,83440,78411],{"class":149},[143,83442,59130],{"class":156},[143,83444,83445],{"class":149},"(str1.",[143,83447,83448],{"class":156},"startsWith",[143,83450,1049],{"class":149},[143,83452,83453],{"class":163},"\"Sat\"",[143,83455,31395],{"class":149},[143,83457,83458],{"class":145,"line":46},[143,83459,83460],{"class":266},"\u002F\u002F Expected output: true\n",[143,83462,83463,83465,83467,83469,83471,83473,83475,83477,83479],{"class":145,"line":293},[143,83464,78411],{"class":149},[143,83466,59130],{"class":156},[143,83468,83445],{"class":149},[143,83470,83448],{"class":156},[143,83472,1049],{"class":149},[143,83474,83453],{"class":163},[143,83476,13335],{"class":149},[143,83478,1116],{"class":280},[143,83480,31395],{"class":149},[143,83482,83483],{"class":145,"line":306},[143,83484,83485],{"class":266},"\u002F\u002F Expected output: false\n",[133,83487,83489],{"className":51531,"code":83488,"language":51533,"meta":138,"style":138},"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",[140,83490,83491,83496,83501,83505,83510,83515],{"__ignoreMap":138},[143,83492,83493],{"class":145,"line":146},[143,83494,83495],{"class":149},"startsWith(searchString)\n",[143,83497,83498],{"class":145,"line":35},[143,83499,83500],{"class":149},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[143,83502,83503],{"class":145,"line":46},[143,83504,3300],{"emptyLinePlaceholder":976},[143,83506,83507],{"class":145,"line":293},[143,83508,83509],{"class":149},"const str3 = 'pink老师上课中'\n",[143,83511,83512],{"class":145,"line":306},[143,83513,83514],{"class":149},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[143,83516,83517],{"class":145,"line":319},[143,83518,83519],{"class":149},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23808,83521,83523],{"id":83522},"_410534-includes","4.10.5.3.4 includes",[63,83525,83526],{},"includes(searchString) includes(searchString, position)",[19,83528,83529],{},[22,83530,83531],{},"searchString:",[63,83533,83534,83535,83537,83538,83543,83544,83549,83550,22398,83553,83556,83557,83560],{},"一个要在 ",[140,83536,2206],{}," 中查找的字符串。",[67,83539,83542],{"href":83540,"rel":83541},"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",[71],"不能是正则表达式","。所有非正则表达式的值都会被",[67,83545,83548],{"href":83546,"rel":83547},"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",[71],"强制转换为字符串","，因此如果该参数被省略或传入 ",[140,83551,83552],{},"undefined",[140,83554,83555],{},"includes()"," 方法会在字符串中搜索 ",[140,83558,83559],{},"\"undefined\"","，这通常不是你想要的",[19,83562,83563],{"start":35},[22,83564,83565,1900],{},[140,83566,83567],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[63,83569,83570,83571,83574,83575],{},"在字符串中开始搜索 ",[140,83572,83573],{},"searchString"," 的位置。默认值为 ",[140,83576,1234],{},[19,83578,83579],{"start":46},[22,83580,83581],{},"返回值：",[63,83583,83584,83585,83587,83588,83592,83593],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[140,83586,83573],{}," 为空字符串的情况），则返回 ",[25,83589,83590],{},[140,83591,2266],{}," ，否则返回 ",[25,83594,83595],{},[140,83596,66902],{},[19,83598,83599],{"start":293},[22,83600,83601],{},"异常：",[63,83603,83100,83604,497,83606,83610],{},[140,83605,83573],{},[67,83607,83609],{"href":83540,"rel":83608},[71],"是一个正则表达式","，则会抛出",[63,83612,83613],{},"只要是有就是true，不需要非得以谁开头结尾",[133,83615,83617],{"className":78374,"code":83616,"language":78376,"meta":138,"style":138},"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",[140,83618,83619,83630,83653,83672,83692,83714,83733],{"__ignoreMap":138},[143,83620,83621,83623,83625,83627],{"class":145,"line":146},[143,83622,7692],{"class":755},[143,83624,80653],{"class":149},[143,83626,160],{"class":755},[143,83628,83629],{"class":163}," \"To be, or not to be, that is the question.\"\n",[143,83631,83632,83634,83636,83639,83642,83644,83647,83650],{"class":145,"line":35},[143,83633,78411],{"class":149},[143,83635,59130],{"class":156},[143,83637,83638],{"class":149},"(str.",[143,83640,83641],{"class":156},"includes",[143,83643,1049],{"class":149},[143,83645,83646],{"class":163},"\"To be\"",[143,83648,83649],{"class":149},"))",[143,83651,83652],{"class":266},"  \u002F\u002F true\n",[143,83654,83655,83657,83659,83661,83663,83665,83668,83670],{"class":145,"line":46},[143,83656,78411],{"class":149},[143,83658,59130],{"class":156},[143,83660,83638],{"class":149},[143,83662,83641],{"class":156},[143,83664,1049],{"class":149},[143,83666,83667],{"class":163},"\"question\"",[143,83669,83649],{"class":149},[143,83671,83652],{"class":266},[143,83673,83674,83676,83678,83680,83682,83684,83687,83689],{"class":145,"line":293},[143,83675,78411],{"class":149},[143,83677,59130],{"class":156},[143,83679,83638],{"class":149},[143,83681,83641],{"class":156},[143,83683,1049],{"class":149},[143,83685,83686],{"class":163},"\"nonexistent\"",[143,83688,83649],{"class":149},[143,83690,83691],{"class":266},"  \u002F\u002F false\n",[143,83693,83694,83696,83698,83700,83702,83704,83706,83708,83710,83712],{"class":145,"line":306},[143,83695,78411],{"class":149},[143,83697,59130],{"class":156},[143,83699,83638],{"class":149},[143,83701,83641],{"class":156},[143,83703,1049],{"class":149},[143,83705,83646],{"class":163},[143,83707,13335],{"class":149},[143,83709,771],{"class":280},[143,83711,83649],{"class":149},[143,83713,83691],{"class":266},[143,83715,83716,83718,83720,83722,83724,83726,83729,83731],{"class":145,"line":319},[143,83717,78411],{"class":149},[143,83719,59130],{"class":156},[143,83721,83638],{"class":149},[143,83723,83641],{"class":156},[143,83725,1049],{"class":149},[143,83727,83728],{"class":163},"\"TO BE\"",[143,83730,83649],{"class":149},[143,83732,83691],{"class":266},[143,83734,83735,83737,83739,83741,83743,83745,83747,83749],{"class":145,"line":332},[143,83736,78411],{"class":149},[143,83738,59130],{"class":156},[143,83740,83638],{"class":149},[143,83742,83641],{"class":156},[143,83744,1049],{"class":149},[143,83746,8552],{"class":163},[143,83748,83649],{"class":149},[143,83750,83652],{"class":266},[23808,83752,83754],{"id":83753},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[133,83756,83758],{"className":53954,"code":83757,"language":53956,"meta":138,"style":138},"\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",[140,83759,83760,83768,83776,83781,83786,83791,83796,83801,83809],{"__ignoreMap":138},[143,83761,83762,83764,83766],{"class":145,"line":146},[143,83763,150],{"class":149},[143,83765,52688],{"class":153},[143,83767,183],{"class":149},[143,83769,83770,83772,83774],{"class":145,"line":35},[143,83771,634],{"class":149},[143,83773,52701],{"class":153},[143,83775,183],{"class":149},[143,83777,83778],{"class":145,"line":46},[143,83779,83780],{"class":149},"    const num = 10\n",[143,83782,83783],{"class":145,"line":293},[143,83784,83785],{"class":149},"    \u002F\u002F 强制转换\n",[143,83787,83788],{"class":145,"line":306},[143,83789,83790],{"class":149},"    console.log(String(num))\n",[143,83792,83793],{"class":145,"line":319},[143,83794,83795],{"class":149},"    \u002F\u002F toString()方法转换\n",[143,83797,83798],{"class":145,"line":332},[143,83799,83800],{"class":149},"    console.log(num.toString())\n",[143,83802,83803,83805,83807],{"class":145,"line":345},[143,83804,53304],{"class":149},[143,83806,52701],{"class":153},[143,83808,183],{"class":149},[143,83810,83811,83813,83815],{"class":145,"line":701},[143,83812,730],{"class":149},[143,83814,52688],{"class":153},[143,83816,183],{"class":149},[23808,83818,83820],{"id":83819},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[63,83822,83823],{},[29,83824],{"alt":138,"src":83825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[133,83827,83829],{"className":51531,"code":83828,"language":51533,"meta":138,"style":138},"\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",[140,83830,83831,83841,83855,83859,83867,83881,83901,83913,83921,83925,83933,83945,83953,83965,83970,83975,83980,84027,84043,84051,84059,84063],{"__ignoreMap":138},[143,83832,83833,83835,83837,83839],{"class":145,"line":146},[143,83834,52195],{"class":149},[143,83836,52198],{"class":153},[143,83838,52201],{"class":156},[143,83840,183],{"class":149},[143,83842,83843,83845,83847,83849,83851,83853],{"class":145,"line":35},[143,83844,150],{"class":149},[143,83846,51533],{"class":153},[143,83848,52212],{"class":156},[143,83850,160],{"class":149},[143,83852,52217],{"class":163},[143,83854,183],{"class":149},[143,83856,83857],{"class":145,"line":46},[143,83858,3300],{"emptyLinePlaceholder":976},[143,83860,83861,83863,83865],{"class":145,"line":293},[143,83862,150],{"class":149},[143,83864,52230],{"class":153},[143,83866,183],{"class":149},[143,83868,83869,83871,83873,83875,83877,83879],{"class":145,"line":306},[143,83870,634],{"class":149},[143,83872,52240],{"class":153},[143,83874,52243],{"class":156},[143,83876,160],{"class":149},[143,83878,52248],{"class":163},[143,83880,183],{"class":149},[143,83882,83883,83885,83887,83889,83891,83893,83895,83897,83899],{"class":145,"line":319},[143,83884,634],{"class":149},[143,83886,52240],{"class":153},[143,83888,15819],{"class":156},[143,83890,160],{"class":149},[143,83892,52287],{"class":163},[143,83894,52267],{"class":156},[143,83896,160],{"class":149},[143,83898,52294],{"class":163},[143,83900,183],{"class":149},[143,83902,83903,83905,83907,83909,83911],{"class":145,"line":332},[143,83904,634],{"class":149},[143,83906,52303],{"class":153},[143,83908,52306],{"class":149},[143,83910,52303],{"class":153},[143,83912,183],{"class":149},[143,83914,83915,83917,83919],{"class":145,"line":345},[143,83916,730],{"class":149},[143,83918,52230],{"class":153},[143,83920,183],{"class":149},[143,83922,83923],{"class":145,"line":701},[143,83924,3300],{"emptyLinePlaceholder":976},[143,83926,83927,83929,83931],{"class":145,"line":707},[143,83928,150],{"class":149},[143,83930,52688],{"class":153},[143,83932,183],{"class":149},[143,83934,83935,83937,83939,83941,83943],{"class":145,"line":727},[143,83936,634],{"class":149},[143,83938,614],{"class":153},[143,83940,56197],{"class":149},[143,83942,614],{"class":153},[143,83944,183],{"class":149},[143,83946,83947,83949,83951],{"class":145,"line":2518},[143,83948,634],{"class":149},[143,83950,52701],{"class":153},[143,83952,183],{"class":149},[143,83954,83955,83957,83960,83962],{"class":145,"line":2524},[143,83956,12121],{"class":755},[143,83958,83959],{"class":280}," gift",[143,83961,14464],{"class":755},[143,83963,83964],{"class":163}," '50g的茶叶，清洗球'\n",[143,83966,83967],{"class":145,"line":2529},[143,83968,83969],{"class":266},"    \u002F\u002F 1.把字符串拆分为数组\n",[143,83971,83972],{"class":145,"line":2543},[143,83973,83974],{"class":266},"    \u002F\u002F console.log(gift.split(','))\n",[143,83976,83977],{"class":145,"line":2548},[143,83978,83979],{"class":266},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[143,83981,83982,83984,83986,83988,83991,83994,83996,83999,84001,84003,84005,84007,84009,84012,84014,84017,84019,84021,84023,84025],{"class":145,"line":2554},[143,83983,12121],{"class":755},[143,83985,74798],{"class":280},[143,83987,14464],{"class":755},[143,83989,83990],{"class":149}," gift.",[143,83992,83993],{"class":156},"split",[143,83995,1049],{"class":149},[143,83997,83998],{"class":163},"'，'",[143,84000,31724],{"class":149},[143,84002,74923],{"class":156},[143,84004,1049],{"class":149},[143,84006,80673],{"class":6116},[143,84008,80676],{"class":755},[143,84010,84011],{"class":163}," `\u003Cspan>【赠品】${",[143,84013,80673],{"class":149},[143,84015,84016],{"class":163},"}\u003C\u002Fspan>\u003Cbr>`",[143,84018,31724],{"class":149},[143,84020,75102],{"class":156},[143,84022,1049],{"class":149},[143,84024,75107],{"class":163},[143,84026,1055],{"class":149},[143,84028,84029,84031,84033,84035,84037,84039,84041],{"class":145,"line":2575},[143,84030,53294],{"class":149},[143,84032,55284],{"class":156},[143,84034,1049],{"class":149},[143,84036,82809],{"class":163},[143,84038,75128],{"class":149},[143,84040,160],{"class":755},[143,84042,74864],{"class":149},[143,84044,84045,84047,84049],{"class":145,"line":2580},[143,84046,53304],{"class":149},[143,84048,52701],{"class":153},[143,84050,183],{"class":149},[143,84052,84053,84055,84057],{"class":145,"line":2594},[143,84054,730],{"class":149},[143,84056,52688],{"class":153},[143,84058,183],{"class":149},[143,84060,84061],{"class":145,"line":2599},[143,84062,3300],{"emptyLinePlaceholder":976},[143,84064,84065,84067,84069],{"class":145,"line":2628},[143,84066,730],{"class":149},[143,84068,51533],{"class":153},[143,84070,183],{"class":149},[22896,84072,84074],{"id":84073},"_41054-number","4.10.5.4 Number",[63,84076,84077],{},[29,84078],{"alt":138,"src":84079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[63,84081,84082],{},"整数也可以进行toFixed来保留小数",[63,84084,84085],{},"比如：",[63,84087,84088],{},"const price=10",[63,84090,84091],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22896,84093,84095],{"id":84094},"_41055-购物车展示","4.10.5.5 购物车展示",[63,84097,84098],{},[29,84099],{"alt":138,"src":84100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[133,84102,84104],{"className":51531,"code":84103,"language":51533,"meta":138,"style":138},"\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",[140,84105,84106,84116,84130,84134,84142,84156,84176,84188,84196,84202,84212,84222,84232,84236,84240,84246,84258,84272,84276,84280,84286,84298,84314,84324,84340,84344,84348,84354,84364,84374,84378,84382,84390,84402,84414,84426,84430,84434,84442,84454,84458,84462,84473,84483,84495,84507,84517,84521,84525,84533,84542,84554,84564,84574,84578,84582,84590,84599,84606,84616,84628,84632,84636,84645,84655,84666,84678,84690,84694,84698,84707,84717,84728,84732,84736,84742,84754,84766,84776,84786,84804,84816,84820,84824,84833,84845,84855,84865,84877,84881,84889,84897,84901,84909,84923,84931,84945,84973,84981,84989,84999,85003,85011,85019,85028,85036,85045,85055,85059,85063,85071,85079,85088,85096,85104,85117,85121,85125,85133,85141,85150,85158,85166,85181,85185,85189,85197,85205,85214,85222,85230,85244,85252,85256,85260,85265,85291,85296,85333,85338,85361,85366,85420,85425,85461,85465,85471,85476,85485,85499,85508,85527,85536,85546,85551,85556,85569,85574,85628,85654,85662,85670,85674],{"__ignoreMap":138},[143,84107,84108,84110,84112,84114],{"class":145,"line":146},[143,84109,52195],{"class":149},[143,84111,52198],{"class":153},[143,84113,52201],{"class":156},[143,84115,183],{"class":149},[143,84117,84118,84120,84122,84124,84126,84128],{"class":145,"line":35},[143,84119,150],{"class":149},[143,84121,51533],{"class":153},[143,84123,52212],{"class":156},[143,84125,160],{"class":149},[143,84127,52217],{"class":163},[143,84129,183],{"class":149},[143,84131,84132],{"class":145,"line":46},[143,84133,3300],{"emptyLinePlaceholder":976},[143,84135,84136,84138,84140],{"class":145,"line":293},[143,84137,150],{"class":149},[143,84139,52230],{"class":153},[143,84141,183],{"class":149},[143,84143,84144,84146,84148,84150,84152,84154],{"class":145,"line":306},[143,84145,634],{"class":149},[143,84147,52240],{"class":153},[143,84149,52243],{"class":156},[143,84151,160],{"class":149},[143,84153,52248],{"class":163},[143,84155,183],{"class":149},[143,84157,84158,84160,84162,84164,84166,84168,84170,84172,84174],{"class":145,"line":319},[143,84159,634],{"class":149},[143,84161,52240],{"class":153},[143,84163,15819],{"class":156},[143,84165,160],{"class":149},[143,84167,52287],{"class":163},[143,84169,52267],{"class":156},[143,84171,160],{"class":149},[143,84173,52294],{"class":163},[143,84175,183],{"class":149},[143,84177,84178,84180,84182,84184,84186],{"class":145,"line":332},[143,84179,634],{"class":149},[143,84181,52303],{"class":153},[143,84183,52306],{"class":149},[143,84185,52303],{"class":153},[143,84187,183],{"class":149},[143,84189,84190,84192,84194],{"class":145,"line":345},[143,84191,634],{"class":149},[143,84193,954],{"class":153},[143,84195,183],{"class":149},[143,84197,84198,84200],{"class":145,"line":701},[143,84199,7303],{"class":153},[143,84201,275],{"class":149},[143,84203,84204,84206,84208,84210],{"class":145,"line":707},[143,84205,55580],{"class":280},[143,84207,284],{"class":149},[143,84209,1234],{"class":280},[143,84211,290],{"class":149},[143,84213,84214,84216,84218,84220],{"class":145,"line":727},[143,84215,55591],{"class":280},[143,84217,284],{"class":149},[143,84219,1234],{"class":280},[143,84221,290],{"class":149},[143,84223,84224,84226,84228,84230],{"class":145,"line":2518},[143,84225,73475],{"class":280},[143,84227,284],{"class":149},[143,84229,61388],{"class":280},[143,84231,290],{"class":149},[143,84233,84234],{"class":145,"line":2524},[143,84235,3087],{"class":149},[143,84237,84238],{"class":145,"line":2529},[143,84239,3300],{"emptyLinePlaceholder":976},[143,84241,84242,84244],{"class":145,"line":2543},[143,84243,63006],{"class":156},[143,84245,275],{"class":149},[143,84247,84248,84250,84252,84254,84256],{"class":145,"line":2548},[143,84249,55656],{"class":280},[143,84251,284],{"class":149},[143,84253,79453],{"class":280},[143,84255,774],{"class":755},[143,84257,290],{"class":149},[143,84259,84260,84262,84264,84266,84268,84270],{"class":145,"line":2554},[143,84261,55591],{"class":280},[143,84263,284],{"class":149},[143,84265,1352],{"class":280},[143,84267,774],{"class":755},[143,84269,52448],{"class":280},[143,84271,290],{"class":149},[143,84273,84274],{"class":145,"line":2575},[143,84275,3087],{"class":149},[143,84277,84278],{"class":145,"line":2580},[143,84279,3300],{"emptyLinePlaceholder":976},[143,84281,84282,84284],{"class":145,"line":2594},[143,84283,79503],{"class":156},[143,84285,275],{"class":149},[143,84287,84288,84290,84292,84294,84296],{"class":145,"line":2599},[143,84289,55580],{"class":280},[143,84291,284],{"class":149},[143,84293,1616],{"class":280},[143,84295,774],{"class":755},[143,84297,290],{"class":149},[143,84299,84300,84302,84304,84306,84308,84310,84312],{"class":145,"line":2628},[143,84301,62743],{"class":280},[143,84303,284],{"class":149},[143,84305,29019],{"class":280},[143,84307,79558],{"class":280},[143,84309,79561],{"class":280},[143,84311,1736],{"class":755},[143,84313,290],{"class":149},[143,84315,84316,84318,84320,84322],{"class":145,"line":2633},[143,84317,55894],{"class":280},[143,84319,284],{"class":149},[143,84321,287],{"class":280},[143,84323,290],{"class":149},[143,84325,84326,84328,84330,84332,84334,84336,84338],{"class":145,"line":2650},[143,84327,62860],{"class":280},[143,84329,284],{"class":149},[143,84331,771],{"class":280},[143,84333,774],{"class":755},[143,84335,777],{"class":280},[143,84337,63127],{"class":280},[143,84339,290],{"class":149},[143,84341,84342],{"class":145,"line":2655},[143,84343,3087],{"class":149},[143,84345,84346],{"class":145,"line":2660},[143,84347,3300],{"emptyLinePlaceholder":976},[143,84349,84350,84352],{"class":145,"line":2665},[143,84351,79621],{"class":156},[143,84353,275],{"class":149},[143,84355,84356,84358,84360,84362],{"class":145,"line":2679},[143,84357,62908],{"class":280},[143,84359,284],{"class":149},[143,84361,62913],{"class":280},[143,84363,290],{"class":149},[143,84365,84366,84368,84370,84372],{"class":145,"line":2684},[143,84367,55769],{"class":280},[143,84369,284],{"class":149},[143,84371,62701],{"class":280},[143,84373,290],{"class":149},[143,84375,84376],{"class":145,"line":3477},[143,84377,3087],{"class":149},[143,84379,84380],{"class":145,"line":3491},[143,84381,3300],{"emptyLinePlaceholder":976},[143,84383,84384,84386,84388],{"class":145,"line":3499},[143,84385,79503],{"class":156},[143,84387,56498],{"class":153},[143,84389,275],{"class":149},[143,84391,84392,84394,84396,84398,84400],{"class":145,"line":3504},[143,84393,55656],{"class":280},[143,84395,284],{"class":149},[143,84397,1653],{"class":280},[143,84399,774],{"class":755},[143,84401,290],{"class":149},[143,84403,84404,84406,84408,84410,84412],{"class":145,"line":3510},[143,84405,55670],{"class":280},[143,84407,284],{"class":149},[143,84409,1653],{"class":280},[143,84411,774],{"class":755},[143,84413,290],{"class":149},[143,84415,84416,84418,84420,84422,84424],{"class":145,"line":3516},[143,84417,62633],{"class":280},[143,84419,284],{"class":149},[143,84421,1360],{"class":280},[143,84423,774],{"class":755},[143,84425,290],{"class":149},[143,84427,84428],{"class":145,"line":3521},[143,84429,3087],{"class":149},[143,84431,84432],{"class":145,"line":8848},[143,84433,3300],{"emptyLinePlaceholder":976},[143,84435,84436,84438,84440],{"class":145,"line":8872},[143,84437,79503],{"class":156},[143,84439,63187],{"class":156},[143,84441,275],{"class":149},[143,84443,84444,84446,84448,84450,84452],{"class":145,"line":8877},[143,84445,55656],{"class":280},[143,84447,284],{"class":149},[143,84449,2623],{"class":280},[143,84451,774],{"class":755},[143,84453,290],{"class":149},[143,84455,84456],{"class":145,"line":8883},[143,84457,3087],{"class":149},[143,84459,84460],{"class":145,"line":8910},[143,84461,3300],{"emptyLinePlaceholder":976},[143,84463,84464,84466,84468,84471],{"class":145,"line":8915},[143,84465,79503],{"class":156},[143,84467,63187],{"class":156},[143,84469,84470],{"class":156}," .tag",[143,84472,275],{"class":149},[143,84474,84475,84477,84479,84481],{"class":145,"line":8921},[143,84476,55894],{"class":280},[143,84478,284],{"class":149},[143,84480,61752],{"class":280},[143,84482,290],{"class":149},[143,84484,84485,84487,84489,84491,84493],{"class":145,"line":8933},[143,84486,55580],{"class":280},[143,84488,284],{"class":149},[143,84490,1122],{"class":280},[143,84492,774],{"class":755},[143,84494,290],{"class":149},[143,84496,84497,84499,84501,84503,84505],{"class":145,"line":8945},[143,84498,55807],{"class":280},[143,84500,284],{"class":149},[143,84502,1539],{"class":280},[143,84504,774],{"class":755},[143,84506,290],{"class":149},[143,84508,84509,84511,84513,84515],{"class":145,"line":8957},[143,84510,58299],{"class":280},[143,84512,284],{"class":149},[143,84514,62953],{"class":280},[143,84516,290],{"class":149},[143,84518,84519],{"class":145,"line":10616},[143,84520,3087],{"class":149},[143,84522,84523],{"class":145,"line":10641},[143,84524,3300],{"emptyLinePlaceholder":976},[143,84526,84527,84529,84531],{"class":145,"line":10664},[143,84528,79503],{"class":156},[143,84530,79795],{"class":156},[143,84532,32364],{"class":149},[143,84534,84535,84537,84540],{"class":145,"line":10688},[143,84536,79503],{"class":156},[143,84538,84539],{"class":156}," .sub-total",[143,84541,275],{"class":149},[143,84543,84544,84546,84548,84550,84552],{"class":145,"line":10693},[143,84545,55807],{"class":280},[143,84547,284],{"class":149},[143,84549,1691],{"class":280},[143,84551,774],{"class":755},[143,84553,290],{"class":149},[143,84555,84556,84558,84560,84562],{"class":145,"line":10698},[143,84557,58299],{"class":280},[143,84559,284],{"class":149},[143,84561,79818],{"class":280},[143,84563,290],{"class":149},[143,84565,84566,84568,84570,84572],{"class":145,"line":10703},[143,84567,62720],{"class":280},[143,84569,284],{"class":149},[143,84571,771],{"class":280},[143,84573,290],{"class":149},[143,84575,84576],{"class":145,"line":10712},[143,84577,3087],{"class":149},[143,84579,84580],{"class":145,"line":10717},[143,84581,3300],{"emptyLinePlaceholder":976},[143,84583,84584,84586,84588],{"class":145,"line":10723},[143,84585,79503],{"class":156},[143,84587,79835],{"class":156},[143,84589,32364],{"class":149},[143,84591,84592,84594,84597],{"class":145,"line":10744},[143,84593,79503],{"class":156},[143,84595,84596],{"class":156}," .sub-total::before",[143,84598,32364],{"class":149},[143,84600,84601,84604],{"class":145,"line":10750},[143,84602,84603],{"class":156},"    .amount::before",[143,84605,275],{"class":149},[143,84607,84608,84610,84612,84614],{"class":145,"line":10764},[143,84609,79842],{"class":280},[143,84611,284],{"class":149},[143,84613,79847],{"class":163},[143,84615,290],{"class":149},[143,84617,84618,84620,84622,84624,84626],{"class":145,"line":10770},[143,84619,55807],{"class":280},[143,84621,284],{"class":149},[143,84623,1539],{"class":280},[143,84625,774],{"class":755},[143,84627,290],{"class":149},[143,84629,84630],{"class":145,"line":10797},[143,84631,3087],{"class":149},[143,84633,84634],{"class":145,"line":10806},[143,84635,3300],{"emptyLinePlaceholder":976},[143,84637,84638,84640,84643],{"class":145,"line":10812},[143,84639,79503],{"class":156},[143,84641,84642],{"class":156}," .spec",[143,84644,275],{"class":149},[143,84646,84647,84649,84651,84653],{"class":145,"line":10820},[143,84648,62720],{"class":280},[143,84650,284],{"class":149},[143,84652,1122],{"class":280},[143,84654,290],{"class":149},[143,84656,84657,84659,84661,84664],{"class":145,"line":10825},[143,84658,58299],{"class":280},[143,84660,284],{"class":149},[143,84662,84663],{"class":280},"#888",[143,84665,290],{"class":149},[143,84667,84668,84670,84672,84674,84676],{"class":145,"line":17502},[143,84669,55807],{"class":280},[143,84671,284],{"class":149},[143,84673,1590],{"class":280},[143,84675,774],{"class":755},[143,84677,290],{"class":149},[143,84679,84680,84682,84684,84686,84688],{"class":145,"line":17508},[143,84681,62883],{"class":280},[143,84683,284],{"class":149},[143,84685,1741],{"class":280},[143,84687,774],{"class":755},[143,84689,290],{"class":149},[143,84691,84692],{"class":145,"line":17531},[143,84693,3087],{"class":149},[143,84695,84696],{"class":145,"line":17537},[143,84697,3300],{"emptyLinePlaceholder":976},[143,84699,84700,84702,84705],{"class":145,"line":17560},[143,84701,79503],{"class":156},[143,84703,84704],{"class":156}," .count",[143,84706,275],{"class":149},[143,84708,84709,84711,84713,84715],{"class":145,"line":17574},[143,84710,62720],{"class":280},[143,84712,284],{"class":149},[143,84714,771],{"class":280},[143,84716,290],{"class":149},[143,84718,84719,84721,84723,84726],{"class":145,"line":17594},[143,84720,58299],{"class":280},[143,84722,284],{"class":149},[143,84724,84725],{"class":280},"#aaa",[143,84727,290],{"class":149},[143,84729,84730],{"class":145,"line":17600},[143,84731,3087],{"class":149},[143,84733,84734],{"class":145,"line":17611},[143,84735,3300],{"emptyLinePlaceholder":976},[143,84737,84738,84740],{"class":145,"line":17634},[143,84739,73354],{"class":156},[143,84741,275],{"class":149},[143,84743,84744,84746,84748,84750,84752],{"class":145,"line":17656},[143,84745,55656],{"class":280},[143,84747,284],{"class":149},[143,84749,79453],{"class":280},[143,84751,774],{"class":755},[143,84753,290],{"class":149},[143,84755,84756,84758,84760,84762,84764],{"class":145,"line":17661},[143,84757,55591],{"class":280},[143,84759,284],{"class":149},[143,84761,1234],{"class":280},[143,84763,52448],{"class":280},[143,84765,290],{"class":149},[143,84767,84768,84770,84772,84774],{"class":145,"line":17667},[143,84769,55894],{"class":280},[143,84771,284],{"class":149},[143,84773,287],{"class":280},[143,84775,290],{"class":149},[143,84777,84778,84780,84782,84784],{"class":145,"line":17681},[143,84779,55905],{"class":280},[143,84781,284],{"class":149},[143,84783,52472],{"class":280},[143,84785,290],{"class":149},[143,84787,84788,84791,84793,84795,84797,84799,84802],{"class":145,"line":17694},[143,84789,84790],{"class":280},"      border-top",[143,84792,284],{"class":149},[143,84794,771],{"class":280},[143,84796,774],{"class":755},[143,84798,777],{"class":280},[143,84800,84801],{"class":280}," #4e4e4e",[143,84803,290],{"class":149},[143,84805,84806,84808,84810,84812,84814],{"class":145,"line":17699},[143,84807,55580],{"class":280},[143,84809,284],{"class":149},[143,84811,1741],{"class":280},[143,84813,774],{"class":755},[143,84815,290],{"class":149},[143,84817,84818],{"class":145,"line":17713},[143,84819,3087],{"class":149},[143,84821,84822],{"class":145,"line":17718},[143,84823,3300],{"emptyLinePlaceholder":976},[143,84825,84826,84828,84831],{"class":145,"line":17724},[143,84827,73354],{"class":156},[143,84829,84830],{"class":156}," .amount",[143,84832,275],{"class":149},[143,84834,84835,84837,84839,84841,84843],{"class":145,"line":17729},[143,84836,55807],{"class":280},[143,84838,284],{"class":149},[143,84840,1691],{"class":280},[143,84842,774],{"class":755},[143,84844,290],{"class":149},[143,84846,84847,84849,84851,84853],{"class":145,"line":17743},[143,84848,58299],{"class":280},[143,84850,284],{"class":149},[143,84852,79818],{"class":280},[143,84854,290],{"class":149},[143,84856,84857,84859,84861,84863],{"class":145,"line":17748},[143,84858,63217],{"class":280},[143,84860,284],{"class":149},[143,84862,52383],{"class":280},[143,84864,290],{"class":149},[143,84866,84867,84869,84871,84873,84875],{"class":145,"line":17753},[143,84868,62633],{"class":280},[143,84870,284],{"class":149},[143,84872,1697],{"class":280},[143,84874,774],{"class":755},[143,84876,290],{"class":149},[143,84878,84879],{"class":145,"line":17767},[143,84880,3087],{"class":149},[143,84882,84883,84885,84887],{"class":145,"line":17779},[143,84884,53304],{"class":149},[143,84886,954],{"class":153},[143,84888,183],{"class":149},[143,84890,84891,84893,84895],{"class":145,"line":17784},[143,84892,730],{"class":149},[143,84894,52230],{"class":153},[143,84896,183],{"class":149},[143,84898,84899],{"class":145,"line":17797},[143,84900,3300],{"emptyLinePlaceholder":976},[143,84902,84903,84905,84907],{"class":145,"line":17802},[143,84904,150],{"class":149},[143,84906,52688],{"class":153},[143,84908,183],{"class":149},[143,84910,84911,84913,84915,84917,84919,84921],{"class":145,"line":17807},[143,84912,634],{"class":149},[143,84914,614],{"class":153},[143,84916,617],{"class":156},[143,84918,160],{"class":149},[143,84920,63491],{"class":163},[143,84922,183],{"class":149},[143,84924,84925,84927,84929],{"class":145,"line":17812},[143,84926,53304],{"class":149},[143,84928,614],{"class":153},[143,84930,183],{"class":149},[143,84932,84933,84935,84937,84939,84941,84943],{"class":145,"line":17825},[143,84934,634],{"class":149},[143,84936,614],{"class":153},[143,84938,617],{"class":156},[143,84940,160],{"class":149},[143,84942,63463],{"class":163},[143,84944,183],{"class":149},[143,84946,84947,84949,84951,84954,84956,84958,84960,84963,84965,84967,84969,84971],{"class":145,"line":17830},[143,84948,52237],{"class":149},[143,84950,614],{"class":153},[143,84952,84953],{"class":149},">合计：\u003C",[143,84955,143],{"class":153},[143,84957,617],{"class":156},[143,84959,160],{"class":149},[143,84961,84962],{"class":163},"\"amount\"",[143,84964,56197],{"class":149},[143,84966,143],{"class":153},[143,84968,56197],{"class":149},[143,84970,614],{"class":153},[143,84972,183],{"class":149},[143,84974,84975,84977,84979],{"class":145,"line":33531},[143,84976,53304],{"class":149},[143,84978,614],{"class":153},[143,84980,183],{"class":149},[143,84982,84983,84985,84987],{"class":145,"line":33537},[143,84984,634],{"class":149},[143,84986,52701],{"class":153},[143,84988,183],{"class":149},[143,84990,84991,84993,84995,84997],{"class":145,"line":33543},[143,84992,12121],{"class":755},[143,84994,80255],{"class":280},[143,84996,14464],{"class":755},[143,84998,56330],{"class":149},[143,85000,85001],{"class":145,"line":33549},[143,85002,80264],{"class":149},[143,85004,85005,85007,85009],{"class":145,"line":33555},[143,85006,80269],{"class":149},[143,85008,80272],{"class":163},[143,85010,32364],{"class":149},[143,85012,85013,85015,85017],{"class":145,"line":33566},[143,85014,80279],{"class":149},[143,85016,80282],{"class":163},[143,85018,32364],{"class":149},[143,85020,85021,85023,85026],{"class":145,"line":33572},[143,85022,80289],{"class":149},[143,85024,85025],{"class":280},"289.9",[143,85027,32364],{"class":149},[143,85029,85030,85032,85034],{"class":145,"line":33592},[143,85031,80299],{"class":149},[143,85033,80302],{"class":163},[143,85035,32364],{"class":149},[143,85037,85038,85041,85043],{"class":145,"line":33598},[143,85039,85040],{"class":149},"        count: ",[143,85042,1122],{"class":280},[143,85044,32364],{"class":149},[143,85046,85047,85050,85053],{"class":145,"line":33609},[143,85048,85049],{"class":149},"        spec: { color: ",[143,85051,85052],{"class":163},"'白色'",[143,85054,56487],{"class":149},[143,85056,85057],{"class":145,"line":33615},[143,85058,78771],{"class":149},[143,85060,85061],{"class":145,"line":33621},[143,85062,80264],{"class":149},[143,85064,85065,85067,85069],{"class":145,"line":33627},[143,85066,80269],{"class":149},[143,85068,80363],{"class":163},[143,85070,32364],{"class":149},[143,85072,85073,85075,85077],{"class":145,"line":33633},[143,85074,80279],{"class":149},[143,85076,80372],{"class":163},[143,85078,32364],{"class":149},[143,85080,85081,85083,85086],{"class":145,"line":33639},[143,85082,80289],{"class":149},[143,85084,85085],{"class":280},"109.8",[143,85087,32364],{"class":149},[143,85089,85090,85092,85094],{"class":145,"line":33645},[143,85091,80299],{"class":149},[143,85093,80390],{"class":163},[143,85095,32364],{"class":149},[143,85097,85098,85100,85102],{"class":145,"line":33651},[143,85099,85040],{"class":149},[143,85101,1116],{"class":280},[143,85103,32364],{"class":149},[143,85105,85106,85109,85111,85113,85115],{"class":145,"line":33671},[143,85107,85108],{"class":149},"        spec: { size: ",[143,85110,82781],{"class":163},[143,85112,56347],{"class":149},[143,85114,82786],{"class":163},[143,85116,56487],{"class":149},[143,85118,85119],{"class":145,"line":33677},[143,85120,78771],{"class":149},[143,85122,85123],{"class":145,"line":33693},[143,85124,80264],{"class":149},[143,85126,85127,85129,85131],{"class":145,"line":33699},[143,85128,80269],{"class":149},[143,85130,80407],{"class":163},[143,85132,32364],{"class":149},[143,85134,85135,85137,85139],{"class":145,"line":33713},[143,85136,80279],{"class":149},[143,85138,80416],{"class":163},[143,85140,32364],{"class":149},[143,85142,85143,85145,85148],{"class":145,"line":33719},[143,85144,80289],{"class":149},[143,85146,85147],{"class":280},"488",[143,85149,32364],{"class":149},[143,85151,85152,85154,85156],{"class":145,"line":33734},[143,85153,80299],{"class":149},[143,85155,80434],{"class":163},[143,85157,32364],{"class":149},[143,85159,85160,85162,85164],{"class":145,"line":33740},[143,85161,85040],{"class":149},[143,85163,771],{"class":280},[143,85165,32364],{"class":149},[143,85167,85168,85170,85173,85176,85179],{"class":145,"line":33749},[143,85169,85049],{"class":149},[143,85171,85172],{"class":163},"'青色'",[143,85174,85175],{"class":149},", sum: ",[143,85177,85178],{"class":163},"'一大四小'",[143,85180,56487],{"class":149},[143,85182,85183],{"class":145,"line":33755},[143,85184,78771],{"class":149},[143,85186,85187],{"class":145,"line":33764},[143,85188,80264],{"class":149},[143,85190,85191,85193,85195],{"class":145,"line":33770},[143,85192,80269],{"class":149},[143,85194,80451],{"class":163},[143,85196,32364],{"class":149},[143,85198,85199,85201,85203],{"class":145,"line":33776},[143,85200,80279],{"class":149},[143,85202,80460],{"class":163},[143,85204,32364],{"class":149},[143,85206,85207,85209,85212],{"class":145,"line":33785},[143,85208,80289],{"class":149},[143,85210,85211],{"class":280},"139",[143,85213,32364],{"class":149},[143,85215,85216,85218,85220],{"class":145,"line":33791},[143,85217,80299],{"class":149},[143,85219,80478],{"class":163},[143,85221,32364],{"class":149},[143,85223,85224,85226,85228],{"class":145,"line":33802},[143,85225,85040],{"class":149},[143,85227,771],{"class":280},[143,85229,32364],{"class":149},[143,85231,85232,85234,85237,85239,85242],{"class":145,"line":33808},[143,85233,85108],{"class":149},[143,85235,85236],{"class":163},"'小号'",[143,85238,56347],{"class":149},[143,85240,85241],{"class":163},"'紫色'",[143,85243,56353],{"class":149},[143,85245,85246,85249],{"class":145,"line":33827},[143,85247,85248],{"class":149},"        gift: ",[143,85250,85251],{"class":163},"'50g茶叶,清洗球'\n",[143,85253,85254],{"class":145,"line":33833},[143,85255,53285],{"class":149},[143,85257,85258],{"class":145,"line":33844},[143,85259,53996],{"class":149},[143,85261,85262],{"class":145,"line":33850},[143,85263,85264],{"class":266},"    \u002F\u002F  1.根据数据渲染页面\n",[143,85266,85267,85269,85271,85273,85275,85277,85279,85281,85283,85285,85287,85289],{"class":145,"line":33870},[143,85268,53294],{"class":149},[143,85270,55284],{"class":156},[143,85272,1049],{"class":149},[143,85274,80779],{"class":163},[143,85276,75128],{"class":149},[143,85278,160],{"class":755},[143,85280,80926],{"class":149},[143,85282,74923],{"class":156},[143,85284,1049],{"class":149},[143,85286,80673],{"class":6116},[143,85288,80676],{"class":755},[143,85290,275],{"class":149},[143,85292,85293],{"class":145,"line":33886},[143,85294,85295],{"class":266},"      \u002F\u002F 对象解构\n",[143,85297,85298,85300,85302,85304,85306,85308,85310,85313,85315,85317,85319,85322,85324,85327,85329,85331],{"class":145,"line":33892},[143,85299,59111],{"class":755},[143,85301,80685],{"class":149},[143,85303,80698],{"class":280},[143,85305,13335],{"class":149},[143,85307,80688],{"class":280},[143,85309,13335],{"class":149},[143,85311,85312],{"class":280},"count",[143,85314,13335],{"class":149},[143,85316,80693],{"class":280},[143,85318,13335],{"class":149},[143,85320,85321],{"class":280},"spec",[143,85323,13335],{"class":149},[143,85325,85326],{"class":280},"gift",[143,85328,80701],{"class":149},[143,85330,160],{"class":755},[143,85332,80706],{"class":149},[143,85334,85335],{"class":145,"line":33906},[143,85336,85337],{"class":266},"      \u002F\u002F 规格文字模块处理\n",[143,85339,85340,85342,85345,85347,85349,85351,85353,85355,85357,85359],{"class":145,"line":33912},[143,85341,59111],{"class":755},[143,85343,85344],{"class":280}," text",[143,85346,14464],{"class":755},[143,85348,82816],{"class":149},[143,85350,82819],{"class":156},[143,85352,82822],{"class":149},[143,85354,75102],{"class":156},[143,85356,1049],{"class":149},[143,85358,82829],{"class":163},[143,85360,1055],{"class":149},[143,85362,85363],{"class":145,"line":33918},[143,85364,85365],{"class":266},"      \u002F\u002F 处理赠品模块\n",[143,85367,85368,85370,85372,85374,85377,85379,85381,85383,85385,85388,85390,85392,85394,85396,85398,85401,85403,85406,85408,85410,85412,85414,85416,85418],{"class":145,"line":33929},[143,85369,59111],{"class":755},[143,85371,74798],{"class":280},[143,85373,14464],{"class":755},[143,85375,85376],{"class":149}," gift ",[143,85378,2024],{"class":755},[143,85380,83990],{"class":149},[143,85382,83993],{"class":156},[143,85384,1049],{"class":149},[143,85386,85387],{"class":163},"','",[143,85389,31724],{"class":149},[143,85391,74923],{"class":156},[143,85393,1049],{"class":149},[143,85395,80673],{"class":6116},[143,85397,80676],{"class":755},[143,85399,85400],{"class":163}," `\u003Cspan class=\"tag\">【赠品】${",[143,85402,80673],{"class":149},[143,85404,85405],{"class":163},"}\u003C\u002Fspan>`",[143,85407,31724],{"class":149},[143,85409,75102],{"class":156},[143,85411,1049],{"class":149},[143,85413,75107],{"class":163},[143,85415,14614],{"class":149},[143,85417,1900],{"class":755},[143,85419,70985],{"class":163},[143,85421,85422],{"class":145,"line":33935},[143,85423,85424],{"class":266},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[143,85426,85427,85429,85432,85434,85437,85439,85441,85443,85446,85448,85450,85452,85455,85457,85459],{"class":145,"line":33941},[143,85428,59111],{"class":755},[143,85430,85431],{"class":280}," subtotal",[143,85433,14464],{"class":755},[143,85435,85436],{"class":149}," ((price ",[143,85438,1496],{"class":755},[143,85440,6654],{"class":280},[143,85442,7418],{"class":755},[143,85444,85445],{"class":149}," count) ",[143,85447,1625],{"class":755},[143,85449,6654],{"class":280},[143,85451,31724],{"class":149},[143,85453,85454],{"class":156},"toFixed",[143,85456,1049],{"class":149},[143,85458,1122],{"class":280},[143,85460,1055],{"class":149},[143,85462,85463],{"class":145,"line":33951},[143,85464,3300],{"emptyLinePlaceholder":976},[143,85466,85467,85469],{"class":145,"line":33957},[143,85468,74861],{"class":755},[143,85470,71049],{"class":163},[143,85472,85473],{"class":145,"line":33968},[143,85474,85475],{"class":163},"        \u003Cdiv class=\"item\">\n",[143,85477,85478,85481,85483],{"class":145,"line":33974},[143,85479,85480],{"class":163},"          \u003Cimg src=\"${",[143,85482,80698],{"class":149},[143,85484,80730],{"class":163},[143,85486,85487,85490,85492,85495,85497],{"class":145,"line":33984},[143,85488,85489],{"class":163},"          \u003Cp class=\"name\">${",[143,85491,80688],{"class":149},[143,85493,85494],{"class":163},"}${",[143,85496,2206],{"class":149},[143,85498,80740],{"class":163},[143,85500,85501,85504,85506],{"class":145,"line":33989},[143,85502,85503],{"class":163},"          \u003Cp class=\"spec\">${",[143,85505,6087],{"class":149},[143,85507,80740],{"class":163},[143,85509,85510,85513,85515,85517,85519,85521,85523,85525],{"class":145,"line":33995},[143,85511,85512],{"class":163},"          \u003Cp class=\"price\">${",[143,85514,80693],{"class":149},[143,85516,1599],{"class":163},[143,85518,85454],{"class":156},[143,85520,1049],{"class":163},[143,85522,1122],{"class":280},[143,85524,1470],{"class":163},[143,85526,80740],{"class":163},[143,85528,85529,85532,85534],{"class":145,"line":34044},[143,85530,85531],{"class":163},"          \u003Cp class=\"count\">x${",[143,85533,85312],{"class":149},[143,85535,80740],{"class":163},[143,85537,85538,85541,85544],{"class":145,"line":34091},[143,85539,85540],{"class":163},"          \u003Cp class=\"sub-total\">${",[143,85542,85543],{"class":149},"subtotal",[143,85545,80740],{"class":163},[143,85547,85548],{"class":145,"line":34096},[143,85549,85550],{"class":163},"        \u003C\u002Fdiv> \n",[143,85552,85553],{"class":145,"line":34102},[143,85554,85555],{"class":163},"             `\n",[143,85557,85558,85561,85563,85565,85567],{"class":145,"line":34121},[143,85559,85560],{"class":149},"    }).",[143,85562,75102],{"class":156},[143,85564,1049],{"class":149},[143,85566,75107],{"class":163},[143,85568,1055],{"class":149},[143,85570,85571],{"class":145,"line":34127},[143,85572,85573],{"class":266},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[143,85575,85576,85578,85580,85582,85584,85587,85589,85592,85594,85596,85598,85601,85604,85606,85609,85611,85613,85615,85618,85620,85622,85624,85626],{"class":145,"line":34147},[143,85577,12121],{"class":755},[143,85579,63667],{"class":280},[143,85581,14464],{"class":755},[143,85583,80926],{"class":149},[143,85585,85586],{"class":156},"reduce",[143,85588,3276],{"class":149},[143,85590,85591],{"class":6116},"prev",[143,85593,13335],{"class":149},[143,85595,80673],{"class":6116},[143,85597,14614],{"class":149},[143,85599,85600],{"class":755},"=>",[143,85602,85603],{"class":149}," prev ",[143,85605,1522],{"class":755},[143,85607,85608],{"class":149}," (item.price ",[143,85610,1496],{"class":755},[143,85612,6654],{"class":280},[143,85614,7418],{"class":755},[143,85616,85617],{"class":149}," item.count) ",[143,85619,1625],{"class":755},[143,85621,6654],{"class":280},[143,85623,13335],{"class":149},[143,85625,1234],{"class":280},[143,85627,1055],{"class":149},[143,85629,85630,85632,85634,85636,85639,85641,85643,85646,85648,85650,85652],{"class":145,"line":34153},[143,85631,53294],{"class":149},[143,85633,55284],{"class":156},[143,85635,1049],{"class":149},[143,85637,85638],{"class":163},"'.amount'",[143,85640,75128],{"class":149},[143,85642,160],{"class":755},[143,85644,85645],{"class":149}," total.",[143,85647,85454],{"class":156},[143,85649,1049],{"class":149},[143,85651,1122],{"class":280},[143,85653,1055],{"class":149},[143,85655,85656,85658,85660],{"class":145,"line":34159},[143,85657,53304],{"class":149},[143,85659,52701],{"class":153},[143,85661,183],{"class":149},[143,85663,85664,85666,85668],{"class":145,"line":34169},[143,85665,730],{"class":149},[143,85667,52688],{"class":153},[143,85669,183],{"class":149},[143,85671,85672],{"class":145,"line":34174},[143,85673,3300],{"emptyLinePlaceholder":976},[143,85675,85676,85678,85680],{"class":145,"line":34180},[143,85677,730],{"class":149},[143,85679,51533],{"class":153},[143,85681,183],{"class":149},[14,85683,85685],{"id":85684},"_411-编程思想","4.11 编程思想",[58,85687,85689],{"id":85688},"_4111-面向过程介绍","4.11.1 面向过程介绍",[63,85691,85692,85695],{},[25,85693,85694],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[63,85697,85698],{},"调用就可以了",[63,85700,85701],{},[29,85702],{"alt":138,"src":85703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[58,85705,85707],{"id":85706},"_4112-面向对象","4.11.2 面向对象",[63,85709,85710],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[63,85712,85713],{},[29,85714],{"alt":138,"src":85715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[63,85717,85718],{},"面向对象的特性：",[232,85720,85721,85724,85727],{},[22,85722,85723],{},"封装性",[22,85725,85726],{},"继承性",[22,85728,85729],{},"多态性",[58,85731,85733],{"id":85732},"_4113-两者比较","4.11.3 两者比较",[63,85735,85736],{},[29,85737],{"alt":138,"src":85738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85740,85742],{"id":85741},"_412-构造函数回顾","4.12 构造函数回顾",[63,85744,85745],{},[29,85746],{"alt":138,"src":85747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[63,85749,85750],{},[29,85751],{"alt":138,"src":85752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[63,85754,85755],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[63,85757,85758],{},[29,85759],{"alt":138,"src":85760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85762,85764],{"id":85763},"_413-原型","4.13 原型",[58,85766,85768],{"id":85767},"_4131-原型对象的认识","4.13.1 原型对象的认识",[63,85770,85771],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[63,85773,85774],{},[29,85775],{"alt":138,"src":85776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[63,85778,85779],{},[29,85780],{"alt":138,"src":85781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[63,85783,85784],{},"原型是构造函数的属性，它也是一个对象",[63,85786,85787],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[63,85789,85790],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[133,85792,85794],{"className":53954,"code":85793,"language":53956,"meta":138,"style":138},"\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",[140,85795,85796,85804,85809,85817,85822,85827,85832,85837,85842,85846,85850,85854,85859,85864,85868,85873,85878,85883,85888,85893,85897,85905],{"__ignoreMap":138},[143,85797,85798,85800,85802],{"class":145,"line":146},[143,85799,150],{"class":149},[143,85801,52688],{"class":153},[143,85803,183],{"class":149},[143,85805,85806],{"class":145,"line":35},[143,85807,85808],{"class":266},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[143,85810,85811,85813,85815],{"class":145,"line":46},[143,85812,634],{"class":149},[143,85814,52701],{"class":153},[143,85816,183],{"class":149},[143,85818,85819],{"class":145,"line":293},[143,85820,85821],{"class":149},"    function Star(uname, age) {\n",[143,85823,85824],{"class":145,"line":306},[143,85825,85826],{"class":149},"      this.uname = uname,\n",[143,85828,85829],{"class":145,"line":319},[143,85830,85831],{"class":149},"        this.age = age\n",[143,85833,85834],{"class":145,"line":332},[143,85835,85836],{"class":149},"      \u002F\u002F this.sing = function () {\n",[143,85838,85839],{"class":145,"line":345},[143,85840,85841],{"class":149},"      \u002F\u002F   console.log('唱歌')\n",[143,85843,85844],{"class":145,"line":701},[143,85845,3300],{"emptyLinePlaceholder":976},[143,85847,85848],{"class":145,"line":707},[143,85849,60920],{"class":149},[143,85851,85852],{"class":145,"line":727},[143,85853,3087],{"class":149},[143,85855,85856],{"class":145,"line":2518},[143,85857,85858],{"class":149},"    Star.prototype.sing = function () {\n",[143,85860,85861],{"class":145,"line":2524},[143,85862,85863],{"class":149},"      console.log('唱歌')\n",[143,85865,85866],{"class":145,"line":2529},[143,85867,3087],{"class":149},[143,85869,85870],{"class":145,"line":2543},[143,85871,85872],{"class":149},"    \u002F\u002F console.dir(Star.prototype)\n",[143,85874,85875],{"class":145,"line":2548},[143,85876,85877],{"class":149},"    const pink = new Star('pink', 18)\n",[143,85879,85880],{"class":145,"line":2554},[143,85881,85882],{"class":149},"    const red = new Star('red', 20)\n",[143,85884,85885],{"class":145,"line":2575},[143,85886,85887],{"class":149},"    pink.sing()\n",[143,85889,85890],{"class":145,"line":2580},[143,85891,85892],{"class":149},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[143,85894,85895],{"class":145,"line":2594},[143,85896,3300],{"emptyLinePlaceholder":976},[143,85898,85899,85901,85903],{"class":145,"line":2599},[143,85900,53304],{"class":149},[143,85902,52701],{"class":153},[143,85904,183],{"class":149},[143,85906,85907,85909,85911],{"class":145,"line":2628},[143,85908,730],{"class":149},[143,85910,52688],{"class":153},[143,85912,183],{"class":149},[63,85914,85915],{},[29,85916],{"alt":138,"src":85917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[133,85919,85921],{"className":53954,"code":85920,"language":53956,"meta":138,"style":138},"\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",[140,85922,85923,85931,85939,85944,85949,85954,85959,85963,85968,85973,85978,85982,85987,85991,85995,86000,86004,86012],{"__ignoreMap":138},[143,85924,85925,85927,85929],{"class":145,"line":146},[143,85926,150],{"class":149},[143,85928,52688],{"class":153},[143,85930,183],{"class":149},[143,85932,85933,85935,85937],{"class":145,"line":35},[143,85934,634],{"class":149},[143,85936,52701],{"class":153},[143,85938,183],{"class":149},[143,85940,85941],{"class":145,"line":46},[143,85942,85943],{"class":149},"    let that\n",[143,85945,85946],{"class":145,"line":293},[143,85947,85948],{"class":149},"    function Star(uname) {\n",[143,85950,85951],{"class":145,"line":306},[143,85952,85953],{"class":149},"      this.uname = uname\n",[143,85955,85956],{"class":145,"line":319},[143,85957,85958],{"class":149},"      that = this\n",[143,85960,85961],{"class":145,"line":332},[143,85962,3087],{"class":149},[143,85964,85965],{"class":145,"line":345},[143,85966,85967],{"class":149},"    \u002F\u002F 实例对象是 ldh\n",[143,85969,85970],{"class":145,"line":701},[143,85971,85972],{"class":149},"    const ldh = new Star('刘德华')\n",[143,85974,85975],{"class":145,"line":707},[143,85976,85977],{"class":149},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[143,85979,85980],{"class":145,"line":727},[143,85981,3300],{"emptyLinePlaceholder":976},[143,85983,85984],{"class":145,"line":2518},[143,85985,85986],{"class":149},"    Star.sing = function () {\n",[143,85988,85989],{"class":145,"line":2524},[143,85990,85863],{"class":149},[143,85992,85993],{"class":145,"line":2529},[143,85994,3087],{"class":149},[143,85996,85997],{"class":145,"line":2543},[143,85998,85999],{"class":149},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[143,86001,86002],{"class":145,"line":2548},[143,86003,3300],{"emptyLinePlaceholder":976},[143,86005,86006,86008,86010],{"class":145,"line":2554},[143,86007,53304],{"class":149},[143,86009,52701],{"class":153},[143,86011,183],{"class":149},[143,86013,86014,86016,86018],{"class":145,"line":2575},[143,86015,730],{"class":149},[143,86017,52688],{"class":153},[143,86019,183],{"class":149},[63,86021,86022],{},"构造函数的this指向的是实例对象；",[63,86024,86025],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[58,86027,86029],{"id":86028},"_4132-数组扩展方法","4.13.2 数组扩展方法",[63,86031,86032],{},[29,86033],{"alt":138,"src":86034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[133,86036,86038],{"className":53954,"code":86037,"language":53956,"meta":138,"style":138},"\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",[140,86039,86040,86048,86056,86061,86066,86071,86076,86081,86086,86091,86096,86101,86106,86110,86115,86120,86125,86130,86134,86139,86144,86149,86154,86158,86163,86168,86173,86178,86182,86187,86191,86199],{"__ignoreMap":138},[143,86041,86042,86044,86046],{"class":145,"line":146},[143,86043,150],{"class":149},[143,86045,52688],{"class":153},[143,86047,183],{"class":149},[143,86049,86050,86052,86054],{"class":145,"line":35},[143,86051,634],{"class":149},[143,86053,52701],{"class":153},[143,86055,183],{"class":149},[143,86057,86058],{"class":145,"line":46},[143,86059,86060],{"class":149},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[143,86062,86063],{"class":145,"line":293},[143,86064,86065],{"class":149},"    const arr = [1, 2, 3]\n",[143,86067,86068],{"class":145,"line":306},[143,86069,86070],{"class":149},"    \u002F\u002F 自己定义数组的扩展方法\n",[143,86072,86073],{"class":145,"line":319},[143,86074,86075],{"class":149},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[143,86077,86078],{"class":145,"line":332},[143,86079,86080],{"class":149},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[143,86082,86083],{"class":145,"line":345},[143,86084,86085],{"class":149},"    \u002F\u002F ①.最大值\n",[143,86087,86088],{"class":145,"line":701},[143,86089,86090],{"class":149},"    Array.prototype.max = function () {\n",[143,86092,86093],{"class":145,"line":707},[143,86094,86095],{"class":149},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[143,86097,86098],{"class":145,"line":727},[143,86099,86100],{"class":149},"      return Math.max(...this)\n",[143,86102,86103],{"class":145,"line":2518},[143,86104,86105],{"class":149},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[143,86107,86108],{"class":145,"line":2524},[143,86109,3087],{"class":149},[143,86111,86112],{"class":145,"line":2529},[143,86113,86114],{"class":149},"    console.log(arr.max())\n",[143,86116,86117],{"class":145,"line":2543},[143,86118,86119],{"class":149},"    \u002F\u002F ②最小值\n",[143,86121,86122],{"class":145,"line":2548},[143,86123,86124],{"class":149},"    Array.prototype.min = function () {\n",[143,86126,86127],{"class":145,"line":2554},[143,86128,86129],{"class":149},"      return Math.min(...this)\n",[143,86131,86132],{"class":145,"line":2575},[143,86133,3087],{"class":149},[143,86135,86136],{"class":145,"line":2580},[143,86137,86138],{"class":149},"    console.log(arr.min())\n",[143,86140,86141],{"class":145,"line":2594},[143,86142,86143],{"class":149},"    \u002F\u002F③求和\n",[143,86145,86146],{"class":145,"line":2599},[143,86147,86148],{"class":149},"    Array.prototype.sum = function () {\n",[143,86150,86151],{"class":145,"line":2628},[143,86152,86153],{"class":149},"      return this.reduce((prev, current) => prev + current, 0)\n",[143,86155,86156],{"class":145,"line":2633},[143,86157,3087],{"class":149},[143,86159,86160],{"class":145,"line":2650},[143,86161,86162],{"class":149},"    console.log(arr.sum())\n",[143,86164,86165],{"class":145,"line":2655},[143,86166,86167],{"class":149},"    \u002F\u002F ③排序\n",[143,86169,86170],{"class":145,"line":2660},[143,86171,86172],{"class":149},"    Array.prototype.rever = function () {\n",[143,86174,86175],{"class":145,"line":2665},[143,86176,86177],{"class":149},"      return this.reverse()\n",[143,86179,86180],{"class":145,"line":2679},[143,86181,3087],{"class":149},[143,86183,86184],{"class":145,"line":2684},[143,86185,86186],{"class":149},"    console.log(arr.rever())\n",[143,86188,86189],{"class":145,"line":3477},[143,86190,3300],{"emptyLinePlaceholder":976},[143,86192,86193,86195,86197],{"class":145,"line":3491},[143,86194,53304],{"class":149},[143,86196,52701],{"class":153},[143,86198,183],{"class":149},[143,86200,86201,86203,86205],{"class":145,"line":3499},[143,86202,730],{"class":149},[143,86204,52688],{"class":153},[143,86206,183],{"class":149},[63,86208,86209],{},[29,86210],{"alt":138,"src":86211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[58,86213,86215],{"id":86214},"_4133-constructor-属性","4.13.3 constructor 属性",[63,86217,86218],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[63,86220,86221],{},[29,86222],{"alt":138,"src":86223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[133,86225,86227],{"className":53954,"code":86226,"language":53956,"meta":138,"style":138},"\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",[140,86228,86229,86237,86245,86250,86255,86259,86264,86269,86274,86282],{"__ignoreMap":138},[143,86230,86231,86233,86235],{"class":145,"line":146},[143,86232,150],{"class":149},[143,86234,52688],{"class":153},[143,86236,183],{"class":149},[143,86238,86239,86241,86243],{"class":145,"line":35},[143,86240,634],{"class":149},[143,86242,52701],{"class":153},[143,86244,183],{"class":149},[143,86246,86247],{"class":145,"line":46},[143,86248,86249],{"class":149},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[143,86251,86252],{"class":145,"line":293},[143,86253,86254],{"class":149},"    function Star() {\n",[143,86256,86257],{"class":145,"line":306},[143,86258,3087],{"class":149},[143,86260,86261],{"class":145,"line":319},[143,86262,86263],{"class":149},"    const ldh = new Star()\n",[143,86265,86266],{"class":145,"line":332},[143,86267,86268],{"class":149},"    console.log(Star.prototype)\n",[143,86270,86271],{"class":145,"line":345},[143,86272,86273],{"class":149},"    console.log(Star.prototype.constructor === Star)\n",[143,86275,86276,86278,86280],{"class":145,"line":701},[143,86277,53304],{"class":149},[143,86279,52701],{"class":153},[143,86281,183],{"class":149},[143,86283,86284,86286,86288],{"class":145,"line":707},[143,86285,730],{"class":149},[143,86287,52688],{"class":153},[143,86289,183],{"class":149},[63,86291,86292],{},[29,86293],{"alt":138,"src":86294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[63,86296,86297],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[133,86299,86301],{"className":53954,"code":86300,"language":53956,"meta":138,"style":138},"  \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",[140,86302,86303,86311,86315,86319,86323,86328,86333,86338,86342,86347,86352,86357,86362,86367,86372,86376,86380,86385,86390,86395,86399,86404,86409,86413,86417,86421],{"__ignoreMap":138},[143,86304,86305,86307,86309],{"class":145,"line":146},[143,86306,634],{"class":149},[143,86308,52701],{"class":153},[143,86310,183],{"class":149},[143,86312,86313],{"class":145,"line":35},[143,86314,86249],{"class":149},[143,86316,86317],{"class":145,"line":46},[143,86318,86254],{"class":149},[143,86320,86321],{"class":145,"line":293},[143,86322,3087],{"class":149},[143,86324,86325],{"class":145,"line":306},[143,86326,86327],{"class":149},"    \u002F\u002F const ldh = new Star()\n",[143,86329,86330],{"class":145,"line":319},[143,86331,86332],{"class":149},"    \u002F\u002F console.log(Star.prototype)\n",[143,86334,86335],{"class":145,"line":332},[143,86336,86337],{"class":149},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[143,86339,86340],{"class":145,"line":345},[143,86341,3300],{"emptyLinePlaceholder":976},[143,86343,86344],{"class":145,"line":701},[143,86345,86346],{"class":149},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[143,86348,86349],{"class":145,"line":707},[143,86350,86351],{"class":149},"    \u002F\u002F Star.prototype.sing = function () {\n",[143,86353,86354],{"class":145,"line":727},[143,86355,86356],{"class":149},"    \u002F\u002F   console.log('唱歌')\n",[143,86358,86359],{"class":145,"line":2518},[143,86360,86361],{"class":149},"    \u002F\u002F }\n",[143,86363,86364],{"class":145,"line":2524},[143,86365,86366],{"class":149},"    \u002F\u002F Star.prototype.dance = function () {\n",[143,86368,86369],{"class":145,"line":2529},[143,86370,86371],{"class":149},"    \u002F\u002F   console.log('跳舞')\n",[143,86373,86374],{"class":145,"line":2543},[143,86375,86361],{"class":149},[143,86377,86378],{"class":145,"line":2548},[143,86379,86268],{"class":149},[143,86381,86382],{"class":145,"line":2554},[143,86383,86384],{"class":149},"    Star.prototype = {\n",[143,86386,86387],{"class":145,"line":2575},[143,86388,86389],{"class":149},"      sing: function () {\n",[143,86391,86392],{"class":145,"line":2580},[143,86393,86394],{"class":149},"        console.log('唱歌')\n",[143,86396,86397],{"class":145,"line":2594},[143,86398,78771],{"class":149},[143,86400,86401],{"class":145,"line":2599},[143,86402,86403],{"class":149},"      dance: function () {\n",[143,86405,86406],{"class":145,"line":2628},[143,86407,86408],{"class":149},"        console.log('跳舞')\n",[143,86410,86411],{"class":145,"line":2633},[143,86412,53285],{"class":149},[143,86414,86415],{"class":145,"line":2650},[143,86416,3087],{"class":149},[143,86418,86419],{"class":145,"line":2655},[143,86420,86268],{"class":149},[143,86422,86423,86425,86427],{"class":145,"line":2660},[143,86424,53304],{"class":149},[143,86426,52701],{"class":153},[143,86428,183],{"class":149},[63,86430,86431],{},"进行输出结果后会发现：",[63,86433,86434],{},[29,86435],{"alt":138,"src":86436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[63,86438,86439],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[63,86441,86442],{},"所以，要重新指回创造这个原型对象的构造函数",[133,86444,86446],{"className":72092,"code":86445,"language":72094,"meta":138,"style":138},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[140,86447,86448,86462,86467,86472,86483,86496,86501,86512,86526,86530],{"__ignoreMap":138},[143,86449,86450,86453,86455,86458,86460],{"class":145,"line":146},[143,86451,86452],{"class":280},"Star",[143,86454,1599],{"class":149},[143,86456,86457],{"class":280},"prototype",[143,86459,14464],{"class":755},[143,86461,275],{"class":149},[143,86463,86464],{"class":145,"line":35},[143,86465,86466],{"class":266},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[143,86468,86469],{"class":145,"line":46},[143,86470,86471],{"class":149},"  constructor: Star,\n",[143,86473,86474,86477,86479,86481],{"class":145,"line":293},[143,86475,86476],{"class":156},"  sing",[143,86478,284],{"class":149},[143,86480,55334],{"class":755},[143,86482,55337],{"class":149},[143,86484,86485,86487,86489,86491,86494],{"class":145,"line":306},[143,86486,74632],{"class":149},[143,86488,59130],{"class":156},[143,86490,1049],{"class":149},[143,86492,86493],{"class":163},"'唱歌'",[143,86495,1055],{"class":149},[143,86497,86498],{"class":145,"line":319},[143,86499,86500],{"class":149},"   },\n",[143,86502,86503,86506,86508,86510],{"class":145,"line":332},[143,86504,86505],{"class":156},"   dance",[143,86507,284],{"class":149},[143,86509,55334],{"class":755},[143,86511,55337],{"class":149},[143,86513,86514,86517,86519,86521,86524],{"class":145,"line":345},[143,86515,86516],{"class":149},"     console.",[143,86518,59130],{"class":156},[143,86520,1049],{"class":149},[143,86522,86523],{"class":163},"'跳舞'",[143,86525,1055],{"class":149},[143,86527,86528],{"class":145,"line":701},[143,86529,5209],{"class":149},[143,86531,86532],{"class":145,"line":707},[143,86533,348],{"class":149},[63,86535,86536],{},[29,86537],{"alt":138,"src":86538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[63,86540,86541],{},"总结1：",[63,86543,86544],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[63,86546,86547],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[63,86549,86550],{},"constructor指的是他的来源",[63,86552,86553],{},[29,86554],{"alt":138,"src":86555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[63,86557,86558],{},[29,86559],{"alt":138,"src":86560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[63,86562,86563],{},"总结2：",[63,86565,86566],{},[29,86567],{"alt":138,"src":86568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[63,86570,86571],{},[29,86572],{"alt":138,"src":86573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[63,86575,86576],{},[29,86577],{"alt":138,"src":86578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[58,86580,86582],{"id":86581},"_4134-对象原型","4.13.4 对象原型",[63,86584,86585],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[63,86587,86588],{},"对象原型就是__proto__这个属性",[63,86590,86591],{},[29,86592],{"alt":138,"src":86593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[63,86595,86596],{},[29,86597],{"alt":138,"src":86598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[63,86600,86601],{},[29,86602],{"alt":138,"src":86603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[63,86605,86606],{},[29,86607],{"alt":138,"src":86608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[133,86610,86612],{"className":53954,"code":86611,"language":53956,"meta":138,"style":138},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[140,86613,86614,86622,86630,86634,86638,86642,86647,86655],{"__ignoreMap":138},[143,86615,86616,86618,86620],{"class":145,"line":146},[143,86617,150],{"class":149},[143,86619,52688],{"class":153},[143,86621,183],{"class":149},[143,86623,86624,86626,86628],{"class":145,"line":35},[143,86625,634],{"class":149},[143,86627,52701],{"class":153},[143,86629,183],{"class":149},[143,86631,86632],{"class":145,"line":46},[143,86633,86254],{"class":149},[143,86635,86636],{"class":145,"line":293},[143,86637,3087],{"class":149},[143,86639,86640],{"class":145,"line":306},[143,86641,86263],{"class":149},[143,86643,86644],{"class":145,"line":319},[143,86645,86646],{"class":149},"    console.log(ldh)\n",[143,86648,86649,86651,86653],{"class":145,"line":332},[143,86650,53304],{"class":149},[143,86652,52701],{"class":153},[143,86654,183],{"class":149},[143,86656,86657,86659,86661],{"class":145,"line":345},[143,86658,730],{"class":149},[143,86660,52688],{"class":153},[143,86662,183],{"class":149},[63,86664,86665],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[63,86667,86668],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[63,86670,86671],{},[29,86672],{"alt":138,"src":86673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[63,86675,86676],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[63,86678,86679],{},"对象原型指向原型对象",[63,86681,86682],{},[29,86683],{"alt":138,"src":86684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[63,86686,86687],{},[29,86688],{"alt":138,"src":86689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[63,86691,86692],{},[29,86693],{"alt":138,"src":86694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[58,86696,86698],{"id":86697},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[63,86700,86701],{},[29,86702],{"alt":138,"src":86703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[19,86705,86706,86709,86712,86715],{},[22,86707,86708],{},"构造函数通过new的形式实例化得到实例对象",[22,86710,86711],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[22,86713,86714],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[22,86716,86717],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[63,86719,86720],{},[29,86721],{"alt":138,"src":86722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[63,86724,86725],{},"题目梳理：",[63,86727,86728],{},[29,86729],{"alt":138,"src":86730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[58,86732,86734],{"id":86733},"_4136-原型继承","4.13.6 原型继承",[63,86736,86737],{},[29,86738],{"alt":138,"src":86739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[63,86741,86742],{},[29,86743],{"alt":138,"src":86744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[63,86746,86747],{},[29,86748],{"alt":138,"src":86749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[63,86751,86752],{},[29,86753],{"alt":138,"src":86754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[63,86756,86757],{},[29,86758],{"alt":138,"src":86759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[63,86761,86762],{},[29,86763],{"alt":138,"src":86764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[63,86766,86767],{},[29,86768],{"alt":138,"src":86769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[63,86771,86772],{},[29,86773],{"alt":138,"src":86774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[63,86776,86777],{},"回顾：构造函数每次new得到对象都是不同的",[58,86779,86781],{"id":86780},"_4137-原型链","4.13.7 原型链",[63,86783,86784],{},[29,86785],{"alt":138,"src":86786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[63,86788,86789],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[63,86791,86792],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[63,86794,86795],{},"大哥是Object",[63,86797,86798],{},[29,86799],{"alt":138,"src":86800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[63,86802,86803],{},[29,86804],{"alt":138,"src":86805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[63,86807,86808],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[63,86810,86811],{},"万物皆对象",[58,86813,86815],{"id":86814},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[63,86817,86818],{},"模态框",[63,86820,86821],{},"以后遇见这个效果直接使用这个就行",[63,86823,86824],{},[29,86825],{"alt":138,"src":86826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[63,86828,86829],{},[29,86830],{"alt":138,"src":86831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[63,86833,86834],{},[29,86835],{"alt":138,"src":86836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[63,86838,86839],{},[29,86840],{"alt":138,"src":86841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[63,86843,86844],{},"补充知识点：",[19,86846,86847],{},[22,86848,86849],{},"append()",[63,86851,86852],{},[29,86853],{"alt":138,"src":86854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[133,86856,86858],{"className":51531,"code":86857,"language":51533,"meta":138,"style":138},"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",[140,86859,86860,86865,86870,86875,86879,86883,86887,86892,86897,86902,86906],{"__ignoreMap":138},[143,86861,86862],{"class":145,"line":146},[143,86863,86864],{"class":149},"append(param1)\n",[143,86866,86867],{"class":145,"line":35},[143,86868,86869],{"class":149},"append(param1, param2)\n",[143,86871,86872],{"class":145,"line":46},[143,86873,86874],{"class":149},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[143,86876,86877],{"class":145,"line":293},[143,86878,3300],{"emptyLinePlaceholder":976},[143,86880,86881],{"class":145,"line":306},[143,86882,3300],{"emptyLinePlaceholder":976},[143,86884,86885],{"class":145,"line":319},[143,86886,3300],{"emptyLinePlaceholder":976},[143,86888,86889],{"class":145,"line":332},[143,86890,86891],{"class":149},"let div = document.createElement(\"div\");\n",[143,86893,86894],{"class":145,"line":345},[143,86895,86896],{"class":149},"let p = document.createElement(\"p\");\n",[143,86898,86899],{"class":145,"line":701},[143,86900,86901],{"class":149},"div.append(p);\n",[143,86903,86904],{"class":145,"line":707},[143,86905,3300],{"emptyLinePlaceholder":976},[143,86907,86908,86911,86913],{"class":145,"line":727},[143,86909,86910],{"class":149},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[143,86912,63],{"class":153},[143,86914,86915],{"class":149},"> ]\n",[19,86917,86918],{"start":35},[22,86919,86920],{},"remove()",[63,86922,86923],{},"自己删自己",[63,86925,86926],{},[29,86927],{"alt":138,"src":86928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[133,86930,86932],{"className":51531,"code":86931,"language":51533,"meta":138,"style":138},"\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",[140,86933,86934,86944,86958,86962,86970,86984,87004,87016,87024,87031,87043,87056,87091,87103,87114,87126,87138,87150,87177,87187,87191,87195,87204,87216,87230,87240,87252,87256,87260,87270,87281,87291,87301,87314,87327,87337,87341,87345,87354,87364,87376,87380,87384,87393,87403,87413,87425,87429,87433,87443,87459,87470,87480,87490,87502,87514,87526,87530,87534,87547,87558,87562,87570,87578,87582,87590,87610,87630,87638,87643,87669,87674,87679,87698,87703,87715,87720,87731,87741,87751,87756,87761,87765,87770,87775,87780,87800,87805,87825,87830,87844,87849,87854,87859,87875,87879,87884,87913,87918,87923,87928,87939,87943,87947,87951,87956,87981,87986,88011,88016,88025,88029,88034,88059,88063,88088,88092,88101,88105,88110,88128,88138,88142,88150,88158,88162],{"__ignoreMap":138},[143,86935,86936,86938,86940,86942],{"class":145,"line":146},[143,86937,52195],{"class":149},[143,86939,52198],{"class":153},[143,86941,52201],{"class":156},[143,86943,183],{"class":149},[143,86945,86946,86948,86950,86952,86954,86956],{"class":145,"line":35},[143,86947,150],{"class":149},[143,86949,51533],{"class":153},[143,86951,52212],{"class":156},[143,86953,160],{"class":149},[143,86955,52217],{"class":163},[143,86957,183],{"class":149},[143,86959,86960],{"class":145,"line":46},[143,86961,3300],{"emptyLinePlaceholder":976},[143,86963,86964,86966,86968],{"class":145,"line":293},[143,86965,150],{"class":149},[143,86967,52230],{"class":153},[143,86969,183],{"class":149},[143,86971,86972,86974,86976,86978,86980,86982],{"class":145,"line":306},[143,86973,634],{"class":149},[143,86975,52240],{"class":153},[143,86977,52243],{"class":156},[143,86979,160],{"class":149},[143,86981,52248],{"class":163},[143,86983,183],{"class":149},[143,86985,86986,86988,86990,86992,86994,86996,86998,87000,87002],{"class":145,"line":319},[143,86987,634],{"class":149},[143,86989,52240],{"class":153},[143,86991,15819],{"class":156},[143,86993,160],{"class":149},[143,86995,52287],{"class":163},[143,86997,52267],{"class":156},[143,86999,160],{"class":149},[143,87001,52294],{"class":163},[143,87003,183],{"class":149},[143,87005,87006,87008,87010,87012,87014],{"class":145,"line":332},[143,87007,634],{"class":149},[143,87009,52303],{"class":153},[143,87011,52306],{"class":149},[143,87013,52303],{"class":153},[143,87015,183],{"class":149},[143,87017,87018,87020,87022],{"class":145,"line":345},[143,87019,634],{"class":149},[143,87021,954],{"class":153},[143,87023,183],{"class":149},[143,87025,87026,87029],{"class":145,"line":701},[143,87027,87028],{"class":156},"    .modal",[143,87030,275],{"class":149},[143,87032,87033,87035,87037,87039,87041],{"class":145,"line":707},[143,87034,55656],{"class":280},[143,87036,284],{"class":149},[143,87038,4873],{"class":280},[143,87040,774],{"class":755},[143,87042,290],{"class":149},[143,87044,87045,87048,87050,87052,87054],{"class":145,"line":727},[143,87046,87047],{"class":280},"      min-height",[143,87049,284],{"class":149},[143,87051,1352],{"class":280},[143,87053,774],{"class":755},[143,87055,290],{"class":149},[143,87057,87058,87060,87062,87064,87066,87068,87070,87072,87074,87076,87078,87080,87082,87084,87086,87089],{"class":145,"line":2518},[143,87059,79628],{"class":280},[143,87061,284],{"class":149},[143,87063,1234],{"class":280},[143,87065,4993],{"class":280},[143,87067,2938],{"class":280},[143,87069,774],{"class":755},[143,87071,79645],{"class":280},[143,87073,1049],{"class":149},[143,87075,1234],{"class":280},[143,87077,13335],{"class":149},[143,87079,1234],{"class":280},[143,87081,13335],{"class":149},[143,87083,1234],{"class":280},[143,87085,13335],{"class":149},[143,87087,87088],{"class":280},"0.1",[143,87090,3619],{"class":149},[143,87092,87093,87095,87097,87099,87101],{"class":145,"line":2524},[143,87094,56019],{"class":280},[143,87096,284],{"class":149},[143,87098,1334],{"class":280},[143,87100,774],{"class":755},[143,87102,290],{"class":149},[143,87104,87105,87107,87109,87112],{"class":145,"line":2529},[143,87106,55644],{"class":280},[143,87108,284],{"class":149},[143,87110,87111],{"class":280},"fixed",[143,87113,290],{"class":149},[143,87115,87116,87119,87121,87124],{"class":145,"line":2543},[143,87117,87118],{"class":280},"      z-index",[143,87120,284],{"class":149},[143,87122,87123],{"class":280},"999",[143,87125,290],{"class":149},[143,87127,87128,87130,87132,87134,87136],{"class":145,"line":2548},[143,87129,55723],{"class":280},[143,87131,284],{"class":149},[143,87133,1697],{"class":280},[143,87135,1369],{"class":755},[143,87137,290],{"class":149},[143,87139,87140,87142,87144,87146,87148],{"class":145,"line":2554},[143,87141,55832],{"class":280},[143,87143,284],{"class":149},[143,87145,1697],{"class":280},[143,87147,1369],{"class":755},[143,87149,290],{"class":149},[143,87151,87152,87154,87156,87158,87160,87163,87165,87167,87169,87171,87173,87175],{"class":145,"line":2575},[143,87153,79669],{"class":280},[143,87155,284],{"class":149},[143,87157,79674],{"class":280},[143,87159,1049],{"class":149},[143,87161,87162],{"class":280},"-50",[143,87164,1369],{"class":755},[143,87166,13335],{"class":149},[143,87168,87162],{"class":280},[143,87170,1369],{"class":755},[143,87172,13335],{"class":149},[143,87174,1234],{"class":280},[143,87176,3619],{"class":149},[143,87178,87179,87181,87183,87185],{"class":145,"line":2580},[143,87180,55769],{"class":280},[143,87182,284],{"class":149},[143,87184,61725],{"class":280},[143,87186,290],{"class":149},[143,87188,87189],{"class":145,"line":2594},[143,87190,3087],{"class":149},[143,87192,87193],{"class":145,"line":2599},[143,87194,3300],{"emptyLinePlaceholder":976},[143,87196,87197,87199,87202],{"class":145,"line":2628},[143,87198,87028],{"class":156},[143,87200,87201],{"class":156}," .header",[143,87203,275],{"class":149},[143,87205,87206,87208,87210,87212,87214],{"class":145,"line":2633},[143,87207,58242],{"class":280},[143,87209,284],{"class":149},[143,87211,1442],{"class":280},[143,87213,774],{"class":755},[143,87215,290],{"class":149},[143,87217,87218,87220,87222,87224,87226,87228],{"class":145,"line":2650},[143,87219,55580],{"class":280},[143,87221,284],{"class":149},[143,87223,1234],{"class":280},[143,87225,2938],{"class":280},[143,87227,774],{"class":755},[143,87229,290],{"class":149},[143,87231,87232,87234,87236,87238],{"class":145,"line":2655},[143,87233,55644],{"class":280},[143,87235,284],{"class":149},[143,87237,55649],{"class":280},[143,87239,290],{"class":149},[143,87241,87242,87244,87246,87248,87250],{"class":145,"line":2660},[143,87243,55807],{"class":280},[143,87245,284],{"class":149},[143,87247,1741],{"class":280},[143,87249,774],{"class":755},[143,87251,290],{"class":149},[143,87253,87254],{"class":145,"line":2665},[143,87255,3087],{"class":149},[143,87257,87258],{"class":145,"line":2679},[143,87259,3300],{"emptyLinePlaceholder":976},[143,87261,87262,87264,87266,87268],{"class":145,"line":2684},[143,87263,87028],{"class":156},[143,87265,87201],{"class":156},[143,87267,3932],{"class":153},[143,87269,275],{"class":149},[143,87271,87272,87275,87277,87279],{"class":145,"line":3477},[143,87273,87274],{"class":280},"      font-style",[143,87276,284],{"class":149},[143,87278,64723],{"class":280},[143,87280,290],{"class":149},[143,87282,87283,87285,87287,87289],{"class":145,"line":3491},[143,87284,58299],{"class":280},[143,87286,284],{"class":149},[143,87288,62953],{"class":280},[143,87290,290],{"class":149},[143,87292,87293,87295,87297,87299],{"class":145,"line":3499},[143,87294,55644],{"class":280},[143,87296,284],{"class":149},[143,87298,55716],{"class":280},[143,87300,290],{"class":149},[143,87302,87303,87306,87308,87310,87312],{"class":145,"line":3504},[143,87304,87305],{"class":280},"      right",[143,87307,284],{"class":149},[143,87309,1616],{"class":280},[143,87311,774],{"class":755},[143,87313,290],{"class":149},[143,87315,87316,87318,87320,87323,87325],{"class":145,"line":3510},[143,87317,55832],{"class":280},[143,87319,284],{"class":149},[143,87321,87322],{"class":280},"-2",[143,87324,774],{"class":755},[143,87326,290],{"class":149},[143,87328,87329,87331,87333,87335],{"class":145,"line":3516},[143,87330,62908],{"class":280},[143,87332,284],{"class":149},[143,87334,62913],{"class":280},[143,87336,290],{"class":149},[143,87338,87339],{"class":145,"line":3521},[143,87340,3087],{"class":149},[143,87342,87343],{"class":145,"line":8848},[143,87344,3300],{"emptyLinePlaceholder":976},[143,87346,87347,87349,87352],{"class":145,"line":8872},[143,87348,87028],{"class":156},[143,87350,87351],{"class":156}," .body",[143,87353,275],{"class":149},[143,87355,87356,87358,87360,87362],{"class":145,"line":8877},[143,87357,58169],{"class":280},[143,87359,284],{"class":149},[143,87361,327],{"class":280},[143,87363,290],{"class":149},[143,87365,87366,87368,87370,87372,87374],{"class":145,"line":8883},[143,87367,55580],{"class":280},[143,87369,284],{"class":149},[143,87371,1487],{"class":280},[143,87373,774],{"class":755},[143,87375,290],{"class":149},[143,87377,87378],{"class":145,"line":8910},[143,87379,3087],{"class":149},[143,87381,87382],{"class":145,"line":8915},[143,87383,3300],{"emptyLinePlaceholder":976},[143,87385,87386,87388,87391],{"class":145,"line":8921},[143,87387,87028],{"class":156},[143,87389,87390],{"class":156}," .footer",[143,87392,275],{"class":149},[143,87394,87395,87397,87399,87401],{"class":145,"line":8933},[143,87396,55894],{"class":280},[143,87398,284],{"class":149},[143,87400,287],{"class":280},[143,87402,290],{"class":149},[143,87404,87405,87407,87409,87411],{"class":145,"line":8945},[143,87406,55905],{"class":280},[143,87408,284],{"class":149},[143,87410,52472],{"class":280},[143,87412,290],{"class":149},[143,87414,87415,87417,87419,87421,87423],{"class":145,"line":8957},[143,87416,55580],{"class":280},[143,87418,284],{"class":149},[143,87420,1487],{"class":280},[143,87422,774],{"class":755},[143,87424,290],{"class":149},[143,87426,87427],{"class":145,"line":10616},[143,87428,3087],{"class":149},[143,87430,87431],{"class":145,"line":10641},[143,87432,3300],{"emptyLinePlaceholder":976},[143,87434,87435,87437,87439,87441],{"class":145,"line":10664},[143,87436,87028],{"class":156},[143,87438,87390],{"class":156},[143,87440,2302],{"class":153},[143,87442,275],{"class":149},[143,87444,87445,87447,87449,87451,87453,87455,87457],{"class":145,"line":10688},[143,87446,55580],{"class":280},[143,87448,284],{"class":149},[143,87450,1116],{"class":280},[143,87452,774],{"class":755},[143,87454,2983],{"class":280},[143,87456,774],{"class":755},[143,87458,290],{"class":149},[143,87460,87461,87463,87465,87468],{"class":145,"line":10693},[143,87462,62604],{"class":280},[143,87464,284],{"class":149},[143,87466,87467],{"class":280},"#ccc",[143,87469,290],{"class":149},[143,87471,87472,87474,87476,87478],{"class":145,"line":10698},[143,87473,64852],{"class":280},[143,87475,284],{"class":149},[143,87477,55622],{"class":280},[143,87479,290],{"class":149},[143,87481,87482,87484,87486,87488],{"class":145,"line":10703},[143,87483,58299],{"class":280},[143,87485,284],{"class":149},[143,87487,61725],{"class":280},[143,87489,290],{"class":149},[143,87491,87492,87494,87496,87498,87500],{"class":145,"line":10712},[143,87493,56019],{"class":280},[143,87495,284],{"class":149},[143,87497,1122],{"class":280},[143,87499,774],{"class":755},[143,87501,290],{"class":149},[143,87503,87504,87506,87508,87510,87512],{"class":145,"line":10717},[143,87505,62633],{"class":280},[143,87507,284],{"class":149},[143,87509,1487],{"class":280},[143,87511,774],{"class":755},[143,87513,290],{"class":149},[143,87515,87516,87518,87520,87522,87524],{"class":145,"line":10723},[143,87517,55807],{"class":280},[143,87519,284],{"class":149},[143,87521,1590],{"class":280},[143,87523,774],{"class":755},[143,87525,290],{"class":149},[143,87527,87528],{"class":145,"line":10744},[143,87529,3087],{"class":149},[143,87531,87532],{"class":145,"line":10750},[143,87533,3300],{"emptyLinePlaceholder":976},[143,87535,87536,87538,87540,87542,87545],{"class":145,"line":10764},[143,87537,87028],{"class":156},[143,87539,87390],{"class":156},[143,87541,2302],{"class":153},[143,87543,87544],{"class":156},".submit",[143,87546,275],{"class":149},[143,87548,87549,87551,87553,87556],{"class":145,"line":10770},[143,87550,55769],{"class":280},[143,87552,284],{"class":149},[143,87554,87555],{"class":280},"#369",[143,87557,290],{"class":149},[143,87559,87560],{"class":145,"line":10797},[143,87561,3087],{"class":149},[143,87563,87564,87566,87568],{"class":145,"line":10806},[143,87565,53304],{"class":149},[143,87567,954],{"class":153},[143,87569,183],{"class":149},[143,87571,87572,87574,87576],{"class":145,"line":10812},[143,87573,730],{"class":149},[143,87575,52230],{"class":153},[143,87577,183],{"class":149},[143,87579,87580],{"class":145,"line":10820},[143,87581,3300],{"emptyLinePlaceholder":976},[143,87583,87584,87586,87588],{"class":145,"line":10825},[143,87585,150],{"class":149},[143,87587,52688],{"class":153},[143,87589,183],{"class":149},[143,87591,87592,87594,87596,87598,87600,87603,87606,87608],{"class":145,"line":17502},[143,87593,634],{"class":149},[143,87595,54772],{"class":153},[143,87597,15858],{"class":156},[143,87599,160],{"class":149},[143,87601,87602],{"class":163},"\"delete\"",[143,87604,87605],{"class":149},">删除\u003C\u002F",[143,87607,54772],{"class":153},[143,87609,183],{"class":149},[143,87611,87612,87614,87616,87618,87620,87623,87626,87628],{"class":145,"line":17508},[143,87613,634],{"class":149},[143,87615,54772],{"class":153},[143,87617,15858],{"class":156},[143,87619,160],{"class":149},[143,87621,87622],{"class":163},"\"login\"",[143,87624,87625],{"class":149},">登录\u003C\u002F",[143,87627,54772],{"class":153},[143,87629,183],{"class":149},[143,87631,87632,87634,87636],{"class":145,"line":17531},[143,87633,634],{"class":149},[143,87635,52701],{"class":153},[143,87637,183],{"class":149},[143,87639,87640],{"class":145,"line":17537},[143,87641,87642],{"class":266},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[143,87644,87645,87647,87650,87652,87654,87656,87658,87660,87663,87665,87667],{"class":145,"line":17560},[143,87646,70965],{"class":755},[143,87648,87649],{"class":156}," Modal",[143,87651,1049],{"class":149},[143,87653,52303],{"class":6116},[143,87655,14464],{"class":755},[143,87657,70811],{"class":163},[143,87659,13335],{"class":149},[143,87661,87662],{"class":6116},"message",[143,87664,14464],{"class":755},[143,87666,70811],{"class":163},[143,87668,13342],{"class":149},[143,87670,87671],{"class":145,"line":17574},[143,87672,87673],{"class":266},"      \u002F\u002F 创建Model 模态框盒子\n",[143,87675,87676],{"class":145,"line":17594},[143,87677,87678],{"class":266},"      \u002F\u002F 1.1 创建div标签\n",[143,87680,87681,87683,87686,87688,87690,87692,87694,87696],{"class":145,"line":17600},[143,87682,70932],{"class":280},[143,87684,87685],{"class":149},".modalBox ",[143,87687,160],{"class":755},[143,87689,55281],{"class":149},[143,87691,71032],{"class":156},[143,87693,1049],{"class":149},[143,87695,82809],{"class":163},[143,87697,1055],{"class":149},[143,87699,87700],{"class":145,"line":17611},[143,87701,87702],{"class":266},"      \u002F\u002F 1.2 给div 添加类名为model\n",[143,87704,87705,87707,87710,87712],{"class":145,"line":17634},[143,87706,70932],{"class":280},[143,87708,87709],{"class":149},".modalBox.className ",[143,87711,160],{"class":755},[143,87713,87714],{"class":163}," 'modal'\n",[143,87716,87717],{"class":145,"line":17656},[143,87718,87719],{"class":266},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[143,87721,87722,87724,87727,87729],{"class":145,"line":17661},[143,87723,70932],{"class":280},[143,87725,87726],{"class":149},".modalBox.innerHTML ",[143,87728,160],{"class":755},[143,87730,71049],{"class":163},[143,87732,87733,87736,87738],{"class":145,"line":17667},[143,87734,87735],{"class":163},"        \u003Cdiv class=\"header\">${",[143,87737,52303],{"class":149},[143,87739,87740],{"class":163},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[143,87742,87743,87746,87748],{"class":145,"line":17681},[143,87744,87745],{"class":163},"        \u003Cdiv class=\"body\">${",[143,87747,87662],{"class":149},[143,87749,87750],{"class":163},"}\u003C\u002Fdiv>\n",[143,87752,87753],{"class":145,"line":17694},[143,87754,87755],{"class":163},"      `\n",[143,87757,87758],{"class":145,"line":17699},[143,87759,87760],{"class":266},"      \u002F\u002F console.log(this.modalBox)\n",[143,87762,87763],{"class":145,"line":17713},[143,87764,3087],{"class":149},[143,87766,87767],{"class":145,"line":17718},[143,87768,87769],{"class":266},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[143,87771,87772],{"class":145,"line":17724},[143,87773,87774],{"class":266},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[143,87776,87777],{"class":145,"line":17729},[143,87778,87779],{"class":266},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[143,87781,87782,87785,87787,87789,87791,87794,87796,87798],{"class":145,"line":17743},[143,87783,87784],{"class":280},"    Modal",[143,87786,1599],{"class":149},[143,87788,86457],{"class":280},[143,87790,1599],{"class":149},[143,87792,87793],{"class":156},"open",[143,87795,14464],{"class":755},[143,87797,59801],{"class":755},[143,87799,55337],{"class":149},[143,87801,87802],{"class":145,"line":17748},[143,87803,87804],{"class":266},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[143,87806,87807,87809,87812,87814,87816,87818,87820,87823],{"class":145,"line":17753},[143,87808,59111],{"class":755},[143,87810,87811],{"class":280}," box",[143,87813,14464],{"class":755},[143,87815,55281],{"class":149},[143,87817,55284],{"class":156},[143,87819,1049],{"class":149},[143,87821,87822],{"class":163},"'.modal'",[143,87824,1055],{"class":149},[143,87826,87827],{"class":145,"line":17767},[143,87828,87829],{"class":266},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[143,87831,87832,87835,87837,87840,87842],{"class":145,"line":17779},[143,87833,87834],{"class":149},"      box ",[143,87836,2616],{"class":755},[143,87838,87839],{"class":149}," box.",[143,87841,57889],{"class":156},[143,87843,2876],{"class":149},[143,87845,87846],{"class":145,"line":17784},[143,87847,87848],{"class":266},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[143,87850,87851],{"class":145,"line":17797},[143,87852,87853],{"class":266},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[143,87855,87856],{"class":145,"line":17802},[143,87857,87858],{"class":266},"      \u002F\u002F append可以增加对象\n",[143,87860,87861,87864,87867,87869,87872],{"class":145,"line":17807},[143,87862,87863],{"class":149},"      document.body.",[143,87865,87866],{"class":156},"append",[143,87868,1049],{"class":149},[143,87870,87871],{"class":280},"this",[143,87873,87874],{"class":149},".modalBox)\n",[143,87876,87877],{"class":145,"line":17812},[143,87878,3300],{"emptyLinePlaceholder":976},[143,87880,87881],{"class":145,"line":17825},[143,87882,87883],{"class":266},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[143,87885,87886,87888,87891,87893,87895,87898,87900,87902,87904,87906,87909,87911],{"class":145,"line":17830},[143,87887,70932],{"class":280},[143,87889,87890],{"class":149},".modalBox.",[143,87892,55284],{"class":156},[143,87894,1049],{"class":149},[143,87896,87897],{"class":163},"'i'",[143,87899,31724],{"class":149},[143,87901,58696],{"class":156},[143,87903,1049],{"class":149},[143,87905,58701],{"class":163},[143,87907,87908],{"class":149},", () ",[143,87910,85600],{"class":755},[143,87912,275],{"class":149},[143,87914,87915],{"class":145,"line":33531},[143,87916,87917],{"class":266},"        \u002F\u002F 这个地方需要用到箭头函数\n",[143,87919,87920],{"class":145,"line":33537},[143,87921,87922],{"class":266},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[143,87924,87925],{"class":145,"line":33543},[143,87926,87927],{"class":266},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[143,87929,87930,87932,87934,87937],{"class":145,"line":33549},[143,87931,65608],{"class":280},[143,87933,1599],{"class":149},[143,87935,87936],{"class":156},"close",[143,87938,2876],{"class":149},[143,87940,87941],{"class":145,"line":33555},[143,87942,65697],{"class":149},[143,87944,87945],{"class":145,"line":33566},[143,87946,3087],{"class":149},[143,87948,87949],{"class":145,"line":33572},[143,87950,3300],{"emptyLinePlaceholder":976},[143,87952,87953],{"class":145,"line":33592},[143,87954,87955],{"class":266},"    \u002F\u002F 测试一下 点击 删除按钮\n",[143,87957,87958,87960,87962,87964,87967,87969,87971,87973,87975,87977,87979],{"class":145,"line":33598},[143,87959,53294],{"class":149},[143,87961,55284],{"class":156},[143,87963,1049],{"class":149},[143,87965,87966],{"class":163},"'#delete'",[143,87968,31724],{"class":149},[143,87970,58696],{"class":156},[143,87972,1049],{"class":149},[143,87974,58701],{"class":163},[143,87976,87908],{"class":149},[143,87978,85600],{"class":755},[143,87980,275],{"class":149},[143,87982,87983],{"class":145,"line":33609},[143,87984,87985],{"class":266},"      \u002F\u002F 先调用Model构造函数\n",[143,87987,87988,87990,87993,87995,87997,87999,88001,88004,88006,88009],{"class":145,"line":33615},[143,87989,59111],{"class":755},[143,87991,87992],{"class":280}," del",[143,87994,14464],{"class":755},[143,87996,12478],{"class":755},[143,87998,87649],{"class":156},[143,88000,1049],{"class":149},[143,88002,88003],{"class":163},"'温馨的提示'",[143,88005,13335],{"class":149},[143,88007,88008],{"class":163},"'您没有删除权限操作'",[143,88010,1055],{"class":149},[143,88012,88013],{"class":145,"line":33621},[143,88014,88015],{"class":266},"      \u002F\u002F 实例对象调用open方法\n",[143,88017,88018,88021,88023],{"class":145,"line":33627},[143,88019,88020],{"class":149},"      del.",[143,88022,87793],{"class":156},[143,88024,2876],{"class":149},[143,88026,88027],{"class":145,"line":33633},[143,88028,34359],{"class":149},[143,88030,88031],{"class":145,"line":33639},[143,88032,88033],{"class":266},"    \u002F\u002F 测试一下 点击 登录按钮\n",[143,88035,88036,88038,88040,88042,88045,88047,88049,88051,88053,88055,88057],{"class":145,"line":33645},[143,88037,53294],{"class":149},[143,88039,55284],{"class":156},[143,88041,1049],{"class":149},[143,88043,88044],{"class":163},"'#login'",[143,88046,31724],{"class":149},[143,88048,58696],{"class":156},[143,88050,1049],{"class":149},[143,88052,58701],{"class":163},[143,88054,87908],{"class":149},[143,88056,85600],{"class":755},[143,88058,275],{"class":149},[143,88060,88061],{"class":145,"line":33651},[143,88062,87985],{"class":266},[143,88064,88065,88067,88070,88072,88074,88076,88078,88081,88083,88086],{"class":145,"line":33671},[143,88066,59111],{"class":755},[143,88068,88069],{"class":280}," log",[143,88071,14464],{"class":755},[143,88073,12478],{"class":755},[143,88075,87649],{"class":156},[143,88077,1049],{"class":149},[143,88079,88080],{"class":163},"'友情提示'",[143,88082,13335],{"class":149},[143,88084,88085],{"class":163},"'您还没有登录呢'",[143,88087,1055],{"class":149},[143,88089,88090],{"class":145,"line":33677},[143,88091,88015],{"class":266},[143,88093,88094,88097,88099],{"class":145,"line":33693},[143,88095,88096],{"class":149},"      log.",[143,88098,87793],{"class":156},[143,88100,2876],{"class":149},[143,88102,88103],{"class":145,"line":33699},[143,88104,34359],{"class":149},[143,88106,88107],{"class":145,"line":33713},[143,88108,88109],{"class":266},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[143,88111,88112,88114,88116,88118,88120,88122,88124,88126],{"class":145,"line":33719},[143,88113,87784],{"class":280},[143,88115,1599],{"class":149},[143,88117,86457],{"class":280},[143,88119,1599],{"class":149},[143,88121,87936],{"class":156},[143,88123,14464],{"class":755},[143,88125,59801],{"class":755},[143,88127,55337],{"class":149},[143,88129,88130,88132,88134,88136],{"class":145,"line":33734},[143,88131,70932],{"class":280},[143,88133,87890],{"class":149},[143,88135,57889],{"class":156},[143,88137,2876],{"class":149},[143,88139,88140],{"class":145,"line":33740},[143,88141,3087],{"class":149},[143,88143,88144,88146,88148],{"class":145,"line":33749},[143,88145,53304],{"class":149},[143,88147,52701],{"class":153},[143,88149,183],{"class":149},[143,88151,88152,88154,88156],{"class":145,"line":33755},[143,88153,730],{"class":149},[143,88155,52688],{"class":153},[143,88157,183],{"class":149},[143,88159,88160],{"class":145,"line":33764},[143,88161,3300],{"emptyLinePlaceholder":976},[143,88163,88164,88166,88168],{"class":145,"line":33770},[143,88165,730],{"class":149},[143,88167,51533],{"class":153},[143,88169,183],{"class":149},[63,88171,88172],{},[29,88173],{"alt":138,"src":88174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88176,88178],{"id":88177},"_414-深浅拷贝","4.14 深浅拷贝",[58,88180,88182],{"id":88181},"_4141-浅拷贝","4.14.1 浅拷贝",[63,88184,88185],{},[29,88186],{"alt":138,"src":88187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[63,88189,88190],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[63,88192,88193],{},[29,88194],{"alt":138,"src":88195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[63,88197,88198],{},[29,88199],{"alt":138,"src":88200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[63,88202,88203],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[63,88205,88206],{},[29,88207],{"alt":138,"src":88208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[63,88210,12232],{},[63,88212,88213],{},[29,88214],{"alt":138,"src":88215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[58,88217,88219],{"id":88218},"_4142-深拷贝","4.14.2 深拷贝",[63,88221,88222],{},"深拷贝：拷贝的是对象，不是地址",[63,88224,88225],{},"常用的三种方法：",[19,88227,88228,88231,88234],{},[22,88229,88230],{},"通过递归实现深拷贝",[22,88232,88233],{},"lodash\u002FcloneDeep",[22,88235,88236],{},"通过JSON.stringify()实现",[22896,88238,88240],{"id":88239},"_41421-递归函数","4.14.2.1 递归函数",[63,88242,88243],{},[29,88244],{"alt":138,"src":88245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[19,88247,88248],{},[22,88249,88250],{},"死递归占溢出：",[133,88252,88254],{"className":53954,"code":88253,"language":53956,"meta":138,"style":138},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[140,88255,88256,88264,88272,88276,88281,88285,88290,88298],{"__ignoreMap":138},[143,88257,88258,88260,88262],{"class":145,"line":146},[143,88259,150],{"class":149},[143,88261,52688],{"class":153},[143,88263,183],{"class":149},[143,88265,88266,88268,88270],{"class":145,"line":35},[143,88267,634],{"class":149},[143,88269,52701],{"class":153},[143,88271,183],{"class":149},[143,88273,88274],{"class":145,"line":46},[143,88275,78022],{"class":149},[143,88277,88278],{"class":145,"line":293},[143,88279,88280],{"class":149},"      fn()\n",[143,88282,88283],{"class":145,"line":306},[143,88284,3087],{"class":149},[143,88286,88287],{"class":145,"line":319},[143,88288,88289],{"class":149},"    fn()\n",[143,88291,88292,88294,88296],{"class":145,"line":332},[143,88293,53304],{"class":149},[143,88295,52701],{"class":153},[143,88297,183],{"class":149},[143,88299,88300,88302,88304],{"class":145,"line":345},[143,88301,730],{"class":149},[143,88303,52688],{"class":153},[143,88305,183],{"class":149},[19,88307,88308],{"start":35},[22,88309,88310],{},"递归函数要加判断条件：",[63,88312,88313],{},[29,88314],{"alt":138,"src":88315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[19,88317,88318],{"start":46},[22,88319,88320],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[133,88322,88324],{"className":51531,"code":88323,"language":51533,"meta":138,"style":138},"\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",[140,88325,88326,88336,88350,88354,88362,88376,88396,88408,88416,88420,88428,88440,88448,88456,88481,88493,88497,88504,88512,88520,88524],{"__ignoreMap":138},[143,88327,88328,88330,88332,88334],{"class":145,"line":146},[143,88329,52195],{"class":149},[143,88331,52198],{"class":153},[143,88333,52201],{"class":156},[143,88335,183],{"class":149},[143,88337,88338,88340,88342,88344,88346,88348],{"class":145,"line":35},[143,88339,150],{"class":149},[143,88341,51533],{"class":153},[143,88343,52212],{"class":156},[143,88345,160],{"class":149},[143,88347,52217],{"class":163},[143,88349,183],{"class":149},[143,88351,88352],{"class":145,"line":46},[143,88353,3300],{"emptyLinePlaceholder":976},[143,88355,88356,88358,88360],{"class":145,"line":293},[143,88357,150],{"class":149},[143,88359,52230],{"class":153},[143,88361,183],{"class":149},[143,88363,88364,88366,88368,88370,88372,88374],{"class":145,"line":306},[143,88365,634],{"class":149},[143,88367,52240],{"class":153},[143,88369,52243],{"class":156},[143,88371,160],{"class":149},[143,88373,52248],{"class":163},[143,88375,183],{"class":149},[143,88377,88378,88380,88382,88384,88386,88388,88390,88392,88394],{"class":145,"line":319},[143,88379,634],{"class":149},[143,88381,52240],{"class":153},[143,88383,15819],{"class":156},[143,88385,160],{"class":149},[143,88387,52287],{"class":163},[143,88389,52267],{"class":156},[143,88391,160],{"class":149},[143,88393,52294],{"class":163},[143,88395,183],{"class":149},[143,88397,88398,88400,88402,88404,88406],{"class":145,"line":332},[143,88399,634],{"class":149},[143,88401,52303],{"class":153},[143,88403,52306],{"class":149},[143,88405,52303],{"class":153},[143,88407,183],{"class":149},[143,88409,88410,88412,88414],{"class":145,"line":345},[143,88411,730],{"class":149},[143,88413,52230],{"class":153},[143,88415,183],{"class":149},[143,88417,88418],{"class":145,"line":701},[143,88419,3300],{"emptyLinePlaceholder":976},[143,88421,88422,88424,88426],{"class":145,"line":707},[143,88423,150],{"class":149},[143,88425,52688],{"class":153},[143,88427,183],{"class":149},[143,88429,88430,88432,88434,88436,88438],{"class":145,"line":727},[143,88431,634],{"class":149},[143,88433,614],{"class":153},[143,88435,56197],{"class":149},[143,88437,614],{"class":153},[143,88439,183],{"class":149},[143,88441,88442,88444,88446],{"class":145,"line":2518},[143,88443,634],{"class":149},[143,88445,52701],{"class":153},[143,88447,183],{"class":149},[143,88449,88450,88452,88454],{"class":145,"line":2524},[143,88451,70965],{"class":755},[143,88453,74652],{"class":156},[143,88455,11753],{"class":149},[143,88457,88458,88460,88462,88464,88466,88468,88470,88472,88474,88476,88479],{"class":145,"line":2529},[143,88459,56654],{"class":149},[143,88461,55284],{"class":156},[143,88463,1049],{"class":149},[143,88465,82809],{"class":163},[143,88467,75128],{"class":149},[143,88469,160],{"class":755},[143,88471,12478],{"class":755},[143,88473,74668],{"class":156},[143,88475,18159],{"class":149},[143,88477,88478],{"class":156},"toLocaleString",[143,88480,2876],{"class":149},[143,88482,88483,88486,88489,88491],{"class":145,"line":2543},[143,88484,88485],{"class":156},"      setTimeout",[143,88487,88488],{"class":149},"(getTime, ",[143,88490,7310],{"class":280},[143,88492,1055],{"class":149},[143,88494,88495],{"class":145,"line":2548},[143,88496,3087],{"class":149},[143,88498,88499,88502],{"class":145,"line":2554},[143,88500,88501],{"class":156},"    getTime",[143,88503,2876],{"class":149},[143,88505,88506,88508,88510],{"class":145,"line":2575},[143,88507,53304],{"class":149},[143,88509,52701],{"class":153},[143,88511,183],{"class":149},[143,88513,88514,88516,88518],{"class":145,"line":2580},[143,88515,730],{"class":149},[143,88517,52688],{"class":153},[143,88519,183],{"class":149},[143,88521,88522],{"class":145,"line":2594},[143,88523,3300],{"emptyLinePlaceholder":976},[143,88525,88526,88528,88530],{"class":145,"line":2599},[143,88527,730],{"class":149},[143,88529,51533],{"class":153},[143,88531,183],{"class":149},[63,88533,88534],{},[29,88535],{"alt":138,"src":88536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[19,88538,88539],{"start":293},[22,88540,88230],{},[63,88542,88543],{},[29,88544],{"alt":138,"src":88545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[63,88547,88548],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[63,88550,40087],{},[63,88552,88553],{},"这个是简易版的递归函数深拷贝",[63,88555,88556],{},"一定要注意先数组再对象，因为万物皆可对象",[133,88558,88560],{"className":51531,"code":88559,"language":51533,"meta":138,"style":138},"\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",[140,88561,88562,88572,88586,88590,88598,88612,88632,88644,88652,88656,88664,88672,88682,88691,88699,88715,88719,88727,88731,88735,88747,88752,88771,88787,88792,88797,88802,88817,88822,88827,88836,88844,88861,88869,88875,88883,88888,88893,88902,88906,88910,88914,88925,88934,88944,88958,88968,88976,88984,88992,88996],{"__ignoreMap":138},[143,88563,88564,88566,88568,88570],{"class":145,"line":146},[143,88565,52195],{"class":149},[143,88567,52198],{"class":153},[143,88569,52201],{"class":156},[143,88571,183],{"class":149},[143,88573,88574,88576,88578,88580,88582,88584],{"class":145,"line":35},[143,88575,150],{"class":149},[143,88577,51533],{"class":153},[143,88579,52212],{"class":156},[143,88581,160],{"class":149},[143,88583,52217],{"class":163},[143,88585,183],{"class":149},[143,88587,88588],{"class":145,"line":46},[143,88589,3300],{"emptyLinePlaceholder":976},[143,88591,88592,88594,88596],{"class":145,"line":293},[143,88593,150],{"class":149},[143,88595,52230],{"class":153},[143,88597,183],{"class":149},[143,88599,88600,88602,88604,88606,88608,88610],{"class":145,"line":306},[143,88601,634],{"class":149},[143,88603,52240],{"class":153},[143,88605,52243],{"class":156},[143,88607,160],{"class":149},[143,88609,52248],{"class":163},[143,88611,183],{"class":149},[143,88613,88614,88616,88618,88620,88622,88624,88626,88628,88630],{"class":145,"line":319},[143,88615,634],{"class":149},[143,88617,52240],{"class":153},[143,88619,15819],{"class":156},[143,88621,160],{"class":149},[143,88623,52287],{"class":163},[143,88625,52267],{"class":156},[143,88627,160],{"class":149},[143,88629,52294],{"class":163},[143,88631,183],{"class":149},[143,88633,88634,88636,88638,88640,88642],{"class":145,"line":332},[143,88635,634],{"class":149},[143,88637,52303],{"class":153},[143,88639,52306],{"class":149},[143,88641,52303],{"class":153},[143,88643,183],{"class":149},[143,88645,88646,88648,88650],{"class":145,"line":345},[143,88647,730],{"class":149},[143,88649,52230],{"class":153},[143,88651,183],{"class":149},[143,88653,88654],{"class":145,"line":701},[143,88655,3300],{"emptyLinePlaceholder":976},[143,88657,88658,88660,88662],{"class":145,"line":707},[143,88659,150],{"class":149},[143,88661,52688],{"class":153},[143,88663,183],{"class":149},[143,88665,88666,88668,88670],{"class":145,"line":727},[143,88667,634],{"class":149},[143,88669,52701],{"class":153},[143,88671,183],{"class":149},[143,88673,88674,88676,88678,88680],{"class":145,"line":2518},[143,88675,12121],{"class":755},[143,88677,70852],{"class":280},[143,88679,14464],{"class":755},[143,88681,275],{"class":149},[143,88683,88684,88686,88689],{"class":145,"line":2524},[143,88685,72495],{"class":149},[143,88687,88688],{"class":163},"'pink'",[143,88690,32364],{"class":149},[143,88692,88693,88695,88697],{"class":145,"line":2529},[143,88694,72505],{"class":149},[143,88696,1691],{"class":280},[143,88698,32364],{"class":149},[143,88700,88701,88704,88707,88709,88712],{"class":145,"line":2543},[143,88702,88703],{"class":149},"      hobby: [",[143,88705,88706],{"class":163},"'乒乓球'",[143,88708,13335],{"class":149},[143,88710,88711],{"class":163},"'足球'",[143,88713,88714],{"class":149},"],\n",[143,88716,88717],{"class":145,"line":2548},[143,88718,78751],{"class":149},[143,88720,88721,88724],{"class":145,"line":2554},[143,88722,88723],{"class":149},"        baby: ",[143,88725,88726],{"class":163},"'小pink'\n",[143,88728,88729],{"class":145,"line":2575},[143,88730,53285],{"class":149},[143,88732,88733],{"class":145,"line":2580},[143,88734,3087],{"class":149},[143,88736,88737,88739,88742,88744],{"class":145,"line":2594},[143,88738,12121],{"class":755},[143,88740,88741],{"class":280}," o",[143,88743,14464],{"class":755},[143,88745,88746],{"class":149}," {}\n",[143,88748,88749],{"class":145,"line":2599},[143,88750,88751],{"class":266},"    \u002F\u002F 拷贝函数\n",[143,88753,88754,88756,88759,88761,88764,88766,88769],{"class":145,"line":2628},[143,88755,70965],{"class":755},[143,88757,88758],{"class":156}," deepCopy",[143,88760,1049],{"class":149},[143,88762,88763],{"class":6116},"newObj",[143,88765,13335],{"class":149},[143,88767,88768],{"class":6116},"oldObj",[143,88770,13342],{"class":149},[143,88772,88773,88775,88777,88779,88782,88784],{"class":145,"line":2633},[143,88774,53171],{"class":755},[143,88776,2559],{"class":149},[143,88778,52735],{"class":755},[143,88780,88781],{"class":149}," k ",[143,88783,26941],{"class":755},[143,88785,88786],{"class":149}," oldObj) {\n",[143,88788,88789],{"class":145,"line":2650},[143,88790,88791],{"class":266},"        \u002F\u002F 处理数组的问题\n",[143,88793,88794],{"class":145,"line":2655},[143,88795,88796],{"class":266},"        \u002F\u002F 判断是否属于数组\n",[143,88798,88799],{"class":145,"line":2660},[143,88800,88801],{"class":266},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[143,88803,88804,88806,88809,88812,88815],{"class":145,"line":2665},[143,88805,3397],{"class":755},[143,88807,88808],{"class":149}," (oldObj[k] ",[143,88810,88811],{"class":755},"instanceof",[143,88813,88814],{"class":156}," Array",[143,88816,13342],{"class":149},[143,88818,88819],{"class":145,"line":2679},[143,88820,88821],{"class":266},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[143,88823,88824],{"class":145,"line":2684},[143,88825,88826],{"class":266},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[143,88828,88829,88832,88834],{"class":145,"line":3477},[143,88830,88831],{"class":149},"          newObj[k] ",[143,88833,160],{"class":755},[143,88835,52726],{"class":149},[143,88837,88838,88841],{"class":145,"line":3491},[143,88839,88840],{"class":156},"          deepCopy",[143,88842,88843],{"class":149},"(newObj[k], oldObj[k])\n",[143,88845,88846,88848,88850,88852,88854,88856,88859],{"class":145,"line":3499},[143,88847,80958],{"class":149},[143,88849,2602],{"class":755},[143,88851,2605],{"class":755},[143,88853,88808],{"class":149},[143,88855,88811],{"class":755},[143,88857,88858],{"class":156}," Object",[143,88860,13342],{"class":149},[143,88862,88863,88865,88867],{"class":145,"line":3504},[143,88864,88831],{"class":149},[143,88866,160],{"class":755},[143,88868,88746],{"class":149},[143,88870,88871,88873],{"class":145,"line":3510},[143,88872,88840],{"class":156},[143,88874,88843],{"class":149},[143,88876,88877,88879,88881],{"class":145,"line":3516},[143,88878,80958],{"class":149},[143,88880,2602],{"class":755},[143,88882,275],{"class":149},[143,88884,88885],{"class":145,"line":3521},[143,88886,88887],{"class":266},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[143,88889,88890],{"class":145,"line":8848},[143,88891,88892],{"class":266},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[143,88894,88895,88897,88899],{"class":145,"line":8872},[143,88896,88831],{"class":149},[143,88898,160],{"class":755},[143,88900,88901],{"class":149}," oldObj[k]\n",[143,88903,88904],{"class":145,"line":8877},[143,88905,3429],{"class":149},[143,88907,88908],{"class":145,"line":8883},[143,88909,53285],{"class":149},[143,88911,88912],{"class":145,"line":8910},[143,88913,3087],{"class":149},[143,88915,88916,88919,88922],{"class":145,"line":8915},[143,88917,88918],{"class":156},"    deepCopy",[143,88920,88921],{"class":149},"(o, obj) ",[143,88923,88924],{"class":266},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[143,88926,88927,88929,88931],{"class":145,"line":8921},[143,88928,74632],{"class":149},[143,88930,59130],{"class":156},[143,88932,88933],{"class":149},"(o)\n",[143,88935,88936,88939,88941],{"class":145,"line":8933},[143,88937,88938],{"class":149},"    o.age ",[143,88940,160],{"class":755},[143,88942,88943],{"class":280}," 20\n",[143,88945,88946,88949,88951,88953,88955],{"class":145,"line":8945},[143,88947,88948],{"class":149},"    o.hobby[",[143,88950,1234],{"class":280},[143,88952,5343],{"class":149},[143,88954,160],{"class":755},[143,88956,88957],{"class":163}," '篮球'\n",[143,88959,88960,88963,88965],{"class":145,"line":8957},[143,88961,88962],{"class":149},"    o.family ",[143,88964,160],{"class":755},[143,88966,88967],{"class":163}," '老pink'\n",[143,88969,88970,88972,88974],{"class":145,"line":10616},[143,88971,74632],{"class":149},[143,88973,59130],{"class":156},[143,88975,70917],{"class":149},[143,88977,88978,88980,88982],{"class":145,"line":10641},[143,88979,53304],{"class":149},[143,88981,52701],{"class":153},[143,88983,183],{"class":149},[143,88985,88986,88988,88990],{"class":145,"line":10664},[143,88987,730],{"class":149},[143,88989,52688],{"class":153},[143,88991,183],{"class":149},[143,88993,88994],{"class":145,"line":10688},[143,88995,3300],{"emptyLinePlaceholder":976},[143,88997,88998,89000,89002],{"class":145,"line":10693},[143,88999,730],{"class":149},[143,89001,51533],{"class":153},[143,89003,183],{"class":149},[63,89005,89006],{},[29,89007],{"alt":138,"src":89008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22896,89010,89012,89013],{"id":89011},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[25,89014,89015],{},"js库lodash里面cloneDeep内部实现了深拷贝",[63,89017,89018],{},[67,89019,89020],{"href":89020,"rel":89021},"https:\u002F\u002Fwww.lodashjs.com\u002F",[71],[63,89023,89024],{},"lodash里边的方法都要加上一个下划线_",[63,89026,89027],{},"_.cloneDeep()",[133,89029,89031],{"className":51531,"code":89030,"language":51533,"meta":138,"style":138},"\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",[140,89032,89033,89043,89057,89061,89069,89083,89103,89115,89123,89127,89135,89140,89159,89167,89177,89185,89193,89205,89209,89215,89219,89223,89239,89247,89256,89264,89272,89280,89284],{"__ignoreMap":138},[143,89034,89035,89037,89039,89041],{"class":145,"line":146},[143,89036,52195],{"class":149},[143,89038,52198],{"class":153},[143,89040,52201],{"class":156},[143,89042,183],{"class":149},[143,89044,89045,89047,89049,89051,89053,89055],{"class":145,"line":35},[143,89046,150],{"class":149},[143,89048,51533],{"class":153},[143,89050,52212],{"class":156},[143,89052,160],{"class":149},[143,89054,52217],{"class":163},[143,89056,183],{"class":149},[143,89058,89059],{"class":145,"line":46},[143,89060,3300],{"emptyLinePlaceholder":976},[143,89062,89063,89065,89067],{"class":145,"line":293},[143,89064,150],{"class":149},[143,89066,52230],{"class":153},[143,89068,183],{"class":149},[143,89070,89071,89073,89075,89077,89079,89081],{"class":145,"line":306},[143,89072,634],{"class":149},[143,89074,52240],{"class":153},[143,89076,52243],{"class":156},[143,89078,160],{"class":149},[143,89080,52248],{"class":163},[143,89082,183],{"class":149},[143,89084,89085,89087,89089,89091,89093,89095,89097,89099,89101],{"class":145,"line":319},[143,89086,634],{"class":149},[143,89088,52240],{"class":153},[143,89090,15819],{"class":156},[143,89092,160],{"class":149},[143,89094,52287],{"class":163},[143,89096,52267],{"class":156},[143,89098,160],{"class":149},[143,89100,52294],{"class":163},[143,89102,183],{"class":149},[143,89104,89105,89107,89109,89111,89113],{"class":145,"line":332},[143,89106,634],{"class":149},[143,89108,52303],{"class":153},[143,89110,52306],{"class":149},[143,89112,52303],{"class":153},[143,89114,183],{"class":149},[143,89116,89117,89119,89121],{"class":145,"line":345},[143,89118,730],{"class":149},[143,89120,52230],{"class":153},[143,89122,183],{"class":149},[143,89124,89125],{"class":145,"line":701},[143,89126,3300],{"emptyLinePlaceholder":976},[143,89128,89129,89131,89133],{"class":145,"line":707},[143,89130,150],{"class":149},[143,89132,52688],{"class":153},[143,89134,183],{"class":149},[143,89136,89137],{"class":145,"line":727},[143,89138,89139],{"class":266},"  \u003C!-- 先引用这个库 -->\n",[143,89141,89142,89144,89146,89148,89150,89153,89155,89157],{"class":145,"line":2518},[143,89143,634],{"class":149},[143,89145,52701],{"class":153},[143,89147,157],{"class":156},[143,89149,160],{"class":149},[143,89151,89152],{"class":163},"\"lodash.min.js\"",[143,89154,56197],{"class":149},[143,89156,52701],{"class":153},[143,89158,183],{"class":149},[143,89160,89161,89163,89165],{"class":145,"line":2524},[143,89162,634],{"class":149},[143,89164,52701],{"class":153},[143,89166,183],{"class":149},[143,89168,89169,89171,89173,89175],{"class":145,"line":2529},[143,89170,12121],{"class":755},[143,89172,70852],{"class":280},[143,89174,14464],{"class":755},[143,89176,275],{"class":149},[143,89178,89179,89181,89183],{"class":145,"line":2543},[143,89180,72495],{"class":149},[143,89182,88688],{"class":163},[143,89184,32364],{"class":149},[143,89186,89187,89189,89191],{"class":145,"line":2548},[143,89188,72505],{"class":149},[143,89190,1691],{"class":280},[143,89192,32364],{"class":149},[143,89194,89195,89197,89199,89201,89203],{"class":145,"line":2554},[143,89196,88703],{"class":149},[143,89198,88706],{"class":163},[143,89200,13335],{"class":149},[143,89202,88711],{"class":163},[143,89204,88714],{"class":149},[143,89206,89207],{"class":145,"line":2575},[143,89208,78751],{"class":149},[143,89210,89211,89213],{"class":145,"line":2580},[143,89212,88723],{"class":149},[143,89214,88726],{"class":163},[143,89216,89217],{"class":145,"line":2594},[143,89218,53285],{"class":149},[143,89220,89221],{"class":145,"line":2599},[143,89222,3087],{"class":149},[143,89224,89225,89227,89229,89231,89234,89237],{"class":145,"line":2628},[143,89226,12121],{"class":755},[143,89228,88741],{"class":280},[143,89230,14464],{"class":755},[143,89232,89233],{"class":149}," _.",[143,89235,89236],{"class":156},"cloneDeep",[143,89238,70917],{"class":149},[143,89240,89241,89243,89245],{"class":145,"line":2633},[143,89242,74632],{"class":149},[143,89244,59130],{"class":156},[143,89246,88933],{"class":149},[143,89248,89249,89252,89254],{"class":145,"line":2650},[143,89250,89251],{"class":149},"    o.family.baby ",[143,89253,160],{"class":755},[143,89255,88967],{"class":163},[143,89257,89258,89260,89262],{"class":145,"line":2655},[143,89259,74632],{"class":149},[143,89261,59130],{"class":156},[143,89263,70917],{"class":149},[143,89265,89266,89268,89270],{"class":145,"line":2660},[143,89267,53304],{"class":149},[143,89269,52701],{"class":153},[143,89271,183],{"class":149},[143,89273,89274,89276,89278],{"class":145,"line":2665},[143,89275,730],{"class":149},[143,89277,52688],{"class":153},[143,89279,183],{"class":149},[143,89281,89282],{"class":145,"line":2679},[143,89283,3300],{"emptyLinePlaceholder":976},[143,89285,89286,89288,89290],{"class":145,"line":2684},[143,89287,730],{"class":149},[143,89289,51533],{"class":153},[143,89291,183],{"class":149},[63,89293,89294],{},[29,89295],{"alt":138,"src":89296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22896,89298,89300],{"id":89299},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[133,89302,89304],{"className":51531,"code":89303,"language":51533,"meta":138,"style":138},"\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",[140,89305,89306,89316,89330,89334,89342,89356,89376,89388,89396,89400,89408,89416,89426,89434,89442,89454,89458,89464,89468,89472,89477,89482,89487,89513,89521,89530,89538,89546,89554,89558],{"__ignoreMap":138},[143,89307,89308,89310,89312,89314],{"class":145,"line":146},[143,89309,52195],{"class":149},[143,89311,52198],{"class":153},[143,89313,52201],{"class":156},[143,89315,183],{"class":149},[143,89317,89318,89320,89322,89324,89326,89328],{"class":145,"line":35},[143,89319,150],{"class":149},[143,89321,51533],{"class":153},[143,89323,52212],{"class":156},[143,89325,160],{"class":149},[143,89327,52217],{"class":163},[143,89329,183],{"class":149},[143,89331,89332],{"class":145,"line":46},[143,89333,3300],{"emptyLinePlaceholder":976},[143,89335,89336,89338,89340],{"class":145,"line":293},[143,89337,150],{"class":149},[143,89339,52230],{"class":153},[143,89341,183],{"class":149},[143,89343,89344,89346,89348,89350,89352,89354],{"class":145,"line":306},[143,89345,634],{"class":149},[143,89347,52240],{"class":153},[143,89349,52243],{"class":156},[143,89351,160],{"class":149},[143,89353,52248],{"class":163},[143,89355,183],{"class":149},[143,89357,89358,89360,89362,89364,89366,89368,89370,89372,89374],{"class":145,"line":319},[143,89359,634],{"class":149},[143,89361,52240],{"class":153},[143,89363,15819],{"class":156},[143,89365,160],{"class":149},[143,89367,52287],{"class":163},[143,89369,52267],{"class":156},[143,89371,160],{"class":149},[143,89373,52294],{"class":163},[143,89375,183],{"class":149},[143,89377,89378,89380,89382,89384,89386],{"class":145,"line":332},[143,89379,634],{"class":149},[143,89381,52303],{"class":153},[143,89383,52306],{"class":149},[143,89385,52303],{"class":153},[143,89387,183],{"class":149},[143,89389,89390,89392,89394],{"class":145,"line":345},[143,89391,730],{"class":149},[143,89393,52230],{"class":153},[143,89395,183],{"class":149},[143,89397,89398],{"class":145,"line":701},[143,89399,3300],{"emptyLinePlaceholder":976},[143,89401,89402,89404,89406],{"class":145,"line":707},[143,89403,150],{"class":149},[143,89405,52688],{"class":153},[143,89407,183],{"class":149},[143,89409,89410,89412,89414],{"class":145,"line":727},[143,89411,634],{"class":149},[143,89413,52701],{"class":153},[143,89415,183],{"class":149},[143,89417,89418,89420,89422,89424],{"class":145,"line":2518},[143,89419,12121],{"class":755},[143,89421,70852],{"class":280},[143,89423,14464],{"class":755},[143,89425,275],{"class":149},[143,89427,89428,89430,89432],{"class":145,"line":2524},[143,89429,72495],{"class":149},[143,89431,88688],{"class":163},[143,89433,32364],{"class":149},[143,89435,89436,89438,89440],{"class":145,"line":2529},[143,89437,72505],{"class":149},[143,89439,1691],{"class":280},[143,89441,32364],{"class":149},[143,89443,89444,89446,89448,89450,89452],{"class":145,"line":2543},[143,89445,88703],{"class":149},[143,89447,88706],{"class":163},[143,89449,13335],{"class":149},[143,89451,88711],{"class":163},[143,89453,88714],{"class":149},[143,89455,89456],{"class":145,"line":2548},[143,89457,78751],{"class":149},[143,89459,89460,89462],{"class":145,"line":2554},[143,89461,88723],{"class":149},[143,89463,88726],{"class":163},[143,89465,89466],{"class":145,"line":2575},[143,89467,53285],{"class":149},[143,89469,89470],{"class":145,"line":2580},[143,89471,3087],{"class":149},[143,89473,89474],{"class":145,"line":2594},[143,89475,89476],{"class":266},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[143,89478,89479],{"class":145,"line":2599},[143,89480,89481],{"class":266},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[143,89483,89484],{"class":145,"line":2628},[143,89485,89486],{"class":266},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[143,89488,89489,89491,89493,89495,89498,89500,89503,89505,89507,89509,89511],{"class":145,"line":2633},[143,89490,12121],{"class":755},[143,89492,88741],{"class":280},[143,89494,14464],{"class":755},[143,89496,89497],{"class":280}," JSON",[143,89499,1599],{"class":149},[143,89501,89502],{"class":156},"parse",[143,89504,1049],{"class":149},[143,89506,72543],{"class":280},[143,89508,1599],{"class":149},[143,89510,72548],{"class":156},[143,89512,72551],{"class":149},[143,89514,89515,89517,89519],{"class":145,"line":2650},[143,89516,74632],{"class":149},[143,89518,59130],{"class":156},[143,89520,88933],{"class":149},[143,89522,89523,89525,89527],{"class":145,"line":2655},[143,89524,89251],{"class":149},[143,89526,160],{"class":755},[143,89528,89529],{"class":163}," '123'\n",[143,89531,89532,89534,89536],{"class":145,"line":2660},[143,89533,74632],{"class":149},[143,89535,59130],{"class":156},[143,89537,70917],{"class":149},[143,89539,89540,89542,89544],{"class":145,"line":2665},[143,89541,53304],{"class":149},[143,89543,52701],{"class":153},[143,89545,183],{"class":149},[143,89547,89548,89550,89552],{"class":145,"line":2679},[143,89549,730],{"class":149},[143,89551,52688],{"class":153},[143,89553,183],{"class":149},[143,89555,89556],{"class":145,"line":2684},[143,89557,3300],{"emptyLinePlaceholder":976},[143,89559,89560,89562,89564],{"class":145,"line":3477},[143,89561,730],{"class":149},[143,89563,51533],{"class":153},[143,89565,183],{"class":149},[63,89567,89568],{},[29,89569],{"alt":138,"src":89570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,89572,89574],{"id":89573},"_415-异常处理","4.15 异常处理",[19,89576,89577],{},[22,89578,89579],{},"throw抛异常",[63,89581,89582],{},[29,89583],{"alt":138,"src":89584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[19,89586,89587],{"start":35},[22,89588,89589],{},"try\u002Fcatch 捕获错误信息",[63,89591,89592],{},[29,89593],{"alt":138,"src":89594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[133,89596,89598],{"className":51531,"code":89597,"language":51533,"meta":138,"style":138},"\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",[140,89599,89600,89610,89624,89628,89636,89650,89670,89682,89690,89694,89702,89714,89722,89731,89738,89743,89762,89771,89782,89787,89797,89802,89807,89812,89829,89833,89838,89845,89857,89861,89873,89877,89881,89886,89891,89898,89906,89914,89918],{"__ignoreMap":138},[143,89601,89602,89604,89606,89608],{"class":145,"line":146},[143,89603,52195],{"class":149},[143,89605,52198],{"class":153},[143,89607,52201],{"class":156},[143,89609,183],{"class":149},[143,89611,89612,89614,89616,89618,89620,89622],{"class":145,"line":35},[143,89613,150],{"class":149},[143,89615,51533],{"class":153},[143,89617,52212],{"class":156},[143,89619,160],{"class":149},[143,89621,52217],{"class":163},[143,89623,183],{"class":149},[143,89625,89626],{"class":145,"line":46},[143,89627,3300],{"emptyLinePlaceholder":976},[143,89629,89630,89632,89634],{"class":145,"line":293},[143,89631,150],{"class":149},[143,89633,52230],{"class":153},[143,89635,183],{"class":149},[143,89637,89638,89640,89642,89644,89646,89648],{"class":145,"line":306},[143,89639,634],{"class":149},[143,89641,52240],{"class":153},[143,89643,52243],{"class":156},[143,89645,160],{"class":149},[143,89647,52248],{"class":163},[143,89649,183],{"class":149},[143,89651,89652,89654,89656,89658,89660,89662,89664,89666,89668],{"class":145,"line":319},[143,89653,634],{"class":149},[143,89655,52240],{"class":153},[143,89657,15819],{"class":156},[143,89659,160],{"class":149},[143,89661,52287],{"class":163},[143,89663,52267],{"class":156},[143,89665,160],{"class":149},[143,89667,52294],{"class":163},[143,89669,183],{"class":149},[143,89671,89672,89674,89676,89678,89680],{"class":145,"line":332},[143,89673,634],{"class":149},[143,89675,52303],{"class":153},[143,89677,52306],{"class":149},[143,89679,52303],{"class":153},[143,89681,183],{"class":149},[143,89683,89684,89686,89688],{"class":145,"line":345},[143,89685,730],{"class":149},[143,89687,52230],{"class":153},[143,89689,183],{"class":149},[143,89691,89692],{"class":145,"line":701},[143,89693,3300],{"emptyLinePlaceholder":976},[143,89695,89696,89698,89700],{"class":145,"line":707},[143,89697,150],{"class":149},[143,89699,52688],{"class":153},[143,89701,183],{"class":149},[143,89703,89704,89706,89708,89710,89712],{"class":145,"line":727},[143,89705,634],{"class":149},[143,89707,63],{"class":153},[143,89709,54380],{"class":149},[143,89711,63],{"class":153},[143,89713,183],{"class":149},[143,89715,89716,89718,89720],{"class":145,"line":2518},[143,89717,634],{"class":149},[143,89719,52701],{"class":153},[143,89721,183],{"class":149},[143,89723,89724,89726,89729],{"class":145,"line":2524},[143,89725,70965],{"class":755},[143,89727,89728],{"class":156}," fn",[143,89730,11753],{"class":149},[143,89732,89733,89736],{"class":145,"line":2529},[143,89734,89735],{"class":755},"      try",[143,89737,275],{"class":149},[143,89739,89740],{"class":145,"line":2543},[143,89741,89742],{"class":266},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[143,89744,89745,89747,89749,89751,89753,89755,89757,89760],{"class":145,"line":2548},[143,89746,62153],{"class":755},[143,89748,7725],{"class":280},[143,89750,14464],{"class":755},[143,89752,55281],{"class":149},[143,89754,55284],{"class":156},[143,89756,1049],{"class":149},[143,89758,89759],{"class":163},"'.p'",[143,89761,1055],{"class":149},[143,89763,89764,89767,89769],{"class":145,"line":2554},[143,89765,89766],{"class":149},"        p.style.color ",[143,89768,160],{"class":755},[143,89770,67933],{"class":163},[143,89772,89773,89776,89779],{"class":145,"line":2575},[143,89774,89775],{"class":149},"      } ",[143,89777,89778],{"class":755},"catch",[143,89780,89781],{"class":149}," (err) {\n",[143,89783,89784],{"class":145,"line":2580},[143,89785,89786],{"class":266},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[143,89788,89789,89792,89794],{"class":145,"line":2594},[143,89790,89791],{"class":149},"        console.",[143,89793,59130],{"class":156},[143,89795,89796],{"class":149},"(err.message)\n",[143,89798,89799],{"class":145,"line":2599},[143,89800,89801],{"class":266},"        \u002F\u002F 想要中断程序，需要加return\n",[143,89803,89804],{"class":145,"line":2628},[143,89805,89806],{"class":266},"        \u002F\u002F return\n",[143,89808,89809],{"class":145,"line":2633},[143,89810,89811],{"class":266},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[143,89813,89814,89817,89819,89822,89824,89827],{"class":145,"line":2650},[143,89815,89816],{"class":755},"        throw",[143,89818,12478],{"class":755},[143,89820,89821],{"class":156}," Error",[143,89823,1049],{"class":149},[143,89825,89826],{"class":163},"'你看看，选择器错误了吧'",[143,89828,1055],{"class":149},[143,89830,89831],{"class":145,"line":2655},[143,89832,53285],{"class":149},[143,89834,89835],{"class":145,"line":2660},[143,89836,89837],{"class":266},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[143,89839,89840,89843],{"class":145,"line":2665},[143,89841,89842],{"class":755},"      finally",[143,89844,275],{"class":149},[143,89846,89847,89850,89852,89855],{"class":145,"line":2679},[143,89848,89849],{"class":156},"        alert",[143,89851,1049],{"class":149},[143,89853,89854],{"class":163},"'弹出对话框'",[143,89856,1055],{"class":149},[143,89858,89859],{"class":145,"line":2684},[143,89860,53285],{"class":149},[143,89862,89863,89865,89867,89869,89871],{"class":145,"line":3477},[143,89864,59127],{"class":149},[143,89866,59130],{"class":156},[143,89868,1049],{"class":149},[143,89870,1513],{"class":280},[143,89872,1055],{"class":149},[143,89874,89875],{"class":145,"line":3491},[143,89876,3300],{"emptyLinePlaceholder":976},[143,89878,89879],{"class":145,"line":3499},[143,89880,3087],{"class":149},[143,89882,89883],{"class":145,"line":3504},[143,89884,89885],{"class":266},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[143,89887,89888],{"class":145,"line":3510},[143,89889,89890],{"class":266},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[143,89892,89893,89896],{"class":145,"line":3516},[143,89894,89895],{"class":156},"    fn",[143,89897,2876],{"class":149},[143,89899,89900,89902,89904],{"class":145,"line":3521},[143,89901,53304],{"class":149},[143,89903,52701],{"class":153},[143,89905,183],{"class":149},[143,89907,89908,89910,89912],{"class":145,"line":8848},[143,89909,730],{"class":149},[143,89911,52688],{"class":153},[143,89913,183],{"class":149},[143,89915,89916],{"class":145,"line":8872},[143,89917,3300],{"emptyLinePlaceholder":976},[143,89919,89920,89922,89924],{"class":145,"line":8877},[143,89921,730],{"class":149},[143,89923,51533],{"class":153},[143,89925,183],{"class":149},[63,89927,89928],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[19,89930,89931],{"start":46},[22,89932,89933],{},"debugger",[63,89935,89936],{},[29,89937],{"alt":138,"src":89938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[63,89940,89941],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89943,89945],{"id":89944},"_416-处理this","4.16 处理this",[58,89947,89949],{"id":89948},"_4161-this的指向","4.16.1 this的指向",[19,89951,89952],{},[22,89953,89954],{},"普通函数的this",[63,89956,89957],{},[29,89958],{"alt":138,"src":89959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[19,89961,89962],{"start":35},[22,89963,89964],{},"箭头函数的this",[63,89966,89967],{},[29,89968],{"alt":138,"src":89969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[63,89971,89972],{},[29,89973],{"alt":138,"src":89974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[63,89976,89977],{},[29,89978],{"alt":138,"src":89979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[58,89981,89983],{"id":89982},"_4162-this的改变","4.16.2 this的改变",[63,89985,89986],{},"call() apply() bind()",[19,89988,89989],{},[22,89990,89991],{},"call()",[63,89993,89994],{},[29,89995],{"alt":138,"src":89996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[63,89998,89999],{},"两个作用：①调用函数；②改变this指向",[133,90001,90003],{"className":53954,"code":90002,"language":53956,"meta":138,"style":138},"\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",[140,90004,90005,90013,90021,90025,90030,90034,90039,90044,90049,90053,90058,90066],{"__ignoreMap":138},[143,90006,90007,90009,90011],{"class":145,"line":146},[143,90008,150],{"class":149},[143,90010,52688],{"class":153},[143,90012,183],{"class":149},[143,90014,90015,90017,90019],{"class":145,"line":35},[143,90016,634],{"class":149},[143,90018,52701],{"class":153},[143,90020,183],{"class":149},[143,90022,90023],{"class":145,"line":46},[143,90024,72402],{"class":149},[143,90026,90027],{"class":145,"line":293},[143,90028,90029],{"class":149},"      uname: 'pink'\n",[143,90031,90032],{"class":145,"line":306},[143,90033,3087],{"class":149},[143,90035,90036],{"class":145,"line":319},[143,90037,90038],{"class":149},"    function fn(x, y) {\n",[143,90040,90041],{"class":145,"line":332},[143,90042,90043],{"class":149},"      console.log(this)  \u002F\u002Fwindow\n",[143,90045,90046],{"class":145,"line":345},[143,90047,90048],{"class":149},"      console.log(x + y)\n",[143,90050,90051],{"class":145,"line":701},[143,90052,3087],{"class":149},[143,90054,90055],{"class":145,"line":707},[143,90056,90057],{"class":149},"    fn.call(obj, 1, 2)\n",[143,90059,90060,90062,90064],{"class":145,"line":727},[143,90061,53304],{"class":149},[143,90063,52701],{"class":153},[143,90065,183],{"class":149},[143,90067,90068,90070,90072],{"class":145,"line":2518},[143,90069,730],{"class":149},[143,90071,52688],{"class":153},[143,90073,183],{"class":149},[63,90075,90076],{},[29,90077],{"alt":138,"src":90078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[19,90080,90081],{"start":35},[22,90082,90083],{},"apply()",[63,90085,90086],{},[29,90087],{"alt":138,"src":90088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[63,90090,89999],{},[63,90092,90093],{},"call传递的是普通参数，而apply必须传递的是数组",[133,90095,90097],{"className":51531,"code":90096,"language":51533,"meta":138,"style":138},"\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",[140,90098,90099,90109,90123,90127,90135,90149,90169,90181,90189,90193,90201,90209,90219,90226,90230,90235,90251,90263,90277,90281,90286,90305,90310,90314,90319,90324,90332,90337,90359,90364,90380,90396,90408,90412,90417,90436,90444,90452,90456],{"__ignoreMap":138},[143,90100,90101,90103,90105,90107],{"class":145,"line":146},[143,90102,52195],{"class":149},[143,90104,52198],{"class":153},[143,90106,52201],{"class":156},[143,90108,183],{"class":149},[143,90110,90111,90113,90115,90117,90119,90121],{"class":145,"line":35},[143,90112,150],{"class":149},[143,90114,51533],{"class":153},[143,90116,52212],{"class":156},[143,90118,160],{"class":149},[143,90120,52217],{"class":163},[143,90122,183],{"class":149},[143,90124,90125],{"class":145,"line":46},[143,90126,3300],{"emptyLinePlaceholder":976},[143,90128,90129,90131,90133],{"class":145,"line":293},[143,90130,150],{"class":149},[143,90132,52230],{"class":153},[143,90134,183],{"class":149},[143,90136,90137,90139,90141,90143,90145,90147],{"class":145,"line":306},[143,90138,634],{"class":149},[143,90140,52240],{"class":153},[143,90142,52243],{"class":156},[143,90144,160],{"class":149},[143,90146,52248],{"class":163},[143,90148,183],{"class":149},[143,90150,90151,90153,90155,90157,90159,90161,90163,90165,90167],{"class":145,"line":319},[143,90152,634],{"class":149},[143,90154,52240],{"class":153},[143,90156,15819],{"class":156},[143,90158,160],{"class":149},[143,90160,52287],{"class":163},[143,90162,52267],{"class":156},[143,90164,160],{"class":149},[143,90166,52294],{"class":163},[143,90168,183],{"class":149},[143,90170,90171,90173,90175,90177,90179],{"class":145,"line":332},[143,90172,634],{"class":149},[143,90174,52303],{"class":153},[143,90176,52306],{"class":149},[143,90178,52303],{"class":153},[143,90180,183],{"class":149},[143,90182,90183,90185,90187],{"class":145,"line":345},[143,90184,730],{"class":149},[143,90186,52230],{"class":153},[143,90188,183],{"class":149},[143,90190,90191],{"class":145,"line":701},[143,90192,3300],{"emptyLinePlaceholder":976},[143,90194,90195,90197,90199],{"class":145,"line":707},[143,90196,150],{"class":149},[143,90198,52688],{"class":153},[143,90200,183],{"class":149},[143,90202,90203,90205,90207],{"class":145,"line":727},[143,90204,634],{"class":149},[143,90206,52701],{"class":153},[143,90208,183],{"class":149},[143,90210,90211,90213,90215,90217],{"class":145,"line":2518},[143,90212,12121],{"class":755},[143,90214,70852],{"class":280},[143,90216,14464],{"class":755},[143,90218,275],{"class":149},[143,90220,90221,90223],{"class":145,"line":2524},[143,90222,72505],{"class":149},[143,90224,90225],{"class":280},"18\n",[143,90227,90228],{"class":145,"line":2529},[143,90229,3087],{"class":149},[143,90231,90232],{"class":145,"line":2543},[143,90233,90234],{"class":266},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[143,90236,90237,90239,90241,90243,90245,90247,90249],{"class":145,"line":2548},[143,90238,70965],{"class":755},[143,90240,89728],{"class":156},[143,90242,1049],{"class":149},[143,90244,1861],{"class":6116},[143,90246,13335],{"class":149},[143,90248,1886],{"class":6116},[143,90250,13342],{"class":149},[143,90252,90253,90255,90257,90259,90261],{"class":145,"line":2554},[143,90254,59127],{"class":149},[143,90256,59130],{"class":156},[143,90258,1049],{"class":149},[143,90260,87871],{"class":280},[143,90262,1055],{"class":149},[143,90264,90265,90267,90269,90272,90274],{"class":145,"line":2575},[143,90266,59127],{"class":149},[143,90268,59130],{"class":156},[143,90270,90271],{"class":149},"(x ",[143,90273,1522],{"class":755},[143,90275,90276],{"class":149}," y)\n",[143,90278,90279],{"class":145,"line":2580},[143,90280,3087],{"class":149},[143,90282,90283],{"class":145,"line":2594},[143,90284,90285],{"class":266},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[143,90287,90288,90291,90294,90297,90299,90301,90303],{"class":145,"line":2599},[143,90289,90290],{"class":149},"    fn.",[143,90292,90293],{"class":156},"apply",[143,90295,90296],{"class":149},"(obj, [",[143,90298,771],{"class":280},[143,90300,13335],{"class":149},[143,90302,1122],{"class":280},[143,90304,5557],{"class":149},[143,90306,90307],{"class":145,"line":2628},[143,90308,90309],{"class":266},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[143,90311,90312],{"class":145,"line":2633},[143,90313,3300],{"emptyLinePlaceholder":976},[143,90315,90316],{"class":145,"line":2650},[143,90317,90318],{"class":266},"    \u002F\u002F 使用场景：求数组最大值\n",[143,90320,90321],{"class":145,"line":2655},[143,90322,90323],{"class":266},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[143,90325,90326,90329],{"class":145,"line":2660},[143,90327,90328],{"class":266},"    \u002F\u002F console.log(max)",[143,90330,90331],{"class":266},"   \u002F\u002F3\n",[143,90333,90334],{"class":145,"line":2665},[143,90335,90336],{"class":266},"    \u002F\u002F 指向空或者Math都是可以的\n",[143,90338,90339,90341,90343,90345,90347,90349,90351,90353,90355,90357],{"class":145,"line":2679},[143,90340,12121],{"class":755},[143,90342,58578],{"class":280},[143,90344,14464],{"class":755},[143,90346,53113],{"class":149},[143,90348,1352],{"class":280},[143,90350,13335],{"class":149},[143,90352,1545],{"class":280},[143,90354,13335],{"class":149},[143,90356,1576],{"class":280},[143,90358,34144],{"class":149},[143,90360,90361],{"class":145,"line":2684},[143,90362,90363],{"class":266},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[143,90365,90366,90368,90370,90372,90375,90377],{"class":145,"line":3477},[143,90367,12121],{"class":755},[143,90369,6851],{"class":280},[143,90371,14464],{"class":755},[143,90373,90374],{"class":149}," Math.max.",[143,90376,90293],{"class":156},[143,90378,90379],{"class":149},"(Math, arr)\n",[143,90381,90382,90384,90387,90389,90392,90394],{"class":145,"line":3491},[143,90383,12121],{"class":755},[143,90385,90386],{"class":280}," min",[143,90388,14464],{"class":755},[143,90390,90391],{"class":149}," Math.min.",[143,90393,90293],{"class":156},[143,90395,90379],{"class":149},[143,90397,90398,90400,90402,90405],{"class":145,"line":3499},[143,90399,74632],{"class":149},[143,90401,59130],{"class":156},[143,90403,90404],{"class":149},"(max, min)     ",[143,90406,90407],{"class":266},"\u002F\u002F100,4\n",[143,90409,90410],{"class":145,"line":3504},[143,90411,3300],{"emptyLinePlaceholder":976},[143,90413,90414],{"class":145,"line":3510},[143,90415,90416],{"class":266},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[143,90418,90419,90421,90423,90426,90428,90430,90433],{"class":145,"line":3516},[143,90420,74632],{"class":149},[143,90422,59130],{"class":156},[143,90424,90425],{"class":149},"(Max.",[143,90427,6915],{"class":156},[143,90429,1049],{"class":149},[143,90431,90432],{"class":755},"...",[143,90434,90435],{"class":149},"arr))\n",[143,90437,90438,90440,90442],{"class":145,"line":3521},[143,90439,53304],{"class":149},[143,90441,52701],{"class":153},[143,90443,183],{"class":149},[143,90445,90446,90448,90450],{"class":145,"line":8848},[143,90447,730],{"class":149},[143,90449,52688],{"class":153},[143,90451,183],{"class":149},[143,90453,90454],{"class":145,"line":8872},[143,90455,3300],{"emptyLinePlaceholder":976},[143,90457,90458,90460,90462],{"class":145,"line":8877},[143,90459,730],{"class":149},[143,90461,51533],{"class":153},[143,90463,183],{"class":149},[63,90465,90466],{},[29,90467],{"alt":138,"src":90468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[19,90470,90471],{"start":46},[22,90472,90473],{},"bind()",[63,90475,90476],{},[29,90477],{"alt":138,"src":90478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[63,90480,90481],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[63,90483,90484],{},"bind的语法跟call很相似",[133,90486,90488],{"className":53954,"code":90487,"language":53956,"meta":138,"style":138},"\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",[140,90489,90490,90498,90506,90510,90515,90519,90523,90528,90532,90537,90542,90547,90552,90557,90562,90567,90571,90579],{"__ignoreMap":138},[143,90491,90492,90494,90496],{"class":145,"line":146},[143,90493,150],{"class":149},[143,90495,52688],{"class":153},[143,90497,183],{"class":149},[143,90499,90500,90502,90504],{"class":145,"line":35},[143,90501,634],{"class":149},[143,90503,52701],{"class":153},[143,90505,183],{"class":149},[143,90507,90508],{"class":145,"line":46},[143,90509,72402],{"class":149},[143,90511,90512],{"class":145,"line":293},[143,90513,90514],{"class":149},"      age: 18\n",[143,90516,90517],{"class":145,"line":306},[143,90518,3087],{"class":149},[143,90520,90521],{"class":145,"line":319},[143,90522,78022],{"class":149},[143,90524,90525],{"class":145,"line":332},[143,90526,90527],{"class":149},"      console.log(this)\n",[143,90529,90530],{"class":145,"line":345},[143,90531,3087],{"class":149},[143,90533,90534],{"class":145,"line":701},[143,90535,90536],{"class":149},"    \u002F\u002F 1.bind 不会调用函数\n",[143,90538,90539],{"class":145,"line":707},[143,90540,90541],{"class":149},"    \u002F\u002F 2.bind能改变this的指向\n",[143,90543,90544],{"class":145,"line":727},[143,90545,90546],{"class":149},"    fn.bind()\n",[143,90548,90549],{"class":145,"line":2518},[143,90550,90551],{"class":149},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[143,90553,90554],{"class":145,"line":2524},[143,90555,90556],{"class":149},"    const fun = fn.bind(obj)\n",[143,90558,90559],{"class":145,"line":2529},[143,90560,90561],{"class":149},"    \u002F\u002F console.log(fun)\n",[143,90563,90564],{"class":145,"line":2543},[143,90565,90566],{"class":149},"    \u002F\u002F 调用,查看this的指向\n",[143,90568,90569],{"class":145,"line":2548},[143,90570,53538],{"class":149},[143,90572,90573,90575,90577],{"class":145,"line":2554},[143,90574,53304],{"class":149},[143,90576,52701],{"class":153},[143,90578,183],{"class":149},[143,90580,90581,90583,90585],{"class":145,"line":2575},[143,90582,730],{"class":149},[143,90584,52688],{"class":153},[143,90586,183],{"class":149},[63,90588,90589],{},[29,90590],{"alt":138,"src":90591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[19,90593,90594],{"start":293},[22,90595,90596],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[133,90598,90600],{"className":53954,"code":90599,"language":53956,"meta":138,"style":138},"\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",[140,90601,90602,90610,90623,90631,90636,90640,90645,90650,90655,90660,90665,90670,90675,90680,90684,90692],{"__ignoreMap":138},[143,90603,90604,90606,90608],{"class":145,"line":146},[143,90605,150],{"class":149},[143,90607,52688],{"class":153},[143,90609,183],{"class":149},[143,90611,90612,90614,90616,90619,90621],{"class":145,"line":35},[143,90613,634],{"class":149},[143,90615,54772],{"class":153},[143,90617,90618],{"class":149},">禁用\u003C\u002F",[143,90620,54772],{"class":153},[143,90622,183],{"class":149},[143,90624,90625,90627,90629],{"class":145,"line":46},[143,90626,634],{"class":149},[143,90628,52701],{"class":153},[143,90630,183],{"class":149},[143,90632,90633],{"class":145,"line":293},[143,90634,90635],{"class":149},"    const btn = document.querySelector('button')\n",[143,90637,90638],{"class":145,"line":306},[143,90639,59899],{"class":149},[143,90641,90642],{"class":145,"line":319},[143,90643,90644],{"class":149},"      this.disabled = true\n",[143,90646,90647],{"class":145,"line":332},[143,90648,90649],{"class":149},"      \u002F\u002F 定时器是window进行调用的\n",[143,90651,90652],{"class":145,"line":345},[143,90653,90654],{"class":149},"      setTimeout(function () {\n",[143,90656,90657],{"class":145,"line":701},[143,90658,90659],{"class":149},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[143,90661,90662],{"class":145,"line":707},[143,90663,90664],{"class":149},"        this.disabled = false\n",[143,90666,90667],{"class":145,"line":727},[143,90668,90669],{"class":149},"      }.bind(this), 2000)\n",[143,90671,90672],{"class":145,"line":2518},[143,90673,90674],{"class":149},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[143,90676,90677],{"class":145,"line":2524},[143,90678,90679],{"class":149},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[143,90681,90682],{"class":145,"line":2529},[143,90683,34359],{"class":149},[143,90685,90686,90688,90690],{"class":145,"line":2543},[143,90687,53304],{"class":149},[143,90689,52701],{"class":153},[143,90691,183],{"class":149},[143,90693,90694,90696,90698],{"class":145,"line":2548},[143,90695,730],{"class":149},[143,90697,52688],{"class":153},[143,90699,183],{"class":149},[19,90701,90702],{"start":306},[22,90703,22851],{},[63,90705,90706],{},[29,90707],{"alt":138,"src":90708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90710,90712],{"id":90711},"_417-性能优化","4.17 性能优化",[58,90714,90716],{"id":90715},"_4171-防抖","4.17.1 防抖",[63,90718,90719],{},[29,90720],{"alt":138,"src":90721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[63,90723,90724],{},[25,90725,90726],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[63,90728,90729],{},"防抖实现方式：",[232,90731,90732],{},[22,90733,90734],{},"lodash 提供了防抖处理",[63,90736,90737],{},"_.debounce(func,[wait=0],[options={}])",[63,90739,90740],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[133,90742,90744],{"className":51531,"code":90743,"language":51533,"meta":138,"style":138},"\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",[140,90745,90746,90756,90770,90774,90782,90796,90816,90828,90836,90842,90852,90864,90876,90887,90899,90909,90919,90932,90936,90944,90952,90956,90964,90982,91000,91008,91027,91037,91046,91057,91062,91066,91071,91076,91081,91106,91114,91122,91126],{"__ignoreMap":138},[143,90747,90748,90750,90752,90754],{"class":145,"line":146},[143,90749,52195],{"class":149},[143,90751,52198],{"class":153},[143,90753,52201],{"class":156},[143,90755,183],{"class":149},[143,90757,90758,90760,90762,90764,90766,90768],{"class":145,"line":35},[143,90759,150],{"class":149},[143,90761,51533],{"class":153},[143,90763,52212],{"class":156},[143,90765,160],{"class":149},[143,90767,52217],{"class":163},[143,90769,183],{"class":149},[143,90771,90772],{"class":145,"line":46},[143,90773,3300],{"emptyLinePlaceholder":976},[143,90775,90776,90778,90780],{"class":145,"line":293},[143,90777,150],{"class":149},[143,90779,52230],{"class":153},[143,90781,183],{"class":149},[143,90783,90784,90786,90788,90790,90792,90794],{"class":145,"line":306},[143,90785,634],{"class":149},[143,90787,52240],{"class":153},[143,90789,52243],{"class":156},[143,90791,160],{"class":149},[143,90793,52248],{"class":163},[143,90795,183],{"class":149},[143,90797,90798,90800,90802,90804,90806,90808,90810,90812,90814],{"class":145,"line":319},[143,90799,634],{"class":149},[143,90801,52240],{"class":153},[143,90803,15819],{"class":156},[143,90805,160],{"class":149},[143,90807,52287],{"class":163},[143,90809,52267],{"class":156},[143,90811,160],{"class":149},[143,90813,52294],{"class":163},[143,90815,183],{"class":149},[143,90817,90818,90820,90822,90824,90826],{"class":145,"line":332},[143,90819,634],{"class":149},[143,90821,52303],{"class":153},[143,90823,52306],{"class":149},[143,90825,52303],{"class":153},[143,90827,183],{"class":149},[143,90829,90830,90832,90834],{"class":145,"line":345},[143,90831,634],{"class":149},[143,90833,954],{"class":153},[143,90835,183],{"class":149},[143,90837,90838,90840],{"class":145,"line":701},[143,90839,55637],{"class":156},[143,90841,275],{"class":149},[143,90843,90844,90846,90848,90850],{"class":145,"line":707},[143,90845,73475],{"class":280},[143,90847,284],{"class":149},[143,90849,61388],{"class":280},[143,90851,290],{"class":149},[143,90853,90854,90856,90858,90860,90862],{"class":145,"line":727},[143,90855,55656],{"class":280},[143,90857,284],{"class":149},[143,90859,2623],{"class":280},[143,90861,774],{"class":755},[143,90863,290],{"class":149},[143,90865,90866,90868,90870,90872,90874],{"class":145,"line":2518},[143,90867,55670],{"class":280},[143,90869,284],{"class":149},[143,90871,2623],{"class":280},[143,90873,774],{"class":755},[143,90875,290],{"class":149},[143,90877,90878,90880,90882,90885],{"class":145,"line":2524},[143,90879,55769],{"class":280},[143,90881,284],{"class":149},[143,90883,90884],{"class":280},"gray",[143,90886,290],{"class":149},[143,90888,90889,90891,90893,90895,90897],{"class":145,"line":2529},[143,90890,55807],{"class":280},[143,90892,284],{"class":149},[143,90894,1866],{"class":280},[143,90896,774],{"class":755},[143,90898,290],{"class":149},[143,90900,90901,90903,90905,90907],{"class":145,"line":2543},[143,90902,58299],{"class":280},[143,90904,284],{"class":149},[143,90906,61725],{"class":280},[143,90908,290],{"class":149},[143,90910,90911,90913,90915,90917],{"class":145,"line":2548},[143,90912,58169],{"class":280},[143,90914,284],{"class":149},[143,90916,327],{"class":280},[143,90918,290],{"class":149},[143,90920,90921,90924,90926,90928,90930],{"class":145,"line":2554},[143,90922,90923],{"class":280},"      padding-top",[143,90925,284],{"class":149},[143,90927,1360],{"class":280},[143,90929,774],{"class":755},[143,90931,290],{"class":149},[143,90933,90934],{"class":145,"line":2575},[143,90935,3087],{"class":149},[143,90937,90938,90940,90942],{"class":145,"line":2580},[143,90939,53304],{"class":149},[143,90941,954],{"class":153},[143,90943,183],{"class":149},[143,90945,90946,90948,90950],{"class":145,"line":2594},[143,90947,730],{"class":149},[143,90949,52230],{"class":153},[143,90951,183],{"class":149},[143,90953,90954],{"class":145,"line":2599},[143,90955,3300],{"emptyLinePlaceholder":976},[143,90957,90958,90960,90962],{"class":145,"line":2628},[143,90959,150],{"class":149},[143,90961,52688],{"class":153},[143,90963,183],{"class":149},[143,90965,90966,90968,90970,90972,90974,90976,90978,90980],{"class":145,"line":2633},[143,90967,634],{"class":149},[143,90969,614],{"class":153},[143,90971,617],{"class":156},[143,90973,160],{"class":149},[143,90975,54377],{"class":163},[143,90977,56197],{"class":149},[143,90979,614],{"class":153},[143,90981,183],{"class":149},[143,90983,90984,90986,90988,90990,90992,90994,90996,90998],{"class":145,"line":2650},[143,90985,634],{"class":149},[143,90987,52701],{"class":153},[143,90989,157],{"class":156},[143,90991,160],{"class":149},[143,90993,89152],{"class":163},[143,90995,56197],{"class":149},[143,90997,52701],{"class":153},[143,90999,183],{"class":149},[143,91001,91002,91004,91006],{"class":145,"line":2655},[143,91003,634],{"class":149},[143,91005,52701],{"class":153},[143,91007,183],{"class":149},[143,91009,91010,91012,91014,91016,91018,91020,91022,91025],{"class":145,"line":2660},[143,91011,12121],{"class":755},[143,91013,87811],{"class":280},[143,91015,14464],{"class":755},[143,91017,55281],{"class":149},[143,91019,55284],{"class":156},[143,91021,1049],{"class":149},[143,91023,91024],{"class":163},"'.box'",[143,91026,1055],{"class":149},[143,91028,91029,91031,91033,91035],{"class":145,"line":2665},[143,91030,53106],{"class":755},[143,91032,10338],{"class":149},[143,91034,160],{"class":755},[143,91036,48231],{"class":280},[143,91038,91039,91041,91044],{"class":145,"line":2679},[143,91040,70965],{"class":755},[143,91042,91043],{"class":156}," mouseMove",[143,91045,11753],{"class":149},[143,91047,91048,91051,91053,91055],{"class":145,"line":2684},[143,91049,91050],{"class":149},"      box.innerHTML ",[143,91052,160],{"class":755},[143,91054,3932],{"class":149},[143,91056,3602],{"class":755},[143,91058,91059],{"class":145,"line":3477},[143,91060,91061],{"class":266},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[143,91063,91064],{"class":145,"line":3491},[143,91065,3087],{"class":149},[143,91067,91068],{"class":145,"line":3499},[143,91069,91070],{"class":266},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[143,91072,91073],{"class":145,"line":3504},[143,91074,91075],{"class":266},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[143,91077,91078],{"class":145,"line":3510},[143,91079,91080],{"class":266},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[143,91082,91083,91086,91088,91090,91093,91096,91099,91102,91104],{"class":145,"line":3516},[143,91084,91085],{"class":149},"    box.",[143,91087,58696],{"class":156},[143,91089,1049],{"class":149},[143,91091,91092],{"class":163},"'mousemove'",[143,91094,91095],{"class":149},", _.",[143,91097,91098],{"class":156},"debounce",[143,91100,91101],{"class":149},"(mouseMove, ",[143,91103,65956],{"class":280},[143,91105,31395],{"class":149},[143,91107,91108,91110,91112],{"class":145,"line":3521},[143,91109,53304],{"class":149},[143,91111,52701],{"class":153},[143,91113,183],{"class":149},[143,91115,91116,91118,91120],{"class":145,"line":8848},[143,91117,730],{"class":149},[143,91119,52688],{"class":153},[143,91121,183],{"class":149},[143,91123,91124],{"class":145,"line":8872},[143,91125,3300],{"emptyLinePlaceholder":976},[143,91127,91128,91130,91132],{"class":145,"line":8877},[143,91129,730],{"class":149},[143,91131,51533],{"class":153},[143,91133,183],{"class":149},[232,91135,91136],{},[22,91137,91138],{},"手写一个防抖函数来处理",[63,91140,91141],{},"防抖的核心就是利用定时器来实现的：",[63,91143,91144],{},"①声明一个定时器变量",[63,91146,91147],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[63,91149,91150],{},"③如果没有定时器则开启定时器，记得存到变量里面",[133,91152,91154],{"className":51531,"code":91153,"language":51533,"meta":138,"style":138},"\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",[140,91155,91156,91166,91180,91184,91192,91206,91226,91238,91246,91252,91262,91274,91286,91296,91308,91318,91328,91340,91344,91352,91360,91364,91372,91390,91408,91416,91434,91444,91452,91462,91466,91470,91474,91479,91484,91489,91494,91499,91504,91522,91529,91534,91542,91547,91560,91576,91586,91591,91595,91599,91619,91623,91628,91633,91638,91643,91651,91659,91663],{"__ignoreMap":138},[143,91157,91158,91160,91162,91164],{"class":145,"line":146},[143,91159,52195],{"class":149},[143,91161,52198],{"class":153},[143,91163,52201],{"class":156},[143,91165,183],{"class":149},[143,91167,91168,91170,91172,91174,91176,91178],{"class":145,"line":35},[143,91169,150],{"class":149},[143,91171,51533],{"class":153},[143,91173,52212],{"class":156},[143,91175,160],{"class":149},[143,91177,52217],{"class":163},[143,91179,183],{"class":149},[143,91181,91182],{"class":145,"line":46},[143,91183,3300],{"emptyLinePlaceholder":976},[143,91185,91186,91188,91190],{"class":145,"line":293},[143,91187,150],{"class":149},[143,91189,52230],{"class":153},[143,91191,183],{"class":149},[143,91193,91194,91196,91198,91200,91202,91204],{"class":145,"line":306},[143,91195,634],{"class":149},[143,91197,52240],{"class":153},[143,91199,52243],{"class":156},[143,91201,160],{"class":149},[143,91203,52248],{"class":163},[143,91205,183],{"class":149},[143,91207,91208,91210,91212,91214,91216,91218,91220,91222,91224],{"class":145,"line":319},[143,91209,634],{"class":149},[143,91211,52240],{"class":153},[143,91213,15819],{"class":156},[143,91215,160],{"class":149},[143,91217,52287],{"class":163},[143,91219,52267],{"class":156},[143,91221,160],{"class":149},[143,91223,52294],{"class":163},[143,91225,183],{"class":149},[143,91227,91228,91230,91232,91234,91236],{"class":145,"line":332},[143,91229,634],{"class":149},[143,91231,52303],{"class":153},[143,91233,52306],{"class":149},[143,91235,52303],{"class":153},[143,91237,183],{"class":149},[143,91239,91240,91242,91244],{"class":145,"line":345},[143,91241,634],{"class":149},[143,91243,954],{"class":153},[143,91245,183],{"class":149},[143,91247,91248,91250],{"class":145,"line":701},[143,91249,55637],{"class":156},[143,91251,275],{"class":149},[143,91253,91254,91256,91258,91260],{"class":145,"line":707},[143,91255,73475],{"class":280},[143,91257,284],{"class":149},[143,91259,61388],{"class":280},[143,91261,290],{"class":149},[143,91263,91264,91266,91268,91270,91272],{"class":145,"line":727},[143,91265,55656],{"class":280},[143,91267,284],{"class":149},[143,91269,2623],{"class":280},[143,91271,774],{"class":755},[143,91273,290],{"class":149},[143,91275,91276,91278,91280,91282,91284],{"class":145,"line":2518},[143,91277,55670],{"class":280},[143,91279,284],{"class":149},[143,91281,2623],{"class":280},[143,91283,774],{"class":755},[143,91285,290],{"class":149},[143,91287,91288,91290,91292,91294],{"class":145,"line":2524},[143,91289,55769],{"class":280},[143,91291,284],{"class":149},[143,91293,90884],{"class":280},[143,91295,290],{"class":149},[143,91297,91298,91300,91302,91304,91306],{"class":145,"line":2529},[143,91299,55807],{"class":280},[143,91301,284],{"class":149},[143,91303,1866],{"class":280},[143,91305,774],{"class":755},[143,91307,290],{"class":149},[143,91309,91310,91312,91314,91316],{"class":145,"line":2543},[143,91311,58299],{"class":280},[143,91313,284],{"class":149},[143,91315,61725],{"class":280},[143,91317,290],{"class":149},[143,91319,91320,91322,91324,91326],{"class":145,"line":2548},[143,91321,58169],{"class":280},[143,91323,284],{"class":149},[143,91325,327],{"class":280},[143,91327,290],{"class":149},[143,91329,91330,91332,91334,91336,91338],{"class":145,"line":2554},[143,91331,90923],{"class":280},[143,91333,284],{"class":149},[143,91335,1360],{"class":280},[143,91337,774],{"class":755},[143,91339,290],{"class":149},[143,91341,91342],{"class":145,"line":2575},[143,91343,3087],{"class":149},[143,91345,91346,91348,91350],{"class":145,"line":2580},[143,91347,53304],{"class":149},[143,91349,954],{"class":153},[143,91351,183],{"class":149},[143,91353,91354,91356,91358],{"class":145,"line":2594},[143,91355,730],{"class":149},[143,91357,52230],{"class":153},[143,91359,183],{"class":149},[143,91361,91362],{"class":145,"line":2599},[143,91363,3300],{"emptyLinePlaceholder":976},[143,91365,91366,91368,91370],{"class":145,"line":2628},[143,91367,150],{"class":149},[143,91369,52688],{"class":153},[143,91371,183],{"class":149},[143,91373,91374,91376,91378,91380,91382,91384,91386,91388],{"class":145,"line":2633},[143,91375,634],{"class":149},[143,91377,614],{"class":153},[143,91379,617],{"class":156},[143,91381,160],{"class":149},[143,91383,54377],{"class":163},[143,91385,56197],{"class":149},[143,91387,614],{"class":153},[143,91389,183],{"class":149},[143,91391,91392,91394,91396,91398,91400,91402,91404,91406],{"class":145,"line":2650},[143,91393,634],{"class":149},[143,91395,52701],{"class":153},[143,91397,157],{"class":156},[143,91399,160],{"class":149},[143,91401,89152],{"class":163},[143,91403,56197],{"class":149},[143,91405,52701],{"class":153},[143,91407,183],{"class":149},[143,91409,91410,91412,91414],{"class":145,"line":2655},[143,91411,634],{"class":149},[143,91413,52701],{"class":153},[143,91415,183],{"class":149},[143,91417,91418,91420,91422,91424,91426,91428,91430,91432],{"class":145,"line":2660},[143,91419,12121],{"class":755},[143,91421,87811],{"class":280},[143,91423,14464],{"class":755},[143,91425,55281],{"class":149},[143,91427,55284],{"class":156},[143,91429,1049],{"class":149},[143,91431,91024],{"class":163},[143,91433,1055],{"class":149},[143,91435,91436,91438,91440,91442],{"class":145,"line":2665},[143,91437,53106],{"class":755},[143,91439,10338],{"class":149},[143,91441,160],{"class":755},[143,91443,48231],{"class":280},[143,91445,91446,91448,91450],{"class":145,"line":2679},[143,91447,70965],{"class":755},[143,91449,91043],{"class":156},[143,91451,11753],{"class":149},[143,91453,91454,91456,91458,91460],{"class":145,"line":2684},[143,91455,91050],{"class":149},[143,91457,160],{"class":755},[143,91459,3932],{"class":149},[143,91461,3602],{"class":755},[143,91463,91464],{"class":145,"line":3477},[143,91465,91061],{"class":266},[143,91467,91468],{"class":145,"line":3491},[143,91469,3087],{"class":149},[143,91471,91472],{"class":145,"line":3499},[143,91473,91070],{"class":266},[143,91475,91476],{"class":145,"line":3504},[143,91477,91478],{"class":266},"    \u002F\u002F 手写防抖函数\n",[143,91480,91481],{"class":145,"line":3510},[143,91482,91483],{"class":266},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[143,91485,91486],{"class":145,"line":3516},[143,91487,91488],{"class":266},"    \u002F\u002F 1.声明定时器变量\n",[143,91490,91491],{"class":145,"line":3521},[143,91492,91493],{"class":266},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[143,91495,91496],{"class":145,"line":8848},[143,91497,91498],{"class":266},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[143,91500,91501],{"class":145,"line":8872},[143,91502,91503],{"class":266},"    \u002F\u002F 4.定时器里面写函数调用\n",[143,91505,91506,91508,91511,91513,91516,91518,91520],{"class":145,"line":8877},[143,91507,70965],{"class":755},[143,91509,91510],{"class":156}," debounce",[143,91512,1049],{"class":149},[143,91514,91515],{"class":6116},"fn",[143,91517,13335],{"class":149},[143,91519,1761],{"class":6116},[143,91521,13342],{"class":149},[143,91523,91524,91526],{"class":145,"line":8883},[143,91525,80650],{"class":755},[143,91527,91528],{"class":149}," timer\n",[143,91530,91531],{"class":145,"line":8910},[143,91532,91533],{"class":266},"      \u002F\u002F return 返回一个匿名函数\n",[143,91535,91536,91538,91540],{"class":145,"line":8915},[143,91537,74861],{"class":755},[143,91539,59801],{"class":755},[143,91541,55337],{"class":149},[143,91543,91544],{"class":145,"line":8921},[143,91545,91546],{"class":266},"        \u002F\u002F 这里边写第二三四步\n",[143,91548,91549,91551,91554,91557],{"class":145,"line":8933},[143,91550,3397],{"class":755},[143,91552,91553],{"class":149}," (timer) ",[143,91555,91556],{"class":156},"clearTimeout",[143,91558,91559],{"class":149},"(timer)\n",[143,91561,91562,91565,91567,91570,91572,91574],{"class":145,"line":8945},[143,91563,91564],{"class":149},"        timer ",[143,91566,160],{"class":755},[143,91568,91569],{"class":156}," setTimeout",[143,91571,1049],{"class":149},[143,91573,55334],{"class":755},[143,91575,55337],{"class":149},[143,91577,91578,91581,91583],{"class":145,"line":8957},[143,91579,91580],{"class":156},"          fn",[143,91582,13950],{"class":149},[143,91584,91585],{"class":266},"\u002F\u002F加小括号调用fn }, t)\n",[143,91587,91588],{"class":145,"line":10616},[143,91589,91590],{"class":149},"        }, t)\n",[143,91592,91593],{"class":145,"line":10641},[143,91594,53285],{"class":149},[143,91596,91597],{"class":145,"line":10664},[143,91598,3087],{"class":149},[143,91600,91601,91603,91605,91607,91609,91611,91613,91615,91617],{"class":145,"line":10688},[143,91602,91085],{"class":149},[143,91604,58696],{"class":156},[143,91606,1049],{"class":149},[143,91608,91092],{"class":163},[143,91610,13335],{"class":149},[143,91612,91098],{"class":156},[143,91614,91101],{"class":149},[143,91616,65956],{"class":280},[143,91618,31395],{"class":149},[143,91620,91621],{"class":145,"line":10693},[143,91622,3300],{"emptyLinePlaceholder":976},[143,91624,91625],{"class":145,"line":10698},[143,91626,91627],{"class":266},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[143,91629,91630],{"class":145,"line":10703},[143,91631,91632],{"class":266},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[143,91634,91635],{"class":145,"line":10712},[143,91636,91637],{"class":266},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[143,91639,91640],{"class":145,"line":10717},[143,91641,91642],{"class":266},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[143,91644,91645,91647,91649],{"class":145,"line":10723},[143,91646,53304],{"class":149},[143,91648,52701],{"class":153},[143,91650,183],{"class":149},[143,91652,91653,91655,91657],{"class":145,"line":10744},[143,91654,730],{"class":149},[143,91656,52688],{"class":153},[143,91658,183],{"class":149},[143,91660,91661],{"class":145,"line":10750},[143,91662,3300],{"emptyLinePlaceholder":976},[143,91664,91665,91667,91669],{"class":145,"line":10764},[143,91666,730],{"class":149},[143,91668,51533],{"class":153},[143,91670,183],{"class":149},[58,91672,91674],{"id":91673},"_4172-节流","4.17.2 节流",[63,91676,91677],{},[29,91678],{"alt":138,"src":91679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[63,91681,91682],{},[29,91683],{"alt":138,"src":91684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[63,91686,91687],{},[25,91688,91689],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[63,91691,91692],{},"实现方式：",[232,91694,91695],{},[22,91696,91697],{},"lodash 提供的节流函数来处理",[63,91699,91700],{},"_.throttle(func,[wait=0],[options=])",[63,91702,91703],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[133,91705,91707],{"className":51531,"code":91706,"language":51533,"meta":138,"style":138},"\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",[140,91708,91709,91719,91733,91737,91745,91759,91779,91791,91799,91805,91815,91827,91839,91849,91861,91871,91881,91893,91897,91905,91913,91917,91925,91943,91961,91969,91987,91997,92005,92015,92019,92023,92027,92032,92037,92058,92066,92074,92078],{"__ignoreMap":138},[143,91710,91711,91713,91715,91717],{"class":145,"line":146},[143,91712,52195],{"class":149},[143,91714,52198],{"class":153},[143,91716,52201],{"class":156},[143,91718,183],{"class":149},[143,91720,91721,91723,91725,91727,91729,91731],{"class":145,"line":35},[143,91722,150],{"class":149},[143,91724,51533],{"class":153},[143,91726,52212],{"class":156},[143,91728,160],{"class":149},[143,91730,52217],{"class":163},[143,91732,183],{"class":149},[143,91734,91735],{"class":145,"line":46},[143,91736,3300],{"emptyLinePlaceholder":976},[143,91738,91739,91741,91743],{"class":145,"line":293},[143,91740,150],{"class":149},[143,91742,52230],{"class":153},[143,91744,183],{"class":149},[143,91746,91747,91749,91751,91753,91755,91757],{"class":145,"line":306},[143,91748,634],{"class":149},[143,91750,52240],{"class":153},[143,91752,52243],{"class":156},[143,91754,160],{"class":149},[143,91756,52248],{"class":163},[143,91758,183],{"class":149},[143,91760,91761,91763,91765,91767,91769,91771,91773,91775,91777],{"class":145,"line":319},[143,91762,634],{"class":149},[143,91764,52240],{"class":153},[143,91766,15819],{"class":156},[143,91768,160],{"class":149},[143,91770,52287],{"class":163},[143,91772,52267],{"class":156},[143,91774,160],{"class":149},[143,91776,52294],{"class":163},[143,91778,183],{"class":149},[143,91780,91781,91783,91785,91787,91789],{"class":145,"line":332},[143,91782,634],{"class":149},[143,91784,52303],{"class":153},[143,91786,52306],{"class":149},[143,91788,52303],{"class":153},[143,91790,183],{"class":149},[143,91792,91793,91795,91797],{"class":145,"line":345},[143,91794,634],{"class":149},[143,91796,954],{"class":153},[143,91798,183],{"class":149},[143,91800,91801,91803],{"class":145,"line":701},[143,91802,55637],{"class":156},[143,91804,275],{"class":149},[143,91806,91807,91809,91811,91813],{"class":145,"line":707},[143,91808,73475],{"class":280},[143,91810,284],{"class":149},[143,91812,61388],{"class":280},[143,91814,290],{"class":149},[143,91816,91817,91819,91821,91823,91825],{"class":145,"line":727},[143,91818,55656],{"class":280},[143,91820,284],{"class":149},[143,91822,2623],{"class":280},[143,91824,774],{"class":755},[143,91826,290],{"class":149},[143,91828,91829,91831,91833,91835,91837],{"class":145,"line":2518},[143,91830,55670],{"class":280},[143,91832,284],{"class":149},[143,91834,2623],{"class":280},[143,91836,774],{"class":755},[143,91838,290],{"class":149},[143,91840,91841,91843,91845,91847],{"class":145,"line":2524},[143,91842,55769],{"class":280},[143,91844,284],{"class":149},[143,91846,90884],{"class":280},[143,91848,290],{"class":149},[143,91850,91851,91853,91855,91857,91859],{"class":145,"line":2529},[143,91852,55807],{"class":280},[143,91854,284],{"class":149},[143,91856,1866],{"class":280},[143,91858,774],{"class":755},[143,91860,290],{"class":149},[143,91862,91863,91865,91867,91869],{"class":145,"line":2543},[143,91864,58299],{"class":280},[143,91866,284],{"class":149},[143,91868,61725],{"class":280},[143,91870,290],{"class":149},[143,91872,91873,91875,91877,91879],{"class":145,"line":2548},[143,91874,58169],{"class":280},[143,91876,284],{"class":149},[143,91878,327],{"class":280},[143,91880,290],{"class":149},[143,91882,91883,91885,91887,91889,91891],{"class":145,"line":2554},[143,91884,90923],{"class":280},[143,91886,284],{"class":149},[143,91888,1360],{"class":280},[143,91890,774],{"class":755},[143,91892,290],{"class":149},[143,91894,91895],{"class":145,"line":2575},[143,91896,3087],{"class":149},[143,91898,91899,91901,91903],{"class":145,"line":2580},[143,91900,53304],{"class":149},[143,91902,954],{"class":153},[143,91904,183],{"class":149},[143,91906,91907,91909,91911],{"class":145,"line":2594},[143,91908,730],{"class":149},[143,91910,52230],{"class":153},[143,91912,183],{"class":149},[143,91914,91915],{"class":145,"line":2599},[143,91916,3300],{"emptyLinePlaceholder":976},[143,91918,91919,91921,91923],{"class":145,"line":2628},[143,91920,150],{"class":149},[143,91922,52688],{"class":153},[143,91924,183],{"class":149},[143,91926,91927,91929,91931,91933,91935,91937,91939,91941],{"class":145,"line":2633},[143,91928,634],{"class":149},[143,91930,614],{"class":153},[143,91932,617],{"class":156},[143,91934,160],{"class":149},[143,91936,54377],{"class":163},[143,91938,56197],{"class":149},[143,91940,614],{"class":153},[143,91942,183],{"class":149},[143,91944,91945,91947,91949,91951,91953,91955,91957,91959],{"class":145,"line":2650},[143,91946,634],{"class":149},[143,91948,52701],{"class":153},[143,91950,157],{"class":156},[143,91952,160],{"class":149},[143,91954,89152],{"class":163},[143,91956,56197],{"class":149},[143,91958,52701],{"class":153},[143,91960,183],{"class":149},[143,91962,91963,91965,91967],{"class":145,"line":2655},[143,91964,634],{"class":149},[143,91966,52701],{"class":153},[143,91968,183],{"class":149},[143,91970,91971,91973,91975,91977,91979,91981,91983,91985],{"class":145,"line":2660},[143,91972,12121],{"class":755},[143,91974,87811],{"class":280},[143,91976,14464],{"class":755},[143,91978,55281],{"class":149},[143,91980,55284],{"class":156},[143,91982,1049],{"class":149},[143,91984,91024],{"class":163},[143,91986,1055],{"class":149},[143,91988,91989,91991,91993,91995],{"class":145,"line":2665},[143,91990,53106],{"class":755},[143,91992,10338],{"class":149},[143,91994,160],{"class":755},[143,91996,48231],{"class":280},[143,91998,91999,92001,92003],{"class":145,"line":2679},[143,92000,70965],{"class":755},[143,92002,91043],{"class":156},[143,92004,11753],{"class":149},[143,92006,92007,92009,92011,92013],{"class":145,"line":2684},[143,92008,91050],{"class":149},[143,92010,160],{"class":755},[143,92012,3932],{"class":149},[143,92014,3602],{"class":755},[143,92016,92017],{"class":145,"line":3477},[143,92018,91061],{"class":266},[143,92020,92021],{"class":145,"line":3491},[143,92022,3087],{"class":149},[143,92024,92025],{"class":145,"line":3499},[143,92026,91070],{"class":266},[143,92028,92029],{"class":145,"line":3504},[143,92030,92031],{"class":266},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[143,92033,92034],{"class":145,"line":3510},[143,92035,92036],{"class":266},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[143,92038,92039,92041,92043,92045,92047,92049,92052,92054,92056],{"class":145,"line":3516},[143,92040,91085],{"class":149},[143,92042,58696],{"class":156},[143,92044,1049],{"class":149},[143,92046,91092],{"class":163},[143,92048,91095],{"class":149},[143,92050,92051],{"class":156},"throttle",[143,92053,91101],{"class":149},[143,92055,65956],{"class":280},[143,92057,31395],{"class":149},[143,92059,92060,92062,92064],{"class":145,"line":3521},[143,92061,53304],{"class":149},[143,92063,52701],{"class":153},[143,92065,183],{"class":149},[143,92067,92068,92070,92072],{"class":145,"line":8848},[143,92069,730],{"class":149},[143,92071,52688],{"class":153},[143,92073,183],{"class":149},[143,92075,92076],{"class":145,"line":8872},[143,92077,3300],{"emptyLinePlaceholder":976},[143,92079,92080,92082,92084],{"class":145,"line":8877},[143,92081,730],{"class":149},[143,92083,51533],{"class":153},[143,92085,183],{"class":149},[232,92087,92088],{},[22,92089,92090],{},"手写一个节流函数来处理",[63,92092,71831],{},[63,92094,91144],{},[63,92096,92097],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[63,92099,92100],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[133,92102,92104],{"className":51531,"code":92103,"language":51533,"meta":138,"style":138},"\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",[140,92105,92106,92116,92130,92134,92142,92156,92176,92188,92196,92202,92212,92224,92236,92246,92258,92268,92278,92290,92294,92302,92310,92314,92322,92340,92358,92366,92384,92394,92402,92412,92416,92420,92424,92429,92434,92439,92444,92449,92454,92471,92477,92485,92496,92511,92518,92523,92528,92538,92543,92548,92553,92557,92561,92565,92585,92593,92601,92605],{"__ignoreMap":138},[143,92107,92108,92110,92112,92114],{"class":145,"line":146},[143,92109,52195],{"class":149},[143,92111,52198],{"class":153},[143,92113,52201],{"class":156},[143,92115,183],{"class":149},[143,92117,92118,92120,92122,92124,92126,92128],{"class":145,"line":35},[143,92119,150],{"class":149},[143,92121,51533],{"class":153},[143,92123,52212],{"class":156},[143,92125,160],{"class":149},[143,92127,52217],{"class":163},[143,92129,183],{"class":149},[143,92131,92132],{"class":145,"line":46},[143,92133,3300],{"emptyLinePlaceholder":976},[143,92135,92136,92138,92140],{"class":145,"line":293},[143,92137,150],{"class":149},[143,92139,52230],{"class":153},[143,92141,183],{"class":149},[143,92143,92144,92146,92148,92150,92152,92154],{"class":145,"line":306},[143,92145,634],{"class":149},[143,92147,52240],{"class":153},[143,92149,52243],{"class":156},[143,92151,160],{"class":149},[143,92153,52248],{"class":163},[143,92155,183],{"class":149},[143,92157,92158,92160,92162,92164,92166,92168,92170,92172,92174],{"class":145,"line":319},[143,92159,634],{"class":149},[143,92161,52240],{"class":153},[143,92163,15819],{"class":156},[143,92165,160],{"class":149},[143,92167,52287],{"class":163},[143,92169,52267],{"class":156},[143,92171,160],{"class":149},[143,92173,52294],{"class":163},[143,92175,183],{"class":149},[143,92177,92178,92180,92182,92184,92186],{"class":145,"line":332},[143,92179,634],{"class":149},[143,92181,52303],{"class":153},[143,92183,52306],{"class":149},[143,92185,52303],{"class":153},[143,92187,183],{"class":149},[143,92189,92190,92192,92194],{"class":145,"line":345},[143,92191,634],{"class":149},[143,92193,954],{"class":153},[143,92195,183],{"class":149},[143,92197,92198,92200],{"class":145,"line":701},[143,92199,55637],{"class":156},[143,92201,275],{"class":149},[143,92203,92204,92206,92208,92210],{"class":145,"line":707},[143,92205,73475],{"class":280},[143,92207,284],{"class":149},[143,92209,61388],{"class":280},[143,92211,290],{"class":149},[143,92213,92214,92216,92218,92220,92222],{"class":145,"line":727},[143,92215,55656],{"class":280},[143,92217,284],{"class":149},[143,92219,2623],{"class":280},[143,92221,774],{"class":755},[143,92223,290],{"class":149},[143,92225,92226,92228,92230,92232,92234],{"class":145,"line":2518},[143,92227,55670],{"class":280},[143,92229,284],{"class":149},[143,92231,2623],{"class":280},[143,92233,774],{"class":755},[143,92235,290],{"class":149},[143,92237,92238,92240,92242,92244],{"class":145,"line":2524},[143,92239,55769],{"class":280},[143,92241,284],{"class":149},[143,92243,90884],{"class":280},[143,92245,290],{"class":149},[143,92247,92248,92250,92252,92254,92256],{"class":145,"line":2529},[143,92249,55807],{"class":280},[143,92251,284],{"class":149},[143,92253,1866],{"class":280},[143,92255,774],{"class":755},[143,92257,290],{"class":149},[143,92259,92260,92262,92264,92266],{"class":145,"line":2543},[143,92261,58299],{"class":280},[143,92263,284],{"class":149},[143,92265,61725],{"class":280},[143,92267,290],{"class":149},[143,92269,92270,92272,92274,92276],{"class":145,"line":2548},[143,92271,58169],{"class":280},[143,92273,284],{"class":149},[143,92275,327],{"class":280},[143,92277,290],{"class":149},[143,92279,92280,92282,92284,92286,92288],{"class":145,"line":2554},[143,92281,90923],{"class":280},[143,92283,284],{"class":149},[143,92285,1360],{"class":280},[143,92287,774],{"class":755},[143,92289,290],{"class":149},[143,92291,92292],{"class":145,"line":2575},[143,92293,3087],{"class":149},[143,92295,92296,92298,92300],{"class":145,"line":2580},[143,92297,53304],{"class":149},[143,92299,954],{"class":153},[143,92301,183],{"class":149},[143,92303,92304,92306,92308],{"class":145,"line":2594},[143,92305,730],{"class":149},[143,92307,52230],{"class":153},[143,92309,183],{"class":149},[143,92311,92312],{"class":145,"line":2599},[143,92313,3300],{"emptyLinePlaceholder":976},[143,92315,92316,92318,92320],{"class":145,"line":2628},[143,92317,150],{"class":149},[143,92319,52688],{"class":153},[143,92321,183],{"class":149},[143,92323,92324,92326,92328,92330,92332,92334,92336,92338],{"class":145,"line":2633},[143,92325,634],{"class":149},[143,92327,614],{"class":153},[143,92329,617],{"class":156},[143,92331,160],{"class":149},[143,92333,54377],{"class":163},[143,92335,56197],{"class":149},[143,92337,614],{"class":153},[143,92339,183],{"class":149},[143,92341,92342,92344,92346,92348,92350,92352,92354,92356],{"class":145,"line":2650},[143,92343,634],{"class":149},[143,92345,52701],{"class":153},[143,92347,157],{"class":156},[143,92349,160],{"class":149},[143,92351,89152],{"class":163},[143,92353,56197],{"class":149},[143,92355,52701],{"class":153},[143,92357,183],{"class":149},[143,92359,92360,92362,92364],{"class":145,"line":2655},[143,92361,634],{"class":149},[143,92363,52701],{"class":153},[143,92365,183],{"class":149},[143,92367,92368,92370,92372,92374,92376,92378,92380,92382],{"class":145,"line":2660},[143,92369,12121],{"class":755},[143,92371,87811],{"class":280},[143,92373,14464],{"class":755},[143,92375,55281],{"class":149},[143,92377,55284],{"class":156},[143,92379,1049],{"class":149},[143,92381,91024],{"class":163},[143,92383,1055],{"class":149},[143,92385,92386,92388,92390,92392],{"class":145,"line":2665},[143,92387,53106],{"class":755},[143,92389,10338],{"class":149},[143,92391,160],{"class":755},[143,92393,48231],{"class":280},[143,92395,92396,92398,92400],{"class":145,"line":2679},[143,92397,70965],{"class":755},[143,92399,91043],{"class":156},[143,92401,11753],{"class":149},[143,92403,92404,92406,92408,92410],{"class":145,"line":2684},[143,92405,91050],{"class":149},[143,92407,160],{"class":755},[143,92409,3932],{"class":149},[143,92411,3602],{"class":755},[143,92413,92414],{"class":145,"line":3477},[143,92415,91061],{"class":266},[143,92417,92418],{"class":145,"line":3491},[143,92419,3087],{"class":149},[143,92421,92422],{"class":145,"line":3499},[143,92423,91070],{"class":266},[143,92425,92426],{"class":145,"line":3504},[143,92427,92428],{"class":266},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[143,92430,92431],{"class":145,"line":3510},[143,92432,92433],{"class":266},"    \u002F\u002F 1.声明一个定时器变量\n",[143,92435,92436],{"class":145,"line":3516},[143,92437,92438],{"class":266},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[143,92440,92441],{"class":145,"line":3521},[143,92442,92443],{"class":266},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[143,92445,92446],{"class":145,"line":8848},[143,92447,92448],{"class":266},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[143,92450,92451],{"class":145,"line":8872},[143,92452,92453],{"class":266},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[143,92455,92456,92458,92461,92463,92465,92467,92469],{"class":145,"line":8877},[143,92457,70965],{"class":755},[143,92459,92460],{"class":156}," throttle",[143,92462,1049],{"class":149},[143,92464,91515],{"class":6116},[143,92466,13335],{"class":149},[143,92468,1761],{"class":6116},[143,92470,13342],{"class":149},[143,92472,92473,92475],{"class":145,"line":8883},[143,92474,80650],{"class":755},[143,92476,91528],{"class":149},[143,92478,92479,92481,92483],{"class":145,"line":8910},[143,92480,74861],{"class":755},[143,92482,59801],{"class":755},[143,92484,55337],{"class":149},[143,92486,92487,92489,92491,92493],{"class":145,"line":8915},[143,92488,3397],{"class":755},[143,92490,2559],{"class":149},[143,92492,1268],{"class":755},[143,92494,92495],{"class":149},"timer) {\n",[143,92497,92498,92501,92503,92505,92507,92509],{"class":145,"line":8921},[143,92499,92500],{"class":149},"          timer ",[143,92502,160],{"class":755},[143,92504,91569],{"class":156},[143,92506,1049],{"class":149},[143,92508,55334],{"class":755},[143,92510,55337],{"class":149},[143,92512,92513,92516],{"class":145,"line":8933},[143,92514,92515],{"class":156},"            fn",[143,92517,2876],{"class":149},[143,92519,92520],{"class":145,"line":8945},[143,92521,92522],{"class":266},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[143,92524,92525],{"class":145,"line":8957},[143,92526,92527],{"class":266},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[143,92529,92530,92533,92535],{"class":145,"line":10616},[143,92531,92532],{"class":149},"            timer ",[143,92534,160],{"class":755},[143,92536,92537],{"class":280}," null\n",[143,92539,92540],{"class":145,"line":10641},[143,92541,92542],{"class":266},"            \u002F\u002F 不能用clearTimeout(timer)\n",[143,92544,92545],{"class":145,"line":10664},[143,92546,92547],{"class":266},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[143,92549,92550],{"class":145,"line":10688},[143,92551,92552],{"class":149},"          }, t)\n",[143,92554,92555],{"class":145,"line":10693},[143,92556,3429],{"class":149},[143,92558,92559],{"class":145,"line":10698},[143,92560,53285],{"class":149},[143,92562,92563],{"class":145,"line":10703},[143,92564,3087],{"class":149},[143,92566,92567,92569,92571,92573,92575,92577,92579,92581,92583],{"class":145,"line":10712},[143,92568,91085],{"class":149},[143,92570,58696],{"class":156},[143,92572,1049],{"class":149},[143,92574,91092],{"class":163},[143,92576,13335],{"class":149},[143,92578,92051],{"class":156},[143,92580,91101],{"class":149},[143,92582,65956],{"class":280},[143,92584,31395],{"class":149},[143,92586,92587,92589,92591],{"class":145,"line":10717},[143,92588,53304],{"class":149},[143,92590,52701],{"class":153},[143,92592,183],{"class":149},[143,92594,92595,92597,92599],{"class":145,"line":10723},[143,92596,730],{"class":149},[143,92598,52688],{"class":153},[143,92600,183],{"class":149},[143,92602,92603],{"class":145,"line":10744},[143,92604,3300],{"emptyLinePlaceholder":976},[143,92606,92607,92609,92611],{"class":145,"line":10750},[143,92608,730],{"class":149},[143,92610,51533],{"class":153},[143,92612,183],{"class":149},[58,92614,92616],{"id":92615},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[133,92618,92620],{"className":53954,"code":92619,"language":53956,"meta":138,"style":138},"\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",[140,92621,92622,92630,92638,92643,92648,92653,92658,92662,92670],{"__ignoreMap":138},[143,92623,92624,92626,92628],{"class":145,"line":146},[143,92625,150],{"class":149},[143,92627,52688],{"class":153},[143,92629,183],{"class":149},[143,92631,92632,92634,92636],{"class":145,"line":35},[143,92633,634],{"class":149},[143,92635,52701],{"class":153},[143,92637,183],{"class":149},[143,92639,92640],{"class":145,"line":46},[143,92641,92642],{"class":149},"    let timer = null\n",[143,92644,92645],{"class":145,"line":293},[143,92646,92647],{"class":149},"    timer = setTimeout(() => {\n",[143,92649,92650],{"class":145,"line":306},[143,92651,92652],{"class":149},"      clearTimeout(timer)\n",[143,92654,92655],{"class":145,"line":319},[143,92656,92657],{"class":149},"      console.log(timer)\n",[143,92659,92660],{"class":145,"line":332},[143,92661,61108],{"class":149},[143,92663,92664,92666,92668],{"class":145,"line":345},[143,92665,53304],{"class":149},[143,92667,52701],{"class":153},[143,92669,183],{"class":149},[143,92671,92672,92674,92676],{"class":145,"line":701},[143,92673,730],{"class":149},[143,92675,52688],{"class":153},[143,92677,183],{"class":149},[63,92679,92680],{},"输出为1",[63,92682,92683],{},"在开启的定时器里边写清除定时器",[63,92685,92686],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[58,92688,92690],{"id":92689},"_4174-节流综合案例","4.17.4 节流综合案例",[63,92692,92693],{},"页面打开，可以记录上一次的视频播放位置",[63,92695,92696],{},[29,92697],{"alt":138,"src":92698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[63,92700,92701],{},[29,92702],{"alt":138,"src":92703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[133,92705,92707],{"className":51531,"code":92706,"language":51533,"meta":138,"style":138},"\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",[140,92708,92709,92719,92733,92737,92745,92759,92779,92799,92821,92834,92842,92848,92858,92868,92878,92882,92886,92893,92906,92918,92922,92926,92936,92948,92962,92966,92970,92977,92987,93000,93012,93022,93032,93048,93060,93064,93068,93076,93086,93098,93108,93118,93128,93132,93136,93146,93157,93161,93169,93177,93181,93189,93203,93218,93233,93254,93262,93270,93285,93307,93315,93330,93356,93382,93408,93416,93424,93443,93451,93456,93475,93480,93498,93503,93508,93516,93521,93535,93543,93548,93565,93569,93574,93596,93600,93608,93616,93620],{"__ignoreMap":138},[143,92710,92711,92713,92715,92717],{"class":145,"line":146},[143,92712,52195],{"class":149},[143,92714,52198],{"class":153},[143,92716,52201],{"class":156},[143,92718,183],{"class":149},[143,92720,92721,92723,92725,92727,92729,92731],{"class":145,"line":35},[143,92722,150],{"class":149},[143,92724,51533],{"class":153},[143,92726,52212],{"class":156},[143,92728,160],{"class":149},[143,92730,52217],{"class":163},[143,92732,183],{"class":149},[143,92734,92735],{"class":145,"line":46},[143,92736,3300],{"emptyLinePlaceholder":976},[143,92738,92739,92741,92743],{"class":145,"line":293},[143,92740,150],{"class":149},[143,92742,52230],{"class":153},[143,92744,183],{"class":149},[143,92746,92747,92749,92751,92753,92755,92757],{"class":145,"line":306},[143,92748,634],{"class":149},[143,92750,52240],{"class":153},[143,92752,52243],{"class":156},[143,92754,160],{"class":149},[143,92756,52248],{"class":163},[143,92758,60010],{"class":149},[143,92760,92761,92763,92765,92767,92769,92771,92773,92775,92777],{"class":145,"line":319},[143,92762,634],{"class":149},[143,92764,52240],{"class":153},[143,92766,52259],{"class":156},[143,92768,160],{"class":149},[143,92770,52264],{"class":163},[143,92772,52267],{"class":156},[143,92774,160],{"class":149},[143,92776,52272],{"class":163},[143,92778,60010],{"class":149},[143,92780,92781,92783,92785,92787,92789,92791,92793,92795,92797],{"class":145,"line":332},[143,92782,634],{"class":149},[143,92784,52240],{"class":153},[143,92786,15819],{"class":156},[143,92788,160],{"class":149},[143,92790,52287],{"class":163},[143,92792,52267],{"class":156},[143,92794,160],{"class":149},[143,92796,52294],{"class":163},[143,92798,60010],{"class":149},[143,92800,92801,92803,92805,92807,92809,92812,92814,92816,92819],{"class":145,"line":345},[143,92802,634],{"class":149},[143,92804,52240],{"class":153},[143,92806,15819],{"class":156},[143,92808,160],{"class":149},[143,92810,92811],{"class":163},"\"referrer\"",[143,92813,52267],{"class":156},[143,92815,160],{"class":149},[143,92817,92818],{"class":163},"\"never\"",[143,92820,60010],{"class":149},[143,92822,92823,92825,92827,92830,92832],{"class":145,"line":701},[143,92824,634],{"class":149},[143,92826,52303],{"class":153},[143,92828,92829],{"class":149},">综合案例\u003C\u002F",[143,92831,52303],{"class":153},[143,92833,183],{"class":149},[143,92835,92836,92838,92840],{"class":145,"line":707},[143,92837,634],{"class":149},[143,92839,954],{"class":153},[143,92841,183],{"class":149},[143,92843,92844,92846],{"class":145,"line":727},[143,92845,7303],{"class":153},[143,92847,275],{"class":149},[143,92849,92850,92852,92854,92856],{"class":145,"line":2518},[143,92851,55580],{"class":280},[143,92853,284],{"class":149},[143,92855,1234],{"class":280},[143,92857,290],{"class":149},[143,92859,92860,92862,92864,92866],{"class":145,"line":2524},[143,92861,55591],{"class":280},[143,92863,284],{"class":149},[143,92865,1234],{"class":280},[143,92867,290],{"class":149},[143,92869,92870,92872,92874,92876],{"class":145,"line":2529},[143,92871,73475],{"class":280},[143,92873,284],{"class":149},[143,92875,61388],{"class":280},[143,92877,290],{"class":149},[143,92879,92880],{"class":145,"line":2543},[143,92881,3087],{"class":149},[143,92883,92884],{"class":145,"line":2548},[143,92885,3300],{"emptyLinePlaceholder":976},[143,92887,92888,92891],{"class":145,"line":2554},[143,92889,92890],{"class":156},"    .container",[143,92892,275],{"class":149},[143,92894,92895,92897,92899,92902,92904],{"class":145,"line":2575},[143,92896,55656],{"class":280},[143,92898,284],{"class":149},[143,92900,92901],{"class":280},"1200",[143,92903,774],{"class":755},[143,92905,290],{"class":149},[143,92907,92908,92910,92912,92914,92916],{"class":145,"line":2580},[143,92909,55591],{"class":280},[143,92911,284],{"class":149},[143,92913,1234],{"class":280},[143,92915,52448],{"class":280},[143,92917,290],{"class":149},[143,92919,92920],{"class":145,"line":2594},[143,92921,3087],{"class":149},[143,92923,92924],{"class":145,"line":2599},[143,92925,3300],{"emptyLinePlaceholder":976},[143,92927,92928,92931,92934],{"class":145,"line":2628},[143,92929,92930],{"class":156},"    .video",[143,92932,92933],{"class":153}," video",[143,92935,275],{"class":149},[143,92937,92938,92940,92942,92944,92946],{"class":145,"line":2633},[143,92939,55656],{"class":280},[143,92941,284],{"class":149},[143,92943,1352],{"class":280},[143,92945,1369],{"class":755},[143,92947,290],{"class":149},[143,92949,92950,92952,92954,92956,92958,92960],{"class":145,"line":2650},[143,92951,55580],{"class":280},[143,92953,284],{"class":149},[143,92955,1741],{"class":280},[143,92957,774],{"class":755},[143,92959,4993],{"class":280},[143,92961,290],{"class":149},[143,92963,92964],{"class":145,"line":2655},[143,92965,3087],{"class":149},[143,92967,92968],{"class":145,"line":2660},[143,92969,3300],{"emptyLinePlaceholder":976},[143,92971,92972,92975],{"class":145,"line":2665},[143,92973,92974],{"class":156},"    .elevator",[143,92976,275],{"class":149},[143,92978,92979,92981,92983,92985],{"class":145,"line":2679},[143,92980,55644],{"class":280},[143,92982,284],{"class":149},[143,92984,87111],{"class":280},[143,92986,290],{"class":149},[143,92988,92989,92991,92993,92996,92998],{"class":145,"line":2684},[143,92990,55832],{"class":280},[143,92992,284],{"class":149},[143,92994,92995],{"class":280},"280",[143,92997,774],{"class":755},[143,92999,290],{"class":149},[143,93001,93002,93004,93006,93008,93010],{"class":145,"line":3477},[143,93003,87305],{"class":280},[143,93005,284],{"class":149},[143,93007,1741],{"class":280},[143,93009,774],{"class":755},[143,93011,290],{"class":149},[143,93013,93014,93016,93018,93020],{"class":145,"line":3491},[143,93015,87118],{"class":280},[143,93017,284],{"class":149},[143,93019,87123],{"class":280},[143,93021,290],{"class":149},[143,93023,93024,93026,93028,93030],{"class":145,"line":3499},[143,93025,62604],{"class":280},[143,93027,284],{"class":149},[143,93029,61725],{"class":280},[143,93031,290],{"class":149},[143,93033,93034,93036,93038,93040,93042,93044,93046],{"class":145,"line":3504},[143,93035,62860],{"class":280},[143,93037,284],{"class":149},[143,93039,771],{"class":280},[143,93041,774],{"class":755},[143,93043,777],{"class":280},[143,93045,63127],{"class":280},[143,93047,290],{"class":149},[143,93049,93050,93052,93054,93056,93058],{"class":145,"line":3510},[143,93051,55656],{"class":280},[143,93053,284],{"class":149},[143,93055,1947],{"class":280},[143,93057,774],{"class":755},[143,93059,290],{"class":149},[143,93061,93062],{"class":145,"line":3516},[143,93063,3087],{"class":149},[143,93065,93066],{"class":145,"line":3521},[143,93067,3300],{"emptyLinePlaceholder":976},[143,93069,93070,93072,93074],{"class":145,"line":8848},[143,93071,92974],{"class":156},[143,93073,2302],{"class":153},[143,93075,275],{"class":149},[143,93077,93078,93080,93082,93084],{"class":145,"line":8872},[143,93079,55894],{"class":280},[143,93081,284],{"class":149},[143,93083,61752],{"class":280},[143,93085,290],{"class":149},[143,93087,93088,93090,93092,93094,93096],{"class":145,"line":8877},[143,93089,55580],{"class":280},[143,93091,284],{"class":149},[143,93093,1487],{"class":280},[143,93095,774],{"class":755},[143,93097,290],{"class":149},[143,93099,93100,93102,93104,93106],{"class":145,"line":8883},[143,93101,64852],{"class":280},[143,93103,284],{"class":149},[143,93105,55622],{"class":280},[143,93107,290],{"class":149},[143,93109,93110,93112,93114,93116],{"class":145,"line":8910},[143,93111,58169],{"class":280},[143,93113,284],{"class":149},[143,93115,327],{"class":280},[143,93117,290],{"class":149},[143,93119,93120,93122,93124,93126],{"class":145,"line":8915},[143,93121,58299],{"class":280},[143,93123,284],{"class":149},[143,93125,62953],{"class":280},[143,93127,290],{"class":149},[143,93129,93130],{"class":145,"line":8921},[143,93131,3087],{"class":149},[143,93133,93134],{"class":145,"line":8933},[143,93135,3300],{"emptyLinePlaceholder":976},[143,93137,93138,93140,93142,93144],{"class":145,"line":8945},[143,93139,92974],{"class":156},[143,93141,2302],{"class":153},[143,93143,64906],{"class":156},[143,93145,275],{"class":149},[143,93147,93148,93150,93152,93155],{"class":145,"line":8957},[143,93149,58299],{"class":280},[143,93151,284],{"class":149},[143,93153,93154],{"class":280},"#1286ff",[143,93156,290],{"class":149},[143,93158,93159],{"class":145,"line":10616},[143,93160,3087],{"class":149},[143,93162,93163,93165,93167],{"class":145,"line":10641},[143,93164,53304],{"class":149},[143,93166,954],{"class":153},[143,93168,183],{"class":149},[143,93170,93171,93173,93175],{"class":145,"line":10664},[143,93172,730],{"class":149},[143,93174,52230],{"class":153},[143,93176,183],{"class":149},[143,93178,93179],{"class":145,"line":10688},[143,93180,3300],{"emptyLinePlaceholder":976},[143,93182,93183,93185,93187],{"class":145,"line":10693},[143,93184,150],{"class":149},[143,93186,52688],{"class":153},[143,93188,183],{"class":149},[143,93190,93191,93193,93195,93197,93199,93201],{"class":145,"line":10698},[143,93192,634],{"class":149},[143,93194,614],{"class":153},[143,93196,617],{"class":156},[143,93198,160],{"class":149},[143,93200,622],{"class":163},[143,93202,183],{"class":149},[143,93204,93205,93207,93209,93211,93213,93216],{"class":145,"line":10703},[143,93206,52237],{"class":149},[143,93208,614],{"class":153},[143,93210,617],{"class":156},[143,93212,160],{"class":149},[143,93214,93215],{"class":163},"\"header\"",[143,93217,183],{"class":149},[143,93219,93220,93222,93224,93226,93228,93231],{"class":145,"line":10712},[143,93221,56119],{"class":149},[143,93223,67],{"class":153},[143,93225,61940],{"class":156},[143,93227,160],{"class":149},[143,93229,93230],{"class":163},"\"http:\u002F\u002Fpip.itcast.cn\"",[143,93232,183],{"class":149},[143,93234,93235,93237,93239,93241,93243,93246,93248,93250,93252],{"class":145,"line":10717},[143,93236,56185],{"class":149},[143,93238,29],{"class":153},[143,93240,157],{"class":156},[143,93242,160],{"class":149},[143,93244,93245],{"class":163},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[143,93247,167],{"class":156},[143,93249,160],{"class":149},[143,93251,8552],{"class":163},[143,93253,60010],{"class":149},[143,93255,93256,93258,93260],{"class":145,"line":10723},[143,93257,56290],{"class":149},[143,93259,67],{"class":153},[143,93261,183],{"class":149},[143,93263,93264,93266,93268],{"class":145,"line":10744},[143,93265,52665],{"class":149},[143,93267,614],{"class":153},[143,93269,183],{"class":149},[143,93271,93272,93274,93276,93278,93280,93283],{"class":145,"line":10750},[143,93273,52237],{"class":149},[143,93275,614],{"class":153},[143,93277,617],{"class":156},[143,93279,160],{"class":149},[143,93281,93282],{"class":163},"\"video\"",[143,93284,183],{"class":149},[143,93286,93287,93289,93291,93293,93295,93298,93301,93303,93305],{"class":145,"line":10764},[143,93288,56119],{"class":149},[143,93290,29081],{"class":153},[143,93292,157],{"class":156},[143,93294,160],{"class":149},[143,93296,93297],{"class":163},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[143,93299,93300],{"class":156}," controls",[143,93302,56197],{"class":149},[143,93304,29081],{"class":153},[143,93306,183],{"class":149},[143,93308,93309,93311,93313],{"class":145,"line":10770},[143,93310,52665],{"class":149},[143,93312,614],{"class":153},[143,93314,183],{"class":149},[143,93316,93317,93319,93321,93323,93325,93328],{"class":145,"line":10797},[143,93318,52237],{"class":149},[143,93320,614],{"class":153},[143,93322,617],{"class":156},[143,93324,160],{"class":149},[143,93326,93327],{"class":163},"\"elevator\"",[143,93329,183],{"class":149},[143,93331,93332,93334,93336,93338,93340,93342,93345,93347,93349,93352,93354],{"class":145,"line":10806},[143,93333,56119],{"class":149},[143,93335,67],{"class":153},[143,93337,61940],{"class":156},[143,93339,160],{"class":149},[143,93341,65118],{"class":163},[143,93343,93344],{"class":156}," data-ref",[143,93346,160],{"class":149},[143,93348,93282],{"class":163},[143,93350,93351],{"class":149},">视频介绍\u003C\u002F",[143,93353,67],{"class":153},[143,93355,183],{"class":149},[143,93357,93358,93360,93362,93364,93366,93368,93370,93372,93375,93378,93380],{"class":145,"line":10812},[143,93359,56119],{"class":149},[143,93361,67],{"class":153},[143,93363,61940],{"class":156},[143,93365,160],{"class":149},[143,93367,65118],{"class":163},[143,93369,93344],{"class":156},[143,93371,160],{"class":149},[143,93373,93374],{"class":163},"\"intro\"",[143,93376,93377],{"class":149},">课程简介\u003C\u002F",[143,93379,67],{"class":153},[143,93381,183],{"class":149},[143,93383,93384,93386,93388,93390,93392,93394,93396,93398,93401,93404,93406],{"class":145,"line":10820},[143,93385,56119],{"class":149},[143,93387,67],{"class":153},[143,93389,61940],{"class":156},[143,93391,160],{"class":149},[143,93393,65118],{"class":163},[143,93395,93344],{"class":156},[143,93397,160],{"class":149},[143,93399,93400],{"class":163},"\"outline\"",[143,93402,93403],{"class":149},">评论列表\u003C\u002F",[143,93405,67],{"class":153},[143,93407,183],{"class":149},[143,93409,93410,93412,93414],{"class":145,"line":10825},[143,93411,52665],{"class":149},[143,93413,614],{"class":153},[143,93415,183],{"class":149},[143,93417,93418,93420,93422],{"class":145,"line":17502},[143,93419,53304],{"class":149},[143,93421,614],{"class":153},[143,93423,183],{"class":149},[143,93425,93426,93428,93430,93432,93434,93437,93439,93441],{"class":145,"line":17508},[143,93427,634],{"class":149},[143,93429,52701],{"class":153},[143,93431,157],{"class":156},[143,93433,160],{"class":149},[143,93435,93436],{"class":163},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[143,93438,56197],{"class":149},[143,93440,52701],{"class":153},[143,93442,183],{"class":149},[143,93444,93445,93447,93449],{"class":145,"line":17531},[143,93446,634],{"class":149},[143,93448,52701],{"class":153},[143,93450,183],{"class":149},[143,93452,93453],{"class":145,"line":17537},[143,93454,93455],{"class":266},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[143,93457,93458,93460,93462,93464,93466,93468,93470,93473],{"class":145,"line":17560},[143,93459,12121],{"class":755},[143,93461,92933],{"class":280},[143,93463,14464],{"class":755},[143,93465,55281],{"class":149},[143,93467,55284],{"class":156},[143,93469,1049],{"class":149},[143,93471,93472],{"class":163},"'video'",[143,93474,1055],{"class":149},[143,93476,93477],{"class":145,"line":17574},[143,93478,93479],{"class":266},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[143,93481,93482,93485,93487,93489,93491,93494,93496],{"class":145,"line":17594},[143,93483,93484],{"class":149},"    video.ontimeupdate ",[143,93486,160],{"class":755},[143,93488,89233],{"class":149},[143,93490,92051],{"class":156},[143,93492,93493],{"class":149},"(() ",[143,93495,85600],{"class":755},[143,93497,275],{"class":149},[143,93499,93500],{"class":145,"line":17600},[143,93501,93502],{"class":266},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[143,93504,93505],{"class":145,"line":17611},[143,93506,93507],{"class":266},"      \u002F\u002F 控制台输出当前的时间\n",[143,93509,93510,93513],{"class":145,"line":17634},[143,93511,93512],{"class":266},"      \u002F\u002F console.log(video.currentTime)",[143,93514,93515],{"class":266},"  \u002F\u002F获得当前的视频时间\n",[143,93517,93518],{"class":145,"line":17656},[143,93519,93520],{"class":266},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[143,93522,93523,93525,93527,93529,93532],{"class":145,"line":17661},[143,93524,75562],{"class":149},[143,93526,72533],{"class":156},[143,93528,1049],{"class":149},[143,93530,93531],{"class":163},"'currentTime'",[143,93533,93534],{"class":149},", video.currentTime)\n",[143,93536,93537,93539,93541],{"class":145,"line":17667},[143,93538,55420],{"class":149},[143,93540,7310],{"class":280},[143,93542,1055],{"class":149},[143,93544,93545],{"class":145,"line":17681},[143,93546,93547],{"class":266},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[143,93549,93550,93553,93556,93558,93561,93563],{"class":145,"line":17694},[143,93551,93552],{"class":149},"    video.",[143,93554,93555],{"class":156},"onloadeddata",[143,93557,14464],{"class":755},[143,93559,93560],{"class":149}," () ",[143,93562,85600],{"class":755},[143,93564,275],{"class":149},[143,93566,93567],{"class":145,"line":17699},[143,93568,60895],{"class":266},[143,93570,93571],{"class":145,"line":17713},[143,93572,93573],{"class":266},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[143,93575,93576,93579,93581,93584,93586,93588,93590,93592,93594],{"class":145,"line":17718},[143,93577,93578],{"class":149},"      video.currentTime ",[143,93580,160],{"class":755},[143,93582,93583],{"class":149}," localStorage.",[143,93585,72564],{"class":156},[143,93587,1049],{"class":149},[143,93589,93531],{"class":163},[143,93591,14614],{"class":149},[143,93593,72236],{"class":755},[143,93595,48231],{"class":280},[143,93597,93598],{"class":145,"line":17724},[143,93599,3087],{"class":149},[143,93601,93602,93604,93606],{"class":145,"line":17729},[143,93603,53304],{"class":149},[143,93605,52701],{"class":153},[143,93607,183],{"class":149},[143,93609,93610,93612,93614],{"class":145,"line":17743},[143,93611,730],{"class":149},[143,93613,52688],{"class":153},[143,93615,183],{"class":149},[143,93617,93618],{"class":145,"line":17748},[143,93619,3300],{"emptyLinePlaceholder":976},[143,93621,93622,93624,93626],{"class":145,"line":17753},[143,93623,730],{"class":149},[143,93625,51533],{"class":153},[143,93627,183],{"class":149},[954,93629,93630],{},"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":138,"searchDepth":35,"depth":35,"links":93632},[93633,93638,93642,93643,93644,93649,93654,93655,93656,93657,93664,93669,93670,93680,93684,93685,93689],{"id":77570,"depth":35,"text":77571,"children":93634},[93635,93636,93637],{"id":77574,"depth":46,"text":77575},{"id":77599,"depth":46,"text":77600},{"id":77611,"depth":46,"text":77612},{"id":77623,"depth":35,"text":77624,"children":93639},[93640,93641],{"id":77627,"depth":46,"text":77628},{"id":77642,"depth":46,"text":77643},{"id":77694,"depth":35,"text":77695},{"id":77738,"depth":35,"text":77739},{"id":77755,"depth":35,"text":77756,"children":93645},[93646,93647,93648],{"id":77759,"depth":46,"text":77760},{"id":77772,"depth":46,"text":77773},{"id":77877,"depth":46,"text":77878},{"id":78166,"depth":35,"text":78167,"children":93650},[93651,93652,93653],{"id":78170,"depth":46,"text":78171},{"id":78613,"depth":46,"text":78614},{"id":79024,"depth":46,"text":79025},{"id":79087,"depth":35,"text":79088},{"id":79166,"depth":35,"text":79167},{"id":79259,"depth":35,"text":79260},{"id":81103,"depth":35,"text":81104,"children":93658},[93659,93660,93661,93662,93663],{"id":81107,"depth":46,"text":81108},{"id":81119,"depth":46,"text":81120},{"id":81338,"depth":46,"text":81339},{"id":81356,"depth":46,"text":81357},{"id":81416,"depth":46,"text":81417},{"id":85684,"depth":35,"text":85685,"children":93665},[93666,93667,93668],{"id":85688,"depth":46,"text":85689},{"id":85706,"depth":46,"text":85707},{"id":85732,"depth":46,"text":85733},{"id":85741,"depth":35,"text":85742},{"id":85763,"depth":35,"text":85764,"children":93671},[93672,93673,93674,93675,93676,93677,93678,93679],{"id":85767,"depth":46,"text":85768},{"id":86028,"depth":46,"text":86029},{"id":86214,"depth":46,"text":86215},{"id":86581,"depth":46,"text":86582},{"id":86697,"depth":46,"text":86698},{"id":86733,"depth":46,"text":86734},{"id":86780,"depth":46,"text":86781},{"id":86814,"depth":46,"text":86815},{"id":88177,"depth":35,"text":88178,"children":93681},[93682,93683],{"id":88181,"depth":46,"text":88182},{"id":88218,"depth":46,"text":88219},{"id":89573,"depth":35,"text":89574},{"id":89944,"depth":35,"text":89945,"children":93686},[93687,93688],{"id":89948,"depth":46,"text":89949},{"id":89982,"depth":46,"text":89983},{"id":90711,"depth":35,"text":90712,"children":93690},[93691,93692,93693,93694],{"id":90715,"depth":46,"text":90716},{"id":91673,"depth":46,"text":91674},{"id":92615,"depth":46,"text":92616},{"id":92689,"depth":46,"text":92690},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77559,"description":973},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93701,"title":93702,"body":93703,"description":93714,"extension":974,"meta":93715,"navigation":976,"path":93717,"seo":93718,"stem":93719,"__hash__":93720},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93704,"toc":93712},[93705],[63,93706,93707,93708],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[67,93709,93710],{"href":93710,"rel":93711},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[71],{"title":138,"searchDepth":35,"depth":35,"links":93713},[],"三件套第三套学习",{"category":93716},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93702,"description":93714},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93722,"title":93723,"body":93724,"description":973,"extension":974,"meta":93829,"navigation":976,"path":93830,"seo":93831,"stem":93832,"__hash__":93833},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93725,"toc":93824},[93726,93733,93736,93739,93742,93746,93755,93758,93761,93765,93774,93777,93781,93784,93804,93807,93821],[63,93727,93728],{},[67,93729,93732],{"href":93730,"rel":93731},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[71],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93734,93723],{"id":93735},"_1安装",[63,93737,93738],{},"numpy是科学计算基础库,底层是C语言",[63,93740,93741],{},"三种方式：",[14,93743,93745],{"id":93744},"_11-通过pip安装","1.1 通过pip安装",[133,93747,93749],{"className":31276,"code":93748,"language":31278,"meta":138,"style":138},"pip install numpy\n",[140,93750,93751],{"__ignoreMap":138},[143,93752,93753],{"class":145,"line":146},[143,93754,93748],{"class":149},[63,93756,93757],{},"首选方式，自动处理依赖项",[63,93759,93760],{},"在提示系统命令符中使用cmd",[14,93762,93764],{"id":93763},"_12-通过anaconda安装","1.2 通过Anaconda安装",[133,93766,93768],{"className":31276,"code":93767,"language":31278,"meta":138,"style":138},"conda install numpy\n",[140,93769,93770],{"__ignoreMap":138},[143,93771,93772],{"class":145,"line":146},[143,93773,93767],{"class":149},[63,93775,93776],{},"自动解决环境依赖",[14,93778,93780],{"id":93779},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[63,93782,93783],{},"对于Debian\u002FUbuntu",[133,93785,93787],{"className":31276,"code":93786,"language":31278,"meta":138,"style":138},"sudo apt-get install python3-numpy\n",[140,93788,93789],{"__ignoreMap":138},[143,93790,93791,93794,93796,93799,93801],{"class":145,"line":146},[143,93792,93793],{"class":149},"sudo apt",[143,93795,1573],{"class":755},[143,93797,93798],{"class":149},"get install python3",[143,93800,1573],{"class":755},[143,93802,93803],{"class":149},"numpy\n",[63,93805,93806],{},"对于Fedora:",[133,93808,93810],{"className":31276,"code":93809,"language":31278,"meta":138,"style":138},"sudo dnf install python3-numpy\n",[140,93811,93812],{"__ignoreMap":138},[143,93813,93814,93817,93819],{"class":145,"line":146},[143,93815,93816],{"class":149},"sudo dnf install python3",[143,93818,1573],{"class":755},[143,93820,93803],{"class":149},[954,93822,93823],{},"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":138,"searchDepth":35,"depth":35,"links":93825},[93826,93827,93828],{"id":93744,"depth":35,"text":93745},{"id":93763,"depth":35,"text":93764},{"id":93779,"depth":35,"text":93780},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93723,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93835,"title":93836,"body":93837,"description":973,"extension":974,"meta":93950,"navigation":976,"path":93951,"seo":93952,"stem":93953,"__hash__":93954},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93838,"toc":93948},[93839,93842,93845,93848,93851,93854,93857,93860,93863,93866,93942,93945],[10,93840,93836],{"id":93841},"_10算数函数",[63,93843,93844],{},"加减乘除运算跟python基础语法没区别",[63,93846,93847],{},"除了python那种方法外还可以使用函数",[63,93849,93850],{},"加：np.add(a,b)",[63,93852,93853],{},"减：np.subtract(a,b)",[63,93855,93856],{},"乘：np.multiply(a,b)",[63,93858,93859],{},"除：np.divide(a,b) == a\u002Fb",[63,93861,93862],{},"取余：np.mod(a,b) == a%b",[63,93864,93865],{},"必须会的用法：",[133,93867,93869],{"className":31276,"code":93868,"language":31278,"meta":138,"style":138},"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",[140,93870,93871,93893,93914,93924,93937],{"__ignoreMap":138},[143,93872,93873,93875,93877,93880,93882,93885,93887,93889,93891],{"class":145,"line":146},[143,93874,67],{"class":149},[143,93876,160],{"class":755},[143,93878,93879],{"class":149},"np.arange(",[143,93881,1461],{"class":280},[143,93883,93884],{"class":149},").reshape(",[143,93886,1116],{"class":280},[143,93888,1419],{"class":149},[143,93890,1116],{"class":280},[143,93892,1055],{"class":149},[143,93894,93895,93897,93899,93902,93904,93906,93908,93910,93912],{"class":145,"line":35},[143,93896,1304],{"class":149},[143,93898,160],{"class":755},[143,93900,93901],{"class":149},"np.array([",[143,93903,1487],{"class":280},[143,93905,1419],{"class":149},[143,93907,1487],{"class":280},[143,93909,1419],{"class":149},[143,93911,1487],{"class":280},[143,93913,5557],{"class":149},[143,93915,93916,93919,93921],{"class":145,"line":46},[143,93917,93918],{"class":149},"result",[143,93920,160],{"class":755},[143,93922,93923],{"class":149},"np.empty_like(a)\n",[143,93925,93926,93929,93932,93934],{"class":145,"line":293},[143,93927,93928],{"class":149},"np.add(a,b,",[143,93930,93931],{"class":6116},"out",[143,93933,160],{"class":755},[143,93935,93936],{"class":149},"result)\n",[143,93938,93939],{"class":145,"line":306},[143,93940,93941],{"class":149},"result\n",[63,93943,93944],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[954,93946,93947],{},"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":138,"searchDepth":35,"depth":35,"links":93949},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93836,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93956,"title":93957,"body":93958,"description":973,"extension":974,"meta":94720,"navigation":976,"path":94721,"seo":94722,"stem":94723,"__hash__":94724},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93959,"toc":94707},[93960,93963,93966,93969,93973,94012,94016,94060,94120,94124,94127,94166,94169,94214,94218,94254,94258,94327,94331,94395,94399,94402,94405,94408,94411,94447,94451,94491,94495,94567,94570,94574,94637,94641,94704],[10,93961,93957],{"id":93962},"_11统计函数",[63,93964,93965],{},"sum max min mean",[63,93967,93968],{},"这些有axis参数，可以指定方向",[14,93970,93972],{"id":93971},"_111-sum求和函数","11.1 sum()求和函数",[133,93974,93976],{"className":31276,"code":93975,"language":31278,"meta":138,"style":138},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[140,93977,93978,93983,94004],{"__ignoreMap":138},[143,93979,93980],{"class":145,"line":146},[143,93981,93982],{"class":266},"#创建一维数组\n",[143,93984,93985,93987,93989,93992,93994,93996,93998,94000,94002],{"class":145,"line":35},[143,93986,67],{"class":149},[143,93988,160],{"class":755},[143,93990,93991],{"class":149},"np.random.randint(",[143,93993,771],{"class":280},[143,93995,1419],{"class":149},[143,93997,1352],{"class":280},[143,93999,1419],{"class":149},[143,94001,1741],{"class":280},[143,94003,1055],{"class":149},[143,94005,94006,94009],{"class":145,"line":46},[143,94007,94008],{"class":149},"np.sum(a)",[143,94010,94011],{"class":266},"#求和\n",[14,94013,94015],{"id":94014},"_112-max求最大值函数","11.2 max()求最大值函数",[133,94017,94019],{"className":31276,"code":94018,"language":31278,"meta":138,"style":138},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[140,94020,94021,94025,94045,94050,94055],{"__ignoreMap":138},[143,94022,94023],{"class":145,"line":146},[143,94024,93982],{"class":266},[143,94026,94027,94029,94031,94033,94035,94037,94039,94041,94043],{"class":145,"line":35},[143,94028,67],{"class":149},[143,94030,160],{"class":755},[143,94032,93991],{"class":149},[143,94034,771],{"class":280},[143,94036,1419],{"class":149},[143,94038,1352],{"class":280},[143,94040,1419],{"class":149},[143,94042,1741],{"class":280},[143,94044,1055],{"class":149},[143,94046,94047],{"class":145,"line":46},[143,94048,94049],{"class":149},"np.max(a)\n",[143,94051,94052],{"class":145,"line":293},[143,94053,94054],{"class":266},"#最大索引(求最大元素的索引)arg\n",[143,94056,94057],{"class":145,"line":306},[143,94058,94059],{"class":149},"np.argmax(a)\n",[133,94061,94063],{"className":31276,"code":94062,"language":31278,"meta":138,"style":138},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[140,94064,94065,94086,94106,94110],{"__ignoreMap":138},[143,94066,94067,94069,94071,94074,94076,94078,94080,94082,94084],{"class":145,"line":146},[143,94068,11819],{"class":149},[143,94070,160],{"class":755},[143,94072,94073],{"class":149}," np.array([",[143,94075,771],{"class":280},[143,94077,13335],{"class":149},[143,94079,1360],{"class":280},[143,94081,13335],{"class":149},[143,94083,1116],{"class":280},[143,94085,5557],{"class":149},[143,94087,94088,94090,94092,94094,94096,94098,94100,94102,94104],{"class":145,"line":35},[143,94089,11845],{"class":149},[143,94091,160],{"class":755},[143,94093,94073],{"class":149},[143,94095,1116],{"class":280},[143,94097,13335],{"class":149},[143,94099,1122],{"class":280},[143,94101,13335],{"class":149},[143,94103,1334],{"class":280},[143,94105,5557],{"class":149},[143,94107,94108],{"class":145,"line":46},[143,94109,3300],{"emptyLinePlaceholder":976},[143,94111,94112,94114,94117],{"class":145,"line":293},[143,94113,31313],{"class":280},[143,94115,94116],{"class":149},"(np.maximum(a, b))   ",[143,94118,94119],{"class":266},"# [3 5 4]，每个位置上取较大值\n",[14,94121,94123],{"id":94122},"_113-mean求平均值函数","11.3 mean()求平均值函数",[63,94125,94126],{},"①一维数组：",[133,94128,94130],{"className":31276,"code":94129,"language":31278,"meta":138,"style":138},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[140,94131,94132,94136,94156,94161],{"__ignoreMap":138},[143,94133,94134],{"class":145,"line":146},[143,94135,93982],{"class":266},[143,94137,94138,94140,94142,94144,94146,94148,94150,94152,94154],{"class":145,"line":35},[143,94139,67],{"class":149},[143,94141,160],{"class":755},[143,94143,93991],{"class":149},[143,94145,771],{"class":280},[143,94147,1419],{"class":149},[143,94149,1352],{"class":280},[143,94151,1419],{"class":149},[143,94153,1741],{"class":280},[143,94155,1055],{"class":149},[143,94157,94158],{"class":145,"line":46},[143,94159,94160],{"class":266},"#求平均值\n",[143,94162,94163],{"class":145,"line":293},[143,94164,94165],{"class":149},"np.mean(a)\n",[63,94167,94168],{},"②二维数组",[133,94170,94172],{"className":31276,"code":94171,"language":31278,"meta":138,"style":138},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[140,94173,94174,94179,94204,94209],{"__ignoreMap":138},[143,94175,94176],{"class":145,"line":146},[143,94177,94178],{"class":266},"#二维数组\n",[143,94180,94181,94184,94186,94188,94190,94192,94194,94196,94198,94200,94202],{"class":145,"line":35},[143,94182,94183],{"class":149},"aa",[143,94185,160],{"class":755},[143,94187,93879],{"class":149},[143,94189,771],{"class":280},[143,94191,1419],{"class":149},[143,94193,1564],{"class":280},[143,94195,93884],{"class":149},[143,94197,1116],{"class":280},[143,94199,1419],{"class":149},[143,94201,1334],{"class":280},[143,94203,1055],{"class":149},[143,94205,94206],{"class":145,"line":46},[143,94207,94208],{"class":266},"#对数组中的所有数求平均\n",[143,94210,94211],{"class":145,"line":293},[143,94212,94213],{"class":149},"np.mean(aa)\n",[14,94215,94217],{"id":94216},"_114-median求中位数函数","11.4 median()求中位数函数",[133,94219,94221],{"className":31276,"code":94220,"language":31278,"meta":138,"style":138},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[140,94222,94223,94228,94244,94249],{"__ignoreMap":138},[143,94224,94225],{"class":145,"line":146},[143,94226,94227],{"class":266},"#求中位数\n",[143,94229,94230,94232,94234,94236,94238,94240,94242],{"class":145,"line":35},[143,94231,1304],{"class":149},[143,94233,160],{"class":755},[143,94235,93879],{"class":149},[143,94237,771],{"class":280},[143,94239,1419],{"class":149},[143,94241,1487],{"class":280},[143,94243,1055],{"class":149},[143,94245,94246],{"class":145,"line":46},[143,94247,94248],{"class":149},"np.median(b)\n",[143,94250,94251],{"class":145,"line":293},[143,94252,94253],{"class":266},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94255,94257],{"id":94256},"_115-power求幂运算函数","11.5 power()求幂运算函数",[133,94259,94261],{"className":31276,"code":94260,"language":31278,"meta":138,"style":138},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[140,94262,94263,94279,94284,94289,94298,94303,94312],{"__ignoreMap":138},[143,94264,94265,94267,94269,94271,94273,94275,94277],{"class":145,"line":146},[143,94266,1304],{"class":149},[143,94268,160],{"class":755},[143,94270,93879],{"class":149},[143,94272,771],{"class":280},[143,94274,1419],{"class":149},[143,94276,1487],{"class":280},[143,94278,1055],{"class":149},[143,94280,94281],{"class":145,"line":35},[143,94282,94283],{"class":266},"#幂运算\n",[143,94285,94286],{"class":145,"line":46},[143,94287,94288],{"class":266},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[143,94290,94291,94294,94296],{"class":145,"line":293},[143,94292,94293],{"class":149},"np.power(b,",[143,94295,1122],{"class":280},[143,94297,1055],{"class":149},[143,94299,94300],{"class":145,"line":306},[143,94301,94302],{"class":266},"#或者以下代码，将数据存储起来\n",[143,94304,94305,94307,94309],{"class":145,"line":319},[143,94306,1886],{"class":149},[143,94308,160],{"class":755},[143,94310,94311],{"class":149},"np.empty_like(b)\n",[143,94313,94314,94316,94318,94320,94322,94324],{"class":145,"line":332},[143,94315,94293],{"class":149},[143,94317,1122],{"class":280},[143,94319,1419],{"class":149},[143,94321,93931],{"class":6116},[143,94323,160],{"class":755},[143,94325,94326],{"class":149},"y)\n",[14,94328,94330],{"id":94329},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[133,94332,94334],{"className":31276,"code":94333,"language":31278,"meta":138,"style":138},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[140,94335,94336,94352,94357,94362,94366,94384],{"__ignoreMap":138},[143,94337,94338,94340,94342,94344,94346,94348,94350],{"class":145,"line":146},[143,94339,1304],{"class":149},[143,94341,160],{"class":755},[143,94343,93879],{"class":149},[143,94345,771],{"class":280},[143,94347,1419],{"class":149},[143,94349,1487],{"class":280},[143,94351,1055],{"class":149},[143,94353,94354],{"class":145,"line":35},[143,94355,94356],{"class":266},"#开方\n",[143,94358,94359],{"class":145,"line":46},[143,94360,94361],{"class":149},"np.sqrt(b)\n",[143,94363,94364],{"class":145,"line":293},[143,94365,94302],{"class":266},[143,94367,94368,94370,94372,94375,94378,94380,94382],{"class":145,"line":306},[143,94369,1886],{"class":149},[143,94371,160],{"class":755},[143,94373,94374],{"class":149},"np.empty_like(b,",[143,94376,94377],{"class":6116},"dtype",[143,94379,160],{"class":755},[143,94381,1087],{"class":280},[143,94383,1055],{"class":149},[143,94385,94386,94389,94391,94393],{"class":145,"line":319},[143,94387,94388],{"class":149},"np.sqrt(b,",[143,94390,93931],{"class":6116},[143,94392,160],{"class":755},[143,94394,94326],{"class":149},[14,94396,94398],{"id":94397},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[63,94400,94401],{},"对数组中的元素累计求和，可指定轴",[63,94403,94404],{},"#累计求和的意思是：",[63,94406,94407],{},"a = np.array([1, 2, 3, 4])",[63,94409,94410],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[133,94412,94414],{"className":31276,"code":94413,"language":31278,"meta":138,"style":138},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[140,94415,94416,94432,94437,94442],{"__ignoreMap":138},[143,94417,94418,94420,94422,94424,94426,94428,94430],{"class":145,"line":146},[143,94419,1304],{"class":149},[143,94421,160],{"class":755},[143,94423,93879],{"class":149},[143,94425,771],{"class":280},[143,94427,1419],{"class":149},[143,94429,1487],{"class":280},[143,94431,1055],{"class":149},[143,94433,94434],{"class":145,"line":35},[143,94435,94436],{"class":149},"np.cumsum(b)\n",[143,94438,94439],{"class":145,"line":46},[143,94440,94441],{"class":266},"#结果：\n",[143,94443,94444],{"class":145,"line":293},[143,94445,94446],{"class":266},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,94448,94450],{"id":94449},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[133,94452,94454],{"className":31276,"code":94453,"language":31278,"meta":138,"style":138},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[140,94455,94456,94472,94477,94482,94486],{"__ignoreMap":138},[143,94457,94458,94460,94462,94464,94466,94468,94470],{"class":145,"line":146},[143,94459,1304],{"class":149},[143,94461,160],{"class":755},[143,94463,93879],{"class":149},[143,94465,771],{"class":280},[143,94467,1419],{"class":149},[143,94469,1487],{"class":280},[143,94471,1055],{"class":149},[143,94473,94474],{"class":145,"line":35},[143,94475,94476],{"class":266},"#对数组中的元素累计求积，可指定轴\n",[143,94478,94479],{"class":145,"line":46},[143,94480,94481],{"class":149},"np.cumprod(b)\n",[143,94483,94484],{"class":145,"line":293},[143,94485,94441],{"class":266},[143,94487,94488],{"class":145,"line":306},[143,94489,94490],{"class":266},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,94492,94494],{"id":94493},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[133,94496,94498],{"className":31276,"code":94497,"language":31278,"meta":138,"style":138},"#删除数组中的重复数据，并对数据进行排序\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",[140,94499,94500,94505,94553,94558,94562],{"__ignoreMap":138},[143,94501,94502],{"class":145,"line":146},[143,94503,94504],{"class":266},"#删除数组中的重复数据，并对数据进行排序\n",[143,94506,94507,94509,94511,94513,94515,94517,94519,94521,94523,94525,94527,94529,94531,94533,94535,94537,94539,94541,94543,94545,94547,94549,94551],{"class":145,"line":35},[143,94508,67],{"class":149},[143,94510,160],{"class":755},[143,94512,93901],{"class":149},[143,94514,771],{"class":280},[143,94516,1419],{"class":149},[143,94518,1122],{"class":280},[143,94520,1419],{"class":149},[143,94522,1116],{"class":280},[143,94524,1419],{"class":149},[143,94526,1539],{"class":280},[143,94528,1419],{"class":149},[143,94530,1116],{"class":280},[143,94532,1419],{"class":149},[143,94534,1487],{"class":280},[143,94536,1419],{"class":149},[143,94538,1240],{"class":280},[143,94540,1419],{"class":149},[143,94542,1234],{"class":280},[143,94544,1419],{"class":149},[143,94546,1816],{"class":280},[143,94548,1419],{"class":149},[143,94550,1334],{"class":280},[143,94552,5557],{"class":149},[143,94554,94555],{"class":145,"line":46},[143,94556,94557],{"class":149},"np.unique(a)\n",[143,94559,94560],{"class":145,"line":293},[143,94561,94441],{"class":266},[143,94563,94564],{"class":145,"line":306},[143,94565,94566],{"class":266},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[63,94568,94569],{},"升序形式排序",[14,94571,94573],{"id":94572},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[133,94575,94577],{"className":31276,"code":94576,"language":31278,"meta":138,"style":138},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[140,94578,94579,94627,94632],{"__ignoreMap":138},[143,94580,94581,94583,94585,94587,94589,94591,94593,94595,94597,94599,94601,94603,94605,94607,94609,94611,94613,94615,94617,94619,94621,94623,94625],{"class":145,"line":146},[143,94582,67],{"class":149},[143,94584,160],{"class":755},[143,94586,93901],{"class":149},[143,94588,771],{"class":280},[143,94590,1419],{"class":149},[143,94592,1122],{"class":280},[143,94594,1419],{"class":149},[143,94596,1116],{"class":280},[143,94598,1419],{"class":149},[143,94600,1539],{"class":280},[143,94602,1419],{"class":149},[143,94604,1116],{"class":280},[143,94606,1419],{"class":149},[143,94608,1487],{"class":280},[143,94610,1419],{"class":149},[143,94612,1240],{"class":280},[143,94614,1419],{"class":149},[143,94616,1234],{"class":280},[143,94618,1419],{"class":149},[143,94620,1816],{"class":280},[143,94622,1419],{"class":149},[143,94624,1334],{"class":280},[143,94626,5557],{"class":149},[143,94628,94629],{"class":145,"line":35},[143,94630,94631],{"class":266},"#返回数组中非零元素的索引\n",[143,94633,94634],{"class":145,"line":46},[143,94635,94636],{"class":149},"np.nonzero(a)\n",[14,94638,94640],{"id":94639},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[133,94642,94644],{"className":31276,"code":94643,"language":31278,"meta":138,"style":138},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[140,94645,94646,94694,94699],{"__ignoreMap":138},[143,94647,94648,94650,94652,94654,94656,94658,94660,94662,94664,94666,94668,94670,94672,94674,94676,94678,94680,94682,94684,94686,94688,94690,94692],{"class":145,"line":146},[143,94649,67],{"class":149},[143,94651,160],{"class":755},[143,94653,93901],{"class":149},[143,94655,771],{"class":280},[143,94657,1419],{"class":149},[143,94659,1122],{"class":280},[143,94661,1419],{"class":149},[143,94663,1116],{"class":280},[143,94665,1419],{"class":149},[143,94667,1539],{"class":280},[143,94669,1419],{"class":149},[143,94671,1116],{"class":280},[143,94673,1419],{"class":149},[143,94675,1487],{"class":280},[143,94677,1419],{"class":149},[143,94679,1240],{"class":280},[143,94681,1419],{"class":149},[143,94683,1234],{"class":280},[143,94685,1419],{"class":149},[143,94687,1816],{"class":280},[143,94689,1419],{"class":149},[143,94691,1334],{"class":280},[143,94693,5557],{"class":149},[143,94695,94696],{"class":145,"line":35},[143,94697,94698],{"class":266},"#计算一组数中最大值与最小值的差，可指定轴\n",[143,94700,94701],{"class":145,"line":46},[143,94702,94703],{"class":149},"np.ptp(a)\n",[954,94705,94706],{},"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":138,"searchDepth":35,"depth":35,"links":94708},[94709,94710,94711,94712,94713,94714,94715,94716,94717,94718,94719],{"id":93971,"depth":35,"text":93972},{"id":94014,"depth":35,"text":94015},{"id":94122,"depth":35,"text":94123},{"id":94216,"depth":35,"text":94217},{"id":94256,"depth":35,"text":94257},{"id":94329,"depth":35,"text":94330},{"id":94397,"depth":35,"text":94398},{"id":94449,"depth":35,"text":94450},{"id":94493,"depth":35,"text":94494},{"id":94572,"depth":35,"text":94573},{"id":94639,"depth":35,"text":94640},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93957,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94726,"title":94727,"body":94728,"description":973,"extension":974,"meta":95383,"navigation":976,"path":95384,"seo":95385,"stem":95386,"__hash__":95387},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94729,"toc":95371},[94730,94733,94737,94740,94956,94960,94963,95172,95176,95242,95247,95251,95254,95257,95295,95299,95302,95307,95311,95314,95317,95322,95326,95329,95333,95336,95339,95344,95348,95351,95354,95359,95363,95368],[10,94731,94727],{"id":94732},"_12其他常用函数",[14,94734,94736],{"id":94735},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[63,94738,94739],{},"将数组的数据按照行列复制扩展",[133,94741,94743],{"className":31276,"code":94742,"language":31278,"meta":138,"style":138},"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",[140,94744,94745,94761,94770,94774,94779,94784,94797,94801,94806,94811,94816,94820,94825,94849,94861,94865,94869,94874,94879,94884,94889,94893,94906,94910,94914,94919,94924,94929,94934,94939,94943,94947,94952],{"__ignoreMap":138},[143,94746,94747,94749,94751,94753,94755,94757,94759],{"class":145,"line":146},[143,94748,67],{"class":149},[143,94750,160],{"class":755},[143,94752,93879],{"class":149},[143,94754,771],{"class":280},[143,94756,1419],{"class":149},[143,94758,1360],{"class":280},[143,94760,1055],{"class":149},[143,94762,94763,94766,94768],{"class":145,"line":35},[143,94764,94765],{"class":149},"np.tile(a,",[143,94767,1122],{"class":280},[143,94769,1055],{"class":149},[143,94771,94772],{"class":145,"line":46},[143,94773,94441],{"class":266},[143,94775,94776],{"class":145,"line":293},[143,94777,94778],{"class":266},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[143,94780,94781],{"class":145,"line":306},[143,94782,94783],{"class":266},"#行复制两次，列复制三次\n",[143,94785,94786,94789,94791,94793,94795],{"class":145,"line":319},[143,94787,94788],{"class":149},"np.tile(a,(",[143,94790,1122],{"class":280},[143,94792,1419],{"class":149},[143,94794,1116],{"class":280},[143,94796,31395],{"class":149},[143,94798,94799],{"class":145,"line":332},[143,94800,94441],{"class":266},[143,94802,94803],{"class":145,"line":345},[143,94804,94805],{"class":163},"'''\n",[143,94807,94808],{"class":145,"line":701},[143,94809,94810],{"class":163},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[143,94812,94813],{"class":145,"line":707},[143,94814,94815],{"class":163},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[143,94817,94818],{"class":145,"line":727},[143,94819,94805],{"class":163},[143,94821,94822],{"class":145,"line":2518},[143,94823,94824],{"class":266},"#创建二维数组\n",[143,94826,94827,94829,94831,94833,94835,94837,94839,94841,94843,94845,94847],{"class":145,"line":2524},[143,94828,94183],{"class":149},[143,94830,160],{"class":755},[143,94832,93879],{"class":149},[143,94834,771],{"class":280},[143,94836,1419],{"class":149},[143,94838,1564],{"class":280},[143,94840,93884],{"class":149},[143,94842,1334],{"class":280},[143,94844,1419],{"class":149},[143,94846,1116],{"class":280},[143,94848,1055],{"class":149},[143,94850,94851,94854,94856,94858],{"class":145,"line":2529},[143,94852,94853],{"class":149},"np.tile(aa,",[143,94855,1122],{"class":280},[143,94857,1470],{"class":149},[143,94859,94860],{"class":266},"#一个数的时候就是行\n",[143,94862,94863],{"class":145,"line":2543},[143,94864,94441],{"class":266},[143,94866,94867],{"class":145,"line":2548},[143,94868,94805],{"class":163},[143,94870,94871],{"class":145,"line":2554},[143,94872,94873],{"class":163},"array([[ 1,  2,  3,  1,  2,  3],\n",[143,94875,94876],{"class":145,"line":2575},[143,94877,94878],{"class":163},"       [ 4,  5,  6,  4,  5,  6],\n",[143,94880,94881],{"class":145,"line":2580},[143,94882,94883],{"class":163},"       [ 7,  8,  9,  7,  8,  9],\n",[143,94885,94886],{"class":145,"line":2594},[143,94887,94888],{"class":163},"       [10, 11, 12, 10, 11, 12]])\n",[143,94890,94891],{"class":145,"line":2599},[143,94892,94805],{"class":163},[143,94894,94895,94898,94900,94902,94904],{"class":145,"line":2628},[143,94896,94897],{"class":149},"np.tile(aa,(",[143,94899,1122],{"class":280},[143,94901,1419],{"class":149},[143,94903,1116],{"class":280},[143,94905,31395],{"class":149},[143,94907,94908],{"class":145,"line":2633},[143,94909,94441],{"class":266},[143,94911,94912],{"class":145,"line":2650},[143,94913,94805],{"class":163},[143,94915,94916],{"class":145,"line":2655},[143,94917,94918],{"class":163},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[143,94920,94921],{"class":145,"line":2660},[143,94922,94923],{"class":163},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[143,94925,94926],{"class":145,"line":2665},[143,94927,94928],{"class":163},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[143,94930,94931],{"class":145,"line":2679},[143,94932,94933],{"class":163},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[143,94935,94936],{"class":145,"line":2684},[143,94937,94938],{"class":163},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[143,94940,94941],{"class":145,"line":3477},[143,94942,94923],{"class":163},[143,94944,94945],{"class":145,"line":3491},[143,94946,94928],{"class":163},[143,94948,94949],{"class":145,"line":3499},[143,94950,94951],{"class":163},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[143,94953,94954],{"class":145,"line":3504},[143,94955,94805],{"class":163},[14,94957,94959],{"id":94958},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[63,94961,94962],{},"repeat()将数组中的每个元素重复若干次",[133,94964,94966],{"className":31276,"code":94965,"language":31278,"meta":138,"style":138},"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",[140,94967,94968,94984,94993,94997,95002,95026,95031,95040,95044,95049,95053,95058,95074,95078,95082,95087,95092,95097,95101,95106,95110,95115,95120,95124,95140,95144,95148,95153,95158,95163,95168],{"__ignoreMap":138},[143,94969,94970,94972,94974,94976,94978,94980,94982],{"class":145,"line":146},[143,94971,67],{"class":149},[143,94973,160],{"class":755},[143,94975,93879],{"class":149},[143,94977,771],{"class":280},[143,94979,1419],{"class":149},[143,94981,1360],{"class":280},[143,94983,1055],{"class":149},[143,94985,94986,94989,94991],{"class":145,"line":35},[143,94987,94988],{"class":149},"np.repeat(a,",[143,94990,1116],{"class":280},[143,94992,1055],{"class":149},[143,94994,94995],{"class":145,"line":46},[143,94996,94441],{"class":266},[143,94998,94999],{"class":145,"line":293},[143,95000,95001],{"class":266},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[143,95003,95004,95006,95008,95010,95012,95014,95016,95018,95020,95022,95024],{"class":145,"line":306},[143,95005,94183],{"class":149},[143,95007,160],{"class":755},[143,95009,93879],{"class":149},[143,95011,771],{"class":280},[143,95013,1419],{"class":149},[143,95015,1564],{"class":280},[143,95017,93884],{"class":149},[143,95019,1334],{"class":280},[143,95021,1419],{"class":149},[143,95023,1116],{"class":280},[143,95025,1055],{"class":149},[143,95027,95028],{"class":145,"line":319},[143,95029,95030],{"class":266},"#这个重复之后二维变成一维\n",[143,95032,95033,95036,95038],{"class":145,"line":332},[143,95034,95035],{"class":149},"np.repeat(aa,",[143,95037,1122],{"class":280},[143,95039,1055],{"class":149},[143,95041,95042],{"class":145,"line":345},[143,95043,94805],{"class":163},[143,95045,95046],{"class":145,"line":701},[143,95047,95048],{"class":163},"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",[143,95050,95051],{"class":145,"line":707},[143,95052,94805],{"class":163},[143,95054,95055],{"class":145,"line":727},[143,95056,95057],{"class":266},"#指定axis\n",[143,95059,95060,95062,95064,95066,95068,95070,95072],{"class":145,"line":2518},[143,95061,95035],{"class":149},[143,95063,1122],{"class":280},[143,95065,1419],{"class":149},[143,95067,48412],{"class":6116},[143,95069,160],{"class":755},[143,95071,1234],{"class":280},[143,95073,1055],{"class":149},[143,95075,95076],{"class":145,"line":2524},[143,95077,94441],{"class":266},[143,95079,95080],{"class":145,"line":2529},[143,95081,94805],{"class":163},[143,95083,95084],{"class":145,"line":2543},[143,95085,95086],{"class":163},"array([[ 1,  2,  3],\n",[143,95088,95089],{"class":145,"line":2548},[143,95090,95091],{"class":163},"       [ 1,  2,  3],\n",[143,95093,95094],{"class":145,"line":2554},[143,95095,95096],{"class":163},"       [ 4,  5,  6],\n",[143,95098,95099],{"class":145,"line":2575},[143,95100,95096],{"class":163},[143,95102,95103],{"class":145,"line":2580},[143,95104,95105],{"class":163},"       [ 7,  8,  9],\n",[143,95107,95108],{"class":145,"line":2594},[143,95109,95105],{"class":163},[143,95111,95112],{"class":145,"line":2599},[143,95113,95114],{"class":163},"       [10, 11, 12],\n",[143,95116,95117],{"class":145,"line":2628},[143,95118,95119],{"class":163},"       [10, 11, 12]])\n",[143,95121,95122],{"class":145,"line":2633},[143,95123,94805],{"class":163},[143,95125,95126,95128,95130,95132,95134,95136,95138],{"class":145,"line":2650},[143,95127,95035],{"class":149},[143,95129,1122],{"class":280},[143,95131,1419],{"class":149},[143,95133,48412],{"class":6116},[143,95135,160],{"class":755},[143,95137,771],{"class":280},[143,95139,1055],{"class":149},[143,95141,95142],{"class":145,"line":2655},[143,95143,94441],{"class":266},[143,95145,95146],{"class":145,"line":2660},[143,95147,94805],{"class":163},[143,95149,95150],{"class":145,"line":2665},[143,95151,95152],{"class":163},"array([[ 1,  1,  2,  2,  3,  3],\n",[143,95154,95155],{"class":145,"line":2679},[143,95156,95157],{"class":163},"       [ 4,  4,  5,  5,  6,  6],\n",[143,95159,95160],{"class":145,"line":2684},[143,95161,95162],{"class":163},"       [ 7,  7,  8,  8,  9,  9],\n",[143,95164,95165],{"class":145,"line":3477},[143,95166,95167],{"class":163},"       [10, 10, 11, 11, 12, 12]])\n",[143,95169,95170],{"class":145,"line":3491},[143,95171,94805],{"class":163},[14,95173,95175],{"id":95174},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[133,95177,95179],{"className":31276,"code":95178,"language":31278,"meta":138,"style":138},"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",[140,95180,95181,95197,95202,95214,95218,95223,95233,95237],{"__ignoreMap":138},[143,95182,95183,95185,95187,95189,95191,95193,95195],{"class":145,"line":146},[143,95184,67],{"class":149},[143,95186,160],{"class":755},[143,95188,93879],{"class":149},[143,95190,771],{"class":280},[143,95192,1419],{"class":149},[143,95194,1360],{"class":280},[143,95196,1055],{"class":149},[143,95198,95199],{"class":145,"line":35},[143,95200,95201],{"class":266},"#array([，2，3，4])\n",[143,95203,95204,95207,95209,95211],{"class":145,"line":46},[143,95205,95206],{"class":149},"np.roll(a,",[143,95208,1122],{"class":280},[143,95210,1470],{"class":149},[143,95212,95213],{"class":266},"#传正数向后调多少位，传负数向前调多少位\n",[143,95215,95216],{"class":145,"line":293},[143,95217,94441],{"class":266},[143,95219,95220],{"class":145,"line":306},[143,95221,95222],{"class":266},"#array([3, 4, 1, 2])\n",[143,95224,95225,95227,95229,95231],{"class":145,"line":319},[143,95226,95206],{"class":149},[143,95228,1573],{"class":755},[143,95230,771],{"class":280},[143,95232,1055],{"class":149},[143,95234,95235],{"class":145,"line":332},[143,95236,94441],{"class":266},[143,95238,95239],{"class":145,"line":345},[143,95240,95241],{"class":266},"#array([2, 3, 4, 1])\n",[63,95243,95244],{},[29,95245],{"alt":138,"src":95246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95248,95250],{"id":95249},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[63,95252,95253],{},"resize()重新调整数组的大小",[63,95255,95256],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[133,95258,95260],{"className":31276,"code":95259,"language":31278,"meta":138,"style":138},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[140,95261,95262,95267,95280],{"__ignoreMap":138},[143,95263,95264],{"class":145,"line":146},[143,95265,95266],{"class":266},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[143,95268,95269,95272,95274,95276,95278],{"class":145,"line":35},[143,95270,95271],{"class":149},"np.resize(aa,(",[143,95273,1122],{"class":280},[143,95275,1419],{"class":149},[143,95277,1385],{"class":280},[143,95279,31395],{"class":149},[143,95281,95282,95284,95286,95288,95290,95292],{"class":145,"line":46},[143,95283,95271],{"class":149},[143,95285,1122],{"class":280},[143,95287,1419],{"class":149},[143,95289,1461],{"class":280},[143,95291,83649],{"class":149},[143,95293,95294],{"class":266},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,95296,95298],{"id":95297},"_125-placeput函数","12.5 place()\u002Fput()函数",[63,95300,95301],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[63,95303,95304],{},[29,95305],{"alt":138,"src":95306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,95308,95310],{"id":95309},"_126-保存加载文件","12.6 保存加载文件",[63,95312,95313],{},"savetxt():将数据保存到txt文件中",[63,95315,95316],{},"loadtxt():从文件加载数据",[63,95318,95319],{},[29,95320],{"alt":138,"src":95321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,95323,95325],{"id":95324},"_127-genfromtxt函数","12.7 genfromtxt()函数",[63,95327,95328],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,95330,95332],{"id":95331},"_128-anyall函数","12.8 any()\u002Fall()函数",[63,95334,95335],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[63,95337,95338],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[63,95340,95341],{},[29,95342],{"alt":138,"src":95343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,95345,95347],{"id":95346},"_129-where语句","12.9 where语句",[63,95349,95350],{},"np.where(条件,x,y)",[63,95352,95353],{},"如果条件为True,对应值为x,否则对应值为y",[63,95355,95356],{},[29,95357],{"alt":138,"src":95358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,95360,95362],{"id":95361},"_1210-dot矩阵","12.10 dot()矩阵",[63,95364,95365],{},[29,95366],{"alt":138,"src":95367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[954,95369,95370],{},"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":138,"searchDepth":35,"depth":35,"links":95372},[95373,95374,95375,95376,95377,95378,95379,95380,95381,95382],{"id":94735,"depth":35,"text":94736},{"id":94958,"depth":35,"text":94959},{"id":95174,"depth":35,"text":95175},{"id":95249,"depth":35,"text":95250},{"id":95297,"depth":35,"text":95298},{"id":95309,"depth":35,"text":95310},{"id":95324,"depth":35,"text":95325},{"id":95331,"depth":35,"text":95332},{"id":95346,"depth":35,"text":95347},{"id":95361,"depth":35,"text":95362},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94727,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95389,"title":95390,"body":95391,"description":973,"extension":974,"meta":95744,"navigation":976,"path":95745,"seo":95746,"stem":95747,"__hash__":95748},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95392,"toc":95742},[95393,95396,95399,95402,95405,95408,95473,95475,95739],[10,95394,95390],{"id":95395},"_13数组排序",[63,95397,95398],{},"排序主要用到的方法是np.sort和np.argsort",[63,95400,95401],{},"其中np.sort()对数组直接排序",[63,95403,95404],{},"而np.argsort()是返回排序后的原始索引",[63,95406,95407],{},"①一维数组",[133,95409,95411],{"className":31276,"code":95410,"language":31278,"meta":138,"style":138},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[140,95412,95413,95417,95457,95465],{"__ignoreMap":138},[143,95414,95415],{"class":145,"line":146},[143,95416,93982],{"class":266},[143,95418,95419,95421,95423,95425,95427,95429,95431,95433,95435,95437,95439,95441,95443,95445,95447,95449,95451,95453,95455],{"class":145,"line":35},[143,95420,67],{"class":149},[143,95422,160],{"class":755},[143,95424,93901],{"class":149},[143,95426,1116],{"class":280},[143,95428,1419],{"class":149},[143,95430,1539],{"class":280},[143,95432,1419],{"class":149},[143,95434,1436],{"class":280},[143,95436,1419],{"class":149},[143,95438,1816],{"class":280},[143,95440,1419],{"class":149},[143,95442,1320],{"class":280},[143,95444,1419],{"class":149},[143,95446,1933],{"class":280},[143,95448,1419],{"class":149},[143,95450,1385],{"class":280},[143,95452,1419],{"class":149},[143,95454,1487],{"class":280},[143,95456,5557],{"class":149},[143,95458,95459,95462],{"class":145,"line":46},[143,95460,95461],{"class":149},"np.sort(a)",[143,95463,95464],{"class":266},"#升序排序\n",[143,95466,95467,95470],{"class":145,"line":293},[143,95468,95469],{"class":149},"np.argsort(a)",[143,95471,95472],{"class":266},"#按照元素大小来索引排序\n",[63,95474,94168],{},[133,95476,95478],{"className":31276,"code":95477,"language":31278,"meta":138,"style":138},"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",[140,95479,95480,95492,95518,95523,95527,95532,95537,95542,95547,95551,95559,95563,95568,95573,95578,95583,95587,95592,95605,95609,95614,95619,95624,95629,95633,95638,95650,95654,95658,95662,95666,95670,95674,95679,95694,95699,95708,95713,95717,95721,95726,95730,95735],{"__ignoreMap":138},[143,95481,95482,95485,95487,95489],{"class":145,"line":146},[143,95483,95484],{"class":149},"np.random.seed(",[143,95486,1234],{"class":280},[143,95488,1470],{"class":149},[143,95490,95491],{"class":266},"#保证每次值一样\n",[143,95493,95494,95496,95498,95500,95502,95504,95506,95508,95510,95512,95514,95516],{"class":145,"line":35},[143,95495,94183],{"class":149},[143,95497,160],{"class":755},[143,95499,93991],{"class":149},[143,95501,1352],{"class":280},[143,95503,1419],{"class":149},[143,95505,32394],{"class":6116},[143,95507,160],{"class":755},[143,95509,1049],{"class":149},[143,95511,1334],{"class":280},[143,95513,1419],{"class":149},[143,95515,1385],{"class":280},[143,95517,31395],{"class":149},[143,95519,95520],{"class":145,"line":46},[143,95521,95522],{"class":266},"#原数组：\n",[143,95524,95525],{"class":145,"line":293},[143,95526,94805],{"class":163},[143,95528,95529],{"class":145,"line":306},[143,95530,95531],{"class":163},"array([[44, 47, 64, 67, 67,  9],\n",[143,95533,95534],{"class":145,"line":319},[143,95535,95536],{"class":163},"       [83, 21, 36, 87, 70, 88],\n",[143,95538,95539],{"class":145,"line":332},[143,95540,95541],{"class":163},"       [88, 12, 58, 65, 39, 87],\n",[143,95543,95544],{"class":145,"line":345},[143,95545,95546],{"class":163},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[143,95548,95549],{"class":145,"line":701},[143,95550,94805],{"class":163},[143,95552,95553,95556],{"class":145,"line":707},[143,95554,95555],{"class":149},"np.sort(aa)",[143,95557,95558],{"class":266},"#每行进行了排序\n",[143,95560,95561],{"class":145,"line":727},[143,95562,94805],{"class":163},[143,95564,95565],{"class":145,"line":2518},[143,95566,95567],{"class":163},"array([[ 9, 44, 47, 64, 67, 67],\n",[143,95569,95570],{"class":145,"line":2524},[143,95571,95572],{"class":163},"       [21, 36, 70, 83, 87, 88],\n",[143,95574,95575],{"class":145,"line":2529},[143,95576,95577],{"class":163},"       [12, 39, 58, 65, 87, 88],\n",[143,95579,95580],{"class":145,"line":2543},[143,95581,95582],{"class":163},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[143,95584,95585],{"class":145,"line":2548},[143,95586,94805],{"class":163},[143,95588,95589],{"class":145,"line":2554},[143,95590,95591],{"class":266},"#axis=0时\n",[143,95593,95594,95597,95599,95601,95603],{"class":145,"line":2575},[143,95595,95596],{"class":149},"np.sort(aa,",[143,95598,48412],{"class":6116},[143,95600,160],{"class":755},[143,95602,1234],{"class":280},[143,95604,1055],{"class":149},[143,95606,95607],{"class":145,"line":2580},[143,95608,94805],{"class":163},[143,95610,95611],{"class":145,"line":2594},[143,95612,95613],{"class":163},"array([[44, 12, 36, 37, 25,  9],\n",[143,95615,95616],{"class":145,"line":2599},[143,95617,95618],{"class":163},"       [46, 21, 58, 65, 39, 77],\n",[143,95620,95621],{"class":145,"line":2628},[143,95622,95623],{"class":163},"       [83, 47, 64, 67, 67, 87],\n",[143,95625,95626],{"class":145,"line":2633},[143,95627,95628],{"class":163},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[143,95630,95631],{"class":145,"line":2650},[143,95632,94805],{"class":163},[143,95634,95635],{"class":145,"line":2655},[143,95636,95637],{"class":266},"#axis=1时,为默认值\n",[143,95639,95640,95642,95644,95646,95648],{"class":145,"line":2660},[143,95641,95596],{"class":149},[143,95643,48412],{"class":6116},[143,95645,160],{"class":755},[143,95647,771],{"class":280},[143,95649,1055],{"class":149},[143,95651,95652],{"class":145,"line":2665},[143,95653,94805],{"class":163},[143,95655,95656],{"class":145,"line":2679},[143,95657,95567],{"class":163},[143,95659,95660],{"class":145,"line":2684},[143,95661,95572],{"class":163},[143,95663,95664],{"class":145,"line":3477},[143,95665,95577],{"class":163},[143,95667,95668],{"class":145,"line":3491},[143,95669,95582],{"class":163},[143,95671,95672],{"class":145,"line":3499},[143,95673,94805],{"class":163},[143,95675,95676],{"class":145,"line":3504},[143,95677,95678],{"class":266},"#按最后一列排序\n",[143,95680,95681,95683,95685,95688,95690,95692],{"class":145,"line":3510},[143,95682,1304],{"class":149},[143,95684,160],{"class":755},[143,95686,95687],{"class":149},"aa[:,",[143,95689,1573],{"class":755},[143,95691,771],{"class":280},[143,95693,34144],{"class":149},[143,95695,95696],{"class":145,"line":3516},[143,95697,95698],{"class":266},"#获取最后一列排好序的索引\n",[143,95700,95701,95703,95705],{"class":145,"line":3521},[143,95702,74937],{"class":149},[143,95704,160],{"class":755},[143,95706,95707],{"class":149},"np.argsort(b)\n",[143,95709,95710],{"class":145,"line":8848},[143,95711,95712],{"class":149},"aa[index]\n",[143,95714,95715],{"class":145,"line":8872},[143,95716,94805],{"class":163},[143,95718,95719],{"class":145,"line":8877},[143,95720,95531],{"class":163},[143,95722,95723],{"class":145,"line":8883},[143,95724,95725],{"class":163},"       [46, 88, 81, 37, 25, 77],\n",[143,95727,95728],{"class":145,"line":8910},[143,95729,95541],{"class":163},[143,95731,95732],{"class":145,"line":8915},[143,95733,95734],{"class":163},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[143,95736,95737],{"class":145,"line":8921},[143,95738,94805],{"class":163},[954,95740,95741],{},"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":138,"searchDepth":35,"depth":35,"links":95743},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95390,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95750,"title":95751,"body":95752,"description":973,"extension":974,"meta":95782,"navigation":976,"path":95783,"seo":95784,"stem":95785,"__hash__":95786},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95753,"toc":95780},[95754,95757,95760,95763,95766,95769,95772,95775],[10,95755,95751],{"id":95756},"_14广播机制",[63,95758,95759],{},"广播的规则：",[63,95761,95762],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[63,95764,95765],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[63,95767,95768],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[63,95770,95771],{},"3.如果没有维度形状为1，则会引发异常",[63,95773,95774],{},"也就是只有维度或者个数为1才可以进行广播操作",[63,95776,95777],{},[29,95778],{"alt":138,"src":95779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":138,"searchDepth":35,"depth":35,"links":95781},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95751,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95788,"title":95789,"body":95790,"description":973,"extension":974,"meta":95888,"navigation":976,"path":95889,"seo":95890,"stem":95891,"__hash__":95892},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95791,"toc":95886},[95792,95795,95798,95883],[10,95793,95789],{"id":95794},"_15比较掩码",[63,95796,95797],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[133,95799,95801],{"className":31276,"code":95800,"language":31278,"meta":138,"style":138},"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",[140,95802,95803,95849,95860,95874,95878],{"__ignoreMap":138},[143,95804,95805,95807,95809,95812,95814,95816,95818,95820,95822,95824,95826,95828,95830,95832,95834,95836,95838,95840,95842,95844,95846],{"class":145,"line":146},[143,95806,67],{"class":149},[143,95808,160],{"class":755},[143,95810,95811],{"class":149},"np.array([[",[143,95813,771],{"class":280},[143,95815,1419],{"class":149},[143,95817,1122],{"class":280},[143,95819,1419],{"class":149},[143,95821,1116],{"class":280},[143,95823,48928],{"class":149},[143,95825,1513],{"class":280},[143,95827,1419],{"class":149},[143,95829,1539],{"class":280},[143,95831,1419],{"class":149},[143,95833,1564],{"class":280},[143,95835,48928],{"class":149},[143,95837,1766],{"class":280},[143,95839,1419],{"class":149},[143,95841,1791],{"class":280},[143,95843,1419],{"class":149},[143,95845,1816],{"class":280},[143,95847,95848],{"class":149},"]])\n",[143,95850,95851,95853,95855,95857],{"class":145,"line":35},[143,95852,67],{"class":149},[143,95854,150],{"class":755},[143,95856,1741],{"class":280},[143,95858,95859],{"class":266},"#结果是一个由True,False组成的数组\n",[143,95861,95862,95865,95867,95869,95871],{"class":145,"line":46},[143,95863,95864],{"class":149},"a[a",[143,95866,150],{"class":755},[143,95868,1741],{"class":280},[143,95870,1979],{"class":149},[143,95872,95873],{"class":266},"#小于20的元素会存到这个数组中\n",[143,95875,95876],{"class":145,"line":293},[143,95877,94441],{"class":266},[143,95879,95880],{"class":145,"line":306},[143,95881,95882],{"class":266},"#array([ 1,  2,  3, 11, 12, 13])\n",[954,95884,95885],{},"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":138,"searchDepth":35,"depth":35,"links":95887},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95789,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95894,"title":95895,"body":95896,"description":973,"extension":974,"meta":95988,"navigation":976,"path":95989,"seo":95990,"stem":95991,"__hash__":95992},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95897,"toc":95986},[95898,95901,95904,95907,95910,95913,95978,95983],[10,95899,95895],{"id":95900},"_16魔法命令time",[63,95902,95903],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[63,95905,95906],{},"%:行模式",[63,95908,95909],{},"%%:单元格模式",[63,95911,95912],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[133,95914,95916],{"className":31276,"code":95915,"language":31278,"meta":138,"style":138},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[140,95917,95918,95923,95930,95935,95944,95957,95961,95969],{"__ignoreMap":138},[143,95919,95920],{"class":145,"line":146},[143,95921,95922],{"class":266},"#程序执行时间\n",[143,95924,95925,95927],{"class":145,"line":35},[143,95926,31290],{"class":755},[143,95928,95929],{"class":149}," time \n",[143,95931,95932],{"class":145,"line":46},[143,95933,95934],{"class":266},"#获取时间\n",[143,95936,95937,95940,95942],{"class":145,"line":293},[143,95938,95939],{"class":149},"start",[143,95941,160],{"class":755},[143,95943,33316],{"class":149},[143,95945,95946,95949,95952,95954],{"class":145,"line":306},[143,95947,95948],{"class":149},"time.sleep(",[143,95950,95951],{"class":280},"0.4",[143,95953,1470],{"class":149},[143,95955,95956],{"class":266},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[143,95958,95959],{"class":145,"line":319},[143,95960,95934],{"class":266},[143,95962,95963,95965,95967],{"class":145,"line":332},[143,95964,46699],{"class":149},[143,95966,160],{"class":755},[143,95968,33316],{"class":149},[143,95970,95971,95973,95975],{"class":145,"line":345},[143,95972,46699],{"class":149},[143,95974,1573],{"class":755},[143,95976,95977],{"class":149},"start\n",[63,95979,95980],{},[29,95981],{"alt":138,"src":95982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[954,95984,95985],{},"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":138,"searchDepth":35,"depth":35,"links":95987},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95895,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95994,"title":95995,"body":95996,"description":973,"extension":974,"meta":96031,"navigation":976,"path":96032,"seo":96033,"stem":96034,"__hash__":96035},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95997,"toc":96029},[95998,96001,96004,96007,96010,96013,96016,96019,96024],[10,95999,95995],{"id":96000},"_17魔法命令timeit",[63,96002,96003],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[63,96005,96006],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[63,96008,96009],{},"单元格模式：",[63,96011,96012],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[63,96014,96015],{},"初始化语句执行次数由轮数来决定",[63,96017,96018],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[63,96020,96021],{},[29,96022],{"alt":138,"src":96023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[63,96025,96026],{},[29,96027],{"alt":138,"src":96028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":138,"searchDepth":35,"depth":35,"links":96030},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95995,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96037,"title":96038,"body":96039,"description":973,"extension":974,"meta":96057,"navigation":976,"path":96058,"seo":96059,"stem":96060,"__hash__":96061},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96040,"toc":96055},[96041,96044,96047,96050],[10,96042,96038],{"id":96043},"_18魔法命令writefile和run",[63,96045,96046],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[63,96048,96049],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[63,96051,96052],{},[29,96053],{"alt":138,"src":96054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":138,"searchDepth":35,"depth":35,"links":96056},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96038,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96063,"title":96064,"body":96065,"description":973,"extension":974,"meta":96118,"navigation":976,"path":96119,"seo":96120,"stem":96121,"__hash__":96122},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96066,"toc":96116},[96067,96070,96073,96075,96078,96081,96086,96089,96092,96095,96098,96101,96104,96107,96110,96113],[10,96068,96064],{"id":96069},"_19魔法命令memit",[63,96071,96072],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[63,96074,25497],{},[63,96076,96077],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[63,96079,96080],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[63,96082,96083],{},[29,96084],{"alt":138,"src":96085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[63,96087,96088],{},"补充：",[63,96090,96091],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[63,96093,96094],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[63,96096,96097],{},"解决方法：",[63,96099,96100],{},"1.cmd",[63,96102,96103],{},"2.依次输入以下代码：",[63,96105,96106],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[63,96108,96109],{},"pip install --upgrade ipython",[63,96111,96112],{},"#升级 memory_profiler 和 setuptools",[63,96114,96115],{},"pip install --upgrade memory_profiler setuptools",{"title":138,"searchDepth":35,"depth":35,"links":96117},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96064,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96124,"title":96125,"body":96126,"description":973,"extension":974,"meta":97771,"navigation":976,"path":97772,"seo":97773,"stem":97774,"__hash__":97775},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96127,"toc":97741},[96128,96131,96135,96139,96199,96202,96207,96211,96216,96221,96226,96231,96234,96239,96243,96247,96280,96283,96286,96289,96341,96344,96380,96383,96425,96429,96450,96452,96489,96491,96496,96498,96503,96507,96510,96538,96542,96546,96599,96603,96695,96699,96703,96706,96711,96715,96740,96745,96749,96752,96755,96758,96761,96764,96767,96770,96782,96786,96790,96793,96825,96828,96851,96854,96880,96883,96909,96912,96946,96949,97011,97015,97018,97022,97025,97051,97054,97057,97062,97065,97134,97136,97141,97202,97205,97216,97222,97227,97231,97234,97247,97251,97266,97268,97291,97293,97319,97322,97325,97328,97376,97378,97383,97387,97391,97418,97422,97449,97452,97457,97462,97552,97556,97614,97619,97622,97625,97667,97671,97727,97732,97735,97738],[10,96129,96125],{"id":96130},"_2创建数组",[14,96132,96134],{"id":96133},"_21-array函数创建数组","2.1 array()函数创建数组",[58,96136,96138],{"id":96137},"_221-函数语句","2.2.1 函数语句",[133,96140,96142],{"className":31276,"code":96141,"language":31278,"meta":138,"style":138},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[140,96143,96144],{"__ignoreMap":138},[143,96145,96146,96149,96152,96154,96156,96158,96160,96162,96165,96167,96170,96172,96174,96176,96178,96180,96183,96185,96188,96190,96193,96195,96197],{"class":145,"line":146},[143,96147,96148],{"class":149},"numpy.array(",[143,96150,96151],{"class":280},"object",[143,96153,13335],{"class":149},[143,96155,94377],{"class":6116},[143,96157,14464],{"class":755},[143,96159,39831],{"class":280},[143,96161,13335],{"class":149},[143,96163,96164],{"class":6116},"copy",[143,96166,14464],{"class":755},[143,96168,96169],{"class":280}," True",[143,96171,13335],{"class":149},[143,96173,513],{"class":6116},[143,96175,14464],{"class":755},[143,96177,39831],{"class":280},[143,96179,13335],{"class":149},[143,96181,96182],{"class":6116},"subok",[143,96184,14464],{"class":755},[143,96186,96187],{"class":280}," False",[143,96189,13335],{"class":149},[143,96191,96192],{"class":6116},"ndmin",[143,96194,14464],{"class":755},[143,96196,4993],{"class":280},[143,96198,1055],{"class":149},[63,96200,96201],{},"参数：",[63,96203,96204],{},[29,96205],{"alt":138,"src":96206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[58,96208,96210],{"id":96209},"_222-实例","2.2.2 实例",[63,96212,96213],{},[29,96214],{"alt":138,"src":96215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[63,96217,96218],{},[29,96219],{"alt":138,"src":96220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[63,96222,96223],{},[29,96224],{"alt":138,"src":96225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[63,96227,96228],{},[29,96229],{"alt":138,"src":96230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[63,96232,96233],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[63,96235,96236],{},[29,96237],{"alt":138,"src":96238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,96240,96242],{"id":96241},"_22-随机数创建数组","2.2 随机数创建数组",[58,96244,96246],{"id":96245},"_221-random语句","2.2.1 random语句",[133,96248,96250],{"className":31276,"code":96249,"language":31278,"meta":138,"style":138},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[140,96251,96252,96257,96262,96270,96275],{"__ignoreMap":138},[143,96253,96254],{"class":145,"line":146},[143,96255,96256],{"class":266},"#random.random()\n",[143,96258,96259],{"class":145,"line":35},[143,96260,96261],{"class":266},"#确定随机种子,就是每次运行结果是相同的\n",[143,96263,96264,96266,96268],{"class":145,"line":46},[143,96265,95484],{"class":149},[143,96267,1234],{"class":280},[143,96269,1055],{"class":149},[143,96271,96272],{"class":145,"line":293},[143,96273,96274],{"class":149},"np.random.random()\n",[143,96276,96277],{"class":145,"line":306},[143,96278,96279],{"class":266},"#生成一个随机的数目\n",[63,96281,96282],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[63,96284,96285],{},"可以指定数组形状 size",[63,96287,96288],{},"①生成一维数组",[133,96290,96292],{"className":31276,"code":96291,"language":31278,"meta":138,"style":138},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[140,96293,96294,96299,96312,96317,96333],{"__ignoreMap":138},[143,96295,96296],{"class":145,"line":146},[143,96297,96298],{"class":266},"#random.random(size())\n",[143,96300,96301,96304,96306,96308,96310],{"class":145,"line":35},[143,96302,96303],{"class":149},"np.random.random(",[143,96305,32394],{"class":6116},[143,96307,160],{"class":755},[143,96309,1360],{"class":280},[143,96311,1055],{"class":149},[143,96313,96314],{"class":145,"line":46},[143,96315,96316],{"class":266},"#生成一位的五个元素\n",[143,96318,96319,96321,96323,96325,96327,96329,96331],{"class":145,"line":293},[143,96320,67],{"class":149},[143,96322,160],{"class":755},[143,96324,96303],{"class":149},[143,96326,32394],{"class":6116},[143,96328,160],{"class":755},[143,96330,1334],{"class":280},[143,96332,1055],{"class":149},[143,96334,96335,96338],{"class":145,"line":306},[143,96336,96337],{"class":149},"a.shape ",[143,96339,96340],{"class":266},"#输出数组形状\n",[63,96342,96343],{},"②生成二维数组",[133,96345,96347],{"className":31276,"code":96346,"language":31278,"meta":138,"style":138},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[140,96348,96349,96353,96375],{"__ignoreMap":138},[143,96350,96351],{"class":145,"line":146},[143,96352,94178],{"class":266},[143,96354,96355,96357,96359,96361,96363,96365,96367,96369,96371,96373],{"class":145,"line":35},[143,96356,94183],{"class":149},[143,96358,160],{"class":755},[143,96360,96303],{"class":149},[143,96362,32394],{"class":6116},[143,96364,160],{"class":755},[143,96366,1049],{"class":149},[143,96368,1334],{"class":280},[143,96370,1419],{"class":149},[143,96372,1360],{"class":280},[143,96374,31395],{"class":149},[143,96376,96377],{"class":145,"line":46},[143,96378,96379],{"class":266},"#生成四行五列的数组\n",[63,96381,96382],{},"③生成三维数组",[133,96384,96386],{"className":31276,"code":96385,"language":31278,"meta":138,"style":138},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[140,96387,96388,96393,96420],{"__ignoreMap":138},[143,96389,96390],{"class":145,"line":146},[143,96391,96392],{"class":266},"#三维数组\n",[143,96394,96395,96398,96400,96402,96404,96406,96408,96410,96412,96414,96416,96418],{"class":145,"line":35},[143,96396,96397],{"class":149},"aaa",[143,96399,160],{"class":755},[143,96401,96303],{"class":149},[143,96403,32394],{"class":6116},[143,96405,160],{"class":755},[143,96407,1049],{"class":149},[143,96409,1122],{"class":280},[143,96411,1419],{"class":149},[143,96413,1116],{"class":280},[143,96415,1419],{"class":149},[143,96417,1334],{"class":280},[143,96419,31395],{"class":149},[143,96421,96422],{"class":145,"line":46},[143,96423,96424],{"class":149},"aaa.shape\n",[58,96426,96428],{"id":96427},"_222-randint语句","2.2.2 randint语句",[133,96430,96432],{"className":31276,"code":96431,"language":31278,"meta":138,"style":138},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[140,96433,96434,96439],{"__ignoreMap":138},[143,96435,96436],{"class":145,"line":146},[143,96437,96438],{"class":266},"#生成随机的整数 random.randint(low,high,size)\n",[143,96440,96441,96443,96445,96447],{"class":145,"line":35},[143,96442,93991],{"class":149},[143,96444,1360],{"class":280},[143,96446,14614],{"class":149},[143,96448,96449],{"class":266},"#0~5中的随机一个数\n",[63,96451,96288],{},[133,96453,96455],{"className":31276,"code":96454,"language":31278,"meta":138,"style":138},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[140,96456,96457,96462,96484],{"__ignoreMap":138},[143,96458,96459],{"class":145,"line":146},[143,96460,96461],{"class":266},"#一维\n",[143,96463,96464,96466,96468,96470,96472,96474,96476,96478,96480,96482],{"class":145,"line":35},[143,96465,93991],{"class":149},[143,96467,771],{"class":280},[143,96469,1419],{"class":149},[143,96471,1513],{"class":280},[143,96473,1419],{"class":149},[143,96475,32394],{"class":6116},[143,96477,160],{"class":755},[143,96479,1049],{"class":149},[143,96481,1487],{"class":280},[143,96483,31395],{"class":149},[143,96485,96486],{"class":145,"line":46},[143,96487,96488],{"class":266},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[63,96490,96343],{},[63,96492,96493],{},[29,96494],{"alt":138,"src":96495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[63,96497,96382],{},[63,96499,96500],{},[29,96501],{"alt":138,"src":96502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[58,96504,96506],{"id":96505},"_222-rand语句","2.2.2 rand语句",[63,96508,96509],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[133,96511,96513],{"className":31276,"code":96512,"language":31278,"meta":138,"style":138},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[140,96514,96515,96528,96533],{"__ignoreMap":138},[143,96516,96517,96520,96522,96524,96526],{"class":145,"line":146},[143,96518,96519],{"class":149},"np.random.rand(",[143,96521,1352],{"class":280},[143,96523,1419],{"class":149},[143,96525,1487],{"class":280},[143,96527,1055],{"class":149},[143,96529,96530],{"class":145,"line":35},[143,96531,96532],{"class":266},"#第一个参数100：行数，表示有100个样本\n",[143,96534,96535],{"class":145,"line":46},[143,96536,96537],{"class":266},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,96539,96541],{"id":96540},"_23-arange创建数组","2.3 arange()创建数组",[58,96543,96545],{"id":96544},"_231-函数语句","2.3.1 函数语句",[133,96547,96549],{"className":31276,"code":96548,"language":31278,"meta":138,"style":138},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[140,96550,96551,96565,96570,96575,96580,96585,96590,96595],{"__ignoreMap":138},[143,96552,96553,96556,96558,96560,96563],{"class":145,"line":146},[143,96554,96555],{"class":149},"numpy.arange([start,] stop[, step], ",[143,96557,94377],{"class":6116},[143,96559,160],{"class":755},[143,96561,96562],{"class":280},"None",[143,96564,1055],{"class":149},[143,96566,96567],{"class":145,"line":35},[143,96568,96569],{"class":266},"#参数\n",[143,96571,96572],{"class":145,"line":46},[143,96573,96574],{"class":163},"\"\"\"\n",[143,96576,96577],{"class":145,"line":293},[143,96578,96579],{"class":163},"start:起始值，可选，默认从 0 开始。\n",[143,96581,96582],{"class":145,"line":306},[143,96583,96584],{"class":163},"stop:结束值（不包含该值）。\n",[143,96586,96587],{"class":145,"line":319},[143,96588,96589],{"class":163},"step:步长，可选，默认是 1。可以为浮点数。\n",[143,96591,96592],{"class":145,"line":332},[143,96593,96594],{"class":163},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[143,96596,96597],{"class":145,"line":345},[143,96598,96574],{"class":163},[58,96600,96602],{"id":96601},"_232-实例","2.3.2 实例",[133,96604,96606],{"className":31276,"code":96605,"language":31278,"meta":138,"style":138},"#创建一维数组\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",[140,96607,96608,96612,96636,96641,96646,96650,96673,96677,96681,96686,96691],{"__ignoreMap":138},[143,96609,96610],{"class":145,"line":146},[143,96611,93982],{"class":266},[143,96613,96614,96616,96618,96620,96622,96624,96626,96628,96630,96632,96634],{"class":145,"line":35},[143,96615,93879],{"class":149},[143,96617,771],{"class":280},[143,96619,1419],{"class":149},[143,96621,1766],{"class":280},[143,96623,1419],{"class":149},[143,96625,771],{"class":280},[143,96627,1419],{"class":149},[143,96629,94377],{"class":6116},[143,96631,160],{"class":755},[143,96633,1052],{"class":280},[143,96635,1055],{"class":149},[143,96637,96638],{"class":145,"line":46},[143,96639,96640],{"class":266},"#输出结果：\n",[143,96642,96643],{"class":145,"line":293},[143,96644,96645],{"class":266},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[143,96647,96648],{"class":145,"line":306},[143,96649,94824],{"class":266},[143,96651,96652,96655,96657,96659,96661,96664,96666,96668,96670],{"class":145,"line":319},[143,96653,96654],{"class":149},"np.array([np.arange(",[143,96656,771],{"class":280},[143,96658,1419],{"class":149},[143,96660,1334],{"class":280},[143,96662,96663],{"class":149},"),np.arange(",[143,96665,1334],{"class":280},[143,96667,1419],{"class":149},[143,96669,1410],{"class":280},[143,96671,96672],{"class":149},")])\n",[143,96674,96675],{"class":145,"line":332},[143,96676,94441],{"class":266},[143,96678,96679],{"class":145,"line":345},[143,96680,96574],{"class":163},[143,96682,96683],{"class":145,"line":701},[143,96684,96685],{"class":163},"array([[1, 2, 3],\n",[143,96687,96688],{"class":145,"line":707},[143,96689,96690],{"class":163},"       [4, 5, 6]])\n",[143,96692,96693],{"class":145,"line":727},[143,96694,96574],{"class":163},[14,96696,96698],{"id":96697},"_24-生态分布","2.4 生态分布",[58,96700,96702],{"id":96701},"_241-标准正态分布","2.4.1 标准正态分布",[63,96704,96705],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[63,96707,96708],{},[29,96709],{"alt":138,"src":96710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[58,96712,96714],{"id":96713},"_242-常规正态分布","2.4.2 常规正态分布",[133,96716,96718],{"className":31276,"code":96717,"language":31278,"meta":138,"style":138},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[140,96719,96720,96725,96730,96735],{"__ignoreMap":138},[143,96721,96722],{"class":145,"line":146},[143,96723,96724],{"class":149},"random.normal(loc,scale,size)也可以生成正态分布\n",[143,96726,96727],{"class":145,"line":35},[143,96728,96729],{"class":266},"#loc:期望\n",[143,96731,96732],{"class":145,"line":46},[143,96733,96734],{"class":266},"#scale:方差\n",[143,96736,96737],{"class":145,"line":293},[143,96738,96739],{"class":266},"#size:用于确定是几维的数列\n",[63,96741,96742],{},[29,96743],{"alt":138,"src":96744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96746,96748],{"id":96747},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[63,96750,96751],{},"ndim:秩，维度个数",[63,96753,96754],{},"size:数组元素的个数",[63,96756,96757],{},"shape:数组的形状",[63,96759,96760],{},"dtype:数组元素的类型",[63,96762,96763],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[63,96765,96766],{},"他们都是属性，通过数组.属性的形式来确定",[63,96768,96769],{},"如果需要输出多个可以通过以下方式：",[133,96771,96773],{"className":31276,"code":96772,"language":31278,"meta":138,"style":138},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[140,96774,96775],{"__ignoreMap":138},[143,96776,96777,96779],{"class":145,"line":146},[143,96778,31313],{"class":280},[143,96780,96781],{"class":149},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96783,96785],{"id":96784},"_26-其他方式创建数组","2.6 其他方式创建数组",[58,96787,96789],{"id":96788},"_261-zeros创建数组","2.6.1 zeros()创建数组",[63,96791,96792],{},"①创建一维数组",[133,96794,96796],{"className":31276,"code":96795,"language":31278,"meta":138,"style":138},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[140,96797,96798,96807,96811,96816,96821],{"__ignoreMap":138},[143,96799,96800,96803,96805],{"class":145,"line":146},[143,96801,96802],{"class":149},"np.zeros(",[143,96804,1487],{"class":280},[143,96806,1055],{"class":149},[143,96808,96809],{"class":145,"line":35},[143,96810,96574],{"class":163},[143,96812,96813],{"class":145,"line":46},[143,96814,96815],{"class":163},"输出结果：\n",[143,96817,96818],{"class":145,"line":293},[143,96819,96820],{"class":163},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[143,96822,96823],{"class":145,"line":306},[143,96824,96574],{"class":163},[63,96826,96827],{},"上方代码等价于：",[133,96829,96831],{"className":31276,"code":96830,"language":31278,"meta":138,"style":138},"np.zeros(shape=(10))#创建10个元素的0数组\n",[140,96832,96833],{"__ignoreMap":138},[143,96834,96835,96837,96840,96842,96844,96846,96848],{"class":145,"line":146},[143,96836,96802],{"class":149},[143,96838,96839],{"class":6116},"shape",[143,96841,160],{"class":755},[143,96843,1049],{"class":149},[143,96845,1487],{"class":280},[143,96847,83649],{"class":149},[143,96849,96850],{"class":266},"#创建10个元素的0数组\n",[63,96852,96853],{},"也可以指定类型",[133,96855,96857],{"className":31276,"code":96856,"language":31278,"meta":138,"style":138},"#指定类型\nnp.zeros(5,dtype=int)\n",[140,96858,96859,96864],{"__ignoreMap":138},[143,96860,96861],{"class":145,"line":146},[143,96862,96863],{"class":266},"#指定类型\n",[143,96865,96866,96868,96870,96872,96874,96876,96878],{"class":145,"line":35},[143,96867,96802],{"class":149},[143,96869,1360],{"class":280},[143,96871,1419],{"class":149},[143,96873,94377],{"class":6116},[143,96875,160],{"class":755},[143,96877,1052],{"class":280},[143,96879,1055],{"class":149},[63,96881,96882],{},"②创建二维数组",[133,96884,96886],{"className":31276,"code":96885,"language":31278,"meta":138,"style":138},"np.zeros((3,4),dtype=int)\n",[140,96887,96888],{"__ignoreMap":138},[143,96889,96890,96893,96895,96897,96899,96901,96903,96905,96907],{"class":145,"line":146},[143,96891,96892],{"class":149},"np.zeros((",[143,96894,1116],{"class":280},[143,96896,1419],{"class":149},[143,96898,1334],{"class":280},[143,96900,43154],{"class":149},[143,96902,94377],{"class":6116},[143,96904,160],{"class":755},[143,96906,1052],{"class":280},[143,96908,1055],{"class":149},[63,96910,96911],{},"③创建三维数组",[133,96913,96915],{"className":31276,"code":96914,"language":31278,"meta":138,"style":138},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[140,96916,96917,96922],{"__ignoreMap":138},[143,96918,96919],{"class":145,"line":146},[143,96920,96921],{"class":266},"#创建三维数组\n",[143,96923,96924,96926,96928,96930,96932,96934,96936,96938,96940,96942,96944],{"class":145,"line":35},[143,96925,96892],{"class":149},[143,96927,1116],{"class":280},[143,96929,1419],{"class":149},[143,96931,1334],{"class":280},[143,96933,1419],{"class":149},[143,96935,1360],{"class":280},[143,96937,43154],{"class":149},[143,96939,94377],{"class":6116},[143,96941,160],{"class":755},[143,96943,1052],{"class":280},[143,96945,1055],{"class":149},[63,96947,96948],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[133,96950,96952],{"className":31276,"code":96951,"language":31278,"meta":138,"style":138},"#使用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",[140,96953,96954,96959,96974,96979,96984,97006],{"__ignoreMap":138},[143,96955,96956],{"class":145,"line":146},[143,96957,96958],{"class":266},"#使用zeros_like将创建的一维数组变成全0的数组\n",[143,96960,96961,96963,96965,96967,96969,96971],{"class":145,"line":35},[143,96962,67],{"class":149},[143,96964,160],{"class":755},[143,96966,93879],{"class":149},[143,96968,1334],{"class":280},[143,96970,1470],{"class":149},[143,96972,96973],{"class":266},"#这个得到的结果：一维数组0，1，2，3\n",[143,96975,96976],{"class":145,"line":46},[143,96977,96978],{"class":149},"np.zeros_like(a)\n",[143,96980,96981],{"class":145,"line":293},[143,96982,96983],{"class":266},"#使用zeros_like将创建的二维数组变成全0的数组\n",[143,96985,96986,96988,96990,96992,96994,96996,96998,97000,97002,97004],{"class":145,"line":306},[143,96987,94183],{"class":149},[143,96989,160],{"class":755},[143,96991,96303],{"class":149},[143,96993,32394],{"class":6116},[143,96995,160],{"class":755},[143,96997,1049],{"class":149},[143,96999,1334],{"class":280},[143,97001,1419],{"class":149},[143,97003,1360],{"class":280},[143,97005,31395],{"class":149},[143,97007,97008],{"class":145,"line":319},[143,97009,97010],{"class":149},"np.zeros_like(aa)\n",[58,97012,97014],{"id":97013},"_262-ones创建数组","2.6.2 ones()创建数组",[63,97016,97017],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[58,97019,97021],{"id":97020},"_263-empty创建数组","2.6.3 empty()创建数组",[63,97023,97024],{},"①empty()用法",[133,97026,97028],{"className":31276,"code":97027,"language":31278,"meta":138,"style":138},"numpy.empty(shape,dtype=float,order='c')\n",[140,97029,97030],{"__ignoreMap":138},[143,97031,97032,97035,97037,97039,97041,97043,97045,97047,97049],{"class":145,"line":146},[143,97033,97034],{"class":149},"numpy.empty(shape,",[143,97036,94377],{"class":6116},[143,97038,160],{"class":755},[143,97040,1087],{"class":280},[143,97042,1419],{"class":149},[143,97044,513],{"class":6116},[143,97046,160],{"class":755},[143,97048,76907],{"class":163},[143,97050,1055],{"class":149},[63,97052,97053],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[63,97055,97056],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[63,97058,97059],{},[29,97060],{"alt":138,"src":97061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[63,97063,97064],{},"②empty()用法",[133,97066,97068],{"className":31276,"code":97067,"language":31278,"meta":138,"style":138},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[140,97069,97070,97091,97103,97124,97129],{"__ignoreMap":138},[143,97071,97072,97074,97076,97079,97081,97083,97085,97087,97089],{"class":145,"line":146},[143,97073,1886],{"class":149},[143,97075,160],{"class":755},[143,97077,97078],{"class":149},"np.empty(",[143,97080,1487],{"class":280},[143,97082,1419],{"class":149},[143,97084,94377],{"class":6116},[143,97086,160],{"class":755},[143,97088,1052],{"class":280},[143,97090,1055],{"class":149},[143,97092,97093,97095,97097,97099,97101],{"class":145,"line":35},[143,97094,1861],{"class":149},[143,97096,160],{"class":755},[143,97098,93879],{"class":149},[143,97100,1360],{"class":280},[143,97102,1055],{"class":149},[143,97104,97105,97108,97110,97113,97115,97117,97120,97122],{"class":145,"line":46},[143,97106,97107],{"class":149},"np.add(",[143,97109,1122],{"class":280},[143,97111,97112],{"class":149},",x,",[143,97114,93931],{"class":6116},[143,97116,160],{"class":755},[143,97118,97119],{"class":149},"y[:",[143,97121,1360],{"class":280},[143,97123,5557],{"class":149},[143,97125,97126],{"class":145,"line":293},[143,97127,97128],{"class":266},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[143,97130,97131],{"class":145,"line":306},[143,97132,97133],{"class":149},"y\n",[63,97135,12414],{},[63,97137,97138],{},[29,97139],{"alt":138,"src":97140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[133,97142,97144],{"className":31276,"code":97143,"language":31278,"meta":138,"style":138},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[140,97145,97146,97162,97182,97197],{"__ignoreMap":138},[143,97147,97148,97150,97152,97154,97156,97158,97160],{"class":145,"line":146},[143,97149,1861],{"class":149},[143,97151,160],{"class":755},[143,97153,93879],{"class":149},[143,97155,771],{"class":280},[143,97157,1419],{"class":149},[143,97159,1385],{"class":280},[143,97161,1055],{"class":149},[143,97163,97164,97166,97168,97170,97172,97174,97176,97178,97180],{"class":145,"line":35},[143,97165,1886],{"class":149},[143,97167,160],{"class":755},[143,97169,97078],{"class":149},[143,97171,1360],{"class":280},[143,97173,1419],{"class":149},[143,97175,94377],{"class":6116},[143,97177,160],{"class":755},[143,97179,1052],{"class":280},[143,97181,1055],{"class":149},[143,97183,97184,97187,97189,97191,97193,97195],{"class":145,"line":46},[143,97185,97186],{"class":149},"np.add(x,",[143,97188,1122],{"class":280},[143,97190,1419],{"class":149},[143,97192,93931],{"class":6116},[143,97194,160],{"class":755},[143,97196,94326],{"class":149},[143,97198,97199],{"class":145,"line":293},[143,97200,97201],{"class":266},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[63,97203,97204],{},"③empty_like()",[63,97206,97207],{},[25,97208,97209,97210,97215],{},"创建一个",[25,97211,97212],{},[25,97213,97214],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[63,97217,97218,97221],{},[140,97219,97220],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[63,97223,97224],{},[29,97225],{"alt":138,"src":97226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[58,97228,97230],{"id":97229},"_264-用法","2.6.4 ？？用法",[63,97232,97233],{},"当想查看一个函数的参数时，可以通过？？来实现",[133,97235,97237],{"className":31276,"code":97236,"language":31278,"meta":138,"style":138},"np.full??\n",[140,97238,97239],{"__ignoreMap":138},[143,97240,97241,97244],{"class":145,"line":146},[143,97242,97243],{"class":149},"np.full",[143,97245,97246],{"class":78282},"??\n",[58,97248,97250],{"id":97249},"_265-full创建数组","2.6.5 full()创建数组",[133,97252,97254],{"className":31276,"code":97253,"language":31278,"meta":138,"style":138},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[140,97255,97256,97261],{"__ignoreMap":138},[143,97257,97258],{"class":145,"line":146},[143,97259,97260],{"class":149},"full(shape,fill_value)\n",[143,97262,97263],{"class":145,"line":35},[143,97264,97265],{"class":149},"创建全为某个指定值的数组\n",[63,97267,95407],{},[133,97269,97271],{"className":31276,"code":97270,"language":31278,"meta":138,"style":138},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[140,97272,97273,97278],{"__ignoreMap":138},[143,97274,97275],{"class":145,"line":146},[143,97276,97277],{"class":266},"#创建一个一维数组,以20进行填充\n",[143,97279,97280,97283,97285,97287,97289],{"class":145,"line":35},[143,97281,97282],{"class":149},"np.full(",[143,97284,1487],{"class":280},[143,97286,1419],{"class":149},[143,97288,1741],{"class":280},[143,97290,1055],{"class":149},[63,97292,94168],{},[133,97294,97296],{"className":31276,"code":97295,"language":31278,"meta":138,"style":138},"#创建二维数组\nnp.full((3,5),11)\n",[140,97297,97298,97302],{"__ignoreMap":138},[143,97299,97300],{"class":145,"line":146},[143,97301,94824],{"class":266},[143,97303,97304,97307,97309,97311,97313,97315,97317],{"class":145,"line":35},[143,97305,97306],{"class":149},"np.full((",[143,97308,1116],{"class":280},[143,97310,1419],{"class":149},[143,97312,1360],{"class":280},[143,97314,43154],{"class":149},[143,97316,1513],{"class":280},[143,97318,1055],{"class":149},[63,97320,97321],{},"③full_like用法",[63,97323,97324],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[63,97326,97327],{},"这里是指定填充而已",[133,97329,97331],{"className":31276,"code":97330,"language":31278,"meta":138,"style":138},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[140,97332,97333,97338,97362,97367],{"__ignoreMap":138},[143,97334,97335],{"class":145,"line":146},[143,97336,97337],{"class":266},"#创建一个指定形状数组\n",[143,97339,97340,97342,97344,97346,97348,97350,97352,97354,97356,97358,97360],{"class":145,"line":35},[143,97341,67],{"class":149},[143,97343,160],{"class":755},[143,97345,93879],{"class":149},[143,97347,771],{"class":280},[143,97349,1419],{"class":149},[143,97351,1366],{"class":280},[143,97353,93884],{"class":149},[143,97355,1334],{"class":280},[143,97357,1419],{"class":149},[143,97359,1461],{"class":280},[143,97361,1055],{"class":149},[143,97363,97364],{"class":145,"line":46},[143,97365,97366],{"class":266},"#进行指定填充\n",[143,97368,97369,97372,97374],{"class":145,"line":293},[143,97370,97371],{"class":149},"np.full_like(a,",[143,97373,1487],{"class":280},[143,97375,1055],{"class":149},[63,97377,12414],{},[63,97379,97380],{},[29,97381],{"alt":138,"src":97382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[58,97384,97386],{"id":97385},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22896,97388,97390],{"id":97389},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[133,97392,97394],{"className":31276,"code":97393,"language":31278,"meta":138,"style":138},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[140,97395,97396,97413],{"__ignoreMap":138},[143,97397,97398,97401,97403,97405,97407,97409,97411],{"class":145,"line":146},[143,97399,97400],{"class":149},"np.eye(",[143,97402,1334],{"class":280},[143,97404,1419],{"class":149},[143,97406,94377],{"class":6116},[143,97408,160],{"class":755},[143,97410,1052],{"class":280},[143,97412,1055],{"class":149},[143,97414,97415],{"class":145,"line":35},[143,97416,97417],{"class":266},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22896,97419,97421],{"id":97420},"_2662-法2identity","2.6.6.2 法2：identity()",[133,97423,97425],{"className":31276,"code":97424,"language":31278,"meta":138,"style":138},"#identity()\nnp.identity(5,dtype=int)\n",[140,97426,97427,97432],{"__ignoreMap":138},[143,97428,97429],{"class":145,"line":146},[143,97430,97431],{"class":266},"#identity()\n",[143,97433,97434,97437,97439,97441,97443,97445,97447],{"class":145,"line":35},[143,97435,97436],{"class":149},"np.identity(",[143,97438,1360],{"class":280},[143,97440,1419],{"class":149},[143,97442,94377],{"class":6116},[143,97444,160],{"class":755},[143,97446,1052],{"class":280},[143,97448,1055],{"class":149},[63,97450,97451],{},"两个函数是有区别的",[63,97453,97454],{},[29,97455],{"alt":138,"src":97456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[63,97458,97459],{},[29,97460],{"alt":138,"src":97461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[133,97463,97465],{"className":31276,"code":97464,"language":31278,"meta":138,"style":138},"# 创建一个 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",[140,97466,97467,97472,97484,97489,97494,97499,97504,97508,97513,97533,97537,97542,97547],{"__ignoreMap":138},[143,97468,97469],{"class":145,"line":146},[143,97470,97471],{"class":266},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[143,97473,97474,97476,97478,97480,97482],{"class":145,"line":35},[143,97475,97400],{"class":149},[143,97477,1116],{"class":280},[143,97479,13335],{"class":149},[143,97481,1334],{"class":280},[143,97483,1055],{"class":149},[143,97485,97486],{"class":145,"line":46},[143,97487,97488],{"class":266},"# 输出:\n",[143,97490,97491],{"class":145,"line":293},[143,97492,97493],{"class":266},"# [[1. 0. 0. 0.]\n",[143,97495,97496],{"class":145,"line":306},[143,97497,97498],{"class":266},"#  [0. 1. 0. 0.]\n",[143,97500,97501],{"class":145,"line":319},[143,97502,97503],{"class":266},"#  [0. 0. 1. 0.]]\n",[143,97505,97506],{"class":145,"line":332},[143,97507,3300],{"emptyLinePlaceholder":976},[143,97509,97510],{"class":145,"line":345},[143,97511,97512],{"class":266},"# 对角线向上偏移1\n",[143,97514,97515,97517,97519,97521,97523,97525,97527,97529,97531],{"class":145,"line":701},[143,97516,97400],{"class":149},[143,97518,1116],{"class":280},[143,97520,13335],{"class":149},[143,97522,1334],{"class":280},[143,97524,13335],{"class":149},[143,97526,1534],{"class":6116},[143,97528,160],{"class":755},[143,97530,771],{"class":280},[143,97532,1055],{"class":149},[143,97534,97535],{"class":145,"line":707},[143,97536,97488],{"class":266},[143,97538,97539],{"class":145,"line":727},[143,97540,97541],{"class":266},"# [[0. 1. 0. 0.]\n",[143,97543,97544],{"class":145,"line":2518},[143,97545,97546],{"class":266},"#  [0. 0. 1. 0.]\n",[143,97548,97549],{"class":145,"line":2524},[143,97550,97551],{"class":266},"#  [0. 0. 0. 1.]]\n",[58,97553,97555],{"id":97554},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[133,97557,97559],{"className":31276,"code":97558,"language":31278,"meta":138,"style":138},"#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",[140,97560,97561,97566,97570,97575,97580,97585,97590,97595,97600,97605,97610],{"__ignoreMap":138},[143,97562,97563],{"class":145,"line":146},[143,97564,97565],{"class":266},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[143,97567,97568],{"class":145,"line":35},[143,97569,96574],{"class":163},[143,97571,97572],{"class":145,"line":46},[143,97573,97574],{"class":163},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[143,97576,97577],{"class":145,"line":293},[143,97578,97579],{"class":163},"参数介绍：\n",[143,97581,97582],{"class":145,"line":306},[143,97583,97584],{"class":163},"start：序列的起始值\n",[143,97586,97587],{"class":145,"line":319},[143,97588,97589],{"class":163},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[143,97591,97592],{"class":145,"line":332},[143,97593,97594],{"class":163},"num：要生长的等步长的样本数量，默认为50\n",[143,97596,97597],{"class":145,"line":345},[143,97598,97599],{"class":163},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[143,97601,97602],{"class":145,"line":701},[143,97603,97604],{"class":163},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[143,97606,97607],{"class":145,"line":707},[143,97608,97609],{"class":163},"dtype：ndarry的数据类型\n",[143,97611,97612],{"class":145,"line":727},[143,97613,96574],{"class":163},[63,97615,97616],{},[29,97617],{"alt":138,"src":97618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[63,97620,97621],{},"这里num=是可以省略的",[63,97623,97624],{},"也就是下方两行代码结果是一模一样的",[133,97626,97628],{"className":31276,"code":97627,"language":31278,"meta":138,"style":138},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[140,97629,97630,97647],{"__ignoreMap":138},[143,97631,97632,97635,97637,97639,97641,97643,97645],{"class":145,"line":146},[143,97633,97634],{"class":149},"np.linspace(",[143,97636,771],{"class":280},[143,97638,1419],{"class":149},[143,97640,1360],{"class":280},[143,97642,1419],{"class":149},[143,97644,1360],{"class":280},[143,97646,1055],{"class":149},[143,97648,97649,97651,97653,97655,97657,97659,97661,97663,97665],{"class":145,"line":35},[143,97650,97634],{"class":149},[143,97652,771],{"class":280},[143,97654,1419],{"class":149},[143,97656,1360],{"class":280},[143,97658,1419],{"class":149},[143,97660,2566],{"class":6116},[143,97662,160],{"class":755},[143,97664,1360],{"class":280},[143,97666,1055],{"class":149},[58,97668,97670],{"id":97669},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[133,97672,97674],{"className":31276,"code":97673,"language":31278,"meta":138,"style":138},"#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",[140,97675,97676,97681,97685,97690,97695,97700,97705,97709,97714,97719,97723],{"__ignoreMap":138},[143,97677,97678],{"class":145,"line":146},[143,97679,97680],{"class":266},"#logspace函数用于创建一个等比数列，格式如下：\n",[143,97682,97683],{"class":145,"line":35},[143,97684,96574],{"class":163},[143,97686,97687],{"class":145,"line":46},[143,97688,97689],{"class":163},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[143,97691,97692],{"class":145,"line":293},[143,97693,97694],{"class":163},"参数为：\n",[143,97696,97697],{"class":145,"line":306},[143,97698,97699],{"class":163},"start:序列的起始位置为：base**start\n",[143,97701,97702],{"class":145,"line":319},[143,97703,97704],{"class":163},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[143,97706,97707],{"class":145,"line":332},[143,97708,97594],{"class":163},[143,97710,97711],{"class":145,"line":345},[143,97712,97713],{"class":163},"endpoint：是否包含 stop 这个值，默认是 True\n",[143,97715,97716],{"class":145,"line":701},[143,97717,97718],{"class":163},"base：对数的底数，默认是 10（常见对数）\n",[143,97720,97721],{"class":145,"line":707},[143,97722,97609],{"class":163},[143,97724,97725],{"class":145,"line":727},[143,97726,96574],{"class":163},[63,97728,97729],{},[29,97730],{"alt":138,"src":97731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[63,97733,97734],{},"logspace()函数中的num参数也是可以不写num=的",[63,97736,97737],{},"endpoint是不可以省略的",[954,97739,97740],{},"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":138,"searchDepth":35,"depth":35,"links":97742},[97743,97747,97752,97756,97760,97761],{"id":96133,"depth":35,"text":96134,"children":97744},[97745,97746],{"id":96137,"depth":46,"text":96138},{"id":96209,"depth":46,"text":96210},{"id":96241,"depth":35,"text":96242,"children":97748},[97749,97750,97751],{"id":96245,"depth":46,"text":96246},{"id":96427,"depth":46,"text":96428},{"id":96505,"depth":46,"text":96506},{"id":96540,"depth":35,"text":96541,"children":97753},[97754,97755],{"id":96544,"depth":46,"text":96545},{"id":96601,"depth":46,"text":96602},{"id":96697,"depth":35,"text":96698,"children":97757},[97758,97759],{"id":96701,"depth":46,"text":96702},{"id":96713,"depth":46,"text":96714},{"id":96747,"depth":35,"text":96748},{"id":96784,"depth":35,"text":96785,"children":97762},[97763,97764,97765,97766,97767,97768,97769,97770],{"id":96788,"depth":46,"text":96789},{"id":97013,"depth":46,"text":97014},{"id":97020,"depth":46,"text":97021},{"id":97229,"depth":46,"text":97230},{"id":97249,"depth":46,"text":97250},{"id":97385,"depth":46,"text":97386},{"id":97554,"depth":46,"text":97555},{"id":97669,"depth":46,"text":97670},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96125,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97777,"title":97778,"body":97779,"description":973,"extension":974,"meta":97872,"navigation":976,"path":97873,"seo":97874,"stem":97875,"__hash__":97876},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97780,"toc":97870},[97781,97784,97787,97790,97793,97796,97799,97802,97805,97808,97811,97814,97816,97819,97822,97827,97830,97833,97867],[10,97782,97778],{"id":97783},"_20魔法命令mprun",[63,97785,97786],{},"逐行分析数据内存的使用情况",[63,97788,97789],{},"语法格式：",[63,97791,97792],{},"%mprun -f 模块名.函数名 模块名.函数名()",[63,97794,97795],{},"分析结果列如下：",[63,97797,97798],{},"Line行号",[63,97800,97801],{},"Mem usage内存使用大小",[63,97803,97804],{},"increment内存增量",[63,97806,97807],{},"Line content代码内容",[63,97809,97810],{},"补充说明：",[63,97812,97813],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[63,97815,96080],{},[63,97817,97818],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[63,97820,97821],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[63,97823,97824],{},[29,97825],{"alt":138,"src":97826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[63,97828,97829],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[63,97831,97832],{},"这时候需要重新加载模块",[133,97834,97836],{"className":31276,"code":97835,"language":31278,"meta":138,"style":138},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[140,97837,97838,97843,97850,97855],{"__ignoreMap":138},[143,97839,97840],{"class":145,"line":146},[143,97841,97842],{"class":266},"#重新加载模块\n",[143,97844,97845,97847],{"class":145,"line":35},[143,97846,31290],{"class":755},[143,97848,97849],{"class":149}," importlib\n",[143,97851,97852],{"class":145,"line":46},[143,97853,97854],{"class":149},"importlib.reload(mprun_test)\n",[143,97856,97857,97859,97862,97864],{"class":145,"line":293},[143,97858,1369],{"class":755},[143,97860,97861],{"class":149},"mprun ",[143,97863,1573],{"class":755},[143,97865,97866],{"class":149},"f mprun_test.fun_test mprun_test.fun_test()\n",[954,97868,97869],{},"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":138,"searchDepth":35,"depth":35,"links":97871},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97778,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97878,"title":97879,"body":97880,"description":973,"extension":974,"meta":97897,"navigation":976,"path":97898,"seo":97899,"stem":97900,"__hash__":97901},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97881,"toc":97895},[97882,97885,97890],[10,97883,97879],{"id":97884},"_3一维数组的索引和切片",[63,97886,97887],{},[29,97888],{"alt":138,"src":97889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[63,97891,97892],{},[29,97893],{"alt":138,"src":97894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":138,"searchDepth":35,"depth":35,"links":97896},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97879,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97903,"title":97904,"body":97905,"description":973,"extension":974,"meta":98388,"navigation":976,"path":98389,"seo":98390,"stem":98391,"__hash__":98392},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97906,"toc":98386},[97907,97910,97913,97918,97951,97954,97992,97995,98029,98032,98137,98140,98177,98180,98281,98284,98335,98338,98380,98383],[10,97908,97904],{"id":97909},"_4二维数组的索引与切片",[63,97911,97912],{},"①获取指定单个元素",[63,97914,97915],{},[29,97916],{"alt":138,"src":97917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[133,97919,97921],{"className":31276,"code":97920,"language":31278,"meta":138,"style":138},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[140,97922,97923,97928,97933,97938],{"__ignoreMap":138},[143,97924,97925],{"class":145,"line":146},[143,97926,97927],{"class":266},"#获取元素9\n",[143,97929,97930],{"class":145,"line":35},[143,97931,97932],{"class":266},"#先获取所在行，再获取所在列\n",[143,97934,97935],{"class":145,"line":46},[143,97936,97937],{"class":266},"#数组[行索引号，列索引号]\n",[143,97939,97940,97943,97945,97947,97949],{"class":145,"line":293},[143,97941,97942],{"class":149},"a[",[143,97944,771],{"class":280},[143,97946,1419],{"class":149},[143,97948,1122],{"class":280},[143,97950,34144],{"class":149},[63,97952,97953],{},"②获取整行元素",[133,97955,97957],{"className":31276,"code":97956,"language":31278,"meta":138,"style":138},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[140,97958,97959,97964,97969,97977,97982],{"__ignoreMap":138},[143,97960,97961],{"class":145,"line":146},[143,97962,97963],{"class":266},"#获取整行 数组[行索引号]\n",[143,97965,97966],{"class":145,"line":35},[143,97967,97968],{"class":266},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[143,97970,97971,97973,97975],{"class":145,"line":46},[143,97972,97942],{"class":149},[143,97974,1122],{"class":280},[143,97976,34144],{"class":149},[143,97978,97979],{"class":145,"line":293},[143,97980,97981],{"class":266},"#也可以负索引获取一行\n",[143,97983,97984,97986,97988,97990],{"class":145,"line":306},[143,97985,97942],{"class":149},[143,97987,1573],{"class":755},[143,97989,771],{"class":280},[143,97991,34144],{"class":149},[63,97993,97994],{},"③获取整列元素",[133,97996,97998],{"className":31276,"code":97997,"language":31278,"meta":138,"style":138},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[140,97999,98000,98005,98014,98019],{"__ignoreMap":138},[143,98001,98002],{"class":145,"line":146},[143,98003,98004],{"class":266},"#获取整列 数组名[:,列索引]\n",[143,98006,98007,98010,98012],{"class":145,"line":35},[143,98008,98009],{"class":149},"a[:,",[143,98011,1122],{"class":280},[143,98013,34144],{"class":149},[143,98015,98016],{"class":145,"line":46},[143,98017,98018],{"class":266},"#也可以负索引获取一列\n",[143,98020,98021,98023,98025,98027],{"class":145,"line":293},[143,98022,98009],{"class":149},[143,98024,1573],{"class":755},[143,98026,771],{"class":280},[143,98028,34144],{"class":149},[63,98030,98031],{},"④部分行部分列的元素",[133,98033,98035],{"className":31276,"code":98034,"language":31278,"meta":138,"style":138},"#部分行部分列 数组名[行切片，列切片]\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",[140,98036,98037,98042,98052,98056,98060,98065,98070,98074,98086,98090,98094,98099,98104,98109,98114,98118,98123],{"__ignoreMap":138},[143,98038,98039],{"class":145,"line":146},[143,98040,98041],{"class":266},"#部分行部分列 数组名[行切片，列切片]\n",[143,98043,98044,98047,98049],{"class":145,"line":35},[143,98045,98046],{"class":149},"a[:",[143,98048,1122],{"class":280},[143,98050,98051],{"class":149},",:]\n",[143,98053,98054],{"class":145,"line":46},[143,98055,94441],{"class":266},[143,98057,98058],{"class":145,"line":293},[143,98059,94805],{"class":163},[143,98061,98062],{"class":145,"line":306},[143,98063,98064],{"class":163},"array([[ 1,  2,  3,  4,  5,  6],\n",[143,98066,98067],{"class":145,"line":319},[143,98068,98069],{"class":163},"       [ 7,  8,  9, 10, 11, 12]])\n",[143,98071,98072],{"class":145,"line":332},[143,98073,94805],{"class":163},[143,98075,98076,98078,98080,98082,98084],{"class":145,"line":345},[143,98077,98009],{"class":149},[143,98079,771],{"class":280},[143,98081,1900],{"class":149},[143,98083,1334],{"class":280},[143,98085,34144],{"class":149},[143,98087,98088],{"class":145,"line":701},[143,98089,94441],{"class":266},[143,98091,98092],{"class":145,"line":707},[143,98093,94805],{"class":163},[143,98095,98096],{"class":145,"line":727},[143,98097,98098],{"class":163},"array([[ 2,  3,  4],\n",[143,98100,98101],{"class":145,"line":2518},[143,98102,98103],{"class":163},"       [ 8,  9, 10],\n",[143,98105,98106],{"class":145,"line":2524},[143,98107,98108],{"class":163},"       [14, 15, 16],\n",[143,98110,98111],{"class":145,"line":2529},[143,98112,98113],{"class":163},"       [20, 21, 22]])\n",[143,98115,98116],{"class":145,"line":2543},[143,98117,94805],{"class":163},[143,98119,98120],{"class":145,"line":2548},[143,98121,98122],{"class":266},"#对列行同时进行切片，使用了step参数\n",[143,98124,98125,98128,98130,98133,98135],{"class":145,"line":2554},[143,98126,98127],{"class":149},"a[::",[143,98129,1122],{"class":280},[143,98131,98132],{"class":149},",::",[143,98134,1122],{"class":280},[143,98136,34144],{"class":149},[63,98138,98139],{},"⑤同时获取两个元素",[133,98141,98143],{"className":31276,"code":98142,"language":31278,"meta":138,"style":138},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[140,98144,98145,98150,98155],{"__ignoreMap":138},[143,98146,98147],{"class":145,"line":146},[143,98148,98149],{"class":266},"#同时获取第三行第二列，第四行第一列\n",[143,98151,98152],{"class":145,"line":35},[143,98153,98154],{"class":266},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[143,98156,98157,98160,98162,98164,98166,98168,98170,98172,98174],{"class":145,"line":46},[143,98158,98159],{"class":149},"a[(",[143,98161,1122],{"class":280},[143,98163,1419],{"class":149},[143,98165,1116],{"class":280},[143,98167,43145],{"class":149},[143,98169,771],{"class":280},[143,98171,1419],{"class":149},[143,98173,1234],{"class":280},[143,98175,98176],{"class":149},")]\n",[63,98178,98179],{},"⑥切片，对行进行反向获取",[133,98181,98183],{"className":31276,"code":98182,"language":31278,"meta":138,"style":138},"#切片 对所有行进行反向获取\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",[140,98184,98185,98190,98200,98204,98208,98213,98218,98223,98228,98232,98237,98253,98257,98262,98267,98272,98277],{"__ignoreMap":138},[143,98186,98187],{"class":145,"line":146},[143,98188,98189],{"class":266},"#切片 对所有行进行反向获取\n",[143,98191,98192,98194,98196,98198],{"class":145,"line":35},[143,98193,98127],{"class":149},[143,98195,1573],{"class":755},[143,98197,771],{"class":280},[143,98199,34144],{"class":149},[143,98201,98202],{"class":145,"line":46},[143,98203,94441],{"class":266},[143,98205,98206],{"class":145,"line":293},[143,98207,94805],{"class":163},[143,98209,98210],{"class":145,"line":306},[143,98211,98212],{"class":163},"array([[19, 20, 21, 22, 23, 24],\n",[143,98214,98215],{"class":145,"line":319},[143,98216,98217],{"class":163},"       [13, 14, 15, 16, 17, 18],\n",[143,98219,98220],{"class":145,"line":332},[143,98221,98222],{"class":163},"       [ 7,  8,  9, 10, 11, 12],\n",[143,98224,98225],{"class":145,"line":345},[143,98226,98227],{"class":163},"       [ 1,  2,  3,  4,  5,  6]])\n",[143,98229,98230],{"class":145,"line":701},[143,98231,94805],{"class":163},[143,98233,98234],{"class":145,"line":707},[143,98235,98236],{"class":266},"#对行列都进行反向切片获取\n",[143,98238,98239,98241,98243,98245,98247,98249,98251],{"class":145,"line":727},[143,98240,98127],{"class":149},[143,98242,1573],{"class":755},[143,98244,771],{"class":280},[143,98246,98132],{"class":149},[143,98248,1573],{"class":755},[143,98250,771],{"class":280},[143,98252,34144],{"class":149},[143,98254,98255],{"class":145,"line":2518},[143,98256,94805],{"class":163},[143,98258,98259],{"class":145,"line":2524},[143,98260,98261],{"class":163},"array([[24, 23, 22, 21, 20, 19],\n",[143,98263,98264],{"class":145,"line":2529},[143,98265,98266],{"class":163},"       [18, 17, 16, 15, 14, 13],\n",[143,98268,98269],{"class":145,"line":2543},[143,98270,98271],{"class":163},"       [12, 11, 10,  9,  8,  7],\n",[143,98273,98274],{"class":145,"line":2548},[143,98275,98276],{"class":163},"       [ 6,  5,  4,  3,  2,  1]])\n",[143,98278,98279],{"class":145,"line":2554},[143,98280,94805],{"class":163},[63,98282,98283],{},"⑦修改元素",[133,98285,98287],{"className":31276,"code":98286,"language":31278,"meta":138,"style":138},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[140,98288,98289,98294,98312,98317],{"__ignoreMap":138},[143,98290,98291],{"class":145,"line":146},[143,98292,98293],{"class":266},"#获取前两行和前两列\n",[143,98295,98296,98299,98301,98303,98305,98308,98310],{"class":145,"line":35},[143,98297,98298],{"class":149},"sub_a",[143,98300,160],{"class":755},[143,98302,98046],{"class":149},[143,98304,1122],{"class":280},[143,98306,98307],{"class":149},",:",[143,98309,1122],{"class":280},[143,98311,34144],{"class":149},[143,98313,98314],{"class":145,"line":46},[143,98315,98316],{"class":266},"#修改sub_a第一个元素的值\n",[143,98318,98319,98322,98324,98326,98328,98330,98332],{"class":145,"line":293},[143,98320,98321],{"class":149},"sub_a[",[143,98323,1234],{"class":280},[143,98325,1419],{"class":149},[143,98327,1234],{"class":280},[143,98329,1979],{"class":149},[143,98331,160],{"class":755},[143,98333,98334],{"class":280},"100\n",[63,98336,98337],{},"⑧数组复制copy()",[133,98339,98341],{"className":31276,"code":98340,"language":31278,"meta":138,"style":138},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[140,98342,98343,98348,98358,98363],{"__ignoreMap":138},[143,98344,98345],{"class":145,"line":146},[143,98346,98347],{"class":266},"#数组复制\n",[143,98349,98350,98353,98355],{"class":145,"line":35},[143,98351,98352],{"class":149},"copy_a",[143,98354,160],{"class":755},[143,98356,98357],{"class":149},"np.copy(sub_a)\n",[143,98359,98360],{"class":145,"line":46},[143,98361,98362],{"class":266},"#修改copy_a后不影响原数组\n",[143,98364,98365,98368,98370,98372,98374,98376,98378],{"class":145,"line":293},[143,98366,98367],{"class":149},"copy_a[",[143,98369,1234],{"class":280},[143,98371,1419],{"class":149},[143,98373,1234],{"class":280},[143,98375,1979],{"class":149},[143,98377,160],{"class":755},[143,98379,98334],{"class":280},[63,98381,98382],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[954,98384,98385],{},"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":138,"searchDepth":35,"depth":35,"links":98387},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97904,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98394,"title":98395,"body":98396,"description":973,"extension":974,"meta":98888,"navigation":976,"path":98889,"seo":98890,"stem":98891,"__hash__":98892},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98397,"toc":98880},[98398,98401,98405,98408,98411,98464,98467,98492,98495,98514,98534,98537,98553,98557,98603,98607,98649,98653,98656,98659,98662,98665,98668,98730,98790,98794,98797,98854,98858,98863,98872,98877],[10,98399,98395],{"id":98400},"_5改变数组的维度",[14,98402,98404],{"id":98403},"_51-使用reshape","5.1 使用reshape()",[63,98406,98407],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[63,98409,98410],{},"①一维数组转换为二维数组",[133,98412,98414],{"className":31276,"code":98413,"language":31278,"meta":138,"style":138},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[140,98415,98416,98432,98437,98442,98447],{"__ignoreMap":138},[143,98417,98418,98420,98422,98424,98426,98428,98430],{"class":145,"line":146},[143,98419,67],{"class":149},[143,98421,160],{"class":755},[143,98423,93879],{"class":149},[143,98425,771],{"class":280},[143,98427,1419],{"class":149},[143,98429,1564],{"class":280},[143,98431,1055],{"class":149},[143,98433,98434],{"class":145,"line":35},[143,98435,98436],{"class":266},"#将一维数组进行转换\n",[143,98438,98439],{"class":145,"line":46},[143,98440,98441],{"class":266},"#注意点：元素个数不可以变\n",[143,98443,98444],{"class":145,"line":293},[143,98445,98446],{"class":266},"#转换维度要保持一致，不一致就异常！！！\n",[143,98448,98449,98451,98453,98456,98458,98460,98462],{"class":145,"line":306},[143,98450,94183],{"class":149},[143,98452,160],{"class":755},[143,98454,98455],{"class":149},"a.reshape(",[143,98457,1122],{"class":280},[143,98459,1419],{"class":149},[143,98461,1385],{"class":280},[143,98463,1055],{"class":149},[63,98465,98466],{},"②一维数组转换为三维数组",[133,98468,98470],{"className":31276,"code":98469,"language":31278,"meta":138,"style":138},"aaa=a.reshape(2,3,2)\n",[140,98471,98472],{"__ignoreMap":138},[143,98473,98474,98476,98478,98480,98482,98484,98486,98488,98490],{"class":145,"line":146},[143,98475,96397],{"class":149},[143,98477,160],{"class":755},[143,98479,98455],{"class":149},[143,98481,1122],{"class":280},[143,98483,1419],{"class":149},[143,98485,1116],{"class":280},[143,98487,1419],{"class":149},[143,98489,1122],{"class":280},[143,98491,1055],{"class":149},[63,98493,98494],{},"③二维数组转化为一维数组",[133,98496,98498],{"className":31276,"code":98497,"language":31278,"meta":138,"style":138},"#知道元素个数：\naa.reshape(12)\n",[140,98499,98500,98505],{"__ignoreMap":138},[143,98501,98502],{"class":145,"line":146},[143,98503,98504],{"class":266},"#知道元素个数：\n",[143,98506,98507,98510,98512],{"class":145,"line":35},[143,98508,98509],{"class":149},"aa.reshape(",[143,98511,1539],{"class":280},[143,98513,1055],{"class":149},[133,98515,98517],{"className":31276,"code":98516,"language":31278,"meta":138,"style":138},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[140,98518,98519,98524],{"__ignoreMap":138},[143,98520,98521],{"class":145,"line":146},[143,98522,98523],{"class":266},"#不知道元素个数，参数传递-1\n",[143,98525,98526,98528,98530,98532],{"class":145,"line":35},[143,98527,98509],{"class":149},[143,98529,1573],{"class":755},[143,98531,771],{"class":280},[143,98533,1055],{"class":149},[63,98535,98536],{},"④三维数组转换为一维数组",[133,98538,98540],{"className":31276,"code":98539,"language":31278,"meta":138,"style":138},"aaa.reshape(-1)\n",[140,98541,98542],{"__ignoreMap":138},[143,98543,98544,98547,98549,98551],{"class":145,"line":146},[143,98545,98546],{"class":149},"aaa.reshape(",[143,98548,1573],{"class":755},[143,98550,771],{"class":280},[143,98552,1055],{"class":149},[14,98554,98556],{"id":98555},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[133,98558,98560],{"className":31276,"code":98559,"language":31278,"meta":138,"style":138},"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",[140,98561,98562,98589,98594,98598],{"__ignoreMap":138},[143,98563,98564,98566,98568,98570,98572,98574,98576,98578,98580,98582,98584,98586],{"class":145,"line":146},[143,98565,94183],{"class":149},[143,98567,160],{"class":755},[143,98569,93879],{"class":149},[143,98571,771],{"class":280},[143,98573,1419],{"class":149},[143,98575,1564],{"class":280},[143,98577,93884],{"class":149},[143,98579,1122],{"class":280},[143,98581,1419],{"class":149},[143,98583,1385],{"class":280},[143,98585,1470],{"class":149},[143,98587,98588],{"class":266},"#转换为2行6列的数组\n",[143,98590,98591],{"class":145,"line":35},[143,98592,98593],{"class":149},"aa.revel()\n",[143,98595,98596],{"class":145,"line":46},[143,98597,94441],{"class":266},[143,98599,98600],{"class":145,"line":293},[143,98601,98602],{"class":266},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,98604,98606],{"id":98605},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[133,98608,98610],{"className":31276,"code":98609,"language":31278,"meta":138,"style":138},"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",[140,98611,98612,98636,98641,98645],{"__ignoreMap":138},[143,98613,98614,98616,98618,98620,98622,98624,98626,98628,98630,98632,98634],{"class":145,"line":146},[143,98615,94183],{"class":149},[143,98617,160],{"class":755},[143,98619,93879],{"class":149},[143,98621,771],{"class":280},[143,98623,1419],{"class":149},[143,98625,1564],{"class":280},[143,98627,93884],{"class":149},[143,98629,1122],{"class":280},[143,98631,1419],{"class":149},[143,98633,1385],{"class":280},[143,98635,1055],{"class":149},[143,98637,98638],{"class":145,"line":35},[143,98639,98640],{"class":149},"aa.flatten()\n",[143,98642,98643],{"class":145,"line":46},[143,98644,94441],{"class":266},[143,98646,98647],{"class":145,"line":293},[143,98648,98602],{"class":266},[14,98650,98652],{"id":98651},"_54-使用resize","5.4 使用resize()",[63,98654,98655],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[63,98657,98658],{},"通过resize方法可以改变数组的维度",[63,98660,98661],{},"#resize修改数组维度",[63,98663,98664],{},"#以元组的形式指定形状",[63,98666,98667],{},"#改变的是原数组",[133,98669,98671],{"className":31276,"code":98670,"language":31278,"meta":138,"style":138},"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",[140,98672,98673,98689,98709,98722,98726],{"__ignoreMap":138},[143,98674,98675,98677,98679,98681,98683,98685,98687],{"class":145,"line":146},[143,98676,67],{"class":149},[143,98678,160],{"class":755},[143,98680,93879],{"class":149},[143,98682,771],{"class":280},[143,98684,1419],{"class":149},[143,98686,1564],{"class":280},[143,98688,1055],{"class":149},[143,98690,98691,98694,98696,98698,98700,98702,98704,98706],{"class":145,"line":35},[143,98692,98693],{"class":149},"a.shape",[143,98695,160],{"class":755},[143,98697,1049],{"class":149},[143,98699,1122],{"class":280},[143,98701,1419],{"class":149},[143,98703,1385],{"class":280},[143,98705,1470],{"class":149},[143,98707,98708],{"class":266},"#改变了原数组\n",[143,98710,98711,98713,98715,98718,98720],{"class":145,"line":46},[143,98712,67],{"class":149},[143,98714,160],{"class":755},[143,98716,98717],{"class":149},"resize((",[143,98719,1539],{"class":280},[143,98721,31395],{"class":149},[143,98723,98724],{"class":145,"line":293},[143,98725,94441],{"class":266},[143,98727,98728],{"class":145,"line":306},[143,98729,98602],{"class":266},[133,98731,98733],{"className":31276,"code":98732,"language":31278,"meta":138,"style":138},"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",[140,98734,98735,98748,98752,98756,98761,98766,98771,98776,98781,98786],{"__ignoreMap":138},[143,98736,98737,98740,98742,98744,98746],{"class":145,"line":146},[143,98738,98739],{"class":149},"a.resize((",[143,98741,1385],{"class":280},[143,98743,1419],{"class":149},[143,98745,1122],{"class":280},[143,98747,31395],{"class":149},[143,98749,98750],{"class":145,"line":35},[143,98751,94441],{"class":266},[143,98753,98754],{"class":145,"line":46},[143,98755,94805],{"class":163},[143,98757,98758],{"class":145,"line":293},[143,98759,98760],{"class":163},"array([[ 1,  2],\n",[143,98762,98763],{"class":145,"line":306},[143,98764,98765],{"class":163},"       [ 3,  4],\n",[143,98767,98768],{"class":145,"line":319},[143,98769,98770],{"class":163},"       [ 5,  6],\n",[143,98772,98773],{"class":145,"line":332},[143,98774,98775],{"class":163},"       [ 7,  8],\n",[143,98777,98778],{"class":145,"line":345},[143,98779,98780],{"class":163},"       [ 9, 10],\n",[143,98782,98783],{"class":145,"line":701},[143,98784,98785],{"class":163},"       [11, 12]])\n",[143,98787,98788],{"class":145,"line":707},[143,98789,94805],{"class":163},[14,98791,98793],{"id":98792},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[63,98795,98796],{},"改变了原数组",[133,98798,98800],{"className":31276,"code":98799,"language":31278,"meta":138,"style":138},"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",[140,98801,98802,98818,98834,98838,98842,98846,98850],{"__ignoreMap":138},[143,98803,98804,98806,98808,98810,98812,98814,98816],{"class":145,"line":146},[143,98805,67],{"class":149},[143,98807,160],{"class":755},[143,98809,93879],{"class":149},[143,98811,771],{"class":280},[143,98813,1419],{"class":149},[143,98815,1564],{"class":280},[143,98817,1055],{"class":149},[143,98819,98820,98822,98824,98826,98828,98830,98832],{"class":145,"line":35},[143,98821,98693],{"class":149},[143,98823,160],{"class":755},[143,98825,1049],{"class":149},[143,98827,1122],{"class":280},[143,98829,1419],{"class":149},[143,98831,1385],{"class":280},[143,98833,1055],{"class":149},[143,98835,98836],{"class":145,"line":46},[143,98837,94441],{"class":266},[143,98839,98840],{"class":145,"line":293},[143,98841,94805],{"class":163},[143,98843,98844],{"class":145,"line":306},[143,98845,98064],{"class":163},[143,98847,98848],{"class":145,"line":319},[143,98849,98069],{"class":163},[143,98851,98852],{"class":145,"line":332},[143,98853,94805],{"class":163},[14,98855,98857],{"id":98856},"_56-重要比较","5.6 重要比较：",[63,98859,98860],{},[29,98861],{"alt":138,"src":98862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[63,98864,98865,98866,98868,98869,98871],{},"口诀：NumPy 函数要么用 ",[140,98867,96839],{},"，要么用 ",[140,98870,32394],{},"，创建结构用 shape，造数据用 size",[63,98873,98874],{},[29,98875],{"alt":138,"src":98876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[954,98878,98879],{},"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":138,"searchDepth":35,"depth":35,"links":98881},[98882,98883,98884,98885,98886,98887],{"id":98403,"depth":35,"text":98404},{"id":98555,"depth":35,"text":98556},{"id":98605,"depth":35,"text":98606},{"id":98651,"depth":35,"text":98652},{"id":98792,"depth":35,"text":98793},{"id":98856,"depth":35,"text":98857},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98395,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98894,"title":98895,"body":98896,"description":973,"extension":974,"meta":99968,"navigation":976,"path":99969,"seo":99970,"stem":99971,"__hash__":99972},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98897,"toc":99962},[98898,98901,98905,98908,98911,98914,98979,98982,99022,99025,99107,99110,99115,99137,99139,99144,99149,99152,99155,99310,99313,99515,99519,99522,99525,99593,99595,99600,99603,99606,99686,99690,99693,99695,99768,99770,99775,99777,99857,99861,99864,99867,99870,99873,99876,99879,99959],[10,98899,98895],{"id":98900},"_6数组的拼接",[14,98902,98904],{"id":98903},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[63,98906,98907],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[63,98909,98910],{},"函数内部传两个数列构成的数列或者元组",[63,98912,98913],{},"①一维数组的拼接",[133,98915,98917],{"className":31276,"code":98916,"language":31278,"meta":138,"style":138},"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",[140,98918,98919,98939,98959,98964,98969,98974],{"__ignoreMap":138},[143,98920,98921,98923,98925,98927,98929,98931,98933,98935,98937],{"class":145,"line":146},[143,98922,67],{"class":149},[143,98924,160],{"class":755},[143,98926,93901],{"class":149},[143,98928,771],{"class":280},[143,98930,1419],{"class":149},[143,98932,1122],{"class":280},[143,98934,1419],{"class":149},[143,98936,1116],{"class":280},[143,98938,5557],{"class":149},[143,98940,98941,98943,98945,98947,98949,98951,98953,98955,98957],{"class":145,"line":35},[143,98942,1304],{"class":149},[143,98944,160],{"class":755},[143,98946,93901],{"class":149},[143,98948,1334],{"class":280},[143,98950,1419],{"class":149},[143,98952,1360],{"class":280},[143,98954,1419],{"class":149},[143,98956,1385],{"class":280},[143,98958,5557],{"class":149},[143,98960,98961],{"class":145,"line":46},[143,98962,98963],{"class":266},"#调用concatenate进行数组拼接\n",[143,98965,98966],{"class":145,"line":293},[143,98967,98968],{"class":149},"np.concatenate((a,b))\n",[143,98970,98971],{"class":145,"line":306},[143,98972,98973],{"class":266},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[143,98975,98976],{"class":145,"line":319},[143,98977,98978],{"class":266},"#np.concatenate([a,b])\n",[63,98980,98981],{},"②一维多个数组拼接",[133,98983,98985],{"className":31276,"code":98984,"language":31278,"meta":138,"style":138},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[140,98986,98987,98992,99012,99017],{"__ignoreMap":138},[143,98988,98989],{"class":145,"line":146},[143,98990,98991],{"class":266},"#也可以多个数组进行拼接\n",[143,98993,98994,98996,98998,99000,99002,99004,99006,99008,99010],{"class":145,"line":35},[143,98995,1329],{"class":149},[143,98997,160],{"class":755},[143,98999,93901],{"class":149},[143,99001,1487],{"class":280},[143,99003,1419],{"class":149},[143,99005,1513],{"class":280},[143,99007,1419],{"class":149},[143,99009,1564],{"class":280},[143,99011,5557],{"class":149},[143,99013,99014],{"class":145,"line":46},[143,99015,99016],{"class":149},"c\n",[143,99018,99019],{"class":145,"line":293},[143,99020,99021],{"class":149},"np.concatenate((a,b,c))\n",[63,99023,99024],{},"③二维数组拼接",[133,99026,99028],{"className":31276,"code":99027,"language":31278,"meta":138,"style":138},"#二维数组使用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",[140,99029,99030,99035,99059,99084,99089,99094],{"__ignoreMap":138},[143,99031,99032],{"class":145,"line":146},[143,99033,99034],{"class":266},"#二维数组使用concatenate进行拼接\n",[143,99036,99037,99039,99041,99043,99045,99047,99049,99051,99053,99055,99057],{"class":145,"line":35},[143,99038,94183],{"class":149},[143,99040,160],{"class":755},[143,99042,93879],{"class":149},[143,99044,771],{"class":280},[143,99046,1419],{"class":149},[143,99048,1564],{"class":280},[143,99050,93884],{"class":149},[143,99052,1116],{"class":280},[143,99054,1419],{"class":149},[143,99056,1334],{"class":280},[143,99058,1055],{"class":149},[143,99060,99061,99064,99066,99068,99070,99072,99074,99076,99078,99080,99082],{"class":145,"line":46},[143,99062,99063],{"class":149},"bb",[143,99065,160],{"class":755},[143,99067,93879],{"class":149},[143,99069,1378],{"class":280},[143,99071,1419],{"class":149},[143,99073,1683],{"class":280},[143,99075,93884],{"class":149},[143,99077,1116],{"class":280},[143,99079,1419],{"class":149},[143,99081,1334],{"class":280},[143,99083,1055],{"class":149},[143,99085,99086],{"class":145,"line":293},[143,99087,99088],{"class":266},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[143,99090,99091],{"class":145,"line":306},[143,99092,99093],{"class":266},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[143,99095,99096,99099,99101,99103,99105],{"class":145,"line":319},[143,99097,99098],{"class":149},"np.concatenate((aa,bb),",[143,99100,48412],{"class":6116},[143,99102,160],{"class":755},[143,99104,1234],{"class":280},[143,99106,1055],{"class":149},[63,99108,99109],{},"结果：",[63,99111,99112],{},[29,99113],{"alt":138,"src":99114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[133,99116,99118],{"className":31276,"code":99117,"language":31278,"meta":138,"style":138},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[140,99119,99120,99125],{"__ignoreMap":138},[143,99121,99122],{"class":145,"line":146},[143,99123,99124],{"class":266},"#指定axis为1进行拼接\n",[143,99126,99127,99129,99131,99133,99135],{"class":145,"line":35},[143,99128,99098],{"class":149},[143,99130,48412],{"class":6116},[143,99132,160],{"class":755},[143,99134,771],{"class":280},[143,99136,1055],{"class":149},[63,99138,99109],{},[63,99140,99141],{},[29,99142],{"alt":138,"src":99143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[63,99145,99146],{},[25,99147,99148],{},"二维数组总结：0竖着方向，1横着方向",[63,99150,99151],{},"④三维数组拼接",[63,99153,99154],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[133,99156,99158],{"className":31276,"code":99157,"language":31278,"meta":138,"style":138},"#两个三行六列\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",[140,99159,99160,99165,99193,99223,99228,99245,99250,99255,99260,99277,99282,99287,99292,99305],{"__ignoreMap":138},[143,99161,99162],{"class":145,"line":146},[143,99163,99164],{"class":266},"#两个三行六列\n",[143,99166,99167,99169,99171,99173,99175,99177,99179,99181,99183,99185,99187,99189,99191],{"class":145,"line":35},[143,99168,96397],{"class":149},[143,99170,160],{"class":755},[143,99172,93879],{"class":149},[143,99174,771],{"class":280},[143,99176,1419],{"class":149},[143,99178,1366],{"class":280},[143,99180,93884],{"class":149},[143,99182,1122],{"class":280},[143,99184,1419],{"class":149},[143,99186,1116],{"class":280},[143,99188,1419],{"class":149},[143,99190,1385],{"class":280},[143,99192,1055],{"class":149},[143,99194,99195,99198,99200,99202,99204,99206,99209,99211,99213,99215,99217,99219,99221],{"class":145,"line":46},[143,99196,99197],{"class":149},"bbb",[143,99199,160],{"class":755},[143,99201,93879],{"class":149},[143,99203,1378],{"class":280},[143,99205,1419],{"class":149},[143,99207,99208],{"class":280},"137",[143,99210,93884],{"class":149},[143,99212,1122],{"class":280},[143,99214,1419],{"class":149},[143,99216,1116],{"class":280},[143,99218,1419],{"class":149},[143,99220,1385],{"class":280},[143,99222,1055],{"class":149},[143,99224,99225],{"class":145,"line":293},[143,99226,99227],{"class":266},"#axis=0\n",[143,99229,99230,99232,99234,99237,99239,99241,99243],{"class":145,"line":306},[143,99231,1736],{"class":149},[143,99233,160],{"class":755},[143,99235,99236],{"class":149},"np.concatenate((aaa,bbb),",[143,99238,48412],{"class":6116},[143,99240,160],{"class":755},[143,99242,1234],{"class":280},[143,99244,1055],{"class":149},[143,99246,99247],{"class":145,"line":319},[143,99248,99249],{"class":149},"s.shape\n",[143,99251,99252],{"class":145,"line":332},[143,99253,99254],{"class":266},"#输出：(4,3,6)\n",[143,99256,99257],{"class":145,"line":345},[143,99258,99259],{"class":266},"#axis=1\n",[143,99261,99262,99265,99267,99269,99271,99273,99275],{"class":145,"line":701},[143,99263,99264],{"class":149},"ss",[143,99266,160],{"class":755},[143,99268,99236],{"class":149},[143,99270,48412],{"class":6116},[143,99272,160],{"class":755},[143,99274,771],{"class":280},[143,99276,1055],{"class":149},[143,99278,99279],{"class":145,"line":707},[143,99280,99281],{"class":149},"ss.shape\n",[143,99283,99284],{"class":145,"line":727},[143,99285,99286],{"class":266},"#输出：(2,6,6)\n",[143,99288,99289],{"class":145,"line":2518},[143,99290,99291],{"class":266},"#axis=2\n",[143,99293,99294,99296,99298,99300,99302],{"class":145,"line":2524},[143,99295,99236],{"class":149},[143,99297,48412],{"class":6116},[143,99299,160],{"class":755},[143,99301,1122],{"class":280},[143,99303,99304],{"class":149},").shape\n",[143,99306,99307],{"class":145,"line":2529},[143,99308,99309],{"class":266},"#输出：（2，3，12）\n",[63,99311,99312],{},"⑤四维数组拼接",[133,99314,99316],{"className":31276,"code":99315,"language":31278,"meta":138,"style":138},"#两个三行六列\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",[140,99317,99318,99322,99350,99378,99403,99429,99433,99446,99451,99455,99467,99472,99476,99488,99493,99498,99510],{"__ignoreMap":138},[143,99319,99320],{"class":145,"line":146},[143,99321,99164],{"class":266},[143,99323,99324,99326,99328,99330,99332,99334,99336,99338,99340,99342,99344,99346,99348],{"class":145,"line":35},[143,99325,96397],{"class":149},[143,99327,160],{"class":755},[143,99329,93879],{"class":149},[143,99331,771],{"class":280},[143,99333,1419],{"class":149},[143,99335,1366],{"class":280},[143,99337,93884],{"class":149},[143,99339,1122],{"class":280},[143,99341,1419],{"class":149},[143,99343,1116],{"class":280},[143,99345,1419],{"class":149},[143,99347,1385],{"class":280},[143,99349,1055],{"class":149},[143,99351,99352,99354,99356,99358,99360,99362,99364,99366,99368,99370,99372,99374,99376],{"class":145,"line":46},[143,99353,99197],{"class":149},[143,99355,160],{"class":755},[143,99357,93879],{"class":149},[143,99359,1378],{"class":280},[143,99361,1419],{"class":149},[143,99363,99208],{"class":280},[143,99365,93884],{"class":149},[143,99367,1122],{"class":280},[143,99369,1419],{"class":149},[143,99371,1116],{"class":280},[143,99373,1419],{"class":149},[143,99375,1385],{"class":280},[143,99377,1055],{"class":149},[143,99379,99380,99383,99385,99387,99389,99391,99393,99395,99397,99399,99401],{"class":145,"line":293},[143,99381,99382],{"class":149},"aaaa",[143,99384,160],{"class":755},[143,99386,98546],{"class":149},[143,99388,1122],{"class":280},[143,99390,1419],{"class":149},[143,99392,1116],{"class":280},[143,99394,1419],{"class":149},[143,99396,1116],{"class":280},[143,99398,1419],{"class":149},[143,99400,1122],{"class":280},[143,99402,1055],{"class":149},[143,99404,99405,99408,99410,99413,99415,99417,99419,99421,99423,99425,99427],{"class":145,"line":306},[143,99406,99407],{"class":149},"bbbb",[143,99409,160],{"class":755},[143,99411,99412],{"class":149},"bbb.reshape(",[143,99414,1122],{"class":280},[143,99416,1419],{"class":149},[143,99418,1116],{"class":280},[143,99420,1419],{"class":149},[143,99422,1116],{"class":280},[143,99424,1419],{"class":149},[143,99426,1122],{"class":280},[143,99428,1055],{"class":149},[143,99430,99431],{"class":145,"line":319},[143,99432,99227],{"class":266},[143,99434,99435,99438,99440,99442,99444],{"class":145,"line":332},[143,99436,99437],{"class":149},"np.concatenate((aaaa,bbbb),",[143,99439,48412],{"class":6116},[143,99441,160],{"class":755},[143,99443,1234],{"class":280},[143,99445,99304],{"class":149},[143,99447,99448],{"class":145,"line":345},[143,99449,99450],{"class":266},"#结果：（4，3，3，2）\n",[143,99452,99453],{"class":145,"line":701},[143,99454,99259],{"class":266},[143,99456,99457,99459,99461,99463,99465],{"class":145,"line":707},[143,99458,99437],{"class":149},[143,99460,48412],{"class":6116},[143,99462,160],{"class":755},[143,99464,771],{"class":280},[143,99466,99304],{"class":149},[143,99468,99469],{"class":145,"line":727},[143,99470,99471],{"class":266},"#结果：（2，6，3，2）\n",[143,99473,99474],{"class":145,"line":2518},[143,99475,99291],{"class":266},[143,99477,99478,99480,99482,99484,99486],{"class":145,"line":2524},[143,99479,99437],{"class":149},[143,99481,48412],{"class":6116},[143,99483,160],{"class":755},[143,99485,1122],{"class":280},[143,99487,99304],{"class":149},[143,99489,99490],{"class":145,"line":2529},[143,99491,99492],{"class":266},"#结果：（2，3，6，2）\n",[143,99494,99495],{"class":145,"line":2543},[143,99496,99497],{"class":266},"#axis=3\n",[143,99499,99500,99502,99504,99506,99508],{"class":145,"line":2548},[143,99501,99437],{"class":149},[143,99503,48412],{"class":6116},[143,99505,160],{"class":755},[143,99507,1116],{"class":280},[143,99509,99304],{"class":149},[143,99511,99512],{"class":145,"line":2554},[143,99513,99514],{"class":266},"#结果：（2，3，3，4）\n",[14,99516,99518],{"id":99517},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[63,99520,99521],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[63,99523,99524],{},"①二维数组",[133,99526,99528],{"className":31276,"code":99527,"language":31278,"meta":138,"style":138},"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",[140,99529,99530,99554,99578,99583,99588],{"__ignoreMap":138},[143,99531,99532,99534,99536,99538,99540,99542,99544,99546,99548,99550,99552],{"class":145,"line":146},[143,99533,94183],{"class":149},[143,99535,160],{"class":755},[143,99537,93879],{"class":149},[143,99539,771],{"class":280},[143,99541,1419],{"class":149},[143,99543,1564],{"class":280},[143,99545,93884],{"class":149},[143,99547,1116],{"class":280},[143,99549,1419],{"class":149},[143,99551,1334],{"class":280},[143,99553,1055],{"class":149},[143,99555,99556,99558,99560,99562,99564,99566,99568,99570,99572,99574,99576],{"class":145,"line":35},[143,99557,99063],{"class":149},[143,99559,160],{"class":755},[143,99561,93879],{"class":149},[143,99563,1378],{"class":280},[143,99565,1419],{"class":149},[143,99567,1683],{"class":280},[143,99569,93884],{"class":149},[143,99571,1116],{"class":280},[143,99573,1419],{"class":149},[143,99575,1334],{"class":280},[143,99577,1055],{"class":149},[143,99579,99580],{"class":145,"line":46},[143,99581,99582],{"class":149},"np.hstack((aa,bb))\n",[143,99584,99585],{"class":145,"line":293},[143,99586,99587],{"class":266},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[143,99589,99590],{"class":145,"line":306},[143,99591,99592],{"class":266},"#np.hstack([aa,bb])\n",[63,99594,99109],{},[63,99596,99597],{},[29,99598],{"alt":138,"src":99599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[63,99601,99602],{},"等效于concatenate()函数中axis=1时的情况",[63,99604,99605],{},"②三维数组",[133,99607,99609],{"className":31276,"code":99608,"language":31278,"meta":138,"style":138},"#两个三行六列\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",[140,99610,99611,99615,99643,99671,99676,99681],{"__ignoreMap":138},[143,99612,99613],{"class":145,"line":146},[143,99614,99164],{"class":266},[143,99616,99617,99619,99621,99623,99625,99627,99629,99631,99633,99635,99637,99639,99641],{"class":145,"line":35},[143,99618,96397],{"class":149},[143,99620,160],{"class":755},[143,99622,93879],{"class":149},[143,99624,771],{"class":280},[143,99626,1419],{"class":149},[143,99628,1366],{"class":280},[143,99630,93884],{"class":149},[143,99632,1122],{"class":280},[143,99634,1419],{"class":149},[143,99636,1116],{"class":280},[143,99638,1419],{"class":149},[143,99640,1385],{"class":280},[143,99642,1055],{"class":149},[143,99644,99645,99647,99649,99651,99653,99655,99657,99659,99661,99663,99665,99667,99669],{"class":145,"line":46},[143,99646,99197],{"class":149},[143,99648,160],{"class":755},[143,99650,93879],{"class":149},[143,99652,1378],{"class":280},[143,99654,1419],{"class":149},[143,99656,99208],{"class":280},[143,99658,93884],{"class":149},[143,99660,1122],{"class":280},[143,99662,1419],{"class":149},[143,99664,1116],{"class":280},[143,99666,1419],{"class":149},[143,99668,1385],{"class":280},[143,99670,1055],{"class":149},[143,99672,99673],{"class":145,"line":293},[143,99674,99675],{"class":266},"#使用hstack\n",[143,99677,99678],{"class":145,"line":306},[143,99679,99680],{"class":149},"np.hstack((aaa,bbb)).shape\n",[143,99682,99683],{"class":145,"line":319},[143,99684,99685],{"class":266},"#输出：（2，6，6）\n",[14,99687,99689],{"id":99688},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[63,99691,99692],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[63,99694,99524],{},[133,99696,99698],{"className":31276,"code":99697,"language":31278,"meta":138,"style":138},"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",[140,99699,99700,99724,99748,99753,99758,99763],{"__ignoreMap":138},[143,99701,99702,99704,99706,99708,99710,99712,99714,99716,99718,99720,99722],{"class":145,"line":146},[143,99703,94183],{"class":149},[143,99705,160],{"class":755},[143,99707,93879],{"class":149},[143,99709,771],{"class":280},[143,99711,1419],{"class":149},[143,99713,1564],{"class":280},[143,99715,93884],{"class":149},[143,99717,1116],{"class":280},[143,99719,1419],{"class":149},[143,99721,1334],{"class":280},[143,99723,1055],{"class":149},[143,99725,99726,99728,99730,99732,99734,99736,99738,99740,99742,99744,99746],{"class":145,"line":35},[143,99727,99063],{"class":149},[143,99729,160],{"class":755},[143,99731,93879],{"class":149},[143,99733,1378],{"class":280},[143,99735,1419],{"class":149},[143,99737,1683],{"class":280},[143,99739,93884],{"class":149},[143,99741,1116],{"class":280},[143,99743,1419],{"class":149},[143,99745,1334],{"class":280},[143,99747,1055],{"class":149},[143,99749,99750],{"class":145,"line":46},[143,99751,99752],{"class":266},"#vstack 垂直方向进行堆叠\n",[143,99754,99755],{"class":145,"line":293},[143,99756,99757],{"class":149},"np.vstack((aa,bb))\n",[143,99759,99760],{"class":145,"line":306},[143,99761,99762],{"class":266},"#与hstack传的参数类似，等价于：\n",[143,99764,99765],{"class":145,"line":319},[143,99766,99767],{"class":149},"np.vstack([aa,bb])\n",[63,99769,99109],{},[63,99771,99772],{},[29,99773],{"alt":138,"src":99774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[63,99776,99605],{},[133,99778,99780],{"className":31276,"code":99779,"language":31278,"meta":138,"style":138},"#两个三行六列\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",[140,99781,99782,99786,99814,99842,99847,99852],{"__ignoreMap":138},[143,99783,99784],{"class":145,"line":146},[143,99785,99164],{"class":266},[143,99787,99788,99790,99792,99794,99796,99798,99800,99802,99804,99806,99808,99810,99812],{"class":145,"line":35},[143,99789,96397],{"class":149},[143,99791,160],{"class":755},[143,99793,93879],{"class":149},[143,99795,771],{"class":280},[143,99797,1419],{"class":149},[143,99799,1366],{"class":280},[143,99801,93884],{"class":149},[143,99803,1122],{"class":280},[143,99805,1419],{"class":149},[143,99807,1116],{"class":280},[143,99809,1419],{"class":149},[143,99811,1385],{"class":280},[143,99813,1055],{"class":149},[143,99815,99816,99818,99820,99822,99824,99826,99828,99830,99832,99834,99836,99838,99840],{"class":145,"line":46},[143,99817,99197],{"class":149},[143,99819,160],{"class":755},[143,99821,93879],{"class":149},[143,99823,1378],{"class":280},[143,99825,1419],{"class":149},[143,99827,99208],{"class":280},[143,99829,93884],{"class":149},[143,99831,1122],{"class":280},[143,99833,1419],{"class":149},[143,99835,1116],{"class":280},[143,99837,1419],{"class":149},[143,99839,1385],{"class":280},[143,99841,1055],{"class":149},[143,99843,99844],{"class":145,"line":293},[143,99845,99846],{"class":266},"#使用vstack\n",[143,99848,99849],{"class":145,"line":306},[143,99850,99851],{"class":149},"np.vstack((aaa,bbb)).shape\n",[143,99853,99854],{"class":145,"line":319},[143,99855,99856],{"class":266},"#输出：（4，3，6）\n",[14,99858,99860],{"id":99859},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[63,99862,99863],{},"该方法是三维数组特有的方法",[63,99865,99866],{},"也就是说",[63,99868,99869],{},"一维数组拼接方法用：concatenate()",[63,99871,99872],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[63,99874,99875],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[63,99877,99878],{},"四维数组及多维数组只能用concatenate进行拼接",[133,99880,99882],{"className":31276,"code":99881,"language":31278,"meta":138,"style":138},"#两个三行六列\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",[140,99883,99884,99888,99916,99944,99949,99954],{"__ignoreMap":138},[143,99885,99886],{"class":145,"line":146},[143,99887,99164],{"class":266},[143,99889,99890,99892,99894,99896,99898,99900,99902,99904,99906,99908,99910,99912,99914],{"class":145,"line":35},[143,99891,96397],{"class":149},[143,99893,160],{"class":755},[143,99895,93879],{"class":149},[143,99897,771],{"class":280},[143,99899,1419],{"class":149},[143,99901,1366],{"class":280},[143,99903,93884],{"class":149},[143,99905,1122],{"class":280},[143,99907,1419],{"class":149},[143,99909,1116],{"class":280},[143,99911,1419],{"class":149},[143,99913,1385],{"class":280},[143,99915,1055],{"class":149},[143,99917,99918,99920,99922,99924,99926,99928,99930,99932,99934,99936,99938,99940,99942],{"class":145,"line":46},[143,99919,99197],{"class":149},[143,99921,160],{"class":755},[143,99923,93879],{"class":149},[143,99925,1378],{"class":280},[143,99927,1419],{"class":149},[143,99929,99208],{"class":280},[143,99931,93884],{"class":149},[143,99933,1122],{"class":280},[143,99935,1419],{"class":149},[143,99937,1116],{"class":280},[143,99939,1419],{"class":149},[143,99941,1385],{"class":280},[143,99943,1055],{"class":149},[143,99945,99946],{"class":145,"line":293},[143,99947,99948],{"class":266},"#使用dstack\n",[143,99950,99951],{"class":145,"line":306},[143,99952,99953],{"class":149},"np.dstack((aaa,bbb)).shape\n",[143,99955,99956],{"class":145,"line":319},[143,99957,99958],{"class":266},"#结果：（2，3，12）\n",[954,99960,99961],{},"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":138,"searchDepth":35,"depth":35,"links":99963},[99964,99965,99966,99967],{"id":98903,"depth":35,"text":98904},{"id":99517,"depth":35,"text":99518},{"id":99688,"depth":35,"text":99689},{"id":99859,"depth":35,"text":99860},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98895,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99974,"title":99975,"body":99976,"description":973,"extension":974,"meta":100251,"navigation":976,"path":100252,"seo":100253,"stem":100254,"__hash__":100255},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99977,"toc":100249},[99978,99981,99984,100078,100081,100084,100087,100090,100093,100096,100099,100102,100246],[10,99979,99975],{"id":99980},"_7数组转置",[63,99982,99983],{},"使用transpose()函数",[133,99985,99987],{"className":31276,"code":99986,"language":31278,"meta":138,"style":138},"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",[140,99988,99989,99999,100023,100028,100033,100038,100043,100051,100055,100059,100064,100069,100074],{"__ignoreMap":138},[143,99990,99991,99993,99995,99997],{"class":145,"line":146},[143,99992,31290],{"class":755},[143,99994,32278],{"class":149},[143,99996,32281],{"class":755},[143,99998,32284],{"class":149},[143,100000,100001,100003,100005,100007,100009,100011,100013,100015,100017,100019,100021],{"class":145,"line":35},[143,100002,67],{"class":149},[143,100004,160],{"class":755},[143,100006,32615],{"class":149},[143,100008,771],{"class":280},[143,100010,1419],{"class":149},[143,100012,1564],{"class":280},[143,100014,93884],{"class":149},[143,100016,1334],{"class":280},[143,100018,1419],{"class":149},[143,100020,1116],{"class":280},[143,100022,1055],{"class":149},[143,100024,100025],{"class":145,"line":46},[143,100026,100027],{"class":266},"#二维数组转置\n",[143,100029,100030],{"class":145,"line":293},[143,100031,100032],{"class":266},"#调用transpose()函数\n",[143,100034,100035],{"class":145,"line":306},[143,100036,100037],{"class":149},"a.transpose()\n",[143,100039,100040],{"class":145,"line":319},[143,100041,100042],{"class":266},"#对于二维数组也可以采用.T来实现\n",[143,100044,100045,100048],{"class":145,"line":332},[143,100046,100047],{"class":149},"a.T",[143,100049,100050],{"class":266},"#与上述代码一样\n",[143,100052,100053],{"class":145,"line":345},[143,100054,94441],{"class":266},[143,100056,100057],{"class":145,"line":701},[143,100058,94805],{"class":163},[143,100060,100061],{"class":145,"line":707},[143,100062,100063],{"class":163},"array([[ 1,  4,  7, 10],\n",[143,100065,100066],{"class":145,"line":727},[143,100067,100068],{"class":163},"       [ 2,  5,  8, 11],\n",[143,100070,100071],{"class":145,"line":2518},[143,100072,100073],{"class":163},"       [ 3,  6,  9, 12]])\n",[143,100075,100076],{"class":145,"line":2524},[143,100077,94805],{"class":163},[63,100079,100080],{},"也可以使用np.transpose()的形式",[63,100082,100083],{},"#多维数组进行转置 np.transpose()",[63,100085,100086],{},"#对二维数组也可以使用np.transpose()进行转置",[63,100088,100089],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[63,100091,100092],{},"第二个参数，维度可以理解为用axis中的数来理解",[63,100094,100095],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[63,100097,100098],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[63,100100,100101],{},"四维及以上的数组也是一样的道理",[133,100103,100105],{"className":31276,"code":100104,"language":31278,"meta":138,"style":138},"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",[140,100106,100107,100135,100140,100145,100150,100168,100173,100205,100210,100215,100220,100241],{"__ignoreMap":138},[143,100108,100109,100111,100113,100115,100117,100119,100121,100123,100125,100127,100129,100131,100133],{"class":145,"line":146},[143,100110,1861],{"class":149},[143,100112,160],{"class":755},[143,100114,93879],{"class":149},[143,100116,771],{"class":280},[143,100118,1419],{"class":149},[143,100120,1366],{"class":280},[143,100122,93884],{"class":149},[143,100124,1116],{"class":280},[143,100126,1419],{"class":149},[143,100128,1385],{"class":280},[143,100130,1419],{"class":149},[143,100132,1122],{"class":280},[143,100134,1055],{"class":149},[143,100136,100137],{"class":145,"line":35},[143,100138,100139],{"class":149},"x.shape\n",[143,100141,100142],{"class":145,"line":46},[143,100143,100144],{"class":266},"#结果：（3,6,2）\n",[143,100146,100147],{"class":145,"line":293},[143,100148,100149],{"class":266},"#使用np.transpose()进行转置 变为(2,6,3)\n",[143,100151,100152,100155,100157,100159,100161,100163,100165],{"class":145,"line":306},[143,100153,100154],{"class":149},"np.transpose(x,(",[143,100156,1122],{"class":280},[143,100158,1419],{"class":149},[143,100160,771],{"class":280},[143,100162,1419],{"class":149},[143,100164,1234],{"class":280},[143,100166,100167],{"class":149},")).shape\n",[143,100169,100170],{"class":145,"line":319},[143,100171,100172],{"class":266},"#结果：(2,6,3)\n",[143,100174,100175,100177,100179,100181,100183,100185,100187,100189,100191,100193,100195,100197,100199,100201,100203],{"class":145,"line":332},[143,100176,99382],{"class":149},[143,100178,160],{"class":755},[143,100180,93879],{"class":149},[143,100182,771],{"class":280},[143,100184,1419],{"class":149},[143,100186,1366],{"class":280},[143,100188,93884],{"class":149},[143,100190,1116],{"class":280},[143,100192,1419],{"class":149},[143,100194,1122],{"class":280},[143,100196,1419],{"class":149},[143,100198,771],{"class":280},[143,100200,1419],{"class":149},[143,100202,1385],{"class":280},[143,100204,1055],{"class":149},[143,100206,100207],{"class":145,"line":345},[143,100208,100209],{"class":149},"aaaa.shape\n",[143,100211,100212],{"class":145,"line":701},[143,100213,100214],{"class":266},"#结果：（3，2，1，6）\n",[143,100216,100217],{"class":145,"line":707},[143,100218,100219],{"class":266},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[143,100221,100222,100225,100227,100229,100231,100233,100235,100237,100239],{"class":145,"line":727},[143,100223,100224],{"class":149},"np.transpose(aaaa,(",[143,100226,771],{"class":280},[143,100228,1419],{"class":149},[143,100230,1122],{"class":280},[143,100232,1419],{"class":149},[143,100234,1234],{"class":280},[143,100236,1419],{"class":149},[143,100238,1116],{"class":280},[143,100240,100167],{"class":149},[143,100242,100243],{"class":145,"line":2518},[143,100244,100245],{"class":266},"#结果：(2,1,3,6)\n",[954,100247,100248],{},"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":138,"searchDepth":35,"depth":35,"links":100250},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99975,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100257,"title":100258,"body":100259,"description":973,"extension":974,"meta":100993,"navigation":976,"path":100994,"seo":100995,"stem":100996,"__hash__":100997},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100260,"toc":100991},[100261,100264,100267,100270,100273,100276,100279,100282,100285,100394,100397,100400,100988],[10,100262,100258],{"id":100263},"_8数组分割",[63,100265,100266],{},"split分割",[63,100268,100269],{},"numpy.split(ary,indics_or_sections,axis)",[63,100271,100272],{},"解释：",[63,100274,100275],{},"ary:被分割的数组",[63,100277,100278],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[63,100280,100281],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[63,100283,100284],{},"①一维数组的分割",[133,100286,100288],{"className":31276,"code":100287,"language":31278,"meta":138,"style":138},"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",[140,100289,100290,100306,100311,100320,100324,100329,100337,100341,100346,100351,100364,100368,100373,100385,100389],{"__ignoreMap":138},[143,100291,100292,100294,100296,100298,100300,100302,100304],{"class":145,"line":146},[143,100293,67],{"class":149},[143,100295,160],{"class":755},[143,100297,93879],{"class":149},[143,100299,771],{"class":280},[143,100301,1419],{"class":149},[143,100303,1461],{"class":280},[143,100305,1055],{"class":149},[143,100307,100308],{"class":145,"line":35},[143,100309,100310],{"class":266},"#如果传入整数，必须能够平分，否则会报错\n",[143,100312,100313,100316,100318],{"class":145,"line":46},[143,100314,100315],{"class":149},"np.split(a,",[143,100317,1122],{"class":280},[143,100319,1055],{"class":149},[143,100321,100322],{"class":145,"line":293},[143,100323,94441],{"class":266},[143,100325,100326],{"class":145,"line":306},[143,100327,100328],{"class":266},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[143,100330,100331,100333,100335],{"class":145,"line":319},[143,100332,100315],{"class":149},[143,100334,1334],{"class":280},[143,100336,1055],{"class":149},[143,100338,100339],{"class":145,"line":332},[143,100340,94441],{"class":266},[143,100342,100343],{"class":145,"line":345},[143,100344,100345],{"class":266},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[143,100347,100348],{"class":145,"line":701},[143,100349,100350],{"class":266},"#传入数组\n",[143,100352,100353,100356,100358,100360,100362],{"class":145,"line":707},[143,100354,100355],{"class":149},"np.split(a,[",[143,100357,1116],{"class":280},[143,100359,1419],{"class":149},[143,100361,1360],{"class":280},[143,100363,5557],{"class":149},[143,100365,100366],{"class":145,"line":727},[143,100367,94441],{"class":266},[143,100369,100370],{"class":145,"line":2518},[143,100371,100372],{"class":266},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[143,100374,100375,100377,100379,100381,100383],{"class":145,"line":2524},[143,100376,100355],{"class":149},[143,100378,1360],{"class":280},[143,100380,1419],{"class":149},[143,100382,1410],{"class":280},[143,100384,5557],{"class":149},[143,100386,100387],{"class":145,"line":2529},[143,100388,94441],{"class":266},[143,100390,100391],{"class":145,"line":2543},[143,100392,100393],{"class":266},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[63,100395,100396],{},"②二维数组的分割",[63,100398,100399],{},"使用split()",[133,100401,100403],{"className":31276,"code":100402,"language":31278,"meta":138,"style":138},"#二维数组分割\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",[140,100404,100405,100410,100434,100439,100448,100452,100456,100461,100466,100471,100476,100481,100486,100491,100495,100508,100512,100516,100520,100524,100528,100533,100538,100543,100547,100552,100568,100572,100576,100581,100586,100591,100596,100601,100606,100611,100616,100621,100626,100631,100636,100641,100646,100651,100656,100661,100666,100670,100674,100694,100698,100702,100707,100712,100717,100722,100727,100732,100737,100742,100747,100752,100757,100762,100767,100772,100777,100782,100787,100792,100796,100801,100810,100814,100818,100822,100826,100830,100834,100838,100842,100846,100855,100859,100863,100867,100871,100875,100879,100883,100887,100891,100895,100899,100903,100907,100911,100915,100919,100923,100927,100931,100935,100939,100952,100956,100960,100964,100968,100972,100976,100980,100984],{"__ignoreMap":138},[143,100406,100407],{"class":145,"line":146},[143,100408,100409],{"class":266},"#二维数组分割\n",[143,100411,100412,100414,100416,100418,100420,100422,100424,100426,100428,100430,100432],{"class":145,"line":35},[143,100413,94183],{"class":149},[143,100415,160],{"class":755},[143,100417,93879],{"class":149},[143,100419,771],{"class":280},[143,100421,1419],{"class":149},[143,100423,1366],{"class":280},[143,100425,93884],{"class":149},[143,100427,1385],{"class":280},[143,100429,1419],{"class":149},[143,100431,1385],{"class":280},[143,100433,1055],{"class":149},[143,100435,100436],{"class":145,"line":46},[143,100437,100438],{"class":266},"#默认axis=0  传入整数平均分,按行来的\n",[143,100440,100441,100444,100446],{"class":145,"line":293},[143,100442,100443],{"class":149},"np.split(aa,",[143,100445,1116],{"class":280},[143,100447,1055],{"class":149},[143,100449,100450],{"class":145,"line":306},[143,100451,96640],{"class":266},[143,100453,100454],{"class":145,"line":319},[143,100455,94805],{"class":163},[143,100457,100458],{"class":145,"line":332},[143,100459,100460],{"class":163},"[array([[ 1,  2,  3,  4,  5,  6],\n",[143,100462,100463],{"class":145,"line":345},[143,100464,100465],{"class":163},"        [ 7,  8,  9, 10, 11, 12]]),\n",[143,100467,100468],{"class":145,"line":701},[143,100469,100470],{"class":163}," array([[13, 14, 15, 16, 17, 18],\n",[143,100472,100473],{"class":145,"line":707},[143,100474,100475],{"class":163},"        [19, 20, 21, 22, 23, 24]]),\n",[143,100477,100478],{"class":145,"line":727},[143,100479,100480],{"class":163}," array([[25, 26, 27, 28, 29, 30],\n",[143,100482,100483],{"class":145,"line":2518},[143,100484,100485],{"class":163},"        [31, 32, 33, 34, 35, 36]])]\n",[143,100487,100488],{"class":145,"line":2524},[143,100489,100490],{"class":163}," '''\n",[143,100492,100493],{"class":145,"line":2529},[143,100494,100350],{"class":266},[143,100496,100497,100500,100502,100504,100506],{"class":145,"line":2543},[143,100498,100499],{"class":149},"np.split(aa,[",[143,100501,1122],{"class":280},[143,100503,1419],{"class":149},[143,100505,1360],{"class":280},[143,100507,5557],{"class":149},[143,100509,100510],{"class":145,"line":2548},[143,100511,96640],{"class":266},[143,100513,100514],{"class":145,"line":2554},[143,100515,94805],{"class":163},[143,100517,100518],{"class":145,"line":2575},[143,100519,100460],{"class":163},[143,100521,100522],{"class":145,"line":2580},[143,100523,100465],{"class":163},[143,100525,100526],{"class":145,"line":2594},[143,100527,100470],{"class":163},[143,100529,100530],{"class":145,"line":2599},[143,100531,100532],{"class":163},"        [19, 20, 21, 22, 23, 24],\n",[143,100534,100535],{"class":145,"line":2628},[143,100536,100537],{"class":163},"        [25, 26, 27, 28, 29, 30]]),\n",[143,100539,100540],{"class":145,"line":2633},[143,100541,100542],{"class":163}," array([[31, 32, 33, 34, 35, 36]])]\n",[143,100544,100545],{"class":145,"line":2650},[143,100546,94805],{"class":163},[143,100548,100549],{"class":145,"line":2655},[143,100550,100551],{"class":266},"#axis=1 按照列来分\n",[143,100553,100554,100556,100558,100560,100562,100564,100566],{"class":145,"line":2660},[143,100555,100443],{"class":149},[143,100557,1116],{"class":280},[143,100559,1419],{"class":149},[143,100561,48412],{"class":6116},[143,100563,160],{"class":755},[143,100565,771],{"class":280},[143,100567,1055],{"class":149},[143,100569,100570],{"class":145,"line":2665},[143,100571,96640],{"class":266},[143,100573,100574],{"class":145,"line":2679},[143,100575,94805],{"class":163},[143,100577,100578],{"class":145,"line":2684},[143,100579,100580],{"class":163},"[array([[ 1,  2],\n",[143,100582,100583],{"class":145,"line":3477},[143,100584,100585],{"class":163},"        [ 7,  8],\n",[143,100587,100588],{"class":145,"line":3491},[143,100589,100590],{"class":163},"        [13, 14],\n",[143,100592,100593],{"class":145,"line":3499},[143,100594,100595],{"class":163},"        [19, 20],\n",[143,100597,100598],{"class":145,"line":3504},[143,100599,100600],{"class":163},"        [25, 26],\n",[143,100602,100603],{"class":145,"line":3510},[143,100604,100605],{"class":163},"        [31, 32]]),\n",[143,100607,100608],{"class":145,"line":3516},[143,100609,100610],{"class":163}," array([[ 3,  4],\n",[143,100612,100613],{"class":145,"line":3521},[143,100614,100615],{"class":163},"        [ 9, 10],\n",[143,100617,100618],{"class":145,"line":8848},[143,100619,100620],{"class":163},"        [15, 16],\n",[143,100622,100623],{"class":145,"line":8872},[143,100624,100625],{"class":163},"        [21, 22],\n",[143,100627,100628],{"class":145,"line":8877},[143,100629,100630],{"class":163},"        [27, 28],\n",[143,100632,100633],{"class":145,"line":8883},[143,100634,100635],{"class":163},"        [33, 34]]),\n",[143,100637,100638],{"class":145,"line":8910},[143,100639,100640],{"class":163}," array([[ 5,  6],\n",[143,100642,100643],{"class":145,"line":8915},[143,100644,100645],{"class":163},"        [11, 12],\n",[143,100647,100648],{"class":145,"line":8921},[143,100649,100650],{"class":163},"        [17, 18],\n",[143,100652,100653],{"class":145,"line":8933},[143,100654,100655],{"class":163},"        [23, 24],\n",[143,100657,100658],{"class":145,"line":8945},[143,100659,100660],{"class":163},"        [29, 30],\n",[143,100662,100663],{"class":145,"line":8957},[143,100664,100665],{"class":163},"        [35, 36]])]\n",[143,100667,100668],{"class":145,"line":10616},[143,100669,100490],{"class":163},[143,100671,100672],{"class":145,"line":10641},[143,100673,100350],{"class":266},[143,100675,100676,100678,100680,100682,100684,100686,100688,100690,100692],{"class":145,"line":10664},[143,100677,100499],{"class":149},[143,100679,771],{"class":280},[143,100681,1419],{"class":149},[143,100683,1122],{"class":280},[143,100685,42507],{"class":149},[143,100687,48412],{"class":6116},[143,100689,160],{"class":755},[143,100691,771],{"class":280},[143,100693,1055],{"class":149},[143,100695,100696],{"class":145,"line":10688},[143,100697,94441],{"class":266},[143,100699,100700],{"class":145,"line":10693},[143,100701,94805],{"class":163},[143,100703,100704],{"class":145,"line":10698},[143,100705,100706],{"class":163},"[array([[ 1],\n",[143,100708,100709],{"class":145,"line":10703},[143,100710,100711],{"class":163},"        [ 7],\n",[143,100713,100714],{"class":145,"line":10712},[143,100715,100716],{"class":163},"        [13],\n",[143,100718,100719],{"class":145,"line":10717},[143,100720,100721],{"class":163},"        [19],\n",[143,100723,100724],{"class":145,"line":10723},[143,100725,100726],{"class":163},"        [25],\n",[143,100728,100729],{"class":145,"line":10744},[143,100730,100731],{"class":163},"        [31]]),\n",[143,100733,100734],{"class":145,"line":10750},[143,100735,100736],{"class":163}," array([[ 2],\n",[143,100738,100739],{"class":145,"line":10764},[143,100740,100741],{"class":163},"        [ 8],\n",[143,100743,100744],{"class":145,"line":10770},[143,100745,100746],{"class":163},"        [14],\n",[143,100748,100749],{"class":145,"line":10797},[143,100750,100751],{"class":163},"        [20],\n",[143,100753,100754],{"class":145,"line":10806},[143,100755,100756],{"class":163},"        [26],\n",[143,100758,100759],{"class":145,"line":10812},[143,100760,100761],{"class":163},"        [32]]),\n",[143,100763,100764],{"class":145,"line":10820},[143,100765,100766],{"class":163}," array([[ 3,  4,  5,  6],\n",[143,100768,100769],{"class":145,"line":10825},[143,100770,100771],{"class":163},"        [ 9, 10, 11, 12],\n",[143,100773,100774],{"class":145,"line":17502},[143,100775,100776],{"class":163},"        [15, 16, 17, 18],\n",[143,100778,100779],{"class":145,"line":17508},[143,100780,100781],{"class":163},"        [21, 22, 23, 24],\n",[143,100783,100784],{"class":145,"line":17531},[143,100785,100786],{"class":163},"        [27, 28, 29, 30],\n",[143,100788,100789],{"class":145,"line":17537},[143,100790,100791],{"class":163},"        [33, 34, 35, 36]])]\n",[143,100793,100794],{"class":145,"line":17560},[143,100795,94805],{"class":163},[143,100797,100798],{"class":145,"line":17574},[143,100799,100800],{"class":266},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[143,100802,100803,100806,100808],{"class":145,"line":17594},[143,100804,100805],{"class":149},"np.vsplit(aa,",[143,100807,1116],{"class":280},[143,100809,1055],{"class":149},[143,100811,100812],{"class":145,"line":17600},[143,100813,94441],{"class":266},[143,100815,100816],{"class":145,"line":17611},[143,100817,94805],{"class":163},[143,100819,100820],{"class":145,"line":17634},[143,100821,100460],{"class":163},[143,100823,100824],{"class":145,"line":17656},[143,100825,100465],{"class":163},[143,100827,100828],{"class":145,"line":17661},[143,100829,100470],{"class":163},[143,100831,100832],{"class":145,"line":17667},[143,100833,100475],{"class":163},[143,100835,100836],{"class":145,"line":17681},[143,100837,100480],{"class":163},[143,100839,100840],{"class":145,"line":17694},[143,100841,100485],{"class":163},[143,100843,100844],{"class":145,"line":17699},[143,100845,94805],{"class":163},[143,100847,100848,100851,100853],{"class":145,"line":17713},[143,100849,100850],{"class":149},"np.hsplit(aa,",[143,100852,1116],{"class":280},[143,100854,1055],{"class":149},[143,100856,100857],{"class":145,"line":17718},[143,100858,94441],{"class":266},[143,100860,100861],{"class":145,"line":17724},[143,100862,94805],{"class":163},[143,100864,100865],{"class":145,"line":17729},[143,100866,100580],{"class":163},[143,100868,100869],{"class":145,"line":17743},[143,100870,100585],{"class":163},[143,100872,100873],{"class":145,"line":17748},[143,100874,100590],{"class":163},[143,100876,100877],{"class":145,"line":17753},[143,100878,100595],{"class":163},[143,100880,100881],{"class":145,"line":17767},[143,100882,100600],{"class":163},[143,100884,100885],{"class":145,"line":17779},[143,100886,100605],{"class":163},[143,100888,100889],{"class":145,"line":17784},[143,100890,100610],{"class":163},[143,100892,100893],{"class":145,"line":17797},[143,100894,100615],{"class":163},[143,100896,100897],{"class":145,"line":17802},[143,100898,100620],{"class":163},[143,100900,100901],{"class":145,"line":17807},[143,100902,100625],{"class":163},[143,100904,100905],{"class":145,"line":17812},[143,100906,100630],{"class":163},[143,100908,100909],{"class":145,"line":17825},[143,100910,100635],{"class":163},[143,100912,100913],{"class":145,"line":17830},[143,100914,100640],{"class":163},[143,100916,100917],{"class":145,"line":33531},[143,100918,100645],{"class":163},[143,100920,100921],{"class":145,"line":33537},[143,100922,100650],{"class":163},[143,100924,100925],{"class":145,"line":33543},[143,100926,100655],{"class":163},[143,100928,100929],{"class":145,"line":33549},[143,100930,100660],{"class":163},[143,100932,100933],{"class":145,"line":33555},[143,100934,100665],{"class":163},[143,100936,100937],{"class":145,"line":33566},[143,100938,94805],{"class":163},[143,100940,100941,100944,100946,100948,100950],{"class":145,"line":33572},[143,100942,100943],{"class":149},"np.vsplit(aa,[",[143,100945,1122],{"class":280},[143,100947,1419],{"class":149},[143,100949,1360],{"class":280},[143,100951,5557],{"class":149},[143,100953,100954],{"class":145,"line":33592},[143,100955,94441],{"class":266},[143,100957,100958],{"class":145,"line":33598},[143,100959,94805],{"class":163},[143,100961,100962],{"class":145,"line":33609},[143,100963,100460],{"class":163},[143,100965,100966],{"class":145,"line":33615},[143,100967,100465],{"class":163},[143,100969,100970],{"class":145,"line":33621},[143,100971,100470],{"class":163},[143,100973,100974],{"class":145,"line":33627},[143,100975,100532],{"class":163},[143,100977,100978],{"class":145,"line":33633},[143,100979,100537],{"class":163},[143,100981,100982],{"class":145,"line":33639},[143,100983,100542],{"class":163},[143,100985,100986],{"class":145,"line":33645},[143,100987,100490],{"class":163},[954,100989,100990],{},"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":138,"searchDepth":35,"depth":35,"links":100992},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100258,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100999,"title":101000,"body":101001,"description":973,"extension":974,"meta":101495,"navigation":976,"path":101496,"seo":101497,"stem":101498,"__hash__":101499},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101002,"toc":101486},[101003,101006,101009,101034,101038,101097,101149,101153,101155,101191,101245,101247,101285,101356,101360,101365,101369,101372,101405,101408,101412,101415,101418,101421,101424,101429,101433,101436,101439,101442,101445,101450,101454,101459,101462,101483],[10,101004,101000],{"id":101005},"_9数学函数",[63,101007,101008],{},"补充回顾：python的列表推导式",[133,101010,101012],{"className":31276,"code":101011,"language":31278,"meta":138,"style":138},"[1\u002Fi for i in a]\n",[140,101013,101014],{"__ignoreMap":138},[143,101015,101016,101018,101020,101022,101025,101027,101029,101031],{"class":145,"line":146},[143,101017,749],{"class":149},[143,101019,771],{"class":280},[143,101021,1625],{"class":755},[143,101023,101024],{"class":149},"i ",[143,101026,3925],{"class":755},[143,101028,10338],{"class":149},[143,101030,26941],{"class":755},[143,101032,101033],{"class":149}," a]\n",[14,101035,101037],{"id":101036},"_91-求倒数","9.1 求倒数",[133,101039,101041],{"className":31276,"code":101040,"language":31278,"meta":138,"style":138},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[140,101042,101043,101048,101076,101088],{"__ignoreMap":138},[143,101044,101045],{"class":145,"line":146},[143,101046,101047],{"class":266},"#数组求倒数\n",[143,101049,101050,101052,101054,101056,101058,101060,101062,101064,101066,101068,101070,101072,101074],{"class":145,"line":35},[143,101051,67],{"class":149},[143,101053,160],{"class":755},[143,101055,749],{"class":149},[143,101057,771],{"class":280},[143,101059,1419],{"class":149},[143,101061,1122],{"class":280},[143,101063,1419],{"class":149},[143,101065,1116],{"class":280},[143,101067,1419],{"class":149},[143,101069,1334],{"class":280},[143,101071,1419],{"class":149},[143,101073,1360],{"class":280},[143,101075,34144],{"class":149},[143,101077,101078,101080,101082,101085],{"class":145,"line":46},[143,101079,1304],{"class":149},[143,101081,160],{"class":755},[143,101083,101084],{"class":149},"np.array(a)",[143,101086,101087],{"class":266},"#将列表转换为数组\n",[143,101089,101090,101092,101094],{"class":145,"line":293},[143,101091,771],{"class":280},[143,101093,1625],{"class":755},[143,101095,101096],{"class":149},"b\n",[133,101098,101100],{"className":31276,"code":101099,"language":31278,"meta":138,"style":138},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[140,101101,101102,101130,101139,101144],{"__ignoreMap":138},[143,101103,101104,101106,101108,101110,101112,101114,101116,101118,101120,101122,101124,101126,101128],{"class":145,"line":146},[143,101105,67],{"class":149},[143,101107,160],{"class":755},[143,101109,749],{"class":149},[143,101111,771],{"class":280},[143,101113,1419],{"class":149},[143,101115,1122],{"class":280},[143,101117,1419],{"class":149},[143,101119,1116],{"class":280},[143,101121,1419],{"class":149},[143,101123,1334],{"class":280},[143,101125,1419],{"class":149},[143,101127,1360],{"class":280},[143,101129,34144],{"class":149},[143,101131,101132,101134,101136],{"class":145,"line":35},[143,101133,1304],{"class":149},[143,101135,160],{"class":755},[143,101137,101138],{"class":149},"np.array(a)\n",[143,101140,101141],{"class":145,"line":46},[143,101142,101143],{"class":266},"#调用numpy中的函数reciprocal()\n",[143,101145,101146],{"class":145,"line":293},[143,101147,101148],{"class":149},"np.reciprocal(b)\n",[14,101150,101152],{"id":101151},"_92-求平方","9.2 求平方",[63,101154,95407],{},[133,101156,101158],{"className":31276,"code":101157,"language":31278,"meta":138,"style":138},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[140,101159,101160,101165,101170,101186],{"__ignoreMap":138},[143,101161,101162],{"class":145,"line":146},[143,101163,101164],{"class":266},"#square()，求平方\n",[143,101166,101167],{"class":145,"line":35},[143,101168,101169],{"class":266},"#一维数组\n",[143,101171,101172,101174,101176,101178,101180,101182,101184],{"class":145,"line":46},[143,101173,67],{"class":149},[143,101175,160],{"class":755},[143,101177,93879],{"class":149},[143,101179,771],{"class":280},[143,101181,1419],{"class":149},[143,101183,1487],{"class":280},[143,101185,1055],{"class":149},[143,101187,101188],{"class":145,"line":293},[143,101189,101190],{"class":149},"np.square(a)\n",[133,101192,101194],{"className":31276,"code":101193,"language":31278,"meta":138,"style":138},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[140,101195,101196,101201,101206,101227],{"__ignoreMap":138},[143,101197,101198],{"class":145,"line":146},[143,101199,101200],{"class":266},"#或者通过循环遍历的形式来计算\n",[143,101202,101203],{"class":145,"line":35},[143,101204,101205],{"class":266},"#这是一个列表\n",[143,101207,101208,101211,101213,101215,101217,101219,101221,101224],{"class":145,"line":46},[143,101209,101210],{"class":149},"[i",[143,101212,1496],{"class":755},[143,101214,101024],{"class":149},[143,101216,3925],{"class":755},[143,101218,10338],{"class":149},[143,101220,26941],{"class":755},[143,101222,101223],{"class":149}," a]",[143,101225,101226],{"class":266},"#这个求完之后在数列当中\n",[143,101228,101229,101232,101234,101236,101238,101240,101242],{"class":145,"line":293},[143,101230,101231],{"class":149},"np.array([i",[143,101233,1496],{"class":755},[143,101235,101024],{"class":149},[143,101237,3925],{"class":755},[143,101239,10338],{"class":149},[143,101241,26941],{"class":755},[143,101243,101244],{"class":149}," a])\n",[63,101246,94168],{},[133,101248,101250],{"className":31276,"code":101249,"language":31278,"meta":138,"style":138},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[140,101251,101252,101256,101280],{"__ignoreMap":138},[143,101253,101254],{"class":145,"line":146},[143,101255,94178],{"class":266},[143,101257,101258,101260,101262,101264,101266,101268,101270,101272,101274,101276,101278],{"class":145,"line":35},[143,101259,94183],{"class":149},[143,101261,160],{"class":755},[143,101263,93879],{"class":149},[143,101265,771],{"class":280},[143,101267,1419],{"class":149},[143,101269,1564],{"class":280},[143,101271,93884],{"class":149},[143,101273,1334],{"class":280},[143,101275,1419],{"class":149},[143,101277,1116],{"class":280},[143,101279,1055],{"class":149},[143,101281,101282],{"class":145,"line":46},[143,101283,101284],{"class":149},"np.square(aa)\n",[133,101286,101288],{"className":31276,"code":101287,"language":31278,"meta":138,"style":138},"#传统的方式\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",[140,101289,101290,101295,101304,101320,101336,101351],{"__ignoreMap":138},[143,101291,101292],{"class":145,"line":146},[143,101293,101294],{"class":266},"#传统的方式\n",[143,101296,101297,101299,101301],{"class":145,"line":35},[143,101298,99063],{"class":149},[143,101300,160],{"class":755},[143,101302,101303],{"class":149},"np.empty_like(aa)\n",[143,101305,101306,101308,101310,101312,101314,101316,101318],{"class":145,"line":46},[143,101307,3925],{"class":755},[143,101309,10338],{"class":149},[143,101311,26941],{"class":755},[143,101313,33341],{"class":280},[143,101315,1049],{"class":149},[143,101317,1334],{"class":280},[143,101319,31684],{"class":149},[143,101321,101322,101324,101326,101328,101330,101332,101334],{"class":145,"line":293},[143,101323,4101],{"class":755},[143,101325,10400],{"class":149},[143,101327,26941],{"class":755},[143,101329,33341],{"class":280},[143,101331,1049],{"class":149},[143,101333,1116],{"class":280},[143,101335,31684],{"class":149},[143,101337,101338,101341,101343,101346,101348],{"class":145,"line":306},[143,101339,101340],{"class":149},"        bb[i,j]",[143,101342,160],{"class":755},[143,101344,101345],{"class":149},"aa[i,j]",[143,101347,1496],{"class":755},[143,101349,101350],{"class":149},"aa[i,j]\n",[143,101352,101353],{"class":145,"line":319},[143,101354,101355],{"class":149},"bb\n",[14,101357,101359],{"id":101358},"_93-求各元素的符号","9.3 求各元素的符号",[63,101361,101362],{},[29,101363],{"alt":138,"src":101364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101366,101368],{"id":101367},"_94-modf函数","9.4 modf函数",[63,101370,101371],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[133,101373,101375],{"className":31276,"code":101374,"language":31278,"meta":138,"style":138},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[140,101376,101377,101400],{"__ignoreMap":138},[143,101378,101379,101381,101383,101385,101387,101389,101391,101393,101395,101398],{"class":145,"line":146},[143,101380,67],{"class":149},[143,101382,160],{"class":755},[143,101384,93879],{"class":149},[143,101386,1573],{"class":755},[143,101388,1487],{"class":280},[143,101390,1419],{"class":149},[143,101392,1487],{"class":280},[143,101394,1419],{"class":149},[143,101396,101397],{"class":280},"0.3",[143,101399,1055],{"class":149},[143,101401,101402],{"class":145,"line":35},[143,101403,101404],{"class":149},"np.modf(a)\n",[63,101406,101407],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,101409,101411],{"id":101410},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[63,101413,101414],{},"np.cell()",[63,101416,101417],{},"np.floor()",[63,101419,101420],{},"np.rint()",[63,101422,101423],{},"对各元素分别向上取整、向下取整、四舍五入",[63,101425,101426],{},[29,101427],{"alt":138,"src":101428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,101430,101432],{"id":101431},"_96-around函数","9.6 around()函数",[63,101434,101435],{},"around()函数也可以实现对数的小数位数进行操作",[63,101437,101438],{},"其中的参数：",[63,101440,101441],{},"1.要传的数组",[63,101443,101444],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[63,101446,101447],{},[29,101448],{"alt":138,"src":101449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,101451,101453],{"id":101452},"_97-三角函数","9.7 三角函数",[63,101455,101456],{},[29,101457],{"alt":138,"src":101458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[63,101460,101461],{},"引入图像模块非常重要",[133,101463,101465],{"className":31276,"code":101464,"language":31278,"meta":138,"style":138},"from matplotlib import pyplot as plt\n",[140,101466,101467],{"__ignoreMap":138},[143,101468,101469,101471,101474,101476,101479,101481],{"class":145,"line":146},[143,101470,31635],{"class":755},[143,101472,101473],{"class":149}," matplotlib ",[143,101475,31290],{"class":755},[143,101477,101478],{"class":149}," pyplot ",[143,101480,32281],{"class":755},[143,101482,32335],{"class":149},[954,101484,101485],{},"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":138,"searchDepth":35,"depth":35,"links":101487},[101488,101489,101490,101491,101492,101493,101494],{"id":101036,"depth":35,"text":101037},{"id":101151,"depth":35,"text":101152},{"id":101358,"depth":35,"text":101359},{"id":101367,"depth":35,"text":101368},{"id":101410,"depth":35,"text":101411},{"id":101431,"depth":35,"text":101432},{"id":101452,"depth":35,"text":101453},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101000,"description":973},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101501,"title":101502,"body":101503,"description":973,"extension":974,"meta":101507,"navigation":976,"path":101508,"seo":101509,"stem":101510,"__hash__":101511},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101504,"toc":101505},[],{"title":138,"searchDepth":35,"depth":35,"links":101506},[],{"category":51318},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101502,"description":973},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101513,"title":101514,"body":101515,"description":138,"extension":974,"meta":103523,"navigation":976,"path":103524,"seo":103525,"stem":103526,"__hash__":103527},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101516,"toc":103499},[101517,101520,101524,101527,101530,101536,101539,101562,101565,101599,101602,101643,101647,101650,101743,101746,101790,101793,101810,101813,101827,101830,101833,101878,101881,101918,101922,101925,101931,101936,101956,101960,101963,102029,102032,102050,102054,102057,102086,102096,102102,102106,102109,102115,102126,102130,102133,102163,102166,102446,102449,102452,102463,102466,102469,102491,102498,102501,102519,102522,102525,102539,102547,102550,102576,102582,102585,102588,102598,102610,102630,102639,102659,102669,102693,102706,102720,102725,102766,102783,102808,102820,102840,102846,102891,102910,102927,102940,102956,102963,102975,102984,103019,103040,103065,103078,103102,103117,103142,103145,103166,103175,103178,103189,103193,103196,103202,103214,103221,103225,103228,103240,103243,103257,103260,103270,103280,103283,103323,103326,103330,103336,103339,103353,103357,103360,103393,103397,103400,103423,103431,103434,103440,103446,103449,103452,103480,103484,103487,103493,103496],[10,101518,101514],{"id":101519},"_1环境安装与第一个-mujoco-程序",[14,101521,101523],{"id":101522},"_1目标说明","1.目标说明",[63,101525,101526],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[63,101528,101529],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[133,101531,101534],{"className":101532,"code":101533,"language":6087,"meta":138},[6085],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[140,101535,101533],{"__ignoreMap":138},[63,101537,101538],{},"需要掌握:",[19,101540,101541,101544,101547,101552,101557],{},[22,101542,101543],{},"Fedora 44 下 MuJoCo 的系统依赖",[22,101545,101546],{},"Python 虚拟环境创建",[22,101548,101549],{},[140,101550,101551],{},"mujoco.MjModel",[22,101553,101554],{},[140,101555,101556],{},"mujoco.MjData",[22,101558,101559],{},[140,101560,101561],{},"mujoco.mj_step(model, data)",[63,101563,101564],{},"MuJoCo 中最重要的两个对象:",[1181,101566,101567,101577],{},[1184,101568,101569],{},[1187,101570,101571,101574],{},[1190,101572,101573],{"align":24634},"对象",[1190,101575,101576],{"align":24634},"含义",[1227,101578,101579,101589],{},[1187,101580,101581,101586],{},[1232,101582,101583],{"align":24634},[140,101584,101585],{},"MjModel",[1232,101587,101588],{"align":24634},"模型结构，来自 XML，基本不随时间变化",[1187,101590,101591,101596],{},[1232,101592,101593],{"align":24634},[140,101594,101595],{},"MjData",[1232,101597,101598],{"align":24634},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[63,101600,101601],{},"可以先用一个类比理解：",[1181,101603,101604,101614],{},[1184,101605,101606],{},[1187,101607,101608,101611],{},[1190,101609,101610],{"align":24634},"类比",[1190,101612,101613],{"align":24634},"MuJoCo 对象",[1227,101615,101616,101625,101634],{},[1187,101617,101618,101621],{},[1232,101619,101620],{"align":24634},"游戏地图和角色配置",[1232,101622,101623],{"align":24634},[140,101624,101585],{},[1187,101626,101627,101630],{},[1232,101628,101629],{"align":24634},"游戏运行到当前帧的状态",[1232,101631,101632],{"align":24634},[140,101633,101595],{},[1187,101635,101636,101639],{},[1232,101637,101638],{"align":24634},"前进一帧",[1232,101640,101641],{"align":24634},[140,101642,101561],{},[14,101644,101646],{"id":101645},"_2环境与依赖安装","2.环境与依赖安装",[63,101648,101649],{},"Fedora 44 系统依赖:",[133,101651,101653],{"className":24720,"code":101652,"language":24722,"meta":138,"style":138},"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",[140,101654,101655,101667,101680,101693,101703,101713,101732],{"__ignoreMap":138},[143,101656,101657,101659,101661,101663,101665],{"class":145,"line":146},[143,101658,25474],{"class":156},[143,101660,27213],{"class":163},[143,101662,24732],{"class":163},[143,101664,27298],{"class":280},[143,101666,25576],{"class":280},[143,101668,101669,101672,101675,101678],{"class":145,"line":35},[143,101670,101671],{"class":163},"  python3",[143,101673,101674],{"class":163}," python3-pip",[143,101676,101677],{"class":163}," python3-virtualenv",[143,101679,25576],{"class":280},[143,101681,101682,101685,101688,101691],{"class":145,"line":46},[143,101683,101684],{"class":163},"  mesa-libGL",[143,101686,101687],{"class":163}," mesa-libGLU",[143,101689,101690],{"class":163}," mesa-dri-drivers",[143,101692,25576],{"class":280},[143,101694,101695,101698,101701],{"class":145,"line":293},[143,101696,101697],{"class":163},"  libglvnd-glx",[143,101699,101700],{"class":163}," libglvnd-opengl",[143,101702,25576],{"class":280},[143,101704,101705,101708,101711],{"class":145,"line":306},[143,101706,101707],{"class":163},"  glfw",[143,101709,101710],{"class":163}," glfw-devel",[143,101712,25576],{"class":280},[143,101714,101715,101718,101721,101724,101727,101730],{"class":145,"line":319},[143,101716,101717],{"class":163},"  libX11",[143,101719,101720],{"class":163}," libXcursor",[143,101722,101723],{"class":163}," libXi",[143,101725,101726],{"class":163}," libXinerama",[143,101728,101729],{"class":163}," libXrandr",[143,101731,25576],{"class":280},[143,101733,101734,101737,101740],{"class":145,"line":332},[143,101735,101736],{"class":163},"  gcc",[143,101738,101739],{"class":163}," gcc-c++",[143,101741,101742],{"class":163}," make\n",[63,101744,101745],{},"创建 Python 环境:",[133,101747,101749],{"className":24720,"code":101748,"language":24722,"meta":138,"style":138},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[140,101750,101751,101765,101773],{"__ignoreMap":138},[143,101752,101753,101756,101759,101762],{"class":145,"line":146},[143,101754,101755],{"class":156},"python3",[143,101757,101758],{"class":280}," -m",[143,101760,101761],{"class":163}," venv",[143,101763,101764],{"class":163}," .venv\n",[143,101766,101767,101770],{"class":145,"line":35},[143,101768,101769],{"class":280},"source",[143,101771,101772],{"class":163}," .venv\u002Fbin\u002Factivate\n",[143,101774,101775,101777,101779,101782,101784,101787],{"class":145,"line":46},[143,101776,31278],{"class":156},[143,101778,101758],{"class":280},[143,101780,101781],{"class":163}," pip",[143,101783,24732],{"class":163},[143,101785,101786],{"class":280}," --upgrade",[143,101788,101789],{"class":163}," pip\n",[63,101791,101792],{},"pip 安装:",[133,101794,101796],{"className":24720,"code":101795,"language":24722,"meta":138,"style":138},"pip install \"mujoco>=2.3\" numpy\n",[140,101797,101798],{"__ignoreMap":138},[143,101799,101800,101802,101804,101807],{"class":145,"line":146},[143,101801,24729],{"class":156},[143,101803,24732],{"class":163},[143,101805,101806],{"class":163}," \"mujoco>=2.3\"",[143,101808,101809],{"class":163}," numpy\n",[63,101811,101812],{},"安装完成后，先做最小检查：",[133,101814,101816],{"className":24720,"code":101815,"language":24722,"meta":138,"style":138},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[140,101817,101818],{"__ignoreMap":138},[143,101819,101820,101822,101824],{"class":145,"line":146},[143,101821,31278],{"class":156},[143,101823,31256],{"class":280},[143,101825,101826],{"class":163}," \"import mujoco; print(mujoco.__version__)\"\n",[63,101828,101829],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[63,101831,101832],{},"conda 安装:",[133,101834,101836],{"className":24720,"code":101835,"language":24722,"meta":138,"style":138},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[140,101837,101838,101858,101868],{"__ignoreMap":138},[143,101839,101840,101842,101844,101846,101849,101852,101855],{"class":145,"line":146},[143,101841,31228],{"class":156},[143,101843,30074],{"class":163},[143,101845,26013],{"class":280},[143,101847,101848],{"class":163}," mujoco-study",[143,101850,101851],{"class":163}," python=",[143,101853,101854],{"class":280},"3.10",[143,101856,101857],{"class":280}," -y\n",[143,101859,101860,101862,101865],{"class":145,"line":35},[143,101861,31228],{"class":156},[143,101863,101864],{"class":163}," activate",[143,101866,101867],{"class":163}," mujoco-study\n",[143,101869,101870,101872,101874,101876],{"class":145,"line":46},[143,101871,24729],{"class":156},[143,101873,24732],{"class":163},[143,101875,101806],{"class":163},[143,101877,101809],{"class":163},[63,101879,101880],{},"版本冲突说明:",[19,101882,101883,101889,101899,101908],{},[22,101884,101885,101886,29283],{},"不要安装 ",[140,101887,101888],{},"mujoco-py",[22,101890,101891,101892,101894,101895,101898],{},"如果旧项目里同时安装了 ",[140,101893,101888],{}," 和 ",[140,101896,101897],{},"mujoco","，建议新建干净虚拟环境。",[22,101900,101901,101904,101905,29283],{},[140,101902,101903],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[140,101906,101907],{},"~\u002F.mujoco\u002Fmujoco210",[22,101909,101910,101911,83417,101914,101917],{},"离屏渲染可能涉及 OpenGL 后端，",[140,101912,101913],{},"MUJOCO_GL=egl",[140,101915,101916],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101919,101921],{"id":101920},"_3核心概念解释","3.核心概念解释",[63,101923,101924],{},"MuJoCo 的基本执行流程:",[133,101926,101929],{"className":101927,"code":101928,"language":6087,"meta":138},[6085],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[140,101930,101928],{"__ignoreMap":138},[63,101932,101933,101935],{},[140,101934,101585],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[63,101937,101938,101940,101941,1255,101944,1255,101947,1255,101950,1255,101953,29283],{},[140,101939,101595],{}," 存放仿真运行时状态，例如 ",[140,101942,101943],{},"data.time",[140,101945,101946],{},"data.qpos",[140,101948,101949],{},"data.qvel",[140,101951,101952],{},"data.ctrl",[140,101954,101955],{},"data.xpos",[58,101957,101959],{"id":101958},"xml-是什么","XML 是什么",[63,101961,101962],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[133,101964,101966],{"className":53954,"code":101965,"language":53956,"meta":138,"style":138},"\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",[140,101967,101968,101990,102021],{"__ignoreMap":138},[143,101969,101970,101972,101974,101976,101978,101980,101983,101985,101988],{"class":145,"line":146},[143,101971,150],{"class":149},[143,101973,52688],{"class":153},[143,101975,15819],{"class":156},[143,101977,160],{"class":149},[143,101979,54377],{"class":163},[143,101981,101982],{"class":156}," pos",[143,101984,160],{"class":149},[143,101986,101987],{"class":163},"\"0 0 1\"",[143,101989,183],{"class":149},[143,101991,101992,101994,101997,101999,102001,102004,102006,102008,102010,102013,102015,102018],{"class":145,"line":35},[143,101993,634],{"class":149},[143,101995,101996],{"class":153},"geom",[143,101998,15819],{"class":156},[143,102000,160],{"class":149},[143,102002,102003],{"class":163},"\"box_geom\"",[143,102005,54709],{"class":156},[143,102007,160],{"class":149},[143,102009,54377],{"class":163},[143,102011,102012],{"class":156}," size",[143,102014,160],{"class":149},[143,102016,102017],{"class":163},"\"0.1 0.1 0.1\"",[143,102019,102020],{"class":149},"\u002F>\n",[143,102022,102023,102025,102027],{"class":145,"line":46},[143,102024,730],{"class":149},[143,102026,52688],{"class":153},[143,102028,183],{"class":149},[63,102030,102031],{},"这段意思是：",[19,102033,102034,102040,102047],{},[22,102035,102036,102037,102039],{},"创建一个叫 ",[140,102038,54600],{}," 的刚体。",[22,102041,102042,102043,102046],{},"它初始放在 ",[140,102044,102045],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[22,102048,102049],{},"它里面有一个盒子形状的几何体。",[58,102051,102053],{"id":102052},"timestep-是什么","timestep 是什么",[63,102055,102056],{},"XML 里的：",[133,102058,102060],{"className":53954,"code":102059,"language":53956,"meta":138,"style":138},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[140,102061,102062],{"__ignoreMap":138},[143,102063,102064,102066,102068,102071,102073,102076,102079,102081,102084],{"class":145,"line":146},[143,102065,150],{"class":149},[143,102067,70047],{"class":153},[143,102069,102070],{"class":156}," timestep",[143,102072,160],{"class":149},[143,102074,102075],{"class":163},"\"0.01\"",[143,102077,102078],{"class":156}," gravity",[143,102080,160],{"class":149},[143,102082,102083],{"class":163},"\"0 0 -9.81\"",[143,102085,102020],{"class":149},[63,102087,102088,102089,102092,102093,102095],{},"表示每调用一次 ",[140,102090,102091],{},"mj_step","，仿真时间前进 ",[140,102094,39884],{}," 秒。循环 100 次，大约就是 1 秒：",[133,102097,102100],{"className":102098,"code":102099,"language":6087,"meta":138},[6085],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[140,102101,102099],{"__ignoreMap":138},[58,102103,102105],{"id":102104},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[63,102107,102108],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[133,102110,102113],{"className":102111,"code":102112,"language":6087,"meta":138},[6085],"x y z qw qx qy qz\n",[140,102114,102112],{"__ignoreMap":138},[63,102116,102117,102118,102121,102122,102125],{},"表示一个自由刚体的位置和姿态。其中 ",[140,102119,102120],{},"x y z"," 是位置，",[140,102123,102124],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102127,102129],{"id":102128},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[63,102131,102132],{},"新建文件:",[133,102134,102136],{"className":24720,"code":102135,"language":24722,"meta":138,"style":138},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[140,102137,102138,102148,102155],{"__ignoreMap":138},[143,102139,102140,102143,102145],{"class":145,"line":146},[143,102141,102142],{"class":156},"mkdir",[143,102144,30114],{"class":280},[143,102146,102147],{"class":163}," mujoco_tutorial\n",[143,102149,102150,102153],{"class":145,"line":35},[143,102151,102152],{"class":280},"cd",[143,102154,102147],{"class":163},[143,102156,102157,102160],{"class":145,"line":46},[143,102158,102159],{"class":156},"touch",[143,102161,102162],{"class":163}," ch1_first_sim.py\n",[63,102164,102165],{},"写入:",[133,102167,102169],{"className":31276,"code":102168,"language":31278,"meta":138,"style":138},"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",[140,102170,102171,102178,102182,102186,102196,102201,102206,102210,102215,102220,102224,102229,102234,102239,102244,102249,102254,102258,102262,102266,102279,102293,102303,102307,102319,102331,102343,102355,102367,102371,102388,102393,102397,102408,102419,102423,102427,102441],{"__ignoreMap":138},[143,102172,102173,102175],{"class":145,"line":146},[143,102174,31290],{"class":755},[143,102176,102177],{"class":149}," mujoco\n",[143,102179,102180],{"class":145,"line":35},[143,102181,3300],{"emptyLinePlaceholder":976},[143,102183,102184],{"class":145,"line":46},[143,102185,3300],{"emptyLinePlaceholder":976},[143,102187,102188,102191,102193],{"class":145,"line":293},[143,102189,102190],{"class":280},"XML",[143,102192,14464],{"class":755},[143,102194,102195],{"class":163}," \"\"\"\n",[143,102197,102198],{"class":145,"line":306},[143,102199,102200],{"class":163},"\u003Cmujoco model=\"first_sim\">\n",[143,102202,102203],{"class":145,"line":319},[143,102204,102205],{"class":163},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[143,102207,102208],{"class":145,"line":332},[143,102209,3300],{"emptyLinePlaceholder":976},[143,102211,102212],{"class":145,"line":345},[143,102213,102214],{"class":163},"  \u003Cworldbody>\n",[143,102216,102217],{"class":145,"line":701},[143,102218,102219],{"class":163},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[143,102221,102222],{"class":145,"line":707},[143,102223,3300],{"emptyLinePlaceholder":976},[143,102225,102226],{"class":145,"line":727},[143,102227,102228],{"class":163},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[143,102230,102231],{"class":145,"line":2518},[143,102232,102233],{"class":163},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[143,102235,102236],{"class":145,"line":2524},[143,102237,102238],{"class":163},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[143,102240,102241],{"class":145,"line":2529},[143,102242,102243],{"class":163},"    \u003C\u002Fbody>\n",[143,102245,102246],{"class":145,"line":2543},[143,102247,102248],{"class":163},"  \u003C\u002Fworldbody>\n",[143,102250,102251],{"class":145,"line":2548},[143,102252,102253],{"class":163},"\u003C\u002Fmujoco>\n",[143,102255,102256],{"class":145,"line":2554},[143,102257,96574],{"class":163},[143,102259,102260],{"class":145,"line":2575},[143,102261,3300],{"emptyLinePlaceholder":976},[143,102263,102264],{"class":145,"line":2580},[143,102265,3300],{"emptyLinePlaceholder":976},[143,102267,102268,102270,102272,102275,102277],{"class":145,"line":2594},[143,102269,32845],{"class":755},[143,102271,2873],{"class":156},[143,102273,102274],{"class":149},"() -> ",[143,102276,96562],{"class":280},[143,102278,4639],{"class":149},[143,102280,102281,102284,102286,102289,102291],{"class":145,"line":2599},[143,102282,102283],{"class":149},"    model ",[143,102285,160],{"class":755},[143,102287,102288],{"class":149}," mujoco.MjModel.from_xml_string(",[143,102290,102190],{"class":280},[143,102292,1055],{"class":149},[143,102294,102295,102298,102300],{"class":145,"line":2628},[143,102296,102297],{"class":149},"    data ",[143,102299,160],{"class":755},[143,102301,102302],{"class":149}," mujoco.MjData(model)\n",[143,102304,102305],{"class":145,"line":2633},[143,102306,3300],{"emptyLinePlaceholder":976},[143,102308,102309,102311,102313,102316],{"class":145,"line":2650},[143,102310,32197],{"class":280},[143,102312,1049],{"class":149},[143,102314,102315],{"class":163},"\"nq:\"",[143,102317,102318],{"class":149},", model.nq)\n",[143,102320,102321,102323,102325,102328],{"class":145,"line":2655},[143,102322,32197],{"class":280},[143,102324,1049],{"class":149},[143,102326,102327],{"class":163},"\"nv:\"",[143,102329,102330],{"class":149},", model.nv)\n",[143,102332,102333,102335,102337,102340],{"class":145,"line":2660},[143,102334,32197],{"class":280},[143,102336,1049],{"class":149},[143,102338,102339],{"class":163},"\"nu:\"",[143,102341,102342],{"class":149},", model.nu)\n",[143,102344,102345,102347,102349,102352],{"class":145,"line":2665},[143,102346,32197],{"class":280},[143,102348,1049],{"class":149},[143,102350,102351],{"class":163},"\"initial time:\"",[143,102353,102354],{"class":149},", data.time)\n",[143,102356,102357,102359,102361,102364],{"class":145,"line":2679},[143,102358,32197],{"class":280},[143,102360,1049],{"class":149},[143,102362,102363],{"class":163},"\"initial qpos:\"",[143,102365,102366],{"class":149},", data.qpos.copy())\n",[143,102368,102369],{"class":145,"line":2684},[143,102370,3300],{"emptyLinePlaceholder":976},[143,102372,102373,102375,102378,102380,102382,102384,102386],{"class":145,"line":3477},[143,102374,4101],{"class":755},[143,102376,102377],{"class":149}," _ ",[143,102379,26941],{"class":755},[143,102381,33341],{"class":280},[143,102383,1049],{"class":149},[143,102385,1352],{"class":280},[143,102387,31684],{"class":149},[143,102389,102390],{"class":145,"line":3491},[143,102391,102392],{"class":149},"        mujoco.mj_step(model, data)\n",[143,102394,102395],{"class":145,"line":3499},[143,102396,3300],{"emptyLinePlaceholder":976},[143,102398,102399,102401,102403,102406],{"class":145,"line":3504},[143,102400,32197],{"class":280},[143,102402,1049],{"class":149},[143,102404,102405],{"class":163},"\"final time:\"",[143,102407,102354],{"class":149},[143,102409,102410,102412,102414,102417],{"class":145,"line":3510},[143,102411,32197],{"class":280},[143,102413,1049],{"class":149},[143,102415,102416],{"class":163},"\"final qpos:\"",[143,102418,102366],{"class":149},[143,102420,102421],{"class":145,"line":3516},[143,102422,3300],{"emptyLinePlaceholder":976},[143,102424,102425],{"class":145,"line":3521},[143,102426,3300],{"emptyLinePlaceholder":976},[143,102428,102429,102431,102433,102436,102439],{"class":145,"line":8848},[143,102430,2434],{"class":755},[143,102432,32118],{"class":280},[143,102434,102435],{"class":755}," ==",[143,102437,102438],{"class":163}," \"__main__\"",[143,102440,4639],{"class":149},[143,102442,102443],{"class":145,"line":8872},[143,102444,102445],{"class":149},"    main()\n",[58,102447,102448],{"id":102448},"代码逐段解释",[63,102450,102451],{},"导入库：",[133,102453,102455],{"className":31276,"code":102454,"language":31278,"meta":138,"style":138},"import mujoco\n",[140,102456,102457],{"__ignoreMap":138},[143,102458,102459,102461],{"class":145,"line":146},[143,102460,31290],{"class":755},[143,102462,102177],{"class":149},[63,102464,102465],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[63,102467,102468],{},"定义 XML：",[133,102470,102472],{"className":31276,"code":102471,"language":31278,"meta":138,"style":138},"XML = \"\"\"\n...\n\"\"\"\n",[140,102473,102474,102482,102487],{"__ignoreMap":138},[143,102475,102476,102478,102480],{"class":145,"line":146},[143,102477,102190],{"class":280},[143,102479,14464],{"class":755},[143,102481,102195],{"class":163},[143,102483,102484],{"class":145,"line":35},[143,102485,102486],{"class":163},"...\n",[143,102488,102489],{"class":145,"line":46},[143,102490,96574],{"class":163},[63,102492,102493,102494,102497],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[140,102495,102496],{},"freejoint"," 的方块。",[63,102499,102500],{},"编译模型：",[133,102502,102504],{"className":31276,"code":102503,"language":31278,"meta":138,"style":138},"model = mujoco.MjModel.from_xml_string(XML)\n",[140,102505,102506],{"__ignoreMap":138},[143,102507,102508,102511,102513,102515,102517],{"class":145,"line":146},[143,102509,102510],{"class":149},"model ",[143,102512,160],{"class":755},[143,102514,102288],{"class":149},[143,102516,102190],{"class":280},[143,102518,1055],{"class":149},[63,102520,102521],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[63,102523,102524],{},"创建数据：",[133,102526,102528],{"className":31276,"code":102527,"language":31278,"meta":138,"style":138},"data = mujoco.MjData(model)\n",[140,102529,102530],{"__ignoreMap":138},[143,102531,102532,102535,102537],{"class":145,"line":146},[143,102533,102534],{"class":149},"data ",[143,102536,160],{"class":755},[143,102538,102302],{"class":149},[63,102540,102541,102543,102544,102546],{},[140,102542,34299],{}," 会保存仿真当前状态。刚创建时，时间是 ",[140,102545,1234],{},"，方块还在初始位置。",[63,102548,102549],{},"推进仿真：",[133,102551,102553],{"className":31276,"code":102552,"language":31278,"meta":138,"style":138},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[140,102554,102555,102571],{"__ignoreMap":138},[143,102556,102557,102559,102561,102563,102565,102567,102569],{"class":145,"line":146},[143,102558,3925],{"class":755},[143,102560,102377],{"class":149},[143,102562,26941],{"class":755},[143,102564,33341],{"class":280},[143,102566,1049],{"class":149},[143,102568,1352],{"class":280},[143,102570,31684],{"class":149},[143,102572,102573],{"class":145,"line":35},[143,102574,102575],{"class":149},"    mujoco.mj_step(model, data)\n",[63,102577,102578,102579,102581],{},"每次 ",[140,102580,102091],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[58,102583,102584],{"id":102584},"代码逐行细讲",[63,102586,102587],{},"下面把完整代码按新手视角拆开讲。",[133,102589,102590],{"className":31276,"code":102454,"language":31278,"meta":138,"style":138},[140,102591,102592],{"__ignoreMap":138},[143,102593,102594,102596],{"class":145,"line":146},[143,102595,31290],{"class":755},[143,102597,102177],{"class":149},[63,102599,102600,102602,102603,1255,102605,1255,102607,29283],{},[140,102601,31290],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[140,102604,101551],{},[140,102606,101556],{},[140,102608,102609],{},"mujoco.mj_step",[133,102611,102612],{"className":31276,"code":102471,"language":31278,"meta":138,"style":138},[140,102613,102614,102622,102626],{"__ignoreMap":138},[143,102615,102616,102618,102620],{"class":145,"line":146},[143,102617,102190],{"class":280},[143,102619,14464],{"class":755},[143,102621,102195],{"class":163},[143,102623,102624],{"class":145,"line":35},[143,102625,102486],{"class":163},[143,102627,102628],{"class":145,"line":46},[143,102629,96574],{"class":163},[63,102631,102632,102634,102635,102638],{},[140,102633,102190],{}," 是一个变量名。右边的三引号 ",[140,102636,102637],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[133,102640,102641],{"className":53954,"code":102200,"language":53956,"meta":138,"style":138},[140,102642,102643],{"__ignoreMap":138},[143,102644,102645,102647,102649,102652,102654,102657],{"class":145,"line":146},[143,102646,150],{"class":149},[143,102648,101897],{"class":153},[143,102650,102651],{"class":156}," model",[143,102653,160],{"class":149},[143,102655,102656],{"class":163},"\"first_sim\"",[143,102658,183],{"class":149},[63,102660,102661,102662,102665,102666,29283],{},"这是 XML 的根标签。",[140,102663,102664],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[140,102667,102668],{},"first_sim",[133,102670,102671],{"className":53954,"code":102059,"language":53956,"meta":138,"style":138},[140,102672,102673],{"__ignoreMap":138},[143,102674,102675,102677,102679,102681,102683,102685,102687,102689,102691],{"class":145,"line":146},[143,102676,150],{"class":149},[143,102678,70047],{"class":153},[143,102680,102070],{"class":156},[143,102682,160],{"class":149},[143,102684,102075],{"class":163},[143,102686,102078],{"class":156},[143,102688,160],{"class":149},[143,102690,102083],{"class":163},[143,102692,102020],{"class":149},[63,102694,102695,102697,102698,102701,102702,102705],{},[140,102696,70047],{}," 用来设置仿真参数。",[140,102699,102700],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[140,102703,102704],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[133,102707,102709],{"className":53954,"code":102708,"language":53956,"meta":138,"style":138},"\u003Cworldbody>\n",[140,102710,102711],{"__ignoreMap":138},[143,102712,102713,102715,102718],{"class":145,"line":146},[143,102714,150],{"class":149},[143,102716,102717],{"class":153},"worldbody",[143,102719,183],{"class":149},[63,102721,102722,102724],{},[140,102723,102717],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[133,102726,102728],{"className":53954,"code":102727,"language":53956,"meta":138,"style":138},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[140,102729,102730],{"__ignoreMap":138},[143,102731,102732,102734,102736,102738,102740,102743,102745,102747,102750,102752,102754,102757,102759,102761,102764],{"class":145,"line":146},[143,102733,150],{"class":149},[143,102735,101996],{"class":153},[143,102737,15819],{"class":156},[143,102739,160],{"class":149},[143,102741,102742],{"class":163},"\"floor\"",[143,102744,54709],{"class":156},[143,102746,160],{"class":149},[143,102748,102749],{"class":163},"\"plane\"",[143,102751,102012],{"class":156},[143,102753,160],{"class":149},[143,102755,102756],{"class":163},"\"2 2 0.1\"",[143,102758,79645],{"class":156},[143,102760,160],{"class":149},[143,102762,102763],{"class":163},"\"0.8 0.8 0.8 1\"",[143,102765,102020],{"class":149},[63,102767,102768,102769,102771,102772,102775,102776,102779,102780,102782],{},"这行创建地面。",[140,102770,101996],{}," 是几何体。",[140,102773,102774],{},"name=\"floor\""," 是名字。",[140,102777,102778],{},"type=\"plane\""," 表示平面。",[140,102781,55995],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[133,102784,102786],{"className":53954,"code":102785,"language":53956,"meta":138,"style":138},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[140,102787,102788],{"__ignoreMap":138},[143,102789,102790,102792,102794,102796,102798,102800,102802,102804,102806],{"class":145,"line":146},[143,102791,150],{"class":149},[143,102793,52688],{"class":153},[143,102795,15819],{"class":156},[143,102797,160],{"class":149},[143,102799,54377],{"class":163},[143,102801,101982],{"class":156},[143,102803,160],{"class":149},[143,102805,101987],{"class":163},[143,102807,183],{"class":149},[63,102809,102810,102811,29283,102813,102816,102817,102819],{},"这行创建一个刚体，名字叫 ",[140,102812,54600],{},[140,102814,102815],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[140,102818,102045],{},"，也就是离地面 1 米高。",[133,102821,102823],{"className":53954,"code":102822,"language":53956,"meta":138,"style":138},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[140,102824,102825],{"__ignoreMap":138},[143,102826,102827,102829,102831,102833,102835,102838],{"class":145,"line":146},[143,102828,150],{"class":149},[143,102830,102496],{"class":153},[143,102832,15819],{"class":156},[143,102834,160],{"class":149},[143,102836,102837],{"class":163},"\"box_free\"",[143,102839,102020],{"class":149},[63,102841,102842,102843,102845],{},"这行很重要。",[140,102844,102496],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[133,102847,102849],{"className":53954,"code":102848,"language":53956,"meta":138,"style":138},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[140,102850,102851],{"__ignoreMap":138},[143,102852,102853,102855,102857,102859,102861,102863,102865,102867,102869,102871,102873,102875,102878,102880,102882,102884,102886,102889],{"class":145,"line":146},[143,102854,150],{"class":149},[143,102856,101996],{"class":153},[143,102858,15819],{"class":156},[143,102860,160],{"class":149},[143,102862,102003],{"class":163},[143,102864,54709],{"class":156},[143,102866,160],{"class":149},[143,102868,54377],{"class":163},[143,102870,102012],{"class":156},[143,102872,160],{"class":149},[143,102874,102017],{"class":163},[143,102876,102877],{"class":156}," mass",[143,102879,160],{"class":149},[143,102881,4578],{"class":163},[143,102883,79645],{"class":156},[143,102885,160],{"class":149},[143,102887,102888],{"class":163},"\"1 0 0 1\"",[143,102890,102020],{"class":149},[63,102892,102893,102894,102897,102898,102901,102902,102905,102906,102909],{},"这行给 box body 添加一个盒子形状。",[140,102895,102896],{},"type=\"box\""," 表示形状是盒子。",[140,102899,102900],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[140,102903,102904],{},"mass=\"1\""," 表示质量是 1。",[140,102907,102908],{},"rgba=\"1 0 0 1\""," 表示红色。",[133,102911,102913],{"className":31276,"code":102912,"language":31278,"meta":138,"style":138},"def main() -> None:\n",[140,102914,102915],{"__ignoreMap":138},[143,102916,102917,102919,102921,102923,102925],{"class":145,"line":146},[143,102918,32845],{"class":755},[143,102920,2873],{"class":156},[143,102922,102274],{"class":149},[143,102924,96562],{"class":280},[143,102926,4639],{"class":149},[63,102928,102929,102931,102932,102935,102936,102939],{},[140,102930,32845],{}," 用来定义函数。这里定义了一个叫 ",[140,102933,102934],{},"main"," 的函数。",[140,102937,102938],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[133,102941,102942],{"className":31276,"code":102503,"language":31278,"meta":138,"style":138},[140,102943,102944],{"__ignoreMap":138},[143,102945,102946,102948,102950,102952,102954],{"class":145,"line":146},[143,102947,102510],{"class":149},[143,102949,160],{"class":755},[143,102951,102288],{"class":149},[143,102953,102190],{"class":280},[143,102955,1055],{"class":149},[63,102957,102958,102959,102962],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[140,102960,102961],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[133,102964,102965],{"className":31276,"code":102527,"language":31278,"meta":138,"style":138},[140,102966,102967],{"__ignoreMap":138},[143,102968,102969,102971,102973],{"class":145,"line":146},[143,102970,102534],{"class":149},[143,102972,160],{"class":755},[143,102974,102302],{"class":149},[63,102976,102977,102978,102980,102981,102983],{},"这行创建仿真数据。",[140,102979,34299],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[140,102982,34299],{}," 都会变化。",[133,102985,102987],{"className":31276,"code":102986,"language":31278,"meta":138,"style":138},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[140,102988,102989,102999,103009],{"__ignoreMap":138},[143,102990,102991,102993,102995,102997],{"class":145,"line":146},[143,102992,31313],{"class":280},[143,102994,1049],{"class":149},[143,102996,102315],{"class":163},[143,102998,102318],{"class":149},[143,103000,103001,103003,103005,103007],{"class":145,"line":35},[143,103002,31313],{"class":280},[143,103004,1049],{"class":149},[143,103006,102327],{"class":163},[143,103008,102330],{"class":149},[143,103010,103011,103013,103015,103017],{"class":145,"line":46},[143,103012,31313],{"class":280},[143,103014,1049],{"class":149},[143,103016,102339],{"class":163},[143,103018,102342],{"class":149},[63,103020,103021,103023,103024,103027,103028,103031,103032,103035,103036,103039],{},[140,103022,31313],{}," 用来输出信息。",[140,103025,103026],{},"model.nq"," 是位置变量数量，",[140,103029,103030],{},"model.nv"," 是速度变量数量，",[140,103033,103034],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[140,103037,103038],{},"nu"," 是 0。",[133,103041,103043],{"className":31276,"code":103042,"language":31278,"meta":138,"style":138},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[140,103044,103045,103055],{"__ignoreMap":138},[143,103046,103047,103049,103051,103053],{"class":145,"line":146},[143,103048,31313],{"class":280},[143,103050,1049],{"class":149},[143,103052,102351],{"class":163},[143,103054,102354],{"class":149},[143,103056,103057,103059,103061,103063],{"class":145,"line":35},[143,103058,31313],{"class":280},[143,103060,1049],{"class":149},[143,103062,102363],{"class":163},[143,103064,102366],{"class":149},[63,103066,103067,103068,103070,103071,103073,103074,103077],{},"这里打印初始时间和初始位置。",[140,103069,101943],{}," 一开始是 0。",[140,103072,101946],{}," 是位置数组。",[140,103075,103076],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[133,103079,103080],{"className":31276,"code":102552,"language":31278,"meta":138,"style":138},[140,103081,103082,103098],{"__ignoreMap":138},[143,103083,103084,103086,103088,103090,103092,103094,103096],{"class":145,"line":146},[143,103085,3925],{"class":755},[143,103087,102377],{"class":149},[143,103089,26941],{"class":755},[143,103091,33341],{"class":280},[143,103093,1049],{"class":149},[143,103095,1352],{"class":280},[143,103097,31684],{"class":149},[143,103099,103100],{"class":145,"line":35},[143,103101,102575],{"class":149},[63,103103,103104,103106,103107,103110,103111,103113,103114,103116],{},[140,103105,3925],{}," 是循环。",[140,103108,103109],{},"range(100)"," 表示循环 100 次。",[140,103112,2030],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[140,103115,102091],{},"，仿真就前进一步。",[133,103118,103120],{"className":31276,"code":103119,"language":31278,"meta":138,"style":138},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[140,103121,103122,103132],{"__ignoreMap":138},[143,103123,103124,103126,103128,103130],{"class":145,"line":146},[143,103125,31313],{"class":280},[143,103127,1049],{"class":149},[143,103129,102405],{"class":163},[143,103131,102354],{"class":149},[143,103133,103134,103136,103138,103140],{"class":145,"line":35},[143,103135,31313],{"class":280},[143,103137,1049],{"class":149},[143,103139,102416],{"class":163},[143,103141,102366],{"class":149},[63,103143,103144],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[133,103146,103148],{"className":31276,"code":103147,"language":31278,"meta":138,"style":138},"if __name__ == \"__main__\":\n    main()\n",[140,103149,103150,103162],{"__ignoreMap":138},[143,103151,103152,103154,103156,103158,103160],{"class":145,"line":146},[143,103153,2434],{"class":755},[143,103155,32118],{"class":280},[143,103157,102435],{"class":755},[143,103159,102438],{"class":163},[143,103161,4639],{"class":149},[143,103163,103164],{"class":145,"line":35},[143,103165,102445],{"class":149},[63,103167,103168,103169,103172,103173,29283],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[140,103170,103171],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[140,103174,103171],{},[63,103176,103177],{},"运行:",[133,103179,103181],{"className":24720,"code":103180,"language":24722,"meta":138,"style":138},"python ch1_first_sim.py\n",[140,103182,103183],{"__ignoreMap":138},[143,103184,103185,103187],{"class":145,"line":146},[143,103186,31278],{"class":156},[143,103188,102162],{"class":163},[14,103190,103192],{"id":103191},"_5运行结果说明","5.运行结果说明",[63,103194,103195],{},"你应该看到类似输出:",[133,103197,103200],{"className":103198,"code":103199,"language":6087,"meta":138},[6085],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[140,103201,103199],{"__ignoreMap":138},[63,103203,103204,103206,103207,103210,103211,29283],{},[140,103205,102496],{}," 有 7 个位置变量: ",[140,103208,103209],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[140,103212,103213],{},"vx vy vz wx wy wz",[63,103215,103216,103217,103220],{},"你还会看到 ",[140,103218,103219],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103222,103224],{"id":103223},"_6验证步骤","6.验证步骤",[63,103226,103227],{},"确认版本:",[133,103229,103230],{"className":24720,"code":101815,"language":24722,"meta":138,"style":138},[140,103231,103232],{"__ignoreMap":138},[143,103233,103234,103236,103238],{"class":145,"line":146},[143,103235,31278],{"class":156},[143,103237,31256],{"class":280},[143,103239,101826],{"class":163},[63,103241,103242],{},"确认导入的是官方 bindings:",[133,103244,103246],{"className":24720,"code":103245,"language":24722,"meta":138,"style":138},"python -c \"import mujoco; print(mujoco)\"\n",[140,103247,103248],{"__ignoreMap":138},[143,103249,103250,103252,103254],{"class":145,"line":146},[143,103251,31278],{"class":156},[143,103253,31256],{"class":280},[143,103255,103256],{"class":163}," \"import mujoco; print(mujoco)\"\n",[63,103258,103259],{},"运行程序:",[133,103261,103262],{"className":24720,"code":103180,"language":24722,"meta":138,"style":138},[140,103263,103264],{"__ignoreMap":138},[143,103265,103266,103268],{"class":145,"line":146},[143,103267,31278],{"class":156},[143,103269,102162],{"class":163},[63,103271,103272,103273,103276,103277,29283],{},"检查 ",[140,103274,103275],{},"final time"," 是否约等于 ",[140,103278,103279],{},"1.0",[63,103281,103282],{},"再做几个小实验：",[19,103284,103285,103295,103303,103316],{},[22,103286,103287,103288,103290,103291,103294],{},"把 ",[140,103289,102815],{}," 改成 ",[140,103292,103293],{},"pos=\"0 0 2\"","，观察初始高度变化。",[22,103296,103287,103297,103290,103299,103302],{},[140,103298,102704],{},[140,103300,103301],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[22,103304,103287,103305,103290,103307,103310,103311,103313,103314,29283],{},[140,103306,102700],{},[140,103308,103309],{},"timestep=\"0.005\"","，观察 100 步后的 ",[140,103312,103275],{}," 是否变成约 ",[140,103315,36227],{},[22,103317,103318,103319,103322],{},"删除 ",[140,103320,103321],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[63,103324,103325],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,103327,103329],{"id":103328},"_7常见错误与解决方案","7.常见错误与解决方案",[58,103331,103333],{"id":103332},"modulenotfounderror-no-module-named-mujoco",[140,103334,103335],{},"ModuleNotFoundError: No module named 'mujoco'",[63,103337,103338],{},"解决:",[133,103340,103342],{"className":24720,"code":103341,"language":24722,"meta":138,"style":138},"pip install \"mujoco>=2.3\"\n",[140,103343,103344],{"__ignoreMap":138},[143,103345,103346,103348,103350],{"class":145,"line":146},[143,103347,24729],{"class":156},[143,103349,24732],{"class":163},[143,103351,103352],{"class":163}," \"mujoco>=2.3\"\n",[58,103354,103356],{"id":103355},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[63,103358,103359],{},"先安装系统依赖:",[133,103361,103363],{"className":24720,"code":103362,"language":24722,"meta":138,"style":138},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[140,103364,103365],{"__ignoreMap":138},[143,103366,103367,103369,103371,103373,103375,103378,103380,103383,103385,103388,103390],{"class":145,"line":146},[143,103368,25474],{"class":156},[143,103370,27213],{"class":163},[143,103372,24732],{"class":163},[143,103374,27298],{"class":280},[143,103376,103377],{"class":163}," mesa-libGL",[143,103379,101690],{"class":163},[143,103381,103382],{"class":163}," glfw",[143,103384,101710],{"class":163},[143,103386,103387],{"class":163}," libX11",[143,103389,101723],{"class":163},[143,103391,103392],{"class":163}," libXrandr\n",[58,103394,103396],{"id":103395},"xml-解析失败","XML 解析失败",[63,103398,103399],{},"检查:",[19,103401,103402,103405,103408,103414],{},[22,103403,103404],{},"标签是否闭合",[22,103406,103407],{},"属性是否带引号",[22,103409,103410,103411],{},"根节点是否是 ",[140,103412,103413],{},"\u003Cmujoco>",[22,103415,103416,103418,103419,103422],{},[140,103417,52688],{}," 是否放在 ",[140,103420,103421],{},"\u003Cworldbody>"," 内部",[58,103424,103426,103428,103429],{"id":103425},"final-time-不是严格等于-10",[140,103427,103275],{}," 不是严格等于 ",[140,103430,103279],{},[63,103432,103433],{},"这通常不是错误。浮点数计算可能得到：",[133,103435,103438],{"className":103436,"code":103437,"language":6087,"meta":138},[6085],"1.0000000000000007\n",[140,103439,103437],{"__ignoreMap":138},[63,103441,103442,103443,103445],{},"只要接近 ",[140,103444,103279],{}," 就正常。",[58,103447,103448],{"id":103448},"方块没有掉下来",[63,103450,103451],{},"检查：",[19,103453,103454,103460,103466,103471],{},[22,103455,103456,103457],{},"方块 body 里是否有 ",[140,103458,103459],{},"\u003Cfreejoint\u002F>",[22,103461,103462,103463],{},"重力是否是 ",[140,103464,103465],{},"0 0 -9.81",[22,103467,103468,103469],{},"是否真的调用了 ",[140,103470,101561],{},[22,103472,103473,103474,103476,103477],{},"你看的是否是 ",[140,103475,103219],{},"，不是 ",[140,103478,103479],{},"initial qpos",[14,103481,103483],{"id":103482},"_8本章小结","8.本章小结",[63,103485,103486],{},"本章你已经完成了 MuJoCo 的最小闭环：",[133,103488,103491],{"className":103489,"code":103490,"language":6087,"meta":138},[6085],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[140,103492,103490],{"__ignoreMap":138},[63,103494,103495],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[954,103497,103498],{},"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":138,"searchDepth":35,"depth":35,"links":103500},[103501,103502,103503,103508,103512,103513,103514,103522],{"id":101522,"depth":35,"text":101523},{"id":101645,"depth":35,"text":101646},{"id":101920,"depth":35,"text":101921,"children":103504},[103505,103506,103507],{"id":101958,"depth":46,"text":101959},{"id":102052,"depth":46,"text":102053},{"id":102104,"depth":46,"text":102105},{"id":102128,"depth":35,"text":102129,"children":103509},[103510,103511],{"id":102448,"depth":46,"text":102448},{"id":102584,"depth":46,"text":102584},{"id":103191,"depth":35,"text":103192},{"id":103223,"depth":35,"text":103224},{"id":103328,"depth":35,"text":103329,"children":103515},[103516,103517,103518,103519,103521],{"id":103332,"depth":46,"text":103335},{"id":103355,"depth":46,"text":103356},{"id":103395,"depth":46,"text":103396},{"id":103425,"depth":46,"text":103520},"final time 不是严格等于 1.0",{"id":103448,"depth":46,"text":103448},{"id":103482,"depth":35,"text":103483},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101514,"description":138},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103529,"title":103530,"body":103531,"description":138,"extension":974,"meta":105186,"navigation":976,"path":105187,"seo":105188,"stem":105189,"__hash__":105190},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103532,"toc":105162},[103533,103536,103538,103541,103544,103561,103656,103659,103665,103667,103669,103693,103696,103710,103713,103754,103756,103769,103771,103774,103822,103834,103837,103840,103846,103859,103926,103929,103948,103951,103954,103960,103962,103971,103974,103978,103986,104068,104077,104081,104087,104101,104111,104113,104443,104446,104458,104460,104471,104473,104476,104494,104497,104500,104518,104529,104532,104547,104557,104559,104580,104597,104617,104623,104663,104679,104695,104701,104704,104728,104744,104749,104779,104796,104821,104824,104839,104848,104863,104872,104887,104894,104896,104906,104919,104926,104929,104968,104975,104977,105029,105031,105037,105040,105047,105054,105057,105059,105077,105080,105083,105117,105129,105131,105134,105156,105159],[10,103534,103530],{"id":103535},"_2xml-与-mjcf-物理建模基础",[14,103537,101523],{"id":101522},[63,103539,103540],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[63,103542,103543],{},"本章结束后，你应该能看懂一个简单模型里：",[19,103545,103546,103549,103552,103555,103558],{},[22,103547,103548],{},"地面在哪里。",[22,103550,103551],{},"物体初始位置在哪里。",[22,103553,103554],{},"几何体是什么形状。",[22,103556,103557],{},"哪些 body 可以自由运动。",[22,103559,103560],{},"如何用名字在 Python 里找到 XML 中的对象。",[1181,103562,103563,103573],{},[1184,103564,103565],{},[1187,103566,103567,103570],{},[1190,103568,103569],{"align":24634},"标签",[1190,103571,103572],{"align":24634},"作用",[1227,103574,103575,103584,103594,103603,103613,103623,103636,103646],{},[1187,103576,103577,103581],{},[1232,103578,103579],{"align":24634},[140,103580,103413],{},[1232,103582,103583],{"align":24634},"根节点",[1187,103585,103586,103591],{},[1232,103587,103588],{"align":24634},[140,103589,103590],{},"\u003Coption>",[1232,103592,103593],{"align":24634},"仿真参数",[1187,103595,103596,103600],{},[1232,103597,103598],{"align":24634},[140,103599,103421],{},[1232,103601,103602],{"align":24634},"世界中的物体",[1187,103604,103605,103610],{},[1232,103606,103607],{"align":24634},[140,103608,103609],{},"\u003Cbody>",[1232,103611,103612],{"align":24634},"刚体",[1187,103614,103615,103620],{},[1232,103616,103617],{"align":24634},[140,103618,103619],{},"\u003Cgeom>",[1232,103621,103622],{"align":24634},"几何体、碰撞体、可视体",[1187,103624,103625,103633],{},[1232,103626,103627,25876,103630],{"align":24634},[140,103628,103629],{},"\u003Cjoint>",[140,103631,103632],{},"\u003Cfreejoint>",[1232,103634,103635],{"align":24634},"关节",[1187,103637,103638,103643],{},[1232,103639,103640],{"align":24634},[140,103641,103642],{},"\u003Csite>",[1232,103644,103645],{"align":24634},"标记点",[1187,103647,103648,103653],{},[1232,103649,103650],{"align":24634},[140,103651,103652],{},"\u003Cactuator>",[1232,103654,103655],{"align":24634},"控制器",[63,103657,103658],{},"初学时可以先记住：",[133,103660,103663],{"className":103661,"code":103662,"language":6087,"meta":138},[6085],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[140,103664,103662],{"__ignoreMap":138},[14,103666,101646],{"id":101645},[63,103668,101649],{},[133,103670,103672],{"className":24720,"code":103671,"language":24722,"meta":138,"style":138},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[140,103673,103674],{"__ignoreMap":138},[143,103675,103676,103678,103680,103682,103684,103686,103688,103690],{"class":145,"line":146},[143,103677,25474],{"class":156},[143,103679,27213],{"class":163},[143,103681,24732],{"class":163},[143,103683,27298],{"class":280},[143,103685,103377],{"class":163},[143,103687,101690],{"class":163},[143,103689,103382],{"class":163},[143,103691,103692],{"class":163}," glfw-devel\n",[63,103694,103695],{},"pip:",[133,103697,103698],{"className":24720,"code":101795,"language":24722,"meta":138,"style":138},[140,103699,103700],{"__ignoreMap":138},[143,103701,103702,103704,103706,103708],{"class":145,"line":146},[143,103703,24729],{"class":156},[143,103705,24732],{"class":163},[143,103707,101806],{"class":163},[143,103709,101809],{"class":163},[63,103711,103712],{},"conda:",[133,103714,103716],{"className":24720,"code":103715,"language":24722,"meta":138,"style":138},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[140,103717,103718,103735,103744],{"__ignoreMap":138},[143,103719,103720,103722,103724,103726,103729,103731,103733],{"class":145,"line":146},[143,103721,31228],{"class":156},[143,103723,30074],{"class":163},[143,103725,26013],{"class":280},[143,103727,103728],{"class":163}," mujoco-xml",[143,103730,101851],{"class":163},[143,103732,101854],{"class":280},[143,103734,101857],{"class":280},[143,103736,103737,103739,103741],{"class":145,"line":35},[143,103738,31228],{"class":156},[143,103740,101864],{"class":163},[143,103742,103743],{"class":163}," mujoco-xml\n",[143,103745,103746,103748,103750,103752],{"class":145,"line":46},[143,103747,24729],{"class":156},[143,103749,24732],{"class":163},[143,103751,101806],{"class":163},[143,103753,101809],{"class":163},[63,103755,101880],{},[19,103757,103758,103761,103766],{},[22,103759,103760],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[22,103762,103763,103764,29283],{},"本章使用基础标签，适用于 ",[140,103765,101903],{},[22,103767,103768],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103770,101921],{"id":101920},[63,103772,103773],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[133,103775,103777],{"className":53954,"code":103776,"language":53956,"meta":138,"style":138},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[140,103778,103779,103793,103801,103806,103814],{"__ignoreMap":138},[143,103780,103781,103783,103785,103787,103789,103791],{"class":145,"line":146},[143,103782,150],{"class":149},[143,103784,101897],{"class":153},[143,103786,102651],{"class":156},[143,103788,160],{"class":149},[143,103790,63562],{"class":163},[143,103792,183],{"class":149},[143,103794,103795,103797,103799],{"class":145,"line":35},[143,103796,634],{"class":149},[143,103798,102717],{"class":153},[143,103800,183],{"class":149},[143,103802,103803],{"class":145,"line":46},[143,103804,103805],{"class":149},"    ...\n",[143,103807,103808,103810,103812],{"class":145,"line":293},[143,103809,53304],{"class":149},[143,103811,102717],{"class":153},[143,103813,183],{"class":149},[143,103815,103816,103818,103820],{"class":145,"line":306},[143,103817,730],{"class":149},[143,103819,101897],{"class":153},[143,103821,183],{"class":149},[63,103823,103824,103826,103827,103829,103830,103833],{},[140,103825,52688],{}," 表示刚体。",[140,103828,101996],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[140,103831,103832],{},"joint"," 表示刚体相对父刚体如何运动。",[58,103835,103836],{"id":103836},"层级结构非常重要",[63,103838,103839],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[133,103841,103844],{"className":103842,"code":103843,"language":6087,"meta":138},[6085],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[140,103845,103843],{"__ignoreMap":138},[63,103847,103848,101894,103851,103854,103855,103858],{},[140,103849,103850],{},"red_box_geom",[140,103852,103853],{},"box_center"," 都属于 ",[140,103856,103857],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[133,103860,103862],{"className":53954,"code":103861,"language":53956,"meta":138,"style":138},"\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",[140,103863,103864,103884,103898,103918],{"__ignoreMap":138},[143,103865,103866,103868,103870,103872,103874,103876,103878,103880,103882],{"class":145,"line":146},[143,103867,150],{"class":149},[143,103869,52688],{"class":153},[143,103871,15819],{"class":156},[143,103873,160],{"class":149},[143,103875,54377],{"class":163},[143,103877,101982],{"class":156},[143,103879,160],{"class":149},[143,103881,101987],{"class":163},[143,103883,183],{"class":149},[143,103885,103886,103888,103890,103892,103894,103896],{"class":145,"line":35},[143,103887,634],{"class":149},[143,103889,102496],{"class":153},[143,103891,15819],{"class":156},[143,103893,160],{"class":149},[143,103895,102837],{"class":163},[143,103897,102020],{"class":149},[143,103899,103900,103902,103904,103906,103908,103910,103912,103914,103916],{"class":145,"line":46},[143,103901,634],{"class":149},[143,103903,101996],{"class":153},[143,103905,54709],{"class":156},[143,103907,160],{"class":149},[143,103909,54377],{"class":163},[143,103911,102012],{"class":156},[143,103913,160],{"class":149},[143,103915,102017],{"class":163},[143,103917,102020],{"class":149},[143,103919,103920,103922,103924],{"class":145,"line":293},[143,103921,730],{"class":149},[143,103923,52688],{"class":153},[143,103925,183],{"class":149},[63,103927,103928],{},"含义:",[19,103930,103931,103937,103942,103945],{},[22,103932,103933,103934,103936],{},"创建名为 ",[140,103935,54600],{}," 的刚体",[22,103938,103939,103940],{},"初始位置在世界坐标 ",[140,103941,102045],{},[22,103943,103944],{},"它有一个自由关节",[22,103946,103947],{},"它有一个盒子几何体",[58,103949,103950],{"id":103950},"坐标怎么理解",[63,103952,103953],{},"MuJoCo 默认使用三维坐标：",[133,103955,103958],{"className":103956,"code":103957,"language":6087,"meta":138},[6085],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[140,103959,103957],{"__ignoreMap":138},[63,103961,15532],{},[133,103963,103965],{"className":53954,"code":103964,"language":53956,"meta":138,"style":138},"pos=\"0 0 1\"\n",[140,103966,103967],{"__ignoreMap":138},[143,103968,103969],{"class":145,"line":146},[143,103970,103964],{"class":149},[63,103972,103973],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[58,103975,103977],{"id":103976},"geom-的-size-怎么理解","geom 的 size 怎么理解",[63,103979,103980,103981,83408,103983,103985],{},"不同 ",[140,103982,752],{},[140,103984,32394],{}," 含义不同：",[1181,103987,103988,104003],{},[1184,103989,103990],{},[1187,103991,103992,103996,104001],{},[1190,103993,103994],{"align":24634},[140,103995,752],{},[1190,103997,103998,104000],{"align":24634},[140,103999,32394],{}," 示例",[1190,104002,101576],{"align":24634},[1227,104004,104005,104019,104034,104053],{},[1187,104006,104007,104011,104016],{},[1232,104008,104009],{"align":24634},[140,104010,54600],{},[1232,104012,104013],{"align":24634},[140,104014,104015],{},"size=\"0.1 0.2 0.3\"",[1232,104017,104018],{"align":24634},"x\u002Fy\u002Fz 半边长，不是完整长度",[1187,104020,104021,104026,104031],{},[1232,104022,104023],{"align":24634},[140,104024,104025],{},"sphere",[1232,104027,104028],{"align":24634},[140,104029,104030],{},"size=\"0.1\"",[1232,104032,104033],{"align":24634},"球半径",[1187,104035,104036,104041,104046],{},[1232,104037,104038],{"align":24634},[140,104039,104040],{},"capsule",[1232,104042,104043],{"align":24634},[140,104044,104045],{},"size=\"0.03\"",[1232,104047,104048,104049,104052],{"align":24634},"胶囊半径，长度常用 ",[140,104050,104051],{},"fromto"," 指定",[1187,104054,104055,104060,104065],{},[1232,104056,104057],{"align":24634},[140,104058,104059],{},"plane",[1232,104061,104062],{"align":24634},[140,104063,104064],{},"size=\"3 3 0.1\"",[1232,104066,104067],{"align":24634},"可视平面大小，通常当地面",[63,104069,104070,104071,104073,104074,104076],{},"最容易踩坑的是 box：",[140,104072,102900],{}," 表示边长大约是 ",[140,104075,32935],{},"，因为 MuJoCo 用的是半边长。",[58,104078,104080],{"id":104079},"site-是什么","site 是什么",[63,104082,104083,104086],{},[140,104084,104085],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[19,104088,104089,104092,104095,104098],{},[22,104090,104091],{},"标记机械臂末端。",[22,104093,104094],{},"标记目标位置。",[22,104096,104097],{},"放传感器或相机参考点。",[22,104099,104100],{},"在 Python 中读取某个关键点的世界坐标。",[63,104102,104103,104104,101894,104107,104110],{},"在后面的 Reacher 任务中，",[140,104105,104106],{},"tip",[140,104108,104109],{},"target"," 就会用 site 表示。",[14,104112,102129],{"id":102128},[133,104114,104116],{"className":31276,"code":104115,"language":31278,"meta":138,"style":138},"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",[140,104117,104118,104124,104134,104138,104142,104150,104155,104159,104163,104167,104172,104176,104181,104186,104191,104196,104200,104204,104208,104212,104216,104220,104232,104244,104252,104256,104271,104286,104290,104303,104318,104331,104344,104348,104364,104368,104372,104383,104395,104407,104419,104423,104427,104439],{"__ignoreMap":138},[143,104119,104120,104122],{"class":145,"line":146},[143,104121,31290],{"class":755},[143,104123,102177],{"class":149},[143,104125,104126,104128,104130,104132],{"class":145,"line":35},[143,104127,31290],{"class":755},[143,104129,32278],{"class":149},[143,104131,32281],{"class":755},[143,104133,32284],{"class":149},[143,104135,104136],{"class":145,"line":46},[143,104137,3300],{"emptyLinePlaceholder":976},[143,104139,104140],{"class":145,"line":293},[143,104141,3300],{"emptyLinePlaceholder":976},[143,104143,104144,104146,104148],{"class":145,"line":306},[143,104145,102190],{"class":280},[143,104147,14464],{"class":755},[143,104149,102195],{"class":163},[143,104151,104152],{"class":145,"line":319},[143,104153,104154],{"class":163},"\u003Cmujoco model=\"xml_basic\">\n",[143,104156,104157],{"class":145,"line":332},[143,104158,102205],{"class":163},[143,104160,104161],{"class":145,"line":345},[143,104162,3300],{"emptyLinePlaceholder":976},[143,104164,104165],{"class":145,"line":701},[143,104166,102214],{"class":163},[143,104168,104169],{"class":145,"line":707},[143,104170,104171],{"class":163},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[143,104173,104174],{"class":145,"line":727},[143,104175,3300],{"emptyLinePlaceholder":976},[143,104177,104178],{"class":145,"line":2518},[143,104179,104180],{"class":163},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[143,104182,104183],{"class":145,"line":2524},[143,104184,104185],{"class":163},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[143,104187,104188],{"class":145,"line":2529},[143,104189,104190],{"class":163},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[143,104192,104193],{"class":145,"line":2543},[143,104194,104195],{"class":163},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[143,104197,104198],{"class":145,"line":2548},[143,104199,102243],{"class":163},[143,104201,104202],{"class":145,"line":2554},[143,104203,102248],{"class":163},[143,104205,104206],{"class":145,"line":2575},[143,104207,102253],{"class":163},[143,104209,104210],{"class":145,"line":2580},[143,104211,96574],{"class":163},[143,104213,104214],{"class":145,"line":2594},[143,104215,3300],{"emptyLinePlaceholder":976},[143,104217,104218],{"class":145,"line":2599},[143,104219,3300],{"emptyLinePlaceholder":976},[143,104221,104222,104224,104226,104228,104230],{"class":145,"line":2628},[143,104223,32845],{"class":755},[143,104225,2873],{"class":156},[143,104227,102274],{"class":149},[143,104229,96562],{"class":280},[143,104231,4639],{"class":149},[143,104233,104234,104236,104238,104240,104242],{"class":145,"line":2633},[143,104235,102283],{"class":149},[143,104237,160],{"class":755},[143,104239,102288],{"class":149},[143,104241,102190],{"class":280},[143,104243,1055],{"class":149},[143,104245,104246,104248,104250],{"class":145,"line":2650},[143,104247,102297],{"class":149},[143,104249,160],{"class":755},[143,104251,102302],{"class":149},[143,104253,104254],{"class":145,"line":2655},[143,104255,3300],{"emptyLinePlaceholder":976},[143,104257,104258,104261,104263,104266,104269],{"class":145,"line":2660},[143,104259,104260],{"class":149},"    box_body_id ",[143,104262,160],{"class":755},[143,104264,104265],{"class":149}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[143,104267,104268],{"class":163},"\"red_box\"",[143,104270,1055],{"class":149},[143,104272,104273,104276,104278,104281,104284],{"class":145,"line":2665},[143,104274,104275],{"class":149},"    site_id ",[143,104277,160],{"class":755},[143,104279,104280],{"class":149}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[143,104282,104283],{"class":163},"\"box_center\"",[143,104285,1055],{"class":149},[143,104287,104288],{"class":145,"line":2679},[143,104289,3300],{"emptyLinePlaceholder":976},[143,104291,104292,104294,104297,104299,104301],{"class":145,"line":2684},[143,104293,4001],{"class":755},[143,104295,104296],{"class":149}," box_body_id ",[143,104298,150],{"class":755},[143,104300,4993],{"class":280},[143,104302,4639],{"class":149},[143,104304,104305,104308,104311,104313,104316],{"class":145,"line":3477},[143,104306,104307],{"class":755},"        raise",[143,104309,104310],{"class":280}," RuntimeError",[143,104312,1049],{"class":149},[143,104314,104315],{"class":163},"\"body red_box not found\"",[143,104317,1055],{"class":149},[143,104319,104320,104322,104325,104327,104329],{"class":145,"line":3491},[143,104321,4001],{"class":755},[143,104323,104324],{"class":149}," site_id ",[143,104326,150],{"class":755},[143,104328,4993],{"class":280},[143,104330,4639],{"class":149},[143,104332,104333,104335,104337,104339,104342],{"class":145,"line":3499},[143,104334,104307],{"class":755},[143,104336,104310],{"class":280},[143,104338,1049],{"class":149},[143,104340,104341],{"class":163},"\"site box_center not found\"",[143,104343,1055],{"class":149},[143,104345,104346],{"class":145,"line":3504},[143,104347,3300],{"emptyLinePlaceholder":976},[143,104349,104350,104352,104354,104356,104358,104360,104362],{"class":145,"line":3510},[143,104351,4101],{"class":755},[143,104353,102377],{"class":149},[143,104355,26941],{"class":755},[143,104357,33341],{"class":280},[143,104359,1049],{"class":149},[143,104361,2623],{"class":280},[143,104363,31684],{"class":149},[143,104365,104366],{"class":145,"line":3516},[143,104367,102392],{"class":149},[143,104369,104370],{"class":145,"line":3521},[143,104371,3300],{"emptyLinePlaceholder":976},[143,104373,104374,104376,104378,104381],{"class":145,"line":8848},[143,104375,32197],{"class":280},[143,104377,1049],{"class":149},[143,104379,104380],{"class":163},"\"simulation time:\"",[143,104382,102354],{"class":149},[143,104384,104385,104387,104389,104392],{"class":145,"line":8872},[143,104386,32197],{"class":280},[143,104388,1049],{"class":149},[143,104390,104391],{"class":163},"\"box body position:\"",[143,104393,104394],{"class":149},", data.xpos[box_body_id].copy())\n",[143,104396,104397,104399,104401,104404],{"class":145,"line":8877},[143,104398,32197],{"class":280},[143,104400,1049],{"class":149},[143,104402,104403],{"class":163},"\"site position:\"",[143,104405,104406],{"class":149},", data.site_xpos[site_id].copy())\n",[143,104408,104409,104411,104413,104416],{"class":145,"line":8883},[143,104410,32197],{"class":280},[143,104412,1049],{"class":149},[143,104414,104415],{"class":163},"\"box qpos:\"",[143,104417,104418],{"class":149},", np.array(data.qpos))\n",[143,104420,104421],{"class":145,"line":8910},[143,104422,3300],{"emptyLinePlaceholder":976},[143,104424,104425],{"class":145,"line":8915},[143,104426,3300],{"emptyLinePlaceholder":976},[143,104428,104429,104431,104433,104435,104437],{"class":145,"line":8921},[143,104430,2434],{"class":755},[143,104432,32118],{"class":280},[143,104434,102435],{"class":755},[143,104436,102438],{"class":163},[143,104438,4639],{"class":149},[143,104440,104441],{"class":145,"line":8933},[143,104442,102445],{"class":149},[63,104444,104445],{},"保存为：",[133,104447,104449],{"className":24720,"code":104448,"language":24722,"meta":138,"style":138},"touch ch2_xml_basic.py\n",[140,104450,104451],{"__ignoreMap":138},[143,104452,104453,104455],{"class":145,"line":146},[143,104454,102159],{"class":156},[143,104456,104457],{"class":163}," ch2_xml_basic.py\n",[63,104459,103177],{},[133,104461,104463],{"className":24720,"code":104462,"language":24722,"meta":138,"style":138},"python ch2_xml_basic.py\n",[140,104464,104465],{"__ignoreMap":138},[143,104466,104467,104469],{"class":145,"line":146},[143,104468,31278],{"class":156},[143,104470,104457],{"class":163},[58,104472,102448],{"id":102448},[63,104474,104475],{},"用名字查找 body：",[133,104477,104479],{"className":31276,"code":104478,"language":31278,"meta":138,"style":138},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[140,104480,104481],{"__ignoreMap":138},[143,104482,104483,104486,104488,104490,104492],{"class":145,"line":146},[143,104484,104485],{"class":149},"box_body_id ",[143,104487,160],{"class":755},[143,104489,104265],{"class":149},[143,104491,104268],{"class":163},[143,104493,1055],{"class":149},[63,104495,104496],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[63,104498,104499],{},"用名字查找 site：",[133,104501,104503],{"className":31276,"code":104502,"language":31278,"meta":138,"style":138},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[140,104504,104505],{"__ignoreMap":138},[143,104506,104507,104510,104512,104514,104516],{"class":145,"line":146},[143,104508,104509],{"class":149},"site_id ",[143,104511,160],{"class":755},[143,104513,104280],{"class":149},[143,104515,104283],{"class":163},[143,104517,1055],{"class":149},[63,104519,104520,104521,104524,104525,104528],{},"注意第二个参数是对象类型。查 body 就用 ",[140,104522,104523],{},"mjOBJ_BODY","，查 site 就用 ",[140,104526,104527],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[63,104530,104531],{},"读取世界坐标：",[133,104533,104535],{"className":31276,"code":104534,"language":31278,"meta":138,"style":138},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[140,104536,104537,104542],{"__ignoreMap":138},[143,104538,104539],{"class":145,"line":146},[143,104540,104541],{"class":149},"data.xpos[box_body_id]\n",[143,104543,104544],{"class":145,"line":35},[143,104545,104546],{"class":149},"data.site_xpos[site_id]\n",[63,104548,104549,104552,104553,104556],{},[140,104550,104551],{},"xpos"," 是 body 的世界坐标，",[140,104554,104555],{},"site_xpos"," 是 site 的世界坐标。",[58,104558,102584],{"id":102584},[133,104560,104562],{"className":31276,"code":104561,"language":31278,"meta":138,"style":138},"import mujoco\nimport numpy as np\n",[140,104563,104564,104570],{"__ignoreMap":138},[143,104565,104566,104568],{"class":145,"line":146},[143,104567,31290],{"class":755},[143,104569,102177],{"class":149},[143,104571,104572,104574,104576,104578],{"class":145,"line":35},[143,104573,31290],{"class":755},[143,104575,32278],{"class":149},[143,104577,32281],{"class":755},[143,104579,32284],{"class":149},[63,104581,104582,104583,104586,104587,104590,104591,1255,104594,29283],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[140,104584,104585],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[140,104588,104589],{},"as np"," 是习惯写法，后面就可以写 ",[140,104592,104593],{},"np.array(...)",[140,104595,104596],{},"np.round(...)",[133,104598,104599],{"className":31276,"code":102471,"language":31278,"meta":138,"style":138},[140,104600,104601,104609,104613],{"__ignoreMap":138},[143,104602,104603,104605,104607],{"class":145,"line":146},[143,104604,102190],{"class":280},[143,104606,14464],{"class":755},[143,104608,102195],{"class":163},[143,104610,104611],{"class":145,"line":35},[143,104612,102486],{"class":163},[143,104614,104615],{"class":145,"line":46},[143,104616,96574],{"class":163},[63,104618,104619,104620,29283],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[140,104621,104622],{},"mujoco.MjModel.from_xml_string(XML)",[133,104624,104626],{"className":53954,"code":104625,"language":53956,"meta":138,"style":138},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[140,104627,104628],{"__ignoreMap":138},[143,104629,104630,104632,104634,104636,104638,104640,104642,104644,104647,104649,104651,104654,104656,104658,104661],{"class":145,"line":146},[143,104631,150],{"class":149},[143,104633,104085],{"class":153},[143,104635,15819],{"class":156},[143,104637,160],{"class":149},[143,104639,104283],{"class":163},[143,104641,101982],{"class":156},[143,104643,160],{"class":149},[143,104645,104646],{"class":163},"\"0 0 0\"",[143,104648,102012],{"class":156},[143,104650,160],{"class":149},[143,104652,104653],{"class":163},"\"0.03\"",[143,104655,79645],{"class":156},[143,104657,160],{"class":149},[143,104659,104660],{"class":163},"\"0 1 0 1\"",[143,104662,102020],{"class":149},[63,104664,104665,104667,104668,104671,104672,104674,104675,104678],{},[140,104666,104085],{}," 是标记点。",[140,104669,104670],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[140,104673,104045],{}," 表示显示出来的小球大小。",[140,104676,104677],{},"rgba=\"0 1 0 1\""," 表示绿色。",[133,104680,104681],{"className":31276,"code":104478,"language":31278,"meta":138,"style":138},[140,104682,104683],{"__ignoreMap":138},[143,104684,104685,104687,104689,104691,104693],{"class":145,"line":146},[143,104686,104485],{"class":149},[143,104688,160],{"class":755},[143,104690,104265],{"class":149},[143,104692,104268],{"class":163},[143,104694,1055],{"class":149},[63,104696,104697,104698,104700],{},"这行的作用是：根据名字 ",[140,104699,104268],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[63,104702,104703],{},"拆开看：",[19,104705,104706,104712,104717,104723],{},[22,104707,104708,104711],{},[140,104709,104710],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[22,104713,104714,104716],{},[140,104715,102961],{}," 是被查询的模型。",[22,104718,104719,104722],{},[140,104720,104721],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[22,104724,104725,104727],{},[140,104726,104268],{}," 是 XML 里写的名字。",[133,104729,104730],{"className":31276,"code":104502,"language":31278,"meta":138,"style":138},[140,104731,104732],{"__ignoreMap":138},[143,104733,104734,104736,104738,104740,104742],{"class":145,"line":146},[143,104735,104509],{"class":149},[143,104737,160],{"class":755},[143,104739,104280],{"class":149},[143,104741,104283],{"class":163},[143,104743,1055],{"class":149},[63,104745,104746,104747,29283],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[140,104748,104283],{},[133,104750,104752],{"className":31276,"code":104751,"language":31278,"meta":138,"style":138},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[140,104753,104754,104766],{"__ignoreMap":138},[143,104755,104756,104758,104760,104762,104764],{"class":145,"line":146},[143,104757,2434],{"class":755},[143,104759,104296],{"class":149},[143,104761,150],{"class":755},[143,104763,4993],{"class":280},[143,104765,4639],{"class":149},[143,104767,104768,104771,104773,104775,104777],{"class":145,"line":35},[143,104769,104770],{"class":755},"    raise",[143,104772,104310],{"class":280},[143,104774,1049],{"class":149},[143,104776,104315],{"class":163},[143,104778,1055],{"class":149},[63,104780,104781,104783,104784,104787,104788,104791,104792,104795],{},[140,104782,2434],{}," 是条件判断。",[140,104785,104786],{},"mj_name2id"," 找不到对象时会返回 ",[140,104789,104790],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[140,104793,104794],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[133,104797,104799],{"className":31276,"code":104798,"language":31278,"meta":138,"style":138},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[140,104800,104801,104817],{"__ignoreMap":138},[143,104802,104803,104805,104807,104809,104811,104813,104815],{"class":145,"line":146},[143,104804,3925],{"class":755},[143,104806,102377],{"class":149},[143,104808,26941],{"class":755},[143,104810,33341],{"class":280},[143,104812,1049],{"class":149},[143,104814,2623],{"class":280},[143,104816,31684],{"class":149},[143,104818,104819],{"class":145,"line":35},[143,104820,102575],{"class":149},[63,104822,104823],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[133,104825,104827],{"className":31276,"code":104826,"language":31278,"meta":138,"style":138},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[140,104828,104829],{"__ignoreMap":138},[143,104830,104831,104833,104835,104837],{"class":145,"line":146},[143,104832,31313],{"class":280},[143,104834,1049],{"class":149},[143,104836,104391],{"class":163},[143,104838,104394],{"class":149},[63,104840,104841,104843,104844,104847],{},[140,104842,101955],{}," 保存所有 body 的世界坐标。",[140,104845,104846],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[133,104849,104851],{"className":31276,"code":104850,"language":31278,"meta":138,"style":138},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[140,104852,104853],{"__ignoreMap":138},[143,104854,104855,104857,104859,104861],{"class":145,"line":146},[143,104856,31313],{"class":280},[143,104858,1049],{"class":149},[143,104860,104403],{"class":163},[143,104862,104406],{"class":149},[63,104864,104865,104868,104869,104871],{},[140,104866,104867],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[140,104870,103853],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[133,104873,104875],{"className":31276,"code":104874,"language":31278,"meta":138,"style":138},"print(\"box qpos:\", np.array(data.qpos))\n",[140,104876,104877],{"__ignoreMap":138},[143,104878,104879,104881,104883,104885],{"class":145,"line":146},[143,104880,31313],{"class":280},[143,104882,1049],{"class":149},[143,104884,104415],{"class":163},[143,104886,104418],{"class":149},[63,104888,104889,104890,104893],{},"这里打印广义位置数组。",[140,104891,104892],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104895,103192],{"id":103191},[63,104897,104898,104899,104902,104903,29283],{},"程序会输出 ",[140,104900,104901],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[140,104904,104905],{},"qpos",[63,104907,104908,104910,104911,104914,104915,104918],{},[140,104909,104846],{}," 是 body 的世界坐标位置。",[140,104912,104913],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[140,104916,104917],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[63,104920,83100,104921,83408,104923,104925],{},[140,104922,103853],{},[140,104924,104670],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[63,104927,104928],{},"如果你把 site 改成：",[133,104930,104932],{"className":53954,"code":104931,"language":53956,"meta":138,"style":138},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[140,104933,104934],{"__ignoreMap":138},[143,104935,104936,104938,104940,104942,104944,104947,104949,104951,104954,104956,104958,104960,104962,104964,104966],{"class":145,"line":146},[143,104937,150],{"class":149},[143,104939,104085],{"class":153},[143,104941,15819],{"class":156},[143,104943,160],{"class":149},[143,104945,104946],{"class":163},"\"box_top\"",[143,104948,101982],{"class":156},[143,104950,160],{"class":149},[143,104952,104953],{"class":163},"\"0 0 0.15\"",[143,104955,102012],{"class":156},[143,104957,160],{"class":149},[143,104959,104653],{"class":163},[143,104961,79645],{"class":156},[143,104963,160],{"class":149},[143,104965,104660],{"class":163},[143,104967,102020],{"class":149},[63,104969,104970,104971,104974],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[140,104972,104973],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104976,103224],{"id":103223},[19,104978,104979,104988,104991,104998,105004,105015],{},[22,104980,103287,104981,104983,104984,103290,104986,29283],{},[140,104982,103857],{}," 的初始高度从 ",[140,104985,771],{},[140,104987,1122],{},[22,104989,104990],{},"重新运行程序。",[22,104992,104993,104994,104997],{},"观察 ",[140,104995,104996],{},"box qpos"," 和最终位置是否变化。",[22,104999,105000,105001,105003],{},"故意把 ",[140,105002,104085],{}," 名称改错，确认程序能报错。",[22,105005,103287,105006,105008,105009,103290,105011,105014],{},[140,105007,101996],{}," 的颜色 ",[140,105010,102908],{},[140,105012,105013],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[22,105016,103287,105017,83408,105019,103290,105022,105025,105026,105028],{},[140,105018,103853],{},[140,105020,105021],{},"pos",[140,105023,105024],{},"0 0 0.2","，观察 ",[140,105027,104973],{}," 如何变化。",[14,105030,103329],{"id":103328},[58,105032,105034],{"id":105033},"xml-error-schema-violation",[140,105035,105036],{},"XML Error: Schema violation",[63,105038,105039],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[58,105041,105043,82168,105045],{"id":105042},"mj_name2id-返回-1",[140,105044,104786],{},[140,105046,104790],{},[63,105048,105049,105050,105053],{},"说明名字没有找到。检查 XML 中 ",[140,105051,105052],{},"name=\"...\"","，并确认对象类型正确。",[58,105055,105056],{"id":105056},"物体不下落",[63,105058,103399],{},[19,105060,105061,105066,105071],{},[22,105062,105063,105064],{},"body 是否有 ",[140,105065,102496],{},[22,105067,105068,105069],{},"gravity 是否为 ",[140,105070,103465],{},[22,105072,105073,105074,105076],{},"body 是否被固定在 ",[140,105075,102717],{}," 中",[58,105078,105079],{"id":105079},"坐标看起来不符合预期",[63,105081,105082],{},"先区分两种坐标：",[1181,105084,105085,105094],{},[1184,105086,105087],{},[1187,105088,105089,105092],{},[1190,105090,105091],{"align":24634},"坐标",[1190,105093,101576],{"align":24634},[1227,105095,105096,105106],{},[1187,105097,105098,105103],{},[1232,105099,105100,105101],{"align":24634},"XML 里的 ",[140,105102,105021],{},[1232,105104,105105],{"align":24634},"相对父 body 的局部坐标",[1187,105107,105108,105114],{},[1232,105109,105110,25876,105112],{"align":24634},[140,105111,101955],{},[140,105113,104867],{},[1232,105115,105116],{"align":24634},"仿真更新后的世界坐标",[63,105118,105119,105120,105122,105123,83417,105126,105128],{},"如果你修改了 ",[140,105121,101946],{},"，但还没调用 ",[140,105124,105125],{},"mj_forward",[140,105127,102091],{},"，世界坐标可能还没有更新。",[14,105130,103483],{"id":103482},[63,105132,105133],{},"MJCF 建模先掌握四件事：",[19,105135,105136,105141,105146,105151],{},[22,105137,105138,105140],{},[140,105139,52688],{}," 表示刚体层级。",[22,105142,105143,105145],{},[140,105144,101996],{}," 表示形状、碰撞和质量。",[22,105147,105148,105150],{},[140,105149,103832],{}," 决定 body 能不能动、怎么动。",[22,105152,105153,105155],{},[140,105154,104085],{}," 用来标记关键点，方便 Python 读取位置。",[63,105157,105158],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[954,105160,105161],{},"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":138,"searchDepth":35,"depth":35,"links":105163},[105164,105165,105166,105172,105176,105177,105178,105185],{"id":101522,"depth":35,"text":101523},{"id":101645,"depth":35,"text":101646},{"id":101920,"depth":35,"text":101921,"children":105167},[105168,105169,105170,105171],{"id":103836,"depth":46,"text":103836},{"id":103950,"depth":46,"text":103950},{"id":103976,"depth":46,"text":103977},{"id":104079,"depth":46,"text":104080},{"id":102128,"depth":35,"text":102129,"children":105173},[105174,105175],{"id":102448,"depth":46,"text":102448},{"id":102584,"depth":46,"text":102584},{"id":103191,"depth":35,"text":103192},{"id":103223,"depth":35,"text":103224},{"id":103328,"depth":35,"text":103329,"children":105179},[105180,105181,105183,105184],{"id":105033,"depth":46,"text":105036},{"id":105042,"depth":46,"text":105182},"mj_name2id 返回 -1",{"id":105056,"depth":46,"text":105056},{"id":105079,"depth":46,"text":105079},{"id":103482,"depth":35,"text":103483},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103530,"description":138},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105192,"title":105193,"body":105194,"description":138,"extension":974,"meta":106689,"navigation":976,"path":106690,"seo":106691,"stem":106692,"__hash__":106693},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105195,"toc":106661},[105196,105199,105201,105204,105207,105245,105248,105254,105257,105259,105261,105288,105290,105304,105306,105347,105349,105373,105375,105378,105387,105396,105399,105408,105416,105425,105428,105438,105441,105493,105500,105506,105514,105562,105565,105584,105587,105595,105599,105608,105641,105643,105991,105993,106005,106007,106018,106020,106023,106044,106050,106053,106078,106088,106091,106099,106102,106105,106126,106137,106139,106159,106162,106183,106192,106211,106217,106242,106245,106259,106266,106290,106293,106301,106310,106326,106338,106346,106355,106357,106360,106384,106389,106392,106414,106416,106455,106457,106464,106466,106474,106477,106480,106492,106533,106540,106551,106558,106561,106610,106613,106616,106622,106624,106629,106655,106658],[10,105197,105193],{"id":105198},"_3python-控制接口读取状态与推进仿真",[14,105200,101523],{"id":101522},[63,105202,105203],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[63,105205,105206],{},"你将学习:",[19,105208,105209,105214,105219,105223,105228,105239],{},[22,105210,105211],{},[140,105212,105213],{},"MjModel.from_xml_string",[22,105215,105216],{},[140,105217,105218],{},"MjData(model)",[22,105220,105221],{},[140,105222,102091],{},[22,105224,105225],{},[140,105226,105227],{},"mj_resetData",[22,105229,105230,105231,1255,105233,1255,105236],{},"读取 ",[140,105232,104905],{},[140,105234,105235],{},"qvel",[140,105237,105238],{},"ctrl",[22,105240,105241,105242],{},"使用 ",[140,105243,105244],{},"model.opt.timestep",[63,105246,105247],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[133,105249,105252],{"className":105250,"code":105251,"language":6087,"meta":138},[6085],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[140,105253,105251],{"__ignoreMap":138},[63,105255,105256],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105258,101646],{"id":101645},[63,105260,101649],{},[133,105262,105264],{"className":24720,"code":105263,"language":24722,"meta":138,"style":138},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[140,105265,105266],{"__ignoreMap":138},[143,105267,105268,105270,105272,105274,105276,105279,105281,105283,105285],{"class":145,"line":146},[143,105269,25474],{"class":156},[143,105271,27213],{"class":163},[143,105273,24732],{"class":163},[143,105275,27298],{"class":280},[143,105277,105278],{"class":163}," python3",[143,105280,101674],{"class":163},[143,105282,103377],{"class":163},[143,105284,101690],{"class":163},[143,105286,105287],{"class":163}," glfw\n",[63,105289,103695],{},[133,105291,105292],{"className":24720,"code":101795,"language":24722,"meta":138,"style":138},[140,105293,105294],{"__ignoreMap":138},[143,105295,105296,105298,105300,105302],{"class":145,"line":146},[143,105297,24729],{"class":156},[143,105299,24732],{"class":163},[143,105301,101806],{"class":163},[143,105303,101809],{"class":163},[63,105305,103712],{},[133,105307,105309],{"className":24720,"code":105308,"language":24722,"meta":138,"style":138},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[140,105310,105311,105328,105337],{"__ignoreMap":138},[143,105312,105313,105315,105317,105319,105322,105324,105326],{"class":145,"line":146},[143,105314,31228],{"class":156},[143,105316,30074],{"class":163},[143,105318,26013],{"class":280},[143,105320,105321],{"class":163}," mujoco-python-api",[143,105323,101851],{"class":163},[143,105325,101854],{"class":280},[143,105327,101857],{"class":280},[143,105329,105330,105332,105334],{"class":145,"line":35},[143,105331,31228],{"class":156},[143,105333,101864],{"class":163},[143,105335,105336],{"class":163}," mujoco-python-api\n",[143,105338,105339,105341,105343,105345],{"class":145,"line":46},[143,105340,24729],{"class":156},[143,105342,24732],{"class":163},[143,105344,101806],{"class":163},[143,105346,101809],{"class":163},[63,105348,101880],{},[19,105350,105351,105358,105367],{},[22,105352,105353,101894,105355,105357],{},[140,105354,101551],{},[140,105356,101556],{}," 是官方 Python bindings 的类名。",[22,105359,105360,105361,105364,105365,29283],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[140,105362,105363],{},"mjModel"," 在 Python 中是 ",[140,105366,101585],{},[22,105368,105369,105370,29283],{},"不要使用 ",[140,105371,105372],{},"sim = mujoco_py.MjSim(...)",[14,105374,101921],{"id":101920},[63,105376,105377],{},"仿真推进核心代码:",[133,105379,105381],{"className":31276,"code":105380,"language":31278,"meta":138,"style":138},"mujoco.mj_step(model, data)\n",[140,105382,105383],{"__ignoreMap":138},[143,105384,105385],{"class":145,"line":146},[143,105386,105380],{"class":149},[63,105388,105389,105390,1255,105392,1255,105394,29283],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[140,105391,101946],{},[140,105393,101949],{},[140,105395,101943],{},[63,105397,105398],{},"重置仿真:",[133,105400,105402],{"className":31276,"code":105401,"language":31278,"meta":138,"style":138},"mujoco.mj_resetData(model, data)\n",[140,105403,105404],{"__ignoreMap":138},[143,105405,105406],{"class":145,"line":146},[143,105407,105401],{"class":149},[63,105409,105410,105411,83417,105413,105415],{},"如果手动修改了 ",[140,105412,101946],{},[140,105414,101949],{},"，通常应调用:",[133,105417,105419],{"className":31276,"code":105418,"language":31278,"meta":138,"style":138},"mujoco.mj_forward(model, data)\n",[140,105420,105421],{"__ignoreMap":138},[143,105422,105423],{"class":145,"line":146},[143,105424,105418],{"class":149},[63,105426,105427],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[58,105429,105431,1255,105433,1255,105435,105437],{"id":105430},"qposqvelctrl-是什么",[140,105432,104905],{},[140,105434,105235],{},[140,105436,105238],{}," 是什么",[63,105439,105440],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[1181,105442,105443,105455],{},[1184,105444,105445],{},[1187,105446,105447,105450,105452],{},[1190,105448,105449],{"align":24634},"字段",[1190,105451,101576],{"align":24634},[1190,105453,105454],{"align":24634},"谁来修改",[1227,105456,105457,105469,105481],{},[1187,105458,105459,105463,105466],{},[1232,105460,105461],{"align":24634},[140,105462,101946],{},[1232,105464,105465],{"align":24634},"广义位置，例如小车位置、关节角、自由物体位置姿态",[1232,105467,105468],{"align":24634},"MuJoCo 更新，也可以手动设置初始状态",[1187,105470,105471,105475,105478],{},[1232,105472,105473],{"align":24634},[140,105474,101949],{},[1232,105476,105477],{"align":24634},"广义速度，例如小车速度、关节角速度",[1232,105479,105480],{"align":24634},"MuJoCo 更新，也可以手动清零",[1187,105482,105483,105487,105490],{},[1232,105484,105485],{"align":24634},[140,105486,101952],{},[1232,105488,105489],{"align":24634},"actuator 的控制输入",[1232,105491,105492],{"align":24634},"主要由你的控制代码写入",[63,105494,9925,105495,101894,105497,105499],{},[140,105496,104905],{},[140,105498,105235],{}," 不一定同维。自由刚体就是典型例子：",[133,105501,105504],{"className":105502,"code":105503,"language":6087,"meta":138},[6085],"freejoint: qpos 7 维，qvel 6 维\n",[140,105505,105503],{"__ignoreMap":138},[58,105507,105509,101894,105511,105513],{"id":105508},"mj_step-和-mj_forward-的区别",[140,105510,102091],{},[140,105512,105125],{}," 的区别",[1181,105515,105516,105529],{},[1184,105517,105518],{},[1187,105519,105520,105523,105526],{},[1190,105521,105522],{"align":24634},"函数",[1190,105524,105525],{"align":24634},"是否推进时间",[1190,105527,105528],{"align":24634},"什么时候用",[1227,105530,105531,105544],{},[1187,105532,105533,105538,105541],{},[1232,105534,105535],{"align":24634},[140,105536,105537],{},"mj_step(model, data)",[1232,105539,105540],{"align":24634},"是",[1232,105542,105543],{"align":24634},"正常仿真循环，每调用一次前进一步",[1187,105545,105546,105551,105554],{},[1232,105547,105548],{"align":24634},[140,105549,105550],{},"mj_forward(model, data)",[1232,105552,105553],{"align":24634},"否",[1232,105555,105556,105557,1255,105559,105561],{"align":24634},"手动改了 ",[140,105558,104905],{},[140,105560,105235],{}," 后，刷新派生量",[63,105563,105564],{},"例如你写：",[133,105566,105568],{"className":31276,"code":105567,"language":31278,"meta":138,"style":138},"data.qpos[2] = 2.0\n",[140,105569,105570],{"__ignoreMap":138},[143,105571,105572,105575,105577,105579,105581],{"class":145,"line":146},[143,105573,105574],{"class":149},"data.qpos[",[143,105576,1122],{"class":280},[143,105578,5343],{"class":149},[143,105580,160],{"class":755},[143,105582,105583],{"class":280}," 2.0\n",[63,105585,105586],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[133,105588,105589],{"className":31276,"code":105418,"language":31278,"meta":138,"style":138},[140,105590,105591],{"__ignoreMap":138},[143,105592,105593],{"class":145,"line":146},[143,105594,105418],{"class":149},[58,105596,105598],{"id":105597},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[63,105600,105601,105604,105605,105607],{},[140,105602,105603],{},"mujoco.mj_resetData(model, data)"," 会把 ",[140,105606,34299],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[133,105609,105611],{"className":31276,"code":105610,"language":31278,"meta":138,"style":138},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[140,105612,105613,105617,105627,105637],{"__ignoreMap":138},[143,105614,105615],{"class":145,"line":146},[143,105616,105401],{"class":149},[143,105618,105619,105622,105624],{"class":145,"line":35},[143,105620,105621],{"class":149},"data.qpos[:] ",[143,105623,160],{"class":755},[143,105625,105626],{"class":149}," random_qpos\n",[143,105628,105629,105632,105634],{"class":145,"line":46},[143,105630,105631],{"class":149},"data.qvel[:] ",[143,105633,160],{"class":755},[143,105635,105636],{"class":280}," 0.0\n",[143,105638,105639],{"class":145,"line":293},[143,105640,105418],{"class":149},[14,105642,102129],{"id":102128},[133,105644,105646],{"className":31276,"code":105645,"language":31278,"meta":138,"style":138},"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",[140,105647,105648,105654,105664,105668,105672,105680,105685,105689,105693,105697,105702,105706,105711,105716,105721,105725,105729,105733,105737,105741,105745,105764,105771,105783,105794,105810,105826,105830,105834,105846,105858,105866,105870,105881,105885,105901,105905,105909,105918,105922,105927,105936,105940,105953,105958,105967,105971,105975,105987],{"__ignoreMap":138},[143,105649,105650,105652],{"class":145,"line":146},[143,105651,31290],{"class":755},[143,105653,102177],{"class":149},[143,105655,105656,105658,105660,105662],{"class":145,"line":35},[143,105657,31290],{"class":755},[143,105659,32278],{"class":149},[143,105661,32281],{"class":755},[143,105663,32284],{"class":149},[143,105665,105666],{"class":145,"line":46},[143,105667,3300],{"emptyLinePlaceholder":976},[143,105669,105670],{"class":145,"line":293},[143,105671,3300],{"emptyLinePlaceholder":976},[143,105673,105674,105676,105678],{"class":145,"line":306},[143,105675,102190],{"class":280},[143,105677,14464],{"class":755},[143,105679,102195],{"class":163},[143,105681,105682],{"class":145,"line":319},[143,105683,105684],{"class":163},"\u003Cmujoco model=\"state_api\">\n",[143,105686,105687],{"class":145,"line":332},[143,105688,102205],{"class":163},[143,105690,105691],{"class":145,"line":345},[143,105692,3300],{"emptyLinePlaceholder":976},[143,105694,105695],{"class":145,"line":701},[143,105696,102214],{"class":163},[143,105698,105699],{"class":145,"line":707},[143,105700,105701],{"class":163},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[143,105703,105704],{"class":145,"line":727},[143,105705,3300],{"emptyLinePlaceholder":976},[143,105707,105708],{"class":145,"line":2518},[143,105709,105710],{"class":163},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[143,105712,105713],{"class":145,"line":2524},[143,105714,105715],{"class":163},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[143,105717,105718],{"class":145,"line":2529},[143,105719,105720],{"class":163},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[143,105722,105723],{"class":145,"line":2543},[143,105724,102243],{"class":163},[143,105726,105727],{"class":145,"line":2548},[143,105728,102248],{"class":163},[143,105730,105731],{"class":145,"line":2554},[143,105732,102253],{"class":163},[143,105734,105735],{"class":145,"line":2575},[143,105736,96574],{"class":163},[143,105738,105739],{"class":145,"line":2580},[143,105740,3300],{"emptyLinePlaceholder":976},[143,105742,105743],{"class":145,"line":2594},[143,105744,3300],{"emptyLinePlaceholder":976},[143,105746,105747,105749,105752,105755,105757,105760,105762],{"class":145,"line":2599},[143,105748,32845],{"class":755},[143,105750,105751],{"class":156}," print_state",[143,105753,105754],{"class":149},"(prefix: ",[143,105756,2206],{"class":280},[143,105758,105759],{"class":149},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[143,105761,96562],{"class":280},[143,105763,4639],{"class":149},[143,105765,105766,105768],{"class":145,"line":2628},[143,105767,32197],{"class":280},[143,105769,105770],{"class":149},"(prefix)\n",[143,105772,105773,105775,105777,105780],{"class":145,"line":2633},[143,105774,32197],{"class":280},[143,105776,1049],{"class":149},[143,105778,105779],{"class":163},"\"  timestep:\"",[143,105781,105782],{"class":149},", model.opt.timestep)\n",[143,105784,105785,105787,105789,105792],{"class":145,"line":2650},[143,105786,32197],{"class":280},[143,105788,1049],{"class":149},[143,105790,105791],{"class":163},"\"  time:\"",[143,105793,102354],{"class":149},[143,105795,105796,105798,105800,105803,105806,105808],{"class":145,"line":2655},[143,105797,32197],{"class":280},[143,105799,1049],{"class":149},[143,105801,105802],{"class":163},"\"  qpos:\"",[143,105804,105805],{"class":149},", np.round(data.qpos.copy(), ",[143,105807,1334],{"class":280},[143,105809,31395],{"class":149},[143,105811,105812,105814,105816,105819,105822,105824],{"class":145,"line":2660},[143,105813,32197],{"class":280},[143,105815,1049],{"class":149},[143,105817,105818],{"class":163},"\"  qvel:\"",[143,105820,105821],{"class":149},", np.round(data.qvel.copy(), ",[143,105823,1334],{"class":280},[143,105825,31395],{"class":149},[143,105827,105828],{"class":145,"line":2665},[143,105829,3300],{"emptyLinePlaceholder":976},[143,105831,105832],{"class":145,"line":2679},[143,105833,3300],{"emptyLinePlaceholder":976},[143,105835,105836,105838,105840,105842,105844],{"class":145,"line":2684},[143,105837,32845],{"class":755},[143,105839,2873],{"class":156},[143,105841,102274],{"class":149},[143,105843,96562],{"class":280},[143,105845,4639],{"class":149},[143,105847,105848,105850,105852,105854,105856],{"class":145,"line":3477},[143,105849,102283],{"class":149},[143,105851,160],{"class":755},[143,105853,102288],{"class":149},[143,105855,102190],{"class":280},[143,105857,1055],{"class":149},[143,105859,105860,105862,105864],{"class":145,"line":3491},[143,105861,102297],{"class":149},[143,105863,160],{"class":755},[143,105865,102302],{"class":149},[143,105867,105868],{"class":145,"line":3499},[143,105869,3300],{"emptyLinePlaceholder":976},[143,105871,105872,105875,105878],{"class":145,"line":3504},[143,105873,105874],{"class":149},"    print_state(",[143,105876,105877],{"class":163},"\"initial\"",[143,105879,105880],{"class":149},", model, data)\n",[143,105882,105883],{"class":145,"line":3510},[143,105884,3300],{"emptyLinePlaceholder":976},[143,105886,105887,105889,105891,105893,105895,105897,105899],{"class":145,"line":3516},[143,105888,4101],{"class":755},[143,105890,102377],{"class":149},[143,105892,26941],{"class":755},[143,105894,33341],{"class":280},[143,105896,1049],{"class":149},[143,105898,1697],{"class":280},[143,105900,31684],{"class":149},[143,105902,105903],{"class":145,"line":3521},[143,105904,102392],{"class":149},[143,105906,105907],{"class":145,"line":8848},[143,105908,3300],{"emptyLinePlaceholder":976},[143,105910,105911,105913,105916],{"class":145,"line":8872},[143,105912,105874],{"class":149},[143,105914,105915],{"class":163},"\"after 50 steps\"",[143,105917,105880],{"class":149},[143,105919,105920],{"class":145,"line":8877},[143,105921,3300],{"emptyLinePlaceholder":976},[143,105923,105924],{"class":145,"line":8883},[143,105925,105926],{"class":149},"    mujoco.mj_resetData(model, data)\n",[143,105928,105929,105931,105934],{"class":145,"line":8910},[143,105930,105874],{"class":149},[143,105932,105933],{"class":163},"\"after reset\"",[143,105935,105880],{"class":149},[143,105937,105938],{"class":145,"line":8915},[143,105939,3300],{"emptyLinePlaceholder":976},[143,105941,105942,105945,105947,105949,105951],{"class":145,"line":8921},[143,105943,105944],{"class":149},"    data.qpos[",[143,105946,1122],{"class":280},[143,105948,5343],{"class":149},[143,105950,160],{"class":755},[143,105952,105583],{"class":280},[143,105954,105955],{"class":145,"line":8933},[143,105956,105957],{"class":149},"    mujoco.mj_forward(model, data)\n",[143,105959,105960,105962,105965],{"class":145,"line":8945},[143,105961,105874],{"class":149},[143,105963,105964],{"class":163},"\"after manual qpos edit\"",[143,105966,105880],{"class":149},[143,105968,105969],{"class":145,"line":8957},[143,105970,3300],{"emptyLinePlaceholder":976},[143,105972,105973],{"class":145,"line":10616},[143,105974,3300],{"emptyLinePlaceholder":976},[143,105976,105977,105979,105981,105983,105985],{"class":145,"line":10641},[143,105978,2434],{"class":755},[143,105980,32118],{"class":280},[143,105982,102435],{"class":755},[143,105984,102438],{"class":163},[143,105986,4639],{"class":149},[143,105988,105989],{"class":145,"line":10664},[143,105990,102445],{"class":149},[63,105992,104445],{},[133,105994,105996],{"className":24720,"code":105995,"language":24722,"meta":138,"style":138},"touch ch3_python_state.py\n",[140,105997,105998],{"__ignoreMap":138},[143,105999,106000,106002],{"class":145,"line":146},[143,106001,102159],{"class":156},[143,106003,106004],{"class":163}," ch3_python_state.py\n",[63,106006,103177],{},[133,106008,106010],{"className":24720,"code":106009,"language":24722,"meta":138,"style":138},"python ch3_python_state.py\n",[140,106011,106012],{"__ignoreMap":138},[143,106013,106014,106016],{"class":145,"line":146},[143,106015,31278],{"class":156},[143,106017,106004],{"class":163},[58,106019,102448],{"id":102448},[63,106021,106022],{},"打印状态的函数：",[133,106024,106026],{"className":31276,"code":106025,"language":31278,"meta":138,"style":138},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[140,106027,106028],{"__ignoreMap":138},[143,106029,106030,106032,106034,106036,106038,106040,106042],{"class":145,"line":146},[143,106031,32845],{"class":755},[143,106033,105751],{"class":156},[143,106035,105754],{"class":149},[143,106037,2206],{"class":280},[143,106039,105759],{"class":149},[143,106041,96562],{"class":280},[143,106043,4639],{"class":149},[63,106045,106046,106047,106049],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[140,106048,34299],{}," 里发生了什么。",[63,106051,106052],{},"推进 50 步：",[133,106054,106056],{"className":31276,"code":106055,"language":31278,"meta":138,"style":138},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[140,106057,106058,106074],{"__ignoreMap":138},[143,106059,106060,106062,106064,106066,106068,106070,106072],{"class":145,"line":146},[143,106061,3925],{"class":755},[143,106063,102377],{"class":149},[143,106065,26941],{"class":755},[143,106067,33341],{"class":280},[143,106069,1049],{"class":149},[143,106071,1697],{"class":280},[143,106073,31684],{"class":149},[143,106075,106076],{"class":145,"line":35},[143,106077,102575],{"class":149},[63,106079,106080,106081,106084,106085,106087],{},"由于 ",[140,106082,106083],{},"timestep=0.01","，所以 50 步后时间约为 ",[140,106086,36227],{}," 秒。",[63,106089,106090],{},"重置：",[133,106092,106093],{"className":31276,"code":105401,"language":31278,"meta":138,"style":138},[140,106094,106095],{"__ignoreMap":138},[143,106096,106097],{"class":145,"line":146},[143,106098,105401],{"class":149},[63,106100,106101],{},"这会把时间、位置、速度恢复到初始状态。",[63,106103,106104],{},"手动改高度：",[133,106106,106108],{"className":31276,"code":106107,"language":31278,"meta":138,"style":138},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[140,106109,106110,106122],{"__ignoreMap":138},[143,106111,106112,106114,106116,106118,106120],{"class":145,"line":146},[143,106113,105574],{"class":149},[143,106115,1122],{"class":280},[143,106117,5343],{"class":149},[143,106119,160],{"class":755},[143,106121,105583],{"class":280},[143,106123,106124],{"class":145,"line":35},[143,106125,105418],{"class":149},[63,106127,106128,106129,106132,106133,106136],{},"这个例子里 ",[140,106130,106131],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[140,106134,106135],{},"2.0"," 表示把小球放到更高的位置。",[58,106138,102584],{"id":102584},[133,106140,106141],{"className":31276,"code":106025,"language":31278,"meta":138,"style":138},[140,106142,106143],{"__ignoreMap":138},[143,106144,106145,106147,106149,106151,106153,106155,106157],{"class":145,"line":146},[143,106146,32845],{"class":755},[143,106148,105751],{"class":156},[143,106150,105754],{"class":149},[143,106152,2206],{"class":280},[143,106154,105759],{"class":149},[143,106156,96562],{"class":280},[143,106158,4639],{"class":149},[63,106160,106161],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[19,106163,106164,106173,106178],{},[22,106165,106166,106169,106170,106172],{},[140,106167,106168],{},"prefix","：一段文字，比如 ",[140,106171,105877],{},"，用来说明现在打印的是哪个阶段。",[22,106174,106175,106177],{},[140,106176,102961],{},"：MuJoCo 模型。",[22,106179,106180,106182],{},[140,106181,34299],{},"：MuJoCo 当前状态。",[63,106184,106185,1255,106188,106191],{},[140,106186,106187],{},"prefix: str",[140,106189,106190],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[133,106193,106195],{"className":31276,"code":106194,"language":31278,"meta":138,"style":138},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[140,106196,106197],{"__ignoreMap":138},[143,106198,106199,106201,106203,106205,106207,106209],{"class":145,"line":146},[143,106200,31313],{"class":280},[143,106202,1049],{"class":149},[143,106204,105802],{"class":163},[143,106206,105805],{"class":149},[143,106208,1334],{"class":280},[143,106210,31395],{"class":149},[63,106212,106213,106216],{},[140,106214,106215],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[133,106218,106220],{"className":31276,"code":106219,"language":31278,"meta":138,"style":138},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[140,106221,106222,106234],{"__ignoreMap":138},[143,106223,106224,106226,106228,106230,106232],{"class":145,"line":146},[143,106225,102510],{"class":149},[143,106227,160],{"class":755},[143,106229,102288],{"class":149},[143,106231,102190],{"class":280},[143,106233,1055],{"class":149},[143,106235,106236,106238,106240],{"class":145,"line":35},[143,106237,102534],{"class":149},[143,106239,160],{"class":755},[143,106241,102302],{"class":149},[63,106243,106244],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[133,106246,106248],{"className":31276,"code":106247,"language":31278,"meta":138,"style":138},"print_state(\"initial\", model, data)\n",[140,106249,106250],{"__ignoreMap":138},[143,106251,106252,106255,106257],{"class":145,"line":146},[143,106253,106254],{"class":149},"print_state(",[143,106256,105877],{"class":163},[143,106258,105880],{"class":149},[63,106260,106261,106262,106265],{},"调用刚才定义的 ",[140,106263,106264],{},"print_state"," 函数，打印初始状态。",[133,106267,106268],{"className":31276,"code":106055,"language":31278,"meta":138,"style":138},[140,106269,106270,106286],{"__ignoreMap":138},[143,106271,106272,106274,106276,106278,106280,106282,106284],{"class":145,"line":146},[143,106273,3925],{"class":755},[143,106275,102377],{"class":149},[143,106277,26941],{"class":755},[143,106279,33341],{"class":280},[143,106281,1049],{"class":149},[143,106283,1697],{"class":280},[143,106285,31684],{"class":149},[143,106287,106288],{"class":145,"line":35},[143,106289,102575],{"class":149},[63,106291,106292],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[133,106294,106295],{"className":31276,"code":105401,"language":31278,"meta":138,"style":138},[140,106296,106297],{"__ignoreMap":138},[143,106298,106299],{"class":145,"line":146},[143,106300,105401],{"class":149},[63,106302,106303,106304,106306,106307,106309],{},"重置 ",[140,106305,34299],{},"。注意它不会重新创建 ",[140,106308,102961],{},"，因为模型结构没有变，只是状态回到初始值。",[133,106311,106312],{"className":31276,"code":105567,"language":31278,"meta":138,"style":138},[140,106313,106314],{"__ignoreMap":138},[143,106315,106316,106318,106320,106322,106324],{"class":145,"line":146},[143,106317,105574],{"class":149},[143,106319,1122],{"class":280},[143,106321,5343],{"class":149},[143,106323,160],{"class":755},[143,106325,105583],{"class":280},[63,106327,106328,106329,1255,106332,1255,106335,106337],{},"这行是“手动改状态”。在 freejoint 中，",[140,106330,106331],{},"qpos[0]",[140,106333,106334],{},"qpos[1]",[140,106336,106131],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[133,106339,106340],{"className":31276,"code":105418,"language":31278,"meta":138,"style":138},[140,106341,106342],{"__ignoreMap":138},[143,106343,106344],{"class":145,"line":146},[143,106345,105418],{"class":149},[63,106347,106348,106349,106351,106352,106354],{},"手动改完 ",[140,106350,104905],{}," 后，调用 ",[140,106353,105125],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106356,103192],{"id":103191},[63,106358,106359],{},"你会看到:",[19,106361,106362,106367,106372,106375],{},[22,106363,106364,106365],{},"初始时间为 ",[140,106366,1234],{},[22,106368,106369,106370],{},"50 步后时间约为 ",[140,106371,36227],{},[22,106373,106374],{},"reset 后状态恢复",[22,106376,106377,106378,106381,106382],{},"手动修改 ",[140,106379,106380],{},"data.qpos[2]"," 后，小球高度变为 ",[140,106383,106135],{},[63,106385,106386,106388],{},[140,106387,106131],{}," 在这个例子中表示自由刚体的 z 坐标。",[63,106390,106391],{},"输出里可以重点看三件事：",[19,106393,106394,106402,106407],{},[22,106395,106396,106398,106399,106401],{},[140,106397,3287],{}," 是否随着 ",[140,106400,102091],{}," 增加。",[22,106403,106404,106406],{},[140,106405,104905],{}," 的 z 坐标是否因为下落而变化。",[22,106408,106409,106411,106412,29283],{},[140,106410,105227],{}," 后时间是否回到 ",[140,106413,1234],{},[14,106415,103224],{"id":103223},[19,106417,106418,106424,106430,106436,106439,106448],{},[22,106419,106420,106421,29283],{},"修改 timestep 为 ",[140,106422,106423],{},"0.005",[22,106425,106426,106427,29283],{},"重新运行，检查 50 步后时间是否约为 ",[140,106428,106429],{},"0.25",[22,106431,106432,106433,29283],{},"修改重力为 ",[140,106434,106435],{},"0 0 -1.0",[22,106437,106438],{},"观察小球下降速度是否变慢。",[22,106440,103287,106441,103290,106444,106447],{},[140,106442,106443],{},"data.qpos[2] = 2.0",[140,106445,106446],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[22,106449,106450,106451,106454],{},"注释掉 ",[140,106452,106453],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,106456,103329],{"id":103328},[58,106458,106460,106461,106463],{"id":106459},"修改-dataqpos-后位置没有更新","修改 ",[140,106462,101946],{}," 后位置没有更新",[63,106465,103338],{},[133,106467,106468],{"className":31276,"code":105418,"language":31278,"meta":138,"style":138},[140,106469,106470],{"__ignoreMap":138},[143,106471,106472],{"class":145,"line":146},[143,106473,105418],{"class":149},[58,106475,106476],{"id":106476},"数组维度看不懂",[63,106478,106479],{},"打印模型维度:",[133,106481,106483],{"className":31276,"code":106482,"language":31278,"meta":138,"style":138},"print(model.nq, model.nv, model.nu)\n",[140,106484,106485],{"__ignoreMap":138},[143,106486,106487,106489],{"class":145,"line":146},[143,106488,31313],{"class":280},[143,106490,106491],{"class":149},"(model.nq, model.nv, model.nu)\n",[1181,106493,106494,106502],{},[1184,106495,106496],{},[1187,106497,106498,106500],{},[1190,106499,105449],{"align":24634},[1190,106501,101576],{"align":24634},[1227,106503,106504,106514,106524],{},[1187,106505,106506,106511],{},[1232,106507,106508],{"align":24634},[140,106509,106510],{},"nq",[1232,106512,106513],{"align":24634},"位置变量数量",[1187,106515,106516,106521],{},[1232,106517,106518],{"align":24634},[140,106519,106520],{},"nv",[1232,106522,106523],{"align":24634},"速度变量数量",[1187,106525,106526,106530],{},[1232,106527,106528],{"align":24634},[140,106529,103038],{},[1232,106531,106532],{"align":24634},"控制输入数量",[58,106534,106536,106537,106539],{"id":106535},"误以为-qpos-一定等于关节数","误以为 ",[140,106538,104905],{}," 一定等于关节数",[63,106541,106542,106543,83408,106545,106547,106548,106550],{},"不是。例如 ",[140,106544,102496],{},[140,106546,104905],{}," 是 7 维，但 ",[140,106549,105235],{}," 是 6 维。",[58,106552,106554,106555,106557],{"id":106553},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[140,106556,104905],{}," 的第几位",[63,106559,106560],{},"初学时可以先打印：",[133,106562,106564],{"className":31276,"code":106563,"language":31278,"meta":138,"style":138},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[140,106565,106566,106576,106586,106598],{"__ignoreMap":138},[143,106567,106568,106570,106572,106574],{"class":145,"line":146},[143,106569,31313],{"class":280},[143,106571,1049],{"class":149},[143,106573,102315],{"class":163},[143,106575,102318],{"class":149},[143,106577,106578,106580,106582,106584],{"class":145,"line":35},[143,106579,31313],{"class":280},[143,106581,1049],{"class":149},[143,106583,102327],{"class":163},[143,106585,102330],{"class":149},[143,106587,106588,106590,106592,106595],{"class":145,"line":46},[143,106589,31313],{"class":280},[143,106591,1049],{"class":149},[143,106593,106594],{"class":163},"\"qpos:\"",[143,106596,106597],{"class":149},", data.qpos)\n",[143,106599,106600,106602,106604,106607],{"class":145,"line":293},[143,106601,31313],{"class":280},[143,106603,1049],{"class":149},[143,106605,106606],{"class":163},"\"qvel:\"",[143,106608,106609],{"class":149},", data.qvel)\n",[63,106611,106612],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[58,106614,106615],{"id":106615},"仿真结果每次都一样",[63,106617,106618,106619,106621],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[140,106620,104905],{},"、目标点或控制输入。",[14,106623,103483],{"id":103482},[63,106625,106626,106627,25516],{},"Python 控制 MuJoCo 的核心就是读写 ",[140,106628,34299],{},[19,106630,106631,106639,106644,106649],{},[22,106632,106633,106634,101894,106636,106638],{},"用 ",[140,106635,101946],{},[140,106637,101949],{}," 读取状态。",[22,106640,106633,106641,106643],{},[140,106642,101952],{}," 写入控制。",[22,106645,106633,106646,106648],{},[140,106647,102091],{}," 推进时间。",[22,106650,106651,106652,106654],{},"手动改状态后用 ",[140,106653,105125],{}," 刷新派生量。",[63,106656,106657],{},"理解这一章后，就可以进入关节和 actuator 控制。",[954,106659,106660],{},"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":138,"searchDepth":35,"depth":35,"links":106662},[106663,106664,106665,106672,106676,106677,106678,106688],{"id":101522,"depth":35,"text":101523},{"id":101645,"depth":35,"text":101646},{"id":101920,"depth":35,"text":101921,"children":106666},[106667,106669,106671],{"id":105430,"depth":46,"text":106668},"qpos、qvel、ctrl 是什么",{"id":105508,"depth":46,"text":106670},"mj_step 和 mj_forward 的区别",{"id":105597,"depth":46,"text":105598},{"id":102128,"depth":35,"text":102129,"children":106673},[106674,106675],{"id":102448,"depth":46,"text":102448},{"id":102584,"depth":46,"text":102584},{"id":103191,"depth":35,"text":103192},{"id":103223,"depth":35,"text":103224},{"id":103328,"depth":35,"text":103329,"children":106679},[106680,106682,106683,106685,106687],{"id":106459,"depth":46,"text":106681},"修改 data.qpos 后位置没有更新",{"id":106476,"depth":46,"text":106476},{"id":106535,"depth":46,"text":106684},"误以为 qpos 一定等于关节数",{"id":106553,"depth":46,"text":106686},"不知道某个元素在 qpos 的第几位",{"id":106615,"depth":46,"text":106615},{"id":103482,"depth":35,"text":103483},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105193,"description":138},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106695,"title":106696,"body":106697,"description":138,"extension":974,"meta":108387,"navigation":976,"path":108388,"seo":108389,"stem":108390,"__hash__":108391},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106698,"toc":108363},[106699,106702,106704,106707,106709,106734,106737,106756,106759,106761,106763,106787,106789,106803,106805,106846,106848,106872,106874,106877,106911,106913,106926,106929,106997,107006,107010,107013,107047,107053,107056,107060,107099,107102,107122,107126,107169,107171,107200,107203,107209,107212,107214,107608,107610,107622,107624,107635,107637,107640,107669,107677,107680,107715,107718,107720,107728,107731,107733,107744,107754,107774,107777,107813,107825,107873,107892,107934,107947,107975,107980,108001,108011,108029,108032,108066,108069,108089,108092,108111,108117,108119,108122,108128,108134,108144,108147,108153,108162,108164,108210,108212,108218,108224,108227,108230,108250,108253,108259,108265,108267,108290,108293,108296,108305,108308,108346,108348,108351,108357,108360],[10,106700,106696],{"id":106701},"_4关节actuator-与力控制",[14,106703,101523],{"id":101522},[63,106705,106706],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[63,106708,105206],{},[19,106710,106711,106717,106722,106726,106731],{},[22,106712,106713,106716],{},[140,106714,106715],{},"hinge"," 关节",[22,106718,106719],{},[140,106720,106721],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[22,106723,106724],{},[140,106725,101952],{},[22,106727,106728],{},[140,106729,106730],{},"ctrlrange",[22,106732,106733],{},"读取关节角和角速度",[63,106735,106736],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[133,106738,106740],{"className":31276,"code":106739,"language":31278,"meta":138,"style":138},"data.ctrl[0] = ...\n",[140,106741,106742],{"__ignoreMap":138},[143,106743,106744,106747,106749,106751,106753],{"class":145,"line":146},[143,106745,106746],{"class":149},"data.ctrl[",[143,106748,1234],{"class":280},[143,106750,5343],{"class":149},[143,106752,160],{"class":755},[143,106754,106755],{"class":280}," ...\n",[63,106757,106758],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106760,101646],{"id":101645},[63,106762,101649],{},[133,106764,106765],{"className":24720,"code":105263,"language":24722,"meta":138,"style":138},[140,106766,106767],{"__ignoreMap":138},[143,106768,106769,106771,106773,106775,106777,106779,106781,106783,106785],{"class":145,"line":146},[143,106770,25474],{"class":156},[143,106772,27213],{"class":163},[143,106774,24732],{"class":163},[143,106776,27298],{"class":280},[143,106778,105278],{"class":163},[143,106780,101674],{"class":163},[143,106782,103377],{"class":163},[143,106784,101690],{"class":163},[143,106786,105287],{"class":163},[63,106788,103695],{},[133,106790,106791],{"className":24720,"code":101795,"language":24722,"meta":138,"style":138},[140,106792,106793],{"__ignoreMap":138},[143,106794,106795,106797,106799,106801],{"class":145,"line":146},[143,106796,24729],{"class":156},[143,106798,24732],{"class":163},[143,106800,101806],{"class":163},[143,106802,101809],{"class":163},[63,106804,103712],{},[133,106806,106808],{"className":24720,"code":106807,"language":24722,"meta":138,"style":138},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[140,106809,106810,106827,106836],{"__ignoreMap":138},[143,106811,106812,106814,106816,106818,106821,106823,106825],{"class":145,"line":146},[143,106813,31228],{"class":156},[143,106815,30074],{"class":163},[143,106817,26013],{"class":280},[143,106819,106820],{"class":163}," mujoco-control",[143,106822,101851],{"class":163},[143,106824,101854],{"class":280},[143,106826,101857],{"class":280},[143,106828,106829,106831,106833],{"class":145,"line":35},[143,106830,31228],{"class":156},[143,106832,101864],{"class":163},[143,106834,106835],{"class":163}," mujoco-control\n",[143,106837,106838,106840,106842,106844],{"class":145,"line":46},[143,106839,24729],{"class":156},[143,106841,24732],{"class":163},[143,106843,101806],{"class":163},[143,106845,101809],{"class":163},[63,106847,101880],{},[19,106849,106850,106856,106863,106869],{},[22,106851,106852,106855],{},[140,106853,106854],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[22,106857,106858,106860,106861,29283],{},[140,106859,101952],{}," 长度等于 ",[140,106862,103034],{},[22,106864,83100,106865,106868],{},[140,106866,106867],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[22,106870,106871],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106873,101921],{"id":101920},[63,106875,106876],{},"关节决定 body 如何运动:",[133,106878,106880],{"className":53954,"code":106879,"language":53956,"meta":138,"style":138},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[140,106881,106882],{"__ignoreMap":138},[143,106883,106884,106886,106888,106890,106892,106895,106897,106899,106901,106904,106906,106909],{"class":145,"line":146},[143,106885,150],{"class":149},[143,106887,103832],{"class":153},[143,106889,15819],{"class":156},[143,106891,160],{"class":149},[143,106893,106894],{"class":163},"\"hinge\"",[143,106896,54709],{"class":156},[143,106898,160],{"class":149},[143,106900,106894],{"class":163},[143,106902,106903],{"class":156}," axis",[143,106905,160],{"class":149},[143,106907,106908],{"class":163},"\"0 1 0\"",[143,106910,102020],{"class":149},[63,106912,103928],{},[19,106914,106915,106920,106923],{},[22,106916,106917,106918],{},"名字是 ",[140,106919,106715],{},[22,106921,106922],{},"类型是旋转关节",[22,106924,106925],{},"绕 y 轴旋转",[63,106927,106928],{},"actuator 决定如何施加控制:",[133,106930,106932],{"className":53954,"code":106931,"language":53956,"meta":138,"style":138},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[140,106933,106934,106943,106989],{"__ignoreMap":138},[143,106935,106936,106938,106941],{"class":145,"line":146},[143,106937,150],{"class":149},[143,106939,106940],{"class":153},"actuator",[143,106942,183],{"class":149},[143,106944,106945,106947,106950,106952,106954,106957,106960,106962,106964,106967,106969,106971,106974,106976,106979,106982,106984,106987],{"class":145,"line":35},[143,106946,634],{"class":149},[143,106948,106949],{"class":153},"motor",[143,106951,15819],{"class":156},[143,106953,160],{"class":149},[143,106955,106956],{"class":163},"\"hinge_motor\"",[143,106958,106959],{"class":156}," joint",[143,106961,160],{"class":149},[143,106963,106894],{"class":163},[143,106965,106966],{"class":156}," gear",[143,106968,160],{"class":149},[143,106970,4578],{"class":163},[143,106972,106973],{"class":156}," ctrlrange",[143,106975,160],{"class":149},[143,106977,106978],{"class":163},"\"-2 2\"",[143,106980,106981],{"class":156}," ctrllimited",[143,106983,160],{"class":149},[143,106985,106986],{"class":163},"\"true\"",[143,106988,102020],{"class":149},[143,106990,106991,106993,106995],{"class":145,"line":46},[143,106992,730],{"class":149},[143,106994,106940],{"class":153},[143,106996,183],{"class":149},[63,106998,106999,107002,107003,29283],{},[140,107000,107001],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[140,107004,107005],{},"[-2, 2]",[58,107007,107009],{"id":107008},"joint-和-actuator-的关系","joint 和 actuator 的关系",[63,107011,107012],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[1181,107014,107015,107025],{},[1184,107016,107017],{},[1187,107018,107019,107021,107023],{},[1190,107020,26651],{"align":24634},[1190,107022,103572],{"align":24634},[1190,107024,101610],{"align":24634},[1227,107026,107027,107037],{},[1187,107028,107029,107031,107034],{},[1232,107030,103832],{"align":24634},[1232,107032,107033],{"align":24634},"定义能怎么动",[1232,107035,107036],{"align":24634},"门轴允许门旋转",[1187,107038,107039,107041,107044],{},[1232,107040,106940],{"align":24634},[1232,107042,107043],{"align":24634},"定义怎么施力或控制",[1232,107045,107046],{"align":24634},"人推门、马达带动门",[63,107048,107049,107050,107052],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[140,107051,101952],{}," 主动控制它。",[63,107054,107055],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[58,107057,107059],{"id":107058},"hinge-joint","hinge joint",[133,107061,107063],{"className":53954,"code":107062,"language":53956,"meta":138,"style":138},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[140,107064,107065],{"__ignoreMap":138},[143,107066,107067,107069,107071,107073,107075,107077,107079,107081,107083,107085,107087,107089,107092,107094,107097],{"class":145,"line":146},[143,107068,150],{"class":149},[143,107070,103832],{"class":153},[143,107072,15819],{"class":156},[143,107074,160],{"class":149},[143,107076,106894],{"class":163},[143,107078,54709],{"class":156},[143,107080,160],{"class":149},[143,107082,106894],{"class":163},[143,107084,106903],{"class":156},[143,107086,160],{"class":149},[143,107088,106908],{"class":163},[143,107090,107091],{"class":156}," damping",[143,107093,160],{"class":149},[143,107095,107096],{"class":163},"\"0.1\"",[143,107098,102020],{"class":149},[63,107100,107101],{},"含义：",[19,107103,107104,107110,107116],{},[22,107105,107106,107109],{},[140,107107,107108],{},"type=\"hinge\"","：只能绕一个轴旋转。",[22,107111,107112,107115],{},[140,107113,107114],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[22,107117,107118,107121],{},[140,107119,107120],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[58,107123,107125],{"id":107124},"motor-actuator","motor actuator",[133,107127,107129],{"className":53954,"code":107128,"language":53956,"meta":138,"style":138},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[140,107130,107131],{"__ignoreMap":138},[143,107132,107133,107135,107137,107139,107141,107143,107145,107147,107149,107151,107153,107155,107157,107159,107161,107163,107165,107167],{"class":145,"line":146},[143,107134,150],{"class":149},[143,107136,106949],{"class":153},[143,107138,15819],{"class":156},[143,107140,160],{"class":149},[143,107142,106956],{"class":163},[143,107144,106959],{"class":156},[143,107146,160],{"class":149},[143,107148,106894],{"class":163},[143,107150,106966],{"class":156},[143,107152,160],{"class":149},[143,107154,4578],{"class":163},[143,107156,106973],{"class":156},[143,107158,160],{"class":149},[143,107160,106978],{"class":163},[143,107162,106981],{"class":156},[143,107164,160],{"class":149},[143,107166,106986],{"class":163},[143,107168,102020],{"class":149},[63,107170,107101],{},[19,107172,107173,107182,107188,107194],{},[22,107174,107175,107178,107179,107181],{},[140,107176,107177],{},"joint=\"hinge\"","：这个电机作用在名为 ",[140,107180,106715],{}," 的关节上。",[22,107183,107184,107187],{},[140,107185,107186],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[22,107189,107190,107193],{},[140,107191,107192],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[22,107195,107196,107199],{},[140,107197,107198],{},"ctrllimited=\"true\"","：启用控制范围限制。",[63,107201,107202],{},"简单理解：",[133,107204,107207],{"className":107205,"code":107206,"language":6087,"meta":138},[6085],"实际施加效果 ≈ data.ctrl[0] * gear\n",[140,107208,107206],{"__ignoreMap":138},[63,107210,107211],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107213,102129],{"id":102128},[133,107215,107217],{"className":31276,"code":107216,"language":31278,"meta":138,"style":138},"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",[140,107218,107219,107226,107230,107236,107246,107250,107254,107262,107267,107272,107276,107280,107285,107290,107294,107299,107304,107309,107314,107318,107322,107326,107331,107336,107341,107345,107349,107353,107357,107369,107381,107389,107393,107403,107413,107423,107427,107440,107453,107457,107474,107488,107523,107527,107531,107542,107557,107572,107584,107588,107592,107604],{"__ignoreMap":138},[143,107220,107221,107223],{"class":145,"line":146},[143,107222,31290],{"class":755},[143,107224,107225],{"class":149}," math\n",[143,107227,107228],{"class":145,"line":35},[143,107229,3300],{"emptyLinePlaceholder":976},[143,107231,107232,107234],{"class":145,"line":46},[143,107233,31290],{"class":755},[143,107235,102177],{"class":149},[143,107237,107238,107240,107242,107244],{"class":145,"line":293},[143,107239,31290],{"class":755},[143,107241,32278],{"class":149},[143,107243,32281],{"class":755},[143,107245,32284],{"class":149},[143,107247,107248],{"class":145,"line":306},[143,107249,3300],{"emptyLinePlaceholder":976},[143,107251,107252],{"class":145,"line":319},[143,107253,3300],{"emptyLinePlaceholder":976},[143,107255,107256,107258,107260],{"class":145,"line":332},[143,107257,102190],{"class":280},[143,107259,14464],{"class":755},[143,107261,102195],{"class":163},[143,107263,107264],{"class":145,"line":345},[143,107265,107266],{"class":163},"\u003Cmujoco model=\"one_link_motor\">\n",[143,107268,107269],{"class":145,"line":701},[143,107270,107271],{"class":163},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[143,107273,107274],{"class":145,"line":707},[143,107275,3300],{"emptyLinePlaceholder":976},[143,107277,107278],{"class":145,"line":727},[143,107279,102214],{"class":163},[143,107281,107282],{"class":145,"line":2518},[143,107283,107284],{"class":163},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[143,107286,107287],{"class":145,"line":2524},[143,107288,107289],{"class":163},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[143,107291,107292],{"class":145,"line":2529},[143,107293,3300],{"emptyLinePlaceholder":976},[143,107295,107296],{"class":145,"line":2543},[143,107297,107298],{"class":163},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[143,107300,107301],{"class":145,"line":2548},[143,107302,107303],{"class":163},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[143,107305,107306],{"class":145,"line":2554},[143,107307,107308],{"class":163},"        \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",[143,107310,107311],{"class":145,"line":2575},[143,107312,107313],{"class":163},"      \u003C\u002Fbody>\n",[143,107315,107316],{"class":145,"line":2580},[143,107317,102243],{"class":163},[143,107319,107320],{"class":145,"line":2594},[143,107321,102248],{"class":163},[143,107323,107324],{"class":145,"line":2599},[143,107325,3300],{"emptyLinePlaceholder":976},[143,107327,107328],{"class":145,"line":2628},[143,107329,107330],{"class":163},"  \u003Cactuator>\n",[143,107332,107333],{"class":145,"line":2633},[143,107334,107335],{"class":163},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[143,107337,107338],{"class":145,"line":2650},[143,107339,107340],{"class":163},"  \u003C\u002Factuator>\n",[143,107342,107343],{"class":145,"line":2655},[143,107344,102253],{"class":163},[143,107346,107347],{"class":145,"line":2660},[143,107348,96574],{"class":163},[143,107350,107351],{"class":145,"line":2665},[143,107352,3300],{"emptyLinePlaceholder":976},[143,107354,107355],{"class":145,"line":2679},[143,107356,3300],{"emptyLinePlaceholder":976},[143,107358,107359,107361,107363,107365,107367],{"class":145,"line":2684},[143,107360,32845],{"class":755},[143,107362,2873],{"class":156},[143,107364,102274],{"class":149},[143,107366,96562],{"class":280},[143,107368,4639],{"class":149},[143,107370,107371,107373,107375,107377,107379],{"class":145,"line":3477},[143,107372,102283],{"class":149},[143,107374,160],{"class":755},[143,107376,102288],{"class":149},[143,107378,102190],{"class":280},[143,107380,1055],{"class":149},[143,107382,107383,107385,107387],{"class":145,"line":3491},[143,107384,102297],{"class":149},[143,107386,160],{"class":755},[143,107388,102302],{"class":149},[143,107390,107391],{"class":145,"line":3499},[143,107392,3300],{"emptyLinePlaceholder":976},[143,107394,107395,107397,107399,107401],{"class":145,"line":3504},[143,107396,32197],{"class":280},[143,107398,1049],{"class":149},[143,107400,102315],{"class":163},[143,107402,102318],{"class":149},[143,107404,107405,107407,107409,107411],{"class":145,"line":3510},[143,107406,32197],{"class":280},[143,107408,1049],{"class":149},[143,107410,102327],{"class":163},[143,107412,102330],{"class":149},[143,107414,107415,107417,107419,107421],{"class":145,"line":3516},[143,107416,32197],{"class":280},[143,107418,1049],{"class":149},[143,107420,102339],{"class":163},[143,107422,102342],{"class":149},[143,107424,107425],{"class":145,"line":3521},[143,107426,3300],{"emptyLinePlaceholder":976},[143,107428,107429,107431,107434,107436,107438],{"class":145,"line":8848},[143,107430,4001],{"class":755},[143,107432,107433],{"class":149}," model.nu ",[143,107435,21846],{"class":755},[143,107437,26016],{"class":280},[143,107439,4639],{"class":149},[143,107441,107442,107444,107446,107448,107451],{"class":145,"line":8872},[143,107443,104307],{"class":755},[143,107445,104310],{"class":280},[143,107447,1049],{"class":149},[143,107449,107450],{"class":163},"\"expected exactly one actuator\"",[143,107452,1055],{"class":149},[143,107454,107455],{"class":145,"line":8877},[143,107456,3300],{"emptyLinePlaceholder":976},[143,107458,107459,107461,107463,107465,107467,107469,107472],{"class":145,"line":8883},[143,107460,4101],{"class":755},[143,107462,32514],{"class":149},[143,107464,26941],{"class":755},[143,107466,33341],{"class":280},[143,107468,1049],{"class":149},[143,107470,107471],{"class":280},"2000",[143,107473,31684],{"class":149},[143,107475,107476,107479,107481,107483,107485],{"class":145,"line":8910},[143,107477,107478],{"class":149},"        t ",[143,107480,160],{"class":755},[143,107482,32514],{"class":149},[143,107484,1496],{"class":755},[143,107486,107487],{"class":149}," model.opt.timestep\n",[143,107489,107490,107493,107495,107497,107499,107502,107504,107507,107509,107511,107514,107516,107518,107520],{"class":145,"line":8915},[143,107491,107492],{"class":149},"        data.ctrl[",[143,107494,1234],{"class":280},[143,107496,5343],{"class":149},[143,107498,160],{"class":755},[143,107500,107501],{"class":280}," 1.5",[143,107503,7418],{"class":755},[143,107505,107506],{"class":149}," math.sin(",[143,107508,106135],{"class":280},[143,107510,7418],{"class":755},[143,107512,107513],{"class":149}," math.pi ",[143,107515,1496],{"class":755},[143,107517,62750],{"class":280},[143,107519,7418],{"class":755},[143,107521,107522],{"class":149}," t)\n",[143,107524,107525],{"class":145,"line":8921},[143,107526,102392],{"class":149},[143,107528,107529],{"class":145,"line":8933},[143,107530,3300],{"emptyLinePlaceholder":976},[143,107532,107533,107535,107537,107540],{"class":145,"line":8945},[143,107534,32197],{"class":280},[143,107536,1049],{"class":149},[143,107538,107539],{"class":163},"\"time:\"",[143,107541,102354],{"class":149},[143,107543,107544,107546,107548,107551,107553,107555],{"class":145,"line":8957},[143,107545,32197],{"class":280},[143,107547,1049],{"class":149},[143,107549,107550],{"class":163},"\"joint qpos:\"",[143,107552,105805],{"class":149},[143,107554,1334],{"class":280},[143,107556,31395],{"class":149},[143,107558,107559,107561,107563,107566,107568,107570],{"class":145,"line":10616},[143,107560,32197],{"class":280},[143,107562,1049],{"class":149},[143,107564,107565],{"class":163},"\"joint qvel:\"",[143,107567,105821],{"class":149},[143,107569,1334],{"class":280},[143,107571,31395],{"class":149},[143,107573,107574,107576,107578,107581],{"class":145,"line":10641},[143,107575,32197],{"class":280},[143,107577,1049],{"class":149},[143,107579,107580],{"class":163},"\"last ctrl:\"",[143,107582,107583],{"class":149},", data.ctrl.copy())\n",[143,107585,107586],{"class":145,"line":10664},[143,107587,3300],{"emptyLinePlaceholder":976},[143,107589,107590],{"class":145,"line":10688},[143,107591,3300],{"emptyLinePlaceholder":976},[143,107593,107594,107596,107598,107600,107602],{"class":145,"line":10693},[143,107595,2434],{"class":755},[143,107597,32118],{"class":280},[143,107599,102435],{"class":755},[143,107601,102438],{"class":163},[143,107603,4639],{"class":149},[143,107605,107606],{"class":145,"line":10698},[143,107607,102445],{"class":149},[63,107609,104445],{},[133,107611,107613],{"className":24720,"code":107612,"language":24722,"meta":138,"style":138},"touch ch4_joint_motor.py\n",[140,107614,107615],{"__ignoreMap":138},[143,107616,107617,107619],{"class":145,"line":146},[143,107618,102159],{"class":156},[143,107620,107621],{"class":163}," ch4_joint_motor.py\n",[63,107623,103177],{},[133,107625,107627],{"className":24720,"code":107626,"language":24722,"meta":138,"style":138},"python ch4_joint_motor.py\n",[140,107628,107629],{"__ignoreMap":138},[143,107630,107631,107633],{"class":145,"line":146},[143,107632,31278],{"class":156},[143,107634,107621],{"class":163},[58,107636,102448],{"id":102448},[63,107638,107639],{},"检查 actuator 数量：",[133,107641,107643],{"className":31276,"code":107642,"language":31278,"meta":138,"style":138},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[140,107644,107645,107657],{"__ignoreMap":138},[143,107646,107647,107649,107651,107653,107655],{"class":145,"line":146},[143,107648,2434],{"class":755},[143,107650,107433],{"class":149},[143,107652,21846],{"class":755},[143,107654,26016],{"class":280},[143,107656,4639],{"class":149},[143,107658,107659,107661,107663,107665,107667],{"class":145,"line":35},[143,107660,104770],{"class":755},[143,107662,104310],{"class":280},[143,107664,1049],{"class":149},[143,107666,107450],{"class":163},[143,107668,1055],{"class":149},[63,107670,107671,107673,107674,107676],{},[140,107672,103034],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[140,107675,101952],{}," 长度应该是 1。",[63,107678,107679],{},"产生正弦控制信号：",[133,107681,107683],{"className":31276,"code":107682,"language":31278,"meta":138,"style":138},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[140,107684,107685],{"__ignoreMap":138},[143,107686,107687,107689,107691,107693,107695,107697,107699,107701,107703,107705,107707,107709,107711,107713],{"class":145,"line":146},[143,107688,106746],{"class":149},[143,107690,1234],{"class":280},[143,107692,5343],{"class":149},[143,107694,160],{"class":755},[143,107696,107501],{"class":280},[143,107698,7418],{"class":755},[143,107700,107506],{"class":149},[143,107702,106135],{"class":280},[143,107704,7418],{"class":755},[143,107706,107513],{"class":149},[143,107708,1496],{"class":755},[143,107710,62750],{"class":280},[143,107712,7418],{"class":755},[143,107714,107522],{"class":149},[63,107716,107717],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[63,107719,102549],{},[133,107721,107722],{"className":31276,"code":105380,"language":31278,"meta":138,"style":138},[140,107723,107724],{"__ignoreMap":138},[143,107725,107726],{"class":145,"line":146},[143,107727,105380],{"class":149},[63,107729,107730],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[58,107732,102584],{"id":102584},[133,107734,107736],{"className":31276,"code":107735,"language":31278,"meta":138,"style":138},"import math\n",[140,107737,107738],{"__ignoreMap":138},[143,107739,107740,107742],{"class":145,"line":146},[143,107741,31290],{"class":755},[143,107743,107225],{"class":149},[63,107745,107746,107747,101894,107750,107753],{},"导入 Python 标准库里的数学模块。后面要用 ",[140,107748,107749],{},"math.sin",[140,107751,107752],{},"math.pi"," 生成周期变化的控制信号。",[133,107755,107756],{"className":31276,"code":104561,"language":31278,"meta":138,"style":138},[140,107757,107758,107764],{"__ignoreMap":138},[143,107759,107760,107762],{"class":145,"line":146},[143,107761,31290],{"class":755},[143,107763,102177],{"class":149},[143,107765,107766,107768,107770,107772],{"class":145,"line":35},[143,107767,31290],{"class":755},[143,107769,32278],{"class":149},[143,107771,32281],{"class":755},[143,107773,32284],{"class":149},[63,107775,107776],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[133,107778,107779],{"className":53954,"code":107062,"language":53956,"meta":138,"style":138},[140,107780,107781],{"__ignoreMap":138},[143,107782,107783,107785,107787,107789,107791,107793,107795,107797,107799,107801,107803,107805,107807,107809,107811],{"class":145,"line":146},[143,107784,150],{"class":149},[143,107786,103832],{"class":153},[143,107788,15819],{"class":156},[143,107790,160],{"class":149},[143,107792,106894],{"class":163},[143,107794,54709],{"class":156},[143,107796,160],{"class":149},[143,107798,106894],{"class":163},[143,107800,106903],{"class":156},[143,107802,160],{"class":149},[143,107804,106908],{"class":163},[143,107806,107091],{"class":156},[143,107808,160],{"class":149},[143,107810,107096],{"class":163},[143,107812,102020],{"class":149},[63,107814,107815,107816,107818,107819,107821,107822,107824],{},"这行定义关节。",[140,107817,106715],{}," 表示旋转关节。",[140,107820,107114],{}," 表示绕 y 轴旋转。",[140,107823,107120],{}," 表示有一点阻尼，运动不会完全无损耗。",[133,107826,107828],{"className":53954,"code":107827,"language":53956,"meta":138,"style":138},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[140,107829,107830],{"__ignoreMap":138},[143,107831,107832,107834,107836,107838,107840,107843,107845,107847,107850,107853,107855,107858,107860,107862,107864,107866,107868,107871],{"class":145,"line":146},[143,107833,150],{"class":149},[143,107835,101996],{"class":153},[143,107837,15819],{"class":156},[143,107839,160],{"class":149},[143,107841,107842],{"class":163},"\"link_geom\"",[143,107844,54709],{"class":156},[143,107846,160],{"class":149},[143,107848,107849],{"class":163},"\"capsule\"",[143,107851,107852],{"class":156}," fromto",[143,107854,160],{"class":149},[143,107856,107857],{"class":163},"\"0 0 0 0 0 0.5\"",[143,107859,102012],{"class":156},[143,107861,160],{"class":149},[143,107863,104653],{"class":163},[143,107865,102877],{"class":156},[143,107867,160],{"class":149},[143,107869,107870],{"class":163},"\"0.5\"",[143,107872,102020],{"class":149},[63,107874,107875,107876,107878,107879,107881,107882,107885,107886,29283,107889,107891],{},"这行定义摆杆的形状。",[140,107877,104040],{}," 是胶囊体，适合表示杆子。",[140,107880,104051],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[140,107883,107884],{},"(0,0,0)"," 延伸到 ",[140,107887,107888],{},"(0,0,0.5)",[140,107890,104045],{}," 是半径。",[133,107893,107894],{"className":53954,"code":107128,"language":53956,"meta":138,"style":138},[140,107895,107896],{"__ignoreMap":138},[143,107897,107898,107900,107902,107904,107906,107908,107910,107912,107914,107916,107918,107920,107922,107924,107926,107928,107930,107932],{"class":145,"line":146},[143,107899,150],{"class":149},[143,107901,106949],{"class":153},[143,107903,15819],{"class":156},[143,107905,160],{"class":149},[143,107907,106956],{"class":163},[143,107909,106959],{"class":156},[143,107911,160],{"class":149},[143,107913,106894],{"class":163},[143,107915,106966],{"class":156},[143,107917,160],{"class":149},[143,107919,4578],{"class":163},[143,107921,106973],{"class":156},[143,107923,160],{"class":149},[143,107925,106978],{"class":163},[143,107927,106981],{"class":156},[143,107929,160],{"class":149},[143,107931,106986],{"class":163},[143,107933,102020],{"class":149},[63,107935,107936,107937,107939,107940,107943,107944,107946],{},"这行定义电机。它作用在 ",[140,107938,106715],{}," 关节上。",[140,107941,107942],{},"gear"," 可以理解成放大倍数。",[140,107945,106730],{}," 限制控制输入范围。",[133,107948,107949],{"className":31276,"code":107642,"language":31278,"meta":138,"style":138},[140,107950,107951,107963],{"__ignoreMap":138},[143,107952,107953,107955,107957,107959,107961],{"class":145,"line":146},[143,107954,2434],{"class":755},[143,107956,107433],{"class":149},[143,107958,21846],{"class":755},[143,107960,26016],{"class":280},[143,107962,4639],{"class":149},[143,107964,107965,107967,107969,107971,107973],{"class":145,"line":35},[143,107966,104770],{"class":755},[143,107968,104310],{"class":280},[143,107970,1049],{"class":149},[143,107972,107450],{"class":163},[143,107974,1055],{"class":149},[63,107976,107977,107979],{},[140,107978,103034],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[133,107981,107983],{"className":31276,"code":107982,"language":31278,"meta":138,"style":138},"for step in range(2000):\n",[140,107984,107985],{"__ignoreMap":138},[143,107986,107987,107989,107991,107993,107995,107997,107999],{"class":145,"line":146},[143,107988,3925],{"class":755},[143,107990,32514],{"class":149},[143,107992,26941],{"class":755},[143,107994,33341],{"class":280},[143,107996,1049],{"class":149},[143,107998,107471],{"class":280},[143,108000,31684],{"class":149},[63,108002,108003,108004,108006,108007,108010],{},"循环 2000 步。这里没有用 ",[140,108005,2030],{},"，而是用 ",[140,108008,108009],{},"step","，因为后面要用当前步数计算时间。",[133,108012,108014],{"className":31276,"code":108013,"language":31278,"meta":138,"style":138},"t = step * model.opt.timestep\n",[140,108015,108016],{"__ignoreMap":138},[143,108017,108018,108021,108023,108025,108027],{"class":145,"line":146},[143,108019,108020],{"class":149},"t ",[143,108022,160],{"class":755},[143,108024,32514],{"class":149},[143,108026,1496],{"class":755},[143,108028,107487],{"class":149},[63,108030,108031],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[133,108033,108034],{"className":31276,"code":107682,"language":31278,"meta":138,"style":138},[140,108035,108036],{"__ignoreMap":138},[143,108037,108038,108040,108042,108044,108046,108048,108050,108052,108054,108056,108058,108060,108062,108064],{"class":145,"line":146},[143,108039,106746],{"class":149},[143,108041,1234],{"class":280},[143,108043,5343],{"class":149},[143,108045,160],{"class":755},[143,108047,107501],{"class":280},[143,108049,7418],{"class":755},[143,108051,107506],{"class":149},[143,108053,106135],{"class":280},[143,108055,7418],{"class":755},[143,108057,107513],{"class":149},[143,108059,1496],{"class":755},[143,108061,62750],{"class":280},[143,108063,7418],{"class":755},[143,108065,107522],{"class":149},[63,108067,108068],{},"这行给电机输入一个正弦波。拆开看：",[19,108070,108071,108077,108083],{},[22,108072,108073,108076],{},[140,108074,108075],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[22,108078,108079,108082],{},[140,108080,108081],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[22,108084,108085,108088],{},[140,108086,108087],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[63,108090,108091],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[133,108093,108095],{"className":31276,"code":108094,"language":31278,"meta":138,"style":138},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[140,108096,108097],{"__ignoreMap":138},[143,108098,108099,108101,108103,108105,108107,108109],{"class":145,"line":146},[143,108100,31313],{"class":280},[143,108102,1049],{"class":149},[143,108104,107550],{"class":163},[143,108106,105805],{"class":149},[143,108108,1334],{"class":280},[143,108110,31395],{"class":149},[63,108112,108113,108114,108116],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[140,108115,101946],{}," 只有一个数。",[14,108118,103192],{"id":103191},[63,108120,108121],{},"输出类似:",[133,108123,108126],{"className":108124,"code":108125,"language":6087,"meta":138},[6085],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[140,108127,108125],{"__ignoreMap":138},[63,108129,108130,108131,108133],{},"这里 ",[140,108132,107001],{}," 是电机输入。",[63,108135,108136,108139,108140,108143],{},[140,108137,108138],{},"joint qpos"," 是关节角度，单位通常是弧度。",[140,108141,108142],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[63,108145,108146],{},"角度单位提示：",[133,108148,108151],{"className":108149,"code":108150,"language":6087,"meta":138},[6085],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[140,108152,108150],{"__ignoreMap":138},[63,108154,108155,108156,108158,108159,108161],{},"如果你看到 ",[140,108157,104905],{}," 是 ",[140,108160,36227],{},"，大约就是 28.6 度。",[14,108163,103224],{"id":103223},[19,108165,108166,108173,108176,108183,108186,108194,108202],{},[22,108167,103287,108168,103290,108170,29283],{},[140,108169,107186],{},[140,108171,108172],{},"gear=\"5\"",[22,108174,108175],{},"重新运行，观察关节运动是否更剧烈。",[22,108177,103287,108178,103290,108180,29283],{},[140,108179,106730],{},[140,108181,108182],{},"-0.2 0.2",[22,108184,108185],{},"重新运行，观察控制能力是否变弱。",[22,108187,108188,108189,108191,108192,29283],{},"去掉 actuator，确认 ",[140,108190,103034],{}," 变成 ",[140,108193,1234],{},[22,108195,103287,108196,103290,108198,108201],{},[140,108197,107120],{},[140,108199,108200],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[22,108203,103287,108204,103290,108206,108209],{},[140,108205,107114],{},[140,108207,108208],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108211,103329],{"id":103328},[58,108213,108215],{"id":108214},"indexerror-index-0-is-out-of-bounds",[140,108216,108217],{},"IndexError: index 0 is out of bounds",[63,108219,108220,108221,108223],{},"原因是 ",[140,108222,106867],{},"，没有 actuator。",[58,108225,108226],{"id":108226},"关节几乎不动",[63,108228,108229],{},"可能原因:",[19,108231,108232,108237,108241,108247],{},[22,108233,108234,108236],{},[140,108235,107942],{}," 太小",[22,108238,108239,108236],{},[140,108240,106730],{},[22,108242,108243,108246],{},[140,108244,108245],{},"damping"," 太大",[22,108248,108249],{},"重力方向导致运动不明显",[58,108251,108252],{"id":108252},"模型编译失败",[63,108254,108255,108256,108258],{},"检查 actuator 引用的 ",[140,108257,107177],{}," 是否存在，joint 名称是否拼写一致。",[58,108260,108262,108264],{"id":108261},"datactrl0-写了但没有效果",[140,108263,107001],{}," 写了但没有效果",[63,108266,103451],{},[19,108268,108269,108274,108277,108282,108287],{},[22,108270,108271,108273],{},[140,108272,103034],{}," 是否大于 0。",[22,108275,108276],{},"motor 是否引用了正确 joint。",[22,108278,108279,108281],{},[140,108280,107942],{}," 是否太小。",[22,108283,108284,108286],{},[140,108285,106730],{}," 是否把输入限制得太小。",[22,108288,108289],{},"body 是否真的有可动 joint。",[58,108291,108292],{"id":108292},"控制输入超过范围会怎样",[63,108294,108295],{},"如果设置了：",[133,108297,108299],{"className":53954,"code":108298,"language":53956,"meta":138,"style":138},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[140,108300,108301],{"__ignoreMap":138},[143,108302,108303],{"class":145,"line":146},[143,108304,108298],{"class":149},[63,108306,108307],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[133,108309,108311],{"className":31276,"code":108310,"language":31278,"meta":138,"style":138},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[140,108312,108313,108333],{"__ignoreMap":138},[143,108314,108315,108318,108320,108323,108325,108327,108329,108331],{"class":145,"line":146},[143,108316,108317],{"class":149},"action ",[143,108319,160],{"class":755},[143,108321,108322],{"class":149}," np.clip(action, ",[143,108324,1573],{"class":755},[143,108326,106135],{"class":280},[143,108328,13335],{"class":149},[143,108330,106135],{"class":280},[143,108332,1055],{"class":149},[143,108334,108335,108337,108339,108341,108343],{"class":145,"line":35},[143,108336,106746],{"class":149},[143,108338,1234],{"class":280},[143,108340,5343],{"class":149},[143,108342,160],{"class":755},[143,108344,108345],{"class":149}," action\n",[14,108347,103483],{"id":103482},[63,108349,108350],{},"这一章建立了控制任务的基本形式：",[133,108352,108355],{"className":108353,"code":108354,"language":6087,"meta":138},[6085],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[140,108356,108354],{"__ignoreMap":138},[63,108358,108359],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[954,108361,108362],{},"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":138,"searchDepth":35,"depth":35,"links":108364},[108365,108366,108367,108372,108376,108377,108378,108386],{"id":101522,"depth":35,"text":101523},{"id":101645,"depth":35,"text":101646},{"id":101920,"depth":35,"text":101921,"children":108368},[108369,108370,108371],{"id":107008,"depth":46,"text":107009},{"id":107058,"depth":46,"text":107059},{"id":107124,"depth":46,"text":107125},{"id":102128,"depth":35,"text":102129,"children":108373},[108374,108375],{"id":102448,"depth":46,"text":102448},{"id":102584,"depth":46,"text":102584},{"id":103191,"depth":35,"text":103192},{"id":103223,"depth":35,"text":103224},{"id":103328,"depth":35,"text":103329,"children":108379},[108380,108381,108382,108383,108385],{"id":108214,"depth":46,"text":108217},{"id":108226,"depth":46,"text":108226},{"id":108252,"depth":46,"text":108252},{"id":108261,"depth":46,"text":108384},"data.ctrl[0] 写了但没有效果",{"id":108292,"depth":46,"text":108292},{"id":103482,"depth":35,"text":103483},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106696,"description":138},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108393,"title":108394,"body":108395,"description":138,"extension":974,"meta":110304,"navigation":976,"path":110305,"seo":110306,"stem":110307,"__hash__":110308},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108396,"toc":110280},[108397,108400,108402,108405,108413,108416,108433,108436,108461,108464,108510,108512,108514,108569,108571,108590,108592,108635,108638,108655,108658,108674,108684,108691,108693,108696,108699,108733,108736,108784,108788,108791,108805,108814,108818,108821,108846,108849,108853,108866,108869,108875,108878,108893,108895,108898,109158,109160,109172,109175,109487,109489,109501,109503,109506,109521,109526,109529,109551,109554,109557,109591,109594,109598,109609,109612,109629,109632,109646,109653,109673,109680,109694,109697,109709,109724,109744,109747,109769,109772,109776,109791,109802,109817,109820,109850,109866,109895,109903,109927,109930,109948,109958,109970,109977,109986,109992,110001,110004,110006,110015,110018,110033,110035,110038,110049,110052,110063,110066,110084,110086,110103,110106,110134,110136,110140,110143,110173,110179,110182,110186,110194,110197,110199,110220,110223,110226,110242,110245,110261,110263,110266,110277],[10,108398,108394],{"id":108399},"_5viewer-可视化与-renderer-离屏渲染",[14,108401,101523],{"id":101522},[63,108403,108404],{},"本章掌握两类可视化方式:",[19,108406,108407,108410],{},[22,108408,108409],{},"交互式 viewer: 适合人工观察仿真",[22,108411,108412],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[63,108414,108415],{},"使用官方接口:",[133,108417,108419],{"className":31276,"code":108418,"language":31278,"meta":138,"style":138},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[140,108420,108421,108428],{"__ignoreMap":138},[143,108422,108423,108425],{"class":145,"line":146},[143,108424,31290],{"class":755},[143,108426,108427],{"class":149}," mujoco.viewer\n",[143,108429,108430],{"class":145,"line":35},[143,108431,108432],{"class":149},"mujoco.viewer.launch_passive(model, data)\n",[63,108434,108435],{},"以及:",[133,108437,108439],{"className":31276,"code":108438,"language":31278,"meta":138,"style":138},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[140,108440,108441,108451],{"__ignoreMap":138},[143,108442,108443,108446,108448],{"class":145,"line":146},[143,108444,108445],{"class":149},"renderer ",[143,108447,160],{"class":755},[143,108449,108450],{"class":149}," mujoco.Renderer(model)\n",[143,108452,108453,108456,108458],{"class":145,"line":35},[143,108454,108455],{"class":149},"image ",[143,108457,160],{"class":755},[143,108459,108460],{"class":149}," renderer.render()\n",[63,108462,108463],{},"新手建议先理解二者区别：",[1181,108465,108466,108482],{},[1184,108467,108468],{},[1187,108469,108470,108473,108476,108479],{},[1190,108471,108472],{"align":24634},"工具",[1190,108474,108475],{"align":24634},"用途",[1190,108477,108478],{"align":24634},"是否打开窗口",[1190,108480,108481],{"align":24634},"常见场景",[1227,108483,108484,108497],{},[1187,108485,108486,108489,108492,108494],{},[1232,108487,108488],{"align":24634},"Viewer",[1232,108490,108491],{"align":24634},"人眼实时观察仿真",[1232,108493,105540],{"align":24634},[1232,108495,108496],{"align":24634},"调试模型、看控制效果",[1187,108498,108499,108502,108505,108507],{},[1232,108500,108501],{"align":24634},"Renderer",[1232,108503,108504],{"align":24634},"生成图像数组",[1232,108506,105553],{"align":24634},[1232,108508,108509],{"align":24634},"保存图片、训练视觉策略、服务器批量采集",[14,108511,101646],{"id":101645},[63,108513,101649],{},[133,108515,108517],{"className":24720,"code":108516,"language":24722,"meta":138,"style":138},"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",[140,108518,108519,108531,108541,108549,108557],{"__ignoreMap":138},[143,108520,108521,108523,108525,108527,108529],{"class":145,"line":146},[143,108522,25474],{"class":156},[143,108524,27213],{"class":163},[143,108526,24732],{"class":163},[143,108528,27298],{"class":280},[143,108530,25576],{"class":280},[143,108532,108533,108535,108537,108539],{"class":145,"line":35},[143,108534,101684],{"class":163},[143,108536,101687],{"class":163},[143,108538,101690],{"class":163},[143,108540,25576],{"class":280},[143,108542,108543,108545,108547],{"class":145,"line":46},[143,108544,101697],{"class":163},[143,108546,101700],{"class":163},[143,108548,25576],{"class":280},[143,108550,108551,108553,108555],{"class":145,"line":293},[143,108552,101707],{"class":163},[143,108554,101710],{"class":163},[143,108556,25576],{"class":280},[143,108558,108559,108561,108563,108565,108567],{"class":145,"line":306},[143,108560,101717],{"class":163},[143,108562,101720],{"class":163},[143,108564,101723],{"class":163},[143,108566,101726],{"class":163},[143,108568,103392],{"class":163},[63,108570,103695],{},[133,108572,108574],{"className":24720,"code":108573,"language":24722,"meta":138,"style":138},"pip install \"mujoco>=2.3\" numpy pillow\n",[140,108575,108576],{"__ignoreMap":138},[143,108577,108578,108580,108582,108584,108587],{"class":145,"line":146},[143,108579,24729],{"class":156},[143,108581,24732],{"class":163},[143,108583,101806],{"class":163},[143,108585,108586],{"class":163}," numpy",[143,108588,108589],{"class":163}," pillow\n",[63,108591,103712],{},[133,108593,108595],{"className":24720,"code":108594,"language":24722,"meta":138,"style":138},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[140,108596,108597,108614,108623],{"__ignoreMap":138},[143,108598,108599,108601,108603,108605,108608,108610,108612],{"class":145,"line":146},[143,108600,31228],{"class":156},[143,108602,30074],{"class":163},[143,108604,26013],{"class":280},[143,108606,108607],{"class":163}," mujoco-render",[143,108609,101851],{"class":163},[143,108611,101854],{"class":280},[143,108613,101857],{"class":280},[143,108615,108616,108618,108620],{"class":145,"line":35},[143,108617,31228],{"class":156},[143,108619,101864],{"class":163},[143,108621,108622],{"class":163}," mujoco-render\n",[143,108624,108625,108627,108629,108631,108633],{"class":145,"line":46},[143,108626,24729],{"class":156},[143,108628,24732],{"class":163},[143,108630,101806],{"class":163},[143,108632,108586],{"class":163},[143,108634,108589],{"class":163},[63,108636,108637],{},"离屏渲染后端:",[133,108639,108641],{"className":24720,"code":108640,"language":24722,"meta":138,"style":138},"export MUJOCO_GL=egl\n",[140,108642,108643],{"__ignoreMap":138},[143,108644,108645,108647,108650,108652],{"class":145,"line":146},[143,108646,25940],{"class":755},[143,108648,108649],{"class":149}," MUJOCO_GL",[143,108651,160],{"class":755},[143,108653,108654],{"class":149},"egl\n",[63,108656,108657],{},"或:",[133,108659,108661],{"className":24720,"code":108660,"language":24722,"meta":138,"style":138},"export MUJOCO_GL=osmesa\n",[140,108662,108663],{"__ignoreMap":138},[143,108664,108665,108667,108669,108671],{"class":145,"line":146},[143,108666,25940],{"class":755},[143,108668,108649],{"class":149},[143,108670,160],{"class":755},[143,108672,108673],{"class":149},"osmesa\n",[63,108675,108676,108677,108680,108681,29283],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[140,108678,108679],{},"egl"," 失败，再尝试 ",[140,108682,108683],{},"osmesa",[63,108685,108686,108687,108690],{},"如果你在本机桌面环境运行，通常先不要设置 ",[140,108688,108689],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108692,101921],{"id":101920},[63,108694,108695],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[63,108697,108698],{},"典型 viewer 流程:",[133,108700,108702],{"className":31276,"code":108701,"language":31278,"meta":138,"style":138},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[140,108703,108704,108717,108724,108728],{"__ignoreMap":138},[143,108705,108706,108709,108712,108714],{"class":145,"line":146},[143,108707,108708],{"class":755},"with",[143,108710,108711],{"class":149}," mujoco.viewer.launch_passive(model, data) ",[143,108713,32281],{"class":755},[143,108715,108716],{"class":149}," viewer:\n",[143,108718,108719,108721],{"class":145,"line":35},[143,108720,3151],{"class":755},[143,108722,108723],{"class":149}," viewer.is_running():\n",[143,108725,108726],{"class":145,"line":46},[143,108727,102392],{"class":149},[143,108729,108730],{"class":145,"line":293},[143,108731,108732],{"class":149},"        viewer.sync()\n",[63,108734,108735],{},"典型 renderer 流程:",[133,108737,108739],{"className":31276,"code":108738,"language":31278,"meta":138,"style":138},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[140,108740,108741,108767,108771,108776],{"__ignoreMap":138},[143,108742,108743,108745,108747,108750,108752,108754,108756,108758,108760,108762,108765],{"class":145,"line":146},[143,108744,108445],{"class":149},[143,108746,160],{"class":755},[143,108748,108749],{"class":149}," mujoco.Renderer(model, ",[143,108751,25879],{"class":6116},[143,108753,160],{"class":755},[143,108755,43240],{"class":280},[143,108757,13335],{"class":149},[143,108759,25875],{"class":6116},[143,108761,160],{"class":755},[143,108763,108764],{"class":280},"640",[143,108766,1055],{"class":149},[143,108768,108769],{"class":145,"line":35},[143,108770,105380],{"class":149},[143,108772,108773],{"class":145,"line":46},[143,108774,108775],{"class":149},"renderer.update_scene(data)\n",[143,108777,108778,108780,108782],{"class":145,"line":293},[143,108779,108455],{"class":149},[143,108781,160],{"class":755},[143,108783,108460],{"class":149},[58,108785,108787],{"id":108786},"viewer-的同步逻辑","viewer 的同步逻辑",[63,108789,108790],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[133,108792,108794],{"className":31276,"code":108793,"language":31278,"meta":138,"style":138},"mujoco.mj_step(model, data)\nviewer.sync()\n",[140,108795,108796,108800],{"__ignoreMap":138},[143,108797,108798],{"class":145,"line":146},[143,108799,105380],{"class":149},[143,108801,108802],{"class":145,"line":35},[143,108803,108804],{"class":149},"viewer.sync()\n",[63,108806,108807,108809,108810,108813],{},[140,108808,102091],{}," 负责算物理，",[140,108811,108812],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[58,108815,108817],{"id":108816},"为什么要-sleep","为什么要 sleep",[63,108819,108820],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[133,108822,108824],{"className":31276,"code":108823,"language":31278,"meta":138,"style":138},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[140,108825,108826],{"__ignoreMap":138},[143,108827,108828,108831,108833,108836,108838,108841,108843],{"class":145,"line":146},[143,108829,108830],{"class":149},"sleep_time ",[143,108832,160],{"class":755},[143,108834,108835],{"class":149}," model.opt.timestep ",[143,108837,1573],{"class":755},[143,108839,108840],{"class":149}," (time.time() ",[143,108842,1573],{"class":755},[143,108844,108845],{"class":149}," step_start)\n",[63,108847,108848],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[58,108850,108852],{"id":108851},"renderer-输出是什么","renderer 输出是什么",[133,108854,108856],{"className":31276,"code":108855,"language":31278,"meta":138,"style":138},"image = renderer.render()\n",[140,108857,108858],{"__ignoreMap":138},[143,108859,108860,108862,108864],{"class":145,"line":146},[143,108861,108455],{"class":149},[143,108863,160],{"class":755},[143,108865,108460],{"class":149},[63,108867,108868],{},"得到的是 NumPy 数组，形状通常是：",[133,108870,108873],{"className":108871,"code":108872,"language":6087,"meta":138},[6085],"(height, width, 3)\n",[140,108874,108872],{"__ignoreMap":138},[63,108876,108877],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[133,108879,108881],{"className":31276,"code":108880,"language":31278,"meta":138,"style":138},"Image.fromarray(image).save(\"render_output.png\")\n",[140,108882,108883],{"__ignoreMap":138},[143,108884,108885,108888,108891],{"class":145,"line":146},[143,108886,108887],{"class":149},"Image.fromarray(image).save(",[143,108889,108890],{"class":163},"\"render_output.png\"",[143,108892,1055],{"class":149},[14,108894,102129],{"id":102128},[63,108896,108897],{},"交互式 Viewer:",[133,108899,108901],{"className":31276,"code":108900,"language":31278,"meta":138,"style":138},"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",[140,108902,108903,108909,108913,108919,108925,108929,108933,108941,108946,108950,108954,108958,108963,108968,108972,108976,108980,108985,108989,108993,108997,109001,109005,109009,109021,109033,109041,109045,109055,109075,109085,109090,109095,109099,109116,109129,109134,109138,109142,109154],{"__ignoreMap":138},[143,108904,108905,108907],{"class":145,"line":146},[143,108906,31290],{"class":755},[143,108908,32727],{"class":149},[143,108910,108911],{"class":145,"line":35},[143,108912,3300],{"emptyLinePlaceholder":976},[143,108914,108915,108917],{"class":145,"line":46},[143,108916,31290],{"class":755},[143,108918,102177],{"class":149},[143,108920,108921,108923],{"class":145,"line":293},[143,108922,31290],{"class":755},[143,108924,108427],{"class":149},[143,108926,108927],{"class":145,"line":306},[143,108928,3300],{"emptyLinePlaceholder":976},[143,108930,108931],{"class":145,"line":319},[143,108932,3300],{"emptyLinePlaceholder":976},[143,108934,108935,108937,108939],{"class":145,"line":332},[143,108936,102190],{"class":280},[143,108938,14464],{"class":755},[143,108940,102195],{"class":163},[143,108942,108943],{"class":145,"line":345},[143,108944,108945],{"class":163},"\u003Cmujoco model=\"viewer_demo\">\n",[143,108947,108948],{"class":145,"line":701},[143,108949,102205],{"class":163},[143,108951,108952],{"class":145,"line":707},[143,108953,3300],{"emptyLinePlaceholder":976},[143,108955,108956],{"class":145,"line":727},[143,108957,102214],{"class":163},[143,108959,108960],{"class":145,"line":2518},[143,108961,108962],{"class":163},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[143,108964,108965],{"class":145,"line":2524},[143,108966,108967],{"class":163},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[143,108969,108970],{"class":145,"line":2529},[143,108971,3300],{"emptyLinePlaceholder":976},[143,108973,108974],{"class":145,"line":2543},[143,108975,102228],{"class":163},[143,108977,108978],{"class":145,"line":2548},[143,108979,102233],{"class":163},[143,108981,108982],{"class":145,"line":2554},[143,108983,108984],{"class":163},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[143,108986,108987],{"class":145,"line":2575},[143,108988,102243],{"class":163},[143,108990,108991],{"class":145,"line":2580},[143,108992,102248],{"class":163},[143,108994,108995],{"class":145,"line":2594},[143,108996,102253],{"class":163},[143,108998,108999],{"class":145,"line":2599},[143,109000,96574],{"class":163},[143,109002,109003],{"class":145,"line":2628},[143,109004,3300],{"emptyLinePlaceholder":976},[143,109006,109007],{"class":145,"line":2633},[143,109008,3300],{"emptyLinePlaceholder":976},[143,109010,109011,109013,109015,109017,109019],{"class":145,"line":2650},[143,109012,32845],{"class":755},[143,109014,2873],{"class":156},[143,109016,102274],{"class":149},[143,109018,96562],{"class":280},[143,109020,4639],{"class":149},[143,109022,109023,109025,109027,109029,109031],{"class":145,"line":2655},[143,109024,102283],{"class":149},[143,109026,160],{"class":755},[143,109028,102288],{"class":149},[143,109030,102190],{"class":280},[143,109032,1055],{"class":149},[143,109034,109035,109037,109039],{"class":145,"line":2660},[143,109036,102297],{"class":149},[143,109038,160],{"class":755},[143,109040,102302],{"class":149},[143,109042,109043],{"class":145,"line":2665},[143,109044,3300],{"emptyLinePlaceholder":976},[143,109046,109047,109049,109051,109053],{"class":145,"line":2679},[143,109048,35076],{"class":755},[143,109050,108711],{"class":149},[143,109052,32281],{"class":755},[143,109054,108716],{"class":149},[143,109056,109057,109060,109063,109065,109068,109070,109073],{"class":145,"line":2684},[143,109058,109059],{"class":755},"        while",[143,109061,109062],{"class":149}," viewer.is_running() ",[143,109064,31360],{"class":755},[143,109066,109067],{"class":149}," data.time ",[143,109069,150],{"class":755},[143,109071,109072],{"class":280}," 5.0",[143,109074,4639],{"class":149},[143,109076,109077,109080,109082],{"class":145,"line":3477},[143,109078,109079],{"class":149},"            step_start ",[143,109081,160],{"class":755},[143,109083,109084],{"class":149}," time.time()\n",[143,109086,109087],{"class":145,"line":3491},[143,109088,109089],{"class":149},"            mujoco.mj_step(model, data)\n",[143,109091,109092],{"class":145,"line":3499},[143,109093,109094],{"class":149},"            viewer.sync()\n",[143,109096,109097],{"class":145,"line":3504},[143,109098,3300],{"emptyLinePlaceholder":976},[143,109100,109101,109104,109106,109108,109110,109112,109114],{"class":145,"line":3510},[143,109102,109103],{"class":149},"            sleep_time ",[143,109105,160],{"class":755},[143,109107,108835],{"class":149},[143,109109,1573],{"class":755},[143,109111,108840],{"class":149},[143,109113,1573],{"class":755},[143,109115,108845],{"class":149},[143,109117,109118,109120,109123,109125,109127],{"class":145,"line":3516},[143,109119,5542],{"class":755},[143,109121,109122],{"class":149}," sleep_time ",[143,109124,1998],{"class":755},[143,109126,4993],{"class":280},[143,109128,4639],{"class":149},[143,109130,109131],{"class":145,"line":3521},[143,109132,109133],{"class":149},"                time.sleep(sleep_time)\n",[143,109135,109136],{"class":145,"line":8848},[143,109137,3300],{"emptyLinePlaceholder":976},[143,109139,109140],{"class":145,"line":8872},[143,109141,3300],{"emptyLinePlaceholder":976},[143,109143,109144,109146,109148,109150,109152],{"class":145,"line":8877},[143,109145,2434],{"class":755},[143,109147,32118],{"class":280},[143,109149,102435],{"class":755},[143,109151,102438],{"class":163},[143,109153,4639],{"class":149},[143,109155,109156],{"class":145,"line":8883},[143,109157,102445],{"class":149},[63,109159,104445],{},[133,109161,109163],{"className":24720,"code":109162,"language":24722,"meta":138,"style":138},"touch ch5_viewer.py\n",[140,109164,109165],{"__ignoreMap":138},[143,109166,109167,109169],{"class":145,"line":146},[143,109168,102159],{"class":156},[143,109170,109171],{"class":163}," ch5_viewer.py\n",[63,109173,109174],{},"离屏 Renderer 保存图片:",[133,109176,109178],{"className":31276,"code":109177,"language":31278,"meta":138,"style":138},"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",[140,109179,109180,109192,109196,109202,109212,109216,109220,109228,109233,109237,109241,109245,109249,109254,109258,109262,109266,109270,109274,109278,109282,109286,109290,109294,109298,109310,109322,109330,109355,109359,109375,109379,109383,109398,109407,109411,109425,109430,109435,109439,109451,109463,109467,109471,109483],{"__ignoreMap":138},[143,109181,109182,109184,109187,109189],{"class":145,"line":146},[143,109183,31635],{"class":755},[143,109185,109186],{"class":149}," pathlib ",[143,109188,31290],{"class":755},[143,109190,109191],{"class":149}," Path\n",[143,109193,109194],{"class":145,"line":35},[143,109195,3300],{"emptyLinePlaceholder":976},[143,109197,109198,109200],{"class":145,"line":46},[143,109199,31290],{"class":755},[143,109201,102177],{"class":149},[143,109203,109204,109206,109208,109210],{"class":145,"line":293},[143,109205,31635],{"class":755},[143,109207,48161],{"class":280},[143,109209,48164],{"class":755},[143,109211,48167],{"class":149},[143,109213,109214],{"class":145,"line":306},[143,109215,3300],{"emptyLinePlaceholder":976},[143,109217,109218],{"class":145,"line":319},[143,109219,3300],{"emptyLinePlaceholder":976},[143,109221,109222,109224,109226],{"class":145,"line":332},[143,109223,102190],{"class":280},[143,109225,14464],{"class":755},[143,109227,102195],{"class":163},[143,109229,109230],{"class":145,"line":345},[143,109231,109232],{"class":163},"\u003Cmujoco model=\"renderer_demo\">\n",[143,109234,109235],{"class":145,"line":701},[143,109236,102205],{"class":163},[143,109238,109239],{"class":145,"line":707},[143,109240,3300],{"emptyLinePlaceholder":976},[143,109242,109243],{"class":145,"line":727},[143,109244,102214],{"class":163},[143,109246,109247],{"class":145,"line":2518},[143,109248,108962],{"class":163},[143,109250,109251],{"class":145,"line":2524},[143,109252,109253],{"class":163},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[143,109255,109256],{"class":145,"line":2529},[143,109257,108967],{"class":163},[143,109259,109260],{"class":145,"line":2543},[143,109261,3300],{"emptyLinePlaceholder":976},[143,109263,109264],{"class":145,"line":2548},[143,109265,102228],{"class":163},[143,109267,109268],{"class":145,"line":2554},[143,109269,102233],{"class":163},[143,109271,109272],{"class":145,"line":2575},[143,109273,108984],{"class":163},[143,109275,109276],{"class":145,"line":2580},[143,109277,102243],{"class":163},[143,109279,109280],{"class":145,"line":2594},[143,109281,102248],{"class":163},[143,109283,109284],{"class":145,"line":2599},[143,109285,102253],{"class":163},[143,109287,109288],{"class":145,"line":2628},[143,109289,96574],{"class":163},[143,109291,109292],{"class":145,"line":2633},[143,109293,3300],{"emptyLinePlaceholder":976},[143,109295,109296],{"class":145,"line":2650},[143,109297,3300],{"emptyLinePlaceholder":976},[143,109299,109300,109302,109304,109306,109308],{"class":145,"line":2655},[143,109301,32845],{"class":755},[143,109303,2873],{"class":156},[143,109305,102274],{"class":149},[143,109307,96562],{"class":280},[143,109309,4639],{"class":149},[143,109311,109312,109314,109316,109318,109320],{"class":145,"line":2660},[143,109313,102283],{"class":149},[143,109315,160],{"class":755},[143,109317,102288],{"class":149},[143,109319,102190],{"class":280},[143,109321,1055],{"class":149},[143,109323,109324,109326,109328],{"class":145,"line":2665},[143,109325,102297],{"class":149},[143,109327,160],{"class":755},[143,109329,102302],{"class":149},[143,109331,109332,109335,109337,109339,109341,109343,109345,109347,109349,109351,109353],{"class":145,"line":2679},[143,109333,109334],{"class":149},"    renderer ",[143,109336,160],{"class":755},[143,109338,108749],{"class":149},[143,109340,25879],{"class":6116},[143,109342,160],{"class":755},[143,109344,43240],{"class":280},[143,109346,13335],{"class":149},[143,109348,25875],{"class":6116},[143,109350,160],{"class":755},[143,109352,108764],{"class":280},[143,109354,1055],{"class":149},[143,109356,109357],{"class":145,"line":2684},[143,109358,3300],{"emptyLinePlaceholder":976},[143,109360,109361,109363,109365,109367,109369,109371,109373],{"class":145,"line":3477},[143,109362,4101],{"class":755},[143,109364,102377],{"class":149},[143,109366,26941],{"class":755},[143,109368,33341],{"class":280},[143,109370,1049],{"class":149},[143,109372,1352],{"class":280},[143,109374,31684],{"class":149},[143,109376,109377],{"class":145,"line":3491},[143,109378,102392],{"class":149},[143,109380,109381],{"class":145,"line":3499},[143,109382,3300],{"emptyLinePlaceholder":976},[143,109384,109385,109388,109391,109393,109396],{"class":145,"line":3504},[143,109386,109387],{"class":149},"    renderer.update_scene(data, ",[143,109389,109390],{"class":6116},"camera",[143,109392,160],{"class":755},[143,109394,109395],{"class":163},"\"fixed_camera\"",[143,109397,1055],{"class":149},[143,109399,109400,109403,109405],{"class":145,"line":3510},[143,109401,109402],{"class":149},"    image ",[143,109404,160],{"class":755},[143,109406,108460],{"class":149},[143,109408,109409],{"class":145,"line":3516},[143,109410,3300],{"emptyLinePlaceholder":976},[143,109412,109413,109416,109418,109421,109423],{"class":145,"line":3521},[143,109414,109415],{"class":149},"    output_path ",[143,109417,160],{"class":755},[143,109419,109420],{"class":149}," Path(",[143,109422,108890],{"class":163},[143,109424,1055],{"class":149},[143,109426,109427],{"class":145,"line":8848},[143,109428,109429],{"class":149},"    Image.fromarray(image).save(output_path)\n",[143,109431,109432],{"class":145,"line":8872},[143,109433,109434],{"class":149},"    renderer.close()\n",[143,109436,109437],{"class":145,"line":8877},[143,109438,3300],{"emptyLinePlaceholder":976},[143,109440,109441,109443,109445,109448],{"class":145,"line":8883},[143,109442,32197],{"class":280},[143,109444,1049],{"class":149},[143,109446,109447],{"class":163},"\"saved:\"",[143,109449,109450],{"class":149},", output_path.resolve())\n",[143,109452,109453,109455,109457,109460],{"class":145,"line":8910},[143,109454,32197],{"class":280},[143,109456,1049],{"class":149},[143,109458,109459],{"class":163},"\"image shape:\"",[143,109461,109462],{"class":149},", image.shape)\n",[143,109464,109465],{"class":145,"line":8915},[143,109466,3300],{"emptyLinePlaceholder":976},[143,109468,109469],{"class":145,"line":8921},[143,109470,3300],{"emptyLinePlaceholder":976},[143,109472,109473,109475,109477,109479,109481],{"class":145,"line":8933},[143,109474,2434],{"class":755},[143,109476,32118],{"class":280},[143,109478,102435],{"class":755},[143,109480,102438],{"class":163},[143,109482,4639],{"class":149},[143,109484,109485],{"class":145,"line":8945},[143,109486,102445],{"class":149},[63,109488,104445],{},[133,109490,109492],{"className":24720,"code":109491,"language":24722,"meta":138,"style":138},"touch ch5_renderer.py\n",[140,109493,109494],{"__ignoreMap":138},[143,109495,109496,109498],{"class":145,"line":146},[143,109497,102159],{"class":156},[143,109499,109500],{"class":163}," ch5_renderer.py\n",[58,109502,102448],{"id":102448},[63,109504,109505],{},"viewer 上下文：",[133,109507,109509],{"className":31276,"code":109508,"language":31278,"meta":138,"style":138},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[140,109510,109511],{"__ignoreMap":138},[143,109512,109513,109515,109517,109519],{"class":145,"line":146},[143,109514,108708],{"class":755},[143,109516,108711],{"class":149},[143,109518,32281],{"class":755},[143,109520,108716],{"class":149},[63,109522,109523,109525],{},[140,109524,108708],{}," 语句会创建窗口，并在退出时自动清理资源。",[63,109527,109528],{},"窗口循环：",[133,109530,109532],{"className":31276,"code":109531,"language":31278,"meta":138,"style":138},"while viewer.is_running() and data.time \u003C 5.0:\n",[140,109533,109534],{"__ignoreMap":138},[143,109535,109536,109539,109541,109543,109545,109547,109549],{"class":145,"line":146},[143,109537,109538],{"class":755},"while",[143,109540,109062],{"class":149},[143,109542,31360],{"class":755},[143,109544,109067],{"class":149},[143,109546,150],{"class":755},[143,109548,109072],{"class":280},[143,109550,4639],{"class":149},[63,109552,109553],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[63,109555,109556],{},"固定相机：",[133,109558,109560],{"className":53954,"code":109559,"language":53956,"meta":138,"style":138},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[140,109561,109562],{"__ignoreMap":138},[143,109563,109564,109566,109568,109570,109572,109574,109576,109578,109581,109584,109586,109589],{"class":145,"line":146},[143,109565,150],{"class":149},[143,109567,109390],{"class":153},[143,109569,15819],{"class":156},[143,109571,160],{"class":149},[143,109573,109395],{"class":163},[143,109575,101982],{"class":156},[143,109577,160],{"class":149},[143,109579,109580],{"class":163},"\"1.5 -2.0 1.2\"",[143,109582,109583],{"class":156}," xyaxes",[143,109585,160],{"class":149},[143,109587,109588],{"class":163},"\"1 0.75 0 0 0 1\"",[143,109590,102020],{"class":149},[63,109592,109593],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[58,109595,109597],{"id":109596},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[133,109599,109601],{"className":31276,"code":109600,"language":31278,"meta":138,"style":138},"import time\n",[140,109602,109603],{"__ignoreMap":138},[143,109604,109605,109607],{"class":145,"line":146},[143,109606,31290],{"class":755},[143,109608,32727],{"class":149},[63,109610,109611],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[133,109613,109615],{"className":31276,"code":109614,"language":31278,"meta":138,"style":138},"import mujoco\nimport mujoco.viewer\n",[140,109616,109617,109623],{"__ignoreMap":138},[143,109618,109619,109621],{"class":145,"line":146},[143,109620,31290],{"class":755},[143,109622,102177],{"class":149},[143,109624,109625,109627],{"class":145,"line":35},[143,109626,31290],{"class":755},[143,109628,108427],{"class":149},[63,109630,109631],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[133,109633,109634],{"className":31276,"code":109508,"language":31278,"meta":138,"style":138},[140,109635,109636],{"__ignoreMap":138},[143,109637,109638,109640,109642,109644],{"class":145,"line":146},[143,109639,108708],{"class":755},[143,109641,108711],{"class":149},[143,109643,32281],{"class":755},[143,109645,108716],{"class":149},[63,109647,109648,109649,109652],{},"打开一个 viewer 窗口。",[140,109650,109651],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[133,109654,109655],{"className":31276,"code":109531,"language":31278,"meta":138,"style":138},[140,109656,109657],{"__ignoreMap":138},[143,109658,109659,109661,109663,109665,109667,109669,109671],{"class":145,"line":146},[143,109660,109538],{"class":755},[143,109662,109062],{"class":149},[143,109664,31360],{"class":755},[143,109666,109067],{"class":149},[143,109668,150],{"class":755},[143,109670,109072],{"class":280},[143,109672,4639],{"class":149},[63,109674,109675,109676,109679],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[140,109677,109678],{},"viewer.is_running()"," 会变成 false，循环结束。",[133,109681,109683],{"className":31276,"code":109682,"language":31278,"meta":138,"style":138},"step_start = time.time()\n",[140,109684,109685],{"__ignoreMap":138},[143,109686,109687,109690,109692],{"class":145,"line":146},[143,109688,109689],{"class":149},"step_start ",[143,109691,160],{"class":755},[143,109693,109084],{"class":149},[63,109695,109696],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[133,109698,109699],{"className":31276,"code":108793,"language":31278,"meta":138,"style":138},[140,109700,109701,109705],{"__ignoreMap":138},[143,109702,109703],{"class":145,"line":146},[143,109704,105380],{"class":149},[143,109706,109707],{"class":145,"line":35},[143,109708,108804],{"class":149},[63,109710,109711,109713,109714,109716,109717,109719,109720,109723],{},[140,109712,102091],{}," 推进物理仿真。",[140,109715,108812],{}," 把最新的 ",[140,109718,34299],{}," 同步到窗口里显示。没有 ",[140,109721,109722],{},"sync()","，窗口可能看不到最新状态。",[133,109725,109726],{"className":31276,"code":108823,"language":31278,"meta":138,"style":138},[140,109727,109728],{"__ignoreMap":138},[143,109729,109730,109732,109734,109736,109738,109740,109742],{"class":145,"line":146},[143,109731,108830],{"class":149},[143,109733,160],{"class":755},[143,109735,108835],{"class":149},[143,109737,1573],{"class":755},[143,109739,108840],{"class":149},[143,109741,1573],{"class":755},[143,109743,108845],{"class":149},[63,109745,109746],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[133,109748,109750],{"className":31276,"code":109749,"language":31278,"meta":138,"style":138},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[140,109751,109752,109764],{"__ignoreMap":138},[143,109753,109754,109756,109758,109760,109762],{"class":145,"line":146},[143,109755,2434],{"class":755},[143,109757,109122],{"class":149},[143,109759,1998],{"class":755},[143,109761,4993],{"class":280},[143,109763,4639],{"class":149},[143,109765,109766],{"class":145,"line":35},[143,109767,109768],{"class":149},"    time.sleep(sleep_time)\n",[63,109770,109771],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[58,109773,109775],{"id":109774},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[133,109777,109779],{"className":31276,"code":109778,"language":31278,"meta":138,"style":138},"from pathlib import Path\n",[140,109780,109781],{"__ignoreMap":138},[143,109782,109783,109785,109787,109789],{"class":145,"line":146},[143,109784,31635],{"class":755},[143,109786,109186],{"class":149},[143,109788,31290],{"class":755},[143,109790,109191],{"class":149},[63,109792,109793,109794,109797,109798,109801],{},"导入 ",[140,109795,109796],{},"Path","，用来处理文件路径。相比直接写字符串，",[140,109799,109800],{},"Path(\"render_output.png\")"," 更清晰。",[133,109803,109805],{"className":31276,"code":109804,"language":31278,"meta":138,"style":138},"from PIL import Image\n",[140,109806,109807],{"__ignoreMap":138},[143,109808,109809,109811,109813,109815],{"class":145,"line":146},[143,109810,31635],{"class":755},[143,109812,48161],{"class":280},[143,109814,48164],{"class":755},[143,109816,48167],{"class":149},[63,109818,109819],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[133,109821,109822],{"className":53954,"code":109559,"language":53956,"meta":138,"style":138},[140,109823,109824],{"__ignoreMap":138},[143,109825,109826,109828,109830,109832,109834,109836,109838,109840,109842,109844,109846,109848],{"class":145,"line":146},[143,109827,150],{"class":149},[143,109829,109390],{"class":153},[143,109831,15819],{"class":156},[143,109833,160],{"class":149},[143,109835,109395],{"class":163},[143,109837,101982],{"class":156},[143,109839,160],{"class":149},[143,109841,109580],{"class":163},[143,109843,109583],{"class":156},[143,109845,160],{"class":149},[143,109847,109588],{"class":163},[143,109849,102020],{"class":149},[63,109851,109852,109853,109855,109856,109858,109859,109862,109863,109865],{},"定义一个相机。",[140,109854,80688],{}," 是相机名字。",[140,109857,105021],{}," 是相机在世界里的位置。",[140,109860,109861],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[140,109864,105021],{}," 来调视角。",[133,109867,109869],{"className":31276,"code":109868,"language":31278,"meta":138,"style":138},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[140,109870,109871],{"__ignoreMap":138},[143,109872,109873,109875,109877,109879,109881,109883,109885,109887,109889,109891,109893],{"class":145,"line":146},[143,109874,108445],{"class":149},[143,109876,160],{"class":755},[143,109878,108749],{"class":149},[143,109880,25879],{"class":6116},[143,109882,160],{"class":755},[143,109884,43240],{"class":280},[143,109886,13335],{"class":149},[143,109888,25875],{"class":6116},[143,109890,160],{"class":755},[143,109892,108764],{"class":280},[143,109894,1055],{"class":149},[63,109896,109897,109898,101894,109900,109902],{},"创建离屏渲染器。",[140,109899,25879],{},[140,109901,25875],{}," 决定输出图片大小。",[133,109904,109905],{"className":31276,"code":102552,"language":31278,"meta":138,"style":138},[140,109906,109907,109923],{"__ignoreMap":138},[143,109908,109909,109911,109913,109915,109917,109919,109921],{"class":145,"line":146},[143,109910,3925],{"class":755},[143,109912,102377],{"class":149},[143,109914,26941],{"class":755},[143,109916,33341],{"class":280},[143,109918,1049],{"class":149},[143,109920,1352],{"class":280},[143,109922,31684],{"class":149},[143,109924,109925],{"class":145,"line":35},[143,109926,102575],{"class":149},[63,109928,109929],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[133,109931,109933],{"className":31276,"code":109932,"language":31278,"meta":138,"style":138},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[140,109934,109935],{"__ignoreMap":138},[143,109936,109937,109940,109942,109944,109946],{"class":145,"line":146},[143,109938,109939],{"class":149},"renderer.update_scene(data, ",[143,109941,109390],{"class":6116},[143,109943,160],{"class":755},[143,109945,109395],{"class":163},[143,109947,1055],{"class":149},[63,109949,109950,109951,109953,109954,109957],{},"告诉 renderer：用当前 ",[140,109952,34299],{}," 的状态更新画面，并使用名为 ",[140,109955,109956],{},"fixed_camera"," 的相机视角。",[133,109959,109960],{"className":31276,"code":108855,"language":31278,"meta":138,"style":138},[140,109961,109962],{"__ignoreMap":138},[143,109963,109964,109966,109968],{"class":145,"line":146},[143,109965,108455],{"class":149},[143,109967,160],{"class":755},[143,109969,108460],{"class":149},[63,109971,109972,109973,109976],{},"真正渲染出图像。",[140,109974,109975],{},"image"," 是一个 NumPy 数组，不是文件。",[133,109978,109980],{"className":31276,"code":109979,"language":31278,"meta":138,"style":138},"Image.fromarray(image).save(output_path)\n",[140,109981,109982],{"__ignoreMap":138},[143,109983,109984],{"class":145,"line":146},[143,109985,109979],{"class":149},[63,109987,109988,109989,29283],{},"把数组转换成图片，并保存到 ",[140,109990,109991],{},"render_output.png",[133,109993,109995],{"className":31276,"code":109994,"language":31278,"meta":138,"style":138},"renderer.close()\n",[140,109996,109997],{"__ignoreMap":138},[143,109998,109999],{"class":145,"line":146},[143,110000,109994],{"class":149},[63,110002,110003],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110005,103192],{"id":103191},[63,110007,110008,110009,110011,110012,29283],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[140,110010,109991],{},"，并输出图像数组形状，例如 ",[140,110013,110014],{},"(480, 640, 3)",[63,110016,110017],{},"如果图片里看不到方块，先检查：",[19,110019,110020,110023,110026],{},[22,110021,110022],{},"方块是否掉到相机视野外。",[22,110024,110025],{},"camera 位置是否合理。",[22,110027,110028,110029,110032],{},"是否在 ",[140,110030,110031],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110034,103224],{"id":103223},[63,110036,110037],{},"运行 viewer:",[133,110039,110041],{"className":24720,"code":110040,"language":24722,"meta":138,"style":138},"python ch5_viewer.py\n",[140,110042,110043],{"__ignoreMap":138},[143,110044,110045,110047],{"class":145,"line":146},[143,110046,31278],{"class":156},[143,110048,109171],{"class":163},[63,110050,110051],{},"运行 renderer:",[133,110053,110055],{"className":24720,"code":110054,"language":24722,"meta":138,"style":138},"python ch5_renderer.py\n",[140,110056,110057],{"__ignoreMap":138},[143,110058,110059,110061],{"class":145,"line":146},[143,110060,31278],{"class":156},[143,110062,109500],{"class":163},[63,110064,110065],{},"如果在服务器上运行:",[133,110067,110069],{"className":24720,"code":110068,"language":24722,"meta":138,"style":138},"MUJOCO_GL=egl python ch5_renderer.py\n",[140,110070,110071],{"__ignoreMap":138},[143,110072,110073,110075,110077,110079,110082],{"class":145,"line":146},[143,110074,108689],{"class":149},[143,110076,160],{"class":755},[143,110078,108679],{"class":163},[143,110080,110081],{"class":156}," python",[143,110083,109500],{"class":163},[63,110085,108657],{},[133,110087,110089],{"className":24720,"code":110088,"language":24722,"meta":138,"style":138},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[140,110090,110091],{"__ignoreMap":138},[143,110092,110093,110095,110097,110099,110101],{"class":145,"line":146},[143,110094,108689],{"class":149},[143,110096,160],{"class":755},[143,110098,108683],{"class":163},[143,110100,110081],{"class":156},[143,110102,109500],{"class":163},[63,110104,110105],{},"再做几个练习：",[19,110107,110108,110115,110118,110124],{},[22,110109,110110,110111,110114],{},"把 renderer 分辨率改成 ",[140,110112,110113],{},"height=240, width=320","，观察输出 shape。",[22,110116,110117],{},"把方块颜色改成蓝色，重新保存图片。",[22,110119,110120,110121,110123],{},"把相机 ",[140,110122,105021],{}," 改远一点，观察画面中物体是否变小。",[22,110125,110126,110127,103290,110130,110133],{},"把 viewer 示例中的 ",[140,110128,110129],{},"data.time \u003C 5.0",[140,110131,110132],{},"data.time \u003C 20.0","，观察更长时间。",[14,110135,103329],{"id":103328},[58,110137,110139],{"id":110138},"viewer-窗口打不开","viewer 窗口打不开",[63,110141,110142],{},"安装:",[133,110144,110146],{"className":24720,"code":110145,"language":24722,"meta":138,"style":138},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[140,110147,110148],{"__ignoreMap":138},[143,110149,110150,110152,110154,110156,110158,110160,110162,110164,110166,110168,110170],{"class":145,"line":146},[143,110151,25474],{"class":156},[143,110153,27213],{"class":163},[143,110155,24732],{"class":163},[143,110157,27298],{"class":280},[143,110159,103382],{"class":163},[143,110161,101710],{"class":163},[143,110163,103387],{"class":163},[143,110165,101723],{"class":163},[143,110167,101729],{"class":163},[143,110169,101720],{"class":163},[143,110171,110172],{"class":163}," libXinerama\n",[58,110174,110176],{"id":110175},"glfwerror",[140,110177,110178],{},"GLFWError",[63,110180,110181],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[58,110183,110185],{"id":110184},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[63,110187,110188,110189,83417,110191,110193],{},"尝试 ",[140,110190,101913],{},[140,110192,101916],{},"。可能存在版本差异。",[58,110195,110196],{"id":110196},"保存图片是黑的",[63,110198,103451],{},[19,110200,110201,110204,110207,110217],{},[22,110202,110203],{},"XML 里是否有 light。",[22,110205,110206],{},"相机是否对着模型。",[22,110208,110209,110210,110213,110214,29283],{},"是否先 ",[140,110211,110212],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[140,110215,110216],{},"renderer.render()",[22,110218,110219],{},"物体是否已经掉出视野。",[58,110221,110222],{"id":110222},"远程服务器没有显示器",[63,110224,110225],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[133,110227,110228],{"className":24720,"code":110068,"language":24722,"meta":138,"style":138},[140,110229,110230],{"__ignoreMap":138},[143,110231,110232,110234,110236,110238,110240],{"class":145,"line":146},[143,110233,108689],{"class":149},[143,110235,160],{"class":755},[143,110237,108679],{"class":163},[143,110239,110081],{"class":156},[143,110241,109500],{"class":163},[63,110243,110244],{},"如果 EGL 不可用，再尝试：",[133,110246,110247],{"className":24720,"code":110088,"language":24722,"meta":138,"style":138},[140,110248,110249],{"__ignoreMap":138},[143,110250,110251,110253,110255,110257,110259],{"class":145,"line":146},[143,110252,108689],{"class":149},[143,110254,160],{"class":755},[143,110256,108683],{"class":163},[143,110258,110081],{"class":156},[143,110260,109500],{"class":163},[14,110262,103483],{"id":103482},[63,110264,110265],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[19,110267,110268,110271,110274],{},[22,110269,110270],{},"先用 viewer 看模型和控制是否正常。",[22,110272,110273],{},"再用 renderer 保存图片或构造视觉观测。",[22,110275,110276],{},"最后把状态、动作、图像、奖励组织成训练数据。",[954,110278,110279],{},"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":138,"searchDepth":35,"depth":35,"links":110281},[110282,110283,110284,110289,110294,110295,110296,110303],{"id":101522,"depth":35,"text":101523},{"id":101645,"depth":35,"text":101646},{"id":101920,"depth":35,"text":101921,"children":110285},[110286,110287,110288],{"id":108786,"depth":46,"text":108787},{"id":108816,"depth":46,"text":108817},{"id":108851,"depth":46,"text":108852},{"id":102128,"depth":35,"text":102129,"children":110290},[110291,110292,110293],{"id":102448,"depth":46,"text":102448},{"id":109596,"depth":46,"text":109597},{"id":109774,"depth":46,"text":109775},{"id":103191,"depth":35,"text":103192},{"id":103223,"depth":35,"text":103224},{"id":103328,"depth":35,"text":103329,"children":110297},[110298,110299,110300,110301,110302],{"id":110138,"depth":46,"text":110139},{"id":110175,"depth":46,"text":110178},{"id":110184,"depth":46,"text":110185},{"id":110196,"depth":46,"text":110196},{"id":110222,"depth":46,"text":110222},{"id":103482,"depth":35,"text":103483},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108394,"description":138},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110310,"title":110311,"body":110312,"description":138,"extension":974,"meta":112223,"navigation":976,"path":112224,"seo":112225,"stem":112226,"__hash__":112227},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110313,"toc":112199},[110314,110317,110319,110322,110324,110343,110346,110352,110355,110357,110359,110383,110385,110399,110401,110442,110444,110455,110457,110460,110466,110469,110503,110506,110538,110541,110573,110577,110580,110620,110623,110629,110632,110638,110642,110645,110651,110654,110658,110661,110701,110703,110716,110719,110721,111303,111305,111317,111320,111331,111333,111336,111355,111367,111370,111391,111394,111397,111440,111443,111446,111466,111473,111475,111493,111508,111511,111517,111520,111526,111543,111550,111581,111592,111626,111637,111654,111663,111671,111676,111690,111693,111714,111720,111734,111739,111769,111779,111804,111812,111835,111838,111854,111857,111865,111871,111893,111906,111927,111936,111975,111986,111988,111991,111997,112000,112003,112009,112012,112032,112035,112037,112076,112078,112081,112089,112092,112095,112122,112125,112135,112141,112144,112150,112152,112158,112162,112165,112167,112170,112194,112197],[10,110315,110311],{"id":110316},"_6控制任务cartpole",[14,110318,101523],{"id":101522},[63,110320,110321],{},"本章搭建一个最小 Cartpole 控制任务。",[63,110323,105206],{},[19,110325,110326,110329,110331,110334,110337,110340],{},[22,110327,110328],{},"slide joint",[22,110330,107059],{},[22,110332,110333],{},"cart force actuator",[22,110335,110336],{},"状态观测",[22,110338,110339],{},"简单控制循环",[22,110341,110342],{},"reward 设计雏形",[63,110344,110345],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[133,110347,110350],{"className":110348,"code":110349,"language":6087,"meta":138},[6085],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[140,110351,110349],{"__ignoreMap":138},[63,110353,110354],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110356,101646],{"id":101645},[63,110358,101649],{},[133,110360,110361],{"className":24720,"code":105263,"language":24722,"meta":138,"style":138},[140,110362,110363],{"__ignoreMap":138},[143,110364,110365,110367,110369,110371,110373,110375,110377,110379,110381],{"class":145,"line":146},[143,110366,25474],{"class":156},[143,110368,27213],{"class":163},[143,110370,24732],{"class":163},[143,110372,27298],{"class":280},[143,110374,105278],{"class":163},[143,110376,101674],{"class":163},[143,110378,103377],{"class":163},[143,110380,101690],{"class":163},[143,110382,105287],{"class":163},[63,110384,103695],{},[133,110386,110387],{"className":24720,"code":101795,"language":24722,"meta":138,"style":138},[140,110388,110389],{"__ignoreMap":138},[143,110390,110391,110393,110395,110397],{"class":145,"line":146},[143,110392,24729],{"class":156},[143,110394,24732],{"class":163},[143,110396,101806],{"class":163},[143,110398,101809],{"class":163},[63,110400,103712],{},[133,110402,110404],{"className":24720,"code":110403,"language":24722,"meta":138,"style":138},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[140,110405,110406,110423,110432],{"__ignoreMap":138},[143,110407,110408,110410,110412,110414,110417,110419,110421],{"class":145,"line":146},[143,110409,31228],{"class":156},[143,110411,30074],{"class":163},[143,110413,26013],{"class":280},[143,110415,110416],{"class":163}," mujoco-cartpole",[143,110418,101851],{"class":163},[143,110420,101854],{"class":280},[143,110422,101857],{"class":280},[143,110424,110425,110427,110429],{"class":145,"line":35},[143,110426,31228],{"class":156},[143,110428,101864],{"class":163},[143,110430,110431],{"class":163}," mujoco-cartpole\n",[143,110433,110434,110436,110438,110440],{"class":145,"line":46},[143,110435,24729],{"class":156},[143,110437,24732],{"class":163},[143,110439,101806],{"class":163},[143,110441,101809],{"class":163},[63,110443,101880],{},[19,110445,110446,110449,110452],{},[22,110447,110448],{},"本章不依赖 Gymnasium。",[22,110450,110451],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[22,110453,110454],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110456,101921],{"id":101920},[63,110458,110459],{},"Cartpole 的模型结构:",[133,110461,110464],{"className":110462,"code":110463,"language":6087,"meta":138},[6085],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[140,110465,110463],{"__ignoreMap":138},[63,110467,110468],{},"小车通过 slide joint 左右移动:",[133,110470,110472],{"className":53954,"code":110471,"language":53956,"meta":138,"style":138},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[140,110473,110474],{"__ignoreMap":138},[143,110475,110476,110478,110480,110482,110484,110487,110489,110491,110494,110496,110498,110501],{"class":145,"line":146},[143,110477,150],{"class":149},[143,110479,103832],{"class":153},[143,110481,15819],{"class":156},[143,110483,160],{"class":149},[143,110485,110486],{"class":163},"\"cart_x\"",[143,110488,54709],{"class":156},[143,110490,160],{"class":149},[143,110492,110493],{"class":163},"\"slide\"",[143,110495,106903],{"class":156},[143,110497,160],{"class":149},[143,110499,110500],{"class":163},"\"1 0 0\"",[143,110502,102020],{"class":149},[63,110504,110505],{},"杆子通过 hinge joint 旋转:",[133,110507,110509],{"className":53954,"code":110508,"language":53956,"meta":138,"style":138},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[140,110510,110511],{"__ignoreMap":138},[143,110512,110513,110515,110517,110519,110521,110524,110526,110528,110530,110532,110534,110536],{"class":145,"line":146},[143,110514,150],{"class":149},[143,110516,103832],{"class":153},[143,110518,15819],{"class":156},[143,110520,160],{"class":149},[143,110522,110523],{"class":163},"\"pole_hinge\"",[143,110525,54709],{"class":156},[143,110527,160],{"class":149},[143,110529,106894],{"class":163},[143,110531,106903],{"class":156},[143,110533,160],{"class":149},[143,110535,106908],{"class":163},[143,110537,102020],{"class":149},[63,110539,110540],{},"控制力作用在小车 slide joint 上:",[133,110542,110544],{"className":53954,"code":110543,"language":53956,"meta":138,"style":138},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[140,110545,110546],{"__ignoreMap":138},[143,110547,110548,110550,110552,110554,110556,110559,110561,110563,110565,110567,110569,110571],{"class":145,"line":146},[143,110549,150],{"class":149},[143,110551,106949],{"class":153},[143,110553,15819],{"class":156},[143,110555,160],{"class":149},[143,110557,110558],{"class":163},"\"cart_motor\"",[143,110560,106959],{"class":156},[143,110562,160],{"class":149},[143,110564,110486],{"class":163},[143,110566,106966],{"class":156},[143,110568,160],{"class":149},[143,110570,55201],{"class":163},[143,110572,102020],{"class":149},[58,110574,110576],{"id":110575},"cartpole-的状态是什么","Cartpole 的状态是什么",[63,110578,110579],{},"这个简化模型有两个关节：",[1181,110581,110582,110593],{},[1184,110583,110584],{},[1187,110585,110586,110588,110590],{},[1190,110587,103635],{"align":24634},[1190,110589,24635],{"align":24634},[1190,110591,110592],{"align":24634},"对应状态",[1227,110594,110595,110608],{},[1187,110596,110597,110602,110605],{},[1232,110598,110599],{"align":24634},[140,110600,110601],{},"cart_x",[1232,110603,110604],{"align":24634},"slide",[1232,110606,110607],{"align":24634},"小车 x 位置",[1187,110609,110610,110615,110617],{},[1232,110611,110612],{"align":24634},[140,110613,110614],{},"pole_hinge",[1232,110616,106715],{"align":24634},[1232,110618,110619],{"align":24634},"杆子角度",[63,110621,110622],{},"所以：",[133,110624,110627],{"className":110625,"code":110626,"language":6087,"meta":138},[6085],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[140,110628,110626],{"__ignoreMap":138},[63,110630,110631],{},"把它们拼起来就是观测：",[133,110633,110636],{"className":110634,"code":110635,"language":6087,"meta":138},[6085],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[140,110637,110635],{"__ignoreMap":138},[58,110639,110641],{"id":110640},"action-是什么","action 是什么",[63,110643,110644],{},"本章只有一个 actuator：",[133,110646,110649],{"className":110647,"code":110648,"language":6087,"meta":138},[6085],"data.ctrl[0] = action\n",[140,110650,110648],{"__ignoreMap":138},[63,110652,110653],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[58,110655,110657],{"id":110656},"reward-是什么","reward 是什么",[63,110659,110660],{},"奖励函数：",[133,110662,110664],{"className":31276,"code":110663,"language":31278,"meta":138,"style":138},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[140,110665,110666],{"__ignoreMap":138},[143,110667,110668,110670,110673,110675,110677,110679,110682,110684,110687,110689,110691,110693,110696,110698],{"class":145,"line":146},[143,110669,17944],{"class":755},[143,110671,110672],{"class":280}," float",[143,110674,1049],{"class":149},[143,110676,103279],{"class":280},[143,110678,53158],{"class":755},[143,110680,110681],{"class":280}," 0.1",[143,110683,7418],{"class":755},[143,110685,110686],{"class":149}," cart_x ",[143,110688,1496],{"class":755},[143,110690,110686],{"class":149},[143,110692,1573],{"class":755},[143,110694,110695],{"class":149}," pole_angle ",[143,110697,1496],{"class":755},[143,110699,110700],{"class":149}," pole_angle)\n",[63,110702,107101],{},[19,110704,110705,110710,110713],{},[22,110706,110707,110708,29283],{},"基础奖励是 ",[140,110709,103279],{},[22,110711,110712],{},"小车离中心越远，扣分越多。",[22,110714,110715],{},"杆子角度越大，扣分越多。",[63,110717,110718],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110720,102129],{"id":102128},[133,110722,110724],{"className":31276,"code":110723,"language":31278,"meta":138,"style":138},"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",[140,110725,110726,110732,110742,110746,110750,110758,110763,110767,110771,110775,110780,110784,110789,110794,110799,110803,110808,110813,110818,110822,110826,110830,110834,110838,110843,110847,110851,110855,110859,110863,110873,110880,110884,110888,110902,110916,110929,110959,110963,110967,110979,110991,110999,111003,111016,111020,111024,111033,111037,111053,111063,111076,111089,111093,111116,111134,111138,111150,111154,111158,111168,111178,111182,111198,111239,111243,111263,111279,111283,111287,111299],{"__ignoreMap":138},[143,110727,110728,110730],{"class":145,"line":146},[143,110729,31290],{"class":755},[143,110731,102177],{"class":149},[143,110733,110734,110736,110738,110740],{"class":145,"line":35},[143,110735,31290],{"class":755},[143,110737,32278],{"class":149},[143,110739,32281],{"class":755},[143,110741,32284],{"class":149},[143,110743,110744],{"class":145,"line":46},[143,110745,3300],{"emptyLinePlaceholder":976},[143,110747,110748],{"class":145,"line":293},[143,110749,3300],{"emptyLinePlaceholder":976},[143,110751,110752,110754,110756],{"class":145,"line":306},[143,110753,102190],{"class":280},[143,110755,14464],{"class":755},[143,110757,102195],{"class":163},[143,110759,110760],{"class":145,"line":319},[143,110761,110762],{"class":163},"\u003Cmujoco model=\"cartpole\">\n",[143,110764,110765],{"class":145,"line":332},[143,110766,102205],{"class":163},[143,110768,110769],{"class":145,"line":345},[143,110770,3300],{"emptyLinePlaceholder":976},[143,110772,110773],{"class":145,"line":701},[143,110774,102214],{"class":163},[143,110776,110777],{"class":145,"line":707},[143,110778,110779],{"class":163},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[143,110781,110782],{"class":145,"line":727},[143,110783,3300],{"emptyLinePlaceholder":976},[143,110785,110786],{"class":145,"line":2518},[143,110787,110788],{"class":163},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[143,110790,110791],{"class":145,"line":2524},[143,110792,110793],{"class":163},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[143,110795,110796],{"class":145,"line":2529},[143,110797,110798],{"class":163},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[143,110800,110801],{"class":145,"line":2543},[143,110802,3300],{"emptyLinePlaceholder":976},[143,110804,110805],{"class":145,"line":2548},[143,110806,110807],{"class":163},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[143,110809,110810],{"class":145,"line":2554},[143,110811,110812],{"class":163},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[143,110814,110815],{"class":145,"line":2575},[143,110816,110817],{"class":163},"        \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",[143,110819,110820],{"class":145,"line":2580},[143,110821,107313],{"class":163},[143,110823,110824],{"class":145,"line":2594},[143,110825,102243],{"class":163},[143,110827,110828],{"class":145,"line":2599},[143,110829,102248],{"class":163},[143,110831,110832],{"class":145,"line":2628},[143,110833,3300],{"emptyLinePlaceholder":976},[143,110835,110836],{"class":145,"line":2633},[143,110837,107330],{"class":163},[143,110839,110840],{"class":145,"line":2650},[143,110841,110842],{"class":163},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[143,110844,110845],{"class":145,"line":2655},[143,110846,107340],{"class":163},[143,110848,110849],{"class":145,"line":2660},[143,110850,102253],{"class":163},[143,110852,110853],{"class":145,"line":2665},[143,110854,96574],{"class":163},[143,110856,110857],{"class":145,"line":2679},[143,110858,3300],{"emptyLinePlaceholder":976},[143,110860,110861],{"class":145,"line":2684},[143,110862,3300],{"emptyLinePlaceholder":976},[143,110864,110865,110867,110870],{"class":145,"line":3477},[143,110866,32845],{"class":755},[143,110868,110869],{"class":156}," get_observation",[143,110871,110872],{"class":149},"(data: mujoco.MjData) -> np.ndarray:\n",[143,110874,110875,110877],{"class":145,"line":3491},[143,110876,4990],{"class":755},[143,110878,110879],{"class":149}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[143,110881,110882],{"class":145,"line":3499},[143,110883,3300],{"emptyLinePlaceholder":976},[143,110885,110886],{"class":145,"line":3504},[143,110887,3300],{"emptyLinePlaceholder":976},[143,110889,110890,110892,110895,110898,110900],{"class":145,"line":3510},[143,110891,32845],{"class":755},[143,110893,110894],{"class":156}," compute_reward",[143,110896,110897],{"class":149},"(obs: np.ndarray) -> ",[143,110899,1087],{"class":280},[143,110901,4639],{"class":149},[143,110903,110904,110907,110909,110912,110914],{"class":145,"line":3516},[143,110905,110906],{"class":149},"    cart_x ",[143,110908,160],{"class":755},[143,110910,110911],{"class":149}," obs[",[143,110913,1234],{"class":280},[143,110915,34144],{"class":149},[143,110917,110918,110921,110923,110925,110927],{"class":145,"line":3521},[143,110919,110920],{"class":149},"    pole_angle ",[143,110922,160],{"class":755},[143,110924,110911],{"class":149},[143,110926,771],{"class":280},[143,110928,34144],{"class":149},[143,110930,110931,110933,110935,110937,110939,110941,110943,110945,110947,110949,110951,110953,110955,110957],{"class":145,"line":8848},[143,110932,4990],{"class":755},[143,110934,110672],{"class":280},[143,110936,1049],{"class":149},[143,110938,103279],{"class":280},[143,110940,53158],{"class":755},[143,110942,110681],{"class":280},[143,110944,7418],{"class":755},[143,110946,110686],{"class":149},[143,110948,1496],{"class":755},[143,110950,110686],{"class":149},[143,110952,1573],{"class":755},[143,110954,110695],{"class":149},[143,110956,1496],{"class":755},[143,110958,110700],{"class":149},[143,110960,110961],{"class":145,"line":8872},[143,110962,3300],{"emptyLinePlaceholder":976},[143,110964,110965],{"class":145,"line":8877},[143,110966,3300],{"emptyLinePlaceholder":976},[143,110968,110969,110971,110973,110975,110977],{"class":145,"line":8883},[143,110970,32845],{"class":755},[143,110972,2873],{"class":156},[143,110974,102274],{"class":149},[143,110976,96562],{"class":280},[143,110978,4639],{"class":149},[143,110980,110981,110983,110985,110987,110989],{"class":145,"line":8910},[143,110982,102283],{"class":149},[143,110984,160],{"class":755},[143,110986,102288],{"class":149},[143,110988,102190],{"class":280},[143,110990,1055],{"class":149},[143,110992,110993,110995,110997],{"class":145,"line":8915},[143,110994,102297],{"class":149},[143,110996,160],{"class":755},[143,110998,102302],{"class":149},[143,111000,111001],{"class":145,"line":8921},[143,111002,3300],{"emptyLinePlaceholder":976},[143,111004,111005,111007,111009,111011,111013],{"class":145,"line":8933},[143,111006,105944],{"class":149},[143,111008,771],{"class":280},[143,111010,5343],{"class":149},[143,111012,160],{"class":755},[143,111014,111015],{"class":280}," 0.1\n",[143,111017,111018],{"class":145,"line":8945},[143,111019,105957],{"class":149},[143,111021,111022],{"class":145,"line":8957},[143,111023,3300],{"emptyLinePlaceholder":976},[143,111025,111026,111029,111031],{"class":145,"line":10616},[143,111027,111028],{"class":149},"    total_reward ",[143,111030,160],{"class":755},[143,111032,105636],{"class":280},[143,111034,111035],{"class":145,"line":10641},[143,111036,3300],{"emptyLinePlaceholder":976},[143,111038,111039,111041,111043,111045,111047,111049,111051],{"class":145,"line":10664},[143,111040,4101],{"class":755},[143,111042,32514],{"class":149},[143,111044,26941],{"class":755},[143,111046,33341],{"class":280},[143,111048,1049],{"class":149},[143,111050,7310],{"class":280},[143,111052,31684],{"class":149},[143,111054,111055,111058,111060],{"class":145,"line":10688},[143,111056,111057],{"class":149},"        obs ",[143,111059,160],{"class":755},[143,111061,111062],{"class":149}," get_observation(data)\n",[143,111064,111065,111068,111070,111072,111074],{"class":145,"line":10693},[143,111066,111067],{"class":149},"        pole_angle ",[143,111069,160],{"class":755},[143,111071,110911],{"class":149},[143,111073,771],{"class":280},[143,111075,34144],{"class":149},[143,111077,111078,111081,111083,111085,111087],{"class":145,"line":10698},[143,111079,111080],{"class":149},"        pole_angular_velocity ",[143,111082,160],{"class":755},[143,111084,110911],{"class":149},[143,111086,1116],{"class":280},[143,111088,34144],{"class":149},[143,111090,111091],{"class":145,"line":10703},[143,111092,3300],{"emptyLinePlaceholder":976},[143,111094,111095,111098,111100,111103,111105,111107,111109,111111,111113],{"class":145,"line":10712},[143,111096,111097],{"class":149},"        action ",[143,111099,160],{"class":755},[143,111101,111102],{"class":280}," 2.0",[143,111104,7418],{"class":755},[143,111106,110695],{"class":149},[143,111108,1522],{"class":755},[143,111110,62750],{"class":280},[143,111112,7418],{"class":755},[143,111114,111115],{"class":149}," pole_angular_velocity\n",[143,111117,111118,111120,111122,111124,111126,111128,111130,111132],{"class":145,"line":10717},[143,111119,111097],{"class":149},[143,111121,160],{"class":755},[143,111123,108322],{"class":149},[143,111125,1573],{"class":755},[143,111127,103279],{"class":280},[143,111129,13335],{"class":149},[143,111131,103279],{"class":280},[143,111133,1055],{"class":149},[143,111135,111136],{"class":145,"line":10723},[143,111137,3300],{"emptyLinePlaceholder":976},[143,111139,111140,111142,111144,111146,111148],{"class":145,"line":10744},[143,111141,107492],{"class":149},[143,111143,1234],{"class":280},[143,111145,5343],{"class":149},[143,111147,160],{"class":755},[143,111149,108345],{"class":149},[143,111151,111152],{"class":145,"line":10750},[143,111153,102392],{"class":149},[143,111155,111156],{"class":145,"line":10764},[143,111157,3300],{"emptyLinePlaceholder":976},[143,111159,111160,111163,111165],{"class":145,"line":10770},[143,111161,111162],{"class":149},"        reward ",[143,111164,160],{"class":755},[143,111166,111167],{"class":149}," compute_reward(get_observation(data))\n",[143,111169,111170,111173,111175],{"class":145,"line":10797},[143,111171,111172],{"class":149},"        total_reward ",[143,111174,10377],{"class":755},[143,111176,111177],{"class":149}," reward\n",[143,111179,111180],{"class":145,"line":10806},[143,111181,3300],{"emptyLinePlaceholder":976},[143,111183,111184,111186,111188,111190,111192,111194,111196],{"class":145,"line":10812},[143,111185,3397],{"class":755},[143,111187,32514],{"class":149},[143,111189,1369],{"class":755},[143,111191,6654],{"class":280},[143,111193,102435],{"class":755},[143,111195,4993],{"class":280},[143,111197,4639],{"class":149},[143,111199,111200,111202,111204,111207,111210,111213,111216,111218,111221,111224,111226,111228,111230,111232,111235,111237],{"class":145,"line":10820},[143,111201,35548],{"class":280},[143,111203,1049],{"class":149},[143,111205,111206],{"class":163},"\"step:\"",[143,111208,111209],{"class":149},", step, ",[143,111211,111212],{"class":163},"\"obs:\"",[143,111214,111215],{"class":149},", np.round(obs, ",[143,111217,1116],{"class":280},[143,111219,111220],{"class":149},"), ",[143,111222,111223],{"class":163},"\"action:\"",[143,111225,13335],{"class":149},[143,111227,32916],{"class":280},[143,111229,1049],{"class":149},[143,111231,1087],{"class":280},[143,111233,111234],{"class":149},"(action), ",[143,111236,1116],{"class":280},[143,111238,31395],{"class":149},[143,111240,111241],{"class":145,"line":10825},[143,111242,3300],{"emptyLinePlaceholder":976},[143,111244,111245,111247,111249,111252,111254,111256,111259,111261],{"class":145,"line":17502},[143,111246,32197],{"class":280},[143,111248,1049],{"class":149},[143,111250,111251],{"class":163},"\"total_reward:\"",[143,111253,13335],{"class":149},[143,111255,32916],{"class":280},[143,111257,111258],{"class":149},"(total_reward, ",[143,111260,1116],{"class":280},[143,111262,31395],{"class":149},[143,111264,111265,111267,111269,111272,111275,111277],{"class":145,"line":17508},[143,111266,32197],{"class":280},[143,111268,1049],{"class":149},[143,111270,111271],{"class":163},"\"final obs:\"",[143,111273,111274],{"class":149},", np.round(get_observation(data), ",[143,111276,1116],{"class":280},[143,111278,31395],{"class":149},[143,111280,111281],{"class":145,"line":17531},[143,111282,3300],{"emptyLinePlaceholder":976},[143,111284,111285],{"class":145,"line":17537},[143,111286,3300],{"emptyLinePlaceholder":976},[143,111288,111289,111291,111293,111295,111297],{"class":145,"line":17560},[143,111290,2434],{"class":755},[143,111292,32118],{"class":280},[143,111294,102435],{"class":755},[143,111296,102438],{"class":163},[143,111298,4639],{"class":149},[143,111300,111301],{"class":145,"line":17574},[143,111302,102445],{"class":149},[63,111304,104445],{},[133,111306,111308],{"className":24720,"code":111307,"language":24722,"meta":138,"style":138},"touch ch6_cartpole.py\n",[140,111309,111310],{"__ignoreMap":138},[143,111311,111312,111314],{"class":145,"line":146},[143,111313,102159],{"class":156},[143,111315,111316],{"class":163}," ch6_cartpole.py\n",[63,111318,111319],{},"运行：",[133,111321,111323],{"className":24720,"code":111322,"language":24722,"meta":138,"style":138},"python ch6_cartpole.py\n",[140,111324,111325],{"__ignoreMap":138},[143,111326,111327,111329],{"class":145,"line":146},[143,111328,31278],{"class":156},[143,111330,111316],{"class":163},[58,111332,102448],{"id":102448},[63,111334,111335],{},"构造观测：",[133,111337,111339],{"className":31276,"code":111338,"language":31278,"meta":138,"style":138},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[140,111340,111341,111349],{"__ignoreMap":138},[143,111342,111343,111345,111347],{"class":145,"line":146},[143,111344,32845],{"class":755},[143,111346,110869],{"class":156},[143,111348,110872],{"class":149},[143,111350,111351,111353],{"class":145,"line":35},[143,111352,4990],{"class":755},[143,111354,110879],{"class":149},[63,111356,111357,111360,111361,111363,111364,111366],{},[140,111358,111359],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[140,111362,104905],{}," 2 维，",[140,111365,105235],{}," 2 维，所以 obs 是 4 维。",[63,111368,111369],{},"设置初始角度：",[133,111371,111373],{"className":31276,"code":111372,"language":31278,"meta":138,"style":138},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[140,111374,111375,111387],{"__ignoreMap":138},[143,111376,111377,111379,111381,111383,111385],{"class":145,"line":146},[143,111378,105574],{"class":149},[143,111380,771],{"class":280},[143,111382,5343],{"class":149},[143,111384,160],{"class":755},[143,111386,111015],{"class":280},[143,111388,111389],{"class":145,"line":35},[143,111390,105418],{"class":149},[63,111392,111393],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[63,111395,111396],{},"简单反馈控制：",[133,111398,111400],{"className":31276,"code":111399,"language":31278,"meta":138,"style":138},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[140,111401,111402,111422],{"__ignoreMap":138},[143,111403,111404,111406,111408,111410,111412,111414,111416,111418,111420],{"class":145,"line":146},[143,111405,108317],{"class":149},[143,111407,160],{"class":755},[143,111409,111102],{"class":280},[143,111411,7418],{"class":755},[143,111413,110695],{"class":149},[143,111415,1522],{"class":755},[143,111417,62750],{"class":280},[143,111419,7418],{"class":755},[143,111421,111115],{"class":149},[143,111423,111424,111426,111428,111430,111432,111434,111436,111438],{"class":145,"line":35},[143,111425,108317],{"class":149},[143,111427,160],{"class":755},[143,111429,108322],{"class":149},[143,111431,1573],{"class":755},[143,111433,103279],{"class":280},[143,111435,13335],{"class":149},[143,111437,103279],{"class":280},[143,111439,1055],{"class":149},[63,111441,111442],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[63,111444,111445],{},"限制动作：",[133,111447,111449],{"className":31276,"code":111448,"language":31278,"meta":138,"style":138},"np.clip(action, -1.0, 1.0)\n",[140,111450,111451],{"__ignoreMap":138},[143,111452,111453,111456,111458,111460,111462,111464],{"class":145,"line":146},[143,111454,111455],{"class":149},"np.clip(action, ",[143,111457,1573],{"class":755},[143,111459,103279],{"class":280},[143,111461,13335],{"class":149},[143,111463,103279],{"class":280},[143,111465,1055],{"class":149},[63,111467,111468,111469,111472],{},"因为 XML 里 ",[140,111470,111471],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[58,111474,102584],{"id":102584},[133,111476,111477],{"className":31276,"code":111338,"language":31278,"meta":138,"style":138},[140,111478,111479,111487],{"__ignoreMap":138},[143,111480,111481,111483,111485],{"class":145,"line":146},[143,111482,32845],{"class":755},[143,111484,110869],{"class":156},[143,111486,110872],{"class":149},[143,111488,111489,111491],{"class":145,"line":35},[143,111490,4990],{"class":755},[143,111492,110879],{"class":149},[63,111494,111495,111496,111499,111500,111503,111504,111507],{},"这段定义了一个函数，用来获取当前观测。",[140,111497,111498],{},"data.qpos.copy()"," 是位置数组副本，",[140,111501,111502],{},"data.qvel.copy()"," 是速度数组副本。",[140,111505,111506],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[63,111509,111510],{},"在本章模型里：",[133,111512,111515],{"className":111513,"code":111514,"language":6087,"meta":138},[6085],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[140,111516,111514],{"__ignoreMap":138},[63,111518,111519],{},"所以返回的 obs 是：",[133,111521,111524],{"className":111522,"code":111523,"language":6087,"meta":138},[6085],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[140,111525,111523],{"__ignoreMap":138},[133,111527,111529],{"className":31276,"code":111528,"language":31278,"meta":138,"style":138},"def compute_reward(obs: np.ndarray) -> float:\n",[140,111530,111531],{"__ignoreMap":138},[143,111532,111533,111535,111537,111539,111541],{"class":145,"line":146},[143,111534,32845],{"class":755},[143,111536,110894],{"class":156},[143,111538,110897],{"class":149},[143,111540,1087],{"class":280},[143,111542,4639],{"class":149},[63,111544,111545,111546,111549],{},"这行定义奖励函数。输入是观测 ",[140,111547,111548],{},"obs","，输出是一个浮点数奖励。",[133,111551,111553],{"className":31276,"code":111552,"language":31278,"meta":138,"style":138},"cart_x = obs[0]\npole_angle = obs[1]\n",[140,111554,111555,111568],{"__ignoreMap":138},[143,111556,111557,111560,111562,111564,111566],{"class":145,"line":146},[143,111558,111559],{"class":149},"cart_x ",[143,111561,160],{"class":755},[143,111563,110911],{"class":149},[143,111565,1234],{"class":280},[143,111567,34144],{"class":149},[143,111569,111570,111573,111575,111577,111579],{"class":145,"line":35},[143,111571,111572],{"class":149},"pole_angle ",[143,111574,160],{"class":755},[143,111576,110911],{"class":149},[143,111578,771],{"class":280},[143,111580,34144],{"class":149},[63,111582,111583,111584,111587,111588,111591],{},"数组索引从 0 开始。",[140,111585,111586],{},"obs[0]"," 是第一个元素，也就是小车位置。",[140,111589,111590],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[133,111593,111594],{"className":31276,"code":110663,"language":31278,"meta":138,"style":138},[140,111595,111596],{"__ignoreMap":138},[143,111597,111598,111600,111602,111604,111606,111608,111610,111612,111614,111616,111618,111620,111622,111624],{"class":145,"line":146},[143,111599,17944],{"class":755},[143,111601,110672],{"class":280},[143,111603,1049],{"class":149},[143,111605,103279],{"class":280},[143,111607,53158],{"class":755},[143,111609,110681],{"class":280},[143,111611,7418],{"class":755},[143,111613,110686],{"class":149},[143,111615,1496],{"class":755},[143,111617,110686],{"class":149},[143,111619,1573],{"class":755},[143,111621,110695],{"class":149},[143,111623,1496],{"class":755},[143,111625,110700],{"class":149},[63,111627,111628,111629,111632,111633,111636],{},"这行计算奖励。",[140,111630,111631],{},"cart_x * cart_x"," 是小车位置的平方，",[140,111634,111635],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[133,111638,111640],{"className":31276,"code":111639,"language":31278,"meta":138,"style":138},"data.qpos[1] = 0.1\n",[140,111641,111642],{"__ignoreMap":138},[143,111643,111644,111646,111648,111650,111652],{"class":145,"line":146},[143,111645,105574],{"class":149},[143,111647,771],{"class":280},[143,111649,5343],{"class":149},[143,111651,160],{"class":755},[143,111653,111015],{"class":280},[63,111655,111656,111657,111659,111660,111662],{},"手动设置杆子的初始角度。因为 ",[140,111658,106331],{}," 是小车位置，",[140,111661,106334],{}," 是杆子角度，所以这里改的是杆子。",[133,111664,111665],{"className":31276,"code":105418,"language":31278,"meta":138,"style":138},[140,111666,111667],{"__ignoreMap":138},[143,111668,111669],{"class":145,"line":146},[143,111670,105418],{"class":149},[63,111672,106377,111673,111675],{},[140,111674,104905],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[133,111677,111679],{"className":31276,"code":111678,"language":31278,"meta":138,"style":138},"total_reward = 0.0\n",[140,111680,111681],{"__ignoreMap":138},[143,111682,111683,111686,111688],{"class":145,"line":146},[143,111684,111685],{"class":149},"total_reward ",[143,111687,160],{"class":755},[143,111689,105636],{"class":280},[63,111691,111692],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[133,111694,111696],{"className":31276,"code":111695,"language":31278,"meta":138,"style":138},"for step in range(1000):\n",[140,111697,111698],{"__ignoreMap":138},[143,111699,111700,111702,111704,111706,111708,111710,111712],{"class":145,"line":146},[143,111701,3925],{"class":755},[143,111703,32514],{"class":149},[143,111705,26941],{"class":755},[143,111707,33341],{"class":280},[143,111709,1049],{"class":149},[143,111711,7310],{"class":280},[143,111713,31684],{"class":149},[63,111715,111716,111717,111719],{},"循环 1000 步。",[140,111718,108009],{}," 是当前步数，从 0 到 999。",[133,111721,111723],{"className":31276,"code":111722,"language":31278,"meta":138,"style":138},"obs = get_observation(data)\n",[140,111724,111725],{"__ignoreMap":138},[143,111726,111727,111730,111732],{"class":145,"line":146},[143,111728,111729],{"class":149},"obs ",[143,111731,160],{"class":755},[143,111733,111062],{"class":149},[63,111735,111736,111737,29283],{},"读取当前状态，保存到 ",[140,111738,111548],{},[133,111740,111742],{"className":31276,"code":111741,"language":31278,"meta":138,"style":138},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[140,111743,111744,111756],{"__ignoreMap":138},[143,111745,111746,111748,111750,111752,111754],{"class":145,"line":146},[143,111747,111572],{"class":149},[143,111749,160],{"class":755},[143,111751,110911],{"class":149},[143,111753,771],{"class":280},[143,111755,34144],{"class":149},[143,111757,111758,111761,111763,111765,111767],{"class":145,"line":35},[143,111759,111760],{"class":149},"pole_angular_velocity ",[143,111762,160],{"class":755},[143,111764,110911],{"class":149},[143,111766,1116],{"class":280},[143,111768,34144],{"class":149},[63,111770,111771,111772,111775,111776,29283],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[140,111773,111774],{},"obs[3]","？因为 obs 的顺序是 ",[140,111777,111778],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[133,111780,111782],{"className":31276,"code":111781,"language":31278,"meta":138,"style":138},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[140,111783,111784],{"__ignoreMap":138},[143,111785,111786,111788,111790,111792,111794,111796,111798,111800,111802],{"class":145,"line":146},[143,111787,108317],{"class":149},[143,111789,160],{"class":755},[143,111791,111102],{"class":280},[143,111793,7418],{"class":755},[143,111795,110695],{"class":149},[143,111797,1522],{"class":755},[143,111799,62750],{"class":280},[143,111801,7418],{"class":755},[143,111803,111115],{"class":149},[63,111805,111806,111807,101894,111809,111811],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[140,111808,106135],{},[140,111810,36227],{}," 是人为设置的系数，不是固定公式。",[133,111813,111815],{"className":31276,"code":111814,"language":31278,"meta":138,"style":138},"action = np.clip(action, -1.0, 1.0)\n",[140,111816,111817],{"__ignoreMap":138},[143,111818,111819,111821,111823,111825,111827,111829,111831,111833],{"class":145,"line":146},[143,111820,108317],{"class":149},[143,111822,160],{"class":755},[143,111824,108322],{"class":149},[143,111826,1573],{"class":755},[143,111828,103279],{"class":280},[143,111830,13335],{"class":149},[143,111832,103279],{"class":280},[143,111834,1055],{"class":149},[63,111836,111837],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[133,111839,111840],{"className":31276,"code":110648,"language":31278,"meta":138,"style":138},[140,111841,111842],{"__ignoreMap":138},[143,111843,111844,111846,111848,111850,111852],{"class":145,"line":146},[143,111845,106746],{"class":149},[143,111847,1234],{"class":280},[143,111849,5343],{"class":149},[143,111851,160],{"class":755},[143,111853,108345],{"class":149},[63,111855,111856],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[133,111858,111859],{"className":31276,"code":105380,"language":31278,"meta":138,"style":138},[140,111860,111861],{"__ignoreMap":138},[143,111862,111863],{"class":145,"line":146},[143,111864,105380],{"class":149},[63,111866,111867,111868,111870],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[140,111869,107001],{}," 计算小车和杆子的下一刻状态。",[133,111872,111874],{"className":31276,"code":111873,"language":31278,"meta":138,"style":138},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[140,111875,111876,111885],{"__ignoreMap":138},[143,111877,111878,111881,111883],{"class":145,"line":146},[143,111879,111880],{"class":149},"reward ",[143,111882,160],{"class":755},[143,111884,111167],{"class":149},[143,111886,111887,111889,111891],{"class":145,"line":35},[143,111888,111685],{"class":149},[143,111890,10377],{"class":755},[143,111892,111177],{"class":149},[63,111894,111895,111896,111898,111899,111902,111903,29283],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[140,111897,10377],{}," 是简写，",[140,111900,111901],{},"total_reward += reward"," 等价于 ",[140,111904,111905],{},"total_reward = total_reward + reward",[133,111907,111909],{"className":31276,"code":111908,"language":31278,"meta":138,"style":138},"if step % 100 == 0:\n",[140,111910,111911],{"__ignoreMap":138},[143,111912,111913,111915,111917,111919,111921,111923,111925],{"class":145,"line":146},[143,111914,2434],{"class":755},[143,111916,32514],{"class":149},[143,111918,1369],{"class":755},[143,111920,6654],{"class":280},[143,111922,102435],{"class":755},[143,111924,4993],{"class":280},[143,111926,4639],{"class":149},[63,111928,111929,111931,111932,111935],{},[140,111930,1369],{}," 是取余数。",[140,111933,111934],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[133,111937,111939],{"className":31276,"code":111938,"language":31278,"meta":138,"style":138},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[140,111940,111941],{"__ignoreMap":138},[143,111942,111943,111945,111947,111949,111951,111953,111955,111957,111959,111961,111963,111965,111967,111969,111971,111973],{"class":145,"line":146},[143,111944,31313],{"class":280},[143,111946,1049],{"class":149},[143,111948,111206],{"class":163},[143,111950,111209],{"class":149},[143,111952,111212],{"class":163},[143,111954,111215],{"class":149},[143,111956,1116],{"class":280},[143,111958,111220],{"class":149},[143,111960,111223],{"class":163},[143,111962,13335],{"class":149},[143,111964,32916],{"class":280},[143,111966,1049],{"class":149},[143,111968,1087],{"class":280},[143,111970,111234],{"class":149},[143,111972,1116],{"class":280},[143,111974,31395],{"class":149},[63,111976,111977,111978,111981,111982,111985],{},"打印当前步数、观测和动作。",[140,111979,111980],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[140,111983,111984],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111987,103192],{"id":103191},[63,111989,111990],{},"观测向量:",[133,111992,111995],{"className":111993,"code":111994,"language":6087,"meta":138},[6085],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[140,111996,111994],{"__ignoreMap":138},[63,111998,111999],{},"控制器是教学用的简单线性反馈，不保证最优。",[63,112001,112002],{},"每隔 100 步会打印一次：",[133,112004,112007],{"className":112005,"code":112006,"language":6087,"meta":138},[6085],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[140,112008,112006],{"__ignoreMap":138},[63,112010,112011],{},"重点观察：",[19,112013,112014,112020,112025],{},[22,112015,112016,112019],{},[140,112017,112018],{},"pole_angle"," 是否越来越大。",[22,112021,112022,112024],{},[140,112023,110601],{}," 是否跑得太远。",[22,112026,112027,112028,83417,112030,29283],{},"action 是否经常被 clip 到 ",[140,112029,104790],{},[140,112031,771],{},[63,112033,112034],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112036,103224],{"id":103223},[19,112038,112039,112045,112048,112054,112064,112070,112073],{},[22,112040,112041,112042,29283],{},"把初始角度改为 ",[140,112043,112044],{},"data.qpos[1] = 0.3",[22,112046,112047],{},"重新运行，观察控制是否变差。",[22,112049,112050,112051,112053],{},"把 actuator ",[140,112052,107942],{}," 改小。",[22,112055,112056,112057,112060,112061,29283],{},"打印 ",[140,112058,112059],{},"model.nq, model.nv, model.nu","，应为 ",[140,112062,112063],{},"2 2 1",[22,112065,112066,112067,112069],{},"把 reward 里的 ",[140,112068,111635],{}," 系数改大，观察总奖励变化。",[22,112071,112072],{},"把控制器改成反号，观察杆子是否更容易倒。",[22,112074,112075],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112077,103329],{"id":103328},[58,112079,112080],{"id":112080},"杆子方向和预期不一致",[63,112082,103272,112083,112085,112086,112088],{},[140,112084,107114],{}," 和 capsule 的 ",[140,112087,104051],{},"，必要时用 viewer 可视化确认。",[58,112090,112091],{"id":112091},"控制器越控越倒",[63,112093,112094],{},"说明反馈符号可能反了，尝试:",[133,112096,112098],{"className":31276,"code":112097,"language":31278,"meta":138,"style":138},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[140,112099,112100],{"__ignoreMap":138},[143,112101,112102,112104,112106,112108,112110,112112,112114,112116,112118,112120],{"class":145,"line":146},[143,112103,108317],{"class":149},[143,112105,160],{"class":755},[143,112107,53158],{"class":755},[143,112109,106135],{"class":280},[143,112111,7418],{"class":755},[143,112113,110695],{"class":149},[143,112115,1573],{"class":755},[143,112117,62750],{"class":280},[143,112119,7418],{"class":755},[143,112121,111115],{"class":149},[58,112123,112124],{"id":112124},"小车飞走",[63,112126,112127,112128,112130,112131,112134],{},"降低 ",[140,112129,107942],{}," 或缩小 ",[140,112132,112133],{},"action"," 的 clip 范围。",[58,112136,112138,112140],{"id":112137},"obs3-为什么是杆子角速度",[140,112139,111774],{}," 为什么是杆子角速度",[63,112142,112143],{},"因为这个模型里：",[133,112145,112148],{"className":112146,"code":112147,"language":6087,"meta":138},[6085],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[140,112149,112147],{"__ignoreMap":138},[63,112151,110622],{},[133,112153,112156],{"className":112154,"code":112155,"language":6087,"meta":138},[6085],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[140,112157,112155],{"__ignoreMap":138},[58,112159,112161],{"id":112160},"reward-变成负数是否错误","reward 变成负数是否错误",[63,112163,112164],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112166,103483],{"id":103482},[63,112168,112169],{},"一个控制任务通常包含：",[19,112171,112172,112175,112183,112188,112191],{},[22,112173,112174],{},"模型：Cartpole 的 body、joint、actuator。",[22,112176,112177,112178,1255,112180,112182],{},"观测：从 ",[140,112179,104905],{},[140,112181,105235],{}," 里取状态。",[22,112184,112185,112186,29283],{},"动作：写入 ",[140,112187,101952],{},[22,112189,112190],{},"奖励：根据任务目标打分。",[22,112192,112193],{},"循环：obs -> action -> step -> reward。",[63,112195,112196],{},"这就是后面 Gymnasium 环境的基本骨架。",[954,112198,105161],{},{"title":138,"searchDepth":35,"depth":35,"links":112200},[112201,112202,112203,112208,112212,112213,112214,112222],{"id":101522,"depth":35,"text":101523},{"id":101645,"depth":35,"text":101646},{"id":101920,"depth":35,"text":101921,"children":112204},[112205,112206,112207],{"id":110575,"depth":46,"text":110576},{"id":110640,"depth":46,"text":110641},{"id":110656,"depth":46,"text":110657},{"id":102128,"depth":35,"text":102129,"children":112209},[112210,112211],{"id":102448,"depth":46,"text":102448},{"id":102584,"depth":46,"text":102584},{"id":103191,"depth":35,"text":103192},{"id":103223,"depth":35,"text":103224},{"id":103328,"depth":35,"text":103329,"children":112215},[112216,112217,112218,112219,112221],{"id":112080,"depth":46,"text":112080},{"id":112091,"depth":46,"text":112091},{"id":112124,"depth":46,"text":112124},{"id":112137,"depth":46,"text":112220},"obs[3] 为什么是杆子角速度",{"id":112160,"depth":46,"text":112161},{"id":103482,"depth":35,"text":103483},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110311,"description":138},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112229,"title":112230,"body":112231,"description":138,"extension":974,"meta":114245,"navigation":976,"path":114246,"seo":114247,"stem":114248,"__hash__":114249},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112232,"toc":114221},[112233,112236,112238,112241,112243,112260,112263,112266,112272,112275,112277,112279,112303,112305,112319,112321,112362,112364,112382,112384,112387,112393,112396,112424,112428,112434,112459,112462,112493,112500,112503,112506,112512,112515,112521,112524,112530,112534,112537,112562,112565,112567,113327,113329,113341,113343,113354,113356,113359,113376,113379,113381,113392,113395,113397,113443,113446,113459,113462,113544,113547,113549,113565,113575,113588,113591,113630,113640,113651,113661,113674,113677,113706,113709,113719,113722,113728,113745,113756,113758,113764,113781,113792,113813,113816,113828,113831,113852,113855,113863,113871,113888,113891,113960,113967,113975,113978,113991,113998,114000,114003,114009,114012,114015,114021,114027,114029,114069,114071,114077,114086,114089,114091,114111,114114,114117,114123,114127,114129,114156,114159,114162,114189,114195,114198,114201,114203,114206,114209,114215,114218],[10,112234,112230],{"id":112235},"_7控制任务reacher-机械臂到达目标",[14,112237,101523],{"id":101522},[63,112239,112240],{},"本章搭建一个二维两关节 reacher 任务。",[63,112242,105206],{},[19,112244,112245,112248,112251,112254,112257],{},[22,112246,112247],{},"两个 hinge joint",[22,112249,112250],{},"两个 motor actuator",[22,112252,112253],{},"site 作为末端点和目标点",[22,112255,112256],{},"根据末端和目标距离设计 reward",[22,112258,112259],{},"构造机械臂任务的基本形式",[63,112261,112262],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[63,112264,112265],{},"Reacher 任务可以理解为：",[133,112267,112270],{"className":112268,"code":112269,"language":6087,"meta":138},[6085],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[140,112271,112269],{"__ignoreMap":138},[63,112273,112274],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112276,101646],{"id":101645},[63,112278,101649],{},[133,112280,112281],{"className":24720,"code":105263,"language":24722,"meta":138,"style":138},[140,112282,112283],{"__ignoreMap":138},[143,112284,112285,112287,112289,112291,112293,112295,112297,112299,112301],{"class":145,"line":146},[143,112286,25474],{"class":156},[143,112288,27213],{"class":163},[143,112290,24732],{"class":163},[143,112292,27298],{"class":280},[143,112294,105278],{"class":163},[143,112296,101674],{"class":163},[143,112298,103377],{"class":163},[143,112300,101690],{"class":163},[143,112302,105287],{"class":163},[63,112304,103695],{},[133,112306,112307],{"className":24720,"code":101795,"language":24722,"meta":138,"style":138},[140,112308,112309],{"__ignoreMap":138},[143,112310,112311,112313,112315,112317],{"class":145,"line":146},[143,112312,24729],{"class":156},[143,112314,24732],{"class":163},[143,112316,101806],{"class":163},[143,112318,101809],{"class":163},[63,112320,103712],{},[133,112322,112324],{"className":24720,"code":112323,"language":24722,"meta":138,"style":138},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[140,112325,112326,112343,112352],{"__ignoreMap":138},[143,112327,112328,112330,112332,112334,112337,112339,112341],{"class":145,"line":146},[143,112329,31228],{"class":156},[143,112331,30074],{"class":163},[143,112333,26013],{"class":280},[143,112335,112336],{"class":163}," mujoco-reacher",[143,112338,101851],{"class":163},[143,112340,101854],{"class":280},[143,112342,101857],{"class":280},[143,112344,112345,112347,112349],{"class":145,"line":35},[143,112346,31228],{"class":156},[143,112348,101864],{"class":163},[143,112350,112351],{"class":163}," mujoco-reacher\n",[143,112353,112354,112356,112358,112360],{"class":145,"line":46},[143,112355,24729],{"class":156},[143,112357,24732],{"class":163},[143,112359,101806],{"class":163},[143,112361,101809],{"class":163},[63,112363,101880],{},[19,112365,112366,112369,112372],{},[22,112367,112368],{},"本章使用低维状态，不使用图像输入。",[22,112370,112371],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[22,112373,112374,112375,1255,112377,1255,112379,112381],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[140,112376,104905],{},[140,112378,105235],{},[140,112380,104555],{}," 的方法一致。",[14,112383,101921],{"id":101920},[63,112385,112386],{},"Reacher 任务核心:",[133,112388,112391],{"className":112389,"code":112390,"language":6087,"meta":138},[6085],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[140,112392,112390],{"__ignoreMap":138},[63,112394,112395],{},"读取 site 世界坐标:",[133,112397,112399],{"className":31276,"code":112398,"language":31278,"meta":138,"style":138},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[140,112400,112401,112414],{"__ignoreMap":138},[143,112402,112403,112405,112407,112409,112412],{"class":145,"line":146},[143,112404,104509],{"class":149},[143,112406,160],{"class":755},[143,112408,104280],{"class":149},[143,112410,112411],{"class":163},"\"tip\"",[143,112413,1055],{"class":149},[143,112415,112416,112419,112421],{"class":145,"line":35},[143,112417,112418],{"class":149},"tip_pos ",[143,112420,160],{"class":755},[143,112422,112423],{"class":149}," data.site_xpos[site_id]\n",[58,112425,112427],{"id":112426},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[63,112429,112430,112431,112433],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[140,112432,104905],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[133,112435,112437],{"className":31276,"code":112436,"language":31278,"meta":138,"style":138},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[140,112438,112439,112449],{"__ignoreMap":138},[143,112440,112441,112444,112446],{"class":145,"line":146},[143,112442,112443],{"class":149},"tip ",[143,112445,160],{"class":755},[143,112447,112448],{"class":149}," data.site_xpos[tip_site_id]\n",[143,112450,112451,112454,112456],{"class":145,"line":35},[143,112452,112453],{"class":149},"target ",[143,112455,160],{"class":755},[143,112457,112458],{"class":149}," data.site_xpos[target_site_id]\n",[63,112460,112461],{},"这样 reward 就很容易写：",[133,112463,112465],{"className":31276,"code":112464,"language":31278,"meta":138,"style":138},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[140,112466,112467,112482],{"__ignoreMap":138},[143,112468,112469,112472,112474,112477,112479],{"class":145,"line":146},[143,112470,112471],{"class":149},"dist ",[143,112473,160],{"class":755},[143,112475,112476],{"class":149}," np.linalg.norm(tip ",[143,112478,1573],{"class":755},[143,112480,112481],{"class":149}," target)\n",[143,112483,112484,112486,112488,112490],{"class":145,"line":35},[143,112485,111880],{"class":149},[143,112487,160],{"class":755},[143,112489,53158],{"class":755},[143,112491,112492],{"class":149},"dist\n",[63,112494,112495,112496,112499],{},"距离越小，",[140,112497,112498],{},"-dist"," 越接近 0，奖励越高。",[58,112501,112502],{"id":112502},"两关节机械臂的状态",[63,112504,112505],{},"这个模型有两个 hinge joint：",[133,112507,112510],{"className":112508,"code":112509,"language":6087,"meta":138},[6085],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[140,112511,112509],{"__ignoreMap":138},[63,112513,112514],{},"再加上末端和目标位置：",[133,112516,112519],{"className":112517,"code":112518,"language":6087,"meta":138},[6085],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[140,112520,112518],{"__ignoreMap":138},[63,112522,112523],{},"总维度：",[133,112525,112528],{"className":112526,"code":112527,"language":6087,"meta":138},[6085],"2 + 2 + 3 + 3 = 10\n",[140,112529,112527],{"__ignoreMap":138},[58,112531,112533],{"id":112532},"为什么-gravity-是-0","为什么 gravity 是 0",[63,112535,112536],{},"本章把重力设为：",[133,112538,112540],{"className":53954,"code":112539,"language":53956,"meta":138,"style":138},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[140,112541,112542],{"__ignoreMap":138},[143,112543,112544,112546,112548,112550,112552,112554,112556,112558,112560],{"class":145,"line":146},[143,112545,150],{"class":149},[143,112547,70047],{"class":153},[143,112549,102070],{"class":156},[143,112551,160],{"class":149},[143,112553,102075],{"class":163},[143,112555,102078],{"class":156},[143,112557,160],{"class":149},[143,112559,104646],{"class":163},[143,112561,102020],{"class":149},[63,112563,112564],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112566,102129],{"id":102128},[133,112568,112570],{"className":31276,"code":112569,"language":31278,"meta":138,"style":138},"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",[140,112571,112572,112578,112588,112592,112596,112604,112609,112614,112618,112622,112627,112632,112636,112641,112646,112651,112655,112660,112665,112670,112675,112679,112683,112687,112691,112695,112700,112705,112709,112713,112717,112721,112725,112740,112749,112761,112784,112791,112795,112799,112809,112823,112837,112844,112848,112852,112866,112878,112890,112903,112918,112935,112939,112943,112955,112967,112975,112983,112987,113003,113008,113021,113034,113049,113053,113088,113120,113124,113128,113137,113141,113157,113167,113178,113194,113210,113226,113242,113246,113264,113284,113303,113307,113311,113323],{"__ignoreMap":138},[143,112573,112574,112576],{"class":145,"line":146},[143,112575,31290],{"class":755},[143,112577,102177],{"class":149},[143,112579,112580,112582,112584,112586],{"class":145,"line":35},[143,112581,31290],{"class":755},[143,112583,32278],{"class":149},[143,112585,32281],{"class":755},[143,112587,32284],{"class":149},[143,112589,112590],{"class":145,"line":46},[143,112591,3300],{"emptyLinePlaceholder":976},[143,112593,112594],{"class":145,"line":293},[143,112595,3300],{"emptyLinePlaceholder":976},[143,112597,112598,112600,112602],{"class":145,"line":306},[143,112599,102190],{"class":280},[143,112601,14464],{"class":755},[143,112603,102195],{"class":163},[143,112605,112606],{"class":145,"line":319},[143,112607,112608],{"class":163},"\u003Cmujoco model=\"two_link_reacher\">\n",[143,112610,112611],{"class":145,"line":332},[143,112612,112613],{"class":163},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[143,112615,112616],{"class":145,"line":345},[143,112617,3300],{"emptyLinePlaceholder":976},[143,112619,112620],{"class":145,"line":701},[143,112621,102214],{"class":163},[143,112623,112624],{"class":145,"line":707},[143,112625,112626],{"class":163},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[143,112628,112629],{"class":145,"line":727},[143,112630,112631],{"class":163},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[143,112633,112634],{"class":145,"line":2518},[143,112635,3300],{"emptyLinePlaceholder":976},[143,112637,112638],{"class":145,"line":2524},[143,112639,112640],{"class":163},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[143,112642,112643],{"class":145,"line":2529},[143,112644,112645],{"class":163},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[143,112647,112648],{"class":145,"line":2543},[143,112649,112650],{"class":163},"      \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",[143,112652,112653],{"class":145,"line":2548},[143,112654,3300],{"emptyLinePlaceholder":976},[143,112656,112657],{"class":145,"line":2554},[143,112658,112659],{"class":163},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[143,112661,112662],{"class":145,"line":2575},[143,112663,112664],{"class":163},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[143,112666,112667],{"class":145,"line":2580},[143,112668,112669],{"class":163},"        \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",[143,112671,112672],{"class":145,"line":2594},[143,112673,112674],{"class":163},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[143,112676,112677],{"class":145,"line":2599},[143,112678,107313],{"class":163},[143,112680,112681],{"class":145,"line":2628},[143,112682,102243],{"class":163},[143,112684,112685],{"class":145,"line":2633},[143,112686,102248],{"class":163},[143,112688,112689],{"class":145,"line":2650},[143,112690,3300],{"emptyLinePlaceholder":976},[143,112692,112693],{"class":145,"line":2655},[143,112694,107330],{"class":163},[143,112696,112697],{"class":145,"line":2660},[143,112698,112699],{"class":163},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[143,112701,112702],{"class":145,"line":2665},[143,112703,112704],{"class":163},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[143,112706,112707],{"class":145,"line":2679},[143,112708,107340],{"class":163},[143,112710,112711],{"class":145,"line":2684},[143,112712,102253],{"class":163},[143,112714,112715],{"class":145,"line":3477},[143,112716,96574],{"class":163},[143,112718,112719],{"class":145,"line":3491},[143,112720,3300],{"emptyLinePlaceholder":976},[143,112722,112723],{"class":145,"line":3499},[143,112724,3300],{"emptyLinePlaceholder":976},[143,112726,112727,112729,112732,112735,112737],{"class":145,"line":3504},[143,112728,32845],{"class":755},[143,112730,112731],{"class":156}," site_position",[143,112733,112734],{"class":149},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[143,112736,2206],{"class":280},[143,112738,112739],{"class":149},") -> np.ndarray:\n",[143,112741,112742,112744,112746],{"class":145,"line":3510},[143,112743,104275],{"class":149},[143,112745,160],{"class":755},[143,112747,112748],{"class":149}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[143,112750,112751,112753,112755,112757,112759],{"class":145,"line":3516},[143,112752,4001],{"class":755},[143,112754,104324],{"class":149},[143,112756,150],{"class":755},[143,112758,4993],{"class":280},[143,112760,4639],{"class":149},[143,112762,112763,112765,112767,112769,112771,112774,112776,112778,112780,112782],{"class":145,"line":3521},[143,112764,104307],{"class":755},[143,112766,104310],{"class":280},[143,112768,1049],{"class":149},[143,112770,1098],{"class":755},[143,112772,112773],{"class":163},"\"site not found: ",[143,112775,1936],{"class":280},[143,112777,80688],{"class":149},[143,112779,366],{"class":280},[143,112781,1292],{"class":163},[143,112783,1055],{"class":149},[143,112785,112786,112788],{"class":145,"line":8848},[143,112787,4990],{"class":755},[143,112789,112790],{"class":149}," data.site_xpos[site_id].copy()\n",[143,112792,112793],{"class":145,"line":8872},[143,112794,3300],{"emptyLinePlaceholder":976},[143,112796,112797],{"class":145,"line":8877},[143,112798,3300],{"emptyLinePlaceholder":976},[143,112800,112801,112803,112806],{"class":145,"line":8883},[143,112802,32845],{"class":755},[143,112804,112805],{"class":156}," get_obs",[143,112807,112808],{"class":149},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[143,112810,112811,112814,112816,112819,112821],{"class":145,"line":8910},[143,112812,112813],{"class":149},"    tip ",[143,112815,160],{"class":755},[143,112817,112818],{"class":149}," site_position(model, data, ",[143,112820,112411],{"class":163},[143,112822,1055],{"class":149},[143,112824,112825,112828,112830,112832,112835],{"class":145,"line":8915},[143,112826,112827],{"class":149},"    target ",[143,112829,160],{"class":755},[143,112831,112818],{"class":149},[143,112833,112834],{"class":163},"\"target\"",[143,112836,1055],{"class":149},[143,112838,112839,112841],{"class":145,"line":8921},[143,112840,4990],{"class":755},[143,112842,112843],{"class":149}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[143,112845,112846],{"class":145,"line":8933},[143,112847,3300],{"emptyLinePlaceholder":976},[143,112849,112850],{"class":145,"line":8945},[143,112851,3300],{"emptyLinePlaceholder":976},[143,112853,112854,112856,112859,112862,112864],{"class":145,"line":8957},[143,112855,32845],{"class":755},[143,112857,112858],{"class":156}," reward",[143,112860,112861],{"class":149},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[143,112863,1087],{"class":280},[143,112865,4639],{"class":149},[143,112867,112868,112870,112872,112874,112876],{"class":145,"line":10616},[143,112869,112813],{"class":149},[143,112871,160],{"class":755},[143,112873,112818],{"class":149},[143,112875,112411],{"class":163},[143,112877,1055],{"class":149},[143,112879,112880,112882,112884,112886,112888],{"class":145,"line":10641},[143,112881,112827],{"class":149},[143,112883,160],{"class":755},[143,112885,112818],{"class":149},[143,112887,112834],{"class":163},[143,112889,1055],{"class":149},[143,112891,112892,112895,112897,112899,112901],{"class":145,"line":10664},[143,112893,112894],{"class":149},"    dist ",[143,112896,160],{"class":755},[143,112898,112476],{"class":149},[143,112900,1573],{"class":755},[143,112902,112481],{"class":149},[143,112904,112905,112908,112910,112913,112915],{"class":145,"line":10688},[143,112906,112907],{"class":149},"    control_cost ",[143,112909,160],{"class":755},[143,112911,112912],{"class":280}," 0.01",[143,112914,7418],{"class":755},[143,112916,112917],{"class":149}," np.sum(np.square(data.ctrl))\n",[143,112919,112920,112922,112924,112926,112928,112930,112932],{"class":145,"line":10693},[143,112921,4990],{"class":755},[143,112923,110672],{"class":280},[143,112925,1049],{"class":149},[143,112927,1573],{"class":755},[143,112929,112471],{"class":149},[143,112931,1573],{"class":755},[143,112933,112934],{"class":149}," control_cost)\n",[143,112936,112937],{"class":145,"line":10698},[143,112938,3300],{"emptyLinePlaceholder":976},[143,112940,112941],{"class":145,"line":10703},[143,112942,3300],{"emptyLinePlaceholder":976},[143,112944,112945,112947,112949,112951,112953],{"class":145,"line":10712},[143,112946,32845],{"class":755},[143,112948,2873],{"class":156},[143,112950,102274],{"class":149},[143,112952,96562],{"class":280},[143,112954,4639],{"class":149},[143,112956,112957,112959,112961,112963,112965],{"class":145,"line":10717},[143,112958,102283],{"class":149},[143,112960,160],{"class":755},[143,112962,102288],{"class":149},[143,112964,102190],{"class":280},[143,112966,1055],{"class":149},[143,112968,112969,112971,112973],{"class":145,"line":10723},[143,112970,102297],{"class":149},[143,112972,160],{"class":755},[143,112974,102302],{"class":149},[143,112976,112977,112979,112981],{"class":145,"line":10744},[143,112978,111028],{"class":149},[143,112980,160],{"class":755},[143,112982,105636],{"class":280},[143,112984,112985],{"class":145,"line":10750},[143,112986,3300],{"emptyLinePlaceholder":976},[143,112988,112989,112991,112993,112995,112997,112999,113001],{"class":145,"line":10764},[143,112990,4101],{"class":755},[143,112992,32514],{"class":149},[143,112994,26941],{"class":755},[143,112996,33341],{"class":280},[143,112998,1049],{"class":149},[143,113000,65956],{"class":280},[143,113002,31684],{"class":149},[143,113004,113005],{"class":145,"line":10770},[143,113006,113007],{"class":149},"        mujoco.mj_forward(model, data)\n",[143,113009,113010,113013,113015,113017,113019],{"class":145,"line":10797},[143,113011,113012],{"class":149},"        tip ",[143,113014,160],{"class":755},[143,113016,112818],{"class":149},[143,113018,112411],{"class":163},[143,113020,1055],{"class":149},[143,113022,113023,113026,113028,113030,113032],{"class":145,"line":10806},[143,113024,113025],{"class":149},"        target ",[143,113027,160],{"class":755},[143,113029,112818],{"class":149},[143,113031,112834],{"class":163},[143,113033,1055],{"class":149},[143,113035,113036,113039,113041,113044,113046],{"class":145,"line":10812},[143,113037,113038],{"class":149},"        error ",[143,113040,160],{"class":755},[143,113042,113043],{"class":149}," target ",[143,113045,1573],{"class":755},[143,113047,113048],{"class":149}," tip\n",[143,113050,113051],{"class":145,"line":10820},[143,113052,3300],{"emptyLinePlaceholder":976},[143,113054,113055,113057,113059,113061,113063,113066,113068,113070,113073,113075,113078,113080,113082,113084,113086],{"class":145,"line":10825},[143,113056,107492],{"class":149},[143,113058,1234],{"class":280},[143,113060,5343],{"class":149},[143,113062,160],{"class":755},[143,113064,113065],{"class":149}," np.clip(",[143,113067,106135],{"class":280},[143,113069,7418],{"class":755},[143,113071,113072],{"class":149}," error[",[143,113074,1122],{"class":280},[143,113076,113077],{"class":149},"], ",[143,113079,1573],{"class":755},[143,113081,103279],{"class":280},[143,113083,13335],{"class":149},[143,113085,103279],{"class":280},[143,113087,1055],{"class":149},[143,113089,113090,113092,113094,113096,113098,113100,113102,113104,113106,113108,113110,113112,113114,113116,113118],{"class":145,"line":17502},[143,113091,107492],{"class":149},[143,113093,771],{"class":280},[143,113095,5343],{"class":149},[143,113097,160],{"class":755},[143,113099,113065],{"class":149},[143,113101,106135],{"class":280},[143,113103,7418],{"class":755},[143,113105,113072],{"class":149},[143,113107,1234],{"class":280},[143,113109,113077],{"class":149},[143,113111,1573],{"class":755},[143,113113,103279],{"class":280},[143,113115,13335],{"class":149},[143,113117,103279],{"class":280},[143,113119,1055],{"class":149},[143,113121,113122],{"class":145,"line":17508},[143,113123,3300],{"emptyLinePlaceholder":976},[143,113125,113126],{"class":145,"line":17531},[143,113127,102392],{"class":149},[143,113129,113130,113132,113134],{"class":145,"line":17537},[143,113131,111172],{"class":149},[143,113133,10377],{"class":755},[143,113135,113136],{"class":149}," reward(model, data)\n",[143,113138,113139],{"class":145,"line":17560},[143,113140,3300],{"emptyLinePlaceholder":976},[143,113142,113143,113145,113147,113149,113151,113153,113155],{"class":145,"line":17574},[143,113144,3397],{"class":755},[143,113146,32514],{"class":149},[143,113148,1369],{"class":755},[143,113150,6654],{"class":280},[143,113152,102435],{"class":755},[143,113154,4993],{"class":280},[143,113156,4639],{"class":149},[143,113158,113159,113162,113164],{"class":145,"line":17594},[143,113160,113161],{"class":149},"            obs ",[143,113163,160],{"class":755},[143,113165,113166],{"class":149}," get_obs(model, data)\n",[143,113168,113169,113171,113173,113175],{"class":145,"line":17600},[143,113170,35548],{"class":280},[143,113172,1049],{"class":149},[143,113174,111206],{"class":163},[143,113176,113177],{"class":149},", step)\n",[143,113179,113180,113182,113184,113187,113190,113192],{"class":145,"line":17611},[143,113181,35548],{"class":280},[143,113183,1049],{"class":149},[143,113185,113186],{"class":163},"\"  tip:\"",[143,113188,113189],{"class":149},", np.round(tip, ",[143,113191,1116],{"class":280},[143,113193,31395],{"class":149},[143,113195,113196,113198,113200,113203,113206,113208],{"class":145,"line":17634},[143,113197,35548],{"class":280},[143,113199,1049],{"class":149},[143,113201,113202],{"class":163},"\"  target:\"",[143,113204,113205],{"class":149},", np.round(target, ",[143,113207,1116],{"class":280},[143,113209,31395],{"class":149},[143,113211,113212,113214,113216,113219,113222,113224],{"class":145,"line":17656},[143,113213,35548],{"class":280},[143,113215,1049],{"class":149},[143,113217,113218],{"class":163},"\"  ctrl:\"",[143,113220,113221],{"class":149},", np.round(data.ctrl.copy(), ",[143,113223,1116],{"class":280},[143,113225,31395],{"class":149},[143,113227,113228,113230,113232,113235,113238,113240],{"class":145,"line":17661},[143,113229,35548],{"class":280},[143,113231,1049],{"class":149},[143,113233,113234],{"class":163},"\"  obs_dim:\"",[143,113236,113237],{"class":149},", obs.shape[",[143,113239,1234],{"class":280},[143,113241,5557],{"class":149},[143,113243,113244],{"class":145,"line":17667},[143,113245,3300],{"emptyLinePlaceholder":976},[143,113247,113248,113250,113252,113254,113256,113258,113260,113262],{"class":145,"line":17681},[143,113249,32197],{"class":280},[143,113251,1049],{"class":149},[143,113253,111251],{"class":163},[143,113255,13335],{"class":149},[143,113257,32916],{"class":280},[143,113259,111258],{"class":149},[143,113261,1116],{"class":280},[143,113263,31395],{"class":149},[143,113265,113266,113268,113270,113273,113276,113278,113280,113282],{"class":145,"line":17694},[143,113267,32197],{"class":280},[143,113269,1049],{"class":149},[143,113271,113272],{"class":163},"\"final tip:\"",[143,113274,113275],{"class":149},", np.round(site_position(model, data, ",[143,113277,112411],{"class":163},[143,113279,111220],{"class":149},[143,113281,1116],{"class":280},[143,113283,31395],{"class":149},[143,113285,113286,113288,113290,113293,113295,113297,113299,113301],{"class":145,"line":17699},[143,113287,32197],{"class":280},[143,113289,1049],{"class":149},[143,113291,113292],{"class":163},"\"target:\"",[143,113294,113275],{"class":149},[143,113296,112834],{"class":163},[143,113298,111220],{"class":149},[143,113300,1116],{"class":280},[143,113302,31395],{"class":149},[143,113304,113305],{"class":145,"line":17713},[143,113306,3300],{"emptyLinePlaceholder":976},[143,113308,113309],{"class":145,"line":17718},[143,113310,3300],{"emptyLinePlaceholder":976},[143,113312,113313,113315,113317,113319,113321],{"class":145,"line":17724},[143,113314,2434],{"class":755},[143,113316,32118],{"class":280},[143,113318,102435],{"class":755},[143,113320,102438],{"class":163},[143,113322,4639],{"class":149},[143,113324,113325],{"class":145,"line":17729},[143,113326,102445],{"class":149},[63,113328,104445],{},[133,113330,113332],{"className":24720,"code":113331,"language":24722,"meta":138,"style":138},"touch ch7_reacher.py\n",[140,113333,113334],{"__ignoreMap":138},[143,113335,113336,113338],{"class":145,"line":146},[143,113337,102159],{"class":156},[143,113339,113340],{"class":163}," ch7_reacher.py\n",[63,113342,111319],{},[133,113344,113346],{"className":24720,"code":113345,"language":24722,"meta":138,"style":138},"python ch7_reacher.py\n",[140,113347,113348],{"__ignoreMap":138},[143,113349,113350,113352],{"class":145,"line":146},[143,113351,31278],{"class":156},[143,113353,113340],{"class":163},[58,113355,102448],{"id":102448},[63,113357,113358],{},"读取 site 坐标：",[133,113360,113362],{"className":31276,"code":113361,"language":31278,"meta":138,"style":138},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[140,113363,113364],{"__ignoreMap":138},[143,113365,113366,113368,113370,113372,113374],{"class":145,"line":146},[143,113367,32845],{"class":755},[143,113369,112731],{"class":156},[143,113371,112734],{"class":149},[143,113373,2206],{"class":280},[143,113375,112739],{"class":149},[63,113377,113378],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[63,113380,111335],{},[133,113382,113384],{"className":31276,"code":113383,"language":31278,"meta":138,"style":138},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[140,113385,113386],{"__ignoreMap":138},[143,113387,113388,113390],{"class":145,"line":146},[143,113389,17944],{"class":755},[143,113391,112843],{"class":149},[63,113393,113394],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[63,113396,110660],{},[133,113398,113400],{"className":31276,"code":113399,"language":31278,"meta":138,"style":138},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[140,113401,113402,113414,113427],{"__ignoreMap":138},[143,113403,113404,113406,113408,113410,113412],{"class":145,"line":146},[143,113405,112471],{"class":149},[143,113407,160],{"class":755},[143,113409,112476],{"class":149},[143,113411,1573],{"class":755},[143,113413,112481],{"class":149},[143,113415,113416,113419,113421,113423,113425],{"class":145,"line":35},[143,113417,113418],{"class":149},"control_cost ",[143,113420,160],{"class":755},[143,113422,112912],{"class":280},[143,113424,7418],{"class":755},[143,113426,112917],{"class":149},[143,113428,113429,113431,113433,113435,113437,113439,113441],{"class":145,"line":46},[143,113430,17944],{"class":755},[143,113432,110672],{"class":280},[143,113434,1049],{"class":149},[143,113436,1573],{"class":755},[143,113438,112471],{"class":149},[143,113440,1573],{"class":755},[143,113442,112934],{"class":149},[63,113444,113445],{},"奖励由两部分组成：",[19,113447,113448,113453],{},[22,113449,113450,113452],{},[140,113451,112498],{},"：末端离目标越远，奖励越低。",[22,113454,113455,113458],{},[140,113456,113457],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[63,113460,113461],{},"简单控制器：",[133,113463,113465],{"className":31276,"code":113464,"language":31278,"meta":138,"style":138},"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",[140,113466,113467,113480,113512],{"__ignoreMap":138},[143,113468,113469,113472,113474,113476,113478],{"class":145,"line":146},[143,113470,113471],{"class":149},"error ",[143,113473,160],{"class":755},[143,113475,113043],{"class":149},[143,113477,1573],{"class":755},[143,113479,113048],{"class":149},[143,113481,113482,113484,113486,113488,113490,113492,113494,113496,113498,113500,113502,113504,113506,113508,113510],{"class":145,"line":35},[143,113483,106746],{"class":149},[143,113485,1234],{"class":280},[143,113487,5343],{"class":149},[143,113489,160],{"class":755},[143,113491,113065],{"class":149},[143,113493,106135],{"class":280},[143,113495,7418],{"class":755},[143,113497,113072],{"class":149},[143,113499,1122],{"class":280},[143,113501,113077],{"class":149},[143,113503,1573],{"class":755},[143,113505,103279],{"class":280},[143,113507,13335],{"class":149},[143,113509,103279],{"class":280},[143,113511,1055],{"class":149},[143,113513,113514,113516,113518,113520,113522,113524,113526,113528,113530,113532,113534,113536,113538,113540,113542],{"class":145,"line":46},[143,113515,106746],{"class":149},[143,113517,771],{"class":280},[143,113519,5343],{"class":149},[143,113521,160],{"class":755},[143,113523,113065],{"class":149},[143,113525,106135],{"class":280},[143,113527,7418],{"class":755},[143,113529,113072],{"class":149},[143,113531,1234],{"class":280},[143,113533,113077],{"class":149},[143,113535,1573],{"class":755},[143,113537,103279],{"class":280},[143,113539,13335],{"class":149},[143,113541,103279],{"class":280},[143,113543,1055],{"class":149},[63,113545,113546],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[58,113548,102584],{"id":102584},[133,113550,113551],{"className":31276,"code":113361,"language":31278,"meta":138,"style":138},[140,113552,113553],{"__ignoreMap":138},[143,113554,113555,113557,113559,113561,113563],{"class":145,"line":146},[143,113556,32845],{"class":755},[143,113558,112731],{"class":156},[143,113560,112734],{"class":149},[143,113562,2206],{"class":280},[143,113564,112739],{"class":149},[63,113566,113567,113568,113570,113571,83417,113573,29283],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[140,113569,80688],{}," 是 site 的名字，比如 ",[140,113572,112411],{},[140,113574,112834],{},[133,113576,113578],{"className":31276,"code":113577,"language":31278,"meta":138,"style":138},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[140,113579,113580],{"__ignoreMap":138},[143,113581,113582,113584,113586],{"class":145,"line":146},[143,113583,104509],{"class":149},[143,113585,160],{"class":755},[143,113587,112748],{"class":149},[63,113589,113590],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[133,113592,113594],{"className":31276,"code":113593,"language":31278,"meta":138,"style":138},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[140,113595,113596,113608],{"__ignoreMap":138},[143,113597,113598,113600,113602,113604,113606],{"class":145,"line":146},[143,113599,2434],{"class":755},[143,113601,104324],{"class":149},[143,113603,150],{"class":755},[143,113605,4993],{"class":280},[143,113607,4639],{"class":149},[143,113609,113610,113612,113614,113616,113618,113620,113622,113624,113626,113628],{"class":145,"line":35},[143,113611,104770],{"class":755},[143,113613,104310],{"class":280},[143,113615,1049],{"class":149},[143,113617,1098],{"class":755},[143,113619,112773],{"class":163},[143,113621,1936],{"class":280},[143,113623,80688],{"class":149},[143,113625,366],{"class":280},[143,113627,1292],{"class":163},[143,113629,1055],{"class":149},[63,113631,113632,113633,113636,113637,113639],{},"如果 site 没找到，就主动报错。",[140,113634,113635],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[140,113638,80688],{}," 的值放进字符串里。",[133,113641,113643],{"className":31276,"code":113642,"language":31278,"meta":138,"style":138},"return data.site_xpos[site_id].copy()\n",[140,113644,113645],{"__ignoreMap":138},[143,113646,113647,113649],{"class":145,"line":146},[143,113648,17944],{"class":755},[143,113650,112790],{"class":149},[63,113652,113653,113654,113656,113657,113660],{},"返回这个 site 的世界坐标。",[140,113655,104555],{}," 里的每一行都是一个 site 的 ",[140,113658,113659],{},"(x, y, z)"," 坐标。",[133,113662,113664],{"className":31276,"code":113663,"language":31278,"meta":138,"style":138},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[140,113665,113666],{"__ignoreMap":138},[143,113667,113668,113670,113672],{"class":145,"line":146},[143,113669,32845],{"class":755},[143,113671,112805],{"class":156},[143,113673,112808],{"class":149},[63,113675,113676],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[133,113678,113680],{"className":31276,"code":113679,"language":31278,"meta":138,"style":138},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[140,113681,113682,113694],{"__ignoreMap":138},[143,113683,113684,113686,113688,113690,113692],{"class":145,"line":146},[143,113685,112443],{"class":149},[143,113687,160],{"class":755},[143,113689,112818],{"class":149},[143,113691,112411],{"class":163},[143,113693,1055],{"class":149},[143,113695,113696,113698,113700,113702,113704],{"class":145,"line":35},[143,113697,112453],{"class":149},[143,113699,160],{"class":755},[143,113701,112818],{"class":149},[143,113703,112834],{"class":163},[143,113705,1055],{"class":149},[63,113707,113708],{},"分别读取末端点和目标点的世界坐标。",[133,113710,113711],{"className":31276,"code":113383,"language":31278,"meta":138,"style":138},[140,113712,113713],{"__ignoreMap":138},[143,113714,113715,113717],{"class":145,"line":146},[143,113716,17944],{"class":755},[143,113718,112843],{"class":149},[63,113720,113721],{},"把四部分拼成一个观测数组：",[133,113723,113726],{"className":113724,"code":113725,"language":6087,"meta":138},[6085],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[140,113727,113725],{"__ignoreMap":138},[133,113729,113731],{"className":31276,"code":113730,"language":31278,"meta":138,"style":138},"dist = np.linalg.norm(tip - target)\n",[140,113732,113733],{"__ignoreMap":138},[143,113734,113735,113737,113739,113741,113743],{"class":145,"line":146},[143,113736,112471],{"class":149},[143,113738,160],{"class":755},[143,113740,112476],{"class":149},[143,113742,1573],{"class":755},[143,113744,112481],{"class":149},[63,113746,113747,113748,113751,113752,113755],{},"计算 tip 到 target 的距离。",[140,113749,113750],{},"tip - target"," 得到一个三维向量，",[140,113753,113754],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[63,113757,15532],{},[133,113759,113762],{"className":113760,"code":113761,"language":6087,"meta":138},[6085],"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",[140,113763,113761],{"__ignoreMap":138},[133,113765,113767],{"className":31276,"code":113766,"language":31278,"meta":138,"style":138},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[140,113768,113769],{"__ignoreMap":138},[143,113770,113771,113773,113775,113777,113779],{"class":145,"line":146},[143,113772,113418],{"class":149},[143,113774,160],{"class":755},[143,113776,112912],{"class":280},[143,113778,7418],{"class":755},[143,113780,112917],{"class":149},[63,113782,113783,113784,113787,113788,113791],{},"计算动作惩罚。",[140,113785,113786],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[140,113789,113790],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[133,113793,113795],{"className":31276,"code":113794,"language":31278,"meta":138,"style":138},"return float(-dist - control_cost)\n",[140,113796,113797],{"__ignoreMap":138},[143,113798,113799,113801,113803,113805,113807,113809,113811],{"class":145,"line":146},[143,113800,17944],{"class":755},[143,113802,110672],{"class":280},[143,113804,1049],{"class":149},[143,113806,1573],{"class":755},[143,113808,112471],{"class":149},[143,113810,1573],{"class":755},[143,113812,112934],{"class":149},[63,113814,113815],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[133,113817,113818],{"className":31276,"code":111678,"language":31278,"meta":138,"style":138},[140,113819,113820],{"__ignoreMap":138},[143,113821,113822,113824,113826],{"class":145,"line":146},[143,113823,111685],{"class":149},[143,113825,160],{"class":755},[143,113827,105636],{"class":280},[63,113829,113830],{},"累计奖励变量，记录整个运行过程的总分。",[133,113832,113834],{"className":31276,"code":113833,"language":31278,"meta":138,"style":138},"for step in range(500):\n",[140,113835,113836],{"__ignoreMap":138},[143,113837,113838,113840,113842,113844,113846,113848,113850],{"class":145,"line":146},[143,113839,3925],{"class":755},[143,113841,32514],{"class":149},[143,113843,26941],{"class":755},[143,113845,33341],{"class":280},[143,113847,1049],{"class":149},[143,113849,65956],{"class":280},[143,113851,31684],{"class":149},[63,113853,113854],{},"运行 500 个控制步。",[133,113856,113857],{"className":31276,"code":105418,"language":31278,"meta":138,"style":138},[140,113858,113859],{"__ignoreMap":138},[143,113860,113861],{"class":145,"line":146},[143,113862,105418],{"class":149},[63,113864,113865,113866,101894,113868,113870],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[140,113867,104106],{},[140,113869,104109],{}," 是当前状态下的坐标。",[133,113872,113874],{"className":31276,"code":113873,"language":31278,"meta":138,"style":138},"error = target - tip\n",[140,113875,113876],{"__ignoreMap":138},[143,113877,113878,113880,113882,113884,113886],{"class":145,"line":146},[143,113879,113471],{"class":149},[143,113881,160],{"class":755},[143,113883,113043],{"class":149},[143,113885,1573],{"class":755},[143,113887,113048],{"class":149},[63,113889,113890],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[133,113892,113894],{"className":31276,"code":113893,"language":31278,"meta":138,"style":138},"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",[140,113895,113896,113928],{"__ignoreMap":138},[143,113897,113898,113900,113902,113904,113906,113908,113910,113912,113914,113916,113918,113920,113922,113924,113926],{"class":145,"line":146},[143,113899,106746],{"class":149},[143,113901,1234],{"class":280},[143,113903,5343],{"class":149},[143,113905,160],{"class":755},[143,113907,113065],{"class":149},[143,113909,106135],{"class":280},[143,113911,7418],{"class":755},[143,113913,113072],{"class":149},[143,113915,1122],{"class":280},[143,113917,113077],{"class":149},[143,113919,1573],{"class":755},[143,113921,103279],{"class":280},[143,113923,13335],{"class":149},[143,113925,103279],{"class":280},[143,113927,1055],{"class":149},[143,113929,113930,113932,113934,113936,113938,113940,113942,113944,113946,113948,113950,113952,113954,113956,113958],{"class":145,"line":35},[143,113931,106746],{"class":149},[143,113933,771],{"class":280},[143,113935,5343],{"class":149},[143,113937,160],{"class":755},[143,113939,113065],{"class":149},[143,113941,106135],{"class":280},[143,113943,7418],{"class":755},[143,113945,113072],{"class":149},[143,113947,1234],{"class":280},[143,113949,113077],{"class":149},[143,113951,1573],{"class":755},[143,113953,103279],{"class":280},[143,113955,13335],{"class":149},[143,113957,103279],{"class":280},[143,113959,1055],{"class":149},[63,113961,113962,113963,113966],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[140,113964,113965],{},"error -> ctrl -> step"," 的流程。",[133,113968,113969],{"className":31276,"code":105380,"language":31278,"meta":138,"style":138},[140,113970,113971],{"__ignoreMap":138},[143,113972,113973],{"class":145,"line":146},[143,113974,105380],{"class":149},[63,113976,113977],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[133,113979,113981],{"className":31276,"code":113980,"language":31278,"meta":138,"style":138},"obs = get_obs(model, data)\n",[140,113982,113983],{"__ignoreMap":138},[143,113984,113985,113987,113989],{"class":145,"line":146},[143,113986,111729],{"class":149},[143,113988,160],{"class":755},[143,113990,113166],{"class":149},[63,113992,113993,113994,113997],{},"读取最新观测。后面打印 ",[140,113995,113996],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113999,103192],{"id":103191},[63,114001,114002],{},"观测维度为:",[133,114004,114007],{"className":114005,"code":114006,"language":6087,"meta":138},[6085],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[140,114008,114006],{"__ignoreMap":138},[63,114010,114011],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[63,114013,114014],{},"程序每 100 步打印：",[133,114016,114019],{"className":114017,"code":114018,"language":6087,"meta":138},[6085],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[140,114020,114018],{"__ignoreMap":138},[63,114022,114023,114024,114026],{},"如果控制有效，你应该看到最终 ",[140,114025,104106],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114028,103224],{"id":103223},[19,114030,114031,114034,114037,114043,114049,114056,114066],{},[22,114032,114033],{},"修改目标点位置。",[22,114035,114036],{},"重新运行，观察最终 tip 是否变化。",[22,114038,114039,114040,114042],{},"把 gravity 改成 ",[140,114041,103465],{},"，观察控制是否变差。",[22,114044,112056,114045,112060,114047,29283],{},[140,114046,103034],{},[140,114048,1122],{},[22,114050,103287,114051,103290,114053,114055],{},[140,114052,111471],{},[140,114054,108182],{},"，观察机械臂是否更难移动。",[22,114057,103287,114058,83408,114060,103290,114062,114065],{},[140,114059,104109],{},[140,114061,105021],{},[140,114063,114064],{},"0.2 0 0.6","，观察 reward 和 final tip。",[22,114067,114068],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114070,103329],{"id":103328},[58,114072,114074],{"id":114073},"site-not-found",[140,114075,114076],{},"site not found",[63,114078,114079,114080,101894,114083,29283],{},"检查 XML 中是否有 ",[140,114081,114082],{},"site name=\"tip\"",[140,114084,114085],{},"site name=\"target\"",[58,114087,114088],{"id":114088},"机械臂完全不动",[63,114090,103399],{},[19,114092,114093,114098,114101,114106],{},[22,114094,114095,114097],{},[140,114096,103034],{}," 是否为 2",[22,114099,114100],{},"actuator 是否引用正确 joint",[22,114102,114103,114105],{},[140,114104,101952],{}," 是否被赋值",[22,114107,114108,114109],{},"是否执行了 ",[140,114110,101561],{},[58,114112,114113],{"id":114113},"控制效果不好",[63,114115,114116],{},"正常。本章重点不是控制器最优，而是任务结构:",[133,114118,114121],{"className":114119,"code":114120,"language":6087,"meta":138},[6085],"obs → action → mj_step → reward → next_obs\n",[140,114122,114120],{"__ignoreMap":138},[58,114124,114126],{"id":114125},"tip-坐标不变化","tip 坐标不变化",[63,114128,103451],{},[19,114130,114131,114136,114144,114153],{},[22,114132,114133,114134,29283],{},"是否每步调用了 ",[140,114135,101561],{},[22,114137,114138,114139,101894,114141,29283],{},"是否写入了 ",[140,114140,107001],{},[140,114142,114143],{},"data.ctrl[1]",[22,114145,114146,114147,1255,114150,29283],{},"actuator 是否正确引用 ",[140,114148,114149],{},"joint1",[140,114151,114152],{},"joint2",[22,114154,114155],{},"控制输入是否太小。",[58,114157,114158],{"id":114158},"目标点不会动",[63,114160,114161],{},"本章的 target 是固定 site：",[133,114163,114165],{"className":53954,"code":114164,"language":53956,"meta":138,"style":138},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[140,114166,114167],{"__ignoreMap":138},[143,114168,114169,114171,114173,114175,114177,114179,114181,114183,114186],{"class":145,"line":146},[143,114170,150],{"class":149},[143,114172,104085],{"class":153},[143,114174,15819],{"class":156},[143,114176,160],{"class":149},[143,114178,112834],{"class":163},[143,114180,101982],{"class":156},[143,114182,160],{"class":149},[143,114184,114185],{"class":163},"\"0.5 0 0.4\"",[143,114187,114188],{"class":149}," ...\u002F>\n",[63,114190,114191,114192,114194],{},"它直接挂在 ",[140,114193,102717],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[58,114196,114197],{"id":114197},"机械臂不像真实机械臂",[63,114199,114200],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114202,103483],{"id":103482},[63,114204,114205],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[63,114207,114208],{},"核心公式：",[133,114210,114213],{"className":114211,"code":114212,"language":6087,"meta":138},[6085],"distance = ||tip - target||\nreward = -distance - action_cost\n",[140,114214,114212],{"__ignoreMap":138},[63,114216,114217],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[954,114219,114220],{},"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":138,"searchDepth":35,"depth":35,"links":114222},[114223,114224,114225,114230,114234,114235,114236,114244],{"id":101522,"depth":35,"text":101523},{"id":101645,"depth":35,"text":101646},{"id":101920,"depth":35,"text":101921,"children":114226},[114227,114228,114229],{"id":112426,"depth":46,"text":112427},{"id":112502,"depth":46,"text":112502},{"id":112532,"depth":46,"text":112533},{"id":102128,"depth":35,"text":102129,"children":114231},[114232,114233],{"id":102448,"depth":46,"text":102448},{"id":102584,"depth":46,"text":102584},{"id":103191,"depth":35,"text":103192},{"id":103223,"depth":35,"text":103224},{"id":103328,"depth":35,"text":103329,"children":114237},[114238,114239,114240,114241,114242,114243],{"id":114073,"depth":46,"text":114076},{"id":114088,"depth":46,"text":114088},{"id":114113,"depth":46,"text":114113},{"id":114125,"depth":46,"text":114126},{"id":114158,"depth":46,"text":114158},{"id":114197,"depth":46,"text":114197},{"id":103482,"depth":35,"text":103483},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112230,"description":138},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114251,"title":114252,"body":114253,"description":138,"extension":974,"meta":117715,"navigation":976,"path":117716,"seo":117717,"stem":117718,"__hash__":117719},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114254,"toc":117686},[114255,114258,114260,114263,114266,114291,114294,114300,114303,114309,114311,114313,114337,114339,114357,114359,114402,114404,114431,114433,114436,114488,114491,114497,114506,114509,114547,114550,114589,114592,114600,114607,114610,114616,114618,114672,114679,114724,114727,114731,114747,114757,114759,116020,116022,116034,116036,116047,116049,116052,116073,116076,116079,116112,116118,116121,116154,116157,116160,116201,116206,116220,116223,116236,116241,116264,116266,116281,116291,116306,116313,116333,116348,116366,116369,116386,116394,116410,116416,116448,116461,116493,116503,116538,116552,116598,116612,116654,116665,116678,116684,116717,116720,116747,116757,116797,116807,116824,116831,116849,116852,116893,116906,116921,116924,116947,116950,116962,116965,116984,116989,117010,117013,117028,117031,117065,117077,117092,117095,117120,117123,117142,117145,117177,117180,117204,117210,117240,117247,117260,117263,117265,117267,117273,117276,117279,117291,117294,117296,117350,117352,117356,117362,117371,117374,117381,117383,117406,117409,117413,117415,117433,117439,117441,117474,117477,117483,117487,117490,117510,117515,117519,117526,117546,117551,117555,117558,117578,117581,117667,117671,117674,117680,117683],[10,114256,114252],{"id":114257},"_8gymnasium-风格强化学习接口基础",[14,114259,101523],{"id":101522},[63,114261,114262],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[63,114264,114265],{},"你将实现:",[133,114267,114269],{"className":31276,"code":114268,"language":31278,"meta":138,"style":138},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[140,114270,114271,114281],{"__ignoreMap":138},[143,114272,114273,114276,114278],{"class":145,"line":146},[143,114274,114275],{"class":149},"obs, info ",[143,114277,160],{"class":755},[143,114279,114280],{"class":149}," env.reset()\n",[143,114282,114283,114286,114288],{"class":145,"line":35},[143,114284,114285],{"class":149},"obs, reward, terminated, truncated, info ",[143,114287,160],{"class":755},[143,114289,114290],{"class":149}," env.step(action)\n",[63,114292,114293],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[63,114295,114296,114297,114299],{},"前面章节的代码都是“脚本式”的：在 ",[140,114298,103171],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[63,114301,114302],{},"可以先记住 Gymnasium 环境的核心交互：",[133,114304,114307],{"className":114305,"code":114306,"language":6087,"meta":138},[6085],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[140,114308,114306],{"__ignoreMap":138},[14,114310,101646],{"id":101645},[63,114312,101649],{},[133,114314,114315],{"className":24720,"code":105263,"language":24722,"meta":138,"style":138},[140,114316,114317],{"__ignoreMap":138},[143,114318,114319,114321,114323,114325,114327,114329,114331,114333,114335],{"class":145,"line":146},[143,114320,25474],{"class":156},[143,114322,27213],{"class":163},[143,114324,24732],{"class":163},[143,114326,27298],{"class":280},[143,114328,105278],{"class":163},[143,114330,101674],{"class":163},[143,114332,103377],{"class":163},[143,114334,101690],{"class":163},[143,114336,105287],{"class":163},[63,114338,103695],{},[133,114340,114342],{"className":24720,"code":114341,"language":24722,"meta":138,"style":138},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[140,114343,114344],{"__ignoreMap":138},[143,114345,114346,114348,114350,114352,114354],{"class":145,"line":146},[143,114347,24729],{"class":156},[143,114349,24732],{"class":163},[143,114351,101806],{"class":163},[143,114353,108586],{"class":163},[143,114355,114356],{"class":163}," gymnasium\n",[63,114358,103712],{},[133,114360,114362],{"className":24720,"code":114361,"language":24722,"meta":138,"style":138},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[140,114363,114364,114381,114390],{"__ignoreMap":138},[143,114365,114366,114368,114370,114372,114375,114377,114379],{"class":145,"line":146},[143,114367,31228],{"class":156},[143,114369,30074],{"class":163},[143,114371,26013],{"class":280},[143,114373,114374],{"class":163}," mujoco-gym-api",[143,114376,101851],{"class":163},[143,114378,101854],{"class":280},[143,114380,101857],{"class":280},[143,114382,114383,114385,114387],{"class":145,"line":35},[143,114384,31228],{"class":156},[143,114386,101864],{"class":163},[143,114388,114389],{"class":163}," mujoco-gym-api\n",[143,114391,114392,114394,114396,114398,114400],{"class":145,"line":46},[143,114393,24729],{"class":156},[143,114395,24732],{"class":163},[143,114397,101806],{"class":163},[143,114399,108586],{"class":163},[143,114401,114356],{"class":163},[63,114403,101880],{},[19,114405,114406,114416,114419,114425],{},[22,114407,114408,114409,114412,114413,29283],{},"本章使用 ",[140,114410,114411],{},"gymnasium","，不是旧版 ",[140,114414,114415],{},"gym",[22,114417,114418],{},"Gymnasium API 与旧 Gym API 有差异。",[22,114420,114421,114422,29283],{},"旧 Gym 常见返回值是 4 个: ",[140,114423,114424],{},"obs, reward, done, info",[22,114426,114427,114428,29283],{},"Gymnasium 返回值是 5 个: ",[140,114429,114430],{},"obs, reward, terminated, truncated, info",[14,114432,101921],{"id":101920},[63,114434,114435],{},"强化学习环境接口包含:",[1181,114437,114438,114447],{},[1184,114439,114440],{},[1187,114441,114442,114445],{},[1190,114443,114444],{"align":24634},"方法",[1190,114446,103572],{"align":24634},[1227,114448,114449,114459,114469,114479],{},[1187,114450,114451,114456],{},[1232,114452,114453],{"align":24634},[140,114454,114455],{},"reset()",[1232,114457,114458],{"align":24634},"重置环境",[1187,114460,114461,114466],{},[1232,114462,114463],{"align":24634},[140,114464,114465],{},"step(action)",[1232,114467,114468],{"align":24634},"执行动作",[1187,114470,114471,114476],{},[1232,114472,114473],{"align":24634},[140,114474,114475],{},"observation_space",[1232,114477,114478],{"align":24634},"观测空间",[1187,114480,114481,114486],{},[1232,114482,114483],{"align":24634},[140,114484,114485],{},"action_space",[1232,114487,24552],{"align":24634},[63,114489,114490],{},"一个最小环境需要完成:",[133,114492,114495],{"className":114493,"code":114494,"language":6087,"meta":138},[6085],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[140,114496,114494],{"__ignoreMap":138},[58,114498,114500,101894,114503,105513],{"id":114499},"terminated-和-truncated-的区别",[140,114501,114502],{},"terminated",[140,114504,114505],{},"truncated",[63,114507,114508],{},"Gymnasium 把“结束”拆成两个概念：",[1181,114510,114511,114521],{},[1184,114512,114513],{},[1187,114514,114515,114517,114519],{},[1190,114516,105449],{"align":24634},[1190,114518,101576],{"align":24634},[1190,114520,22085],{"align":24634},[1227,114522,114523,114535],{},[1187,114524,114525,114529,114532],{},[1232,114526,114527],{"align":24634},[140,114528,114502],{},[1232,114530,114531],{"align":24634},"任务自然结束",[1232,114533,114534],{"align":24634},"机械臂到达目标、机器人摔倒",[1187,114536,114537,114541,114544],{},[1232,114538,114539],{"align":24634},[140,114540,114505],{},[1232,114542,114543],{"align":24634},"因外部限制截断",[1232,114545,114546],{"align":24634},"达到最大步数、时间限制",[63,114548,114549],{},"本章中：",[133,114551,114553],{"className":31276,"code":114552,"language":31278,"meta":138,"style":138},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[140,114554,114555,114570],{"__ignoreMap":138},[143,114556,114557,114560,114562,114565,114567],{"class":145,"line":146},[143,114558,114559],{"class":149},"terminated ",[143,114561,160],{"class":755},[143,114563,114564],{"class":149}," dist ",[143,114566,150],{"class":755},[143,114568,114569],{"class":280}," 0.05\n",[143,114571,114572,114575,114577,114579,114582,114584,114586],{"class":145,"line":35},[143,114573,114574],{"class":149},"truncated ",[143,114576,160],{"class":755},[143,114578,39771],{"class":280},[143,114580,114581],{"class":149},".steps ",[143,114583,2611],{"class":755},[143,114585,39771],{"class":280},[143,114587,114588],{"class":149},".max_steps\n",[63,114590,114591],{},"也就是：",[19,114593,114594,114597],{},[22,114595,114596],{},"末端距离目标小于 0.05，任务成功结束。",[22,114598,114599],{},"步数超过上限，episode 被截断。",[58,114601,114603,101894,114605],{"id":114602},"observation_space-和-action_space",[140,114604,114475],{},[140,114606,114485],{},[63,114608,114609],{},"这两个对象告诉算法：",[133,114611,114614],{"className":114612,"code":114613,"language":6087,"meta":138},[6085],"观测长什么样\n动作允许多大\n",[140,114615,114613],{"__ignoreMap":138},[63,114617,15532],{},[133,114619,114621],{"className":31276,"code":114620,"language":31278,"meta":138,"style":138},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[140,114622,114623],{"__ignoreMap":138},[143,114624,114625,114627,114630,114632,114635,114638,114641,114643,114645,114648,114650,114652,114654,114656,114658,114660,114662,114665,114667,114669],{"class":145,"line":146},[143,114626,31721],{"class":280},[143,114628,114629],{"class":149},".action_space ",[143,114631,160],{"class":755},[143,114633,114634],{"class":149}," spaces.Box(",[143,114636,114637],{"class":6116},"low",[143,114639,114640],{"class":755},"=-",[143,114642,103279],{"class":280},[143,114644,13335],{"class":149},[143,114646,114647],{"class":6116},"high",[143,114649,160],{"class":755},[143,114651,103279],{"class":280},[143,114653,13335],{"class":149},[143,114655,96839],{"class":6116},[143,114657,160],{"class":755},[143,114659,1049],{"class":149},[143,114661,1122],{"class":280},[143,114663,114664],{"class":149},",), ",[143,114666,94377],{"class":6116},[143,114668,160],{"class":755},[143,114670,114671],{"class":149},"np.float32)\n",[63,114673,114674,114675,114678],{},"表示动作是 2 维数组，每个值都在 ",[140,114676,114677],{},"[-1, 1]"," 范围内。",[133,114680,114682],{"className":31276,"code":114681,"language":31278,"meta":138,"style":138},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[140,114683,114684],{"__ignoreMap":138},[143,114685,114686,114688,114691,114693,114695,114697,114699,114702,114704,114706,114708,114710,114712,114714,114716,114718,114720,114722],{"class":145,"line":146},[143,114687,31721],{"class":280},[143,114689,114690],{"class":149},".observation_space ",[143,114692,160],{"class":755},[143,114694,114634],{"class":149},[143,114696,114637],{"class":6116},[143,114698,114640],{"class":755},[143,114700,114701],{"class":149},"np.inf, ",[143,114703,114647],{"class":6116},[143,114705,160],{"class":755},[143,114707,114701],{"class":149},[143,114709,96839],{"class":6116},[143,114711,160],{"class":755},[143,114713,1049],{"class":149},[143,114715,1487],{"class":280},[143,114717,114664],{"class":149},[143,114719,94377],{"class":6116},[143,114721,160],{"class":755},[143,114723,114671],{"class":149},[63,114725,114726],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[58,114728,114730],{"id":114729},"frame_skip-是什么","frame_skip 是什么",[133,114732,114734],{"className":31276,"code":114733,"language":31278,"meta":138,"style":138},"self.frame_skip = 5\n",[140,114735,114736],{"__ignoreMap":138},[143,114737,114738,114740,114743,114745],{"class":145,"line":146},[143,114739,31721],{"class":280},[143,114741,114742],{"class":149},".frame_skip ",[143,114744,160],{"class":755},[143,114746,55312],{"class":280},[63,114748,114749,114750,114753,114754,114756],{},"表示外部调用一次 ",[140,114751,114752],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[140,114755,102091],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114758,102129],{"id":102128},[133,114760,114762],{"className":31276,"code":114761,"language":31278,"meta":138,"style":138},"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",[140,114763,114764,114776,114782,114792,114803,114807,114811,114819,114824,114828,114832,114836,114840,114844,114848,114852,114857,114861,114865,114869,114874,114878,114882,114886,114890,114894,114898,114902,114906,114910,114914,114918,114922,114926,114944,114959,114963,114976,114986,115001,115018,115022,115043,115062,115087,115101,115105,115115,115127,115137,115141,115183,115221,115225,115235,115251,115266,115285,115292,115296,115309,115324,115339,115352,115371,115387,115391,115432,115447,115462,115466,115505,115516,115529,115533,115543,115552,115556,115566,115581,115599,115603,115614,115631,115644,115648,115658,115662,115673,115684,115688,115702,115716,115732,115736,115749,115766,115781,115788,115792,115796,115808,115818,115836,115848,115860,115864,115872,115888,115897,115906,115914,115956,115969,115974,115978,115996,116000,116004,116016],{"__ignoreMap":138},[143,114765,114766,114768,114771,114773],{"class":145,"line":146},[143,114767,31290],{"class":755},[143,114769,114770],{"class":149}," gymnasium ",[143,114772,32281],{"class":755},[143,114774,114775],{"class":149}," gym\n",[143,114777,114778,114780],{"class":145,"line":35},[143,114779,31290],{"class":755},[143,114781,102177],{"class":149},[143,114783,114784,114786,114788,114790],{"class":145,"line":46},[143,114785,31290],{"class":755},[143,114787,32278],{"class":149},[143,114789,32281],{"class":755},[143,114791,32284],{"class":149},[143,114793,114794,114796,114798,114800],{"class":145,"line":293},[143,114795,31635],{"class":755},[143,114797,114770],{"class":149},[143,114799,31290],{"class":755},[143,114801,114802],{"class":149}," spaces\n",[143,114804,114805],{"class":145,"line":306},[143,114806,3300],{"emptyLinePlaceholder":976},[143,114808,114809],{"class":145,"line":319},[143,114810,3300],{"emptyLinePlaceholder":976},[143,114812,114813,114815,114817],{"class":145,"line":332},[143,114814,102190],{"class":280},[143,114816,14464],{"class":755},[143,114818,102195],{"class":163},[143,114820,114821],{"class":145,"line":345},[143,114822,114823],{"class":163},"\u003Cmujoco model=\"gym_reacher\">\n",[143,114825,114826],{"class":145,"line":701},[143,114827,112613],{"class":163},[143,114829,114830],{"class":145,"line":707},[143,114831,3300],{"emptyLinePlaceholder":976},[143,114833,114834],{"class":145,"line":727},[143,114835,102214],{"class":163},[143,114837,114838],{"class":145,"line":2518},[143,114839,112631],{"class":163},[143,114841,114842],{"class":145,"line":2524},[143,114843,3300],{"emptyLinePlaceholder":976},[143,114845,114846],{"class":145,"line":2529},[143,114847,112640],{"class":163},[143,114849,114850],{"class":145,"line":2543},[143,114851,112645],{"class":163},[143,114853,114854],{"class":145,"line":2548},[143,114855,114856],{"class":163},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[143,114858,114859],{"class":145,"line":2554},[143,114860,3300],{"emptyLinePlaceholder":976},[143,114862,114863],{"class":145,"line":2575},[143,114864,112659],{"class":163},[143,114866,114867],{"class":145,"line":2580},[143,114868,112664],{"class":163},[143,114870,114871],{"class":145,"line":2594},[143,114872,114873],{"class":163},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[143,114875,114876],{"class":145,"line":2599},[143,114877,112674],{"class":163},[143,114879,114880],{"class":145,"line":2628},[143,114881,107313],{"class":163},[143,114883,114884],{"class":145,"line":2633},[143,114885,102243],{"class":163},[143,114887,114888],{"class":145,"line":2650},[143,114889,102248],{"class":163},[143,114891,114892],{"class":145,"line":2655},[143,114893,3300],{"emptyLinePlaceholder":976},[143,114895,114896],{"class":145,"line":2660},[143,114897,107330],{"class":163},[143,114899,114900],{"class":145,"line":2665},[143,114901,112699],{"class":163},[143,114903,114904],{"class":145,"line":2679},[143,114905,112704],{"class":163},[143,114907,114908],{"class":145,"line":2684},[143,114909,107340],{"class":163},[143,114911,114912],{"class":145,"line":3477},[143,114913,102253],{"class":163},[143,114915,114916],{"class":145,"line":3491},[143,114917,96574],{"class":163},[143,114919,114920],{"class":145,"line":3499},[143,114921,3300],{"emptyLinePlaceholder":976},[143,114923,114924],{"class":145,"line":3504},[143,114925,3300],{"emptyLinePlaceholder":976},[143,114927,114928,114930,114933,114935,114937,114939,114942],{"class":145,"line":3510},[143,114929,15593],{"class":755},[143,114931,114932],{"class":156}," ReacherEnv",[143,114934,1049],{"class":149},[143,114936,114415],{"class":156},[143,114938,1599],{"class":149},[143,114940,114941],{"class":156},"Env",[143,114943,31684],{"class":149},[143,114945,114946,114949,114951,114953,114956],{"class":145,"line":3516},[143,114947,114948],{"class":149},"    metadata ",[143,114950,160],{"class":755},[143,114952,5348],{"class":149},[143,114954,114955],{"class":163},"\"render_modes\"",[143,114957,114958],{"class":149},": []}\n",[143,114960,114961],{"class":145,"line":3521},[143,114962,3300],{"emptyLinePlaceholder":976},[143,114964,114965,114967,114969,114972,114974],{"class":145,"line":8848},[143,114966,31699],{"class":755},[143,114968,31702],{"class":280},[143,114970,114971],{"class":149},"(self) -> ",[143,114973,96562],{"class":280},[143,114975,4639],{"class":149},[143,114977,114978,114980,114982,114984],{"class":145,"line":8872},[143,114979,31715],{"class":280},[143,114981,18159],{"class":149},[143,114983,31727],{"class":280},[143,114985,2876],{"class":149},[143,114987,114988,114990,114993,114995,114997,114999],{"class":145,"line":8877},[143,114989,31743],{"class":280},[143,114991,114992],{"class":149},".model ",[143,114994,160],{"class":755},[143,114996,102288],{"class":149},[143,114998,102190],{"class":280},[143,115000,1055],{"class":149},[143,115002,115003,115005,115008,115010,115013,115015],{"class":145,"line":8883},[143,115004,31743],{"class":280},[143,115006,115007],{"class":149},".data ",[143,115009,160],{"class":755},[143,115011,115012],{"class":149}," mujoco.MjData(",[143,115014,31721],{"class":280},[143,115016,115017],{"class":149},".model)\n",[143,115019,115020],{"class":145,"line":8910},[143,115021,3300],{"emptyLinePlaceholder":976},[143,115023,115024,115026,115029,115031,115034,115036,115039,115041],{"class":145,"line":8915},[143,115025,31743],{"class":280},[143,115027,115028],{"class":149},".tip_site_id ",[143,115030,160],{"class":755},[143,115032,115033],{"class":149}," mujoco.mj_name2id(",[143,115035,31721],{"class":280},[143,115037,115038],{"class":149},".model, mujoco.mjtObj.mjOBJ_SITE, ",[143,115040,112411],{"class":163},[143,115042,1055],{"class":149},[143,115044,115045,115047,115050,115052,115054,115056,115058,115060],{"class":145,"line":8921},[143,115046,31743],{"class":280},[143,115048,115049],{"class":149},".target_site_id ",[143,115051,160],{"class":755},[143,115053,115033],{"class":149},[143,115055,31721],{"class":280},[143,115057,115038],{"class":149},[143,115059,112834],{"class":163},[143,115061,1055],{"class":149},[143,115063,115064,115066,115068,115070,115072,115074,115077,115079,115081,115083,115085],{"class":145,"line":8933},[143,115065,3397],{"class":755},[143,115067,39771],{"class":280},[143,115069,115028],{"class":149},[143,115071,150],{"class":755},[143,115073,4993],{"class":280},[143,115075,115076],{"class":755}," or",[143,115078,39771],{"class":280},[143,115080,115049],{"class":149},[143,115082,150],{"class":755},[143,115084,4993],{"class":280},[143,115086,4639],{"class":149},[143,115088,115089,115092,115094,115096,115099],{"class":145,"line":8945},[143,115090,115091],{"class":755},"            raise",[143,115093,104310],{"class":280},[143,115095,1049],{"class":149},[143,115097,115098],{"class":163},"\"required sites not found\"",[143,115100,1055],{"class":149},[143,115102,115103],{"class":145,"line":8957},[143,115104,3300],{"emptyLinePlaceholder":976},[143,115106,115107,115109,115111,115113],{"class":145,"line":10616},[143,115108,31743],{"class":280},[143,115110,114742],{"class":149},[143,115112,160],{"class":755},[143,115114,55312],{"class":280},[143,115116,115117,115119,115122,115124],{"class":145,"line":10641},[143,115118,31743],{"class":280},[143,115120,115121],{"class":149},".max_steps ",[143,115123,160],{"class":755},[143,115125,115126],{"class":280}," 200\n",[143,115128,115129,115131,115133,115135],{"class":145,"line":10664},[143,115130,31743],{"class":280},[143,115132,114581],{"class":149},[143,115134,160],{"class":755},[143,115136,48231],{"class":280},[143,115138,115139],{"class":145,"line":10688},[143,115140,3300],{"emptyLinePlaceholder":976},[143,115142,115143,115145,115147,115149,115151,115153,115155,115157,115159,115161,115163,115165,115167,115169,115171,115173,115175,115177,115179,115181],{"class":145,"line":10693},[143,115144,31743],{"class":280},[143,115146,114629],{"class":149},[143,115148,160],{"class":755},[143,115150,114634],{"class":149},[143,115152,114637],{"class":6116},[143,115154,114640],{"class":755},[143,115156,103279],{"class":280},[143,115158,13335],{"class":149},[143,115160,114647],{"class":6116},[143,115162,160],{"class":755},[143,115164,103279],{"class":280},[143,115166,13335],{"class":149},[143,115168,96839],{"class":6116},[143,115170,160],{"class":755},[143,115172,1049],{"class":149},[143,115174,1122],{"class":280},[143,115176,114664],{"class":149},[143,115178,94377],{"class":6116},[143,115180,160],{"class":755},[143,115182,114671],{"class":149},[143,115184,115185,115187,115189,115191,115193,115195,115197,115199,115201,115203,115205,115207,115209,115211,115213,115215,115217,115219],{"class":145,"line":10698},[143,115186,31743],{"class":280},[143,115188,114690],{"class":149},[143,115190,160],{"class":755},[143,115192,114634],{"class":149},[143,115194,114637],{"class":6116},[143,115196,114640],{"class":755},[143,115198,114701],{"class":149},[143,115200,114647],{"class":6116},[143,115202,160],{"class":755},[143,115204,114701],{"class":149},[143,115206,96839],{"class":6116},[143,115208,160],{"class":755},[143,115210,1049],{"class":149},[143,115212,1487],{"class":280},[143,115214,114664],{"class":149},[143,115216,94377],{"class":6116},[143,115218,160],{"class":755},[143,115220,114671],{"class":149},[143,115222,115223],{"class":145,"line":10703},[143,115224,3300],{"emptyLinePlaceholder":976},[143,115226,115227,115229,115232],{"class":145,"line":10712},[143,115228,31699],{"class":755},[143,115230,115231],{"class":156}," _get_obs",[143,115233,115234],{"class":149},"(self) -> np.ndarray:\n",[143,115236,115237,115239,115241,115243,115246,115248],{"class":145,"line":10717},[143,115238,113012],{"class":149},[143,115240,160],{"class":755},[143,115242,39771],{"class":280},[143,115244,115245],{"class":149},".data.site_xpos[",[143,115247,31721],{"class":280},[143,115249,115250],{"class":149},".tip_site_id].copy()\n",[143,115252,115253,115255,115257,115259,115261,115263],{"class":145,"line":10723},[143,115254,113025],{"class":149},[143,115256,160],{"class":755},[143,115258,39771],{"class":280},[143,115260,115245],{"class":149},[143,115262,31721],{"class":280},[143,115264,115265],{"class":149},".target_site_id].copy()\n",[143,115267,115268,115270,115272,115275,115277,115280,115282],{"class":145,"line":10744},[143,115269,111057],{"class":149},[143,115271,160],{"class":755},[143,115273,115274],{"class":149}," np.concatenate([",[143,115276,31721],{"class":280},[143,115278,115279],{"class":149},".data.qpos.copy(), ",[143,115281,31721],{"class":280},[143,115283,115284],{"class":149},".data.qvel.copy(), tip, target])\n",[143,115286,115287,115289],{"class":145,"line":10750},[143,115288,15651],{"class":755},[143,115290,115291],{"class":149}," obs.astype(np.float32)\n",[143,115293,115294],{"class":145,"line":10764},[143,115295,3300],{"emptyLinePlaceholder":976},[143,115297,115298,115300,115303,115305,115307],{"class":145,"line":10770},[143,115299,31699],{"class":755},[143,115301,115302],{"class":156}," _get_reward",[143,115304,114971],{"class":149},[143,115306,1087],{"class":280},[143,115308,4639],{"class":149},[143,115310,115311,115313,115315,115317,115319,115321],{"class":145,"line":10797},[143,115312,113012],{"class":149},[143,115314,160],{"class":755},[143,115316,39771],{"class":280},[143,115318,115245],{"class":149},[143,115320,31721],{"class":280},[143,115322,115323],{"class":149},".tip_site_id]\n",[143,115325,115326,115328,115330,115332,115334,115336],{"class":145,"line":10806},[143,115327,113025],{"class":149},[143,115329,160],{"class":755},[143,115331,39771],{"class":280},[143,115333,115245],{"class":149},[143,115335,31721],{"class":280},[143,115337,115338],{"class":149},".target_site_id]\n",[143,115340,115341,115344,115346,115348,115350],{"class":145,"line":10812},[143,115342,115343],{"class":149},"        dist ",[143,115345,160],{"class":755},[143,115347,112476],{"class":149},[143,115349,1573],{"class":755},[143,115351,112481],{"class":149},[143,115353,115354,115357,115359,115361,115363,115366,115368],{"class":145,"line":10820},[143,115355,115356],{"class":149},"        control_cost ",[143,115358,160],{"class":755},[143,115360,112912],{"class":280},[143,115362,7418],{"class":755},[143,115364,115365],{"class":149}," np.sum(np.square(",[143,115367,31721],{"class":280},[143,115369,115370],{"class":149},".data.ctrl))\n",[143,115372,115373,115375,115377,115379,115381,115383,115385],{"class":145,"line":10825},[143,115374,15651],{"class":755},[143,115376,110672],{"class":280},[143,115378,1049],{"class":149},[143,115380,1573],{"class":755},[143,115382,112471],{"class":149},[143,115384,1573],{"class":755},[143,115386,112934],{"class":149},[143,115388,115389],{"class":145,"line":17502},[143,115390,3300],{"emptyLinePlaceholder":976},[143,115392,115393,115395,115398,115401,115403,115406,115408,115410,115412,115414,115416,115419,115422,115424,115426,115428,115430],{"class":145,"line":17508},[143,115394,31699],{"class":755},[143,115396,115397],{"class":156}," reset",[143,115399,115400],{"class":149},"(self, ",[143,115402,1496],{"class":755},[143,115404,115405],{"class":149},", seed: ",[143,115407,1052],{"class":280},[143,115409,26007],{"class":755},[143,115411,39831],{"class":280},[143,115413,14464],{"class":755},[143,115415,39831],{"class":280},[143,115417,115418],{"class":149},", options: ",[143,115420,115421],{"class":280},"dict",[143,115423,26007],{"class":755},[143,115425,39831],{"class":280},[143,115427,14464],{"class":755},[143,115429,39831],{"class":280},[143,115431,31684],{"class":149},[143,115433,115434,115436,115439,115442,115444],{"class":145,"line":17531},[143,115435,31715],{"class":280},[143,115437,115438],{"class":149},"().reset(",[143,115440,115441],{"class":6116},"seed",[143,115443,160],{"class":755},[143,115445,115446],{"class":149},"seed)\n",[143,115448,115449,115452,115454,115457,115459],{"class":145,"line":17537},[143,115450,115451],{"class":149},"        mujoco.mj_resetData(",[143,115453,31721],{"class":280},[143,115455,115456],{"class":149},".model, ",[143,115458,31721],{"class":280},[143,115460,115461],{"class":149},".data)\n",[143,115463,115464],{"class":145,"line":17560},[143,115465,3300],{"emptyLinePlaceholder":976},[143,115467,115468,115470,115473,115475,115477,115480,115482,115484,115486,115488,115490,115492,115494,115496,115498,115500,115502],{"class":145,"line":17574},[143,115469,31743],{"class":280},[143,115471,115472],{"class":149},".data.qpos[:] ",[143,115474,160],{"class":755},[143,115476,39771],{"class":280},[143,115478,115479],{"class":149},".np_random.uniform(",[143,115481,114637],{"class":6116},[143,115483,114640],{"class":755},[143,115485,87088],{"class":280},[143,115487,13335],{"class":149},[143,115489,114647],{"class":6116},[143,115491,160],{"class":755},[143,115493,87088],{"class":280},[143,115495,13335],{"class":149},[143,115497,32394],{"class":6116},[143,115499,160],{"class":755},[143,115501,31721],{"class":280},[143,115503,115504],{"class":149},".model.nq)\n",[143,115506,115507,115509,115512,115514],{"class":145,"line":17594},[143,115508,31743],{"class":280},[143,115510,115511],{"class":149},".data.qvel[:] ",[143,115513,160],{"class":755},[143,115515,105636],{"class":280},[143,115517,115518,115521,115523,115525,115527],{"class":145,"line":17600},[143,115519,115520],{"class":149},"        mujoco.mj_forward(",[143,115522,31721],{"class":280},[143,115524,115456],{"class":149},[143,115526,31721],{"class":280},[143,115528,115461],{"class":149},[143,115530,115531],{"class":145,"line":17611},[143,115532,3300],{"emptyLinePlaceholder":976},[143,115534,115535,115537,115539,115541],{"class":145,"line":17634},[143,115536,31743],{"class":280},[143,115538,114581],{"class":149},[143,115540,160],{"class":755},[143,115542,48231],{"class":280},[143,115544,115545,115547,115549],{"class":145,"line":17656},[143,115546,15651],{"class":755},[143,115548,39771],{"class":280},[143,115550,115551],{"class":149},"._get_obs(), {}\n",[143,115553,115554],{"class":145,"line":17661},[143,115555,3300],{"emptyLinePlaceholder":976},[143,115557,115558,115560,115563],{"class":145,"line":17667},[143,115559,31699],{"class":755},[143,115561,115562],{"class":156}," step",[143,115564,115565],{"class":149},"(self, action):\n",[143,115567,115568,115570,115572,115575,115577,115579],{"class":145,"line":17681},[143,115569,111097],{"class":149},[143,115571,160],{"class":755},[143,115573,115574],{"class":149}," np.asarray(action, ",[143,115576,94377],{"class":6116},[143,115578,160],{"class":755},[143,115580,114671],{"class":149},[143,115582,115583,115585,115587,115589,115591,115594,115596],{"class":145,"line":17694},[143,115584,111097],{"class":149},[143,115586,160],{"class":755},[143,115588,108322],{"class":149},[143,115590,31721],{"class":280},[143,115592,115593],{"class":149},".action_space.low, ",[143,115595,31721],{"class":280},[143,115597,115598],{"class":149},".action_space.high)\n",[143,115600,115601],{"class":145,"line":17699},[143,115602,3300],{"emptyLinePlaceholder":976},[143,115604,115605,115607,115610,115612],{"class":145,"line":17713},[143,115606,31743],{"class":280},[143,115608,115609],{"class":149},".data.ctrl[:] ",[143,115611,160],{"class":755},[143,115613,108345],{"class":149},[143,115615,115616,115618,115620,115622,115624,115626,115628],{"class":145,"line":17718},[143,115617,4303],{"class":755},[143,115619,102377],{"class":149},[143,115621,26941],{"class":755},[143,115623,33341],{"class":280},[143,115625,1049],{"class":149},[143,115627,31721],{"class":280},[143,115629,115630],{"class":149},".frame_skip):\n",[143,115632,115633,115636,115638,115640,115642],{"class":145,"line":17724},[143,115634,115635],{"class":149},"            mujoco.mj_step(",[143,115637,31721],{"class":280},[143,115639,115456],{"class":149},[143,115641,31721],{"class":280},[143,115643,115461],{"class":149},[143,115645,115646],{"class":145,"line":17729},[143,115647,3300],{"emptyLinePlaceholder":976},[143,115649,115650,115652,115654,115656],{"class":145,"line":17743},[143,115651,31743],{"class":280},[143,115653,114581],{"class":149},[143,115655,10377],{"class":755},[143,115657,56582],{"class":280},[143,115659,115660],{"class":145,"line":17748},[143,115661,3300],{"emptyLinePlaceholder":976},[143,115663,115664,115666,115668,115670],{"class":145,"line":17753},[143,115665,111057],{"class":149},[143,115667,160],{"class":755},[143,115669,39771],{"class":280},[143,115671,115672],{"class":149},"._get_obs()\n",[143,115674,115675,115677,115679,115681],{"class":145,"line":17767},[143,115676,111162],{"class":149},[143,115678,160],{"class":755},[143,115680,39771],{"class":280},[143,115682,115683],{"class":149},"._get_reward()\n",[143,115685,115686],{"class":145,"line":17779},[143,115687,3300],{"emptyLinePlaceholder":976},[143,115689,115690,115692,115694,115696,115698,115700],{"class":145,"line":17784},[143,115691,113012],{"class":149},[143,115693,160],{"class":755},[143,115695,39771],{"class":280},[143,115697,115245],{"class":149},[143,115699,31721],{"class":280},[143,115701,115323],{"class":149},[143,115703,115704,115706,115708,115710,115712,115714],{"class":145,"line":17797},[143,115705,113025],{"class":149},[143,115707,160],{"class":755},[143,115709,39771],{"class":280},[143,115711,115245],{"class":149},[143,115713,31721],{"class":280},[143,115715,115338],{"class":149},[143,115717,115718,115720,115722,115724,115727,115729],{"class":145,"line":17802},[143,115719,115343],{"class":149},[143,115721,160],{"class":755},[143,115723,110672],{"class":280},[143,115725,115726],{"class":149},"(np.linalg.norm(tip ",[143,115728,1573],{"class":755},[143,115730,115731],{"class":149}," target))\n",[143,115733,115734],{"class":145,"line":17807},[143,115735,3300],{"emptyLinePlaceholder":976},[143,115737,115738,115741,115743,115745,115747],{"class":145,"line":17812},[143,115739,115740],{"class":149},"        terminated ",[143,115742,160],{"class":755},[143,115744,114564],{"class":149},[143,115746,150],{"class":755},[143,115748,114569],{"class":280},[143,115750,115751,115754,115756,115758,115760,115762,115764],{"class":145,"line":17825},[143,115752,115753],{"class":149},"        truncated ",[143,115755,160],{"class":755},[143,115757,39771],{"class":280},[143,115759,114581],{"class":149},[143,115761,2611],{"class":755},[143,115763,39771],{"class":280},[143,115765,114588],{"class":149},[143,115767,115768,115771,115773,115775,115778],{"class":145,"line":17830},[143,115769,115770],{"class":149},"        info ",[143,115772,160],{"class":755},[143,115774,5348],{"class":149},[143,115776,115777],{"class":163},"\"distance\"",[143,115779,115780],{"class":149},": dist}\n",[143,115782,115783,115785],{"class":145,"line":33531},[143,115784,15651],{"class":755},[143,115786,115787],{"class":149}," obs, reward, terminated, truncated, info\n",[143,115789,115790],{"class":145,"line":33537},[143,115791,3300],{"emptyLinePlaceholder":976},[143,115793,115794],{"class":145,"line":33543},[143,115795,3300],{"emptyLinePlaceholder":976},[143,115797,115798,115800,115802,115804,115806],{"class":145,"line":33549},[143,115799,32845],{"class":755},[143,115801,2873],{"class":156},[143,115803,102274],{"class":149},[143,115805,96562],{"class":280},[143,115807,4639],{"class":149},[143,115809,115810,115813,115815],{"class":145,"line":33555},[143,115811,115812],{"class":149},"    env ",[143,115814,160],{"class":755},[143,115816,115817],{"class":149}," ReacherEnv()\n",[143,115819,115820,115823,115825,115828,115830,115832,115834],{"class":145,"line":33566},[143,115821,115822],{"class":149},"    obs, info ",[143,115824,160],{"class":755},[143,115826,115827],{"class":149}," env.reset(",[143,115829,115441],{"class":6116},[143,115831,160],{"class":755},[143,115833,1234],{"class":280},[143,115835,1055],{"class":149},[143,115837,115838,115840,115842,115845],{"class":145,"line":33572},[143,115839,32197],{"class":280},[143,115841,1049],{"class":149},[143,115843,115844],{"class":163},"\"initial obs shape:\"",[143,115846,115847],{"class":149},", obs.shape)\n",[143,115849,115850,115852,115854,115857],{"class":145,"line":33592},[143,115851,32197],{"class":280},[143,115853,1049],{"class":149},[143,115855,115856],{"class":163},"\"initial info:\"",[143,115858,115859],{"class":149},", info)\n",[143,115861,115862],{"class":145,"line":33598},[143,115863,3300],{"emptyLinePlaceholder":976},[143,115865,115866,115868,115870],{"class":145,"line":33609},[143,115867,111028],{"class":149},[143,115869,160],{"class":755},[143,115871,105636],{"class":280},[143,115873,115874,115876,115878,115880,115882,115884,115886],{"class":145,"line":33615},[143,115875,4101],{"class":755},[143,115877,32514],{"class":149},[143,115879,26941],{"class":755},[143,115881,33341],{"class":280},[143,115883,1049],{"class":149},[143,115885,1741],{"class":280},[143,115887,31684],{"class":149},[143,115889,115890,115892,115894],{"class":145,"line":33621},[143,115891,111097],{"class":149},[143,115893,160],{"class":755},[143,115895,115896],{"class":149}," env.action_space.sample()\n",[143,115898,115899,115902,115904],{"class":145,"line":33627},[143,115900,115901],{"class":149},"        obs, reward, terminated, truncated, info ",[143,115903,160],{"class":755},[143,115905,114290],{"class":149},[143,115907,115908,115910,115912],{"class":145,"line":33633},[143,115909,111172],{"class":149},[143,115911,10377],{"class":755},[143,115913,111177],{"class":149},[143,115915,115916,115918,115920,115922,115924,115927,115929,115931,115934,115936,115938,115941,115943,115945,115948,115950,115952,115954],{"class":145,"line":33639},[143,115917,33349],{"class":280},[143,115919,1049],{"class":149},[143,115921,111206],{"class":163},[143,115923,111209],{"class":149},[143,115925,115926],{"class":163},"\"reward:\"",[143,115928,13335],{"class":149},[143,115930,32916],{"class":280},[143,115932,115933],{"class":149},"(reward, ",[143,115935,1116],{"class":280},[143,115937,111220],{"class":149},[143,115939,115940],{"class":163},"\"distance:\"",[143,115942,13335],{"class":149},[143,115944,32916],{"class":280},[143,115946,115947],{"class":149},"(info[",[143,115949,115777],{"class":163},[143,115951,113077],{"class":149},[143,115953,1116],{"class":280},[143,115955,31395],{"class":149},[143,115957,115958,115960,115963,115966],{"class":145,"line":33645},[143,115959,3397],{"class":755},[143,115961,115962],{"class":149}," terminated ",[143,115964,115965],{"class":755},"or",[143,115967,115968],{"class":149}," truncated:\n",[143,115970,115971],{"class":145,"line":33651},[143,115972,115973],{"class":755},"            break\n",[143,115975,115976],{"class":145,"line":33671},[143,115977,3300],{"emptyLinePlaceholder":976},[143,115979,115980,115982,115984,115986,115988,115990,115992,115994],{"class":145,"line":33677},[143,115981,32197],{"class":280},[143,115983,1049],{"class":149},[143,115985,111251],{"class":163},[143,115987,13335],{"class":149},[143,115989,32916],{"class":280},[143,115991,111258],{"class":149},[143,115993,1116],{"class":280},[143,115995,31395],{"class":149},[143,115997,115998],{"class":145,"line":33693},[143,115999,3300],{"emptyLinePlaceholder":976},[143,116001,116002],{"class":145,"line":33699},[143,116003,3300],{"emptyLinePlaceholder":976},[143,116005,116006,116008,116010,116012,116014],{"class":145,"line":33713},[143,116007,2434],{"class":755},[143,116009,32118],{"class":280},[143,116011,102435],{"class":755},[143,116013,102438],{"class":163},[143,116015,4639],{"class":149},[143,116017,116018],{"class":145,"line":33719},[143,116019,102445],{"class":149},[63,116021,104445],{},[133,116023,116025],{"className":24720,"code":116024,"language":24722,"meta":138,"style":138},"touch ch8_gym_env.py\n",[140,116026,116027],{"__ignoreMap":138},[143,116028,116029,116031],{"class":145,"line":146},[143,116030,102159],{"class":156},[143,116032,116033],{"class":163}," ch8_gym_env.py\n",[63,116035,111319],{},[133,116037,116039],{"className":24720,"code":116038,"language":24722,"meta":138,"style":138},"python ch8_gym_env.py\n",[140,116040,116041],{"__ignoreMap":138},[143,116042,116043,116045],{"class":145,"line":146},[143,116044,31278],{"class":156},[143,116046,116033],{"class":163},[58,116048,102448],{"id":102448},[63,116050,116051],{},"继承 Gymnasium 环境：",[133,116053,116055],{"className":31276,"code":116054,"language":31278,"meta":138,"style":138},"class ReacherEnv(gym.Env):\n",[140,116056,116057],{"__ignoreMap":138},[143,116058,116059,116061,116063,116065,116067,116069,116071],{"class":145,"line":146},[143,116060,15593],{"class":755},[143,116062,114932],{"class":156},[143,116064,1049],{"class":149},[143,116066,114415],{"class":156},[143,116068,1599],{"class":149},[143,116070,114941],{"class":156},[143,116072,31684],{"class":149},[63,116074,116075],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[63,116077,116078],{},"初始化模型：",[133,116080,116082],{"className":31276,"code":116081,"language":31278,"meta":138,"style":138},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[140,116083,116084,116098],{"__ignoreMap":138},[143,116085,116086,116088,116090,116092,116094,116096],{"class":145,"line":146},[143,116087,31721],{"class":280},[143,116089,114992],{"class":149},[143,116091,160],{"class":755},[143,116093,102288],{"class":149},[143,116095,102190],{"class":280},[143,116097,1055],{"class":149},[143,116099,116100,116102,116104,116106,116108,116110],{"class":145,"line":35},[143,116101,31721],{"class":280},[143,116103,115007],{"class":149},[143,116105,160],{"class":755},[143,116107,115012],{"class":149},[143,116109,31721],{"class":280},[143,116111,115017],{"class":149},[63,116113,116114,116115,116117],{},"这和前面章节一样，只是现在放到了类的 ",[140,116116,31727],{}," 里。",[63,116119,116120],{},"缓存 site ID：",[133,116122,116124],{"className":31276,"code":116123,"language":31278,"meta":138,"style":138},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[140,116125,116126,116140],{"__ignoreMap":138},[143,116127,116128,116130,116132,116134,116136,116138],{"class":145,"line":146},[143,116129,31721],{"class":280},[143,116131,115028],{"class":149},[143,116133,160],{"class":755},[143,116135,115033],{"class":149},[143,116137,90432],{"class":280},[143,116139,1055],{"class":149},[143,116141,116142,116144,116146,116148,116150,116152],{"class":145,"line":35},[143,116143,31721],{"class":280},[143,116145,115049],{"class":149},[143,116147,160],{"class":755},[143,116149,115033],{"class":149},[143,116151,90432],{"class":280},[143,116153,1055],{"class":149},[63,116155,116156],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[63,116158,116159],{},"reset：",[133,116161,116163],{"className":31276,"code":116162,"language":31278,"meta":138,"style":138},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[140,116164,116165],{"__ignoreMap":138},[143,116166,116167,116169,116171,116173,116175,116177,116179,116181,116183,116185,116187,116189,116191,116193,116195,116197,116199],{"class":145,"line":146},[143,116168,32845],{"class":755},[143,116170,115397],{"class":156},[143,116172,115400],{"class":149},[143,116174,1496],{"class":755},[143,116176,115405],{"class":149},[143,116178,1052],{"class":280},[143,116180,26007],{"class":755},[143,116182,39831],{"class":280},[143,116184,14464],{"class":755},[143,116186,39831],{"class":280},[143,116188,115418],{"class":149},[143,116190,115421],{"class":280},[143,116192,26007],{"class":755},[143,116194,39831],{"class":280},[143,116196,14464],{"class":755},[143,116198,39831],{"class":280},[143,116200,31684],{"class":149},[63,116202,116203,116205],{},[140,116204,70937],{}," 做四件事：",[19,116207,116208,116211,116214,116217],{},[22,116209,116210],{},"设置随机种子。",[22,116212,116213],{},"重置 MuJoCo data。",[22,116215,116216],{},"随机初始化关节角。",[22,116218,116219],{},"返回初始观测和 info。",[63,116221,116222],{},"step：",[133,116224,116226],{"className":31276,"code":116225,"language":31278,"meta":138,"style":138},"def step(self, action):\n",[140,116227,116228],{"__ignoreMap":138},[143,116229,116230,116232,116234],{"class":145,"line":146},[143,116231,32845],{"class":755},[143,116233,115562],{"class":156},[143,116235,115565],{"class":149},[63,116237,116238,116240],{},[140,116239,108009],{}," 做六件事：",[19,116242,116243,116246,116252,116255,116258,116261],{},[22,116244,116245],{},"检查并裁剪 action。",[22,116247,116248,116249,29283],{},"写入 ",[140,116250,116251],{},"self.data.ctrl",[22,116253,116254],{},"连续推进若干个 MuJoCo 物理步。",[22,116256,116257],{},"计算新观测。",[22,116259,116260],{},"计算奖励和结束条件。",[22,116262,116263],{},"返回 Gymnasium 标准五元组。",[58,116265,102584],{"id":102584},[133,116267,116269],{"className":31276,"code":116268,"language":31278,"meta":138,"style":138},"import gymnasium as gym\n",[140,116270,116271],{"__ignoreMap":138},[143,116272,116273,116275,116277,116279],{"class":145,"line":146},[143,116274,31290],{"class":755},[143,116276,114770],{"class":149},[143,116278,32281],{"class":755},[143,116280,114775],{"class":149},[63,116282,116283,116284,116286,116287,116290],{},"导入 Gymnasium，并起别名 ",[140,116285,114415],{},"。后面写 ",[140,116288,116289],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[133,116292,116294],{"className":31276,"code":116293,"language":31278,"meta":138,"style":138},"from gymnasium import spaces\n",[140,116295,116296],{"__ignoreMap":138},[143,116297,116298,116300,116302,116304],{"class":145,"line":146},[143,116299,31635],{"class":755},[143,116301,114770],{"class":149},[143,116303,31290],{"class":755},[143,116305,114802],{"class":149},[63,116307,116308,116309,116312],{},"导入空间定义工具。",[140,116310,116311],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[133,116314,116315],{"className":31276,"code":116054,"language":31278,"meta":138,"style":138},[140,116316,116317],{"__ignoreMap":138},[143,116318,116319,116321,116323,116325,116327,116329,116331],{"class":145,"line":146},[143,116320,15593],{"class":755},[143,116322,114932],{"class":156},[143,116324,1049],{"class":149},[143,116326,114415],{"class":156},[143,116328,1599],{"class":149},[143,116330,114941],{"class":156},[143,116332,31684],{"class":149},[63,116334,116335,116336,116339,116340,116342,116343,101894,116345,116347],{},"定义一个类，名字叫 ",[140,116337,116338],{},"ReacherEnv","。括号里的 ",[140,116341,116289],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[140,116344,70937],{},[140,116346,108009],{}," 这两个核心方法。",[133,116349,116351],{"className":31276,"code":116350,"language":31278,"meta":138,"style":138},"metadata = {\"render_modes\": []}\n",[140,116352,116353],{"__ignoreMap":138},[143,116354,116355,116358,116360,116362,116364],{"class":145,"line":146},[143,116356,116357],{"class":149},"metadata ",[143,116359,160],{"class":755},[143,116361,5348],{"class":149},[143,116363,114955],{"class":163},[143,116365,114958],{"class":149},[63,116367,116368],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[133,116370,116372],{"className":31276,"code":116371,"language":31278,"meta":138,"style":138},"def __init__(self) -> None:\n",[140,116373,116374],{"__ignoreMap":138},[143,116375,116376,116378,116380,116382,116384],{"class":145,"line":146},[143,116377,32845],{"class":755},[143,116379,31702],{"class":280},[143,116381,114971],{"class":149},[143,116383,96562],{"class":280},[143,116385,4639],{"class":149},[63,116387,116388,116390,116391,29283],{},[140,116389,31727],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[140,116392,116393],{},"env = ReacherEnv()",[133,116395,116397],{"className":31276,"code":116396,"language":31278,"meta":138,"style":138},"super().__init__()\n",[140,116398,116399],{"__ignoreMap":138},[143,116400,116401,116404,116406,116408],{"class":145,"line":146},[143,116402,116403],{"class":280},"super",[143,116405,18159],{"class":149},[143,116407,31727],{"class":280},[143,116409,2876],{"class":149},[63,116411,116412,116413,116415],{},"调用父类 ",[140,116414,116289],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[133,116417,116418],{"className":31276,"code":116081,"language":31278,"meta":138,"style":138},[140,116419,116420,116434],{"__ignoreMap":138},[143,116421,116422,116424,116426,116428,116430,116432],{"class":145,"line":146},[143,116423,31721],{"class":280},[143,116425,114992],{"class":149},[143,116427,160],{"class":755},[143,116429,102288],{"class":149},[143,116431,102190],{"class":280},[143,116433,1055],{"class":149},[143,116435,116436,116438,116440,116442,116444,116446],{"class":145,"line":35},[143,116437,31721],{"class":280},[143,116439,115007],{"class":149},[143,116441,160],{"class":755},[143,116443,115012],{"class":149},[143,116445,31721],{"class":280},[143,116447,115017],{"class":149},[63,116449,116450,116451,116453,116454,101894,116457,116460],{},"把 MuJoCo 模型和状态保存到 ",[140,116452,31721],{}," 上。",[140,116455,116456],{},"self.model",[140,116458,116459],{},"self.data"," 表示这个环境对象自己的模型和状态。",[133,116462,116463],{"className":31276,"code":116123,"language":31278,"meta":138,"style":138},[140,116464,116465,116479],{"__ignoreMap":138},[143,116466,116467,116469,116471,116473,116475,116477],{"class":145,"line":146},[143,116468,31721],{"class":280},[143,116470,115028],{"class":149},[143,116472,160],{"class":755},[143,116474,115033],{"class":149},[143,116476,90432],{"class":280},[143,116478,1055],{"class":149},[143,116480,116481,116483,116485,116487,116489,116491],{"class":145,"line":35},[143,116482,31721],{"class":280},[143,116484,115049],{"class":149},[143,116486,160],{"class":755},[143,116488,115033],{"class":149},[143,116490,90432],{"class":280},[143,116492,1055],{"class":149},[63,116494,116495,116496,101894,116499,116502],{},"提前查好 tip 和 target 的 site ID。这样 ",[140,116497,116498],{},"_get_obs",[140,116500,116501],{},"_get_reward"," 里就不用每次按名字查找。",[133,116504,116506],{"className":31276,"code":116505,"language":31278,"meta":138,"style":138},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[140,116507,116508,116518,116528],{"__ignoreMap":138},[143,116509,116510,116512,116514,116516],{"class":145,"line":146},[143,116511,31721],{"class":280},[143,116513,114742],{"class":149},[143,116515,160],{"class":755},[143,116517,55312],{"class":280},[143,116519,116520,116522,116524,116526],{"class":145,"line":35},[143,116521,31721],{"class":280},[143,116523,115121],{"class":149},[143,116525,160],{"class":755},[143,116527,115126],{"class":280},[143,116529,116530,116532,116534,116536],{"class":145,"line":46},[143,116531,31721],{"class":280},[143,116533,114581],{"class":149},[143,116535,160],{"class":755},[143,116537,48231],{"class":280},[63,116539,116540,116543,116544,116547,116548,116551],{},[140,116541,116542],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[140,116545,116546],{},"max_steps"," 是一个 episode 最多运行多少步。",[140,116549,116550],{},"steps"," 记录当前 episode 已经走了多少步。",[133,116553,116554],{"className":31276,"code":114620,"language":31278,"meta":138,"style":138},[140,116555,116556],{"__ignoreMap":138},[143,116557,116558,116560,116562,116564,116566,116568,116570,116572,116574,116576,116578,116580,116582,116584,116586,116588,116590,116592,116594,116596],{"class":145,"line":146},[143,116559,31721],{"class":280},[143,116561,114629],{"class":149},[143,116563,160],{"class":755},[143,116565,114634],{"class":149},[143,116567,114637],{"class":6116},[143,116569,114640],{"class":755},[143,116571,103279],{"class":280},[143,116573,13335],{"class":149},[143,116575,114647],{"class":6116},[143,116577,160],{"class":755},[143,116579,103279],{"class":280},[143,116581,13335],{"class":149},[143,116583,96839],{"class":6116},[143,116585,160],{"class":755},[143,116587,1049],{"class":149},[143,116589,1122],{"class":280},[143,116591,114664],{"class":149},[143,116593,94377],{"class":6116},[143,116595,160],{"class":755},[143,116597,114671],{"class":149},[63,116599,116600,116601,116604,116605,101894,116608,116611],{},"定义动作空间。",[140,116602,116603],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[140,116606,116607],{},"low=-1.0",[140,116609,116610],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[133,116613,116614],{"className":31276,"code":114681,"language":31278,"meta":138,"style":138},[140,116615,116616],{"__ignoreMap":138},[143,116617,116618,116620,116622,116624,116626,116628,116630,116632,116634,116636,116638,116640,116642,116644,116646,116648,116650,116652],{"class":145,"line":146},[143,116619,31721],{"class":280},[143,116621,114690],{"class":149},[143,116623,160],{"class":755},[143,116625,114634],{"class":149},[143,116627,114637],{"class":6116},[143,116629,114640],{"class":755},[143,116631,114701],{"class":149},[143,116633,114647],{"class":6116},[143,116635,160],{"class":755},[143,116637,114701],{"class":149},[143,116639,96839],{"class":6116},[143,116641,160],{"class":755},[143,116643,1049],{"class":149},[143,116645,1487],{"class":280},[143,116647,114664],{"class":149},[143,116649,94377],{"class":6116},[143,116651,160],{"class":755},[143,116653,114671],{"class":149},[63,116655,116656,116657,116660,116661,116664],{},"定义观测空间。",[140,116658,116659],{},"shape=(10,)"," 表示观测是 10 个数。",[140,116662,116663],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[133,116666,116668],{"className":31276,"code":116667,"language":31278,"meta":138,"style":138},"def _get_obs(self) -> np.ndarray:\n",[140,116669,116670],{"__ignoreMap":138},[143,116671,116672,116674,116676],{"class":145,"line":146},[143,116673,32845],{"class":755},[143,116675,115231],{"class":156},[143,116677,115234],{"class":149},[63,116679,116680,116681,116683],{},"定义内部函数，用来生成观测。函数名前面的 ",[140,116682,2030],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[133,116685,116687],{"className":31276,"code":116686,"language":31278,"meta":138,"style":138},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[140,116688,116689,116703],{"__ignoreMap":138},[143,116690,116691,116693,116695,116697,116699,116701],{"class":145,"line":146},[143,116692,112443],{"class":149},[143,116694,160],{"class":755},[143,116696,39771],{"class":280},[143,116698,115245],{"class":149},[143,116700,31721],{"class":280},[143,116702,115250],{"class":149},[143,116704,116705,116707,116709,116711,116713,116715],{"class":145,"line":35},[143,116706,112453],{"class":149},[143,116708,160],{"class":755},[143,116710,39771],{"class":280},[143,116712,115245],{"class":149},[143,116714,31721],{"class":280},[143,116716,115265],{"class":149},[63,116718,116719],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[133,116721,116723],{"className":31276,"code":116722,"language":31278,"meta":138,"style":138},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[140,116724,116725,116741],{"__ignoreMap":138},[143,116726,116727,116729,116731,116733,116735,116737,116739],{"class":145,"line":146},[143,116728,111729],{"class":149},[143,116730,160],{"class":755},[143,116732,115274],{"class":149},[143,116734,31721],{"class":280},[143,116736,115279],{"class":149},[143,116738,31721],{"class":280},[143,116740,115284],{"class":149},[143,116742,116743,116745],{"class":145,"line":35},[143,116744,17944],{"class":755},[143,116746,115291],{"class":149},[63,116748,116749,116750,116753,116754,116756],{},"拼接观测，并转换成 ",[140,116751,116752],{},"float32","。很多强化学习库默认使用 ",[140,116755,116752],{},"，所以这里主动转换。",[133,116758,116759],{"className":31276,"code":116162,"language":31278,"meta":138,"style":138},[140,116760,116761],{"__ignoreMap":138},[143,116762,116763,116765,116767,116769,116771,116773,116775,116777,116779,116781,116783,116785,116787,116789,116791,116793,116795],{"class":145,"line":146},[143,116764,32845],{"class":755},[143,116766,115397],{"class":156},[143,116768,115400],{"class":149},[143,116770,1496],{"class":755},[143,116772,115405],{"class":149},[143,116774,1052],{"class":280},[143,116776,26007],{"class":755},[143,116778,39831],{"class":280},[143,116780,14464],{"class":755},[143,116782,39831],{"class":280},[143,116784,115418],{"class":149},[143,116786,115421],{"class":280},[143,116788,26007],{"class":755},[143,116790,39831],{"class":280},[143,116792,14464],{"class":755},[143,116794,39831],{"class":280},[143,116796,31684],{"class":149},[63,116798,116799,116800,116802,116803,116806],{},"定义 reset。",[140,116801,115441],{}," 用来控制随机数，保证实验可以复现。",[140,116804,116805],{},"options"," 用来接收额外配置，本章暂时不用。",[133,116808,116810],{"className":31276,"code":116809,"language":31278,"meta":138,"style":138},"super().reset(seed=seed)\n",[140,116811,116812],{"__ignoreMap":138},[143,116813,116814,116816,116818,116820,116822],{"class":145,"line":146},[143,116815,116403],{"class":280},[143,116817,115438],{"class":149},[143,116819,115441],{"class":6116},[143,116821,160],{"class":755},[143,116823,115446],{"class":149},[63,116825,116826,116827,116830],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[140,116828,116829],{},"self.np_random"," 生成可复现的随机数。",[133,116832,116834],{"className":31276,"code":116833,"language":31278,"meta":138,"style":138},"mujoco.mj_resetData(self.model, self.data)\n",[140,116835,116836],{"__ignoreMap":138},[143,116837,116838,116841,116843,116845,116847],{"class":145,"line":146},[143,116839,116840],{"class":149},"mujoco.mj_resetData(",[143,116842,31721],{"class":280},[143,116844,115456],{"class":149},[143,116846,31721],{"class":280},[143,116848,115461],{"class":149},[63,116850,116851],{},"把 MuJoCo 状态重置到默认状态。",[133,116853,116855],{"className":31276,"code":116854,"language":31278,"meta":138,"style":138},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[140,116856,116857],{"__ignoreMap":138},[143,116858,116859,116861,116863,116865,116867,116869,116871,116873,116875,116877,116879,116881,116883,116885,116887,116889,116891],{"class":145,"line":146},[143,116860,31721],{"class":280},[143,116862,115472],{"class":149},[143,116864,160],{"class":755},[143,116866,39771],{"class":280},[143,116868,115479],{"class":149},[143,116870,114637],{"class":6116},[143,116872,114640],{"class":755},[143,116874,87088],{"class":280},[143,116876,13335],{"class":149},[143,116878,114647],{"class":6116},[143,116880,160],{"class":755},[143,116882,87088],{"class":280},[143,116884,13335],{"class":149},[143,116886,32394],{"class":6116},[143,116888,160],{"class":755},[143,116890,31721],{"class":280},[143,116892,115504],{"class":149},[63,116894,116216,116895,116898,116899,116902,116903,116905],{},[140,116896,116897],{},"[:]"," 表示修改整个数组。",[140,116900,116901],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[140,116904,103026],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[133,116907,116909],{"className":31276,"code":116908,"language":31278,"meta":138,"style":138},"self.data.qvel[:] = 0.0\n",[140,116910,116911],{"__ignoreMap":138},[143,116912,116913,116915,116917,116919],{"class":145,"line":146},[143,116914,31721],{"class":280},[143,116916,115511],{"class":149},[143,116918,160],{"class":755},[143,116920,105636],{"class":280},[63,116922,116923],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[133,116925,116927],{"className":31276,"code":116926,"language":31278,"meta":138,"style":138},"self.steps = 0\nreturn self._get_obs(), {}\n",[140,116928,116929,116939],{"__ignoreMap":138},[143,116930,116931,116933,116935,116937],{"class":145,"line":146},[143,116932,31721],{"class":280},[143,116934,114581],{"class":149},[143,116936,160],{"class":755},[143,116938,48231],{"class":280},[143,116940,116941,116943,116945],{"class":145,"line":35},[143,116942,17944],{"class":755},[143,116944,39771],{"class":280},[143,116946,115551],{"class":149},[63,116948,116949],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[133,116951,116952],{"className":31276,"code":116225,"language":31278,"meta":138,"style":138},[140,116953,116954],{"__ignoreMap":138},[143,116955,116956,116958,116960],{"class":145,"line":146},[143,116957,32845],{"class":755},[143,116959,115562],{"class":156},[143,116961,115565],{"class":149},[63,116963,116964],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[133,116966,116968],{"className":31276,"code":116967,"language":31278,"meta":138,"style":138},"action = np.asarray(action, dtype=np.float32)\n",[140,116969,116970],{"__ignoreMap":138},[143,116971,116972,116974,116976,116978,116980,116982],{"class":145,"line":146},[143,116973,108317],{"class":149},[143,116975,160],{"class":755},[143,116977,115574],{"class":149},[143,116979,94377],{"class":6116},[143,116981,160],{"class":755},[143,116983,114671],{"class":149},[63,116985,116986,116987,29283],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[140,116988,116752],{},[133,116990,116992],{"className":31276,"code":116991,"language":31278,"meta":138,"style":138},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[140,116993,116994],{"__ignoreMap":138},[143,116995,116996,116998,117000,117002,117004,117006,117008],{"class":145,"line":146},[143,116997,108317],{"class":149},[143,116999,160],{"class":755},[143,117001,108322],{"class":149},[143,117003,31721],{"class":280},[143,117005,115593],{"class":149},[143,117007,31721],{"class":280},[143,117009,115598],{"class":149},[63,117011,117012],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[133,117014,117016],{"className":31276,"code":117015,"language":31278,"meta":138,"style":138},"self.data.ctrl[:] = action\n",[140,117017,117018],{"__ignoreMap":138},[143,117019,117020,117022,117024,117026],{"class":145,"line":146},[143,117021,31721],{"class":280},[143,117023,115609],{"class":149},[143,117025,160],{"class":755},[143,117027,108345],{"class":149},[63,117029,117030],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[133,117032,117034],{"className":31276,"code":117033,"language":31278,"meta":138,"style":138},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[140,117035,117036,117052],{"__ignoreMap":138},[143,117037,117038,117040,117042,117044,117046,117048,117050],{"class":145,"line":146},[143,117039,3925],{"class":755},[143,117041,102377],{"class":149},[143,117043,26941],{"class":755},[143,117045,33341],{"class":280},[143,117047,1049],{"class":149},[143,117049,31721],{"class":280},[143,117051,115630],{"class":149},[143,117053,117054,117057,117059,117061,117063],{"class":145,"line":35},[143,117055,117056],{"class":149},"    mujoco.mj_step(",[143,117058,31721],{"class":280},[143,117060,115456],{"class":149},[143,117062,31721],{"class":280},[143,117064,115461],{"class":149},[63,117066,117067,117068,117071,117072,117074,117075,29283],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[140,117069,117070],{},"frame_skip=5","，所以外部调用一次 ",[140,117073,114752],{},"，内部实际执行 5 次 ",[140,117076,102091],{},[133,117078,117080],{"className":31276,"code":117079,"language":31278,"meta":138,"style":138},"self.steps += 1\n",[140,117081,117082],{"__ignoreMap":138},[143,117083,117084,117086,117088,117090],{"class":145,"line":146},[143,117085,31721],{"class":280},[143,117087,114581],{"class":149},[143,117089,10377],{"class":755},[143,117091,56582],{"class":280},[63,117093,117094],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[133,117096,117098],{"className":31276,"code":117097,"language":31278,"meta":138,"style":138},"obs = self._get_obs()\nreward = self._get_reward()\n",[140,117099,117100,117110],{"__ignoreMap":138},[143,117101,117102,117104,117106,117108],{"class":145,"line":146},[143,117103,111729],{"class":149},[143,117105,160],{"class":755},[143,117107,39771],{"class":280},[143,117109,115672],{"class":149},[143,117111,117112,117114,117116,117118],{"class":145,"line":35},[143,117113,111880],{"class":149},[143,117115,160],{"class":755},[143,117117,39771],{"class":280},[143,117119,115683],{"class":149},[63,117121,117122],{},"计算新的观测和奖励。",[133,117124,117126],{"className":31276,"code":117125,"language":31278,"meta":138,"style":138},"dist = float(np.linalg.norm(tip - target))\n",[140,117127,117128],{"__ignoreMap":138},[143,117129,117130,117132,117134,117136,117138,117140],{"class":145,"line":146},[143,117131,112471],{"class":149},[143,117133,160],{"class":755},[143,117135,110672],{"class":280},[143,117137,115726],{"class":149},[143,117139,1573],{"class":755},[143,117141,115731],{"class":149},[63,117143,117144],{},"计算末端到目标的距离，并转换成 Python float。",[133,117146,117147],{"className":31276,"code":114552,"language":31278,"meta":138,"style":138},[140,117148,117149,117161],{"__ignoreMap":138},[143,117150,117151,117153,117155,117157,117159],{"class":145,"line":146},[143,117152,114559],{"class":149},[143,117154,160],{"class":755},[143,117156,114564],{"class":149},[143,117158,150],{"class":755},[143,117160,114569],{"class":280},[143,117162,117163,117165,117167,117169,117171,117173,117175],{"class":145,"line":35},[143,117164,114574],{"class":149},[143,117166,160],{"class":755},[143,117168,39771],{"class":280},[143,117170,114581],{"class":149},[143,117172,2611],{"class":755},[143,117174,39771],{"class":280},[143,117176,114588],{"class":149},[63,117178,117179],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[133,117181,117183],{"className":31276,"code":117182,"language":31278,"meta":138,"style":138},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[140,117184,117185,117198],{"__ignoreMap":138},[143,117186,117187,117190,117192,117194,117196],{"class":145,"line":146},[143,117188,117189],{"class":149},"info ",[143,117191,160],{"class":755},[143,117193,5348],{"class":149},[143,117195,115777],{"class":163},[143,117197,115780],{"class":149},[143,117199,117200,117202],{"class":145,"line":35},[143,117201,17944],{"class":755},[143,117203,115787],{"class":149},[63,117205,117206,117209],{},[140,117207,117208],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[133,117211,117213],{"className":31276,"code":117212,"language":31278,"meta":138,"style":138},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[140,117214,117215,117224],{"__ignoreMap":138},[143,117216,117217,117220,117222],{"class":145,"line":146},[143,117218,117219],{"class":149},"env ",[143,117221,160],{"class":755},[143,117223,115817],{"class":149},[143,117225,117226,117228,117230,117232,117234,117236,117238],{"class":145,"line":35},[143,117227,114275],{"class":149},[143,117229,160],{"class":755},[143,117231,115827],{"class":149},[143,117233,115441],{"class":6116},[143,117235,160],{"class":755},[143,117237,1234],{"class":280},[143,117239,1055],{"class":149},[63,117241,117242,117243,117246],{},"创建环境并重置。",[140,117244,117245],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[133,117248,117250],{"className":31276,"code":117249,"language":31278,"meta":138,"style":138},"action = env.action_space.sample()\n",[140,117251,117252],{"__ignoreMap":138},[143,117253,117254,117256,117258],{"class":145,"line":146},[143,117255,108317],{"class":149},[143,117257,160],{"class":755},[143,117259,115896],{"class":149},[63,117261,117262],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117264,103192],{"id":103191},[63,117266,106359],{},[133,117268,117271],{"className":117269,"code":117270,"language":6087,"meta":138},[6085],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[140,117272,117270],{"__ignoreMap":138},[63,117274,117275],{},"这个环境已经具备强化学习环境的基本结构。",[63,117277,117278],{},"主函数里使用随机动作：",[133,117280,117281],{"className":31276,"code":117249,"language":31278,"meta":138,"style":138},[140,117282,117283],{"__ignoreMap":138},[143,117284,117285,117287,117289],{"class":145,"line":146},[143,117286,108317],{"class":149},[143,117288,160],{"class":755},[143,117290,115896],{"class":149},[63,117292,117293],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117295,103224],{"id":103223},[19,117297,117298,117301,117307,117316,117325,117334,117340],{},[22,117299,117300],{},"运行程序。",[22,117302,117303,117304,29283],{},"确认 ",[140,117305,117306],{},"obs.shape == (10,)",[22,117308,112056,117309,117312,117313,29283],{},[140,117310,117311],{},"env.action_space","，应类似 ",[140,117314,117315],{},"Box(-1.0, 1.0, (2,), float32)",[22,117317,106460,117318,117321,117322,29283],{},[140,117319,117320],{},"self.max_steps = 10","，确认环境会更快 ",[140,117323,117324],{},"truncated=True",[22,117326,103287,117327,103290,117330,117333],{},[140,117328,117329],{},"terminated = dist \u003C 0.05",[140,117331,117332],{},"dist \u003C 0.2","，观察是否更容易结束。",[22,117335,103287,117336,117339],{},[140,117337,117338],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[22,117341,117342,117343,117345,117346,117349],{},"在 ",[140,117344,117208],{}," 里加入 ",[140,117347,117348],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117351,103329],{"id":103328},[58,117353,117355],{"id":117354},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[63,117357,117358,117359,117361],{},"Gymnasium 的 ",[140,117360,108009],{}," 返回 5 个值:",[133,117363,117365],{"className":31276,"code":117364,"language":31278,"meta":138,"style":138},"obs, reward, terminated, truncated, info\n",[140,117366,117367],{"__ignoreMap":138},[143,117368,117369],{"class":145,"line":146},[143,117370,117364],{"class":149},[63,117372,117373],{},"不是旧 Gym 的 4 个值。",[58,117375,117377,117380],{"id":117376},"datactrl-action-维度错误",[140,117378,117379],{},"data.ctrl[:] = action"," 维度错误",[63,117382,103399],{},[133,117384,117386],{"className":31276,"code":117385,"language":31278,"meta":138,"style":138},"print(self.model.nu)\nprint(action.shape)\n",[140,117387,117388,117399],{"__ignoreMap":138},[143,117389,117390,117392,117394,117396],{"class":145,"line":146},[143,117391,31313],{"class":280},[143,117393,1049],{"class":149},[143,117395,31721],{"class":280},[143,117397,117398],{"class":149},".model.nu)\n",[143,117400,117401,117403],{"class":145,"line":35},[143,117402,31313],{"class":280},[143,117404,117405],{"class":149},"(action.shape)\n",[63,117407,117408],{},"两者必须匹配。",[58,117410,117412],{"id":117411},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[63,117414,103338],{},[133,117416,117418],{"className":31276,"code":117417,"language":31278,"meta":138,"style":138},"mujoco.mj_forward(self.model, self.data)\n",[140,117419,117420],{"__ignoreMap":138},[143,117421,117422,117425,117427,117429,117431],{"class":145,"line":146},[143,117423,117424],{"class":149},"mujoco.mj_forward(",[143,117426,31721],{"class":280},[143,117428,115456],{"class":149},[143,117430,31721],{"class":280},[143,117432,115461],{"class":149},[58,117434,117436,117438],{"id":117435},"observation_space-维度和-obs-不一致",[140,117437,114475],{}," 维度和 obs 不一致",[63,117440,103451],{},[133,117442,117444],{"className":31276,"code":117443,"language":31278,"meta":138,"style":138},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[140,117445,117446,117456,117463],{"__ignoreMap":138},[143,117447,117448,117450,117452,117454],{"class":145,"line":146},[143,117449,111729],{"class":149},[143,117451,160],{"class":755},[143,117453,39771],{"class":280},[143,117455,115672],{"class":149},[143,117457,117458,117460],{"class":145,"line":35},[143,117459,31313],{"class":280},[143,117461,117462],{"class":149},"(obs.shape)\n",[143,117464,117465,117467,117469,117471],{"class":145,"line":46},[143,117466,31313],{"class":280},[143,117468,1049],{"class":149},[143,117470,31721],{"class":280},[143,117472,117473],{"class":149},".observation_space.shape)\n",[63,117475,117476],{},"两者必须一致。本章观测是：",[133,117478,117481],{"className":117479,"code":117480,"language":6087,"meta":138},[6085],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[140,117482,117480],{"__ignoreMap":138},[58,117484,117486],{"id":117485},"action-超过范围","action 超过范围",[63,117488,117489],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[133,117491,117492],{"className":31276,"code":116991,"language":31278,"meta":138,"style":138},[140,117493,117494],{"__ignoreMap":138},[143,117495,117496,117498,117500,117502,117504,117506,117508],{"class":145,"line":146},[143,117497,108317],{"class":149},[143,117499,160],{"class":755},[143,117501,108322],{"class":149},[143,117503,31721],{"class":280},[143,117505,115593],{"class":149},[143,117507,31721],{"class":280},[143,117509,115598],{"class":149},[63,117511,117512,117513,29283],{},"这能避免无效动作直接写入 ",[140,117514,101952],{},[58,117516,117518],{"id":117517},"忘记返回-info","忘记返回 info",[63,117520,117358,117521,101894,117523,117525],{},[140,117522,70937],{},[140,117524,108009],{}," 都会返回 info：",[133,117527,117528],{"className":31276,"code":114268,"language":31278,"meta":138,"style":138},[140,117529,117530,117538],{"__ignoreMap":138},[143,117531,117532,117534,117536],{"class":145,"line":146},[143,117533,114275],{"class":149},[143,117535,160],{"class":755},[143,117537,114280],{"class":149},[143,117539,117540,117542,117544],{"class":145,"line":35},[143,117541,114285],{"class":149},[143,117543,160],{"class":755},[143,117545,114290],{"class":149},[63,117547,117548,117549,29283],{},"即使暂时没有额外信息，也返回 ",[140,117550,33357],{},[14,117552,117554],{"id":117553},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[63,117556,117557],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[19,117559,117560,117563,117566,117569,117572,117575],{},[22,117561,117562],{},"更稳定的 reward。",[22,117564,117565],{},"合理的 episode 长度。",[22,117567,117568],{},"可重复的随机目标采样。",[22,117570,117571],{},"render 接口。",[22,117573,117574],{},"环境注册代码。",[22,117576,117577],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[63,117579,117580],{},"如果只是自己写训练循环，最小形式是：",[133,117582,117584],{"className":31276,"code":117583,"language":31278,"meta":138,"style":138},"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",[140,117585,117586,117594,117610,117614,117630,117639,117648,117658],{"__ignoreMap":138},[143,117587,117588,117590,117592],{"class":145,"line":146},[143,117589,117219],{"class":149},[143,117591,160],{"class":755},[143,117593,115817],{"class":149},[143,117595,117596,117598,117600,117602,117604,117606,117608],{"class":145,"line":35},[143,117597,114275],{"class":149},[143,117599,160],{"class":755},[143,117601,115827],{"class":149},[143,117603,115441],{"class":6116},[143,117605,160],{"class":755},[143,117607,1234],{"class":280},[143,117609,1055],{"class":149},[143,117611,117612],{"class":145,"line":46},[143,117613,3300],{"emptyLinePlaceholder":976},[143,117615,117616,117618,117620,117622,117624,117626,117628],{"class":145,"line":293},[143,117617,3925],{"class":755},[143,117619,102377],{"class":149},[143,117621,26941],{"class":755},[143,117623,33341],{"class":280},[143,117625,1049],{"class":149},[143,117627,7310],{"class":280},[143,117629,31684],{"class":149},[143,117631,117632,117635,117637],{"class":145,"line":306},[143,117633,117634],{"class":149},"    action ",[143,117636,160],{"class":755},[143,117638,115896],{"class":149},[143,117640,117641,117644,117646],{"class":145,"line":319},[143,117642,117643],{"class":149},"    obs, reward, terminated, truncated, info ",[143,117645,160],{"class":755},[143,117647,114290],{"class":149},[143,117649,117650,117652,117654,117656],{"class":145,"line":332},[143,117651,4001],{"class":755},[143,117653,115962],{"class":149},[143,117655,115965],{"class":755},[143,117657,115968],{"class":149},[143,117659,117660,117663,117665],{"class":145,"line":345},[143,117661,117662],{"class":149},"        obs, info ",[143,117664,160],{"class":755},[143,117666,114280],{"class":149},[14,117668,117670],{"id":117669},"_9本章小结","9.本章小结",[63,117672,117673],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[133,117675,117678],{"className":117676,"code":117677,"language":6087,"meta":138},[6085],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[140,117679,117677],{"__ignoreMap":138},[63,117681,117682],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[954,117684,117685],{},"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":138,"searchDepth":35,"depth":35,"links":117687},[117688,117689,117690,117697,117701,117702,117703,117713,117714],{"id":101522,"depth":35,"text":101523},{"id":101645,"depth":35,"text":101646},{"id":101920,"depth":35,"text":101921,"children":117691},[117692,117694,117696],{"id":114499,"depth":46,"text":117693},"terminated 和 truncated 的区别",{"id":114602,"depth":46,"text":117695},"observation_space 和 action_space",{"id":114729,"depth":46,"text":114730},{"id":102128,"depth":35,"text":102129,"children":117698},[117699,117700],{"id":102448,"depth":46,"text":102448},{"id":102584,"depth":46,"text":102584},{"id":103191,"depth":35,"text":103192},{"id":103223,"depth":35,"text":103224},{"id":103328,"depth":35,"text":103329,"children":117704},[117705,117706,117708,117709,117711,117712],{"id":117354,"depth":46,"text":117355},{"id":117376,"depth":46,"text":117707},"data.ctrl[:] = action 维度错误",{"id":117411,"depth":46,"text":117412},{"id":117435,"depth":46,"text":117710},"observation_space 维度和 obs 不一致",{"id":117485,"depth":46,"text":117486},{"id":117517,"depth":46,"text":117518},{"id":117553,"depth":35,"text":117554},{"id":117669,"depth":35,"text":117670},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114252,"description":138},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117721,"title":117722,"body":117723,"description":118146,"extension":974,"meta":118147,"navigation":976,"path":118148,"seo":118149,"stem":118150,"__hash__":118151},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117724,"toc":118136},[117725,117729,117732,117735,117755,117761,117767,117777,117780,117783,117803,117806,117810,117813,117819,117822,117836,117839,117842,117916,117919,117925,117928,117951,117954,118004,118007,118013,118016,118019,118022,118041,118044,118050,118053,118056,118059,118079,118082,118085,118088,118133],[10,117726,117728],{"id":117727},"mujoco-学习","MuJoCo 学习",[63,117730,117731],{},"初版",[63,117733,117734],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[19,117736,117737,117740,117743,117752],{},[22,117738,117739],{},"MuJoCo 模型文件在描述什么。",[22,117741,117742],{},"Python 代码怎样读取和推进仿真。",[22,117744,117745,1255,117747,1255,117749,117751],{},[140,117746,104905],{},[140,117748,105235],{},[140,117750,105238],{}," 这些数组为什么重要。",[22,117753,117754],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[63,117756,117757,117758,117760],{},"默认环境为 Fedora 44、Python >= 3.10、",[140,117759,101903],{}," 官方 Python bindings。",[63,117762,117763,117764,117766],{},"注意：本文禁止使用 ",[140,117765,101888],{},"。所有示例均使用：",[133,117768,117769],{"className":31276,"code":102454,"language":31278,"meta":138,"style":138},[140,117770,117771],{"__ignoreMap":138},[143,117772,117773,117775],{"class":145,"line":146},[143,117774,31290],{"class":755},[143,117776,102177],{"class":149},[14,117778,117779],{"id":117779},"适合谁阅读",[63,117781,117782],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[19,117784,117785,117788,117791,117794],{},[22,117786,117787],{},"没学过 MuJoCo，只会一点 Python。",[22,117789,117790],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[22,117792,117793],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[22,117795,117796,117797,117799,117800,117802],{},"以前接触过 ",[140,117798,101888],{},"，现在想迁移到官方 ",[140,117801,101897],{}," Python bindings。",[63,117804,117805],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117807,117809],{"id":117808},"mujoco-到底是什么","MuJoCo 到底是什么",[63,117811,117812],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[133,117814,117817],{"className":117815,"code":117816,"language":6087,"meta":138},[6085],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[140,117818,117816],{"__ignoreMap":138},[63,117820,117821],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[19,117823,117824,117827,117830,117833],{},[22,117825,117826],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[22,117828,117829],{},"快速测试控制算法，不必一开始就上真实机器人。",[22,117831,117832],{},"生成强化学习环境。",[22,117834,117835],{},"采集状态、动作、图像、奖励等训练数据。",[14,117837,117838],{"id":117838},"学习前的心智模型",[63,117840,117841],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[1181,117843,117844,117856],{},[1184,117845,117846],{},[1187,117847,117848,117851,117854],{},[1190,117849,117850],{"align":24634},"部分",[1190,117852,117853],{"align":24634},"负责什么",[1190,117855,22085],{"align":24634},[1227,117857,117858,117869,117881,117893,117905],{},[1187,117859,117860,117863,117866],{},[1232,117861,117862],{"align":24634},"MJCF XML",[1232,117864,117865],{"align":24634},"定义世界和机器人结构",[1232,117867,117868],{"align":24634},"地面、盒子、关节、电机、摄像头",[1187,117870,117871,117875,117878],{},[1232,117872,117873],{"align":24634},[140,117874,101585],{},[1232,117876,117877],{"align":24634},"编译后的静态模型",[1232,117879,117880],{"align":24634},"有几个关节、有几个电机、时间步长是多少",[1187,117882,117883,117887,117890],{},[1232,117884,117885],{"align":24634},[140,117886,101595],{},[1232,117888,117889],{"align":24634},"运行中的动态状态",[1232,117891,117892],{"align":24634},"当前时间、位置、速度、电机输入",[1187,117894,117895,117899,117902],{},[1232,117896,117897],{"align":24634},[140,117898,102091],{},[1232,117900,117901],{"align":24634},"推进一步物理仿真",[1232,117903,117904],{"align":24634},"根据重力、力、碰撞更新状态",[1187,117906,117907,117910,117913],{},[1232,117908,117909],{"align":24634},"Viewer \u002F Renderer",[1232,117911,117912],{"align":24634},"把仿真显示出来",[1232,117914,117915],{"align":24634},"打开窗口或保存图片",[63,117917,117918],{},"一句话总结：",[133,117920,117923],{"className":117921,"code":117922,"language":6087,"meta":138},[6085],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[140,117924,117922],{"__ignoreMap":138},[63,117926,117927],{},"参考来源：",[232,117929,117930,117937,117944],{},[22,117931,117932,117933],{},"MuJoCo Python 官方文档：",[67,117934,117935],{"href":117935,"rel":117936},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[71],[22,117938,117939,117940],{},"MuJoCo XML Reference：",[67,117941,117942],{"href":117942,"rel":117943},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[71],[22,117945,117946,117947],{},"MuJoCo Overview：",[67,117948,117949],{"href":117949,"rel":117950},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[71],[14,117952,117953],{"id":117953},"章节目录",[19,117955,117956,117962,117968,117974,117980,117986,117992,117998],{},[22,117957,117958],{},[67,117959,117961],{"href":117960},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[22,117963,117964],{},[67,117965,117967],{"href":117966},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[22,117969,117970],{},[67,117971,117973],{"href":117972},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[22,117975,117976],{},[67,117977,117979],{"href":117978},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[22,117981,117982],{},[67,117983,117985],{"href":117984},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[22,117987,117988],{},[67,117989,117991],{"href":117990},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[22,117993,117994],{},[67,117995,117997],{"href":117996},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[22,117999,118000],{},[67,118001,118003],{"href":118002},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118005,118006],{"id":118006},"推荐学习路线",[133,118008,118011],{"className":118009,"code":118010,"language":6087,"meta":138},[6085],"环境安装\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",[140,118012,118010],{"__ignoreMap":138},[63,118014,118015],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118017,118018],{"id":118018},"建议的目录结构",[63,118020,118021],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[133,118023,118025],{"className":24720,"code":118024,"language":24722,"meta":138,"style":138},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[140,118026,118027,118035],{"__ignoreMap":138},[143,118028,118029,118031,118033],{"class":145,"line":146},[143,118030,102142],{"class":156},[143,118032,30114],{"class":280},[143,118034,102147],{"class":163},[143,118036,118037,118039],{"class":145,"line":35},[143,118038,102152],{"class":280},[143,118040,102147],{"class":163},[63,118042,118043],{},"每一章的代码都单独保存：",[133,118045,118048],{"className":118046,"code":118047,"language":6087,"meta":138},[6085],"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",[140,118049,118047],{"__ignoreMap":138},[63,118051,118052],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118054,118055],{"id":118055},"学习方法",[63,118057,118058],{},"每章建议按这个顺序操作：",[19,118060,118061,118064,118067,118070,118073,118076],{},[22,118062,118063],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[22,118065,118066],{},"复制最小可运行代码，保存成指定文件。",[22,118068,118069],{},"运行代码，确认没有报错。",[22,118071,118072],{},"对照“运行结果说明”理解输出。",[22,118074,118075],{},"做“验证步骤”，主动改一两个参数。",[22,118077,118078],{},"遇到报错先看“常见错误与解决方案”。",[63,118080,118081],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118083,118084],{"id":118084},"全局排错顺序",[63,118086,118087],{},"遇到问题时，按下面顺序查：",[19,118089,118090,118096,118102,118107,118110,118113,118120,118130],{},[22,118091,118092,118093],{},"Python 环境是否激活：",[140,118094,118095],{},"which python",[22,118097,118098,118099],{},"MuJoCo 是否能导入：",[140,118100,118101],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[22,118103,118104,118105],{},"是否误装了 ",[140,118106,101888],{},[22,118108,118109],{},"XML 标签是否闭合、属性是否拼写正确",[22,118111,118112],{},"actuator 引用的 joint 名字是否存在",[22,118114,118115,118117,118118],{},[140,118116,101952],{}," 的长度是否等于 ",[140,118119,103034],{},[22,118121,106460,118122,83417,118124,118126,118127],{},[140,118123,104905],{},[140,118125,105235],{}," 后是否调用了 ",[140,118128,118129],{},"mujoco.mj_forward",[22,118131,118132],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[954,118134,118135],{},"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":138,"searchDepth":35,"depth":35,"links":118137},[118138,118139,118140,118141,118142,118143,118144,118145],{"id":117779,"depth":35,"text":117779},{"id":117808,"depth":35,"text":117809},{"id":117838,"depth":35,"text":117838},{"id":117953,"depth":35,"text":117953},{"id":118006,"depth":35,"text":118006},{"id":118018,"depth":35,"text":118018},{"id":118055,"depth":35,"text":118055},{"id":118084,"depth":35,"text":118084},"仿真搭建。",{"category":24276},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117722,"description":118146},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118153,"title":118154,"body":118155,"description":973,"extension":974,"meta":118610,"navigation":976,"path":118611,"seo":118612,"stem":118613,"__hash__":118614},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118156,"toc":118608},[118157,118160,118163,118169,118605],[10,118158,118154],{"id":118159},"_1-最常用的基本操作更新",[63,118161,118162],{},"装linux系统教程：",[63,118164,118165],{},[67,118166,118167],{"href":118167,"rel":118168},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[71],[133,118170,118174],{"className":118171,"code":118172,"language":118173,"meta":138,"style":138},"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",[140,118175,118176,118181,118186,118195,118200,118209,118214,118234,118239,118250,118255,118264,118269,118297,118302,118321,118326,118345,118349,118354,118370,118374,118379,118409,118413,118418,118434,118438,118443,118458,118462,118467,118483,118487,118492,118504,118516,118520,118525,118542,118546,118551,118569,118573,118578,118587,118591,118596],{"__ignoreMap":138},[143,118177,118178],{"class":145,"line":146},[143,118179,118180],{"class":266},"#更新相关的知识\n",[143,118182,118183],{"class":145,"line":35},[143,118184,118185],{"class":266},"# 更新软件包列表（从服务器获取最新软件信息）\n",[143,118187,118188,118190,118193],{"class":145,"line":46},[143,118189,25474],{"class":156},[143,118191,118192],{"class":163}," apt",[143,118194,27140],{"class":163},[143,118196,118197],{"class":145,"line":293},[143,118198,118199],{"class":266},"# 升级所有可更新的软件包（不删除旧包）\n",[143,118201,118202,118204,118206],{"class":145,"line":306},[143,118203,25474],{"class":156},[143,118205,118192],{"class":163},[143,118207,118208],{"class":163}," upgrade\n",[143,118210,118211],{"class":145,"line":319},[143,118212,118213],{"class":266},"#更新和升级软件包\n",[143,118215,118216,118218,118220,118223,118225,118227,118229,118232],{"class":145,"line":332},[143,118217,25474],{"class":156},[143,118219,118192],{"class":163},[143,118221,118222],{"class":163}," update",[143,118224,27088],{"class":149},[143,118226,25474],{"class":156},[143,118228,118192],{"class":163},[143,118230,118231],{"class":163}," upgrade",[143,118233,101857],{"class":280},[143,118235,118236],{"class":145,"line":345},[143,118237,118238],{"class":266},"#列出可更新的软件包及版本信息\n",[143,118240,118241,118244,118247],{"class":145,"line":701},[143,118242,118243],{"class":156},"apt",[143,118245,118246],{"class":163}," list",[143,118248,118249],{"class":280}," --upgradable\n",[143,118251,118252],{"class":145,"line":707},[143,118253,118254],{"class":266},"#彻底升级（处理依赖关系，可能删除旧包）\n",[143,118256,118257,118259,118261],{"class":145,"line":727},[143,118258,25474],{"class":156},[143,118260,118192],{"class":163},[143,118262,118263],{"class":163}," full-upgrade\n",[143,118265,118266],{"class":145,"line":2518},[143,118267,118268],{"class":266},"#设置指定版本\n",[143,118270,118271,118273,118275,118277,118279,118282,118284,118286,118288,118290,118293,118295],{"class":145,"line":2524},[143,118272,25474],{"class":156},[143,118274,118192],{"class":163},[143,118276,24732],{"class":163},[143,118278,29800],{"class":755},[143,118280,118281],{"class":163},"package_nam",[143,118283,1119],{"class":149},[143,118285,1998],{"class":755},[143,118287,160],{"class":163},[143,118289,150],{"class":755},[143,118291,118292],{"class":163},"version_numbe",[143,118294,1711],{"class":149},[143,118296,183],{"class":755},[143,118298,118299],{"class":145,"line":2529},[143,118300,118301],{"class":266},"#只安装软件包不升级\n",[143,118303,118304,118306,118308,118310,118312,118314,118316,118318],{"class":145,"line":2543},[143,118305,25474],{"class":156},[143,118307,118192],{"class":163},[143,118309,24732],{"class":163},[143,118311,29800],{"class":755},[143,118313,118281],{"class":163},[143,118315,1119],{"class":149},[143,118317,1998],{"class":755},[143,118319,118320],{"class":280}," --no-upgrade\n",[143,118322,118323],{"class":145,"line":2548},[143,118324,118325],{"class":266},"#只升级，不存在就不安装\n",[143,118327,118328,118330,118332,118334,118336,118338,118340,118342],{"class":145,"line":2554},[143,118329,25474],{"class":156},[143,118331,118192],{"class":163},[143,118333,24732],{"class":163},[143,118335,29800],{"class":755},[143,118337,118281],{"class":163},[143,118339,1119],{"class":149},[143,118341,1998],{"class":755},[143,118343,118344],{"class":280}," --only-upgrade\n",[143,118346,118347],{"class":145,"line":2575},[143,118348,3300],{"emptyLinePlaceholder":976},[143,118350,118351],{"class":145,"line":2580},[143,118352,118353],{"class":266},"#安装指定的软件命令\n",[143,118355,118356,118358,118360,118362,118364,118366,118368],{"class":145,"line":2594},[143,118357,25474],{"class":156},[143,118359,118192],{"class":163},[143,118361,24732],{"class":163},[143,118363,29800],{"class":755},[143,118365,118281],{"class":163},[143,118367,1119],{"class":149},[143,118369,183],{"class":755},[143,118371,118372],{"class":145,"line":2599},[143,118373,3300],{"emptyLinePlaceholder":976},[143,118375,118376],{"class":145,"line":2628},[143,118377,118378],{"class":266},"#安装多个软件包\n",[143,118380,118381,118383,118385,118387,118389,118392,118395,118397,118399,118402,118404,118406],{"class":145,"line":2633},[143,118382,25474],{"class":156},[143,118384,118192],{"class":163},[143,118386,24732],{"class":163},[143,118388,29800],{"class":755},[143,118390,118391],{"class":163},"package_",[143,118393,118394],{"class":755},"1>",[143,118396,29800],{"class":755},[143,118398,118391],{"class":163},[143,118400,118401],{"class":755},"2>",[143,118403,29800],{"class":755},[143,118405,118391],{"class":163},[143,118407,118408],{"class":755},"3>\n",[143,118410,118411],{"class":145,"line":2650},[143,118412,3300],{"emptyLinePlaceholder":976},[143,118414,118415],{"class":145,"line":2655},[143,118416,118417],{"class":266},"#更新指定的软件命令\n",[143,118419,118420,118422,118424,118426,118428,118430,118432],{"class":145,"line":2660},[143,118421,25474],{"class":156},[143,118423,118192],{"class":163},[143,118425,118222],{"class":163},[143,118427,29800],{"class":755},[143,118429,118281],{"class":163},[143,118431,1119],{"class":149},[143,118433,183],{"class":755},[143,118435,118436],{"class":145,"line":2665},[143,118437,3300],{"emptyLinePlaceholder":976},[143,118439,118440],{"class":145,"line":2679},[143,118441,118442],{"class":266},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[143,118444,118445,118447,118450,118452,118454,118456],{"class":145,"line":2684},[143,118446,118243],{"class":156},[143,118448,118449],{"class":163}," show",[143,118451,29800],{"class":755},[143,118453,118281],{"class":163},[143,118455,1119],{"class":149},[143,118457,183],{"class":755},[143,118459,118460],{"class":145,"line":3477},[143,118461,3300],{"emptyLinePlaceholder":976},[143,118463,118464],{"class":145,"line":3491},[143,118465,118466],{"class":266},"#删除软件包命令\n",[143,118468,118469,118471,118473,118475,118477,118479,118481],{"class":145,"line":3499},[143,118470,25474],{"class":156},[143,118472,118192],{"class":163},[143,118474,26977],{"class":163},[143,118476,29800],{"class":755},[143,118478,118281],{"class":163},[143,118480,1119],{"class":149},[143,118482,183],{"class":755},[143,118484,118485],{"class":145,"line":3504},[143,118486,3300],{"emptyLinePlaceholder":976},[143,118488,118489],{"class":145,"line":3510},[143,118490,118491],{"class":266},"# 清理旧版本和缓存（释放磁盘空间）\n",[143,118493,118494,118496,118498,118501],{"class":145,"line":3516},[143,118495,25474],{"class":156},[143,118497,118192],{"class":163},[143,118499,118500],{"class":163}," autoremove",[143,118502,118503],{"class":266},"  # 删除不再需要的依赖和库文件\n",[143,118505,118506,118508,118510,118513],{"class":145,"line":3521},[143,118507,25474],{"class":156},[143,118509,118192],{"class":163},[143,118511,118512],{"class":163}," clean",[143,118514,118515],{"class":266},"       # 清理下载的缓存包\n",[143,118517,118518],{"class":145,"line":8848},[143,118519,3300],{"emptyLinePlaceholder":976},[143,118521,118522],{"class":145,"line":8872},[143,118523,118524],{"class":266},"#移除软件包及配置文件\n",[143,118526,118527,118529,118531,118534,118536,118538,118540],{"class":145,"line":8877},[143,118528,25474],{"class":156},[143,118530,118192],{"class":163},[143,118532,118533],{"class":163}," purge",[143,118535,29800],{"class":755},[143,118537,118281],{"class":163},[143,118539,1119],{"class":149},[143,118541,183],{"class":755},[143,118543,118544],{"class":145,"line":8883},[143,118545,3300],{"emptyLinePlaceholder":976},[143,118547,118548],{"class":145,"line":8910},[143,118549,118550],{"class":266},"#查找软件包命令\n",[143,118552,118553,118555,118557,118560,118562,118565,118567],{"class":145,"line":8915},[143,118554,25474],{"class":156},[143,118556,118192],{"class":163},[143,118558,118559],{"class":163}," search",[143,118561,29800],{"class":755},[143,118563,118564],{"class":163},"keywor",[143,118566,1355],{"class":149},[143,118568,183],{"class":755},[143,118570,118571],{"class":145,"line":8921},[143,118572,3300],{"emptyLinePlaceholder":976},[143,118574,118575],{"class":145,"line":8933},[143,118576,118577],{"class":266},"#列出所有已安装的包\n",[143,118579,118580,118582,118584],{"class":145,"line":8945},[143,118581,118243],{"class":156},[143,118583,118246],{"class":163},[143,118585,118586],{"class":280}," --installed\n",[143,118588,118589],{"class":145,"line":8957},[143,118590,3300],{"emptyLinePlaceholder":976},[143,118592,118593],{"class":145,"line":10616},[143,118594,118595],{"class":266},"#列出所有已安装的包的版本信息\n",[143,118597,118598,118600,118602],{"class":145,"line":10641},[143,118599,118243],{"class":156},[143,118601,118246],{"class":163},[143,118603,118604],{"class":280}," --all-versions\n",[954,118606,118607],{},"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":138,"searchDepth":35,"depth":35,"links":118609},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118154,"description":973},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118616,"title":118617,"body":118618,"description":973,"extension":974,"meta":119359,"navigation":976,"path":119360,"seo":119361,"stem":119362,"__hash__":119363},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118619,"toc":119346},[118620,118623,118627,118630,118636,118640,118644,118650,118655,118660,118665,118670,118675,118678,118681,118684,118687,118691,118694,118699,118702,118707,118710,118715,118722,118725,118728,118731,118734,118737,118748,118752,118756,118761,118766,118770,118775,118779,118784,118788,118792,118797,118800,118845,118850,118854,118858,118863,118869,118874,118884,118889,118899,118904,118909,118936,118940,118943,118948,118951,118976,118980,118985,118988,118993,118998,119018,119023,119026,119041,119045,119098,119101,119106,119110,119113,119128,119131,119134,119139,119143,119147,119150,119154,119158,119161,119166,119171,119175,119182,119190,119193,119200,119205,119210,119213,119218,119225,119230,119237,119241,119243,119248,119252,119255,119258,119263,119266,119271,119274,119279,119284,119289,119293,119298,119302,119343],[10,118621,118617],{"id":118622},"_2-linux装机教程",[14,118624,118626],{"id":118625},"_21-实体机","2.1 实体机",[63,118628,118629],{},"使用清华源：（Ubuntu24.04）",[63,118631,118632],{},[67,118633,118634],{"href":118634,"rel":118635},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[71],[14,118637,118639],{"id":118638},"_22-普通虚拟机","2.2 普通虚拟机",[58,118641,118643],{"id":118642},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[63,118645,118646],{},[67,118647,118648],{"href":118648,"rel":118649},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[71],[63,118651,118652],{},[29,118653],{"alt":138,"src":118654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[63,118656,118657],{},[29,118658],{"alt":138,"src":118659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[63,118661,118662],{},[29,118663],{"alt":138,"src":118664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[63,118666,118667],{},[29,118668],{"alt":138,"src":118669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[63,118671,118672],{},[29,118673],{"alt":138,"src":118674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[63,118676,118677],{},"内存4G（4096MB）；",[63,118679,118680],{},"CPU给4个核；",[63,118682,118683],{},"硬盘动态分配60G；",[63,118685,118686],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[58,118688,118690],{"id":118689},"_222-安装ubuntu","2.2.2 安装Ubuntu",[63,118692,118693],{},"按照1.1的步骤下载Ubuntu",[63,118695,118696],{},[29,118697],{"alt":138,"src":118698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[63,118700,118701],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[63,118703,118704],{},[29,118705],{"alt":138,"src":118706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[63,118708,118709],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[63,118711,118712],{},[29,118713],{"alt":138,"src":118714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[63,118716,118717,118718,118721],{},"选择“正常安装”(找不到都用Alt+F7)， ",[25,118719,118720],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[63,118723,118724],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[63,118726,118727],{},"将改动写入磁盘吗 继续",[63,118729,118730],{},"选择东八区（shanghai，大致在地图上点一下），继续",[63,118732,118733],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[63,118735,118736],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[63,118738,118739,118740,118743,118744,118747],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[25,118741,118742],{},"除了"," 选不发送系统信息与不升级之外， ",[25,118745,118746],{},"其它"," 都跳过或前进）",[58,118749,118751],{"id":118750},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22896,118753,118755],{"id":118754},"_2231-全屏","2.2.3.1 全屏",[63,118757,118758],{},[29,118759],{"alt":138,"src":118760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[63,118762,118763],{},[29,118764],{"alt":138,"src":118765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22896,118767,118769],{"id":118768},"_2232-文件交换","2.2.3.2 文件交换",[63,118771,118772],{},[29,118773],{"alt":138,"src":118774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22896,118776,118778],{"id":118777},"_2233-新建文本文档","2.2.3.3 新建文本文档",[63,118780,118781],{},[29,118782],{"alt":138,"src":118783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118785,118787],{"id":118786},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[58,118789,118791],{"id":118790},"_231-简介与优缺点","2.3.1 简介与优缺点",[19,118793,118794],{},[22,118795,118796],{},"什么情况下推荐？",[63,118798,118799],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[19,118801,118802],{"start":35},[22,118803,118804,118805],{},"优缺点：",[19,118806,118807,118837],{},[22,118808,118809,118810],{},"优点：",[19,118811,118812,118815,118822,118825,118828,118831,118834],{},[22,118813,118814],{},"WSL2是最好的Linux发行版;(bushi)",[22,118816,118817,118818,118821],{},"性能损耗极低。且比在Windows上跑深度性能 ",[25,118819,118820],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[22,118823,118824],{},"非常方便调用USB设备，可以USB直通;",[22,118826,118827],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[22,118829,118830],{},"非常方便Win与WSL2互相传文件等协同操作;",[22,118832,118833],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[22,118835,118836],{},"非常方便使用Windows的VScode远程开发;",[22,118838,118839,118840],{},"缺点：",[19,118841,118842],{},[22,118843,118844],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[63,118846,118847],{},[29,118848],{"alt":138,"src":118849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[58,118851,118853],{"id":118852},"_232-安装教程","2.3.2 安装教程",[22896,118855,118857],{"id":118856},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[19,118859,118860],{},[22,118861,118862],{},"方法一(图形界面)",[63,118864,118865,118866,25516],{},"用Win+R输入",[140,118867,118868],{},"appwiz.cpl",[63,118870,118871],{},[29,118872],{"alt":138,"src":118873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[63,118875,118876,118877,118880,118881,27371],{},"点击OK进入 ",[25,118878,118879],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[25,118882,118883],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[63,118885,118886],{},[29,118887],{"alt":138,"src":118888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[63,118890,118891,118892,101894,118895,118898],{},"选择 ",[25,118893,118894],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[25,118896,118897],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[63,118900,118901],{},[29,118902],{"alt":138,"src":118903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[19,118905,118906],{"start":35},[22,118907,118908],{},"方法二(命令行)",[133,118910,118914],{"className":118911,"code":118912,"language":118913,"meta":138,"style":138},"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",[140,118915,118916,118921,118926,118931],{"__ignoreMap":138},[143,118917,118918],{"class":145,"line":146},[143,118919,118920],{},"# 开启 Linux 子系统\n",[143,118922,118923],{"class":145,"line":35},[143,118924,118925],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[143,118927,118928],{"class":145,"line":46},[143,118929,118930],{},"# 开启虚拟机平台\n",[143,118932,118933],{"class":145,"line":293},[143,118934,118935],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22896,118937,118939],{"id":118938},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[63,118941,118942],{},"用管理员权限打开powershell",[63,118944,118945],{},[29,118946],{"alt":138,"src":118947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[63,118949,118950],{},"升级WSL并设置默认版本为WSL2",[133,118952,118954],{"className":118911,"code":118953,"language":118913,"meta":138,"style":138},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[140,118955,118956,118961,118966,118971],{"__ignoreMap":138},[143,118957,118958],{"class":145,"line":146},[143,118959,118960],{},"# 更新 wsl\n",[143,118962,118963],{"class":145,"line":35},[143,118964,118965],{},"wsl --update\n",[143,118967,118968],{"class":145,"line":46},[143,118969,118970],{},"# 将 wsl 版本设置为 wsl2\n",[143,118972,118973],{"class":145,"line":293},[143,118974,118975],{},"wsl --set-default-version 2\n",[22896,118977,118979],{"id":118978},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[19,118981,118982],{},[22,118983,118984],{},"方式一(商店下载)",[63,118986,118987],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[63,118989,118990],{},[29,118991],{"alt":138,"src":118992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[19,118994,118995],{"start":35},[22,118996,118997],{},"方式二(命令行安装)",[133,118999,119001],{"className":118911,"code":119000,"language":118913,"meta":138,"style":138},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[140,119002,119003,119008,119013],{"__ignoreMap":138},[143,119004,119005],{"class":145,"line":146},[143,119006,119007],{},"# 列出可安装的 Linux 版本\n",[143,119009,119010],{"class":145,"line":35},[143,119011,119012],{},"#（需要科学手段）\n",[143,119014,119015],{"class":145,"line":46},[143,119016,119017],{},"wsl --list --online\n",[63,119019,119020],{},[29,119021],{"alt":138,"src":119022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[63,119024,119025],{},"选择对应发行版并安装",[133,119027,119029],{"className":118911,"code":119028,"language":118913,"meta":138,"style":138},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[140,119030,119031,119036],{"__ignoreMap":138},[143,119032,119033],{"class":145,"line":146},[143,119034,119035],{},"# Ubuntu安装完毕后需要重启系统\n",[143,119037,119038],{"class":145,"line":35},[143,119039,119040],{},"wsl --install -d Ubuntu-24.04\n",[22896,119042,119044],{"id":119043},"_2324-查看系统状态","2.3.2.4 查看系统状态",[133,119046,119048],{"className":118911,"code":119047,"language":118913,"meta":138,"style":138},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[140,119049,119050,119055,119060,119065,119070,119074,119078,119083,119088,119093],{"__ignoreMap":138},[143,119051,119052],{"class":145,"line":146},[143,119053,119054],{},"# 查看 wsl\n",[143,119056,119057],{"class":145,"line":35},[143,119058,119059],{},"wsl -l\n",[143,119061,119062],{"class":145,"line":46},[143,119063,119064],{},"# 查看 wsl 运行版本或模式\n",[143,119066,119067],{"class":145,"line":293},[143,119068,119069],{},"wsl -l -v\n",[143,119071,119072],{"class":145,"line":306},[143,119073,3300],{"emptyLinePlaceholder":976},[143,119075,119076],{"class":145,"line":319},[143,119077,3300],{"emptyLinePlaceholder":976},[143,119079,119080],{"class":145,"line":332},[143,119081,119082],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[143,119084,119085],{"class":145,"line":345},[143,119086,119087],{},"wsl --set-version \u003Cdistro> 2\n",[143,119089,119090],{"class":145,"line":701},[143,119091,119092],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[143,119094,119095],{"class":145,"line":707},[143,119096,119097],{},"wsl --unregister \u003Cdistro>\n",[63,119099,119100],{},"输出Version为2即正常",[63,119102,119103],{},[29,119104],{"alt":138,"src":119105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22896,119107,119109],{"id":119108},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[63,119111,119112],{},"直接在Powershell里输入wsl命令进入子系统",[133,119114,119116],{"className":118911,"code":119115,"language":118913,"meta":138,"style":138},"# 进入子系统\nwsl\n",[140,119117,119118,119123],{"__ignoreMap":138},[143,119119,119120],{"class":145,"line":146},[143,119121,119122],{},"# 进入子系统\n",[143,119124,119125],{"class":145,"line":35},[143,119126,119127],{},"wsl\n",[63,119129,119130],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[63,119132,119133],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[63,119135,119136],{},[29,119137],{"alt":138,"src":119138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[58,119140,119142],{"id":119141},"_233-配置各种环境","2.3.3 配置各种环境",[22896,119144,119146],{"id":119145},"_2331-换源","2.3.3.1 换源",[63,119148,119149],{},"(同实体机LINUX，往下找教程)",[22896,119151,119153],{"id":119152},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23808,119155,119157],{"id":119156},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[63,119159,119160],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[63,119162,119163],{},[29,119164],{"alt":138,"src":119165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[63,119167,119168],{},[29,119169],{"alt":138,"src":119170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23808,119172,119174],{"id":119173},"_23322-cuda","2.3.3.2.2 CUDA",[63,119176,119177,119178],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[67,119179,119180],{"href":119180,"rel":119181},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[71],[63,119183,119184,119187],{},[29,119185],{"alt":138,"src":119186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[29,119188],{"alt":138,"src":119189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[63,119191,119192],{},"在下方的网站，选择合适的版本。",[63,119194,119195,119196],{},"WSL2 专属 CUDA 指南：",[67,119197,119198],{"href":119198,"rel":119199},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[71],[63,119201,119202],{},[25,119203,119204],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[63,119206,119207],{},[29,119208],{"alt":138,"src":119209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[63,119211,119212],{},"挨行敲一遍",[63,119214,119215],{},[29,119216],{"alt":138,"src":119217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[63,119219,119220,119221,119224],{},"敲完后，输入",[140,119222,119223],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[63,119226,119227],{},[29,119228],{"alt":138,"src":119229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[63,119231,119232,119233,119236],{},"（请详看下方教程的",[25,119234,119235],{},"安装CUDA的配置环境来看","如何配置环境）",[23808,119238,119240],{"id":119239},"_23323-cudnn","2.3.3.2.3 cuDNN",[63,119242,119149],{},[63,119244,119245],{},[29,119246],{"alt":138,"src":119247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22896,119249,119251],{"id":119250},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[63,119253,119254],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[63,119256,119257],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[63,119259,119260],{},[29,119261],{"alt":138,"src":119262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[63,119264,119265],{},"连接WSL2",[63,119267,119268],{},[29,119269],{"alt":138,"src":119270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[63,119272,119273],{},"远程开发成功。",[63,119275,119276],{},[29,119277],{"alt":138,"src":119278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[63,119280,119281],{},[29,119282],{"alt":138,"src":119283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[63,119285,119286],{},[29,119287],{"alt":138,"src":119288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22896,119290,119292],{"id":119291},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[63,119294,119295],{},[29,119296],{"alt":138,"src":119297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22896,119299,119301],{"id":119300},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[133,119303,119305],{"className":118171,"code":119304,"language":118173,"meta":138,"style":138},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[140,119306,119307,119315,119323,119334,119338],{"__ignoreMap":138},[143,119308,119309,119311,119313],{"class":145,"line":146},[143,119310,25474],{"class":156},[143,119312,118192],{"class":163},[143,119314,27140],{"class":163},[143,119316,119317,119319,119321],{"class":145,"line":35},[143,119318,25474],{"class":156},[143,119320,118192],{"class":163},[143,119322,118208],{"class":163},[143,119324,119325,119327,119329,119331],{"class":145,"line":46},[143,119326,25474],{"class":156},[143,119328,118192],{"class":163},[143,119330,24732],{"class":163},[143,119332,119333],{"class":163}," mesa-utils\n",[143,119335,119336],{"class":145,"line":293},[143,119337,3300],{"emptyLinePlaceholder":976},[143,119339,119340],{"class":145,"line":306},[143,119341,119342],{"class":266},"#然后重启wsl2即可\n",[954,119344,119345],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":138,"searchDepth":35,"depth":35,"links":119347},[119348,119349,119354],{"id":118625,"depth":35,"text":118626},{"id":118638,"depth":35,"text":118639,"children":119350},[119351,119352,119353],{"id":118642,"depth":46,"text":118643},{"id":118689,"depth":46,"text":118690},{"id":118750,"depth":46,"text":118751},{"id":118786,"depth":35,"text":118787,"children":119355},[119356,119357,119358],{"id":118790,"depth":46,"text":118791},{"id":118852,"depth":46,"text":118853},{"id":119141,"depth":46,"text":119142},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118617,"description":973},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119365,"title":119366,"body":119367,"description":973,"extension":974,"meta":122303,"navigation":976,"path":122304,"seo":122305,"stem":122306,"__hash__":122307},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119368,"toc":122275},[119369,119372,119376,119382,119386,119392,119396,119584,119587,119592,119596,119600,119603,119606,119612,119617,119620,119623,119628,119661,119666,119670,119747,119750,119755,119759,119762,119801,119804,119813,119831,119836,119843,119960,119965,119968,119995,120000,120004,120013,120063,120070,120074,120077,120091,120098,120132,120137,120141,120164,120167,120172,120176,120179,120182,120185,120227,120231,120234,120237,120278,120282,120286,120289,120294,120299,120302,120325,120328,120336,120341,120344,120349,120354,120357,120362,120366,120371,120394,120399,120461,120469,120474,120479,120482,120487,120490,120495,120500,120518,120523,120529,120534,120548,120552,120555,120558,120561,120604,120607,120612,120713,120716,120721,120725,120729,120766,120770,120774,120778,120824,120828,120873,120877,120884,120892,120947,120950,121027,121030,121053,121057,121060,121065,121070,121078,121081,121086,121091,121096,121099,121104,121113,121116,121121,121124,121195,121200,121203,121208,121211,121216,121219,121224,121227,121232,121237,121240,121315,121318,121331,121336,121339,121353,121356,121385,121390,121419,121422,121427,121431,121436,121445,121448,121453,121456,121461,121464,121467,121472,121475,121480,121485,121488,121493,121496,121621,121626,121656,121659,121664,121669,121686,121689,121732,121735,121762,121767,121780,121923,121927,121932,121946,121949,122000,122003,122033,122036,122052,122057,122071,122074,122141,122146,122155,122160,122163,122175,122180,122187,122211,122214,122219,122222,122241,122246,122253,122265,122272],[10,119370,119366],{"id":119371},"_3-安装必备配置",[14,119373,119375],{"id":119374},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[133,119377,119380],{"className":119378,"code":119379,"language":6087},[6085],"  打开下方网站（注意，该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",[140,119381,119379],{"__ignoreMap":138},[58,119383,119385],{"id":119384},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[133,119387,119390],{"className":119388,"code":119389,"language":6087},[6085],"  输入以下命令\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",[140,119391,119389],{"__ignoreMap":138},[58,119393,119395],{"id":119394},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[133,119397,119401],{"className":119398,"code":119399,"language":119400,"meta":138,"style":138},"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",[140,119402,119403,119411,119422,119434,119448,119452,119462,119467,119471,119475,119480,119484,119496,119500,119505,119509,119520,119524,119540,119544,119555,119559,119564,119568,119576],{"__ignoreMap":138},[143,119404,119405,119407,119409],{"class":145,"line":146},[143,119406,25474],{"class":156},[143,119408,118192],{"class":163},[143,119410,27140],{"class":163},[143,119412,119413,119415,119417,119419],{"class":145,"line":35},[143,119414,25474],{"class":156},[143,119416,118192],{"class":163},[143,119418,24732],{"class":163},[143,119420,119421],{"class":163}," vim\n",[143,119423,119424,119426,119429,119431],{"class":145,"line":46},[143,119425,25474],{"class":156},[143,119427,119428],{"class":163}," rm",[143,119430,26223],{"class":280},[143,119432,119433],{"class":163}," \u002Fetc\u002Fapt\u002Fsources.list\n",[143,119435,119436,119438,119440,119442,119445],{"class":145,"line":293},[143,119437,25474],{"class":156},[143,119439,119428],{"class":163},[143,119441,26223],{"class":280},[143,119443,119444],{"class":163}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[143,119446,119447],{"class":280},"**\n",[143,119449,119450],{"class":145,"line":306},[143,119451,3300],{"emptyLinePlaceholder":976},[143,119453,119454,119456,119459],{"class":145,"line":319},[143,119455,25474],{"class":156},[143,119457,119458],{"class":163}," vim",[143,119460,119461],{"class":163}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[143,119463,119464],{"class":145,"line":332},[143,119465,119466],{"class":163},"```\n",[143,119468,119469],{"class":145,"line":345},[143,119470,3300],{"emptyLinePlaceholder":976},[143,119472,119473],{"class":145,"line":701},[143,119474,3300],{"emptyLinePlaceholder":976},[143,119476,119477],{"class":145,"line":707},[143,119478,119479],{"class":156},"选择好Ubuntu版本后，复制下方的内容。\n",[143,119481,119482],{"class":145,"line":727},[143,119483,3300],{"emptyLinePlaceholder":976},[143,119485,119486,119488,119491,119494],{"class":145,"line":2518},[143,119487,1268],{"class":755},[143,119489,119490],{"class":163},"[](",[143,119492,119493],{"class":156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[143,119495,1055],{"class":163},[143,119497,119498],{"class":145,"line":2524},[143,119499,3300],{"emptyLinePlaceholder":976},[143,119501,119502],{"class":145,"line":2529},[143,119503,119504],{"class":156},"粘贴进去\n",[143,119506,119507],{"class":145,"line":2543},[143,119508,3300],{"emptyLinePlaceholder":976},[143,119510,119511,119513,119515,119518],{"class":145,"line":2548},[143,119512,1268],{"class":755},[143,119514,119490],{"class":163},[143,119516,119517],{"class":156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[143,119519,1055],{"class":163},[143,119521,119522],{"class":145,"line":2554},[143,119523,3300],{"emptyLinePlaceholder":976},[143,119525,119526,119529,119532,119535,119537],{"class":145,"line":2575},[143,119527,119528],{"class":156},"按一下ESC，然后英文冒号，输入",[143,119530,119531],{"class":163}," `",[143,119533,119534],{"class":156},":wq!",[143,119536,2010],{"class":163},[143,119538,119539],{"class":156},"然后回车\n",[143,119541,119542],{"class":145,"line":2580},[143,119543,3300],{"emptyLinePlaceholder":976},[143,119545,119546,119548,119550,119553],{"class":145,"line":2594},[143,119547,1268],{"class":755},[143,119549,119490],{"class":163},[143,119551,119552],{"class":156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[143,119554,1055],{"class":163},[143,119556,119557],{"class":145,"line":2599},[143,119558,3300],{"emptyLinePlaceholder":976},[143,119560,119561],{"class":145,"line":2628},[143,119562,119563],{"class":156},"输入以下命令\n",[143,119565,119566],{"class":145,"line":2633},[143,119567,3300],{"emptyLinePlaceholder":976},[143,119569,119570,119573],{"class":145,"line":2650},[143,119571,119572],{"class":163},"```",[143,119574,119575],{"class":156},"Bash\n",[143,119577,119578,119580,119582],{"class":145,"line":2655},[143,119579,25474],{"class":156},[143,119581,118192],{"class":163},[143,119583,27140],{"class":163},[63,119585,119586],{},"这里被替换成对应学校则成功",[63,119588,119589],{},[29,119590],{"alt":138,"src":119591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119593,119595],{"id":119594},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[58,119597,119599],{"id":119598},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[63,119601,119602],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[63,119604,119605],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[63,119607,119608],{},[67,119609,119610],{"href":119610,"rel":119611},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[71],[63,119613,119614],{},[29,119615],{"alt":138,"src":119616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[63,119618,119619],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[63,119621,119622],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[63,119624,119625],{},[29,119626],{"alt":138,"src":119627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[133,119629,119631],{"className":118171,"code":119630,"language":118173,"meta":138,"style":138},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[140,119632,119633,119638,119645,119650],{"__ignoreMap":138},[143,119634,119635],{"class":145,"line":146},[143,119636,119637],{"class":266},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[143,119639,119640,119642],{"class":145,"line":35},[143,119641,102152],{"class":280},[143,119643,119644],{"class":163}," ~\u002FDownloads\n",[143,119646,119647],{"class":145,"line":46},[143,119648,119649],{"class":266},"#下方chrome安装包名不一定是这个，根据名字来看\n",[143,119651,119652,119654,119656,119658],{"class":145,"line":293},[143,119653,25474],{"class":156},[143,119655,118192],{"class":163},[143,119657,24732],{"class":163},[143,119659,119660],{"class":163}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[63,119662,119663],{},[29,119664],{"alt":138,"src":119665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[58,119667,119669],{"id":119668},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[133,119671,119673],{"className":118171,"code":119672,"language":118173,"meta":138,"style":138},"# 老版\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",[140,119674,119675,119680,119688,119699,119704,119708,119713,119723,119731,119742],{"__ignoreMap":138},[143,119676,119677],{"class":145,"line":146},[143,119678,119679],{"class":266},"# 老版\n",[143,119681,119682,119684,119686],{"class":145,"line":35},[143,119683,25474],{"class":156},[143,119685,118192],{"class":163},[143,119687,27140],{"class":163},[143,119689,119690,119692,119694,119696],{"class":145,"line":46},[143,119691,25474],{"class":156},[143,119693,118192],{"class":163},[143,119695,24732],{"class":163},[143,119697,119698],{"class":163}," neofetch\n",[143,119700,119701],{"class":145,"line":293},[143,119702,119703],{"class":156},"neofetch\n",[143,119705,119706],{"class":145,"line":306},[143,119707,3300],{"emptyLinePlaceholder":976},[143,119709,119710],{"class":145,"line":319},[143,119711,119712],{"class":266},"# 新版\n",[143,119714,119715,119717,119720],{"class":145,"line":332},[143,119716,25474],{"class":156},[143,119718,119719],{"class":163}," add-apt-repository",[143,119721,119722],{"class":163}," ppa:zhangsongcui3371\u002Ffastfetch\n",[143,119724,119725,119727,119729],{"class":145,"line":345},[143,119726,25474],{"class":156},[143,119728,118192],{"class":163},[143,119730,27140],{"class":163},[143,119732,119733,119735,119737,119739],{"class":145,"line":701},[143,119734,25474],{"class":156},[143,119736,118192],{"class":163},[143,119738,24732],{"class":163},[143,119740,119741],{"class":163}," fastfetch\n",[143,119743,119744],{"class":145,"line":707},[143,119745,119746],{"class":156},"fastfetch\n",[63,119748,119749],{},"这里显示，一共有3162个debian的程序，7个snap程序",[63,119751,119752],{},[29,119753],{"alt":138,"src":119754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[58,119756,119758],{"id":119757},"_323-移除snap应用","3.2.3 移除snap应用",[63,119760,119761],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[133,119763,119765],{"className":118171,"code":119764,"language":118173,"meta":138,"style":138},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[140,119766,119767,119779,119790],{"__ignoreMap":138},[143,119768,119769,119771,119773,119776],{"class":145,"line":146},[143,119770,25474],{"class":156},[143,119772,27411],{"class":163},[143,119774,119775],{"class":163}," disable",[143,119777,119778],{"class":163}," snapd.service\n",[143,119780,119781,119783,119785,119787],{"class":145,"line":35},[143,119782,25474],{"class":156},[143,119784,27411],{"class":163},[143,119786,119775],{"class":163},[143,119788,119789],{"class":163}," snapd.socket\n",[143,119791,119792,119794,119796,119798],{"class":145,"line":46},[143,119793,25474],{"class":156},[143,119795,27411],{"class":163},[143,119797,119775],{"class":163},[143,119799,119800],{"class":163}," snapd.seeded.service\n",[63,119802,119803],{},"然后查看snap应用列表",[63,119805,119806,119807,119812],{},"根据你安装的选择不同（最小安装或普通安装），有",[67,119808,119811],{"href":119809,"rel":119810},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[71],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[133,119814,119816],{"className":118171,"code":119815,"language":118173,"meta":138,"style":138},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[140,119817,119818,119823],{"__ignoreMap":138},[143,119819,119820],{"class":145,"line":146},[143,119821,119822],{"class":266},"# 查询当前系统上snap安装了哪些app\n",[143,119824,119825,119828],{"class":145,"line":35},[143,119826,119827],{"class":156},"snap",[143,119829,119830],{"class":163}," list\n",[63,119832,119833],{},[29,119834],{"alt":138,"src":119835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[63,119837,119838,119839,119842],{},"卸载掉图中所有应用，按照 ",[25,119840,119841],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[133,119844,119846],{"className":118171,"code":119845,"language":118173,"meta":138,"style":138},"#移除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",[140,119847,119848,119853,119865,119870,119881,119886,119897,119902,119913,119918,119922,119927,119938,119949],{"__ignoreMap":138},[143,119849,119850],{"class":145,"line":146},[143,119851,119852],{"class":266},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[143,119854,119855,119857,119860,119862],{"class":145,"line":35},[143,119856,25474],{"class":156},[143,119858,119859],{"class":163}," snap",[143,119861,26977],{"class":163},[143,119863,119864],{"class":163}," snap-store\n",[143,119866,119867],{"class":145,"line":46},[143,119868,119869],{"class":266},"#移除firefox浏览器\n",[143,119871,119872,119874,119876,119878],{"class":145,"line":293},[143,119873,25474],{"class":156},[143,119875,119859],{"class":163},[143,119877,26977],{"class":163},[143,119879,119880],{"class":163}," firefox\n",[143,119882,119883],{"class":145,"line":306},[143,119884,119885],{"class":266},"#移除gnome-42-2204\n",[143,119887,119888,119890,119892,119894],{"class":145,"line":319},[143,119889,25474],{"class":156},[143,119891,119859],{"class":163},[143,119893,26977],{"class":163},[143,119895,119896],{"class":163}," gnome-42-2204\n",[143,119898,119899],{"class":145,"line":332},[143,119900,119901],{"class":266},"#移除gtk-common-themes\n",[143,119903,119904,119906,119908,119910],{"class":145,"line":345},[143,119905,25474],{"class":156},[143,119907,119859],{"class":163},[143,119909,26977],{"class":163},[143,119911,119912],{"class":163}," gtk-common-themes\n",[143,119914,119915],{"class":145,"line":701},[143,119916,119917],{"class":266},"#移除其它...\n",[143,119919,119920],{"class":145,"line":707},[143,119921,3574],{"class":149},[143,119923,119924],{"class":145,"line":727},[143,119925,119926],{"class":266},"#移除core22,bare以及snapd\n",[143,119928,119929,119931,119933,119935],{"class":145,"line":2518},[143,119930,25474],{"class":156},[143,119932,119859],{"class":163},[143,119934,26977],{"class":163},[143,119936,119937],{"class":163}," core22\n",[143,119939,119940,119942,119944,119946],{"class":145,"line":2524},[143,119941,25474],{"class":156},[143,119943,119859],{"class":163},[143,119945,26977],{"class":163},[143,119947,119948],{"class":163}," bare\n",[143,119950,119951,119953,119955,119957],{"class":145,"line":2529},[143,119952,25474],{"class":156},[143,119954,119859],{"class":163},[143,119956,26977],{"class":163},[143,119958,119959],{"class":163}," snapd\n",[63,119961,119962],{},[29,119963],{"alt":138,"src":119964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[63,119966,119967],{},"输入以下命令查看是否还有snap包",[133,119969,119971],{"className":118171,"code":119970,"language":118173,"meta":138,"style":138},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[140,119972,119973,119979,119983,119987,119991],{"__ignoreMap":138},[143,119974,119975,119977],{"class":145,"line":146},[143,119976,119827],{"class":156},[143,119978,119830],{"class":163},[143,119980,119981],{"class":145,"line":35},[143,119982,119679],{"class":266},[143,119984,119985],{"class":145,"line":46},[143,119986,119703],{"class":156},[143,119988,119989],{"class":145,"line":293},[143,119990,119712],{"class":266},[143,119992,119993],{"class":145,"line":306},[143,119994,119746],{"class":156},[63,119996,119997],{},[29,119998],{"alt":138,"src":119999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[58,120001,120003],{"id":120002},"_324-移除snap","3.2.4 移除snap",[63,120005,120006,120007,120012],{},"在删除掉",[67,120008,120011],{"href":120009,"rel":120010},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[71],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[133,120014,120016],{"className":118171,"code":120015,"language":118173,"meta":138,"style":138}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[140,120017,120018,120023,120036,120041,120052],{"__ignoreMap":138},[143,120019,120020],{"class":145,"line":146},[143,120021,120022],{"class":266}," #使用apt移除掉snap\n",[143,120024,120025,120027,120029,120031,120034],{"class":145,"line":35},[143,120026,25474],{"class":156},[143,120028,118192],{"class":163},[143,120030,118500],{"class":163},[143,120032,120033],{"class":280}," --purge",[143,120035,119959],{"class":163},[143,120037,120038],{"class":145,"line":46},[143,120039,120040],{"class":266},"#移除snapd的一些目录\n",[143,120042,120043,120045,120047,120049],{"class":145,"line":293},[143,120044,25474],{"class":156},[143,120046,119428],{"class":163},[143,120048,26223],{"class":280},[143,120050,120051],{"class":163}," \u002Fvar\u002Fcache\u002Fsnapd\n",[143,120053,120054,120056,120058,120060],{"class":145,"line":306},[143,120055,25474],{"class":156},[143,120057,119428],{"class":163},[143,120059,26223],{"class":280},[143,120061,120062],{"class":163}," ~\u002Fsnap\n",[63,120064,120065,120066,120069],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[140,120067,120068],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[58,120071,120073],{"id":120072},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[63,120075,120076],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[133,120078,120080],{"className":118171,"code":120079,"language":118173,"meta":138,"style":138},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[140,120081,120082],{"__ignoreMap":138},[143,120083,120084,120086,120088],{"class":145,"line":146},[143,120085,25474],{"class":156},[143,120087,119458],{"class":163},[143,120089,120090],{"class":163}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[63,120092,120093,120094,120097],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[140,120095,120096],{},":wq"," 回车",[133,120099,120101],{"className":118171,"code":120100,"language":118173,"meta":138,"style":138},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[140,120102,120103,120110,120124],{"__ignoreMap":138},[143,120104,120105,120108],{"class":145,"line":146},[143,120106,120107],{"class":156},"Package:",[143,120109,119959],{"class":163},[143,120111,120112,120115,120118,120121],{"class":145,"line":35},[143,120113,120114],{"class":156},"Pin:",[143,120116,120117],{"class":163}," release",[143,120119,120120],{"class":163}," a=",[143,120122,120123],{"class":280},"*\n",[143,120125,120126,120129],{"class":145,"line":46},[143,120127,120128],{"class":156},"Pin-Priority:",[143,120130,120131],{"class":280}," -10\n",[63,120133,120134],{},[29,120135],{"alt":138,"src":120136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[58,120138,120140],{"id":120139},"_326-测试是否成功","3.2.6 测试是否成功",[133,120142,120144],{"className":118171,"code":120143,"language":118173,"meta":138,"style":138},"sudo apt update\nsudo apt install firefox\n",[140,120145,120146,120154],{"__ignoreMap":138},[143,120147,120148,120150,120152],{"class":145,"line":146},[143,120149,25474],{"class":156},[143,120151,118192],{"class":163},[143,120153,27140],{"class":163},[143,120155,120156,120158,120160,120162],{"class":145,"line":35},[143,120157,25474],{"class":156},[143,120159,118192],{"class":163},[143,120161,24732],{"class":163},[143,120163,119880],{"class":163},[63,120165,120166],{},"这里提示snapd无法被安装，就证明成功了",[63,120168,120169],{},[29,120170],{"alt":138,"src":120171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[58,120173,120175],{"id":120174},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[63,120177,120178],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[63,120180,120181],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[63,120183,120184],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[133,120186,120188],{"className":118171,"code":120187,"language":118173,"meta":138,"style":138},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[140,120189,120190,120195,120204,120209,120217],{"__ignoreMap":138},[143,120191,120192],{"class":145,"line":146},[143,120193,120194],{"class":266},"# 添加Mozilla提供的源\n",[143,120196,120197,120199,120201],{"class":145,"line":35},[143,120198,25474],{"class":156},[143,120200,119719],{"class":163},[143,120202,120203],{"class":163}," ppa:mozillateam\u002Fppa\n",[143,120205,120206],{"class":145,"line":46},[143,120207,120208],{"class":266},"# 安装Firefox\n",[143,120210,120211,120213,120215],{"class":145,"line":293},[143,120212,25474],{"class":156},[143,120214,118192],{"class":163},[143,120216,27140],{"class":163},[143,120218,120219,120221,120223,120225],{"class":145,"line":306},[143,120220,25474],{"class":156},[143,120222,118192],{"class":163},[143,120224,24732],{"class":163},[143,120226,119880],{"class":163},[58,120228,120230],{"id":120229},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[63,120232,120233],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[63,120235,120236],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[133,120238,120240],{"className":118171,"code":120239,"language":118173,"meta":138,"style":138},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[140,120241,120242,120247,120257,120265,120269],{"__ignoreMap":138},[143,120243,120244],{"class":145,"line":146},[143,120245,120246],{"class":266},"#删掉禁止安装snap的配置文件\n",[143,120248,120249,120251,120253,120255],{"class":145,"line":35},[143,120250,25474],{"class":156},[143,120252,119428],{"class":163},[143,120254,26223],{"class":280},[143,120256,120090],{"class":163},[143,120258,120259,120261,120263],{"class":145,"line":46},[143,120260,25474],{"class":156},[143,120262,118192],{"class":163},[143,120264,27140],{"class":163},[143,120266,120267],{"class":145,"line":293},[143,120268,3300],{"emptyLinePlaceholder":976},[143,120270,120271,120273,120275],{"class":145,"line":306},[143,120272,25474],{"class":156},[143,120274,118192],{"class":163},[143,120276,120277],{"class":163}," dist-update\n",[14,120279,120281],{"id":120280},"_33-中文输入法","3.3 中文输入法",[58,120283,120285],{"id":120284},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[63,120287,120288],{},"官网下载搜狗输入法",[63,120290,120291],{},[29,120292],{"alt":138,"src":120293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[63,120295,120296],{},[29,120297],{"alt":138,"src":120298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[63,120300,120301],{},"打开终端输入如下",[133,120303,120305],{"className":118171,"code":120304,"language":118173,"meta":138,"style":138},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[140,120306,120307,120314],{"__ignoreMap":138},[143,120308,120309,120311],{"class":145,"line":146},[143,120310,102152],{"class":280},[143,120312,120313],{"class":163}," ~\u002FDownloads\u002F\n",[143,120315,120316,120318,120320,120322],{"class":145,"line":35},[143,120317,25474],{"class":156},[143,120319,118192],{"class":163},[143,120321,24732],{"class":163},[143,120323,120324],{"class":163}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[63,120326,120327],{},"打开Fcitx",[63,120329,120330,120333],{},[29,120331],{"alt":138,"src":120332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[29,120334],{"alt":138,"src":120335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[63,120337,120338],{},[29,120339],{"alt":138,"src":120340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[63,120342,120343],{},"添加搜狗输入法",[63,120345,120346],{},[29,120347],{"alt":138,"src":120348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[63,120350,120351],{},[29,120352],{"alt":138,"src":120353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[63,120355,120356],{},"将搜狗输入法设置为唯一输入法",[63,120358,120359],{},[29,120360],{"alt":138,"src":120361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[58,120363,120365],{"id":120364},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[19,120367,120368],{},[22,120369,120370],{},"卸载旧输入法",[133,120372,120374],{"className":119398,"code":120373,"language":119400,"meta":138,"style":138},"sudo apt purge fcitx* ibus*\n",[140,120375,120376],{"__ignoreMap":138},[143,120377,120378,120380,120382,120384,120387,120389,120392],{"class":145,"line":146},[143,120379,25474],{"class":156},[143,120381,118192],{"class":163},[143,120383,118533],{"class":163},[143,120385,120386],{"class":163}," fcitx",[143,120388,1496],{"class":280},[143,120390,120391],{"class":163}," ibus",[143,120393,120123],{"class":280},[19,120395,120396],{"start":35},[22,120397,120398],{},"安装Fcitx5",[133,120400,120402],{"className":118171,"code":120401,"language":118173,"meta":138,"style":138},"# 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",[140,120403,120404,120409,120423,120427,120432,120441,120449],{"__ignoreMap":138},[143,120405,120406],{"class":145,"line":146},[143,120407,120408],{"class":266},"# Ubuntu22.04及以上、Debian12及以上\n",[143,120410,120411,120413,120415,120417,120420],{"class":145,"line":35},[143,120412,25474],{"class":156},[143,120414,118192],{"class":163},[143,120416,24732],{"class":163},[143,120418,120419],{"class":163}," fcitx5",[143,120421,120422],{"class":163}," fcitx5-chinese-addons\n",[143,120424,120425],{"class":145,"line":46},[143,120426,3300],{"emptyLinePlaceholder":976},[143,120428,120429],{"class":145,"line":293},[143,120430,120431],{"class":266},"# Ubuntu20.04\n",[143,120433,120434,120436,120438],{"class":145,"line":306},[143,120435,25474],{"class":156},[143,120437,119719],{"class":163},[143,120439,120440],{"class":163}," ppa:zhsj\u002Ffcitx5\n",[143,120442,120443,120445,120447],{"class":145,"line":319},[143,120444,25474],{"class":156},[143,120446,118192],{"class":163},[143,120448,27140],{"class":163},[143,120450,120451,120453,120455,120457,120459],{"class":145,"line":332},[143,120452,25474],{"class":156},[143,120454,118192],{"class":163},[143,120456,24732],{"class":163},[143,120458,120419],{"class":163},[143,120460,120422],{"class":163},[19,120462,120463,120466],{"start":46},[22,120464,120465],{},"Reboot System",[22,120467,120468],{},"启动Fcitx5",[63,120470,120471],{},[29,120472],{"alt":138,"src":120473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[19,120475,120476],{"start":306},[22,120477,120478],{},"修改一些设置",[63,120480,120481],{},"将Pinyin和Keyboard - English US加入到左边。",[63,120483,120484],{},[29,120485],{"alt":138,"src":120486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[63,120488,120489],{},"添加快捷键以便于更好切换中英文",[63,120491,120492],{},[29,120493],{"alt":138,"src":120494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[19,120496,120497],{"start":319},[22,120498,120499],{},"重启",[133,120501,120503],{"className":119398,"code":120502,"language":119400,"meta":138,"style":138},"sudo shutdown -r now\n",[140,120504,120505],{"__ignoreMap":138},[143,120506,120507,120509,120512,120515],{"class":145,"line":146},[143,120508,25474],{"class":156},[143,120510,120511],{"class":163}," shutdown",[143,120513,120514],{"class":280}," -r",[143,120516,120517],{"class":163}," now\n",[19,120519,120520],{"start":332},[22,120521,120522],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[63,120524,120525],{},[67,120526,120527],{"href":120527,"rel":120528},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[71],[19,120530,120531],{"start":345},[22,120532,120533],{},"再重启",[133,120535,120536],{"className":119398,"code":120502,"language":119400,"meta":138,"style":138},[140,120537,120538],{"__ignoreMap":138},[143,120539,120540,120542,120544,120546],{"class":145,"line":146},[143,120541,25474],{"class":156},[143,120543,120511],{"class":163},[143,120545,120514],{"class":280},[143,120547,120517],{"class":163},[14,120549,120551],{"id":120550},"_34-pip3源替换","3.4 pip3源替换",[63,120553,120554],{},"非Debian系发行版需要做。",[63,120556,120557],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[63,120559,120560],{},"使用dnf的系统也可能不用做。",[133,120562,120564],{"className":118171,"code":120563,"language":118173,"meta":138,"style":138},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[140,120565,120566,120571,120578,120583,120588],{"__ignoreMap":138},[143,120567,120568],{"class":145,"line":146},[143,120569,120570],{"class":266},"# 检查是否已安装 pip\n",[143,120572,120573,120576],{"class":145,"line":35},[143,120574,120575],{"class":156},"pip3",[143,120577,27191],{"class":280},[143,120579,120580],{"class":145,"line":46},[143,120581,120582],{"class":266},"# 如果未安装，先安装 pip3（见下方）\n",[143,120584,120585],{"class":145,"line":293},[143,120586,120587],{"class":266},"# 配置 pip 使用清华源\n",[143,120589,120590,120592,120595,120598,120601],{"class":145,"line":306},[143,120591,120575],{"class":156},[143,120593,120594],{"class":163}," config",[143,120596,120597],{"class":163}," set",[143,120599,120600],{"class":163}," global.index-url",[143,120602,120603],{"class":163}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[63,120605,120606],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[63,120608,120609],{},[29,120610],{"alt":138,"src":120611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[133,120613,120615],{"className":118171,"code":120614,"language":118173,"meta":138,"style":138},"#安装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",[140,120616,120617,120622,120630,120641,120645,120650,120669,120673,120678,120690,120694,120699],{"__ignoreMap":138},[143,120618,120619],{"class":145,"line":146},[143,120620,120621],{"class":266},"#安装pip3\n",[143,120623,120624,120626,120628],{"class":145,"line":35},[143,120625,25474],{"class":156},[143,120627,118192],{"class":163},[143,120629,27140],{"class":163},[143,120631,120632,120634,120636,120638],{"class":145,"line":46},[143,120633,25474],{"class":156},[143,120635,26974],{"class":163},[143,120637,24732],{"class":163},[143,120639,120640],{"class":163}," python3-pip\n",[143,120642,120643],{"class":145,"line":293},[143,120644,3300],{"emptyLinePlaceholder":976},[143,120646,120647],{"class":145,"line":306},[143,120648,120649],{"class":266},"#更新pip3\n",[143,120651,120652,120654,120656,120658,120660,120662,120665,120667],{"class":145,"line":319},[143,120653,101755],{"class":156},[143,120655,101758],{"class":280},[143,120657,101781],{"class":163},[143,120659,24732],{"class":163},[143,120661,27328],{"class":280},[143,120663,120664],{"class":163}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[143,120666,101786],{"class":280},[143,120668,101789],{"class":163},[143,120670,120671],{"class":145,"line":332},[143,120672,3300],{"emptyLinePlaceholder":976},[143,120674,120675],{"class":145,"line":345},[143,120676,120677],{"class":266},"#设置pip源为清华源\n",[143,120679,120680,120682,120684,120686,120688],{"class":145,"line":701},[143,120681,120575],{"class":156},[143,120683,120594],{"class":163},[143,120685,120597],{"class":163},[143,120687,120600],{"class":163},[143,120689,120603],{"class":163},[143,120691,120692],{"class":145,"line":707},[143,120693,3300],{"emptyLinePlaceholder":976},[143,120695,120696],{"class":145,"line":727},[143,120697,120698],{"class":266},"#测试\n",[143,120700,120701,120703,120705,120707,120709,120711],{"class":145,"line":2518},[143,120702,101755],{"class":156},[143,120704,101758],{"class":280},[143,120706,101781],{"class":163},[143,120708,24732],{"class":163},[143,120710,101786],{"class":280},[143,120712,101789],{"class":163},[63,120714,120715],{},"成功的话，会看到Looking后面是tsinghua字样。",[63,120717,120718],{},[29,120719],{"alt":138,"src":120720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120722,120724],{"id":120723},"_35-显卡驱动安装","3.5 显卡驱动安装",[58,120726,120728],{"id":120727},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[133,120730,120732],{"className":119398,"code":120731,"language":119400,"meta":138,"style":138},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[140,120733,120734,120739,120754,120759],{"__ignoreMap":138},[143,120735,120736],{"class":145,"line":146},[143,120737,120738],{"class":266},"# 如果是使用apt安装的驱动\n",[143,120740,120741,120743,120745,120747,120749,120752],{"class":145,"line":35},[143,120742,25474],{"class":156},[143,120744,26974],{"class":163},[143,120746,26977],{"class":163},[143,120748,120033],{"class":280},[143,120750,120751],{"class":163}," nvidia",[143,120753,120123],{"class":280},[143,120755,120756],{"class":145,"line":46},[143,120757,120758],{"class":266},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[143,120760,120761,120763],{"class":145,"line":293},[143,120762,25474],{"class":156},[143,120764,120765],{"class":163}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[58,120767,120769],{"id":120768},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22896,120771,120773],{"id":120772},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23808,120775,120777],{"id":120776},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[133,120779,120781],{"className":119398,"code":120780,"language":119400,"meta":138,"style":138},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[140,120782,120783,120788,120799,120804,120814,120819],{"__ignoreMap":138},[143,120784,120785],{"class":145,"line":146},[143,120786,120787],{"class":266},"# 安装英伟达驱动\n",[143,120789,120790,120792,120794,120796],{"class":145,"line":35},[143,120791,25474],{"class":156},[143,120793,118192],{"class":163},[143,120795,24732],{"class":163},[143,120797,120798],{"class":163}," nvidia-driver-版本号\n",[143,120800,120801],{"class":145,"line":46},[143,120802,120803],{"class":266},"# 重启 \n",[143,120805,120806,120808,120810,120812],{"class":145,"line":293},[143,120807,25474],{"class":156},[143,120809,120511],{"class":163},[143,120811,120514],{"class":280},[143,120813,120517],{"class":163},[143,120815,120816],{"class":145,"line":306},[143,120817,120818],{"class":266},"# 检查驱动是否安装成功\n",[143,120820,120821],{"class":145,"line":319},[143,120822,120823],{"class":156},"nvidia-smi\n",[23808,120825,120827],{"id":120826},"_35212-debian","3.5.2.1.2 Debian",[133,120829,120831],{"className":119398,"code":120830,"language":119400,"meta":138,"style":138},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[140,120832,120833,120837,120851,120855,120865,120869],{"__ignoreMap":138},[143,120834,120835],{"class":145,"line":146},[143,120836,120787],{"class":266},[143,120838,120839,120841,120843,120845,120848],{"class":145,"line":35},[143,120840,25474],{"class":156},[143,120842,118192],{"class":163},[143,120844,24732],{"class":163},[143,120846,120847],{"class":163}," nvidia-driver",[143,120849,120850],{"class":163}," nvidia-settings\n",[143,120852,120853],{"class":145,"line":46},[143,120854,120803],{"class":266},[143,120856,120857,120859,120861,120863],{"class":145,"line":293},[143,120858,25474],{"class":156},[143,120860,120511],{"class":163},[143,120862,120514],{"class":280},[143,120864,120517],{"class":163},[143,120866,120867],{"class":145,"line":306},[143,120868,120818],{"class":266},[143,120870,120871],{"class":145,"line":319},[143,120872,120823],{"class":156},[22896,120874,120876],{"id":120875},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[63,120878,120879,120880,120883],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[25,120881,120882],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[63,120885,120886,120887],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24451,120888,120889],{},[25,120890,120891],{},"（也可以不禁用桌面环境，直接进行下一步。）",[133,120893,120895],{"className":119398,"code":120894,"language":119400,"meta":138,"style":138},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[140,120896,120897,120902,120912,120917,120930,120935],{"__ignoreMap":138},[143,120898,120899],{"class":145,"line":146},[143,120900,120901],{"class":266},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[143,120903,120904,120906,120909],{"class":145,"line":35},[143,120905,25474],{"class":156},[143,120907,120908],{"class":163}," telinit",[143,120910,120911],{"class":280}," 3\n",[143,120913,120914],{"class":145,"line":46},[143,120915,120916],{"class":266},"# ubuntu 使用下方命令\n",[143,120918,120919,120921,120924,120927],{"class":145,"line":293},[143,120920,25474],{"class":156},[143,120922,120923],{"class":163}," service",[143,120925,120926],{"class":163}," lightdm",[143,120928,120929],{"class":163}," stop\n",[143,120931,120932],{"class":145,"line":306},[143,120933,120934],{"class":266},"# Fedora 使用下方命令\n",[143,120936,120937,120939,120941,120944],{"class":145,"line":319},[143,120938,25474],{"class":156},[143,120940,27411],{"class":163},[143,120942,120943],{"class":163}," isolate",[143,120945,120946],{"class":163}," multi-user.target\n",[63,120948,120949],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[133,120951,120953],{"className":119398,"code":120952,"language":119400,"meta":138,"style":138},"# 编译环境+准备工作\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",[140,120954,120955,120960,120971,120976,120983,120988,121000,121005,121012,121017],{"__ignoreMap":138},[143,120956,120957],{"class":145,"line":146},[143,120958,120959],{"class":266},"# 编译环境+准备工作\n",[143,120961,120962,120964,120966,120968],{"class":145,"line":35},[143,120963,25474],{"class":156},[143,120965,118192],{"class":163},[143,120967,24732],{"class":163},[143,120969,120970],{"class":163}," build-essential\n",[143,120972,120973],{"class":145,"line":46},[143,120974,120975],{"class":266},"# 进入到.run目录中\n",[143,120977,120978,120980],{"class":145,"line":293},[143,120979,102152],{"class":280},[143,120981,120982],{"class":163}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[143,120984,120985],{"class":145,"line":306},[143,120986,120987],{"class":266},"# 给驱动文件增加可执行权限：\n",[143,120989,120990,120992,120994,120997],{"class":145,"line":319},[143,120991,25474],{"class":156},[143,120993,25477],{"class":163},[143,120995,120996],{"class":163}," a+x",[143,120998,120999],{"class":163}," NVIDIA-Linux-x86_64-550.107.02.run\n",[143,121001,121002],{"class":145,"line":332},[143,121003,121004],{"class":266},"# 然后执行安装：\n",[143,121006,121007,121009],{"class":145,"line":345},[143,121008,25474],{"class":156},[143,121010,121011],{"class":163}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[143,121013,121014],{"class":145,"line":701},[143,121015,121016],{"class":266},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[143,121018,121019,121021,121024],{"class":145,"line":707},[143,121020,25474],{"class":156},[143,121022,121023],{"class":163}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[143,121025,121026],{"class":280},"  --no-opengl-files\n",[63,121028,121029],{},"安装完毕重启即可",[133,121031,121033],{"className":119398,"code":121032,"language":119400,"meta":138,"style":138},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[140,121034,121035,121039,121045,121049],{"__ignoreMap":138},[143,121036,121037],{"class":145,"line":146},[143,121038,120803],{"class":266},[143,121040,121041,121043],{"class":145,"line":35},[143,121042,25474],{"class":156},[143,121044,27545],{"class":163},[143,121046,121047],{"class":145,"line":46},[143,121048,120818],{"class":266},[143,121050,121051],{"class":145,"line":293},[143,121052,120823],{"class":156},[58,121054,121056],{"id":121055},"_353-安装cuda","3.5.3 安装CUDA",[63,121058,121059],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[63,121061,121062],{},[29,121063],{"alt":138,"src":121064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[19,121066,121067],{},[22,121068,121069],{},"先查看显卡驱动所支持的最高CUDA版本",[133,121071,121072],{"className":119398,"code":120823,"language":119400,"meta":138,"style":138},[140,121073,121074],{"__ignoreMap":138},[143,121075,121076],{"class":145,"line":146},[143,121077,120823],{"class":156},[63,121079,121080],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[63,121082,121083],{},[29,121084],{"alt":138,"src":121085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[19,121087,121088],{"start":35},[22,121089,121090],{},"下载CUDA并安装CUDA",[63,121092,119177,121093],{},[67,121094,119180],{"href":119180,"rel":121095},[71],[63,121097,121098],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[63,121100,121101],{},[29,121102],{"alt":138,"src":121103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[63,121105,121106,121107,121112],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[67,121108,121111],{"href":121109,"rel":121110},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[71],"Vinci机器人队单片机教程","）",[63,121114,121115],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[63,121117,121118],{},[29,121119],{"alt":138,"src":121120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[63,121122,121123],{},"将最下方框框里的命令敲入终端",[133,121125,121127],{"className":119398,"code":121126,"language":119400,"meta":138,"style":138},"# 在当前文件夹下创建一个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",[140,121128,121129,121134,121143,121148,121155,121160,121168,121173,121184,121189],{"__ignoreMap":138},[143,121130,121131],{"class":145,"line":146},[143,121132,121133],{"class":266},"# 在当前文件夹下创建一个ttt的子文件夹\n",[143,121135,121136,121138,121140],{"class":145,"line":35},[143,121137,102142],{"class":156},[143,121139,30114],{"class":280},[143,121141,121142],{"class":163}," .\u002Fttt\n",[143,121144,121145],{"class":145,"line":46},[143,121146,121147],{"class":266},"# 进入ttt文件夹\n",[143,121149,121150,121152],{"class":145,"line":293},[143,121151,102152],{"class":280},[143,121153,121154],{"class":163}," ttt\n",[143,121156,121157],{"class":145,"line":306},[143,121158,121159],{"class":266},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[143,121161,121162,121165],{"class":145,"line":319},[143,121163,121164],{"class":156},"wget",[143,121166,121167],{"class":163}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[143,121169,121170],{"class":145,"line":332},[143,121171,121172],{"class":266},"# 给予权限\n",[143,121174,121175,121177,121179,121181],{"class":145,"line":345},[143,121176,25474],{"class":156},[143,121178,25477],{"class":163},[143,121180,120996],{"class":163},[143,121182,121183],{"class":163}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[143,121185,121186],{"class":145,"line":701},[143,121187,121188],{"class":266},"# 运行脚本\n",[143,121190,121191,121193],{"class":145,"line":707},[143,121192,25474],{"class":156},[143,121194,121183],{"class":163},[63,121196,121197],{},[29,121198],{"alt":138,"src":121199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[63,121201,121202],{},"正在安装中：",[63,121204,121205],{},[29,121206],{"alt":138,"src":121207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[63,121209,121210],{},"输入accept接受即可",[63,121212,121213],{},[29,121214],{"alt":138,"src":121215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[63,121217,121218],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[63,121220,121221],{},[29,121222],{"alt":138,"src":121223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[63,121225,121226],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[63,121228,121229],{},[29,121230],{"alt":138,"src":121231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[19,121233,121234],{"start":46},[22,121235,121236],{},"配置环境",[63,121238,121239],{},"根据上方确认一下路径，比如我上面红色框起来的为",[133,121241,121243],{"className":119398,"code":121242,"language":119400,"meta":138,"style":138},"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",[140,121244,121245,121261,121276],{"__ignoreMap":138},[143,121246,121247,121250,121253,121256,121259],{"class":145,"line":146},[143,121248,121249],{"class":156},"Please",[143,121251,121252],{"class":163}," make",[143,121254,121255],{"class":163}," sure",[143,121257,121258],{"class":163}," that",[143,121260,3574],{"class":149},[143,121262,121263,121265,121268,121271,121274],{"class":145,"line":35},[143,121264,53158],{"class":156},[143,121266,121267],{"class":163},"   PATH",[143,121269,121270],{"class":163}," includes",[143,121272,121273],{"class":163}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[143,121275,3574],{"class":149},[143,121277,121278,121280,121283,121285,121288,121291,121293,121296,121299,121302,121305,121307,121310,121312],{"class":145,"line":46},[143,121279,53158],{"class":156},[143,121281,121282],{"class":163},"   LD_LIBRARY_PATH",[143,121284,121270],{"class":163},[143,121286,121287],{"class":163}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[143,121289,121290],{"class":163}," or,",[143,121292,6109],{"class":163},[143,121294,121295],{"class":163}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[143,121297,121298],{"class":163}," to",[143,121300,121301],{"class":163}," \u002Fetc\u002Fld.so.conf",[143,121303,121304],{"class":163}," and",[143,121306,28128],{"class":163},[143,121308,121309],{"class":163}," ldconfig",[143,121311,65486],{"class":163},[143,121313,121314],{"class":163}," root\n",[63,121316,121317],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[133,121319,121321],{"className":119398,"code":121320,"language":119400,"meta":138,"style":138},"which nvcc\n",[140,121322,121323],{"__ignoreMap":138},[143,121324,121325,121328],{"class":145,"line":146},[143,121326,121327],{"class":280},"which",[143,121329,121330],{"class":163}," nvcc\n",[63,121332,121333],{},[29,121334],{"alt":138,"src":121335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[63,121337,121338],{},"所以我进行以下操作：",[133,121340,121342],{"className":119398,"code":121341,"language":119400,"meta":138,"style":138},"sudo vim ~\u002F.bashrc\n",[140,121343,121344],{"__ignoreMap":138},[143,121345,121346,121348,121350],{"class":145,"line":146},[143,121347,25474],{"class":156},[143,121349,119458],{"class":163},[143,121351,121352],{"class":163}," ~\u002F.bashrc\n",[63,121354,121355],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[133,121357,121359],{"className":119398,"code":121358,"language":119400,"meta":138,"style":138},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[140,121360,121361,121373],{"__ignoreMap":138},[143,121362,121363,121365,121368,121370],{"class":145,"line":146},[143,121364,25940],{"class":755},[143,121366,121367],{"class":149}," PATH",[143,121369,160],{"class":755},[143,121371,121372],{"class":149},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[143,121374,121375,121377,121380,121382],{"class":145,"line":35},[143,121376,25940],{"class":755},[143,121378,121379],{"class":149}," LD_LIBRARY_PATH",[143,121381,160],{"class":755},[143,121383,121384],{"class":149},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[63,121386,121387],{},[29,121388],{"alt":138,"src":121389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[133,121391,121393],{"className":119398,"code":121392,"language":119400,"meta":138,"style":138},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[140,121394,121395,121400,121406,121411],{"__ignoreMap":138},[143,121396,121397],{"class":145,"line":146},[143,121398,121399],{"class":266},"# 刷新当前终端的环境变量\n",[143,121401,121402,121404],{"class":145,"line":35},[143,121403,101769],{"class":280},[143,121405,121352],{"class":163},[143,121407,121408],{"class":145,"line":46},[143,121409,121410],{"class":266},"# 验证CUDA是否安装成功\n",[143,121412,121413,121416],{"class":145,"line":293},[143,121414,121415],{"class":156},"nvcc",[143,121417,121418],{"class":280}," -V\n",[63,121420,121421],{},"出现下图这种则安装成功。",[63,121423,121424],{},[29,121425],{"alt":138,"src":121426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[58,121428,121430],{"id":121429},"_354-安装cudnn","3.5.4 安装cuDNN",[19,121432,121433],{},[22,121434,121435],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[63,121437,121438,121439,121444],{},"前往 NVIDIA cuDNN 下载页面：",[67,121440,121443],{"href":121441,"rel":121442},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[71],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[63,121446,121447],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[63,121449,121450],{},[29,121451],{"alt":138,"src":121452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[63,121454,121455],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[63,121457,121458],{},[29,121459],{"alt":138,"src":121460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[63,121462,121463],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[63,121465,121466],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[63,121468,121469],{},[25,121470,121471],{},"我这里选择所有Linux X86_64最通用的办法：",[63,121473,121474],{},"下载好的：",[63,121476,121477],{},[29,121478],{"alt":138,"src":121479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[19,121481,121482],{"start":35},[22,121483,121484],{},"安装cuDNN",[63,121486,121487],{},"找到该文件所在目录，并打开终端，cd到该目录。",[63,121489,121490],{},[29,121491],{"alt":138,"src":121492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[63,121494,121495],{},"解压文件，并复制到对应位置完成安装",[133,121497,121499],{"className":119398,"code":121498,"language":119400,"meta":138,"style":138},"# 解压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",[140,121500,121501,121506,121517,121522,121529,121534,121550,121564,121569,121580,121589,121593,121609],{"__ignoreMap":138},[143,121502,121503],{"class":145,"line":146},[143,121504,121505],{"class":266},"# 解压cuDNN文件\n",[143,121507,121508,121511,121514],{"class":145,"line":35},[143,121509,121510],{"class":156},"tar",[143,121512,121513],{"class":280}," -xvf",[143,121515,121516],{"class":163}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[143,121518,121519],{"class":145,"line":46},[143,121520,121521],{"class":266},"# cd进文件夹\n",[143,121523,121524,121526],{"class":145,"line":293},[143,121525,102152],{"class":280},[143,121527,121528],{"class":163}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[143,121530,121531],{"class":145,"line":306},[143,121532,121533],{"class":266},"# 复制cuDNN文件到CUDA目录\n",[143,121535,121536,121538,121540,121543,121545,121548],{"class":145,"line":319},[143,121537,25474],{"class":156},[143,121539,28759],{"class":163},[143,121541,121542],{"class":163}," include\u002Fcudnn",[143,121544,1496],{"class":280},[143,121546,121547],{"class":163},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[143,121549,3574],{"class":149},[143,121551,121552,121554,121556,121559,121561],{"class":145,"line":332},[143,121553,25474],{"class":156},[143,121555,28759],{"class":163},[143,121557,121558],{"class":163}," lib\u002Flibcudnn",[143,121560,1496],{"class":280},[143,121562,121563],{"class":163},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[143,121565,121566],{"class":145,"line":345},[143,121567,121568],{"class":266},"# 对比一下有没有缺文件\n",[143,121570,121571,121573,121576,121578],{"class":145,"line":701},[143,121572,27659],{"class":156},[143,121574,121575],{"class":163}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[143,121577,1496],{"class":280},[143,121579,3574],{"class":149},[143,121581,121582,121584,121587],{"class":145,"line":707},[143,121583,27659],{"class":156},[143,121585,121586],{"class":163}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[143,121588,120123],{"class":280},[143,121590,121591],{"class":145,"line":727},[143,121592,121172],{"class":266},[143,121594,121595,121597,121599,121602,121604,121606],{"class":145,"line":2518},[143,121596,25474],{"class":156},[143,121598,25477],{"class":163},[143,121600,121601],{"class":163}," a+r",[143,121603,121575],{"class":163},[143,121605,1496],{"class":280},[143,121607,121608],{"class":149},"   \n",[143,121610,121611,121613,121615,121617,121619],{"class":145,"line":2524},[143,121612,25474],{"class":156},[143,121614,25477],{"class":163},[143,121616,121601],{"class":163},[143,121618,121586],{"class":163},[143,121620,120123],{"class":280},[19,121622,121623],{"start":46},[22,121624,121625],{},"检查是否安装成功",[133,121627,121629],{"className":119398,"code":121628,"language":119400,"meta":138,"style":138},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[140,121630,121631,121636],{"__ignoreMap":138},[143,121632,121633],{"class":145,"line":146},[143,121634,121635],{"class":266},"# 检查cuDNN版本命令\n",[143,121637,121638,121641,121644,121646,121648,121651,121654],{"class":145,"line":35},[143,121639,121640],{"class":156},"cat",[143,121642,121643],{"class":163}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[143,121645,26007],{"class":755},[143,121647,31134],{"class":156},[143,121649,121650],{"class":163}," CUDNN_MAJOR",[143,121652,121653],{"class":280}," -A",[143,121655,48621],{"class":280},[63,121657,121658],{},"出现下图这样的就是安装成功了",[63,121660,121661],{},[29,121662],{"alt":138,"src":121663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[19,121665,121666],{"start":293},[22,121667,121668],{},"软链接(一般不需要)",[133,121670,121672],{"className":119398,"code":121671,"language":119400,"meta":138,"style":138},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[140,121673,121674,121679],{"__ignoreMap":138},[143,121675,121676],{"class":145,"line":146},[143,121677,121678],{"class":266},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[143,121680,121681,121683],{"class":145,"line":35},[143,121682,25474],{"class":156},[143,121684,121685],{"class":163}," ldconfig\n",[63,121687,121688],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[133,121690,121695],{"className":121691,"code":121692,"language":121693,"meta":121694,"style":138},"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",[140,121696,121697,121702,121707,121712,121717,121722,121727],{"__ignoreMap":138},[143,121698,121699],{"class":145,"line":146},[143,121700,121701],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[143,121703,121704],{"class":145,"line":35},[143,121705,121706],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[143,121708,121709],{"class":145,"line":46},[143,121710,121711],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[143,121713,121714],{"class":145,"line":293},[143,121715,121716],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[143,121718,121719],{"class":145,"line":306},[143,121720,121721],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[143,121723,121724],{"class":145,"line":319},[143,121725,121726],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[143,121728,121729],{"class":145,"line":332},[143,121730,121731],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[63,121733,121734],{},"运行下方的命令",[133,121736,121738],{"className":119398,"code":121737,"language":119400,"meta":138,"style":138},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[140,121739,121740,121745,121752,121757],{"__ignoreMap":138},[143,121741,121742],{"class":145,"line":146},[143,121743,121744],{"class":266},"# cd进入CUDA路径\n",[143,121746,121747,121749],{"class":145,"line":35},[143,121748,102152],{"class":280},[143,121750,121751],{"class":163}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[143,121753,121754],{"class":145,"line":46},[143,121755,121756],{"class":266}," # 查看本路径下的需要软链接的文件名\n",[143,121758,121759],{"class":145,"line":293},[143,121760,121761],{"class":156}," ls\n",[63,121763,121764],{},[29,121765],{"alt":138,"src":121766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[63,121768,121769,121770,19308,121773,19308,121776,121779],{},"如上图，我需要将",[140,121771,121772],{},"libcudnn_xxx_xxxxx.so.8.9.7",[140,121774,121775],{},"libcudnn_xxx_xxxxx.so.8",[140,121777,121778],{},"libcudnn_xxx_xxxxx.so","软链接",[133,121781,121783],{"className":119398,"code":121782,"language":119400,"meta":138,"style":138},"# 创建符号链接。对于每个 .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",[140,121784,121785,121790,121806,121820,121834,121848,121862,121876,121890,121895,121901,121906],{"__ignoreMap":138},[143,121786,121787],{"class":145,"line":146},[143,121788,121789],{"class":266},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[143,121791,121792,121794,121797,121800,121803],{"class":145,"line":35},[143,121793,25474],{"class":156},[143,121795,121796],{"class":163}," ln",[143,121798,121799],{"class":280}," -sf",[143,121801,121802],{"class":163}," libcudnn_cnn_train.so.8.9.7",[143,121804,121805],{"class":163}," libcudnn_cnn_train.so.8\n",[143,121807,121808,121810,121812,121814,121817],{"class":145,"line":46},[143,121809,25474],{"class":156},[143,121811,121796],{"class":163},[143,121813,121799],{"class":280},[143,121815,121816],{"class":163}," libcudnn_adv_infer.so.8.9.7",[143,121818,121819],{"class":163}," libcudnn_adv_infer.so.8\n",[143,121821,121822,121824,121826,121828,121831],{"class":145,"line":293},[143,121823,25474],{"class":156},[143,121825,121796],{"class":163},[143,121827,121799],{"class":280},[143,121829,121830],{"class":163}," libcudnn_adv_train.so.8.9.7",[143,121832,121833],{"class":163}," libcudnn_adv_train.so.8\n",[143,121835,121836,121838,121840,121842,121845],{"class":145,"line":306},[143,121837,25474],{"class":156},[143,121839,121796],{"class":163},[143,121841,121799],{"class":280},[143,121843,121844],{"class":163}," libcudnn_cnn_infer.so.8.9.7",[143,121846,121847],{"class":163}," libcudnn_cnn_infer.so.8\n",[143,121849,121850,121852,121854,121856,121859],{"class":145,"line":319},[143,121851,25474],{"class":156},[143,121853,121796],{"class":163},[143,121855,121799],{"class":280},[143,121857,121858],{"class":163}," libcudnn.so.8.9.7",[143,121860,121861],{"class":163}," libcudnn.so.8\n",[143,121863,121864,121866,121868,121870,121873],{"class":145,"line":332},[143,121865,25474],{"class":156},[143,121867,121796],{"class":163},[143,121869,121799],{"class":280},[143,121871,121872],{"class":163}," libcudnn_ops_infer.so.8.9.7",[143,121874,121875],{"class":163}," libcudnn_ops_infer.so.8\n",[143,121877,121878,121880,121882,121884,121887],{"class":145,"line":345},[143,121879,25474],{"class":156},[143,121881,121796],{"class":163},[143,121883,121799],{"class":280},[143,121885,121886],{"class":163}," libcudnn_ops_train.so.8.9.7",[143,121888,121889],{"class":163}," libcudnn_ops_train.so.8\n",[143,121891,121892],{"class":145,"line":701},[143,121893,121894],{"class":266},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[143,121896,121897,121899],{"class":145,"line":707},[143,121898,25474],{"class":156},[143,121900,121685],{"class":163},[143,121902,121903],{"class":145,"line":727},[143,121904,121905],{"class":266},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[143,121907,121908,121910,121913,121916,121918,121921],{"class":145,"line":2518},[143,121909,27659],{"class":156},[143,121911,121912],{"class":280}," -l",[143,121914,121915],{"class":163}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[143,121917,1496],{"class":280},[143,121919,121920],{"class":163},".so",[143,121922,120123],{"class":280},[58,121924,121926],{"id":121925},"_355-常见问题","3.5.5 常见问题",[19,121928,121929],{},[22,121930,121931],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[133,121933,121935],{"className":119398,"code":121934,"language":119400,"meta":138,"style":138},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[140,121936,121937],{"__ignoreMap":138},[143,121938,121939,121941,121943],{"class":145,"line":146},[143,121940,25474],{"class":156},[143,121942,119458],{"class":163},[143,121944,121945],{"class":163}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[63,121947,121948],{},"blacklist-nouveau.conf文件内容如下：",[133,121950,121952],{"className":119398,"code":121951,"language":119400,"meta":138,"style":138},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[140,121953,121954,121962,121969,121981,121991],{"__ignoreMap":138},[143,121955,121956,121959],{"class":145,"line":146},[143,121957,121958],{"class":156},"blacklist",[143,121960,121961],{"class":163}," nouveau\n",[143,121963,121964,121966],{"class":145,"line":35},[143,121965,121958],{"class":156},[143,121967,121968],{"class":163}," lbm-nouveau\n",[143,121970,121971,121973,121976,121979],{"class":145,"line":46},[143,121972,116805],{"class":156},[143,121974,121975],{"class":163}," nouveau",[143,121977,121978],{"class":163}," modeset=",[143,121980,3985],{"class":280},[143,121982,121983,121986,121988],{"class":145,"line":293},[143,121984,121985],{"class":280},"alias",[143,121987,121975],{"class":163},[143,121989,121990],{"class":163}," off\n",[143,121992,121993,121995,121998],{"class":145,"line":306},[143,121994,121985],{"class":280},[143,121996,121997],{"class":163}," lbm-nouveau",[143,121999,121990],{"class":163},[63,122001,122002],{},"接着运行下方命令",[133,122004,122006],{"className":119398,"code":122005,"language":119400,"meta":138,"style":138},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[140,122007,122008,122018,122023],{"__ignoreMap":138},[143,122009,122010,122012,122015],{"class":145,"line":146},[143,122011,25474],{"class":156},[143,122013,122014],{"class":163}," update-initramfs",[143,122016,122017],{"class":280}," -u\n",[143,122019,122020],{"class":145,"line":35},[143,122021,122022],{"class":156},"或者\n",[143,122024,122025,122027,122030],{"class":145,"line":46},[143,122026,25474],{"class":156},[143,122028,122029],{"class":163}," dracut",[143,122031,122032],{"class":280}," --force\n",[63,122034,122035],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[133,122037,122039],{"className":119398,"code":122038,"language":119400,"meta":138,"style":138},"lsmod | grep nouveau\n",[140,122040,122041],{"__ignoreMap":138},[143,122042,122043,122046,122048,122050],{"class":145,"line":146},[143,122044,122045],{"class":156},"lsmod",[143,122047,26007],{"class":755},[143,122049,31134],{"class":156},[143,122051,121961],{"class":163},[19,122053,122054],{"start":35},[22,122055,122056],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[133,122058,122060],{"className":119398,"code":122059,"language":119400,"meta":138,"style":138},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[140,122061,122062],{"__ignoreMap":138},[143,122063,122064,122066,122068],{"class":145,"line":146},[143,122065,25474],{"class":156},[143,122067,119458],{"class":163},[143,122069,122070],{"class":163}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[63,122072,122073],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[133,122075,122077],{"className":119398,"code":122076,"language":119400,"meta":138,"style":138},"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",[140,122078,122079,122087,122095,122103,122110,122118,122128,122136],{"__ignoreMap":138},[143,122080,122081,122084],{"class":145,"line":146},[143,122082,122083],{"class":156},"Section",[143,122085,122086],{"class":163}," \"OutputClass\"\n",[143,122088,122089,122092],{"class":145,"line":35},[143,122090,122091],{"class":156},"   Identifier",[143,122093,122094],{"class":163}," \"nvidia\"\n",[143,122096,122097,122100],{"class":145,"line":46},[143,122098,122099],{"class":156},"   MatchDriver",[143,122101,122102],{"class":163}," \"nvidia-drm\"\n",[143,122104,122105,122108],{"class":145,"line":293},[143,122106,122107],{"class":156},"   Driver",[143,122109,122094],{"class":163},[143,122111,122112,122115],{"class":145,"line":306},[143,122113,122114],{"class":156},"   Option",[143,122116,122117],{"class":163}," \"AllowEmptyInitialConfiguration\"\n",[143,122119,122120,122122,122125],{"class":145,"line":319},[143,122121,122114],{"class":156},[143,122123,122124],{"class":163}," \"PrimaryGPU\"",[143,122126,122127],{"class":163}," \"yes\"\n",[143,122129,122130,122133],{"class":145,"line":332},[143,122131,122132],{"class":156},"   ModulePath",[143,122134,122135],{"class":163}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[143,122137,122138],{"class":145,"line":345},[143,122139,122140],{"class":156},"EndSection\n",[19,122142,122143],{"start":46},[22,122144,122145],{},"安装N卡驱动提示错误",[133,122147,122149],{"className":121691,"code":122148,"language":121693,"meta":121694,"style":138},"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",[140,122150,122151],{"__ignoreMap":138},[143,122152,122153],{"class":145,"line":146},[143,122154,122148],{},[19,122156,122157],{},[22,122158,122159],{},"检查当前运行的内核版本：",[63,122161,122162],{},"运行以下命令以查看你当前正在使用的内核版本：",[133,122164,122166],{"className":118171,"code":122165,"language":118173,"meta":138,"style":138},"uname -r\n",[140,122167,122168],{"__ignoreMap":138},[143,122169,122170,122172],{"class":145,"line":146},[143,122171,71085],{"class":156},[143,122173,122174],{"class":280}," -r\n",[19,122176,122177],{"start":35},[22,122178,122179],{},"安装内核开发文件：",[63,122181,122182,122183,122186],{},"确保你已经安装了与当前内核版本相匹配的 ",[140,122184,122185],{},"kernel-devel"," 包。运行以下命令来安装：",[133,122188,122190],{"className":118171,"code":122189,"language":118173,"meta":138,"style":138},"sudo dnf install kernel-devel-$(uname -r)\n",[140,122191,122192],{"__ignoreMap":138},[143,122193,122194,122196,122198,122200,122203,122205,122207,122209],{"class":145,"line":146},[143,122195,25474],{"class":156},[143,122197,27213],{"class":163},[143,122199,24732],{"class":163},[143,122201,122202],{"class":163}," kernel-devel-",[143,122204,25997],{"class":149},[143,122206,71085],{"class":156},[143,122208,120514],{"class":280},[143,122210,1055],{"class":149},[63,122212,122213],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[19,122215,122216],{"start":46},[22,122217,122218],{},"安装内核源代码（如果需要）：",[63,122220,122221],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[133,122223,122225],{"className":118171,"code":122224,"language":118173,"meta":138,"style":138},"sudo dnf install kernel-headers kernel-source\n",[140,122226,122227],{"__ignoreMap":138},[143,122228,122229,122231,122233,122235,122238],{"class":145,"line":146},[143,122230,25474],{"class":156},[143,122232,27213],{"class":163},[143,122234,24732],{"class":163},[143,122236,122237],{"class":163}," kernel-headers",[143,122239,122240],{"class":163}," kernel-source\n",[19,122242,122243],{"start":293},[22,122244,122245],{},"检查安装：",[63,122247,122248,122249,122252],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[140,122250,122251],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[133,122254,122256],{"className":118171,"code":122255,"language":118173,"meta":138,"style":138},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[140,122257,122258],{"__ignoreMap":138},[143,122259,122260,122262],{"class":145,"line":146},[143,122261,27659],{"class":156},[143,122263,122264],{"class":163}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[63,122266,122267,122268,122271],{},"如果仍然遇到问题，可以通过 ",[140,122269,122270],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[954,122273,122274],{},"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":138,"searchDepth":35,"depth":35,"links":122276},[122277,122281,122291,122295,122296],{"id":119374,"depth":35,"text":119375,"children":122278},[122279,122280],{"id":119384,"depth":46,"text":119385},{"id":119394,"depth":46,"text":119395},{"id":119594,"depth":35,"text":119595,"children":122282},[122283,122284,122285,122286,122287,122288,122289,122290],{"id":119598,"depth":46,"text":119599},{"id":119668,"depth":46,"text":119669},{"id":119757,"depth":46,"text":119758},{"id":120002,"depth":46,"text":120003},{"id":120072,"depth":46,"text":120073},{"id":120139,"depth":46,"text":120140},{"id":120174,"depth":46,"text":120175},{"id":120229,"depth":46,"text":120230},{"id":120280,"depth":35,"text":120281,"children":122292},[122293,122294],{"id":120284,"depth":46,"text":120285},{"id":120364,"depth":46,"text":120365},{"id":120550,"depth":35,"text":120551},{"id":120723,"depth":35,"text":120724,"children":122297},[122298,122299,122300,122301,122302],{"id":120727,"depth":46,"text":120728},{"id":120768,"depth":46,"text":120769},{"id":121055,"depth":46,"text":121056},{"id":121429,"depth":46,"text":121430},{"id":121925,"depth":46,"text":121926},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119366,"description":973},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122309,"title":122310,"body":122311,"description":973,"extension":974,"meta":122651,"navigation":976,"path":122652,"seo":122653,"stem":122654,"__hash__":122655},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122312,"toc":122649},[122313,122316,122321,122324,122570,122575,122578,122614,122617,122646],[10,122314,122310],{"id":122315},"_4-命令教程长期积累",[19,122317,122318],{},[22,122319,122320],{},"大多数命令",[63,122322,122323],{},"常用 Linux 命令速查：",[133,122325,122327],{"className":118171,"code":122326,"language":118173,"meta":138,"style":138},"# 文件与目录\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",[140,122328,122329,122334,122341,122348,122356,122363,122370,122378,122386,122393,122400,122408,122412,122417,122424,122432,122439,122443,122448,122455,122463,122471,122479,122487,122491,122496,122504,122511,122518,122526,122534,122538,122543,122552,122561],{"__ignoreMap":138},[143,122330,122331],{"class":145,"line":146},[143,122332,122333],{"class":266},"# 文件与目录\n",[143,122335,122336,122338],{"class":145,"line":35},[143,122337,27659],{"class":156},[143,122339,122340],{"class":266},"        # 列出目录内容\n",[143,122342,122343,122345],{"class":145,"line":46},[143,122344,102152],{"class":280},[143,122346,122347],{"class":266},"        # 切换目录\n",[143,122349,122350,122353],{"class":145,"line":293},[143,122351,122352],{"class":280},"pwd",[143,122354,122355],{"class":266},"       # 显示当前路径\n",[143,122357,122358,122360],{"class":145,"line":306},[143,122359,102142],{"class":156},[143,122361,122362],{"class":266},"     # 创建目录\n",[143,122364,122365,122367],{"class":145,"line":319},[143,122366,26220],{"class":156},[143,122368,122369],{"class":266},"        # 删除文件或目录\n",[143,122371,122372,122375],{"class":145,"line":332},[143,122373,122374],{"class":156},"cp",[143,122376,122377],{"class":266},"        # 复制文件或目录\n",[143,122379,122380,122383],{"class":145,"line":345},[143,122381,122382],{"class":156},"mv",[143,122384,122385],{"class":266},"        # 移动\u002F重命名文件或目录\n",[143,122387,122388,122390],{"class":145,"line":701},[143,122389,102159],{"class":156},[143,122391,122392],{"class":266},"     # 创建空文件\n",[143,122394,122395,122397],{"class":145,"line":707},[143,122396,121640],{"class":156},[143,122398,122399],{"class":266},"       # 查看文件内容\n",[143,122401,122402,122405],{"class":145,"line":727},[143,122403,122404],{"class":156},"head\u002Ftail",[143,122406,122407],{"class":266}," # 查看文件头部\u002F尾部\n",[143,122409,122410],{"class":145,"line":2518},[143,122411,3300],{"emptyLinePlaceholder":976},[143,122413,122414],{"class":145,"line":2524},[143,122415,122416],{"class":266},"# 权限管理\n",[143,122418,122419,122421],{"class":145,"line":2529},[143,122420,25509],{"class":156},[143,122422,122423],{"class":266},"     # 修改文件权限\n",[143,122425,122426,122429],{"class":145,"line":2543},[143,122427,122428],{"class":156},"chown",[143,122430,122431],{"class":266},"     # 修改文件所有者\n",[143,122433,122434,122436],{"class":145,"line":2548},[143,122435,25474],{"class":156},[143,122437,122438],{"class":266},"      # 以管理员身份执行\n",[143,122440,122441],{"class":145,"line":2554},[143,122442,3300],{"emptyLinePlaceholder":976},[143,122444,122445],{"class":145,"line":2575},[143,122446,122447],{"class":266},"# 系统信息\n",[143,122449,122450,122452],{"class":145,"line":2580},[143,122451,71085],{"class":156},[143,122453,122454],{"class":266},"     # 系统信息\n",[143,122456,122457,122460],{"class":145,"line":2594},[143,122458,122459],{"class":156},"df",[143,122461,122462],{"class":266},"        # 磁盘使用情况\n",[143,122464,122465,122468],{"class":145,"line":2599},[143,122466,122467],{"class":156},"free",[143,122469,122470],{"class":266},"      # 内存使用情况\n",[143,122472,122473,122476],{"class":145,"line":2628},[143,122474,122475],{"class":156},"top\u002Fhtop",[143,122477,122478],{"class":266},"  # 进程监控\n",[143,122480,122481,122484],{"class":145,"line":2633},[143,122482,122483],{"class":156},"ps",[143,122485,122486],{"class":266},"        # 查看进程\n",[143,122488,122489],{"class":145,"line":2650},[143,122490,3300],{"emptyLinePlaceholder":976},[143,122492,122493],{"class":145,"line":2655},[143,122494,122495],{"class":266},"# 网络\n",[143,122497,122498,122501],{"class":145,"line":2660},[143,122499,122500],{"class":156},"ping",[143,122502,122503],{"class":266},"      # 测试网络连通性\n",[143,122505,122506,122508],{"class":145,"line":2665},[143,122507,27747],{"class":156},[143,122509,122510],{"class":266},"      # 发送 HTTP 请求\n",[143,122512,122513,122515],{"class":145,"line":2679},[143,122514,121164],{"class":156},[143,122516,122517],{"class":266},"      # 下载文件\n",[143,122519,122520,122523],{"class":145,"line":2684},[143,122521,122522],{"class":156},"ssh",[143,122524,122525],{"class":266},"       # 远程登录\n",[143,122527,122528,122531],{"class":145,"line":3477},[143,122529,122530],{"class":156},"scp",[143,122532,122533],{"class":266},"       # 远程文件传输\n",[143,122535,122536],{"class":145,"line":3491},[143,122537,3300],{"emptyLinePlaceholder":976},[143,122539,122540],{"class":145,"line":3499},[143,122541,122542],{"class":266},"# 包管理（Debian\u002FUbuntu）\n",[143,122544,122545,122547,122549],{"class":145,"line":3504},[143,122546,118243],{"class":156},[143,122548,118222],{"class":163},[143,122550,122551],{"class":266},"   # 更新软件源\n",[143,122553,122554,122556,122558],{"class":145,"line":3510},[143,122555,118243],{"class":156},[143,122557,24732],{"class":163},[143,122559,122560],{"class":266},"  # 安装软件包\n",[143,122562,122563,122565,122567],{"class":145,"line":3516},[143,122564,118243],{"class":156},[143,122566,26977],{"class":163},[143,122568,122569],{"class":266},"   # 卸载软件包\n",[19,122571,122572],{"start":35},[22,122573,122574],{},"KDE Dolphin 以root打开",[63,122576,122577],{},"kde5",[133,122579,122581],{"className":118171,"code":122580,"language":118173,"meta":138,"style":138},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[140,122582,122583],{"__ignoreMap":138},[143,122584,122585,122588,122591,122594,122596,122598,122601,122604,122606,122609,122611],{"class":145,"line":146},[143,122586,122587],{"class":156},"pkexec",[143,122589,122590],{"class":163}," env",[143,122592,122593],{"class":163}," DISPLAY=",[143,122595,29041],{"class":149},[143,122597,29099],{"class":163},[143,122599,122600],{"class":149},"$XAUTHORITY ",[143,122602,122603],{"class":163},"KDE_SESSION_VERSION=",[143,122605,1360],{"class":280},[143,122607,122608],{"class":163}," KDE_FULL_SESSION=",[143,122610,2266],{"class":280},[143,122612,122613],{"class":163}," dolphin\n",[63,122615,122616],{},"kde6",[133,122618,122620],{"className":118171,"code":122619,"language":118173,"meta":138,"style":138},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[140,122621,122622],{"__ignoreMap":138},[143,122623,122624,122626,122628,122630,122632,122634,122636,122638,122640,122642,122644],{"class":145,"line":146},[143,122625,122587],{"class":156},[143,122627,122590],{"class":163},[143,122629,122593],{"class":163},[143,122631,29041],{"class":149},[143,122633,29099],{"class":163},[143,122635,122600],{"class":149},[143,122637,122603],{"class":163},[143,122639,1385],{"class":280},[143,122641,122608],{"class":163},[143,122643,2266],{"class":280},[143,122645,122613],{"class":163},[954,122647,122648],{},"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":138,"searchDepth":35,"depth":35,"links":122650},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122310,"description":973},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122657,"title":122658,"body":122659,"description":973,"extension":974,"meta":122673,"navigation":976,"path":122674,"seo":122675,"stem":122676,"__hash__":122677},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122660,"toc":122671},[122661,122664],[10,122662,122658],{"id":122663},"_5-各种环境配置",[63,122665,122666],{},[67,122667,122670],{"href":122668,"rel":122669},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[71],"电控组环境搭建大全",{"title":138,"searchDepth":35,"depth":35,"links":122672},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122658,"description":973},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122679,"title":122680,"body":122681,"description":973,"extension":974,"meta":123029,"navigation":976,"path":123030,"seo":123031,"stem":123032,"__hash__":123033},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122682,"toc":123021},[122683,122686,122690,122694,122698,122703,122710,122714,123007,123011,123018],[10,122684,122680],{"id":122685},"_6-拓展功能",[14,122687,122689],{"id":122688},"_61-wine","6.1 Wine",[14,122691,122693],{"id":122692},"_62-android","6.2 Android",[58,122695,122697],{"id":122696},"_621-i卡a卡","6.2.1 I卡、A卡",[19,122699,122700],{},[22,122701,122702],{},"Wayland-Waydroid(体验超级好)",[63,122704,122705,122706],{},"Waydroid 官网与安装指南：",[67,122707,122708],{"href":122708,"rel":122709},"https:\u002F\u002Fwaydro.id\u002F",[71],[58,122711,122713],{"id":122712},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[19,122715,122716],{},[22,122717,122718,122719,122721,122722,122726,122728,122731,122736,122933],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54602,122720],{},"BlissOS 官网下载：",[67,122723,122724],{"href":122724,"rel":122725},"https:\u002F\u002Fblissos.org\u002F",[71],[54602,122727],{},[29,122729],{"alt":138,"src":122730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[19,122732,122733],{"start":46},[22,122734,122735],{},"比较推荐的配置",[133,122737,122739],{"className":118171,"code":122738,"language":118173,"meta":138,"style":138},"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",[140,122740,122741,122748,122758,122768,122778,122790,122800,122807,122817,122826,122835,122845,122855,122864,122874,122884,122896,122906,122915,122925],{"__ignoreMap":138},[143,122742,122743,122746],{"class":145,"line":146},[143,122744,122745],{"class":156},"qemu-system-x86_64",[143,122747,25576],{"class":280},[143,122749,122750,122753,122756],{"class":145,"line":35},[143,122751,122752],{"class":280},"        -M",[143,122754,122755],{"class":163}," q35,vmport=off",[143,122757,25576],{"class":280},[143,122759,122760,122763,122766],{"class":145,"line":46},[143,122761,122762],{"class":280},"        -accel",[143,122764,122765],{"class":163}," kvm",[143,122767,25576],{"class":280},[143,122769,122770,122773,122776],{"class":145,"line":293},[143,122771,122772],{"class":280},"        -cpu",[143,122774,122775],{"class":163}," qemu64,+sse3,+sse4.2",[143,122777,25576],{"class":280},[143,122779,122780,122783,122786,122788],{"class":145,"line":306},[143,122781,122782],{"class":280},"        -smp",[143,122784,122785],{"class":163}," 8,cores=",[143,122787,1334],{"class":280},[143,122789,25576],{"class":280},[143,122791,122792,122795,122798],{"class":145,"line":319},[143,122793,122794],{"class":280},"        -m",[143,122796,122797],{"class":163}," 6G",[143,122799,25576],{"class":280},[143,122801,122802,122805],{"class":145,"line":332},[143,122803,122804],{"class":280},"        -usb",[143,122806,25576],{"class":280},[143,122808,122809,122812,122815],{"class":145,"line":345},[143,122810,122811],{"class":280},"        -device",[143,122813,122814],{"class":163}," virtio-tablet",[143,122816,25576],{"class":280},[143,122818,122819,122821,122824],{"class":145,"line":701},[143,122820,122811],{"class":280},[143,122822,122823],{"class":163}," virtio-keyboard",[143,122825,25576],{"class":280},[143,122827,122828,122830,122833],{"class":145,"line":707},[143,122829,122811],{"class":280},[143,122831,122832],{"class":163}," usb-tablet",[143,122834,25576],{"class":280},[143,122836,122837,122840,122843],{"class":145,"line":727},[143,122838,122839],{"class":280},"        -bios",[143,122841,122842],{"class":163}," OVMF-pure-efi64.fd",[143,122844,25576],{"class":280},[143,122846,122847,122850,122853],{"class":145,"line":2518},[143,122848,122849],{"class":280},"        -net",[143,122851,122852],{"class":163}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[143,122854,25576],{"class":280},[143,122856,122857,122859,122862],{"class":145,"line":2524},[143,122858,122849],{"class":280},[143,122860,122861],{"class":163}," nic,model=virtio",[143,122863,25576],{"class":280},[143,122865,122866,122869,122872],{"class":145,"line":2529},[143,122867,122868],{"class":280},"        -audio",[143,122870,122871],{"class":163}," sdl,model=hda",[143,122873,25576],{"class":280},[143,122875,122876,122879,122882],{"class":145,"line":2543},[143,122877,122878],{"class":280},"        -display",[143,122880,122881],{"class":163}," sdl,gl=on,show-cursor=on",[143,122883,25576],{"class":280},[143,122885,122886,122888,122891,122894],{"class":145,"line":2548},[143,122887,122811],{"class":280},[143,122889,122890],{"class":163}," virtio-vga-gl,xres=1920,yres=",[143,122892,122893],{"class":280},"1080",[143,122895,25576],{"class":280},[143,122897,122898,122901,122904],{"class":145,"line":2554},[143,122899,122900],{"class":280},"        -drive",[143,122902,122903],{"class":163}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[143,122905,25576],{"class":280},[143,122907,122908,122910,122913],{"class":145,"line":2575},[143,122909,122900],{"class":280},[143,122911,122912],{"class":163}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[143,122914,25576],{"class":280},[143,122916,122917,122920,122923],{"class":145,"line":2580},[143,122918,122919],{"class":280},"        -monitor",[143,122921,122922],{"class":163}," stdio",[143,122924,25576],{"class":280},[143,122926,122927,122930],{"class":145,"line":2594},[143,122928,122929],{"class":280},"        -serial",[143,122931,122932],{"class":163}," none\n",[19,122934,122935],{"start":306},[22,122936,122937,122938],{},"常用操作：",[19,122939,122940,122943,122999],{},[22,122941,122942],{},"全屏：Ctrl+Alt+F",[22,122944,122945,122946,122951],{},"adb调试",[19,122947,122948],{},[22,122949,122950],{},"使Linux与Android用ADB连接。",[133,122952,122954],{"className":118171,"code":122953,"language":118173,"meta":138,"style":138},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[140,122955,122956,122961,122972,122977,122989,122994],{"__ignoreMap":138},[143,122957,122958],{"class":145,"line":146},[143,122959,122960],{"class":266},"# 连接安卓\n",[143,122962,122963,122966,122969],{"class":145,"line":35},[143,122964,122965],{"class":156},"adb",[143,122967,122968],{"class":163}," connect",[143,122970,122971],{"class":280}," 127.0.0.1\n",[143,122973,122974],{"class":145,"line":46},[143,122975,122976],{"class":266},"# 打开shell\n",[143,122978,122979,122981,122983,122986],{"class":145,"line":293},[143,122980,122965],{"class":156},[143,122982,27781],{"class":280},[143,122984,122985],{"class":163}," 127.0.0.1:5555",[143,122987,122988],{"class":163}," shell\n",[143,122990,122991],{"class":145,"line":306},[143,122992,122993],{"class":266},"# 使用root权限\n",[143,122995,122996],{"class":145,"line":319},[143,122997,122998],{"class":156},"su\n",[22,123000,123001,123002],{},"中文输入法",[19,123003,123004],{},[22,123005,123006],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123008,123010],{"id":123009},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[63,123012,123013,123014],{},"rEFInd 官网与文档：",[67,123015,123016],{"href":123016,"rel":123017},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[71],[954,123019,123020],{},"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":138,"searchDepth":35,"depth":35,"links":123022},[123023,123024,123028],{"id":122688,"depth":35,"text":122689},{"id":122692,"depth":35,"text":122693,"children":123025},[123026,123027],{"id":122696,"depth":46,"text":122697},{"id":122712,"depth":46,"text":122713},{"id":123009,"depth":35,"text":123010},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122680,"description":973},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123035,"title":123036,"body":123037,"description":973,"extension":974,"meta":126336,"navigation":976,"path":126337,"seo":126338,"stem":126339,"__hash__":126340},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123038,"toc":126310},[123039,123042,123046,123049,123056,123306,123309,123381,123384,123388,123392,123397,123400,123403,123406,123411,123414,123417,123420,123425,123428,123433,123436,123439,123444,123447,123452,123455,123459,123463,123466,123471,123474,123488,123491,123494,123503,123506,123515,123518,123521,123530,123533,123542,123545,123548,123557,123560,123563,123578,123581,123584,123593,123598,123601,123604,123613,123616,123625,123628,123637,123640,123649,123654,123657,123665,123670,123673,123682,123685,123693,123698,123701,123710,123713,123716,123720,123723,123728,123731,123736,123750,123755,123760,123771,123776,123782,123787,123802,123807,123810,123815,123820,123825,123833,123838,123845,123850,123861,123866,123869,123873,123876,123879,123884,123887,123906,123911,123914,123923,123928,123931,123953,123956,123986,123989,123994,123997,124011,124016,124035,124038,124041,124046,124058,124063,124068,124071,124076,124079,124094,124097,124102,124107,124111,124116,124156,124159,124163,124169,124175,124180,124183,124190,124195,124202,124205,124208,124215,124229,124232,124292,124295,124309,124321,124324,124327,124330,124394,124397,124400,124403,124423,124426,124431,124438,124442,124445,124449,124454,124459,124463,124466,124469,124511,124516,124519,124541,124556,124558,124563,124575,124635,124637,124639,124693,124695,124697,124703,124708,124711,124716,124720,124723,124785,124790,124793,124795,124799,124811,124893,124895,124897,124951,124957,124959,124963,124968,124970,124975,124979,124999,125034,125038,125041,125044,125047,125054,125057,125069,125072,125087,125090,125109,125157,125160,125177,125180,125194,125199,125202,125211,125226,125238,125276,125281,125290,125295,125300,125326,125335,125339,125343,125348,125351,125355,125359,125364,125367,125372,125375,125380,125383,125388,125391,125395,125400,125403,125408,125411,125415,125420,125423,125428,125431,125436,125439,125443,125448,125451,125456,125459,125464,125467,125471,125476,125479,125484,125487,125492,125495,125500,125503,125508,125511,125516,125519,125523,125528,125531,125536,125543,125547,125552,125555,125560,125563,125567,125572,125575,125578,125581,125584,125587,125591,125594,125604,125609,125614,125636,125641,125646,125653,125657,125662,125665,125668,125673,125676,125679,125682,125685,125688,125691,125694,125697,125700,125703,125706,125709,125714,125719,125724,125729,125734,125739,125744,125747,125751,125754,125758,125763,125768,125773,125778,125782,125788,125796,125801,125804,125809,125824,125827,125832,125866,125881,125884,125939,125965,125977,125980,125989,125992,126007,126012,126015,126021,126026,126029,126034,126037,126042,126047,126054,126057,126072,126075,126110,126115,126123,126161,126164,126167,126172,126175,126180,126191,126225,126230,126233,126242,126247,126253,126256,126261,126270,126275,126278,126281,126286,126294,126297,126302,126307],[10,123040,123036],{"id":123041},"_7-其他操作",[14,123043,123045],{"id":123044},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[63,123047,123048],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[63,123050,123051,123052,123055],{},"进入工控机的硬盘目录，进入",[140,123053,123054],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[133,123057,123061],{"className":123058,"code":123059,"language":123060,"meta":138,"style":138},"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",[140,123062,123063,123071,123082,123089,123096,123108,123115,123127,123138,123149,123156,123163,123170,123182,123194,123201,123213,123225,123232,123244,123256,123268,123279,123286,123297],{"__ignoreMap":138},[143,123064,123065,123068],{"class":145,"line":146},[143,123066,123067],{"class":153},"network",[143,123069,123070],{"class":149},": \n",[143,123072,123073,123076,123078,123080],{"class":145,"line":35},[143,123074,123075],{"class":153},"  version",[143,123077,284],{"class":149},[143,123079,1122],{"class":280},[143,123081,3574],{"class":149},[143,123083,123084,123087],{"class":145,"line":46},[143,123085,123086],{"class":153},"  wifis",[143,123088,123070],{"class":149},[143,123090,123091,123094],{"class":145,"line":293},[143,123092,123093],{"class":153},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[143,123095,123070],{"class":149},[143,123097,123098,123101,123103,123106],{"class":145,"line":306},[143,123099,123100],{"class":153},"      renderer",[143,123102,284],{"class":149},[143,123104,123105],{"class":163},"NetworkManager",[143,123107,3574],{"class":149},[143,123109,123110,123113],{"class":145,"line":319},[143,123111,123112],{"class":153},"      match",[143,123114,123070],{"class":149},[143,123116,123117,123120,123122,123125],{"class":145,"line":332},[143,123118,123119],{"class":153},"        name",[143,123121,284],{"class":149},[143,123123,123124],{"class":163},"\"wlan0\"",[143,123126,3574],{"class":149},[143,123128,123129,123132,123134,123136],{"class":145,"line":345},[143,123130,123131],{"class":153},"      dhcp4",[143,123133,284],{"class":149},[143,123135,2266],{"class":280},[143,123137,3574],{"class":149},[143,123139,123140,123143,123145,123147],{"class":145,"line":701},[143,123141,123142],{"class":153},"      dhcp6",[143,123144,284],{"class":149},[143,123146,2266],{"class":280},[143,123148,3574],{"class":149},[143,123150,123151,123154],{"class":145,"line":707},[143,123152,123153],{"class":153},"      access-points",[143,123155,123070],{"class":149},[143,123157,123158,123161],{"class":145,"line":727},[143,123159,123160],{"class":163},"        \"EMIS_Vinci_Robocon_5G\"",[143,123162,123070],{"class":149},[143,123164,123165,123168],{"class":145,"line":2518},[143,123166,123167],{"class":153},"          auth",[143,123169,123070],{"class":149},[143,123171,123172,123175,123177,123180],{"class":145,"line":2524},[143,123173,123174],{"class":153},"            key-management",[143,123176,284],{"class":149},[143,123178,123179],{"class":163},"\"psk\"",[143,123181,3574],{"class":149},[143,123183,123184,123187,123189,123192],{"class":145,"line":2529},[143,123185,123186],{"class":153},"            password",[143,123188,284],{"class":149},[143,123190,123191],{"class":163},"\"vinci666\"",[143,123193,3574],{"class":149},[143,123195,123196,123199],{"class":145,"line":2543},[143,123197,123198],{"class":153},"          networkmanager",[143,123200,123070],{"class":149},[143,123202,123203,123206,123208,123211],{"class":145,"line":2548},[143,123204,123205],{"class":153},"            uuid",[143,123207,284],{"class":149},[143,123209,123210],{"class":163},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[143,123212,3574],{"class":149},[143,123214,123215,123218,123220,123223],{"class":145,"line":2554},[143,123216,123217],{"class":153},"            name",[143,123219,284],{"class":149},[143,123221,123222],{"class":163},"\"EMIS_Vinci_Robocon_5G\"",[143,123224,3574],{"class":149},[143,123226,123227,123230],{"class":145,"line":2575},[143,123228,123229],{"class":153},"            passthrough",[143,123231,123070],{"class":149},[143,123233,123234,123237,123239,123242],{"class":145,"line":2580},[143,123235,123236],{"class":153},"              wifi-security.auth-alg",[143,123238,284],{"class":149},[143,123240,123241],{"class":163},"\"open\"",[143,123243,3574],{"class":149},[143,123245,123246,123249,123251,123254],{"class":145,"line":2594},[143,123247,123248],{"class":153},"              ipv6.addr-gen-mode",[143,123250,284],{"class":149},[143,123252,123253],{"class":163},"\"default\"",[143,123255,3574],{"class":149},[143,123257,123258,123261,123263,123266],{"class":145,"line":2599},[143,123259,123260],{"class":153},"              ipv6.ip6-privacy",[143,123262,284],{"class":149},[143,123264,123265],{"class":163},"\"-1\"",[143,123267,3574],{"class":149},[143,123269,123270,123273,123275,123277],{"class":145,"line":2628},[143,123271,123272],{"class":153},"              proxy._",[143,123274,284],{"class":149},[143,123276,8552],{"class":163},[143,123278,3574],{"class":149},[143,123280,123281,123284],{"class":145,"line":2633},[143,123282,123283],{"class":153},"      networkmanager",[143,123285,123070],{"class":149},[143,123287,123288,123291,123293,123295],{"class":145,"line":2650},[143,123289,123290],{"class":153},"        uuid",[143,123292,284],{"class":149},[143,123294,123210],{"class":163},[143,123296,3574],{"class":149},[143,123298,123299,123301,123303],{"class":145,"line":2655},[143,123300,123119],{"class":153},[143,123302,284],{"class":149},[143,123304,123305],{"class":163},"\"EMIS_Vinci_Robocon_5G\"\n",[63,123307,123308],{},"将其改为新wifi的名和密码：",[133,123310,123312],{"className":123058,"code":123311,"language":123060,"meta":138,"style":138},"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",[140,123313,123314,123320,123329,123335,123342,123351,123359,123365,123371],{"__ignoreMap":138},[143,123315,123316,123318],{"class":145,"line":146},[143,123317,123067],{"class":153},[143,123319,4639],{"class":149},[143,123321,123322,123324,123326],{"class":145,"line":35},[143,123323,123075],{"class":153},[143,123325,284],{"class":149},[143,123327,123328],{"class":280},"2\n",[143,123330,123331,123333],{"class":145,"line":46},[143,123332,123086],{"class":153},[143,123334,4639],{"class":149},[143,123336,123337,123340],{"class":145,"line":293},[143,123338,123339],{"class":153},"    wlan0",[143,123341,4639],{"class":149},[143,123343,123344,123346,123348],{"class":145,"line":306},[143,123345,123131],{"class":153},[143,123347,284],{"class":149},[143,123349,123350],{"class":280},"true\n",[143,123352,123353,123355,123357],{"class":145,"line":319},[143,123354,123142],{"class":153},[143,123356,284],{"class":149},[143,123358,123350],{"class":280},[143,123360,123361,123363],{"class":145,"line":332},[143,123362,123153],{"class":153},[143,123364,4639],{"class":149},[143,123366,123367,123369],{"class":145,"line":345},[143,123368,123160],{"class":163},[143,123370,4639],{"class":149},[143,123372,123373,123376,123378],{"class":145,"line":701},[143,123374,123375],{"class":153},"          password",[143,123377,284],{"class":149},[143,123379,123380],{"class":163},"\"vinci666\"\n",[63,123382,123383],{},"工控机开机即可连上网。",[14,123385,123387],{"id":123386},"_72-ssh远程开发","7.2 SSH远程开发",[58,123389,123391],{"id":123390},"_721-环境准备","7.2.1 环境准备",[63,123393,123394],{},[25,123395,123396],{},"1.硬件准备",[63,123398,123399],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[63,123401,123402],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[63,123404,123405],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[63,123407,123408],{},[25,123409,123410],{},"2.设置固定IP",[63,123412,123413],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[63,123415,123416],{},"1.进入设置界面",[63,123418,123419],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[63,123421,123422],{},[29,123423],{"alt":138,"src":123424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[63,123426,123427],{},"2.配置所连接的网络",[63,123429,123430],{},[29,123431],{"alt":138,"src":123432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[63,123434,123435],{},"3.设置固定IP",[63,123437,123438],{},"查看当前IP地址。",[63,123440,123441],{},[29,123442],{"alt":138,"src":123443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[63,123445,123446],{},"设置固定IP。",[63,123448,123449],{},[29,123450],{"alt":138,"src":123451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[63,123453,123454],{},"至此，IP配置完毕。",[58,123456,123458],{"id":123457},"_722-环境搭建","7.2.2 环境搭建",[63,123460,123461],{},[25,123462,26651],{},[63,123464,123465],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[63,123467,123468],{},[25,123469,123470],{},"实现",[63,123472,123473],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[19,123475,123476,123479,123482,123485],{},[22,123477,123478],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[22,123480,123481],{},"远程主机启动SSH服务；",[22,123483,123484],{},"本地主机登陆远程主机；",[22,123486,123487],{},"实现数据传输。",[63,123489,123490],{},"1.安装SSH客户端与服务端",[63,123492,123493],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[133,123495,123497],{"className":121691,"code":123496,"language":121693,"meta":121694,"style":138}," sudo apt install openssh-server\n",[140,123498,123499],{"__ignoreMap":138},[143,123500,123501],{"class":145,"line":146},[143,123502,123496],{},[63,123504,123505],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[133,123507,123509],{"className":121691,"code":123508,"language":121693,"meta":121694,"style":138},"sudo apt install openssh-client\n",[140,123510,123511],{"__ignoreMap":138},[143,123512,123513],{"class":145,"line":146},[143,123514,123508],{},[63,123516,123517],{},"2.远程主机启动SSH服务",[63,123519,123520],{},"远程主机启动 ssh 服务命令如下：",[133,123522,123524],{"className":121691,"code":123523,"language":121693,"meta":121694,"style":138},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[140,123525,123526],{"__ignoreMap":138},[143,123527,123528],{"class":145,"line":146},[143,123529,123523],{},[63,123531,123532],{},"启动后可使用如下命令查看服务是否正常运行：",[133,123534,123536],{"className":121691,"code":123535,"language":121693,"meta":121694,"style":138},"ps -e | grep ssh\n",[140,123537,123538],{"__ignoreMap":138},[143,123539,123540],{"class":145,"line":146},[143,123541,123535],{},[63,123543,123544],{},"如果启动成功，会包含 sshd 程序。",[63,123546,123547],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[133,123549,123551],{"className":121691,"code":123550,"language":121693,"meta":121694,"style":138},"sudo systemctl enable ssh\n",[140,123552,123553],{"__ignoreMap":138},[143,123554,123555],{"class":145,"line":146},[143,123556,123550],{},[63,123558,123559],{},"3.本地远程登录",[63,123561,123562],{},"登录远程主机可以调用如下命令:",[133,123564,123566],{"className":118171,"code":123565,"language":118173,"meta":138,"style":138},"ssh -X 用户名@ip地址\n",[140,123567,123568],{"__ignoreMap":138},[143,123569,123570,123572,123575],{"class":145,"line":146},[143,123571,122522],{"class":156},[143,123573,123574],{"class":280}," -X",[143,123576,123577],{"class":163}," 用户名@ip地址\n",[63,123579,123580],{},"然后根据提示，录入登陆密码，即可成功登录。",[63,123582,123583],{},"如果退出，可以调用exit命令：",[133,123585,123587],{"className":121691,"code":123586,"language":121693,"meta":121694,"style":138},"exit\n",[140,123588,123589],{"__ignoreMap":138},[143,123590,123591],{"class":145,"line":146},[143,123592,123586],{},[63,123594,123595],{},[25,123596,123597],{},"4.实现数据传输",[63,123599,123600],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[63,123602,123603],{},"上传文件指令格式如下：",[133,123605,123607],{"className":121691,"code":123606,"language":121693,"meta":121694,"style":138},"scp 本地文件路径 账号@ip:路径\n",[140,123608,123609],{"__ignoreMap":138},[143,123610,123611],{"class":145,"line":146},[143,123612,123606],{},[63,123614,123615],{},"上传文件夹指令格式如下：",[133,123617,123619],{"className":121691,"code":123618,"language":121693,"meta":121694,"style":138},"scp -r 本地文件夹路径 账号@ip:路径\n",[140,123620,123621],{"__ignoreMap":138},[143,123622,123623],{"class":145,"line":146},[143,123624,123618],{},[63,123626,123627],{},"下载文件指令格式如下：",[133,123629,123631],{"className":121691,"code":123630,"language":121693,"meta":121694,"style":138},"scp 账号@ip:路径 本地文件夹路径\n",[140,123632,123633],{"__ignoreMap":138},[143,123634,123635],{"class":145,"line":146},[143,123636,123630],{},[63,123638,123639],{},"下载文件夹指令格式如下：",[133,123641,123643],{"className":121691,"code":123642,"language":121693,"meta":121694,"style":138},"scp -r 账号@ip:路径 本地文件夹路径\n",[140,123644,123645],{"__ignoreMap":138},[143,123646,123647],{"class":145,"line":146},[143,123648,123642],{},[63,123650,123651],{},[25,123652,123653],{},"优化",[63,123655,123656],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[19,123658,123659,123662],{},[22,123660,123661],{},"本地生成密钥对；",[22,123663,123664],{},"将公钥上传至远程主机。",[63,123666,123667],{},[25,123668,123669],{},"1.生成密钥对",[63,123671,123672],{},"本地客户端生成公私钥：（一路回车默认即可）",[133,123674,123676],{"className":121691,"code":123675,"language":121693,"meta":121694,"style":138},"ssh-keygen\n",[140,123677,123678],{"__ignoreMap":138},[143,123679,123680],{"class":145,"line":146},[143,123681,123675],{},[63,123683,123684],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[19,123686,123687,123690],{},[22,123688,123689],{},"id_rsa （私钥）；",[22,123691,123692],{},"id_rsa.pub (公钥)。",[63,123694,123695],{},[25,123696,123697],{},"2.公钥上传",[63,123699,123700],{},"上传指令如下：",[133,123702,123704],{"className":121691,"code":123703,"language":121693,"meta":121694,"style":138},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[140,123705,123706],{"__ignoreMap":138},[143,123707,123708],{"class":145,"line":146},[143,123709,123703],{},[63,123711,123712],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[63,123714,123715],{},"以后再远程登录就无需录入密码了。",[58,123717,123719],{"id":123718},"_723-使用vscode优化","7.2.3 使用VScode优化",[63,123721,123722],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[63,123724,123725],{},[25,123726,123727],{},"1.准备工作",[63,123729,123730],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[63,123732,123733],{},[25,123734,123735],{},"2.为VScode安装远程开发插件",[63,123737,123738,123739,123742,123743,123746,123747,29283],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[140,123740,123741],{},"扩展：商店","的搜索栏输入",[140,123744,123745],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[140,123748,123749],{},"安装",[63,123751,123752],{},[29,123753],{"alt":138,"src":123754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[63,123756,123757],{},[25,123758,123759],{},"3.配置远程连接",[63,123761,123762,123763,123766,123767,123770],{},"步骤1：使用快捷键",[140,123764,123765],{},"ctrl + shift + p","打开命令输入窗口，并输入",[140,123768,123769],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[63,123772,123773],{},[29,123774],{"alt":138,"src":123775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[63,123777,123778,123779,29283],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[140,123780,123781],{},"Add New SSH Host",[63,123783,123784],{},[29,123785],{"alt":138,"src":123786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[63,123788,123789,123790,123793,123794,123797,123798,123801],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[140,123791,123792],{},"ssh +X ubuntu@192.168.43.164","，其中，",[140,123795,123796],{},"ubuntu","需要替换为你的登录用户名，",[140,123799,123800],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[63,123803,123804],{},[29,123805],{"alt":138,"src":123806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[63,123808,123809],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[63,123811,123812],{},[29,123813],{"alt":138,"src":123814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[63,123816,123817],{},[29,123818],{"alt":138,"src":123819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[63,123821,123822],{},[25,123823,123824],{},"4.使用",[63,123826,123827,123828,123766,123830,123832],{},"步骤1：继续使用快捷键",[140,123829,123765],{},[140,123831,123769],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[63,123834,123835],{},[29,123836],{"alt":138,"src":123837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[63,123839,123840,123841,123844],{},"或者，也可以点击侧边栏的",[140,123842,123843],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[63,123846,123847],{},[29,123848],{"alt":138,"src":123849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[63,123851,123852,123853,123856,123857,123860],{},"步骤2：选择菜单栏的",[140,123854,123855],{},"文件","下的",[140,123858,123859],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[63,123862,123863],{},[29,123864],{"alt":138,"src":123865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[63,123867,123868],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123870,123872],{"id":123871},"_73-远程桌面","7.3 远程桌面",[63,123874,123875],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[63,123877,123878],{},"我们选择使用VNC来看。",[19,123880,123881],{},[22,123882,123883],{},"安装VNC服务器：",[63,123885,123886],{},"这里以TigerVNC为例进行安装：",[133,123888,123890],{"className":118171,"code":123889,"language":118173,"meta":138,"style":138},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[140,123891,123892],{"__ignoreMap":138},[143,123893,123894,123896,123898,123900,123903],{"class":145,"line":146},[143,123895,25474],{"class":156},[143,123897,118192],{"class":163},[143,123899,24732],{"class":163},[143,123901,123902],{"class":163}," tigervnc-standalone-server",[143,123904,123905],{"class":163}," tigervnc-common\n",[19,123907,123908],{"start":35},[22,123909,123910],{},"设置VNC密码：",[63,123912,123913],{},"为VNC用户设置密码，运行以下命令：",[133,123915,123917],{"className":118171,"code":123916,"language":118173,"meta":138,"style":138},"vncpasswd\n",[140,123918,123919],{"__ignoreMap":138},[143,123920,123921],{"class":145,"line":146},[143,123922,123916],{"class":156},[19,123924,123925],{"start":46},[22,123926,123927],{},"配置VNC启动脚本:",[63,123929,123930],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[133,123932,123934],{"className":118171,"code":123933,"language":118173,"meta":138,"style":138},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[140,123935,123936,123945],{"__ignoreMap":138},[143,123937,123938,123940,123942],{"class":145,"line":146},[143,123939,102142],{"class":156},[143,123941,30114],{"class":280},[143,123943,123944],{"class":163}," ~\u002F.vnc\n",[143,123946,123947,123950],{"class":145,"line":35},[143,123948,123949],{"class":156},"nano",[143,123951,123952],{"class":163}," ~\u002F.vnc\u002Fxstartup\n",[63,123954,123955],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[133,123957,123959],{"className":118171,"code":123958,"language":118173,"meta":138,"style":138},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[140,123960,123961,123966,123974,123981],{"__ignoreMap":138},[143,123962,123963],{"class":145,"line":146},[143,123964,123965],{"class":266},"#!\u002Fbin\u002Fsh\n",[143,123967,123968,123971],{"class":145,"line":35},[143,123969,123970],{"class":280},"unset",[143,123972,123973],{"class":163}," SESSION_MANAGER\n",[143,123975,123976,123978],{"class":145,"line":46},[143,123977,123970],{"class":280},[143,123979,123980],{"class":163}," DBUS_SESSION_BUS_ADDRESS\n",[143,123982,123983],{"class":145,"line":293},[143,123984,123985],{"class":156},"gnome-session\n",[63,123987,123988],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[19,123990,123991],{"start":293},[22,123992,123993],{},"给予执行权限：",[63,123995,123996],{},"为xstartup文件设置执行权限：",[133,123998,124000],{"className":118171,"code":123999,"language":118173,"meta":138,"style":138},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[140,124001,124002],{"__ignoreMap":138},[143,124003,124004,124006,124009],{"class":145,"line":146},[143,124005,25509],{"class":156},[143,124007,124008],{"class":163}," +x",[143,124010,123952],{"class":163},[19,124012,124013],{"start":306},[22,124014,124015],{},"启动VNC服务器：",[133,124017,124019],{"className":118171,"code":124018,"language":118173,"meta":138,"style":138},"vncserver -geometry 1920x1080 -localhost=0\n",[140,124020,124021],{"__ignoreMap":138},[143,124022,124023,124026,124029,124032],{"class":145,"line":146},[143,124024,124025],{"class":156},"vncserver",[143,124027,124028],{"class":280}," -geometry",[143,124030,124031],{"class":163}," 1920x1080",[143,124033,124034],{"class":280}," -localhost=0\n",[63,124036,124037],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[63,124039,124040],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[19,124042,124043],{"start":319},[22,124044,124045],{},"查看已开启的VNC服务器：",[133,124047,124049],{"className":118171,"code":124048,"language":118173,"meta":138,"style":138},"vncserver -list\n",[140,124050,124051],{"__ignoreMap":138},[143,124052,124053,124055],{"class":145,"line":146},[143,124054,124025],{"class":156},[143,124056,124057],{"class":280}," -list\n",[63,124059,124060],{},[29,124061],{"alt":138,"src":124062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[19,124064,124065],{"start":332},[22,124066,124067],{},"连接到VNC服务器：",[63,124069,124070],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[19,124072,124073],{"start":345},[22,124074,124075],{},"停止VNC服务器：",[63,124077,124078],{},"如果需要停止VNC服务器，可以使用以下命令：",[133,124080,124082],{"className":118171,"code":124081,"language":118173,"meta":138,"style":138},"vncserver -kill :1\n",[140,124083,124084],{"__ignoreMap":138},[143,124085,124086,124088,124091],{"class":145,"line":146},[143,124087,124025],{"class":156},[143,124089,124090],{"class":280}," -kill",[143,124092,124093],{"class":163}," :1\n",[63,124095,124096],{},"将:1替换为你实际使用的显示编号。",[63,124098,124099],{},[29,124100],{"alt":138,"src":124101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[63,124103,124104],{},[29,124105],{"alt":138,"src":124106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124108,124110],{"id":124109},"_74-usb端口设置","7.4 USB端口设置",[63,124112,124113],{},[25,124114,124115],{},"首先先配置好权限",[133,124117,124119],{"className":118171,"code":124118,"language":118173,"meta":138,"style":138},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[140,124120,124121,124126,124139,124146,124151],{"__ignoreMap":138},[143,124122,124123],{"class":145,"line":146},[143,124124,124125],{"class":266},"# 将用户权限提高\n",[143,124127,124128,124130,124132,124134,124137],{"class":145,"line":35},[143,124129,25474],{"class":156},[143,124131,27472],{"class":163},[143,124133,27475],{"class":280},[143,124135,124136],{"class":163}," dialout",[143,124138,27480],{"class":149},[143,124140,124141,124143],{"class":145,"line":46},[143,124142,27499],{"class":156},[143,124144,124145],{"class":163}," dialout\n",[143,124147,124148],{"class":145,"line":293},[143,124149,124150],{"class":266},"# 查看下面命令是否输出dialout（若输出才正常）\n",[143,124152,124153],{"class":145,"line":306},[143,124154,124155],{"class":156},"groups\n",[63,124157,124158],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[58,124160,124162],{"id":124161},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[63,124164,124165,124168],{},[25,124166,124167],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[63,124170,124171,124174],{},[25,124172,124173],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[63,124176,124177],{},[25,124178,124179],{},"流程如下：",[63,124181,124182],{},"（1）.查找设备idVendor和idProduct",[63,124184,124185,124186,124189],{},"接入两个USB设备，在终端调用指令",[140,124187,124188],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[63,124191,124192],{},[29,124193],{"alt":138,"src":124194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[63,124196,124197,124198,124201],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[140,124199,124200],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[63,124203,124204],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[63,124206,124207],{},"（2）.编写映射规则",[63,124209,124210,124211,124214],{},"在",[140,124212,124213],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[133,124216,124218],{"className":118171,"code":124217,"language":118173,"meta":138,"style":138},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[140,124219,124220],{"__ignoreMap":138},[143,124221,124222,124224,124226],{"class":145,"line":146},[143,124223,25474],{"class":156},[143,124225,119458],{"class":163},[143,124227,124228],{"class":163}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[63,124230,124231],{},"输入如下内容：",[133,124233,124235],{"className":118171,"code":124234,"language":118173,"meta":138,"style":138},"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",[140,124236,124237,124267],{"__ignoreMap":138},[143,124238,124239,124242,124244,124247,124250,124253,124256,124258,124261,124264],{"class":145,"line":146},[143,124240,124241],{"class":149},"KERNEL",[143,124243,160],{"class":755},[143,124245,124246],{"class":163},"=\"ttyUSB*\",",[143,124248,124249],{"class":156}," ATTRS",[143,124251,124252],{"class":163},"{idVendor}==",[143,124254,124255],{"class":156},"\"10c4\"",[143,124257,1419],{"class":156},[143,124259,124260],{"class":163}," ATTRS{idProduct}==\"ea60\",",[143,124262,124263],{"class":163}," MODE:=\"0777\",",[143,124265,124266],{"class":163}," SYMLINK+=\"mylidar\"\n",[143,124268,124269,124271,124273,124275,124277,124279,124282,124284,124287,124289],{"class":145,"line":35},[143,124270,124241],{"class":149},[143,124272,160],{"class":755},[143,124274,124246],{"class":163},[143,124276,124249],{"class":156},[143,124278,124252],{"class":163},[143,124280,124281],{"class":156},"\"1a86\"",[143,124283,1419],{"class":156},[143,124285,124286],{"class":163}," ATTRS{idProduct}==\"7523\",",[143,124288,124263],{"class":163},[143,124290,124291],{"class":163}," SYMLINK+=\"mycar\"\n",[63,124293,124294],{},"代码解释：",[232,124296,124297,124300,124303,124306],{},[22,124298,124299],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[22,124301,124302],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[22,124304,124305],{},"SYMLINK是符号连接，即绑定的别名；",[22,124307,124308],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[63,124310,124311,124312,124315,124318],{},"***小提示：***",[24451,124313,124314],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[140,124316,124317],{},"\u002Fetc\u002Fudev\u002Frule.d",[24451,124319,124320],{},"目录即可。",[63,124322,124323],{},"表格 还在加载中，请等待加载完成后再尝试复制",[63,124325,124326],{},"（3）.使规则生效",[63,124328,124329],{},"在终端下输入如下指令：",[133,124331,124333],{"className":118171,"code":124332,"language":118173,"meta":138,"style":138},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[140,124334,124335,124340,124352,124363,124367,124372,124385],{"__ignoreMap":138},[143,124336,124337],{"class":145,"line":146},[143,124338,124339],{"class":266},"# Ubuntu用下方命令\n",[143,124341,124342,124344,124346,124349],{"class":145,"line":35},[143,124343,25474],{"class":156},[143,124345,120923],{"class":163},[143,124347,124348],{"class":163}," udev",[143,124350,124351],{"class":163}," reload\n",[143,124353,124354,124356,124358,124360],{"class":145,"line":46},[143,124355,25474],{"class":156},[143,124357,120923],{"class":163},[143,124359,124348],{"class":163},[143,124361,124362],{"class":163}," restart\n",[143,124364,124365],{"class":145,"line":293},[143,124366,3300],{"emptyLinePlaceholder":976},[143,124368,124369],{"class":145,"line":306},[143,124370,124371],{"class":266},"#Fedora用下方命令\n",[143,124373,124374,124376,124379,124382],{"class":145,"line":319},[143,124375,25474],{"class":156},[143,124377,124378],{"class":163}," udevadm",[143,124380,124381],{"class":163}," control",[143,124383,124384],{"class":280}," --reload\n",[143,124386,124387,124389,124391],{"class":145,"line":332},[143,124388,25474],{"class":156},[143,124390,124378],{"class":163},[143,124392,124393],{"class":163}," trigger\n",[63,124395,124396],{},"再重新插拔设备即可。",[63,124398,124399],{},"（4）.测试",[63,124401,124402],{},"终端下输入如下指令",[133,124404,124406],{"className":118171,"code":124405,"language":118173,"meta":138,"style":138},"ll \u002Fdev | grep ttyUSB\n",[140,124407,124408],{"__ignoreMap":138},[143,124409,124410,124413,124416,124418,124420],{"class":145,"line":146},[143,124411,124412],{"class":156},"ll",[143,124414,124415],{"class":163}," \u002Fdev",[143,124417,26007],{"class":755},[143,124419,31134],{"class":156},[143,124421,124422],{"class":163}," ttyUSB\n",[63,124424,124425],{},"运行结果如下：",[63,124427,124428],{},[29,124429],{"alt":138,"src":124430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[63,124432,124433,124434,124437],{},"也可以多次插拔USB设备，会发现设备端口",[140,124435,124436],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[63,124439,124440],{},[25,124441,118839],{},[63,124443,124444],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[58,124446,124448],{"id":124447},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[63,124450,124451,124453],{},[25,124452,124167],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[63,124455,124456,124458],{},[25,124457,124173],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[63,124460,124461],{},[25,124462,124179],{},[63,124464,124465],{},"（1）.查看所连接的主机USB接口的KERNELS",[63,124467,124468],{},"调用如下指令查看第一台雷达的USB信息：",[133,124470,124472],{"className":118171,"code":124471,"language":118173,"meta":138,"style":138},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[140,124473,124474,124494],{"__ignoreMap":138},[143,124475,124476,124479,124481,124484,124487,124489,124491],{"class":145,"line":146},[143,124477,124478],{"class":156},"udevadm",[143,124480,70702],{"class":163},[143,124482,124483],{"class":280}," --attribute-walk",[143,124485,124486],{"class":280}," --name=\u002Fdev\u002FttyUSB0",[143,124488,26007],{"class":755},[143,124490,31134],{"class":156},[143,124492,124493],{"class":163}," KERNELS\n",[143,124495,124496,124498,124500,124502,124505,124507,124509],{"class":145,"line":35},[143,124497,124478],{"class":156},[143,124499,70702],{"class":163},[143,124501,124483],{"class":280},[143,124503,124504],{"class":280}," --name=\u002Fdev\u002FttyACM0",[143,124506,26007],{"class":755},[143,124508,31134],{"class":156},[143,124510,124493],{"class":163},[63,124512,124513],{},[29,124514],{"alt":138,"src":124515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[63,124517,124518],{},"调用如下指令查看第二台雷达的USB信息：",[133,124520,124522],{"className":118171,"code":124521,"language":118173,"meta":138,"style":138},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[140,124523,124524],{"__ignoreMap":138},[143,124525,124526,124528,124530,124532,124535,124537,124539],{"class":145,"line":146},[143,124527,124478],{"class":156},[143,124529,70702],{"class":163},[143,124531,124483],{"class":280},[143,124533,124534],{"class":280}," --name=\u002Fdev\u002FttyUSB1",[143,124536,26007],{"class":755},[143,124538,31134],{"class":156},[143,124540,124493],{"class":163},[63,124542,124543,124544,124547,124548,124551,124552,124555],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[140,124545,124546],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[140,124549,124550],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[25,124553,124554],{},"唯一性标识","”。",[63,124557,124207],{},[63,124559,124210,124560,124562],{},[140,124561,124213],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[133,124564,124565],{"className":118171,"code":124217,"language":118173,"meta":138,"style":138},[140,124566,124567],{"__ignoreMap":138},[143,124568,124569,124571,124573],{"class":145,"line":146},[143,124570,25474],{"class":156},[143,124572,119458],{"class":163},[143,124574,124228],{"class":163},[133,124576,124578],{"className":118171,"code":124577,"language":118173,"meta":138,"style":138},"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",[140,124579,124580,124609],{"__ignoreMap":138},[143,124581,124582,124584,124586,124588,124591,124593,124596,124599,124601,124604,124606],{"class":145,"line":146},[143,124583,124241],{"class":149},[143,124585,160],{"class":755},[143,124587,124246],{"class":163},[143,124589,124590],{"class":149}," KERNELS",[143,124592,160],{"class":755},[143,124594,124595],{"class":163},"=\"1-1.3:1.0\",",[143,124597,124598],{"class":156}," MODE:",[143,124600,160],{"class":163},[143,124602,124603],{"class":156},"\"0777\"",[143,124605,1419],{"class":156},[143,124607,124608],{"class":163}," SYMLINK+=\"rplidar_front\"\n",[143,124610,124611,124613,124615,124617,124619,124621,124624,124626,124628,124630,124632],{"class":145,"line":35},[143,124612,124241],{"class":149},[143,124614,160],{"class":755},[143,124616,124246],{"class":163},[143,124618,124590],{"class":149},[143,124620,160],{"class":755},[143,124622,124623],{"class":163},"=\"1-1.4:1.0\",",[143,124625,124598],{"class":156},[143,124627,160],{"class":163},[143,124629,124603],{"class":156},[143,124631,1419],{"class":156},[143,124633,124634],{"class":163}," SYMLINK+=\"rplidar_back\"\n",[63,124636,124326],{},[63,124638,124329],{},[133,124640,124641],{"className":118171,"code":124332,"language":118173,"meta":138,"style":138},[140,124642,124643,124647,124657,124667,124671,124675,124685],{"__ignoreMap":138},[143,124644,124645],{"class":145,"line":146},[143,124646,124339],{"class":266},[143,124648,124649,124651,124653,124655],{"class":145,"line":35},[143,124650,25474],{"class":156},[143,124652,120923],{"class":163},[143,124654,124348],{"class":163},[143,124656,124351],{"class":163},[143,124658,124659,124661,124663,124665],{"class":145,"line":46},[143,124660,25474],{"class":156},[143,124662,120923],{"class":163},[143,124664,124348],{"class":163},[143,124666,124362],{"class":163},[143,124668,124669],{"class":145,"line":293},[143,124670,3300],{"emptyLinePlaceholder":976},[143,124672,124673],{"class":145,"line":306},[143,124674,124371],{"class":266},[143,124676,124677,124679,124681,124683],{"class":145,"line":319},[143,124678,25474],{"class":156},[143,124680,124378],{"class":163},[143,124682,124381],{"class":163},[143,124684,124384],{"class":280},[143,124686,124687,124689,124691],{"class":145,"line":332},[143,124688,25474],{"class":156},[143,124690,124378],{"class":163},[143,124692,124393],{"class":163},[63,124694,124396],{},[63,124696,124399],{},[63,124698,124402,124699,124702],{},[140,124700,124701],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[63,124704,124705],{},[29,124706],{"alt":138,"src":124707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[63,124709,124710],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[63,124712,124713,124715],{},[25,124714,118839],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[58,124717,124719],{"id":124718},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[63,124721,124722],{},"（1）.查看所连接的主机USB接口的信息",[133,124724,124726],{"className":118171,"code":124725,"language":118173,"meta":138,"style":138},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[140,124727,124728,124758],{"__ignoreMap":138},[143,124729,124730,124732,124734,124737,124739,124741,124743,124745,124748,124751,124753,124756],{"class":145,"line":146},[143,124731,124478],{"class":156},[143,124733,70702],{"class":163},[143,124735,124736],{"class":280}," -a",[143,124738,30114],{"class":280},[143,124740,29320],{"class":149},[143,124742,124478],{"class":156},[143,124744,70702],{"class":163},[143,124746,124747],{"class":280}," -q",[143,124749,124750],{"class":163}," path",[143,124752,26013],{"class":280},[143,124754,124755],{"class":163}," \u002Fdev\u002FttyACM0",[143,124757,1055],{"class":149},[143,124759,124760,124762,124764,124766,124768,124770,124772,124774,124776,124778,124780,124783],{"class":145,"line":35},[143,124761,124478],{"class":156},[143,124763,70702],{"class":163},[143,124765,124736],{"class":280},[143,124767,30114],{"class":280},[143,124769,29320],{"class":149},[143,124771,124478],{"class":156},[143,124773,70702],{"class":163},[143,124775,124747],{"class":280},[143,124777,124750],{"class":163},[143,124779,26013],{"class":280},[143,124781,124782],{"class":163}," \u002Fdev\u002FttyUSB0",[143,124784,1055],{"class":149},[63,124786,124787],{},[29,124788],{"alt":138,"src":124789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[63,124791,124792],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[63,124794,124207],{},[63,124796,124210,124797,124562],{},[140,124798,124213],{},[133,124800,124801],{"className":118171,"code":124217,"language":118173,"meta":138,"style":138},[140,124802,124803],{"__ignoreMap":138},[143,124804,124805,124807,124809],{"class":145,"line":146},[143,124806,25474],{"class":156},[143,124808,119458],{"class":163},[143,124810,124228],{"class":163},[133,124812,124814],{"className":118171,"code":124813,"language":118173,"meta":138,"style":138},"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",[140,124815,124816,124844,124870],{"__ignoreMap":138},[143,124817,124818,124820,124822,124825,124827,124829,124831,124833,124836,124839,124841],{"class":145,"line":146},[143,124819,124241],{"class":149},[143,124821,160],{"class":755},[143,124823,124824],{"class":163},"=\"ttyACM*\",",[143,124826,124249],{"class":156},[143,124828,124252],{"class":163},[143,124830,124281],{"class":156},[143,124832,1419],{"class":156},[143,124834,124835],{"class":163}," ATTRS{idProduct}==\"55d4\",",[143,124837,124838],{"class":163}," ATTRS{serial}==\"0001\",",[143,124840,124263],{"class":163},[143,124842,124843],{"class":163}," SYMLINK+=\"ttyACM_MCU\"\n",[143,124845,124846,124848,124850,124852,124854,124856,124858,124860,124862,124865,124867],{"class":145,"line":35},[143,124847,124241],{"class":149},[143,124849,160],{"class":755},[143,124851,124824],{"class":163},[143,124853,124249],{"class":156},[143,124855,124252],{"class":163},[143,124857,124281],{"class":156},[143,124859,1419],{"class":156},[143,124861,124835],{"class":163},[143,124863,124864],{"class":163}," ATTRS{serial}==\"0002\",",[143,124866,124263],{"class":163},[143,124868,124869],{"class":163}," SYMLINK+=\"ttyACM_Lidar\"\n",[143,124871,124872,124874,124876,124878,124880,124882,124884,124886,124888,124890],{"class":145,"line":46},[143,124873,124241],{"class":149},[143,124875,160],{"class":755},[143,124877,124246],{"class":163},[143,124879,124249],{"class":156},[143,124881,124252],{"class":163},[143,124883,124281],{"class":156},[143,124885,1419],{"class":156},[143,124887,124286],{"class":163},[143,124889,124263],{"class":163},[143,124891,124892],{"class":163}," SYMLINK+=\"ttyUSB_IMU\"\n",[63,124894,124326],{},[63,124896,124329],{},[133,124898,124899],{"className":118171,"code":124332,"language":118173,"meta":138,"style":138},[140,124900,124901,124905,124915,124925,124929,124933,124943],{"__ignoreMap":138},[143,124902,124903],{"class":145,"line":146},[143,124904,124339],{"class":266},[143,124906,124907,124909,124911,124913],{"class":145,"line":35},[143,124908,25474],{"class":156},[143,124910,120923],{"class":163},[143,124912,124348],{"class":163},[143,124914,124351],{"class":163},[143,124916,124917,124919,124921,124923],{"class":145,"line":46},[143,124918,25474],{"class":156},[143,124920,120923],{"class":163},[143,124922,124348],{"class":163},[143,124924,124362],{"class":163},[143,124926,124927],{"class":145,"line":293},[143,124928,3300],{"emptyLinePlaceholder":976},[143,124930,124931],{"class":145,"line":306},[143,124932,124371],{"class":266},[143,124934,124935,124937,124939,124941],{"class":145,"line":319},[143,124936,25474],{"class":156},[143,124938,124378],{"class":163},[143,124940,124381],{"class":163},[143,124942,124384],{"class":280},[143,124944,124945,124947,124949],{"class":145,"line":332},[143,124946,25474],{"class":156},[143,124948,124378],{"class":163},[143,124950,124393],{"class":163},[63,124952,124953,124954],{},"再重新插拔设备即可，或者 ",[25,124955,124956],{},"直接重启系统。",[63,124958,124399],{},[63,124960,124402,124961,124702],{},[140,124962,124701],{},[63,124964,124965],{},[29,124966],{"alt":138,"src":124967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[63,124969,124710],{},[63,124971,124972,124974],{},[25,124973,118839],{}," 一些设备可能没有串口号等。",[58,124976,124978],{"id":124977},"_744-其他注意事项","7.4.4 其他注意事项",[63,124980,124981,124982,124984,124985,124988,124989,19308,124992,124995,124996,124998],{},"并非所有的USB设备端口号都是",[140,124983,124436],{},"的格式，比如Arduino的端口号可能是",[140,124986,124987],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[140,124990,124991],{},"videon",[140,124993,124994],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[140,124997,124991],{},"端口，绑定时需要关联的也是该接口。",[63,125000,125001,125002,125005,125006,125009,125010,125012,125013,125016,125017,125020,125021,125024,125025,125024,125028,125024,125031,29283],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[140,125003,125004],{},"KERNEL==\"ttyUSB*\"","修改为",[140,125007,125008],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[140,125011,125004],{},"修改为类似于",[140,125014,125015],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[140,125018,125019],{},"video[0,2,4,6]","表示可以绑定的端口为",[140,125022,125023],{},"video0","或",[140,125026,125027],{},"video2",[140,125029,125030],{},"video4",[140,125032,125033],{},"video6",[14,125035,125037],{"id":125036},"_75-挂载内网网页","7.5 挂载内网网页",[63,125039,125040],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[63,125042,125043],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[63,125045,125046],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[63,125048,125049,125050],{},"Termux 下载地址（F-Droid）：",[67,125051,125052],{"href":125052,"rel":125053},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[71],[63,125055,125056],{},"首先打开app后，先更新软件缓存：",[133,125058,125060],{"className":118171,"code":125059,"language":118173,"meta":138,"style":138},"pkg update\n",[140,125061,125062],{"__ignoreMap":138},[143,125063,125064,125067],{"class":145,"line":146},[143,125065,125066],{"class":156},"pkg",[143,125068,27140],{"class":163},[63,125070,125071],{},"然后换源",[133,125073,125075],{"className":118171,"code":125074,"language":118173,"meta":138,"style":138},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[140,125076,125077],{"__ignoreMap":138},[143,125078,125079,125081,125084],{"class":145,"line":146},[143,125080,123949],{"class":156},[143,125082,125083],{"class":149}," $PREFIX",[143,125085,125086],{"class":163},"\u002Fetc\u002Fapt\u002Fsources.list\n",[63,125088,125089],{},"将该文件内容替换为下面：",[133,125091,125093],{"className":118171,"code":125092,"language":118173,"meta":138,"style":138},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[140,125094,125095],{"__ignoreMap":138},[143,125096,125097,125100,125103,125106],{"class":145,"line":146},[143,125098,125099],{"class":156},"deb",[143,125101,125102],{"class":163}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[143,125104,125105],{"class":163}," stable",[143,125107,125108],{"class":163}," main\n",[232,125110,125111,125138],{},[22,125112,125113,125114,125116,125117],{},"如果你使用的是",[140,125115,123949],{},"编辑器：",[232,125118,125119,125126,125132],{},[22,125120,125121,125122,125125],{},"按 ",[140,125123,125124],{},"Ctrl+O"," 保存文件。",[22,125127,125121,125128,125131],{},[140,125129,125130],{},"Enter"," 确认文件名。",[22,125133,125121,125134,125137],{},[140,125135,125136],{},"Ctrl+X"," 退出编辑器。",[22,125139,125113,125140,125116,125143],{},[140,125141,125142],{},"vim",[232,125144,125145,125151],{},[22,125146,125121,125147,125150],{},[140,125148,125149],{},"Esc"," 退出编辑模式。",[22,125152,125153,125154,125156],{},"输入 ",[140,125155,120096],{}," 保存并退出。",[63,125158,125159],{},"接下来重新更新软件源：",[133,125161,125163],{"className":118171,"code":125162,"language":118173,"meta":138,"style":138},"pkg update && pkg upgrade\n",[140,125164,125165],{"__ignoreMap":138},[143,125166,125167,125169,125171,125173,125175],{"class":145,"line":146},[143,125168,125066],{"class":156},[143,125170,118222],{"class":163},[143,125172,27088],{"class":149},[143,125174,125066],{"class":156},[143,125176,118208],{"class":163},[63,125178,125179],{},"安装python：",[133,125181,125183],{"className":118171,"code":125182,"language":118173,"meta":138,"style":138},"pkg install python\n",[140,125184,125185],{"__ignoreMap":138},[143,125186,125187,125189,125191],{"class":145,"line":146},[143,125188,125066],{"class":156},[143,125190,24732],{"class":163},[143,125192,125193],{"class":163}," python\n",[63,125195,125196,27371],{},[25,125197,125198],{},"通过Termux访问设备存储",[63,125200,125201],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[133,125203,125205],{"className":118171,"code":125204,"language":118173,"meta":138,"style":138},"termux-setup-storage\n",[140,125206,125207],{"__ignoreMap":138},[143,125208,125209],{"class":145,"line":146},[143,125210,125204],{"class":156},[19,125212,125213],{},[22,125214,125215,27371,125218],{},[25,125216,125217],{},"进入HTML文件所在的目录",[19,125219,125220],{},[22,125221,125222,125223,125225],{},"使用",[140,125224,102152],{},"命令进入HTML文件所在的目录：",[133,125227,125229],{"className":118171,"code":125228,"language":118173,"meta":138,"style":138},"cd ~\u002Fyour_html_folder\n",[140,125230,125231],{"__ignoreMap":138},[143,125232,125233,125235],{"class":145,"line":146},[143,125234,102152],{"class":280},[143,125236,125237],{"class":163}," ~\u002Fyour_html_folder\n",[19,125239,125240],{"start":35},[22,125241,125242,27371,125245,125250,125267],{},[25,125243,125244],{},"启动Python HTTP服务器",[19,125246,125247],{},[22,125248,125249],{},"运行以下命令启动一个简单的HTTP服务器：",[133,125251,125253],{"className":118171,"code":125252,"language":118173,"meta":138,"style":138},"python -m http.server 8000\n",[140,125254,125255],{"__ignoreMap":138},[143,125256,125257,125259,125261,125264],{"class":145,"line":146},[143,125258,31278],{"class":156},[143,125260,101758],{"class":280},[143,125262,125263],{"class":163}," http.server",[143,125265,125266],{"class":280}," 8000\n",[19,125268,125269],{"start":46},[22,125270,125271,125272,125275],{},"这会在端口",[140,125273,125274],{},"8000","上启动一个Web服务器。",[232,125277,125278],{},[22,125279,125280],{},"启动服务器后，Termux会显示日志信息，例如：",[133,125282,125284],{"className":121691,"code":125283,"language":121693,"meta":121694,"style":138},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[140,125285,125286],{"__ignoreMap":138},[143,125287,125288],{"class":145,"line":146},[143,125289,125283],{},[232,125291,125292],{},[22,125293,125294],{},"这表示服务器已成功启动。",[63,125296,125297],{},[25,125298,125299],{},"在浏览器中访问HTML文件",[19,125301,125302],{},[22,125303,125304,27371,125307,125312],{},[25,125305,125306],{},"在同一设备上访问",[19,125308,125309],{},[22,125310,125311],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[133,125313,125316],{"className":125314,"code":125315,"language":72543,"meta":138,"style":138},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[140,125317,125318],{"__ignoreMap":138},[143,125319,125320,125323],{"class":145,"line":146},[143,125321,125322],{"class":149},"http:",[143,125324,125325],{"class":266},"\u002F\u002Flocalhost:8000\n",[232,125327,125328],{},[22,125329,125330,125331,125334],{},"如果HTML文件中有",[140,125332,125333],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125336,125338],{"id":125337},"_76-linux重点知识","7.6 Linux重点知识",[58,125340,125342],{"id":125341},"_761-关于点的说明","7.6.1 关于点的说明",[63,125344,125345],{},[29,125346],{"alt":138,"src":125347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[63,125349,125350],{},"一点本目录，两点上目录",[58,125352,125354],{"id":125353},"_762-目录","7.6.2 目录",[22896,125356,125358],{"id":125357},"_7621-系统启动必须","7.6.2.1 系统启动必须",[63,125360,125361],{},[25,125362,125363],{},"\u002Fboot:",[63,125365,125366],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[63,125368,125369],{},[25,125370,125371],{},"\u002Fetc:",[63,125373,125374],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[63,125376,125377],{},[25,125378,125379],{},"\u002Flib：",[63,125381,125382],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[63,125384,125385],{},[25,125386,125387],{},"\u002Fsys:",[63,125389,125390],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22896,125392,125394],{"id":125393},"_7622-指令集合","7.6.2.2 指令集合",[63,125396,125397],{},[25,125398,125399],{},"\u002Fbin:",[63,125401,125402],{},"为二进制文件的缩写，存放最经常使用的命令",[63,125404,125405],{},[25,125406,125407],{},"\u002Fsbin:",[63,125409,125410],{},"只有系统管理员才能使用的程序和指令",[22896,125412,125414],{"id":125413},"_7623-外部文件管理","7.6.2.3 外部文件管理",[63,125416,125417],{},[25,125418,125419],{},"\u002Fdev:",[63,125421,125422],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[63,125424,125425],{},[25,125426,125427],{},"\u002Fmedia:",[63,125429,125430],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[63,125432,125433],{},[25,125434,125435],{},"\u002Fmnt:",[63,125437,125438],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22896,125440,125442],{"id":125441},"_7624-临时文件","7.6.2.4 临时文件",[63,125444,125445],{},[25,125446,125447],{},"\u002Frun:",[63,125449,125450],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[63,125452,125453],{},[25,125454,125455],{},"\u002Flost+found:",[63,125457,125458],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[63,125460,125461],{},[25,125462,125463],{},"\u002Ftmp:",[63,125465,125466],{},"这个目录是用来存放一些临时文件的",[22896,125468,125470],{"id":125469},"_7625-账户","7.6.2.5 账户",[63,125472,125473],{},[25,125474,125475],{},"\u002Froot：",[63,125477,125478],{},"系统管理员的用户主目录",[63,125480,125481,27371],{},[25,125482,125483],{},"\u002Fhome",[63,125485,125486],{},"用户的主目录，以用户的账号命名的",[63,125488,125489,27371],{},[25,125490,125491],{},"\u002Fusr",[63,125493,125494],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[63,125496,125497],{},[25,125498,125499],{},"\u002Fusr\u002Fbin：",[63,125501,125502],{},"系统用户使用的应用程序与指令",[63,125504,125505],{},[25,125506,125507],{},"\u002Fusr\u002Fsbin：",[63,125509,125510],{},"超级用户使用的比较高级的管理程序和系统守护程序",[63,125512,125513],{},[25,125514,125515],{},"\u002Fusr\u002Fsrc：",[63,125517,125518],{},"内核源代码默认的放置目录",[22896,125520,125522],{"id":125521},"_7626-运行过程要用","7.6.2.6 运行过程要用",[63,125524,125525],{},[25,125526,125527],{},"\u002Fvar：",[63,125529,125530],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[63,125532,125533],{},[25,125534,125535],{},"\u002Fproc:",[63,125537,125538,125539,125542],{},"管理 ",[25,125540,125541],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22896,125544,125546],{"id":125545},"_7627-扩展用的","7.6.2.7 扩展用的",[63,125548,125549],{},[25,125550,125551],{},"\u002Fopt:",[63,125553,125554],{},"默认是空的，我们安装额外软件可以放在这个里面",[63,125556,125557],{},[25,125558,125559],{},"\u002Fsrv:",[63,125561,125562],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[58,125564,125566],{"id":125565},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[63,125568,125569],{},[29,125570],{"alt":138,"src":125571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[63,125573,125574],{},"windows-->linux:",[63,125576,125577],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[63,125579,125580],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[63,125582,125583],{},"linux传输文件到windows",[63,125585,125586],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[58,125588,125590],{"id":125589},"_764-易忘知识","7.6.4 易忘知识",[63,125592,125593],{},"操作系统内核查看",[133,125595,125596],{"className":118171,"code":122165,"language":118173,"meta":138,"style":138},[140,125597,125598],{"__ignoreMap":138},[143,125599,125600,125602],{"class":145,"line":146},[143,125601,71085],{"class":156},[143,125603,122174],{"class":280},[63,125605,125606],{},[29,125607],{"alt":138,"src":125608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[63,125610,125611],{},[29,125612],{"alt":138,"src":125613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[133,125615,125617],{"className":118171,"code":125616,"language":118173,"meta":138,"style":138},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[140,125618,125619,125631],{"__ignoreMap":138},[143,125620,125621,125623,125626,125629],{"class":145,"line":146},[143,125622,122382],{"class":156},[143,125624,125625],{"class":163}," mvtest",[143,125627,125628],{"class":163}," mvtest2",[143,125630,3574],{"class":149},[143,125632,125633],{"class":145,"line":35},[143,125634,125635],{"class":156},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[63,125637,125638],{},[29,125639],{"alt":138,"src":125640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[63,125642,125643],{},[29,125644],{"alt":138,"src":125645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[63,125647,125648,125649,125652],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[140,125650,125651],{},"du -a"," 可以快速查看磁盘使用细节。",[58,125654,125656],{"id":125655},"_765-vim","7.6.5 Vim",[63,125658,125659],{},[29,125660],{"alt":138,"src":125661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[63,125663,125664],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[63,125666,125667],{},"一开始进去为命令模式，此时点击输入的字母为命令",[63,125669,125670],{},[25,125671,125672],{},"1.命令模式：",[63,125674,125675],{},"i 切换到输入模式，在光标当前位置开始输入文本",[63,125677,125678],{},"x 删除当前光标所在处的字符",[63,125680,125681],{},"：切换到底线命令模式，以在最底一行输入命令",[63,125683,125684],{},"a 进行插入模式，在光标下一个位置输入文本",[63,125686,125687],{},"o 在当前的下方插入一个新行，并进入插入模式",[63,125689,125690],{},"0 在当前行的上方插入一个新行，并进入插入模式",[63,125692,125693],{},"dd 剪切当前行",[63,125695,125696],{},"yy 复制当前行",[63,125698,125699],{},"p 粘贴剪贴板内容到光标下方",[63,125701,125702],{},"P 粘贴剪贴板内容到光标上方",[63,125704,125705],{},"u 撤销上一次操作",[63,125707,125708],{},"ctrl+r 重做上一次操作",[63,125710,125711,125713],{},[1836,125712],{}," 保存文件",[63,125715,125716,125718],{},[1686,125717],{}," 退出Vim编辑器",[63,125720,125721,125723],{},[1686,125722],{},"! 强制退出Vim编辑器，不保存修改",[63,125725,125726],{},[25,125727,125728],{},"2.输入模式：",[63,125730,125731],{},[29,125732],{"alt":138,"src":125733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[63,125735,125736],{},[25,125737,125738],{},"3.底线命令模式：",[63,125740,125741],{},[29,125742],{"alt":138,"src":125743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[63,125745,125746],{},"按下esc可以退出底线命令模式",[58,125748,125750],{"id":125749},"_766-apt","7.6.6 apt",[63,125752,125753],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[58,125755,125757],{"id":125756},"_767-home与root的区别","7.6.7 home与root的区别",[63,125759,125760],{},[29,125761],{"alt":138,"src":125762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[63,125764,125765],{},[29,125766],{"alt":138,"src":125767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[63,125769,125770],{},[29,125771],{"alt":138,"src":125772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[63,125774,125775],{},[29,125776],{"alt":138,"src":125777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[58,125779,125781],{"id":125780},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[63,125783,125784],{},[67,125785,125786],{"href":125786,"rel":125787},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[71],[19,125789,125790,125793],{},[22,125791,125792],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[22,125794,125795],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[63,125797,125798],{},[29,125799],{"alt":138,"src":125800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[63,125802,125803],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[63,125805,125806],{},[29,125807],{"alt":138,"src":125808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[133,125810,125812],{"className":121691,"code":125811,"language":121693,"meta":121694,"style":138},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[140,125813,125814,125819],{"__ignoreMap":138},[143,125815,125816],{"class":145,"line":146},[143,125817,125818],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[143,125820,125821],{"class":145,"line":35},[143,125822,125823],{},".\u002Fpycharm.sh\n",[63,125825,125826],{},"3️⃣创建.desktop文件",[63,125828,125829],{},[25,125830,125831],{},"原理：",[232,125833,125834,125844],{},[22,125835,125836,125837,125843],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[25,125838,125839,125842],{},[140,125840,125841],{},".desktop"," 文件"," 来识别应用。",[22,125845,125846,125848,125849],{},[140,125847,125841],{}," 文件相当于一个“应用注册表”，告诉系统：",[232,125850,125851,125854,125857,125860,125863],{},[22,125852,125853],{},"应用名字（Name）",[22,125855,125856],{},"图标（Icon）",[22,125858,125859],{},"执行命令（Exec）",[22,125861,125862],{},"分类（Categories）",[22,125864,125865],{},"是否需要终端（Terminal）",[133,125867,125869],{"className":121691,"code":125868,"language":121693,"meta":121694,"style":138},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[140,125870,125871,125876],{"__ignoreMap":138},[143,125872,125873],{"class":145,"line":146},[143,125874,125875],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[143,125877,125878],{"class":145,"line":35},[143,125879,125880],{},"nano pycharm.desktop\n",[63,125882,125883],{},"nano是一个命令行下的编辑器，也可以使用vim",[133,125885,125887],{"className":121691,"code":125886,"language":121693,"meta":121694,"style":138},"[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",[140,125888,125889,125894,125899,125904,125909,125914,125919,125924,125929,125934],{"__ignoreMap":138},[143,125890,125891],{"class":145,"line":146},[143,125892,125893],{},"[Desktop Entry]\n",[143,125895,125896],{"class":145,"line":35},[143,125897,125898],{},"Version=1.0\n",[143,125900,125901],{"class":145,"line":46},[143,125902,125903],{},"Type=Application\n",[143,125905,125906],{"class":145,"line":293},[143,125907,125908],{},"Name=PyCharm\n",[143,125910,125911],{"class":145,"line":306},[143,125912,125913],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[143,125915,125916],{"class":145,"line":319},[143,125917,125918],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[143,125920,125921],{"class":145,"line":332},[143,125922,125923],{},"Comment=JetBrains PyCharm IDE\n",[143,125925,125926],{"class":145,"line":345},[143,125927,125928],{},"Categories=Development;IDE;\n",[143,125930,125931],{"class":145,"line":701},[143,125932,125933],{},"Terminal=false\n",[143,125935,125936],{"class":145,"line":707},[143,125937,125938],{},"StartupWMClass=jetbrains-pycharm\n",[232,125940,125941,125947,125953,125959],{},[22,125942,125943,125946],{},[140,125944,125945],{},"Exec"," → 点击图标时执行的命令",[22,125948,125949,125952],{},[140,125950,125951],{},"Icon"," → 显示在菜单和桌面上的图标",[22,125954,125955,125958],{},[140,125956,125957],{},"Terminal=false"," → 不打开终端",[22,125960,125961,125964],{},[140,125962,125963],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125966,125967,125968],"blockquote",{},[63,125969,125970,125971,125973,125974],{},"可以理解成 ",[140,125972,125841],{}," 文件是 Linux 的 ",[25,125975,125976],{},"快捷方式配置文件",[63,125978,125979],{},"4️⃣设置可执行权限",[133,125981,125983],{"className":121691,"code":125982,"language":121693,"meta":121694,"style":138},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[140,125984,125985],{"__ignoreMap":138},[143,125986,125987],{"class":145,"line":146},[143,125988,125982],{},[63,125990,125991],{},"5️⃣桌面图标启动的话如下：",[133,125993,125995],{"className":121691,"code":125994,"language":121693,"meta":121694,"style":138},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[140,125996,125997,126002],{"__ignoreMap":138},[143,125998,125999],{"class":145,"line":146},[143,126000,126001],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[143,126003,126004],{"class":145,"line":35},[143,126005,126006],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[19,126008,126009],{"start":46},[22,126010,126011],{},"下载Appimage文件实现软件的安装",[63,126013,126014],{},"1️⃣先下载appimage",[63,126016,126017],{},[67,126018,126019],{"href":126019,"rel":126020},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[71],[63,126022,126023],{},[29,126024],{"alt":138,"src":126025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[63,126027,126028],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[63,126030,126031],{},[29,126032],{"alt":138,"src":126033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[63,126035,126036],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[63,126038,126039],{},[29,126040],{"alt":138,"src":126041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[63,126043,126044],{},[29,126045],{"alt":138,"src":126046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[63,126048,126049,126050,126053],{},"3️⃣给他们放在",[140,126051,126052],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[63,126055,126056],{},"4️⃣给软件执行权限",[133,126058,126060],{"className":121691,"code":126059,"language":121693,"meta":121694,"style":138},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[140,126061,126062,126067],{"__ignoreMap":138},[143,126063,126064],{"class":145,"line":146},[143,126065,126066],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[143,126068,126069],{"class":145,"line":35},[143,126070,126071],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[63,126073,126074],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[133,126076,126078],{"className":118171,"code":126077,"language":118173,"meta":138,"style":138},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[140,126079,126080,126087,126094,126100],{"__ignoreMap":138},[143,126081,126082,126084],{"class":145,"line":146},[143,126083,102152],{"class":280},[143,126085,126086],{"class":163}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[143,126088,126089,126091],{"class":145,"line":35},[143,126090,102159],{"class":156},[143,126092,126093],{"class":163}," .\u002Fqqmusic.desktop\n",[143,126095,126096,126098],{"class":145,"line":46},[143,126097,125142],{"class":156},[143,126099,126093],{"class":163},[143,126101,126102,126104,126106,126108],{"class":145,"line":293},[143,126103,25474],{"class":156},[143,126105,25477],{"class":163},[143,126107,124008],{"class":163},[143,126109,126093],{"class":163},[63,126111,126112,126114],{},[140,126113,102159],{},"：一个 Linux 命令，主要功能是：",[232,126116,126117,126120],{},[22,126118,126119],{},"如果文件不存在，就创建一个新的空文件",[22,126121,126122],{},"如果文件已存在，就更新该文件的最后修改时间",[133,126124,126126],{"className":121691,"code":126125,"language":121693,"meta":121694,"style":138},"[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",[140,126127,126128,126132,126137,126142,126147,126151,126156],{"__ignoreMap":138},[143,126129,126130],{"class":145,"line":146},[143,126131,125893],{},[143,126133,126134],{"class":145,"line":35},[143,126135,126136],{},"Name=QQ音乐\n",[143,126138,126139],{"class":145,"line":46},[143,126140,126141],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[143,126143,126144],{"class":145,"line":293},[143,126145,126146],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[143,126148,126149],{"class":145,"line":306},[143,126150,125903],{},[143,126152,126153],{"class":145,"line":319},[143,126154,126155],{},"Categories=Audio;Music;Player;\n",[143,126157,126158],{"class":145,"line":332},[143,126159,126160],{},"Comment=QQ Music Client for Linux\n",[63,126162,126163],{},"将文件复制进去",[63,126165,126166],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[63,126168,126169],{},[29,126170],{"alt":138,"src":126171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[63,126173,126174],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[63,126176,126177],{},[29,126178],{"alt":138,"src":126179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[63,126181,126182,126183,126186,126187,126190],{},"如果你用的不是KDE，那么也可以直接修改",[140,126184,126185],{},"qqmuic.desktop","：在exec的末尾加上",[140,126188,126189],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[133,126192,126194],{"className":121691,"code":126193,"language":121693,"meta":121694,"style":138},"[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",[140,126195,126196,126200,126204,126209,126213,126217,126221],{"__ignoreMap":138},[143,126197,126198],{"class":145,"line":146},[143,126199,125893],{},[143,126201,126202],{"class":145,"line":35},[143,126203,126136],{},[143,126205,126206],{"class":145,"line":46},[143,126207,126208],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[143,126210,126211],{"class":145,"line":293},[143,126212,126146],{},[143,126214,126215],{"class":145,"line":306},[143,126216,125903],{},[143,126218,126219],{"class":145,"line":319},[143,126220,126155],{},[143,126222,126223],{"class":145,"line":332},[143,126224,126160],{},[63,126226,126227],{},[29,126228],{"alt":138,"src":126229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[63,126231,126232],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[133,126234,126236],{"className":121691,"code":126235,"language":121693,"meta":121694,"style":138},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[140,126237,126238],{"__ignoreMap":138},[143,126239,126240],{"class":145,"line":146},[143,126241,126235],{},[19,126243,126244],{"start":293},[22,126245,126246],{},"去Flathub上安装软件",[63,126248,126249],{},[67,126250,126251],{"href":126251,"rel":126252},"https:\u002F\u002Fflathub.org\u002F",[71],[63,126254,126255],{},"1️⃣去上面的官网搜索软件+下载软件",[63,126257,126258],{},[29,126259],{"alt":138,"src":126260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[133,126262,126264],{"className":121691,"code":126263,"language":121693,"meta":121694,"style":138},"flatpak install flathub com.obsproject.Studio\n",[140,126265,126266],{"__ignoreMap":138},[143,126267,126268],{"class":145,"line":146},[143,126269,126263],{},[63,126271,126272],{},[29,126273],{"alt":138,"src":126274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[63,126276,126277],{},"2️⃣运行软件",[63,126279,126280],{},"a.官方方式：",[63,126282,126283],{},[29,126284],{"alt":138,"src":126285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[133,126287,126288],{"className":121691,"code":126263,"language":121693,"meta":121694,"style":138},[140,126289,126290],{"__ignoreMap":138},[143,126291,126292],{"class":145,"line":146},[143,126293,126263],{},[63,126295,126296],{},"b.当普通软件运行：",[63,126298,126299],{},[29,126300],{"alt":138,"src":126301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[63,126303,126304],{},[29,126305],{"alt":138,"src":126306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[954,126308,126309],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":138,"searchDepth":35,"depth":35,"links":126311},[126312,126313,126318,126319,126325,126326],{"id":123044,"depth":35,"text":123045},{"id":123386,"depth":35,"text":123387,"children":126314},[126315,126316,126317],{"id":123390,"depth":46,"text":123391},{"id":123457,"depth":46,"text":123458},{"id":123718,"depth":46,"text":123719},{"id":123871,"depth":35,"text":123872},{"id":124109,"depth":35,"text":124110,"children":126320},[126321,126322,126323,126324],{"id":124161,"depth":46,"text":124162},{"id":124447,"depth":46,"text":124448},{"id":124718,"depth":46,"text":124719},{"id":124977,"depth":46,"text":124978},{"id":125036,"depth":35,"text":125037},{"id":125337,"depth":35,"text":125338,"children":126327},[126328,126329,126330,126331,126332,126333,126334,126335],{"id":125341,"depth":46,"text":125342},{"id":125353,"depth":46,"text":125354},{"id":125565,"depth":46,"text":125566},{"id":125589,"depth":46,"text":125590},{"id":125655,"depth":46,"text":125656},{"id":125749,"depth":46,"text":125750},{"id":125756,"depth":46,"text":125757},{"id":125780,"depth":46,"text":125781},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123036,"description":973},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126342,"title":126343,"body":126344,"description":973,"extension":974,"meta":126348,"navigation":976,"path":126349,"seo":126350,"stem":126351,"__hash__":126352},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126345,"toc":126346},[],{"title":138,"searchDepth":35,"depth":35,"links":126347},[],{"category":31161},"\u002Fwiki\u002F2025-01-27-linux",{"title":126343,"description":973},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126354,"title":126355,"body":126356,"description":126360,"extension":974,"meta":126751,"navigation":976,"path":126752,"seo":126753,"stem":126754,"__hash__":126755},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126357,"toc":126749},[126358,126361,126365,126382,126385,126438,126442,126444,126484,126493,126497,126500,126741,126746],[63,126359,126360],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126362,126364],{"id":126363},"_1ubuntu环境配置","1.Ubuntu环境配置",[19,126366,126367,126370,126373,126376,126379],{},[22,126368,126369],{},"ubuntu环境换源",[22,126371,126372],{},"安装cuda",[22,126374,126375],{},"安装miniconda",[22,126377,126378],{},"安装pytorch",[22,126380,126381],{},"安装genesis",[63,126383,126384],{},"参考链接：",[133,126386,126388],{"className":24720,"code":126387,"language":24722,"meta":138,"style":138},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[140,126389,126390],{"__ignoreMap":138},[143,126391,126392,126395,126398,126401,126403,126406,126409,126411,126414,126417,126419,126422,126425,126427,126430,126433,126435],{"class":145,"line":146},[143,126393,126394],{"class":156},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[143,126396,126397],{"class":163},"=blogdetail",[143,126399,126400],{"class":149},"&sharetype",[143,126402,160],{"class":755},[143,126404,126405],{"class":163},"blogdetail",[143,126407,126408],{"class":149},"&sharerId",[143,126410,160],{"class":755},[143,126412,126413],{"class":163},"144728092",[143,126415,126416],{"class":149},"&sharerefer",[143,126418,160],{"class":755},[143,126420,126421],{"class":163},"PC",[143,126423,126424],{"class":149},"&sharesource",[143,126426,160],{"class":755},[143,126428,126429],{"class":163},"qq_69379513",[143,126431,126432],{"class":149},"&sharefrom",[143,126434,160],{"class":755},[143,126436,126437],{"class":163},"from_link\n",[10,126439,126441],{"id":126440},"_2genesis-报错issue","2.Genesis 报错issue",[63,126443,126384],{},[133,126445,126446],{"className":24720,"code":126387,"language":24722,"meta":138,"style":138},[140,126447,126448],{"__ignoreMap":138},[143,126449,126450,126452,126454,126456,126458,126460,126462,126464,126466,126468,126470,126472,126474,126476,126478,126480,126482],{"class":145,"line":146},[143,126451,126394],{"class":156},[143,126453,126397],{"class":163},[143,126455,126400],{"class":149},[143,126457,160],{"class":755},[143,126459,126405],{"class":163},[143,126461,126408],{"class":149},[143,126463,160],{"class":755},[143,126465,126413],{"class":163},[143,126467,126416],{"class":149},[143,126469,160],{"class":755},[143,126471,126421],{"class":163},[143,126473,126424],{"class":149},[143,126475,160],{"class":755},[143,126477,126429],{"class":163},[143,126479,126432],{"class":149},[143,126481,160],{"class":755},[143,126483,126437],{"class":163},[133,126485,126487],{"className":24720,"code":126486,"language":24722,"meta":138,"style":138},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[140,126488,126489],{"__ignoreMap":138},[143,126490,126491],{"class":145,"line":146},[143,126492,126486],{"class":156},[10,126494,126496],{"id":126495},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[63,126498,126499],{},"hello_robot.py",[133,126501,126503],{"className":31276,"code":126502,"language":31278,"meta":138,"style":138},"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",[140,126504,126505,126511,126526,126530,126542,126554,126558,126571,126575,126594,126604,126614,126628,126632,126636,126641,126645,126655,126662,126676,126683,126693,126698,126702,126720,126725,126729,126736],{"__ignoreMap":138},[143,126506,126507,126509],{"class":145,"line":146},[143,126508,31290],{"class":755},[143,126510,46203],{"class":149},[143,126512,126513,126516,126519,126521,126523],{"class":145,"line":35},[143,126514,126515],{"class":149},"os.environ[",[143,126517,126518],{"class":163},"'PYOPENGL_PLATFORM'",[143,126520,5343],{"class":149},[143,126522,160],{"class":755},[143,126524,126525],{"class":163}," 'glx'\n",[143,126527,126528],{"class":145,"line":46},[143,126529,3300],{"emptyLinePlaceholder":976},[143,126531,126532,126534,126537,126539],{"class":145,"line":293},[143,126533,31290],{"class":755},[143,126535,126536],{"class":149}," genesis ",[143,126538,32281],{"class":755},[143,126540,126541],{"class":149}," gs\n",[143,126543,126544,126546,126549,126551],{"class":145,"line":306},[143,126545,31635],{"class":755},[143,126547,126548],{"class":149}," pynput ",[143,126550,31290],{"class":755},[143,126552,126553],{"class":149}," keyboard\n",[143,126555,126556],{"class":145,"line":319},[143,126557,3300],{"emptyLinePlaceholder":976},[143,126559,126560,126563,126566,126568],{"class":145,"line":332},[143,126561,126562],{"class":149},"gs.init(",[143,126564,126565],{"class":6116},"backend",[143,126567,160],{"class":755},[143,126569,126570],{"class":149},"gs.gpu)\n",[143,126572,126573],{"class":145,"line":345},[143,126574,3300],{"emptyLinePlaceholder":976},[143,126576,126577,126580,126582,126585,126588,126590,126592],{"class":145,"line":701},[143,126578,126579],{"class":149},"scene ",[143,126581,160],{"class":755},[143,126583,126584],{"class":149}," gs.Scene(",[143,126586,126587],{"class":6116},"show_viewer",[143,126589,160],{"class":755},[143,126591,32374],{"class":280},[143,126593,1055],{"class":149},[143,126595,126596,126599,126601],{"class":145,"line":707},[143,126597,126598],{"class":149},"plane ",[143,126600,160],{"class":755},[143,126602,126603],{"class":149}," scene.add_entity(gs.morphs.Plane())\n",[143,126605,126606,126609,126611],{"class":145,"line":727},[143,126607,126608],{"class":149},"franka ",[143,126610,160],{"class":755},[143,126612,126613],{"class":149}," scene.add_entity(\n",[143,126615,126616,126619,126621,126623,126626],{"class":145,"line":2518},[143,126617,126618],{"class":149},"    gs.morphs.MJCF(",[143,126620,46252],{"class":6116},[143,126622,160],{"class":755},[143,126624,126625],{"class":163},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[143,126627,38945],{"class":149},[143,126629,126630],{"class":145,"line":2524},[143,126631,1055],{"class":149},[143,126633,126634],{"class":145,"line":2529},[143,126635,3300],{"emptyLinePlaceholder":976},[143,126637,126638],{"class":145,"line":2543},[143,126639,126640],{"class":149},"scene.build()\n",[143,126642,126643],{"class":145,"line":2548},[143,126644,3300],{"emptyLinePlaceholder":976},[143,126646,126647,126649,126652],{"class":145,"line":2554},[143,126648,32845],{"class":755},[143,126650,126651],{"class":156}," on_press",[143,126653,126654],{"class":149},"(key):\n",[143,126656,126657,126660],{"class":145,"line":2575},[143,126658,126659],{"class":755},"    try",[143,126661,4639],{"class":149},[143,126663,126664,126666,126669,126671,126674],{"class":145,"line":2580},[143,126665,3397],{"class":755},[143,126667,126668],{"class":149}," key.char ",[143,126670,3849],{"class":755},[143,126672,126673],{"class":163}," 'q'",[143,126675,4639],{"class":149},[143,126677,126678,126680],{"class":145,"line":2594},[143,126679,16630],{"class":755},[143,126681,126682],{"class":280}," False\n",[143,126684,126685,126688,126691],{"class":145,"line":2599},[143,126686,126687],{"class":755},"    except",[143,126689,126690],{"class":280}," AttributeError",[143,126692,4639],{"class":149},[143,126694,126695],{"class":145,"line":2628},[143,126696,126697],{"class":755},"        pass\n",[143,126699,126700],{"class":145,"line":2633},[143,126701,3300],{"emptyLinePlaceholder":976},[143,126703,126704,126707,126709,126712,126715,126717],{"class":145,"line":2650},[143,126705,126706],{"class":149},"listener ",[143,126708,160],{"class":755},[143,126710,126711],{"class":149}," keyboard.Listener(",[143,126713,126714],{"class":6116},"on_press",[143,126716,160],{"class":755},[143,126718,126719],{"class":149},"on_press)\n",[143,126721,126722],{"class":145,"line":2655},[143,126723,126724],{"class":149},"listener.start()\n",[143,126726,126727],{"class":145,"line":2660},[143,126728,3300],{"emptyLinePlaceholder":976},[143,126730,126731,126733],{"class":145,"line":2665},[143,126732,109538],{"class":755},[143,126734,126735],{"class":149}," listener.running:\n",[143,126737,126738],{"class":145,"line":2679},[143,126739,126740],{"class":149},"    scene.step()\n",[63,126742,126743],{},[29,126744],{"alt":138,"src":126745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[954,126747,126748],{},"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":138,"searchDepth":35,"depth":35,"links":126750},[],{"category":24276},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126355,"description":126360},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126757,"title":126758,"body":126759,"description":973,"extension":974,"meta":126774,"navigation":976,"path":126775,"seo":126776,"stem":126777,"__hash__":126778},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126760,"toc":126771},[126761,126764,126768],[10,126762,126758],{"id":126763},"_1-基础知识",[14,126765,126767],{"id":126766},"_11-js的组成","1.1 js的组成",[63,126769,126770],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":138,"searchDepth":35,"depth":35,"links":126772},[126773],{"id":126766,"depth":35,"text":126767},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126758,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126780,"title":126781,"body":126782,"description":973,"extension":974,"meta":126921,"navigation":976,"path":126922,"seo":126923,"stem":126924,"__hash__":126925},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126783,"toc":126909},[126784,126787,126791,126794,126798,126808,126812,126815,126818,126821,126825,126832,126838,126842,126848,126859,126863,126866,126870,126873,126877,126880,126884,126887,126891,126894,126897,126900,126903,126906],[10,126785,126781],{"id":126786},"_2-vscode必备内容",[14,126788,126790],{"id":126789},"_21-标签分类","2.1 标签分类",[63,126792,126793],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126795,126797],{"id":126796},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[63,126799,126800,126801,126803,126804,126807],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[140,126802,1268],{}," 然后按 ",[140,126805,126806],{},"Tab","，快速自动生成基本结构。",[14,126809,126811],{"id":126810},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[63,126813,126814],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[63,126816,126817],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[63,126819,126820],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126822,126824],{"id":126823},"_24-视图缩放","2.4 视图缩放",[63,126826,126827,126828,126831],{},"缩放视图 ",[140,126829,126830],{},"ctrl+"," 可实现代码增大。",[63,126833,126834,126837],{},[140,126835,126836],{},"ctrl-"," 可实现代码减小。",[14,126839,126841],{"id":126840},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[63,126843,126844,126845,29283],{},"VSCode 新建文件快捷键为 ",[140,126846,126847],{},"ctrl+N",[63,126849,126850,126851,126854,126855,126858],{},"保存快捷键为 ",[140,126852,126853],{},"ctrl+S","，将文本保存为 ",[140,126856,126857],{},".html"," 文件。",[14,126860,126862],{"id":126861},"_26-auto-rename-tag","2.6 Auto Rename Tag",[63,126864,126865],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126867,126869],{"id":126868},"_27-vscode-icons","2.7 vscode-icons",[63,126871,126872],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126874,126876],{"id":126875},"_28-easy-less","2.8 Easy LESS",[63,126878,126879],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126881,126883],{"id":126882},"_29-会了吧插件","2.9 会了吧插件",[63,126885,126886],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126888,126890],{"id":126889},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[63,126892,126893],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[63,126895,126896],{},"②选定多个相同的单词:ctrl+D",[63,126898,126899],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[63,126901,126902],{},"④全局替换某些单词:ctrl+h",[63,126904,126905],{},"⑤快速定位到某一行:ctrl+g",[63,126907,126908],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":138,"searchDepth":35,"depth":35,"links":126910},[126911,126912,126913,126914,126915,126916,126917,126918,126919,126920],{"id":126789,"depth":35,"text":126790},{"id":126796,"depth":35,"text":126797},{"id":126810,"depth":35,"text":126811},{"id":126823,"depth":35,"text":126824},{"id":126840,"depth":35,"text":126841},{"id":126861,"depth":35,"text":126862},{"id":126868,"depth":35,"text":126869},{"id":126875,"depth":35,"text":126876},{"id":126882,"depth":35,"text":126883},{"id":126889,"depth":35,"text":126890},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126781,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126927,"title":126928,"body":126929,"description":973,"extension":974,"meta":127088,"navigation":976,"path":127089,"seo":127090,"stem":127091,"__hash__":127092},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126930,"toc":127080},[126931,126934,126938,126948,126954,126960,126964,126973,126977,126982,126985,126988,126992,126995,127005,127014,127023,127032,127042,127049,127054,127059,127072],[10,126932,126928],{"id":126933},"_3-html文本与容器标签",[14,126935,126937],{"id":126936},"_31-标题标签","3.1 标题标签",[63,126939,126940,126943,126944,126947],{},[140,126941,126942],{},"\u003Ch1>","我是一级标签",[140,126945,126946],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[63,126949,126950,126943,126952],{},[140,126951,126942],{},[140,126953,126946],{},[63,126955,124210,126956,126959],{},[140,126957,126958],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126961,126963],{"id":126962},"_32-段落标签","3.2 段落标签",[63,126965,126966,126969,126970],{},[140,126967,126968],{},"\u003Cp>","....",[140,126971,126972],{},"\u003C\u002Fp>",[14,126974,126976],{"id":126975},"_33-换行标签","3.3 换行标签",[63,126978,126979],{},[140,126980,126981],{},"\u003Cbr \u002F>",[63,126983,126984],{},"具有强制换行的作用",[63,126986,126987],{},"单标签",[14,126989,126991],{"id":126990},"_34-文本格式化标签","3.4 文本格式化标签",[63,126993,126994],{},"提供粗体、斜体和下划线等效果",[63,126996,126997,126998,83417,127001,127004],{},"加粗：",[140,126999,127000],{},"\u003Cstrong>...\u003C\u002Fstrong>",[140,127002,127003],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[63,127006,127007,127008,83417,127011,127004],{},"斜体：",[140,127009,127010],{},"\u003Cem>...\u003C\u002Fem>",[140,127012,127013],{},"\u003Ci>...\u003C\u002Fi>",[63,127015,127016,127017,83417,127020,127004],{},"删除线：",[140,127018,127019],{},"\u003Cdel>...\u003C\u002Fdel>",[140,127021,127022],{},"\u003Cs>...\u003C\u002Fs>",[63,127024,127025,127026,83417,127029,127004],{},"下划线：",[140,127027,127028],{},"\u003Cins>...\u003C\u002Fins>",[140,127030,127031],{},"\u003Cu>...\u003C\u002Fu>",[14,127033,127035,127036,19308,127039,103569],{"id":127034},"_35-div和span标签","3.5 ",[140,127037,127038],{},"\u003Cdiv>",[140,127040,127041],{},"\u003Cspan>",[63,127043,127044,101894,127046,127048],{},[140,127045,127038],{},[140,127047,127041],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[63,127050,127051],{},[140,127052,127053],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[63,127055,127056],{},[140,127057,127058],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[63,127060,127061,127062,127064,127065,127067,127068,127071],{},"两者特点：①",[140,127063,127038],{}," 标签用来布局，但一行通常只放一个 ",[140,127066,127038],{},"。可以理解为一个大盒子，独占一行，在 ",[140,127069,127070],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[63,127073,78128,127074,127076,127077,127079],{},[140,127075,127041],{}," 标签也可用于布局，一行可以放多个 ",[140,127078,127041],{},"，可理解为小盒子。",{"title":138,"searchDepth":35,"depth":35,"links":127081},[127082,127083,127084,127085,127086],{"id":126936,"depth":35,"text":126937},{"id":126962,"depth":35,"text":126963},{"id":126975,"depth":35,"text":126976},{"id":126990,"depth":35,"text":126991},{"id":127034,"depth":35,"text":127087},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126928,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127094,"title":127095,"body":127096,"description":973,"extension":974,"meta":127292,"navigation":976,"path":127293,"seo":127294,"stem":127295,"__hash__":127296},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127097,"toc":127284},[127098,127101,127105,127108,127114,127121,127127,127133,127136,127139,127142,127145,127148,127151,127154,127158,127161,127164,127167,127173,127179,127185,127192,127196,127202,127208,127211,127214,127220,127226,127232,127235,127238,127242,127245,127255,127261,127265,127274,127278,127281],[10,127099,127095],{"id":127100},"_4-html图像与链接",[14,127102,127104],{"id":127103},"_41-图像标签","4.1 图像标签",[63,127106,127107],{},"（1）标签",[63,127109,127110,127113],{},[140,127111,127112],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[63,127115,127116,127117,127120],{},"src是",[140,127118,127119],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[63,127122,127123,127124],{},"alt:文本，替换文本。图像不能显示的文字 ",[140,127125,127126],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[63,127128,127129,127130],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[140,127131,127132],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[63,127134,127135],{},"width:像素，设置图像的宽度",[63,127137,127138],{},"height:像素，设置图像的高度",[63,127140,127141],{},"border：像素，设置图像的边框粗细",[63,127143,127144],{},"（2）图像标签属性的注意点：",[63,127146,127147],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[63,127149,127150],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[63,127152,127153],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127155,127157],{"id":127156},"_42-路径注意要点","4.2 路径注意要点：",[63,127159,127160],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[63,127162,127163],{},"（2）根目录：就是打开文件夹的第一层根目录",[63,127165,127166],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[63,127168,127169,127170],{},"①同一级路径：图像文件位于HTML文件同一级，如",[140,127171,127172],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[63,127174,127175,127176],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[140,127177,127178],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[63,127180,127181,127182],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[140,127183,127184],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[63,127186,127187,127188,1292],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[67,127189,127190],{"href":127190,"rel":127191},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[71],[14,127193,127195],{"id":127194},"_43-超链接标签","4.3 超链接标签",[63,127197,127198,127201],{},[140,127199,127200],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[63,127203,127204,127205],{},"①语法格式：",[140,127206,127207],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[63,127209,127210],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[63,127212,127213],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[63,127215,127216,127217],{},"③链接分类：外部链接：",[140,127218,127219],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[63,127221,127222,127223],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[140,127224,127225],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[63,127227,127228,127229],{},"空链接：如果当时没有确定链接目标时，",[140,127230,127231],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[63,127233,127234],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[63,127236,127237],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127239,127241],{"id":127240},"_44-锚点链接","4.4 锚点链接",[63,127243,127244],{},"点我们点击链接，可以快速定位到页面中的某个位置",[63,127246,127247,127248,127251,127252],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[140,127249,127250],{},"\u003Ca href=\"#two\">","第二级",[140,127253,127254],{},"\u003C\u002Fa>",[63,127256,127257,127258],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[140,127259,127260],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127262,127264],{"id":127263},"_45-注释标签","4.5 注释标签",[63,127266,127267,127270,127271],{},[140,127268,127269],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[140,127272,127273],{},"ctrl+\u002F",[14,127275,127277],{"id":127276},"_46-特殊字符","4.6 特殊字符",[63,127279,127280],{},"可以实现添加多个空格",[29,127282],{"style":31,"src":127283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":138,"searchDepth":35,"depth":35,"links":127285},[127286,127287,127288,127289,127290,127291],{"id":127103,"depth":35,"text":127104},{"id":127156,"depth":35,"text":127157},{"id":127194,"depth":35,"text":127195},{"id":127240,"depth":35,"text":127241},{"id":127263,"depth":35,"text":127264},{"id":127276,"depth":35,"text":127277},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127095,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127298,"title":127299,"body":127300,"description":973,"extension":974,"meta":127591,"navigation":976,"path":127592,"seo":127593,"stem":127594,"__hash__":127595},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127301,"toc":127582},[127302,127305,127309,127312,127315,127318,127321,127324,127327,127330,127333,127336,127356,127362,127366,127369,127372,127375,127378,127381,127384,127388,127391,127394,127397,127400,127413,127418,127421,127424,127437,127440,127443,127446,127449,127452,127456,127459,127466,127469,127472,127475,127478,127481,127487,127490,127493,127499,127502,127505,127508,127514,127517,127520,127534,127541,127544,127547,127554,127563,127566,127569,127572,127576,127579],[10,127303,127299],{"id":127304},"_5-html表格列表与表单",[14,127306,127308],{"id":127307},"_51-表格标签","5.1 表格标签",[63,127310,127311],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[63,127313,127314],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[63,127316,127317],{},"②表格基本语法：",[29,127319],{"style":31,"src":127320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[63,127322,127323],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[29,127325],{"style":31,"src":127326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[63,127328,127329],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[29,127331],{"style":31,"src":127332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[63,127334,127335],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[63,127337,127338,127341,127342,127344,127345,127348,127349,127351,127352,127355],{},[140,127339,127340],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[140,127343,127340],{},"内部必须拥有",[140,127346,127347],{},"\u003Ctr>","标签，一般位于第一行，",[140,127350,127340],{},"比",[140,127353,127354],{},"\u003Cth>","范围广",[63,127357,127358,127361],{},[140,127359,127360],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127363,127365],{"id":127364},"_52-合并单元格","5.2 合并单元格",[63,127367,127368],{},"（1）合并单元格方式：",[63,127370,127371],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[63,127373,127374],{},"②跨列合并：colspan=\"合并单元格的个数\"",[63,127376,127377],{},"（2）目标单元格：",[63,127379,127380],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[63,127382,127383],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127385,127387],{"id":127386},"_53-列表标签","5.3 列表标签",[63,127389,127390],{},"（1）分类：无序列表、有序列表、自定义列表",[63,127392,127393],{},"①无序列表：",[29,127395],{"style":31,"src":127396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[63,127398,127399],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[63,127401,127402,127405,127406,127409,127410,127412],{},[140,127403,127404],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[140,127407,127408],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[140,127411,127404],{},"中输入其他标签或文字是不对的",[63,127414,127415,127417],{},[140,127416,127408],{},"之间相当于一个容器，可以容纳所有元素",[63,127419,127420],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[63,127422,127423],{},"在css中去除前边的小圆点采用如下代码:",[133,127425,127427],{"className":257,"code":127426,"language":259,"meta":138,"style":138},"list-style: none;\n",[140,127428,127429],{"__ignoreMap":138},[143,127430,127431,127434],{"class":145,"line":146},[143,127432,127433],{"class":153},"list-style",[143,127435,127436],{"class":149},": none;\n",[63,127438,127439],{},"②有序列表：",[29,127441],{"style":31,"src":127442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[63,127444,127445],{},"③自定义列表：",[29,127447],{"style":31,"src":127448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[29,127450],{"style":31,"src":127451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127453,127455],{"id":127454},"_54-表单标签","5.4 表单标签",[63,127457,127458],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[63,127460,127461,127462,127465],{},"（1）表单域：包含单元素的区域，",[140,127463,127464],{},"\u003Cform>","标签可以实现信息的收集和传递。",[29,127467],{"style":31,"src":127468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[63,127470,127471],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[63,127473,127474],{},"表单元素提交必须有name属性",[63,127476,127477],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[63,127479,127480],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[63,127482,78105,127483,127486],{},[140,127484,127485],{},"\u003Cinput>","输入表单元素",[29,127488],{"style":31,"src":127489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[29,127491],{"style":31,"src":127492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[63,127494,127495,127496],{},"单选按钮：",[140,127497,127498],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[29,127500],{"style":31,"src":127501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[63,127503,127504],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[29,127506],{"style":31,"src":127507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[63,127509,127510,127513],{},[25,127511,127512],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[63,127515,127516],{},"②select下拉表单元素：可以节约页面控件",[29,127518],{"style":31,"src":127519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[63,127521,127522,497,127524,127527,127528,127530,127531,127533],{},[25,127523,110],{},[140,127525,127526],{},"\u003Cselect>","中至少包含一对",[140,127529,103590],{},"；在",[140,127532,103590],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[63,127535,127536,127537,127540],{},"③",[140,127538,127539],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[29,127542],{"style":31,"src":127543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[63,127545,127546],{},"3行20列",[14,127548,127550,127551,103569],{"id":127549},"_55-lable标签","5.5 ",[140,127552,127553],{},"\u003Clable>",[63,127555,127556,127557,127559,127560,127562],{},"它不是表单标签，但常常与表单标签搭配使用，",[140,127558,127553],{},"标签用于绑定一个表单标签，当点击",[140,127561,127553],{},"标签内的文本",[63,127564,127565],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[29,127567],{"style":31,"src":127568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[29,127570],{"style":31,"src":127571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,127573,127575],{"id":127574},"_56-实例","5.6 实例",[29,127577],{"style":31,"src":127578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[954,127580,127581],{},"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":138,"searchDepth":35,"depth":35,"links":127583},[127584,127585,127586,127587,127588,127590],{"id":127307,"depth":35,"text":127308},{"id":127364,"depth":35,"text":127365},{"id":127386,"depth":35,"text":127387},{"id":127454,"depth":35,"text":127455},{"id":127549,"depth":35,"text":127589},"5.5 \u003Clable>标签",{"id":127574,"depth":35,"text":127575},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127299,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127597,"title":127598,"body":127599,"description":973,"extension":974,"meta":128148,"navigation":976,"path":128149,"seo":128150,"stem":128151,"__hash__":128152},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127600,"toc":128123},[127601,127604,127608,127611,127614,127618,127621,127624,127627,127630,127633,127636,127639,127643,127646,127650,127653,127656,127659,127663,127666,127669,127672,127678,127681,127684,127687,127690,127693,127696,127699,127732,127736,127739,127742,127745,127749,127752,127755,127758,127761,127764,127768,127771,127774,127777,127781,127784,127788,127791,127795,127798,127803,127807,127810,127814,127817,127820,127823,127826,127853,127856,127860,127863,127866,127871,127874,127877,127881,127884,127889,127892,127895,127898,127902,127905,127908,127911,127915,127918,127921,127924,127928,127932,127935,127975,127978,127982,127989,127992,127996,127999,128045,128049,128052,128055,128058,128086,128090,128093,128120],[10,127602,127598],{"id":127603},"_6-css语法与文本样式",[14,127605,127607],{"id":127606},"_61-css语法规范","6.1 css语法规范",[63,127609,127610],{},"由两部分组成，选择器及一条或多条声明",[29,127612],{"style":31,"src":127613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[63,127615,127616],{},[25,127617,110],{},[63,127619,127620],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[63,127622,127623],{},"②属性与属性值以“键值对”的形式出现",[63,127625,127626],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[63,127628,127629],{},"④属性和属性值之间用英文“;”分开",[29,127631],{"style":31,"src":127632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[29,127634],{"style":31,"src":127635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[29,127637],{"style":31,"src":127638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,127640,127642],{"id":127641},"_62-css选择器","6.2 css选择器",[63,127644,127645],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[58,127647,127649],{"id":127648},"_621-标签选择器","6.2.1 标签选择器",[63,127651,127652],{},"①优点：能快速为页面中同类型的标签统一设置样式",[63,127654,127655],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[29,127657],{"style":31,"src":127658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[58,127660,127662],{"id":127661},"_622-类选择器","6.2.2 类选择器",[63,127664,127665],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[63,127667,127668],{},"②样例",[29,127670],{"style":31,"src":127671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[63,127673,127674,127675,127677],{},"③ ",[25,127676,127512],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[63,127679,127680],{},"可以理解为给这个标签起了个名字，来表示；",[63,127682,127683],{},"长名称或词组可以使用横线来为选择器命名；",[63,127685,127686],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[63,127688,127689],{},"命名要有意义；",[29,127691],{"style":31,"src":127692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[63,127694,127695],{},"类选择器也可以指定特殊的元素p.center{}",[63,127697,127698],{},"p.center和.center都对",[133,127700,127702],{"className":257,"code":127701,"language":259,"meta":138,"style":138},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[140,127703,127704,127709,127718,127728],{"__ignoreMap":138},[143,127705,127706],{"class":145,"line":146},[143,127707,127708],{"class":266},"\u002F* 类选择器指定特殊元素 *\u002F\n",[143,127710,127711,127713,127716],{"class":145,"line":35},[143,127712,63],{"class":153},[143,127714,127715],{"class":156},".center",[143,127717,275],{"class":149},[143,127719,127720,127722,127724,127726],{"class":145,"line":46},[143,127721,71406],{"class":280},[143,127723,284],{"class":149},[143,127725,327],{"class":280},[143,127727,290],{"class":149},[143,127729,127730],{"class":145,"line":293},[143,127731,348],{"class":149},[58,127733,127735],{"id":127734},"_623-多类名使用","6.2.3 多类名使用",[63,127737,127738],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[29,127740],{"style":31,"src":127741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[63,127743,127744],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[58,127746,127748],{"id":127747},"_624-id选择器","6.2.4 id选择器",[63,127750,127751],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[63,127753,127754],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[29,127756],{"style":31,"src":127757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[63,127759,127760],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[63,127762,127763],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[58,127765,127767],{"id":127766},"_625-通配符选择器","6.2.5 通配符选择器",[63,127769,127770],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[63,127772,127773],{},"* {",[63,127775,127776],{},"color=\"red\"}",[58,127778,127780],{"id":127779},"_626-总结","6.2.6 总结",[29,127782],{"style":31,"src":127783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127785,127787],{"id":127786},"_63-css字体属性","6.3 css字体属性",[63,127789,127790],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[58,127792,127794],{"id":127793},"_631-字体系列","6.3.1 字体系列",[63,127796,127797],{},"font-family: '宋体';",[63,127799,127800,127802],{},[25,127801,110],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[58,127804,127806],{"id":127805},"_632-字体大小","6.3.2 字体大小",[63,127808,127809],{},"font-size: 20px",[63,127811,127812,27371],{},[25,127813,127512],{},[63,127815,127816],{},"①px（像素）大小是网页的最常用单位",[63,127818,127819],{},"②谷歌浏览器默认为16px",[63,127821,127822],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[63,127824,127825],{},"④可以给body指定整个页面的大小：会自动引用",[133,127827,127829],{"className":257,"code":127828,"language":259,"meta":138,"style":138},"body {\n  font-size: 16px;\n}\n",[140,127830,127831,127837,127849],{"__ignoreMap":138},[143,127832,127833,127835],{"class":145,"line":146},[143,127834,52688],{"class":153},[143,127836,275],{"class":149},[143,127838,127839,127841,127843,127845,127847],{"class":145,"line":35},[143,127840,71506],{"class":280},[143,127842,284],{"class":149},[143,127844,1642],{"class":280},[143,127846,774],{"class":755},[143,127848,290],{"class":149},[143,127850,127851],{"class":145,"line":46},[143,127852,348],{"class":149},[63,127854,127855],{},"⑤标题标签比较特殊，需要单独指定大小",[58,127857,127859],{"id":127858},"_633-字体粗细","6.3.3 字体粗细",[63,127861,127862],{},"font-weight: bold;",[63,127864,127865],{},"font-weight: 100；",[63,127867,127868,127870],{},[25,127869,110],{}," ①粗体文字变细：尽量别用normal，多用数字",[63,127872,127873],{},"font-weight= 400;",[63,127875,127876],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[58,127878,127880],{"id":127879},"_634-文字样式","6.3.4 文字样式",[63,127882,127883],{},"font-style: normal；",[63,127885,127886,27371],{},[25,127887,127888],{},"属性值",[63,127890,127891],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[63,127893,127894],{},"②italic：浏览器会显示斜体的字体样式",[29,127896],{"style":31,"src":127897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[58,127899,127901],{"id":127900},"_635-字体符合属性","6.3.5 字体符合属性",[29,127903],{"style":31,"src":127904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[29,127906],{"style":31,"src":127907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[63,127909,127910],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[63,127912,127913,27371],{},[25,127914,127512],{},[63,127916,127917],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[63,127919,127920],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[63,127922,127923],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127925,127927],{"id":127926},"_64-css-test文本属性","6.4 css test文本属性",[58,127929,127931],{"id":127930},"_641-文本颜色","6.4.1 文本颜色",[63,127933,127934],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[133,127936,127938],{"className":257,"code":127937,"language":259,"meta":138,"style":138},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[140,127939,127940,127945,127951,127961,127966,127971],{"__ignoreMap":138},[143,127941,127942],{"class":145,"line":146},[143,127943,127944],{"class":266},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[143,127946,127947,127949],{"class":145,"line":35},[143,127948,63],{"class":153},[143,127950,275],{"class":149},[143,127952,127953,127955,127957,127959],{"class":145,"line":46},[143,127954,71784],{"class":280},[143,127956,284],{"class":149},[143,127958,58304],{"class":280},[143,127960,290],{"class":149},[143,127962,127963],{"class":145,"line":293},[143,127964,127965],{"class":266},"  \u002F* color: #ff0000; *\u002F\n",[143,127967,127968],{"class":145,"line":306},[143,127969,127970],{"class":266},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[143,127972,127973],{"class":145,"line":319},[143,127974,348],{"class":149},[29,127976],{"style":31,"src":127977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[58,127979,127981],{"id":127980},"_642-对齐文本","6.4.2 对齐文本",[63,127983,127984,127985,127988],{},"text-align属于用于设置元素内文本内容的 ",[25,127986,127987],{},"水平对齐"," 方式",[63,127990,127991],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[58,127993,127995],{"id":127994},"_643-装饰文本","6.4.3 装饰文本",[63,127997,127998],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[133,128000,128002],{"className":257,"code":128001,"language":259,"meta":138,"style":138},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[140,128003,128004,128010,128020,128024,128030,128041],{"__ignoreMap":138},[143,128005,128006,128008],{"class":145,"line":146},[143,128007,67],{"class":153},[143,128009,275],{"class":149},[143,128011,128012,128014,128016,128018],{"class":145,"line":35},[143,128013,71382],{"class":280},[143,128015,284],{"class":149},[143,128017,55622],{"class":280},[143,128019,290],{"class":149},[143,128021,128022],{"class":145,"line":46},[143,128023,348],{"class":149},[143,128025,128026,128028],{"class":145,"line":293},[143,128027,63],{"class":153},[143,128029,275],{"class":149},[143,128031,128032,128034,128036,128039],{"class":145,"line":306},[143,128033,71382],{"class":280},[143,128035,284],{"class":149},[143,128037,128038],{"class":280},"underline",[143,128040,290],{"class":149},[143,128042,128043],{"class":145,"line":319},[143,128044,348],{"class":149},[58,128046,128048],{"id":128047},"_644-文本缩进","6.4.4 文本缩进",[63,128050,128051],{},"实现文本的第一行首行缩进自己指定的距离",[63,128053,128054],{},"20px往右边走；-20px往左边走",[63,128056,128057],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[133,128059,128061],{"className":257,"code":128060,"language":259,"meta":138,"style":138},"p {\n  text-indent: 2em;\n}\n",[140,128062,128063,128069,128082],{"__ignoreMap":138},[143,128064,128065,128067],{"class":145,"line":146},[143,128066,63],{"class":153},[143,128068,275],{"class":149},[143,128070,128071,128074,128076,128078,128080],{"class":145,"line":35},[143,128072,128073],{"class":280},"  text-indent",[143,128075,284],{"class":149},[143,128077,1122],{"class":280},[143,128079,24451],{"class":755},[143,128081,290],{"class":149},[143,128083,128084],{"class":145,"line":46},[143,128085,348],{"class":149},[58,128087,128089],{"id":128088},"_645-行间距","6.4.5 行间距",[63,128091,128092],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[133,128094,128096],{"className":257,"code":128095,"language":259,"meta":138,"style":138},"p {\n  line-height: 1.6;\n}\n",[140,128097,128098,128104,128116],{"__ignoreMap":138},[143,128099,128100,128102],{"class":145,"line":146},[143,128101,63],{"class":153},[143,128103,275],{"class":149},[143,128105,128106,128109,128111,128114],{"class":145,"line":35},[143,128107,128108],{"class":280},"  line-height",[143,128110,284],{"class":149},[143,128112,128113],{"class":280},"1.6",[143,128115,290],{"class":149},[143,128117,128118],{"class":145,"line":46},[143,128119,348],{"class":149},[954,128121,128122],{},"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":138,"searchDepth":35,"depth":35,"links":128124},[128125,128126,128134,128141],{"id":127606,"depth":35,"text":127607},{"id":127641,"depth":35,"text":127642,"children":128127},[128128,128129,128130,128131,128132,128133],{"id":127648,"depth":46,"text":127649},{"id":127661,"depth":46,"text":127662},{"id":127734,"depth":46,"text":127735},{"id":127747,"depth":46,"text":127748},{"id":127766,"depth":46,"text":127767},{"id":127779,"depth":46,"text":127780},{"id":127786,"depth":35,"text":127787,"children":128135},[128136,128137,128138,128139,128140],{"id":127793,"depth":46,"text":127794},{"id":127805,"depth":46,"text":127806},{"id":127858,"depth":46,"text":127859},{"id":127879,"depth":46,"text":127880},{"id":127900,"depth":46,"text":127901},{"id":127926,"depth":35,"text":127927,"children":128142},[128143,128144,128145,128146,128147],{"id":127930,"depth":46,"text":127931},{"id":127980,"depth":46,"text":127981},{"id":127994,"depth":46,"text":127995},{"id":128047,"depth":46,"text":128048},{"id":128088,"depth":46,"text":128089},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127598,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128154,"title":128155,"body":128156,"description":973,"extension":974,"meta":128803,"navigation":976,"path":128804,"seo":128805,"stem":128806,"__hash__":128807},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128157,"toc":128784},[128158,128161,128165,128169,128227,128231,128241,128244,128247,128251,128276,128280,128283,128286,128289,128292,128295,128299,128302,128305,128347,128350,128376,128382,128385,128389,128393,128399,128402,128405,128408,128411,128414,128417,128462,128466,128469,128472,128476,128480,128509,128512,128517,128520,128523,128526,128529,128533,128537,128540,128542,128545,128549,128552,128556,128559,128562,128565,128569,128573,128579,128589,128592,128595,128598,128601,128604,128727,128735,128743,128781],[10,128159,128155],{"id":128160},"_7-css引入方式与选择器进阶",[14,128162,128164],{"id":128163},"_71-css引入方式","7.1 css引入方式",[58,128166,128168],{"id":128167},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[133,128170,128172],{"className":135,"code":128171,"language":137,"meta":138,"style":138},"\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n",[140,128173,128174,128182,128189,128201,128214,128219],{"__ignoreMap":138},[143,128175,128176,128178,128180],{"class":145,"line":146},[143,128177,150],{"class":149},[143,128179,954],{"class":153},[143,128181,183],{"class":149},[143,128183,128184,128187],{"class":145,"line":35},[143,128185,128186],{"class":153},"  h1",[143,128188,275],{"class":149},[143,128190,128191,128194,128196,128199],{"class":145,"line":46},[143,128192,128193],{"class":280},"    color",[143,128195,284],{"class":149},[143,128197,128198],{"class":280},"blue",[143,128200,290],{"class":149},[143,128202,128203,128206,128208,128210,128212],{"class":145,"line":293},[143,128204,128205],{"class":280},"    font-size",[143,128207,284],{"class":149},[143,128209,1841],{"class":280},[143,128211,774],{"class":755},[143,128213,290],{"class":149},[143,128215,128216],{"class":145,"line":306},[143,128217,128218],{"class":149},"  }\n",[143,128220,128221,128223,128225],{"class":145,"line":319},[143,128222,730],{"class":149},[143,128224,954],{"class":153},[143,128226,183],{"class":149},[63,128228,128229,27371],{},[25,128230,127512],{},[63,128232,78105,128233,128236,128237,128240],{},[140,128234,128235],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[140,128238,128239],{},"\u003Chead>","标签中",[63,128242,128243],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[63,128245,128246],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[58,128248,128250],{"id":128249},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[133,128252,128254],{"className":135,"code":128253,"language":137,"meta":138,"style":138},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[140,128255,128256],{"__ignoreMap":138},[143,128257,128258,128260,128262,128264,128266,128269,128272,128274],{"class":145,"line":146},[143,128259,150],{"class":149},[143,128261,63],{"class":153},[143,128263,63509],{"class":156},[143,128265,160],{"class":149},[143,128267,128268],{"class":163},"\"color: red; font-size: 16px;\"",[143,128270,128271],{"class":149},">这是一个段落\u003C\u002F",[143,128273,63],{"class":153},[143,128275,183],{"class":149},[63,128277,128278,27371],{},[25,128279,127512],{},[63,128281,128282],{},"①style其实就是标签的属性",[63,128284,128285],{},"②在双引号中间，写法要符合css规范",[63,128287,128288],{},"③可以控制当前的标签设置样式",[63,128290,128291],{},"④书写繁琐，简单时才用",[63,128293,128294],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[58,128296,128298],{"id":128297},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[63,128300,128301],{},"使用最多，单独建一个css文件，然后html引用",[63,128303,128304],{},"①css文件部分： style.css",[133,128306,128308],{"className":257,"code":128307,"language":259,"meta":138,"style":138},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[140,128309,128310,128315,128321,128331,128343],{"__ignoreMap":138},[143,128311,128312],{"class":145,"line":146},[143,128313,128314],{"class":266},"\u002F* style.css *\u002F\n",[143,128316,128317,128319],{"class":145,"line":35},[143,128318,10],{"class":153},[143,128320,275],{"class":149},[143,128322,128323,128325,128327,128329],{"class":145,"line":46},[143,128324,71784],{"class":280},[143,128326,284],{"class":149},[143,128328,128198],{"class":280},[143,128330,290],{"class":149},[143,128332,128333,128335,128337,128339,128341],{"class":145,"line":293},[143,128334,71506],{"class":280},[143,128336,284],{"class":149},[143,128338,1841],{"class":280},[143,128340,774],{"class":755},[143,128342,290],{"class":149},[143,128344,128345],{"class":145,"line":306},[143,128346,348],{"class":149},[63,128348,128349],{},"②html部分",[133,128351,128353],{"className":135,"code":128352,"language":137,"meta":138,"style":138},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[140,128354,128355],{"__ignoreMap":138},[143,128356,128357,128359,128361,128363,128365,128367,128369,128371,128374],{"class":145,"line":146},[143,128358,150],{"class":149},[143,128360,69886],{"class":153},[143,128362,69889],{"class":156},[143,128364,160],{"class":149},[143,128366,69894],{"class":163},[143,128368,61940],{"class":156},[143,128370,160],{"class":149},[143,128372,128373],{"class":163},"\"style.css\"",[143,128375,183],{"class":149},[63,128377,128378,128381],{},[140,128379,128380],{},"\u003Chr>","水平线标签（但是不常用！）",[63,128383,128384],{},"ctrl+0回到页面原来大小",[14,128386,128388],{"id":128387},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[58,128390,128392],{"id":128391},"_721-快速生成html","7.2.1 快速生成html",[63,128394,128395,128396],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[140,128397,128398],{},"\u003Cdiv>``\u003C\u002Fdiv>",[63,128400,128401],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[63,128403,128404],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[63,128406,128407],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[63,128409,128410],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[63,128412,128413],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[63,128415,128416],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[133,128418,128420],{"className":135,"code":128419,"language":137,"meta":138,"style":138},"\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",[140,128421,128422,128427,128432,128437,128442,128447,128452,128457],{"__ignoreMap":138},[143,128423,128424],{"class":145,"line":146},[143,128425,128426],{"class":266},"\u003C!-- Emmet 语法示例 -->\n",[143,128428,128429],{"class":145,"line":35},[143,128430,128431],{"class":266},"\u003C!-- div*3        → 生成3个div -->\n",[143,128433,128434],{"class":145,"line":46},[143,128435,128436],{"class":266},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[143,128438,128439],{"class":145,"line":293},[143,128440,128441],{"class":266},"\u003C!-- div+p        → 兄弟div和p -->\n",[143,128443,128444],{"class":145,"line":306},[143,128445,128446],{"class":266},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[143,128448,128449],{"class":145,"line":319},[143,128450,128451],{"class":266},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[143,128453,128454],{"class":145,"line":332},[143,128455,128456],{"class":266},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[143,128458,128459],{"class":145,"line":345},[143,128460,128461],{"class":266},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[58,128463,128465],{"id":128464},"_722-快速生成css","7.2.2 快速生成css",[63,128467,128468],{},"简写开头",[63,128470,128471],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,128473,128475],{"id":128474},"_73-css复合选择器","7.3 css复合选择器",[58,128477,128479],{"id":128478},"_731-后代选择器","7.3.1 后代选择器",[133,128481,128483],{"className":257,"code":128482,"language":259,"meta":138,"style":138},".parent .child {\n  color: blue;\n}\n",[140,128484,128485,128495,128505],{"__ignoreMap":138},[143,128486,128487,128490,128493],{"class":145,"line":146},[143,128488,128489],{"class":156},".parent",[143,128491,128492],{"class":156}," .child",[143,128494,275],{"class":149},[143,128496,128497,128499,128501,128503],{"class":145,"line":35},[143,128498,71784],{"class":280},[143,128500,284],{"class":149},[143,128502,128198],{"class":280},[143,128504,290],{"class":149},[143,128506,128507],{"class":145,"line":46},[143,128508,348],{"class":149},[63,128510,128511],{},"元素1 元素2 {样式声明}",[63,128513,128514],{},[25,128515,128516],{},"注意点:",[63,128518,128519],{},"①元素1和元素2中间用空格隔开",[63,128521,128522],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[63,128524,128525],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[63,128527,128528],{},"④元素1和元素2可以是任意基础选择器",[58,128530,128532],{"id":128531},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[63,128534,128535],{},[25,128536,128516],{},[63,128538,128539],{},"①元素1和元素2中间用大于号隔开",[63,128541,128522],{},[63,128543,128544],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[58,128546,128548],{"id":128547},"_733-并集选择器","7.3.3 并集选择器",[63,128550,128551],{},"元素1，元素2 {样式声明}",[63,128553,128554],{},[25,128555,128516],{},[63,128557,128558],{},"①元素1和元素2中间用逗号隔开",[63,128560,128561],{},"②逗号可以理解为和的意思",[63,128563,128564],{},"③并集选择器通常用于集体声明",[58,128566,128568],{"id":128567},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[63,128570,128571],{},[25,128572,128516],{},[63,128574,128575,128576,128578],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69886,128577],{},"－:visited－:hover－:active。",[63,128580,128581,128582,128585,128586,26638],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128583,128584],"hover",{}," 、 ",[128587,128588],"first-child",{},[63,128590,128591],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[63,128593,128594],{},"link对没访问的进行设置",[63,128596,128597],{},"vistied对已访问的进行改变",[63,128599,128600],{},"hover鼠标经过就会变",[63,128602,128603],{},"active常按(点)就会变",[133,128605,128607],{"className":257,"code":128606,"language":259,"meta":138,"style":138},"\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",[140,128608,128609,128614,128623,128633,128643,128647,128656,128667,128671,128679,128689,128699,128703,128712,128723],{"__ignoreMap":138},[143,128610,128611],{"class":145,"line":146},[143,128612,128613],{"class":266},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[143,128615,128616,128618,128621],{"class":145,"line":35},[143,128617,67],{"class":153},[143,128619,128620],{"class":156},":link",[143,128622,275],{"class":149},[143,128624,128625,128627,128629,128631],{"class":145,"line":46},[143,128626,71784],{"class":280},[143,128628,284],{"class":149},[143,128630,63252],{"class":280},[143,128632,290],{"class":149},[143,128634,128635,128637,128639,128641],{"class":145,"line":293},[143,128636,71382],{"class":280},[143,128638,284],{"class":149},[143,128640,55622],{"class":280},[143,128642,290],{"class":149},[143,128644,128645],{"class":145,"line":306},[143,128646,348],{"class":149},[143,128648,128649,128651,128654],{"class":145,"line":319},[143,128650,67],{"class":153},[143,128652,128653],{"class":156},":visited",[143,128655,275],{"class":149},[143,128657,128658,128660,128662,128665],{"class":145,"line":332},[143,128659,71784],{"class":280},[143,128661,284],{"class":149},[143,128663,128664],{"class":280},"purple",[143,128666,290],{"class":149},[143,128668,128669],{"class":145,"line":345},[143,128670,348],{"class":149},[143,128672,128673,128675,128677],{"class":145,"line":701},[143,128674,67],{"class":153},[143,128676,61823],{"class":156},[143,128678,275],{"class":149},[143,128680,128681,128683,128685,128687],{"class":145,"line":707},[143,128682,71784],{"class":280},[143,128684,284],{"class":149},[143,128686,55774],{"class":280},[143,128688,290],{"class":149},[143,128690,128691,128693,128695,128697],{"class":145,"line":727},[143,128692,71382],{"class":280},[143,128694,284],{"class":149},[143,128696,128038],{"class":280},[143,128698,290],{"class":149},[143,128700,128701],{"class":145,"line":2518},[143,128702,348],{"class":149},[143,128704,128705,128707,128710],{"class":145,"line":2524},[143,128706,67],{"class":153},[143,128708,128709],{"class":156},":active",[143,128711,275],{"class":149},[143,128713,128714,128716,128718,128721],{"class":145,"line":2529},[143,128715,71784],{"class":280},[143,128717,284],{"class":149},[143,128719,128720],{"class":280},"green",[143,128722,290],{"class":149},[143,128724,128725],{"class":145,"line":2543},[143,128726,348],{"class":149},[58,128728,128730,128731,128734],{"id":128729},"_735-伪类选择器","7.3.5 ",[128732,128733],"focus",{},"伪类选择器",[63,128736,128737,128739,128740,128742],{},[128732,128738],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[140,128741,127485],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[133,128744,128746],{"className":257,"code":128745,"language":259,"meta":138,"style":138},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[140,128747,128748,128756,128767,128777],{"__ignoreMap":138},[143,128749,128750,128752,128754],{"class":145,"line":146},[143,128751,746],{"class":153},[143,128753,62783],{"class":156},[143,128755,275],{"class":149},[143,128757,128758,128761,128763,128765],{"class":145,"line":35},[143,128759,128760],{"class":280},"  border-color",[143,128762,284],{"class":149},[143,128764,55774],{"class":280},[143,128766,290],{"class":149},[143,128768,128769,128771,128773,128775],{"class":145,"line":46},[143,128770,71678],{"class":280},[143,128772,284],{"class":149},[143,128774,55622],{"class":280},[143,128776,290],{"class":149},[143,128778,128779],{"class":145,"line":293},[143,128780,348],{"class":149},[954,128782,128783],{},"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":138,"searchDepth":35,"depth":35,"links":128785},[128786,128791,128795],{"id":128163,"depth":35,"text":128164,"children":128787},[128788,128789,128790],{"id":128167,"depth":46,"text":128168},{"id":128249,"depth":46,"text":128250},{"id":128297,"depth":46,"text":128298},{"id":128387,"depth":35,"text":128388,"children":128792},[128793,128794],{"id":128391,"depth":46,"text":128392},{"id":128464,"depth":46,"text":128465},{"id":128474,"depth":35,"text":128475,"children":128796},[128797,128798,128799,128800,128801],{"id":128478,"depth":46,"text":128479},{"id":128531,"depth":46,"text":128532},{"id":128547,"depth":46,"text":128548},{"id":128567,"depth":46,"text":128568},{"id":128729,"depth":46,"text":128802},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128155,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128809,"title":128810,"body":128811,"description":973,"extension":974,"meta":130733,"navigation":976,"path":130734,"seo":130735,"stem":130736,"__hash__":130737},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128812,"toc":130707},[128813,128816,128820,128829,128833,128859,128864,128867,128870,128873,128876,128880,128883,128893,128901,128905,128940,128945,128948,128951,128954,128957,128961,128964,128973,128977,128990,128995,128998,129001,129004,129008,129011,129015,129018,129072,129075,129106,129109,129163,129167,129170,129336,129459,129462,129465,129468,129471,129475,129478,129482,129485,129488,129492,129495,129526,129553,129581,129584,129588,129614,129657,129661,129755,129758,129785,129788,129791,129794,129797,129800,129803,129806,129809,129812,129816,129873,129900,129904,129952,129956,129997,129999,130002,130005,130008,130011,130015,130107,130110,130113,130116,130120,130243,130444,130448,130452,130455,130458,130461,130465,130468,130471,130496,130499,130502,130505,130508,130511,130515,130523,130585,130588,130646,130649,130652,130655,130658,130661,130664,130667,130704],[10,128814,128810],{"id":128815},"_8-css显示模式与背景特性",[14,128817,128819],{"id":128818},"_81-css元素显示模式","8.1 css元素显示模式",[63,128821,128822,128823,128825,128826,128828],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[140,128824,127038],{},"自己占一行，比如一行可以放多个",[140,128827,127041],{},"，HTML 元素一般分为块元素和行内元素两种类型",[58,128830,128832],{"id":128831},"_811-块元素","8.1.1 块元素",[63,128834,128835,128836,128838,128839,1255,128842,1255,128844,1255,128846,1255,128849,1255,128852,128855,128856,128858],{},"常见的块元素有",[140,128837,126942],{},"~",[140,128840,128841],{},"\u003Ch6>",[140,128843,126968],{},[140,128845,127038],{},[140,128847,128848],{},"\u003Cul>",[140,128850,128851],{},"\u003Col>",[140,128853,128854],{},"\u003Cli>","等，其中 ",[140,128857,127038],{}," 标签是最典型的块元素",[63,128860,128861],{},[25,128862,128863],{},"块级元素的特点：",[63,128865,128866],{},"① 比较霸道，自己独占一行。",[63,128868,128869],{},"② 高度，宽度、外边距以及内边距都可以控制。",[63,128871,128872],{},"③ 宽度默认是容器（父级宽度）的100%。",[63,128874,128875],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[63,128877,128878],{},[25,128879,110],{},[63,128881,128882],{},"①文字类的元素内不能使用块级元素",[63,128884,78128,128885,128887,128888,128890,128891],{},[140,128886,126968],{}," 标签主要用于存放文字，因此 ",[140,128889,126968],{}," 里面不能放块级元素，特别是不能放",[140,128892,127038],{},[63,128894,128895,128896,128838,128898,128900],{},"⑥同理， ",[140,128897,126942],{},[140,128899,128841],{},"等都是文字类块级标签，里面也不能放其他块级元素",[58,128902,128904],{"id":128903},"_812-行内元素","8.1.2 行内元素",[63,128906,128907,128908,1255,128910,1255,128913,1255,128916,1255,128919,1255,128922,1255,128925,1255,128928,1255,128931,1255,128934,128936,128937,128939],{},"常见的行内元素有 ",[140,128909,127200],{},[140,128911,128912],{},"\u003Cstrong>",[140,128914,128915],{},"\u003Cb>",[140,128917,128918],{},"\u003Cem>",[140,128920,128921],{},"\u003Ci>",[140,128923,128924],{},"\u003Cdel>",[140,128926,128927],{},"\u003Cs>",[140,128929,128930],{},"\u003Cins>",[140,128932,128933],{},"\u003Cu>",[140,128935,127041],{}," 等，其中 ",[140,128938,127041],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[63,128941,128942],{},[25,128943,128944],{},"特点：",[63,128946,128947],{},"① 相邻行内元素在一行上，一行可以显示多个。",[63,128949,128950],{},"② 高、宽直接设置是无效的。",[63,128952,128953],{},"③ 默认宽度就是它本身内容的宽度。",[63,128955,128956],{},"④ 行内元素只能容纳文本或其他行内元素。",[63,128958,128959],{},[25,128960,110],{},[63,128962,128963],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[63,128965,128966,128967,128969,128970,128972],{},"②特殊情况链接 ",[140,128968,127200],{}," 里面可以放块级元素，但是给 ",[140,128971,127200],{}," 转换一下块级模式最安全",[58,128974,128976],{"id":128975},"_813-行内块元素","8.1.3 行内块元素",[63,128978,128979,128980,1255,128983,1255,128986,128989],{},"在行内元素中有几个特殊的标签 —— ",[140,128981,128982],{},"\u003Cimg \u002F>",[140,128984,128985],{},"\u003Cinput \u002F>",[140,128987,128988],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[63,128991,128992],{},[25,128993,128994],{},"行内块元素的特点：",[63,128996,128997],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[63,128999,129000],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[63,129002,129003],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[58,129005,129007],{"id":129006},"_814-总结","8.1.4 总结",[29,129009],{"style":31,"src":129010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[58,129012,129014],{"id":129013},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[63,129016,129017],{},"①转换为块元素：display:block;",[133,129019,129021],{"className":257,"code":129020,"language":259,"meta":138,"style":138},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[140,129022,129023,129028,129034,129044,129056,129068],{"__ignoreMap":138},[143,129024,129025],{"class":145,"line":146},[143,129026,129027],{"class":266},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[143,129029,129030,129032],{"class":145,"line":35},[143,129031,67],{"class":153},[143,129033,275],{"class":149},[143,129035,129036,129038,129040,129042],{"class":145,"line":46},[143,129037,281],{"class":280},[143,129039,284],{"class":149},[143,129041,61752],{"class":280},[143,129043,290],{"class":149},[143,129045,129046,129048,129050,129052,129054],{"class":145,"line":293},[143,129047,71448],{"class":280},[143,129049,284],{"class":149},[143,129051,1352],{"class":280},[143,129053,774],{"class":755},[143,129055,290],{"class":149},[143,129057,129058,129060,129062,129064,129066],{"class":145,"line":306},[143,129059,71668],{"class":280},[143,129061,284],{"class":149},[143,129063,1442],{"class":280},[143,129065,774],{"class":755},[143,129067,290],{"class":149},[143,129069,129070],{"class":145,"line":319},[143,129071,348],{"class":149},[63,129073,129074],{},"②转换为行内元素：display:inline;",[133,129076,129078],{"className":257,"code":129077,"language":259,"meta":138,"style":138},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[140,129079,129080,129085,129091,129102],{"__ignoreMap":138},[143,129081,129082],{"class":145,"line":146},[143,129083,129084],{"class":266},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[143,129086,129087,129089],{"class":145,"line":35},[143,129088,614],{"class":153},[143,129090,275],{"class":149},[143,129092,129093,129095,129097,129100],{"class":145,"line":46},[143,129094,281],{"class":280},[143,129096,284],{"class":149},[143,129098,129099],{"class":280},"inline",[143,129101,290],{"class":149},[143,129103,129104],{"class":145,"line":293},[143,129105,348],{"class":149},[63,129107,129108],{},"③转换为行内块：display:inline-block;",[133,129110,129112],{"className":257,"code":129111,"language":259,"meta":138,"style":138},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[140,129113,129114,129119,129125,129135,129147,129159],{"__ignoreMap":138},[143,129115,129116],{"class":145,"line":146},[143,129117,129118],{"class":266},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[143,129120,129121,129123],{"class":145,"line":35},[143,129122,143],{"class":153},[143,129124,275],{"class":149},[143,129126,129127,129129,129131,129133],{"class":145,"line":46},[143,129128,281],{"class":280},[143,129130,284],{"class":149},[143,129132,73262],{"class":280},[143,129134,290],{"class":149},[143,129136,129137,129139,129141,129143,129145],{"class":145,"line":293},[143,129138,71448],{"class":280},[143,129140,284],{"class":149},[143,129142,1653],{"class":280},[143,129144,774],{"class":755},[143,129146,290],{"class":149},[143,129148,129149,129151,129153,129155,129157],{"class":145,"line":306},[143,129150,71668],{"class":280},[143,129152,284],{"class":149},[143,129154,1989],{"class":280},[143,129156,774],{"class":755},[143,129158,290],{"class":149},[143,129160,129161],{"class":145,"line":319},[143,129162,348],{"class":149},[58,129164,129166],{"id":129165},"_816-小米侧边栏","8.1.6 小米侧边栏",[29,129168],{"style":31,"src":129169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[133,129171,129173],{"className":135,"code":129172,"language":137,"meta":138,"style":138},"\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",[140,129174,129175,129180,129195,129214,129233,129252,129271,129290,129309,129328],{"__ignoreMap":138},[143,129176,129177],{"class":145,"line":146},[143,129178,129179],{"class":266},"\u003C!-- 小米侧边栏案例 -->\n",[143,129181,129182,129184,129186,129188,129190,129193],{"class":145,"line":35},[143,129183,150],{"class":149},[143,129185,614],{"class":153},[143,129187,617],{"class":156},[143,129189,160],{"class":149},[143,129191,129192],{"class":163},"\"sidebar\"",[143,129194,183],{"class":149},[143,129196,129197,129199,129201,129203,129205,129207,129210,129212],{"class":145,"line":46},[143,129198,634],{"class":149},[143,129200,67],{"class":153},[143,129202,61940],{"class":156},[143,129204,160],{"class":149},[143,129206,61945],{"class":163},[143,129208,129209],{"class":149},">手机 电话卡\u003C\u002F",[143,129211,67],{"class":153},[143,129213,183],{"class":149},[143,129215,129216,129218,129220,129222,129224,129226,129229,129231],{"class":145,"line":293},[143,129217,634],{"class":149},[143,129219,67],{"class":153},[143,129221,61940],{"class":156},[143,129223,160],{"class":149},[143,129225,61945],{"class":163},[143,129227,129228],{"class":149},">电视 盒子\u003C\u002F",[143,129230,67],{"class":153},[143,129232,183],{"class":149},[143,129234,129235,129237,129239,129241,129243,129245,129248,129250],{"class":145,"line":306},[143,129236,634],{"class":149},[143,129238,67],{"class":153},[143,129240,61940],{"class":156},[143,129242,160],{"class":149},[143,129244,61945],{"class":163},[143,129246,129247],{"class":149},">笔记本 平板\u003C\u002F",[143,129249,67],{"class":153},[143,129251,183],{"class":149},[143,129253,129254,129256,129258,129260,129262,129264,129267,129269],{"class":145,"line":319},[143,129255,634],{"class":149},[143,129257,67],{"class":153},[143,129259,61940],{"class":156},[143,129261,160],{"class":149},[143,129263,61945],{"class":163},[143,129265,129266],{"class":149},">出行 穿戴\u003C\u002F",[143,129268,67],{"class":153},[143,129270,183],{"class":149},[143,129272,129273,129275,129277,129279,129281,129283,129286,129288],{"class":145,"line":332},[143,129274,634],{"class":149},[143,129276,67],{"class":153},[143,129278,61940],{"class":156},[143,129280,160],{"class":149},[143,129282,61945],{"class":163},[143,129284,129285],{"class":149},">智能 路由器\u003C\u002F",[143,129287,67],{"class":153},[143,129289,183],{"class":149},[143,129291,129292,129294,129296,129298,129300,129302,129305,129307],{"class":145,"line":345},[143,129293,634],{"class":149},[143,129295,67],{"class":153},[143,129297,61940],{"class":156},[143,129299,160],{"class":149},[143,129301,61945],{"class":163},[143,129303,129304],{"class":149},">健康 儿童\u003C\u002F",[143,129306,67],{"class":153},[143,129308,183],{"class":149},[143,129310,129311,129313,129315,129317,129319,129321,129324,129326],{"class":145,"line":701},[143,129312,634],{"class":149},[143,129314,67],{"class":153},[143,129316,61940],{"class":156},[143,129318,160],{"class":149},[143,129320,61945],{"class":163},[143,129322,129323],{"class":149},">耳机 音响\u003C\u002F",[143,129325,67],{"class":153},[143,129327,183],{"class":149},[143,129329,129330,129332,129334],{"class":145,"line":707},[143,129331,730],{"class":149},[143,129333,614],{"class":153},[143,129335,183],{"class":149},[133,129337,129339],{"className":257,"code":129338,"language":259,"meta":138,"style":138},".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",[140,129340,129341,129350,129360,129373,129385,129397,129409,129419,129430,129434,129444,129455],{"__ignoreMap":138},[143,129342,129343,129346,129348],{"class":145,"line":146},[143,129344,129345],{"class":156},".sidebar",[143,129347,2302],{"class":153},[143,129349,275],{"class":149},[143,129351,129352,129354,129356,129358],{"class":145,"line":35},[143,129353,281],{"class":280},[143,129355,284],{"class":149},[143,129357,61752],{"class":280},[143,129359,290],{"class":149},[143,129361,129362,129364,129366,129369,129371],{"class":145,"line":46},[143,129363,71448],{"class":280},[143,129365,284],{"class":149},[143,129367,129368],{"class":280},"234",[143,129370,774],{"class":755},[143,129372,290],{"class":149},[143,129374,129375,129377,129379,129381,129383],{"class":145,"line":293},[143,129376,71668],{"class":280},[143,129378,284],{"class":149},[143,129380,1493],{"class":280},[143,129382,774],{"class":755},[143,129384,290],{"class":149},[143,129386,129387,129389,129391,129393,129395],{"class":145,"line":306},[143,129388,128108],{"class":280},[143,129390,284],{"class":149},[143,129392,1493],{"class":280},[143,129394,774],{"class":755},[143,129396,290],{"class":149},[143,129398,129399,129401,129403,129405,129407],{"class":145,"line":319},[143,129400,71703],{"class":280},[143,129402,284],{"class":149},[143,129404,1989],{"class":280},[143,129406,774],{"class":755},[143,129408,290],{"class":149},[143,129410,129411,129413,129415,129417],{"class":145,"line":332},[143,129412,71784],{"class":280},[143,129414,284],{"class":149},[143,129416,61725],{"class":280},[143,129418,290],{"class":149},[143,129420,129421,129423,129425,129428],{"class":145,"line":345},[143,129422,71758],{"class":280},[143,129424,284],{"class":149},[143,129426,129427],{"class":280},"#55585a",[143,129429,290],{"class":149},[143,129431,129432],{"class":145,"line":701},[143,129433,348],{"class":149},[143,129435,129436,129438,129440,129442],{"class":145,"line":707},[143,129437,129345],{"class":156},[143,129439,2302],{"class":153},[143,129441,61823],{"class":156},[143,129443,275],{"class":149},[143,129445,129446,129448,129450,129453],{"class":145,"line":727},[143,129447,71758],{"class":280},[143,129449,284],{"class":149},[143,129451,129452],{"class":280},"#ff6700",[143,129454,290],{"class":149},[143,129456,129457],{"class":145,"line":2518},[143,129458,348],{"class":149},[29,129460],{"style":31,"src":129461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[63,129463,129464],{},"行高=盒子高度：实现文字的垂直居中",[63,129466,129467],{},"原理讲解：",[29,129469],{"style":31,"src":129470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129472,129474],{"id":129473},"_82-css背景","8.2 css背景",[63,129476,129477],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[58,129479,129481],{"id":129480},"_821-背景颜色","8.2.1 背景颜色",[63,129483,129484],{},"background-color:颜色值;",[63,129486,129487],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[58,129489,129491],{"id":129490},"_822-背景图片","8.2.2 背景图片",[63,129493,129494],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[133,129496,129498],{"className":257,"code":129497,"language":259,"meta":138,"style":138},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[140,129499,129500,129506,129522],{"__ignoreMap":138},[143,129501,129502,129504],{"class":145,"line":146},[143,129503,614],{"class":153},[143,129505,275],{"class":149},[143,129507,129508,129511,129513,129515,129517,129520],{"class":145,"line":35},[143,129509,129510],{"class":280},"  background-image",[143,129512,284],{"class":149},[143,129514,62609],{"class":280},[143,129516,1049],{"class":149},[143,129518,129519],{"class":6116},"images\u002Fbg.png",[143,129521,3619],{"class":149},[143,129523,129524],{"class":145,"line":46},[143,129525,348],{"class":149},[1181,129527,129528,129537],{},[1184,129529,129530],{},[1187,129531,129532,129535],{},[1190,129533,129534],{"align":24634},"参数值",[1190,129536,103572],{"align":24634},[1227,129538,129539,129546],{},[1187,129540,129541,129543],{},[1232,129542,55622],{"align":24634},[1232,129544,129545],{"align":24634},"无背景图（默认的）",[1187,129547,129548,129550],{},[1232,129549,62609],{"align":24634},[1232,129551,129552],{"align":24634},"使用绝对或相对地址指定背景图像",[133,129554,129555],{"className":257,"code":129497,"language":259,"meta":138,"style":138},[140,129556,129557,129563,129577],{"__ignoreMap":138},[143,129558,129559,129561],{"class":145,"line":146},[143,129560,614],{"class":153},[143,129562,275],{"class":149},[143,129564,129565,129567,129569,129571,129573,129575],{"class":145,"line":35},[143,129566,129510],{"class":280},[143,129568,284],{"class":149},[143,129570,62609],{"class":280},[143,129572,1049],{"class":149},[143,129574,129519],{"class":6116},[143,129576,3619],{"class":149},[143,129578,129579],{"class":145,"line":46},[143,129580,348],{"class":149},[63,129582,129583],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[58,129585,129587],{"id":129586},"_823-背景平铺","8.2.3 背景平铺",[133,129589,129591],{"className":257,"code":129590,"language":259,"meta":138,"style":138},"div {\n  background-repeat: no-repeat;\n}\n",[140,129592,129593,129599,129610],{"__ignoreMap":138},[143,129594,129595,129597],{"class":145,"line":146},[143,129596,614],{"class":153},[143,129598,275],{"class":149},[143,129600,129601,129604,129606,129608],{"class":145,"line":35},[143,129602,129603],{"class":280},"  background-repeat",[143,129605,284],{"class":149},[143,129607,62619],{"class":280},[143,129609,290],{"class":149},[143,129611,129612],{"class":145,"line":46},[143,129613,348],{"class":149},[1181,129615,129616,129624],{},[1184,129617,129618],{},[1187,129619,129620,129622],{},[1190,129621,129534],{"align":24634},[1190,129623,103572],{"align":24634},[1227,129625,129626,129634,129641,129649],{},[1187,129627,129628,129631],{},[1232,129629,129630],{"align":24634},"repeat",[1232,129632,129633],{"align":24634},"背景图像在纵向和横向上平铺（默认的）",[1187,129635,129636,129638],{},[1232,129637,62619],{"align":24634},[1232,129639,129640],{"align":24634},"背景图像不平铺",[1187,129642,129643,129646],{},[1232,129644,129645],{"align":24634},"repeat-x",[1232,129647,129648],{"align":24634},"背景图像在横向上平铺",[1187,129650,129651,129654],{},[1232,129652,129653],{"align":24634},"repeat-y",[1232,129655,129656],{"align":24634},"背景图像在纵向平铺",[58,129658,129660],{"id":129659},"_824-背景图片位置","8.2.4 背景图片位置",[133,129662,129664],{"className":257,"code":129663,"language":259,"meta":138,"style":138},"\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",[140,129665,129666,129671,129677,129691,129695,129700,129706,129722,129726,129731,129737,129751],{"__ignoreMap":138},[143,129667,129668],{"class":145,"line":146},[143,129669,129670],{"class":266},"\u002F* 方位名词 *\u002F\n",[143,129672,129673,129675],{"class":145,"line":35},[143,129674,614],{"class":153},[143,129676,275],{"class":149},[143,129678,129679,129682,129684,129686,129689],{"class":145,"line":46},[143,129680,129681],{"class":280},"  background-position",[143,129683,284],{"class":149},[143,129685,327],{"class":280},[143,129687,129688],{"class":280}," top",[143,129690,290],{"class":149},[143,129692,129693],{"class":145,"line":293},[143,129694,348],{"class":149},[143,129696,129697],{"class":145,"line":306},[143,129698,129699],{"class":266},"\u002F* 精确单位 *\u002F\n",[143,129701,129702,129704],{"class":145,"line":319},[143,129703,614],{"class":153},[143,129705,275],{"class":149},[143,129707,129708,129710,129712,129714,129716,129718,129720],{"class":145,"line":332},[143,129709,129681],{"class":280},[143,129711,284],{"class":149},[143,129713,1741],{"class":280},[143,129715,774],{"class":755},[143,129717,58387],{"class":280},[143,129719,774],{"class":755},[143,129721,290],{"class":149},[143,129723,129724],{"class":145,"line":345},[143,129725,348],{"class":149},[143,129727,129728],{"class":145,"line":701},[143,129729,129730],{"class":266},"\u002F* 混合单位 *\u002F\n",[143,129732,129733,129735],{"class":145,"line":707},[143,129734,614],{"class":153},[143,129736,275],{"class":149},[143,129738,129739,129741,129743,129745,129747,129749],{"class":145,"line":727},[143,129740,129681],{"class":280},[143,129742,284],{"class":149},[143,129744,1741],{"class":280},[143,129746,774],{"class":755},[143,129748,18042],{"class":280},[143,129750,290],{"class":149},[143,129752,129753],{"class":145,"line":2518},[143,129754,348],{"class":149},[63,129756,129757],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[1181,129759,129760,129768],{},[1184,129761,129762],{},[1187,129763,129764,129766],{},[1190,129765,129534],{"align":24634},[1190,129767,26767],{"align":24634},[1227,129769,129770,129777],{},[1187,129771,129772,129774],{},[1232,129773,52856],{"align":24634},[1232,129775,129776],{"align":24634},"百分数|由浮点数和单位标识符组成的长度值",[1187,129778,129779,129782],{},[1232,129780,129781],{"align":24634},"position",[1232,129783,129784],{"align":24634},"top|center|bottom|left|center|right 方位名词",[63,129786,129787],{},"其他说明：",[63,129789,129790],{},"①参数是方位名词",[63,129792,129793],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[63,129795,129796],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[63,129798,129799],{},"②参数是精确单位",[63,129801,129802],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[63,129804,129805],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[63,129807,129808],{},"③参数是混合单位",[63,129810,129811],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[58,129813,129815],{"id":129814},"_825-背景图片固定","8.2.5 背景图片固定",[133,129817,129819],{"className":257,"code":129818,"language":259,"meta":138,"style":138},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[140,129820,129821,129826,129832,129844,129848,129853,129859,129869],{"__ignoreMap":138},[143,129822,129823],{"class":145,"line":146},[143,129824,129825],{"class":266},"\u002F* 背景滚动（默认） *\u002F\n",[143,129827,129828,129830],{"class":145,"line":35},[143,129829,614],{"class":153},[143,129831,275],{"class":149},[143,129833,129834,129837,129839,129842],{"class":145,"line":46},[143,129835,129836],{"class":280},"  background-attachment",[143,129838,284],{"class":149},[143,129840,129841],{"class":280},"scroll",[143,129843,290],{"class":149},[143,129845,129846],{"class":145,"line":293},[143,129847,348],{"class":149},[143,129849,129850],{"class":145,"line":306},[143,129851,129852],{"class":266},"\u002F* 背景固定 *\u002F\n",[143,129854,129855,129857],{"class":145,"line":319},[143,129856,614],{"class":153},[143,129858,275],{"class":149},[143,129860,129861,129863,129865,129867],{"class":145,"line":332},[143,129862,129836],{"class":280},[143,129864,284],{"class":149},[143,129866,87111],{"class":280},[143,129868,290],{"class":149},[143,129870,129871],{"class":145,"line":345},[143,129872,348],{"class":149},[1181,129874,129875,129884],{},[1184,129876,129877],{},[1187,129878,129879,129882],{},[1190,129880,129881],{"align":24634},"参数",[1190,129883,103572],{"align":24634},[1227,129885,129886,129893],{},[1187,129887,129888,129890],{},[1232,129889,129841],{"align":24634},[1232,129891,129892],{"align":24634},"背景图像是随对象内容滚动",[1187,129894,129895,129897],{},[1232,129896,87111],{"align":24634},[1232,129898,129899],{"align":24634},"背景图像固定",[58,129901,129903],{"id":129902},"_826-背景样式合写","8.2.6 背景样式合写",[133,129905,129907],{"className":257,"code":129906,"language":259,"meta":138,"style":138},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[140,129908,129909,129914,129920,129948],{"__ignoreMap":138},[143,129910,129911],{"class":145,"line":146},[143,129912,129913],{"class":266},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[143,129915,129916,129918],{"class":145,"line":35},[143,129917,614],{"class":153},[143,129919,275],{"class":149},[143,129921,129922,129924,129926,129928,129931,129933,129935,129937,129939,129942,129944,129946],{"class":145,"line":46},[143,129923,71491],{"class":280},[143,129925,284],{"class":149},[143,129927,61725],{"class":280},[143,129929,129930],{"class":280}," url",[143,129932,1049],{"class":149},[143,129934,129519],{"class":6116},[143,129936,14614],{"class":149},[143,129938,62619],{"class":280},[143,129940,129941],{"class":280}," fixed",[143,129943,18042],{"class":280},[143,129945,129688],{"class":280},[143,129947,290],{"class":149},[143,129949,129950],{"class":145,"line":293},[143,129951,348],{"class":149},[58,129953,129955],{"id":129954},"_827-背景色半透明","8.2.7 背景色半透明",[133,129957,129959],{"className":257,"code":129958,"language":259,"meta":138,"style":138},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[140,129960,129961,129967,129993],{"__ignoreMap":138},[143,129962,129963,129965],{"class":145,"line":146},[143,129964,614],{"class":153},[143,129966,275],{"class":149},[143,129968,129969,129971,129973,129975,129977,129979,129981,129983,129985,129987,129989,129991],{"class":145,"line":35},[143,129970,71491],{"class":280},[143,129972,284],{"class":149},[143,129974,55995],{"class":280},[143,129976,1049],{"class":149},[143,129978,1234],{"class":280},[143,129980,13335],{"class":149},[143,129982,1234],{"class":280},[143,129984,13335],{"class":149},[143,129986,1234],{"class":280},[143,129988,13335],{"class":149},[143,129990,101397],{"class":280},[143,129992,3619],{"class":149},[143,129994,129995],{"class":145,"line":46},[143,129996,348],{"class":149},[63,129998,100272],{},[63,130000,130001],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[63,130003,130004],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[63,130006,130007],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[63,130009,130010],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[58,130012,130014],{"id":130013},"_828-总结","8.2.8 总结",[1181,130016,130017,130028],{},[1184,130018,130019],{},[1187,130020,130021,130024,130026],{},[1190,130022,130023],{"align":24634},"属性",[1190,130025,103572],{"align":24634},[1190,130027,1195],{"align":24634},[1227,130029,130030,130041,130052,130063,130074,130085,130096],{},[1187,130031,130032,130035,130038],{},[1232,130033,130034],{"align":24634},"background-color",[1232,130036,130037],{"align":24634},"背景颜色",[1232,130039,130040],{"align":24634},"预定义的颜色值\u002F十六进制\u002FRGB代码",[1187,130042,130043,130046,130049],{},[1232,130044,130045],{"align":24634},"background-image",[1232,130047,130048],{"align":24634},"背景图片",[1232,130050,130051],{"align":24634},"url(图片路径)",[1187,130053,130054,130057,130060],{},[1232,130055,130056],{"align":24634},"background-repeat",[1232,130058,130059],{"align":24634},"是否平铺",[1232,130061,130062],{"align":24634},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[1187,130064,130065,130068,130071],{},[1232,130066,130067],{"align":24634},"background-position",[1232,130069,130070],{"align":24634},"背景位置",[1232,130072,130073],{"align":24634},"length\u002Fposition 分别是x和y坐标",[1187,130075,130076,130079,130082],{},[1232,130077,130078],{"align":24634},"background-attachment",[1232,130080,130081],{"align":24634},"背景附着",[1232,130083,130084],{"align":24634},"scroll(背景滚动) \u002Ffixed (背景固定)",[1187,130086,130087,130090,130093],{},[1232,130088,130089],{"align":24634},"背景简写",[1232,130091,130092],{"align":24634},"书写更简单",[1232,130094,130095],{"align":24634},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[1187,130097,130098,130101,130104],{},[1232,130099,130100],{"align":24634},"背景半透明",[1232,130102,130103],{"align":24634},"背景颜色半透明",[1232,130105,130106],{"align":24634},"background: rgba(0,0,0.3); 后面必须是4个值",[63,130108,130109],{},"颜色渐变：",[29,130111],{"style":31,"src":130112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[29,130114],{"style":31,"src":130115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[58,130117,130119],{"id":130118},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[133,130121,130123],{"className":135,"code":130122,"language":137,"meta":138,"style":138},"\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",[140,130124,130125,130140,130159,130178,130197,130216,130235],{"__ignoreMap":138},[143,130126,130127,130129,130131,130133,130135,130138],{"class":145,"line":146},[143,130128,150],{"class":149},[143,130130,614],{"class":153},[143,130132,617],{"class":156},[143,130134,160],{"class":149},[143,130136,130137],{"class":163},"\"nav\"",[143,130139,183],{"class":149},[143,130141,130142,130144,130146,130148,130150,130152,130155,130157],{"class":145,"line":35},[143,130143,634],{"class":149},[143,130145,67],{"class":153},[143,130147,61940],{"class":156},[143,130149,160],{"class":149},[143,130151,61945],{"class":163},[143,130153,130154],{"class":149},">五彩导航1\u003C\u002F",[143,130156,67],{"class":153},[143,130158,183],{"class":149},[143,130160,130161,130163,130165,130167,130169,130171,130174,130176],{"class":145,"line":46},[143,130162,634],{"class":149},[143,130164,67],{"class":153},[143,130166,61940],{"class":156},[143,130168,160],{"class":149},[143,130170,61945],{"class":163},[143,130172,130173],{"class":149},">五彩导航2\u003C\u002F",[143,130175,67],{"class":153},[143,130177,183],{"class":149},[143,130179,130180,130182,130184,130186,130188,130190,130193,130195],{"class":145,"line":293},[143,130181,634],{"class":149},[143,130183,67],{"class":153},[143,130185,61940],{"class":156},[143,130187,160],{"class":149},[143,130189,61945],{"class":163},[143,130191,130192],{"class":149},">五彩导航3\u003C\u002F",[143,130194,67],{"class":153},[143,130196,183],{"class":149},[143,130198,130199,130201,130203,130205,130207,130209,130212,130214],{"class":145,"line":306},[143,130200,634],{"class":149},[143,130202,67],{"class":153},[143,130204,61940],{"class":156},[143,130206,160],{"class":149},[143,130208,61945],{"class":163},[143,130210,130211],{"class":149},">五彩导航4\u003C\u002F",[143,130213,67],{"class":153},[143,130215,183],{"class":149},[143,130217,130218,130220,130222,130224,130226,130228,130231,130233],{"class":145,"line":319},[143,130219,634],{"class":149},[143,130221,67],{"class":153},[143,130223,61940],{"class":156},[143,130225,160],{"class":149},[143,130227,61945],{"class":163},[143,130229,130230],{"class":149},">五彩导航5\u003C\u002F",[143,130232,67],{"class":153},[143,130234,183],{"class":149},[143,130236,130237,130239,130241],{"class":145,"line":332},[143,130238,730],{"class":149},[143,130240,614],{"class":153},[143,130242,183],{"class":149},[133,130244,130246],{"className":257,"code":130245,"language":259,"meta":138,"style":138},".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",[140,130247,130248,130257,130267,130279,130291,130301,130313,130323,130327,130352,130375,130398,130421],{"__ignoreMap":138},[143,130249,130250,130253,130255],{"class":145,"line":146},[143,130251,130252],{"class":156},".nav",[143,130254,2302],{"class":153},[143,130256,275],{"class":149},[143,130258,130259,130261,130263,130265],{"class":145,"line":35},[143,130260,281],{"class":280},[143,130262,284],{"class":149},[143,130264,73262],{"class":280},[143,130266,290],{"class":149},[143,130268,130269,130271,130273,130275,130277],{"class":145,"line":46},[143,130270,71448],{"class":280},[143,130272,284],{"class":149},[143,130274,1858],{"class":280},[143,130276,774],{"class":755},[143,130278,290],{"class":149},[143,130280,130281,130283,130285,130287,130289],{"class":145,"line":293},[143,130282,71668],{"class":280},[143,130284,284],{"class":149},[143,130286,1897],{"class":280},[143,130288,774],{"class":755},[143,130290,290],{"class":149},[143,130292,130293,130295,130297,130299],{"class":145,"line":306},[143,130294,71406],{"class":280},[143,130296,284],{"class":149},[143,130298,327],{"class":280},[143,130300,290],{"class":149},[143,130302,130303,130305,130307,130309,130311],{"class":145,"line":319},[143,130304,128108],{"class":280},[143,130306,284],{"class":149},[143,130308,1897],{"class":280},[143,130310,774],{"class":755},[143,130312,290],{"class":149},[143,130314,130315,130317,130319,130321],{"class":145,"line":332},[143,130316,71784],{"class":280},[143,130318,284],{"class":149},[143,130320,61725],{"class":280},[143,130322,290],{"class":149},[143,130324,130325],{"class":145,"line":345},[143,130326,348],{"class":149},[143,130328,130329,130331,130333,130336,130338,130340,130343,130345,130347,130349],{"class":145,"line":701},[143,130330,130252],{"class":156},[143,130332,2302],{"class":153},[143,130334,130335],{"class":156},":nth-child",[143,130337,1049],{"class":149},[143,130339,771],{"class":280},[143,130341,130342],{"class":149},") { ",[143,130344,130034],{"class":280},[143,130346,284],{"class":149},[143,130348,129452],{"class":280},[143,130350,130351],{"class":149},"; }\n",[143,130353,130354,130356,130358,130360,130362,130364,130366,130368,130370,130373],{"class":145,"line":707},[143,130355,130252],{"class":156},[143,130357,2302],{"class":153},[143,130359,130335],{"class":156},[143,130361,1049],{"class":149},[143,130363,1122],{"class":280},[143,130365,130342],{"class":149},[143,130367,130034],{"class":280},[143,130369,284],{"class":149},[143,130371,130372],{"class":280},"#ff0000",[143,130374,130351],{"class":149},[143,130376,130377,130379,130381,130383,130385,130387,130389,130391,130393,130396],{"class":145,"line":727},[143,130378,130252],{"class":156},[143,130380,2302],{"class":153},[143,130382,130335],{"class":156},[143,130384,1049],{"class":149},[143,130386,1116],{"class":280},[143,130388,130342],{"class":149},[143,130390,130034],{"class":280},[143,130392,284],{"class":149},[143,130394,130395],{"class":280},"#00a4ff",[143,130397,130351],{"class":149},[143,130399,130400,130402,130404,130406,130408,130410,130412,130414,130416,130419],{"class":145,"line":2518},[143,130401,130252],{"class":156},[143,130403,2302],{"class":153},[143,130405,130335],{"class":156},[143,130407,1049],{"class":149},[143,130409,1334],{"class":280},[143,130411,130342],{"class":149},[143,130413,130034],{"class":280},[143,130415,284],{"class":149},[143,130417,130418],{"class":280},"#ff00ff",[143,130420,130351],{"class":149},[143,130422,130423,130425,130427,130429,130431,130433,130435,130437,130439,130442],{"class":145,"line":2524},[143,130424,130252],{"class":156},[143,130426,2302],{"class":153},[143,130428,130335],{"class":156},[143,130430,1049],{"class":149},[143,130432,1360],{"class":280},[143,130434,130342],{"class":149},[143,130436,130034],{"class":280},[143,130438,284],{"class":149},[143,130440,130441],{"class":280},"#00ff00",[143,130443,130351],{"class":149},[14,130445,130447],{"id":130446},"_83-css三大特性","8.3 css三大特性",[58,130449,130451],{"id":130450},"_831-层叠性","8.3.1 层叠性",[63,130453,130454],{},"为了解决样式冲突问题",[63,130456,130457],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[63,130459,130460],{},"   ②样式不冲突，不会层叠",[58,130462,130464],{"id":130463},"_832-继承性","8.3.2 继承性",[63,130466,130467],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[63,130469,130470],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[133,130472,130474],{"className":257,"code":130473,"language":259,"meta":138,"style":138},"p {\n  color: #333;\n}\n",[140,130475,130476,130482,130492],{"__ignoreMap":138},[143,130477,130478,130480],{"class":145,"line":146},[143,130479,63],{"class":153},[143,130481,275],{"class":149},[143,130483,130484,130486,130488,130490],{"class":145,"line":35},[143,130485,71784],{"class":280},[143,130487,284],{"class":149},[143,130489,63252],{"class":280},[143,130491,290],{"class":149},[143,130493,130494],{"class":145,"line":46},[143,130495,348],{"class":149},[29,130497],{"style":31,"src":130498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[63,130500,130501],{},"解释：①行高可以跟单位也可以不跟单位",[63,130503,130504],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[63,130506,130507],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[63,130509,130510],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[58,130512,130514],{"id":130513},"_833-优先级","8.3.3 优先级",[19,130516,130517,130520],{},[22,130518,130519],{},"选择器相同，则执行层叠性",[22,130521,130522],{},"选择器不同，则根据选择器权重执行",[1181,130524,130525,130535],{},[1184,130526,130527],{},[1187,130528,130529,130532],{},[1190,130530,130531],{"align":24634},"选择器",[1190,130533,130534],{"align":24634},"选择器权重",[1227,130536,130537,130545,130553,130561,130569,130577],{},[1187,130538,130539,130542],{},[1232,130540,130541],{"align":24634},"继承 或者*",[1232,130543,130544],{"align":24634},"0，0，0，0",[1187,130546,130547,130550],{},[1232,130548,130549],{"align":24634},"标签选择器",[1232,130551,130552],{"align":24634},"0，0，0，1",[1187,130554,130555,130558],{},[1232,130556,130557],{"align":24634},"类选择器，伪类选择器",[1232,130559,130560],{"align":24634},"0，0，1，0",[1187,130562,130563,130566],{},[1232,130564,130565],{"align":24634},"ID选择器",[1232,130567,130568],{"align":24634},"0，1，0，0",[1187,130570,130571,130574],{},[1232,130572,130573],{"align":24634},"行内样式",[1232,130575,130576],{"align":24634},"1，0，0，0",[1187,130578,130579,130582],{},[1232,130580,130581],{"align":24634},"！important",[1232,130583,130584],{"align":24634},"无穷大",[63,130586,130587],{},"! important用法：",[133,130589,130591],{"className":257,"code":130590,"language":259,"meta":138,"style":138},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[140,130592,130593,130598,130604,130617,130621,130626,130632,130642],{"__ignoreMap":138},[143,130594,130595],{"class":145,"line":146},[143,130596,130597],{"class":266},"\u002F* !important 拥有最高优先级 *\u002F\n",[143,130599,130600,130602],{"class":145,"line":35},[143,130601,614],{"class":153},[143,130603,275],{"class":149},[143,130605,130606,130608,130610,130612,130615],{"class":145,"line":46},[143,130607,71784],{"class":280},[143,130609,284],{"class":149},[143,130611,52535],{"class":280},[143,130613,130614],{"class":755}," !important",[143,130616,290],{"class":149},[143,130618,130619],{"class":145,"line":293},[143,130620,348],{"class":149},[143,130622,130623],{"class":145,"line":306},[143,130624,130625],{"class":266},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[143,130627,130628,130630],{"class":145,"line":319},[143,130629,614],{"class":153},[143,130631,275],{"class":149},[143,130633,130634,130636,130638,130640],{"class":145,"line":332},[143,130635,71784],{"class":280},[143,130637,284],{"class":149},[143,130639,58304],{"class":280},[143,130641,290],{"class":149},[143,130643,130644],{"class":145,"line":345},[143,130645,348],{"class":149},[63,130647,130648],{},"优先级注意点：",[63,130650,130651],{},"①权重是有4组数字组成,但是不会有进位",[63,130653,130654],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[63,130656,130657],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[63,130659,130660],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[63,130662,130663],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[63,130665,130666],{},"⑥复合选择器",[1181,130668,130669,130679],{},[1184,130670,130671],{},[1187,130672,130673,130676],{},[1190,130674,130675],{"align":24634},"div ul li",[1190,130677,130678],{"align":24634},"0,0,0,3",[1227,130680,130681,130689,130697],{},[1187,130682,130683,130686],{},[1232,130684,130685],{"align":24634},".nav ul li",[1232,130687,130688],{"align":24634},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[1187,130690,130691,130694],{},[1232,130692,130693],{"align":24634},"a:hover",[1232,130695,130696],{"align":24634},"0,0,1,1",[1187,130698,130699,130702],{},[1232,130700,130701],{"align":24634},".nav a",[1232,130703,130696],{"align":24634},[954,130705,130706],{},"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":138,"searchDepth":35,"depth":35,"links":130708},[130709,130717,130728],{"id":128818,"depth":35,"text":128819,"children":130710},[130711,130712,130713,130714,130715,130716],{"id":128831,"depth":46,"text":128832},{"id":128903,"depth":46,"text":128904},{"id":128975,"depth":46,"text":128976},{"id":129006,"depth":46,"text":129007},{"id":129013,"depth":46,"text":129014},{"id":129165,"depth":46,"text":129166},{"id":129473,"depth":35,"text":129474,"children":130718},[130719,130720,130721,130722,130723,130724,130725,130726,130727],{"id":129480,"depth":46,"text":129481},{"id":129490,"depth":46,"text":129491},{"id":129586,"depth":46,"text":129587},{"id":129659,"depth":46,"text":129660},{"id":129814,"depth":46,"text":129815},{"id":129902,"depth":46,"text":129903},{"id":129954,"depth":46,"text":129955},{"id":130013,"depth":46,"text":130014},{"id":130118,"depth":46,"text":130119},{"id":130446,"depth":35,"text":130447,"children":130729},[130730,130731,130732],{"id":130450,"depth":46,"text":130451},{"id":130463,"depth":46,"text":130464},{"id":130513,"depth":46,"text":130514},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128810,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130739,"title":130740,"body":130741,"description":973,"extension":974,"meta":132326,"navigation":976,"path":132327,"seo":132328,"stem":132329,"__hash__":132330},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130742,"toc":132305},[130743,130746,130750,130753,130756,130759,130762,130765,130768,130771,130775,130783,130820,130856,130859,130873,130878,130912,130915,131007,131012,131015,131045,131048,131053,131061,131065,131072,131118,131162,131167,131170,131173,131176,131179,131182,131185,131187,131190,131194,131199,131243,131248,131251,131254,131291,131296,131299,131302,131305,131308,131340,131343,131346,131349,131381,131384,131387,131390,131394,131397,131429,131432,131436,131456,131459,131467,131470,131474,131479,131482,131514,131519,131522,131556,131560,131565,131568,131571,131602,131605,131622,131627,131679,131739,131744,131798,131836,131840,131844,131847,131851,131859,131862,131864,131875,131880,131928,131962,131965,131968,131971,131974,132018,132021,132024,132027,132030,132033,132036,132080,132083,132086,132089,132092,132095,132098,132104,132107,132151,132154,132157,132160,132163,132166,132210,132213,132215,132218,132222,132226,132264,132268,132271,132274,132278,132286,132290,132293,132296,132299,132302],[10,130744,130740],{"id":130745},"_9-css盒模型浮动与切图",[14,130747,130749],{"id":130748},"_91-盒子模型","9.1 盒子模型",[63,130751,130752],{},"利用盒子来设计网页",[63,130754,130755],{},"盒子包含：边框、外边距、内边距、实际内容",[63,130757,130758],{},"网页布局设置：",[63,130760,130761],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[63,130763,130764],{},"②利用css设置好盒子样式，然后摆放到相应位置",[63,130766,130767],{},"③往盒子里装内容",[29,130769],{"style":31,"src":130770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[58,130772,130774],{"id":130773},"_911-边框border","9.1.1 边框（border）",[19,130776,130777,130780],{},[22,130778,130779],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[22,130781,130782],{},"语法",[133,130784,130786],{"className":257,"code":130785,"language":259,"meta":138,"style":138},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[140,130787,130788,130793,130799,130816],{"__ignoreMap":138},[143,130789,130790],{"class":145,"line":146},[143,130791,130792],{"class":266},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[143,130794,130795,130797],{"class":145,"line":35},[143,130796,614],{"class":153},[143,130798,275],{"class":149},[143,130800,130801,130803,130805,130807,130809,130811,130814],{"class":145,"line":46},[143,130802,766],{"class":280},[143,130804,284],{"class":149},[143,130806,771],{"class":280},[143,130808,774],{"class":755},[143,130810,777],{"class":280},[143,130812,130813],{"class":280}," #ccc",[143,130815,290],{"class":149},[143,130817,130818],{"class":145,"line":293},[143,130819,348],{"class":149},[1181,130821,130822,130830],{},[1184,130823,130824],{},[1187,130825,130826,130828],{},[1190,130827,130023],{"align":24634},[1190,130829,103572],{"align":24634},[1227,130831,130832,130840,130848],{},[1187,130833,130834,130837],{},[1232,130835,130836],{"align":24634},"border-width",[1232,130838,130839],{"align":24634},"定义边框粗细，单位是px",[1187,130841,130842,130845],{},[1232,130843,130844],{"align":24634},"border-style",[1232,130846,130847],{"align":24634},"边框的样式",[1187,130849,130850,130853],{},[1232,130851,130852],{"align":24634},"border-color",[1232,130854,130855],{"align":24634},"边框的颜色",[63,130857,130858],{},"边框样式 border-style 可以设置如下值：",[232,130860,130861,130864,130867,130870],{},[22,130862,130863],{},"none：没有边框即忽略所有边框的宽度（默认值）",[22,130865,130866],{},"solid：边框为单实线(最为常用的)",[22,130868,130869],{},"dashed：边框为虚线",[22,130871,130872],{},"dotted：边框为点线",[19,130874,130875],{"start":46},[22,130876,130877],{},"边框的合写分写",[133,130879,130880],{"className":257,"code":130785,"language":259,"meta":138,"style":138},[140,130881,130882,130886,130892,130908],{"__ignoreMap":138},[143,130883,130884],{"class":145,"line":146},[143,130885,130792],{"class":266},[143,130887,130888,130890],{"class":145,"line":35},[143,130889,614],{"class":153},[143,130891,275],{"class":149},[143,130893,130894,130896,130898,130900,130902,130904,130906],{"class":145,"line":46},[143,130895,766],{"class":280},[143,130897,284],{"class":149},[143,130899,771],{"class":280},[143,130901,774],{"class":755},[143,130903,777],{"class":280},[143,130905,130813],{"class":280},[143,130907,290],{"class":149},[143,130909,130910],{"class":145,"line":293},[143,130911,348],{"class":149},[63,130913,130914],{},"边框分开写法：",[133,130916,130918],{"className":257,"code":130917,"language":259,"meta":138,"style":138},"\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",[140,130919,130920,130925,130931,130949,130967,130986,131003],{"__ignoreMap":138},[143,130921,130922],{"class":145,"line":146},[143,130923,130924],{"class":266},"\u002F* 边框分开写法 *\u002F\n",[143,130926,130927,130929],{"class":145,"line":35},[143,130928,614],{"class":153},[143,130930,275],{"class":149},[143,130932,130933,130936,130938,130940,130942,130944,130947],{"class":145,"line":46},[143,130934,130935],{"class":280},"  border-top",[143,130937,284],{"class":149},[143,130939,771],{"class":280},[143,130941,774],{"class":755},[143,130943,777],{"class":280},[143,130945,130946],{"class":280}," #000",[143,130948,290],{"class":149},[143,130950,130951,130954,130956,130958,130960,130962,130965],{"class":145,"line":293},[143,130952,130953],{"class":280},"  border-right",[143,130955,284],{"class":149},[143,130957,1122],{"class":280},[143,130959,774],{"class":755},[143,130961,63124],{"class":280},[143,130963,130964],{"class":280}," #333",[143,130966,290],{"class":149},[143,130968,130969,130972,130974,130976,130978,130981,130984],{"class":145,"line":306},[143,130970,130971],{"class":280},"  border-bottom",[143,130973,284],{"class":149},[143,130975,1116],{"class":280},[143,130977,774],{"class":755},[143,130979,130980],{"class":280}," dotted",[143,130982,130983],{"class":280}," #666",[143,130985,290],{"class":149},[143,130987,130988,130991,130993,130995,130997,130999,131001],{"class":145,"line":319},[143,130989,130990],{"class":280},"  border-left",[143,130992,284],{"class":149},[143,130994,771],{"class":280},[143,130996,774],{"class":755},[143,130998,777],{"class":280},[143,131000,780],{"class":280},[143,131002,290],{"class":149},[143,131004,131005],{"class":145,"line":332},[143,131006,348],{"class":149},[19,131008,131009],{"start":293},[22,131010,131011],{},"表格的细线边框",[63,131013,131014],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[133,131016,131018],{"className":257,"code":131017,"language":259,"meta":138,"style":138},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[140,131019,131020,131025,131031,131041],{"__ignoreMap":138},[143,131021,131022],{"class":145,"line":146},[143,131023,131024],{"class":266},"\u002F* 表格细线边框合并 *\u002F\n",[143,131026,131027,131029],{"class":145,"line":35},[143,131028,1181],{"class":153},[143,131030,275],{"class":149},[143,131032,131033,131035,131037,131039],{"class":145,"line":46},[143,131034,71458],{"class":280},[143,131036,284],{"class":149},[143,131038,65917],{"class":280},[143,131040,290],{"class":149},[143,131042,131043],{"class":145,"line":293},[143,131044,348],{"class":149},[63,131046,131047],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[19,131049,131050],{"start":306},[22,131051,131052],{},"解决边框额外增加盒子的实际大小的方法：",[232,131054,131055,131058],{},[22,131056,131057],{},"测量盒子大小的时候,不量边框",[22,131059,131060],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[58,131062,131064],{"id":131063},"_912-内边距","9.1.2 内边距",[19,131066,131067,131070],{},[22,131068,131069],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[22,131071,130782],{},[1181,131073,131074,131084],{},[1184,131075,131076],{},[1187,131077,131078,131081],{},[1190,131079,131080],{"align":24634},"值的个数",[1190,131082,131083],{"align":24634},"表达意思",[1227,131085,131086,131094,131102,131110],{},[1187,131087,131088,131091],{},[1232,131089,131090],{"align":24634},"padding: 5px;",[1232,131092,131093],{"align":24634},"1个值，代表上下左右都有5个元素",[1187,131095,131096,131099],{},[1232,131097,131098],{"align":24634},"padding: 5px 10px;",[1232,131100,131101],{"align":24634},"2个值，代表上下内边距为5像素，左右内边距为10像素",[1187,131103,131104,131107],{},[1232,131105,131106],{"align":24634},"padding: 5px 10px 20px;",[1232,131108,131109],{"align":24634},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[1187,131111,131112,131115],{},[1232,131113,131114],{"align":24634},"padding: 5px 10px 20px 30px;",[1232,131116,131117],{"align":24634},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[1181,131119,131120,131128],{},[1184,131121,131122],{},[1187,131123,131124,131126],{},[1190,131125,130023],{"align":24634},[1190,131127,103572],{"align":24634},[1227,131129,131130,131138,131146,131154],{},[1187,131131,131132,131135],{},[1232,131133,131134],{"align":24634},"padding-left",[1232,131136,131137],{"align":24634},"左内边距",[1187,131139,131140,131143],{},[1232,131141,131142],{"align":24634},"padding-right",[1232,131144,131145],{"align":24634},"右内边距",[1187,131147,131148,131151],{},[1232,131149,131150],{"align":24634},"padding-top",[1232,131152,131153],{"align":24634},"上内边距",[1187,131155,131156,131159],{},[1232,131157,131158],{"align":24634},"padding-bottom",[1232,131160,131161],{"align":24634},"下内边距",[19,131163,131164],{"start":46},[22,131165,131166],{},"内边距会影响盒子的实际大小",[63,131168,131169],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[63,131171,131172],{},"①内容和边框有了距离，添加了内边距",[63,131174,131175],{},"②padding影响了盒子实际大小",[63,131177,131178],{},"内边距对盒子大小的影响：",[63,131180,131181],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[63,131183,131184],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[63,131186,96097],{},[63,131188,131189],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[58,131191,131193],{"id":131192},"_913-外边距","9.1.3 外边距",[19,131195,131196],{},[22,131197,131198],{},"控制盒子与盒子之间的距离",[1181,131200,131201,131209],{},[1184,131202,131203],{},[1187,131204,131205,131207],{},[1190,131206,130023],{"align":24634},[1190,131208,103572],{"align":24634},[1227,131210,131211,131219,131227,131235],{},[1187,131212,131213,131216],{},[1232,131214,131215],{"align":24634},"margin-left",[1232,131217,131218],{"align":24634},"左外边距",[1187,131220,131221,131224],{},[1232,131222,131223],{"align":24634},"margin-right",[1232,131225,131226],{"align":24634},"右外边距",[1187,131228,131229,131232],{},[1232,131230,131231],{"align":24634},"margin-top",[1232,131233,131234],{"align":24634},"上外边距",[1187,131236,131237,131240],{},[1232,131238,131239],{"align":24634},"margin-bottom",[1232,131241,131242],{"align":24634},"下外边距",[19,131244,131245],{"start":35},[22,131246,131247],{},"外边距可以让块级盒子水平居中的两个条件：",[63,131249,131250],{},"①盒子必须指定了宽度（width）",[63,131252,131253],{},"②盒子左右的外边距都设置为 auto",[133,131255,131257],{"className":257,"code":131256,"language":259,"meta":138,"style":138},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[140,131258,131259,131264,131271,131287],{"__ignoreMap":138},[143,131260,131261],{"class":145,"line":146},[143,131262,131263],{"class":266},"\u002F* margin 复合写法（同上） *\u002F\n",[143,131265,131266,131269],{"class":145,"line":35},[143,131267,131268],{"class":156},".box",[143,131270,275],{"class":149},[143,131272,131273,131275,131277,131279,131281,131284],{"class":145,"line":46},[143,131274,71350],{"class":280},[143,131276,284],{"class":149},[143,131278,1234],{"class":280},[143,131280,52448],{"class":280},[143,131282,131283],{"class":149},";  ",[143,131285,131286],{"class":266},"\u002F* 块级盒子水平居中 *\u002F\n",[143,131288,131289],{"class":145,"line":293},[143,131290,348],{"class":149},[19,131292,131293],{"start":46},[22,131294,131295],{},"外边距塌陷问题",[63,131297,131298],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[29,131300],{"style":31,"src":131301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[63,131303,131304],{},"解决方案：",[63,131306,131307],{},"①可以为父亲元素定义上边距",[133,131309,131310],{"className":257,"code":131256,"language":259,"meta":138,"style":138},[140,131311,131312,131316,131322,131336],{"__ignoreMap":138},[143,131313,131314],{"class":145,"line":146},[143,131315,131263],{"class":266},[143,131317,131318,131320],{"class":145,"line":35},[143,131319,131268],{"class":156},[143,131321,275],{"class":149},[143,131323,131324,131326,131328,131330,131332,131334],{"class":145,"line":46},[143,131325,71350],{"class":280},[143,131327,284],{"class":149},[143,131329,1234],{"class":280},[143,131331,52448],{"class":280},[143,131333,131283],{"class":149},[143,131335,131286],{"class":266},[143,131337,131338],{"class":145,"line":293},[143,131339,348],{"class":149},[63,131341,131342],{},"②可以为父亲元素定义上内边距",[63,131344,131345],{},"③可以为父亲元素添加overflow:hidden",[29,131347],{"style":31,"src":131348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[133,131350,131351],{"className":257,"code":131256,"language":259,"meta":138,"style":138},[140,131352,131353,131357,131363,131377],{"__ignoreMap":138},[143,131354,131355],{"class":145,"line":146},[143,131356,131263],{"class":266},[143,131358,131359,131361],{"class":145,"line":35},[143,131360,131268],{"class":156},[143,131362,275],{"class":149},[143,131364,131365,131367,131369,131371,131373,131375],{"class":145,"line":46},[143,131366,71350],{"class":280},[143,131368,284],{"class":149},[143,131370,1234],{"class":280},[143,131372,52448],{"class":280},[143,131374,131283],{"class":149},[143,131376,131286],{"class":266},[143,131378,131379],{"class":145,"line":293},[143,131380,348],{"class":149},[29,131382],{"style":31,"src":131383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[63,131385,131386],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[63,131388,131389],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[58,131391,131393],{"id":131392},"_914-清除内外边距","9.1.4 清除内外边距",[63,131395,131396],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[133,131398,131399],{"className":257,"code":131256,"language":259,"meta":138,"style":138},[140,131400,131401,131405,131411,131425],{"__ignoreMap":138},[143,131402,131403],{"class":145,"line":146},[143,131404,131263],{"class":266},[143,131406,131407,131409],{"class":145,"line":35},[143,131408,131268],{"class":156},[143,131410,275],{"class":149},[143,131412,131413,131415,131417,131419,131421,131423],{"class":145,"line":46},[143,131414,71350],{"class":280},[143,131416,284],{"class":149},[143,131418,1234],{"class":280},[143,131420,52448],{"class":280},[143,131422,131283],{"class":149},[143,131424,131286],{"class":266},[143,131426,131427],{"class":145,"line":293},[143,131428,348],{"class":149},[63,131430,131431],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[58,131433,131435],{"id":131434},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[232,131437,131438,131441,131444,131447,131450,131453],{},[22,131439,131440],{},"文件→打开 ：可以打开我们要测量的图片",[22,131442,131443],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[22,131445,131446],{},"右击标尺，把里面的单位改为像素",[22,131448,131449],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[22,131451,131452],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[22,131454,131455],{},"用选区拖动 可以测量大小",[29,131457],{"style":31,"src":131458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[232,131460,131461,131464],{},[22,131462,131463],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[22,131465,131466],{},"吸管取色工具",[29,131468],{"style":31,"src":131469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[58,131471,131473],{"id":131472},"_916-案例","9.1.6 案例",[19,131475,131476],{},[22,131477,131478],{},"小米商品",[29,131480],{"style":31,"src":131481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[133,131483,131484],{"className":257,"code":131256,"language":259,"meta":138,"style":138},[140,131485,131486,131490,131496,131510],{"__ignoreMap":138},[143,131487,131488],{"class":145,"line":146},[143,131489,131263],{"class":266},[143,131491,131492,131494],{"class":145,"line":35},[143,131493,131268],{"class":156},[143,131495,275],{"class":149},[143,131497,131498,131500,131502,131504,131506,131508],{"class":145,"line":46},[143,131499,71350],{"class":280},[143,131501,284],{"class":149},[143,131503,1234],{"class":280},[143,131505,52448],{"class":280},[143,131507,131283],{"class":149},[143,131509,131286],{"class":266},[143,131511,131512],{"class":145,"line":293},[143,131513,348],{"class":149},[19,131515,131516],{"start":35},[22,131517,131518],{},"快报模块",[29,131520],{"style":31,"src":131521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[133,131523,131524],{"className":135,"code":917,"language":137,"meta":138,"style":138},[140,131525,131526,131530,131544,131548],{"__ignoreMap":138},[143,131527,131528],{"class":145,"line":146},[143,131529,924],{"class":266},[143,131531,131532,131534,131536,131538,131540,131542],{"class":145,"line":35},[143,131533,150],{"class":149},[143,131535,614],{"class":153},[143,131537,617],{"class":156},[143,131539,160],{"class":149},[143,131541,937],{"class":163},[143,131543,183],{"class":149},[143,131545,131546],{"class":145,"line":46},[143,131547,944],{"class":149},[143,131549,131550,131552,131554],{"class":145,"line":293},[143,131551,730],{"class":149},[143,131553,614],{"class":153},[143,131555,183],{"class":149},[58,131557,131559],{"id":131558},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[19,131561,131562],{},[22,131563,131564],{},"圆角边框",[63,131566,131567],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[29,131569],{"style":31,"src":131570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[133,131572,131574],{"className":257,"code":131573,"language":259,"meta":138,"style":138},"div {\n  border: 1px solid #ccc;\n}\n",[140,131575,131576,131582,131598],{"__ignoreMap":138},[143,131577,131578,131580],{"class":145,"line":146},[143,131579,614],{"class":153},[143,131581,275],{"class":149},[143,131583,131584,131586,131588,131590,131592,131594,131596],{"class":145,"line":35},[143,131585,766],{"class":280},[143,131587,284],{"class":149},[143,131589,771],{"class":280},[143,131591,774],{"class":755},[143,131593,777],{"class":280},[143,131595,130813],{"class":280},[143,131597,290],{"class":149},[143,131599,131600],{"class":145,"line":46},[143,131601,348],{"class":149},[63,131603,131604],{},"解释:",[232,131606,131607,131610,131613,131616,131619],{},[22,131608,131609],{},"参数值可以为数值或百分比的形式",[22,131611,131612],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[22,131614,131615],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[22,131617,131618],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[22,131620,131621],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[19,131623,131624],{"start":35},[22,131625,131626],{},"盒子阴影",[133,131628,131630],{"className":257,"code":131629,"language":259,"meta":138,"style":138},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[140,131631,131632,131638,131675],{"__ignoreMap":138},[143,131633,131634,131636],{"class":145,"line":146},[143,131635,614],{"class":153},[143,131637,275],{"class":149},[143,131639,131640,131643,131645,131647,131649,131651,131653,131655,131657,131659,131661,131663,131665,131667,131669,131671,131673],{"class":145,"line":35},[143,131641,131642],{"class":280},"  box-shadow",[143,131644,284],{"class":149},[143,131646,1234],{"class":280},[143,131648,15654],{"class":280},[143,131650,774],{"class":755},[143,131652,2938],{"class":280},[143,131654,774],{"class":755},[143,131656,79645],{"class":280},[143,131658,1049],{"class":149},[143,131660,1234],{"class":280},[143,131662,13335],{"class":149},[143,131664,1234],{"class":280},[143,131666,13335],{"class":149},[143,131668,1234],{"class":280},[143,131670,13335],{"class":149},[143,131672,87088],{"class":280},[143,131674,3619],{"class":149},[143,131676,131677],{"class":145,"line":46},[143,131678,348],{"class":149},[1181,131680,131681,131689],{},[1184,131682,131683],{},[1187,131684,131685,131687],{},[1190,131686,1195],{"align":24634},[1190,131688,28387],{"align":24634},[1227,131690,131691,131699,131707,131715,131723,131731],{},[1187,131692,131693,131696],{},[1232,131694,131695],{"align":24634},"h-shadow",[1232,131697,131698],{"align":24634},"必需,水平阴影的位置,允许负值",[1187,131700,131701,131704],{},[1232,131702,131703],{"align":24634},"v-shadow",[1232,131705,131706],{"align":24634},"必需,垂直阴影的位置,允许负值",[1187,131708,131709,131712],{},[1232,131710,131711],{"align":24634},"blur",[1232,131713,131714],{"align":24634},"可选,模糊距离,就是影子的虚实",[1187,131716,131717,131720],{},[1232,131718,131719],{"align":24634},"spread",[1232,131721,131722],{"align":24634},"可选,阴影尺寸",[1187,131724,131725,131728],{},[1232,131726,131727],{"align":24634},"color",[1232,131729,131730],{"align":24634},"可选,阴影的颜色",[1187,131732,131733,131736],{},[1232,131734,131735],{"align":24634},"inset",[1232,131737,131738],{"align":24634},"可选,将外部阴影(outset)改为内部阴影",[19,131740,131741],{"start":46},[22,131742,131743],{},"文字阴影",[133,131745,131747],{"className":257,"code":131746,"language":259,"meta":138,"style":138},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[140,131748,131749,131755,131794],{"__ignoreMap":138},[143,131750,131751,131753],{"class":145,"line":146},[143,131752,63],{"class":153},[143,131754,275],{"class":149},[143,131756,131757,131760,131762,131764,131766,131768,131770,131772,131774,131776,131778,131780,131782,131784,131786,131788,131790,131792],{"class":145,"line":35},[143,131758,131759],{"class":280},"  text-shadow",[143,131761,284],{"class":149},[143,131763,771],{"class":280},[143,131765,774],{"class":755},[143,131767,26016],{"class":280},[143,131769,774],{"class":755},[143,131771,15654],{"class":280},[143,131773,774],{"class":755},[143,131775,79645],{"class":280},[143,131777,1049],{"class":149},[143,131779,1234],{"class":280},[143,131781,13335],{"class":149},[143,131783,1234],{"class":280},[143,131785,13335],{"class":149},[143,131787,1234],{"class":280},[143,131789,13335],{"class":149},[143,131791,101397],{"class":280},[143,131793,3619],{"class":149},[143,131795,131796],{"class":145,"line":46},[143,131797,348],{"class":149},[1181,131799,131800,131808],{},[1184,131801,131802],{},[1187,131803,131804,131806],{},[1190,131805,1195],{"align":24634},[1190,131807,28387],{"align":24634},[1227,131809,131810,131816,131823,131830],{},[1187,131811,131812,131814],{},[1232,131813,131695],{"align":24634},[1232,131815,131698],{"align":24634},[1187,131817,131818,131820],{},[1232,131819,131703],{"align":24634},[1232,131821,131822],{"align":24634},"必需,垂直阴影位置,允许负值",[1187,131824,131825,131827],{},[1232,131826,131711],{"align":24634},[1232,131828,131829],{"align":24634},"可选,模糊的距离",[1187,131831,131832,131834],{},[1232,131833,131727],{"align":24634},[1232,131835,131730],{"align":24634},[14,131837,131839],{"id":131838},"_92-浮动","9.2 浮动",[58,131841,131843],{"id":131842},"_921-浮动介绍","9.2.1 浮动介绍",[63,131845,131846],{},"在16.2中详细介绍",[58,131848,131850],{"id":131849},"_922-清除浮动","9.2.2 清除浮动",[19,131852,131853,131856],{},[22,131854,131855],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[22,131857,131858],{},"清除浮动的本质",[63,131860,131861],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[63,131863,9925],{},[232,131865,131866,131869,131872],{},[22,131867,131868],{},"如果父盒子本身有高度，则不需要清除浮动",[22,131870,131871],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[22,131873,131874],{},"父级有了高度，就不会影响下面的标准流了",[19,131876,131877],{"start":46},[22,131878,131879],{},"清除浮动样式",[133,131881,131883],{"className":257,"code":131882,"language":259,"meta":138,"style":138},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[140,131884,131885,131892,131903,131907,131914,131924],{"__ignoreMap":138},[143,131886,131887,131890],{"class":145,"line":146},[143,131888,131889],{"class":156},".left",[143,131891,275],{"class":149},[143,131893,131894,131897,131899,131901],{"class":145,"line":35},[143,131895,131896],{"class":280},"  float",[143,131898,284],{"class":149},[143,131900,24634],{"class":280},[143,131902,290],{"class":149},[143,131904,131905],{"class":145,"line":46},[143,131906,348],{"class":149},[143,131908,131909,131912],{"class":145,"line":293},[143,131910,131911],{"class":156},".right",[143,131913,275],{"class":149},[143,131915,131916,131918,131920,131922],{"class":145,"line":306},[143,131917,131896],{"class":280},[143,131919,284],{"class":149},[143,131921,73401],{"class":280},[143,131923,290],{"class":149},[143,131925,131926],{"class":145,"line":319},[143,131927,348],{"class":149},[1181,131929,131930,131938],{},[1184,131931,131932],{},[1187,131933,131934,131936],{},[1190,131935,127888],{"align":24634},[1190,131937,28387],{"align":24634},[1227,131939,131940,131947,131954],{},[1187,131941,131942,131944],{},[1232,131943,24634],{"align":24634},[1232,131945,131946],{"align":24634},"不允许左侧有浮动元素（清除左侧浮动的影响）",[1187,131948,131949,131951],{},[1232,131950,73401],{"align":24634},[1232,131952,131953],{"align":24634},"不允许右侧有浮动元素（清除右侧浮动的影响）",[1187,131955,131956,131959],{},[1232,131957,131958],{"align":24634},"both",[1232,131960,131961],{"align":24634},"同时清除左右侧浮动的影响",[63,131963,131964],{},"法一",[63,131966,131967],{},"额外标签法也称为隔墙法",[63,131969,131970],{},"使用方式：",[63,131972,131973],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[133,131975,131976],{"className":257,"code":131882,"language":259,"meta":138,"style":138},[140,131977,131978,131984,131994,131998,132004,132014],{"__ignoreMap":138},[143,131979,131980,131982],{"class":145,"line":146},[143,131981,131889],{"class":156},[143,131983,275],{"class":149},[143,131985,131986,131988,131990,131992],{"class":145,"line":35},[143,131987,131896],{"class":280},[143,131989,284],{"class":149},[143,131991,24634],{"class":280},[143,131993,290],{"class":149},[143,131995,131996],{"class":145,"line":46},[143,131997,348],{"class":149},[143,131999,132000,132002],{"class":145,"line":293},[143,132001,131911],{"class":156},[143,132003,275],{"class":149},[143,132005,132006,132008,132010,132012],{"class":145,"line":306},[143,132007,131896],{"class":280},[143,132009,284],{"class":149},[143,132011,73401],{"class":280},[143,132013,290],{"class":149},[143,132015,132016],{"class":145,"line":319},[143,132017,348],{"class":149},[63,132019,132020],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[63,132022,132023],{},"优点： 通俗易懂，书写方便",[63,132025,132026],{},"缺点： 添加许多无意义的标签，结构化较差",[63,132028,132029],{},"注意： 要求这个新的空标签必须是块级元素。",[63,132031,132032],{},"法二",[63,132034,132035],{},"父级添加overflow属性",[133,132037,132038],{"className":257,"code":131882,"language":259,"meta":138,"style":138},[140,132039,132040,132046,132056,132060,132066,132076],{"__ignoreMap":138},[143,132041,132042,132044],{"class":145,"line":146},[143,132043,131889],{"class":156},[143,132045,275],{"class":149},[143,132047,132048,132050,132052,132054],{"class":145,"line":35},[143,132049,131896],{"class":280},[143,132051,284],{"class":149},[143,132053,24634],{"class":280},[143,132055,290],{"class":149},[143,132057,132058],{"class":145,"line":46},[143,132059,348],{"class":149},[143,132061,132062,132064],{"class":145,"line":293},[143,132063,131911],{"class":156},[143,132065,275],{"class":149},[143,132067,132068,132070,132072,132074],{"class":145,"line":306},[143,132069,131896],{"class":280},[143,132071,284],{"class":149},[143,132073,73401],{"class":280},[143,132075,290],{"class":149},[143,132077,132078],{"class":145,"line":319},[143,132079,348],{"class":149},[63,132081,132082],{},"overflow: hidden;",[63,132084,132085],{},"优点：代码简洁",[63,132087,132088],{},"缺点：无法显示溢出的部分",[63,132090,132091],{},"注意：是给父元素添加代码",[63,132093,132094],{},"法三",[63,132096,132097],{},"父级添加after伪元素",[63,132099,132100,132103],{},[132101,132102],"after",{}," 方式是额外标签法的升级版",[63,132105,132106],{},"使用的时候复制就可以",[133,132108,132109],{"className":257,"code":131882,"language":259,"meta":138,"style":138},[140,132110,132111,132117,132127,132131,132137,132147],{"__ignoreMap":138},[143,132112,132113,132115],{"class":145,"line":146},[143,132114,131889],{"class":156},[143,132116,275],{"class":149},[143,132118,132119,132121,132123,132125],{"class":145,"line":35},[143,132120,131896],{"class":280},[143,132122,284],{"class":149},[143,132124,24634],{"class":280},[143,132126,290],{"class":149},[143,132128,132129],{"class":145,"line":46},[143,132130,348],{"class":149},[143,132132,132133,132135],{"class":145,"line":293},[143,132134,131911],{"class":156},[143,132136,275],{"class":149},[143,132138,132139,132141,132143,132145],{"class":145,"line":306},[143,132140,131896],{"class":280},[143,132142,284],{"class":149},[143,132144,73401],{"class":280},[143,132146,290],{"class":149},[143,132148,132149],{"class":145,"line":319},[143,132150,348],{"class":149},[63,132152,132153],{},"优点：没有增加标签，结构更简单",[63,132155,132156],{},"缺点：照顾低版本浏览器",[63,132158,132159],{},"代表网站： 百度、淘宝网、网易等",[63,132161,132162],{},"法四",[63,132164,132165],{},"父级添加双伪元素",[133,132167,132168],{"className":257,"code":131882,"language":259,"meta":138,"style":138},[140,132169,132170,132176,132186,132190,132196,132206],{"__ignoreMap":138},[143,132171,132172,132174],{"class":145,"line":146},[143,132173,131889],{"class":156},[143,132175,275],{"class":149},[143,132177,132178,132180,132182,132184],{"class":145,"line":35},[143,132179,131896],{"class":280},[143,132181,284],{"class":149},[143,132183,24634],{"class":280},[143,132185,290],{"class":149},[143,132187,132188],{"class":145,"line":46},[143,132189,348],{"class":149},[143,132191,132192,132194],{"class":145,"line":293},[143,132193,131911],{"class":156},[143,132195,275],{"class":149},[143,132197,132198,132200,132202,132204],{"class":145,"line":306},[143,132199,131896],{"class":280},[143,132201,284],{"class":149},[143,132203,73401],{"class":280},[143,132205,290],{"class":149},[143,132207,132208],{"class":145,"line":319},[143,132209,348],{"class":149},[63,132211,132212],{},"优点：代码更简洁",[63,132214,132156],{},[63,132216,132217],{},"代表网站：小米、腾讯等",[14,132219,132221],{"id":132220},"_93-ps切图","9.3 PS切图",[58,132223,132225],{"id":132224},"_931-常见图片格式","9.3.1 常见图片格式",[1181,132227,132228,132238],{},[1184,132229,132230],{},[1187,132231,132232,132235],{},[1190,132233,132234],{"align":24634},"jpg图像格式",[1190,132236,132237],{"align":24634},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[1227,132239,132240,132248,132256],{},[1187,132241,132242,132245],{},[1232,132243,132244],{"align":24634},"gif图像格式",[1232,132246,132247],{"align":24634},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[1187,132249,132250,132253],{},[1232,132251,132252],{"align":24634},"png图像格式",[1232,132254,132255],{"align":24634},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[1187,132257,132258,132261],{},[1232,132259,132260],{"align":24634},"PSD图像格式",[1232,132262,132263],{"align":24634},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[58,132265,132267],{"id":132266},"_932-图层切图","9.3.2 图层切图",[63,132269,132270],{},"最简单的切图方式：右击图层 → 导出 → 切片",[63,132272,132273],{},"按住shift选中两个图层->图层菜单->合并图层",[58,132275,132277],{"id":132276},"_933-切片切图","9.3.3 切片切图",[232,132279,132280,132283],{},[22,132281,132282],{},"利用切片工具手动划出",[22,132284,132285],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[58,132287,132289],{"id":132288},"_934-切图步骤","9.3.4 切图步骤",[63,132291,132292],{},"用切片工具选中：",[29,132294],{"style":31,"src":132295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[63,132297,132298],{},"文件 -> 导出",[29,132300],{"style":31,"src":132301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[954,132303,132304],{},"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":138,"searchDepth":35,"depth":35,"links":132306},[132307,132316,132320],{"id":130748,"depth":35,"text":130749,"children":132308},[132309,132310,132311,132312,132313,132314,132315],{"id":130773,"depth":46,"text":130774},{"id":131063,"depth":46,"text":131064},{"id":131192,"depth":46,"text":131193},{"id":131392,"depth":46,"text":131393},{"id":131434,"depth":46,"text":131435},{"id":131472,"depth":46,"text":131473},{"id":131558,"depth":46,"text":131559},{"id":131838,"depth":35,"text":131839,"children":132317},[132318,132319],{"id":131842,"depth":46,"text":131843},{"id":131849,"depth":46,"text":131850},{"id":132220,"depth":35,"text":132221,"children":132321},[132322,132323,132324,132325],{"id":132224,"depth":46,"text":132225},{"id":132266,"depth":46,"text":132267},{"id":132276,"depth":46,"text":132277},{"id":132288,"depth":46,"text":132289},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130740,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132332,"title":132333,"body":132334,"description":973,"extension":974,"meta":132975,"navigation":976,"path":132976,"seo":132977,"stem":132978,"__hash__":132979},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132335,"toc":132963},[132336,132339,132343,132369,132403,132407,132411,132414,132456,132463,132473,132481,132483,132486,132489,132492,132499,132513,132517,132520,132549,132553,132556,132570,132574,132577,132605,132609,132612,132638,132642,132647,132680,132685,132713,132717,132734,132780,132785,132829,132846,132953,132961],[10,132337,132333],{"id":132338},"_10-css规范与学成在线案例",[14,132340,132342],{"id":132341},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[19,132344,132345,132351,132357,132363],{},[22,132346,132347,132350],{},[25,132348,132349],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[22,132352,132353,132356],{},[25,132354,132355],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[22,132358,132359,132362],{},[25,132360,132361],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[22,132364,132365,132368],{},[25,132366,132367],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[133,132370,132371],{"className":257,"code":130785,"language":259,"meta":138,"style":138},[140,132372,132373,132377,132383,132399],{"__ignoreMap":138},[143,132374,132375],{"class":145,"line":146},[143,132376,130792],{"class":266},[143,132378,132379,132381],{"class":145,"line":35},[143,132380,614],{"class":153},[143,132382,275],{"class":149},[143,132384,132385,132387,132389,132391,132393,132395,132397],{"class":145,"line":46},[143,132386,766],{"class":280},[143,132388,284],{"class":149},[143,132390,771],{"class":280},[143,132392,774],{"class":755},[143,132394,777],{"class":280},[143,132396,130813],{"class":280},[143,132398,290],{"class":149},[143,132400,132401],{"class":145,"line":293},[143,132402,348],{"class":149},[14,132404,132406],{"id":132405},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[58,132408,132410],{"id":132409},"_1021-header头部制作","10.2.1 header头部制作",[29,132412],{"style":31,"src":132413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[232,132415,132416,132423,132430,132436,132443,132450],{},[22,132417,132418,132419,132422],{},"1号是版心盒子 ",[25,132420,132421],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[22,132424,132425,132426,132429],{},"版心盒子 里面包含 2号盒子 ",[25,132427,132428],{},"logo"," 图标",[22,132431,132432,132433,132435],{},"版心盒子 里面包含 3号盒子 ",[25,132434,54599],{}," 导航栏",[22,132437,132438,132439,132442],{},"版心盒子 里面包含 4号盒子 ",[25,132440,132441],{},"search"," 搜索框",[22,132444,132445,132446,132449],{},"版心盒子 里面包含 5号盒子 ",[25,132447,132448],{},"user"," 个人信息",[22,132451,132452,132453],{},"注意，要求里面的 ",[25,132454,132455],{},"4个子盒子 必须都浮动",[19,132457,132458],{},[22,132459,132460],{},[25,132461,132462],{},"导航栏注意点:",[63,132464,132465,132466,132469,132470],{},"实际开发中， ",[25,132467,132468],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[25,132471,132472],{},"用 li 包含链接(li+a)的做法",[232,132474,132475,132478],{},[22,132476,132477],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[22,132479,132480],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[63,132482,9925],{},[63,132484,132485],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[63,132487,132488],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[63,132490,132491],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[19,132493,132494],{"start":35},[22,132495,132496],{},[25,132497,132498],{},"4号盒子search的细节：",[232,132500,132501,132504,132507],{},[22,132502,132503],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[22,132505,132506],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[22,132508,132509,132512],{},[140,132510,132511],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[58,132514,132516],{"id":132515},"_1022-banner制作","10.2.2 banner制作",[29,132518],{"style":31,"src":132519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[232,132521,132522,132529,132535,132542],{},[22,132523,132524,132525,132528],{},"1号盒子是通栏的大盒子 ",[25,132526,132527],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[22,132530,132531,132532,132534],{},"2号盒子是版心 ",[25,132533,1836],{}," ， 要水平居中对齐",[22,132536,132537,132538,132541],{},"3号盒子版心内，左对齐 ",[25,132539,132540],{},"subnav"," 侧导航栏",[22,132543,132544,132545,132548],{},"4号盒子版心内，右对齐 ",[25,132546,132547],{},"course"," 课程",[58,132550,132552],{"id":132551},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[29,132554],{"style":31,"src":132555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[232,132557,132558,132561,132564,132567],{},[22,132559,132560],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[22,132562,132563],{},"1号盒子是标题 H3 左侧浮动",[22,132565,132566],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[22,132568,132569],{},"3号盒子 右浮动 mod 修改",[58,132571,132573],{"id":132572},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[29,132575],{"style":31,"src":132576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[232,132578,132579,132585,132592,132599,132602],{},[22,132580,132581,132582,132584],{},"1号盒子为最大的盒子 ",[25,132583,54600],{}," 版心水平居中对齐",[22,132586,132587,132588,132591],{},"2号盒子为上面部分 ",[25,132589,132590],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[22,132593,132594,132595,132598],{},"3号盒子为底下部分 ",[25,132596,132597],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[22,132600,132601],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[22,132603,132604],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[58,132606,132608],{"id":132607},"_1025-底部模块制作","10.2.5 底部模块制作",[29,132610],{"style":31,"src":132611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[232,132613,132614,132621,132624,132631],{},[22,132615,132616,132617,132620],{},"1号盒子通栏大盒子 底部 ",[25,132618,132619],{},"footer"," 给高度 底色是白色",[22,132622,132623],{},"2号盒子版心水平居中",[22,132625,132626,132627,132630],{},"3号盒子版权 ",[25,132628,132629],{},"copyright"," 左对齐",[22,132632,132633,132634,132637],{},"4号盒子 链接组 ",[25,132635,132636],{},"links"," 右对齐",[58,132639,132641],{"id":132640},"_1026-代码模块","10.2.6 代码模块",[19,132643,132644],{},[22,132645,132646],{},"html部分",[133,132648,132650],{"className":135,"code":132649,"language":137,"meta":138,"style":138},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[140,132651,132652],{"__ignoreMap":138},[143,132653,132654,132656,132658,132660,132662,132665,132668,132670,132673,132676,132678],{"class":145,"line":146},[143,132655,150],{"class":149},[143,132657,67],{"class":153},[143,132659,61940],{"class":156},[143,132661,160],{"class":149},[143,132663,132664],{"class":163},"\"https:\u002F\u002Fexample.com\"",[143,132666,132667],{"class":156}," target",[143,132669,160],{"class":149},[143,132671,132672],{"class":163},"\"_blank\"",[143,132674,132675],{"class":149},">链接文字\u003C\u002F",[143,132677,67],{"class":153},[143,132679,183],{"class":149},[19,132681,132682],{"start":35},[22,132683,132684],{},"css部分",[133,132686,132687],{"className":135,"code":132649,"language":137,"meta":138,"style":138},[140,132688,132689],{"__ignoreMap":138},[143,132690,132691,132693,132695,132697,132699,132701,132703,132705,132707,132709,132711],{"class":145,"line":146},[143,132692,150],{"class":149},[143,132694,67],{"class":153},[143,132696,61940],{"class":156},[143,132698,160],{"class":149},[143,132700,132664],{"class":163},[143,132702,132667],{"class":156},[143,132704,160],{"class":149},[143,132706,132672],{"class":163},[143,132708,132675],{"class":149},[143,132710,67],{"class":153},[143,132712,183],{"class":149},[58,132714,132716],{"id":132715},"_1027-收获","10.2.7 收获",[19,132718,132719,132722,132725,132728,132731],{},[22,132720,132721],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[22,132723,132724],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[22,132726,132727],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[22,132729,132730],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[22,132732,132733],{},"遗忘代码",[133,132735,132737],{"className":257,"code":132736,"language":259,"meta":138,"style":138},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[140,132738,132739,132761,132766,132776],{"__ignoreMap":138},[143,132740,132741,132743,132745,132747,132749,132751,132753,132755,132757,132759],{"class":145,"line":146},[143,132742,614],{"class":153},[143,132744,13335],{"class":149},[143,132746,63],{"class":153},[143,132748,13335],{"class":149},[143,132750,10],{"class":153},[143,132752,13335],{"class":149},[143,132754,232],{"class":153},[143,132756,13335],{"class":149},[143,132758,22],{"class":153},[143,132760,275],{"class":149},[143,132762,132763],{"class":145,"line":35},[143,132764,132765],{"class":266},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[143,132767,132768,132770,132772,132774],{"class":145,"line":46},[143,132769,281],{"class":280},[143,132771,284],{"class":149},[143,132773,61752],{"class":280},[143,132775,290],{"class":149},[143,132777,132778],{"class":145,"line":293},[143,132779,348],{"class":149},[19,132781,132782],{"start":319},[22,132783,132784],{},"html引css的程序",[133,132786,132787],{"className":257,"code":132736,"language":259,"meta":138,"style":138},[140,132788,132789,132811,132815,132825],{"__ignoreMap":138},[143,132790,132791,132793,132795,132797,132799,132801,132803,132805,132807,132809],{"class":145,"line":146},[143,132792,614],{"class":153},[143,132794,13335],{"class":149},[143,132796,63],{"class":153},[143,132798,13335],{"class":149},[143,132800,10],{"class":153},[143,132802,13335],{"class":149},[143,132804,232],{"class":153},[143,132806,13335],{"class":149},[143,132808,22],{"class":153},[143,132810,275],{"class":149},[143,132812,132813],{"class":145,"line":35},[143,132814,132765],{"class":266},[143,132816,132817,132819,132821,132823],{"class":145,"line":46},[143,132818,281],{"class":280},[143,132820,284],{"class":149},[143,132822,61752],{"class":280},[143,132824,290],{"class":149},[143,132826,132827],{"class":145,"line":293},[143,132828,348],{"class":149},[19,132830,132831,132834,132837,132840,132843],{"start":332},[22,132832,132833],{},"浮动的盒子不会有外边距合并问题",[22,132835,132836],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[22,132838,132839],{},"ctrl+g快速定位行；shift+alt多个光标",[22,132841,132842],{},"学习上方各个模块的选择器起名方法，以后就这样用",[22,132844,132845],{},"在写选择器时尽量写全一些，例如",[133,132847,132849],{"className":257,"code":132848,"language":259,"meta":138,"style":138},"\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",[140,132850,132851,132856,132872,132877,132892,132897,132912,132917,132932,132937],{"__ignoreMap":138},[143,132852,132853],{"class":145,"line":146},[143,132854,132855],{"class":266},"\u002F* 静态定位（默认） *\u002F\n",[143,132857,132858,132861,132863,132865,132867,132870],{"class":145,"line":35},[143,132859,132860],{"class":156},".static",[143,132862,80685],{"class":149},[143,132864,129781],{"class":280},[143,132866,284],{"class":149},[143,132868,132869],{"class":280},"static",[143,132871,130351],{"class":149},[143,132873,132874],{"class":145,"line":46},[143,132875,132876],{"class":266},"\u002F* 相对定位 *\u002F\n",[143,132878,132879,132882,132884,132886,132888,132890],{"class":145,"line":293},[143,132880,132881],{"class":156},".relative",[143,132883,80685],{"class":149},[143,132885,129781],{"class":280},[143,132887,284],{"class":149},[143,132889,55649],{"class":280},[143,132891,130351],{"class":149},[143,132893,132894],{"class":145,"line":306},[143,132895,132896],{"class":266},"\u002F* 绝对定位 *\u002F\n",[143,132898,132899,132902,132904,132906,132908,132910],{"class":145,"line":319},[143,132900,132901],{"class":156},".absolute",[143,132903,80685],{"class":149},[143,132905,129781],{"class":280},[143,132907,284],{"class":149},[143,132909,55716],{"class":280},[143,132911,130351],{"class":149},[143,132913,132914],{"class":145,"line":332},[143,132915,132916],{"class":266},"\u002F* 固定定位 *\u002F\n",[143,132918,132919,132922,132924,132926,132928,132930],{"class":145,"line":345},[143,132920,132921],{"class":156},".fixed",[143,132923,80685],{"class":149},[143,132925,129781],{"class":280},[143,132927,284],{"class":149},[143,132929,87111],{"class":280},[143,132931,130351],{"class":149},[143,132933,132934],{"class":145,"line":701},[143,132935,132936],{"class":266},"\u002F* 粘性定位 *\u002F\n",[143,132938,132939,132942,132944,132946,132948,132951],{"class":145,"line":707},[143,132940,132941],{"class":156},".sticky",[143,132943,80685],{"class":149},[143,132945,129781],{"class":280},[143,132947,284],{"class":149},[143,132949,132950],{"class":280},"sticky",[143,132952,130351],{"class":149},[19,132954,132955,132958],{"start":2518},[22,132956,132957],{},"一定要用好注释",[22,132959,132960],{},"浮动的盒子不会有外边距合并的问题",[954,132962,132304],{},{"title":138,"searchDepth":35,"depth":35,"links":132964},[132965,132966],{"id":132341,"depth":35,"text":132342},{"id":132405,"depth":35,"text":132406,"children":132967},[132968,132969,132970,132971,132972,132973,132974],{"id":132409,"depth":46,"text":132410},{"id":132515,"depth":46,"text":132516},{"id":132551,"depth":46,"text":132552},{"id":132572,"depth":46,"text":132573},{"id":132607,"depth":46,"text":132608},{"id":132640,"depth":46,"text":132641},{"id":132715,"depth":46,"text":132716},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132333,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132981,"title":132982,"body":132983,"description":973,"extension":974,"meta":134469,"navigation":976,"path":134470,"seo":134471,"stem":134472,"__hash__":134473},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132984,"toc":134461},[132985,132988,132992,132996,133007,133011,133028,133072,133105,133108,133125,133128,133131,133175,133179,133183,133186,133189,133193,133196,133207,133270,133311,133314,133329,133383,133391,133394,133405,133459,133485,133488,133501,133555,133587,133641,133664,133718,133721,133724,133731,133785,133806,133860,133863,133866,133951,133959,134016,134039,134043,134046,134064,134068,134087,134141,134179,134183,134186,134189,134211,134215,134223,134226,134231,134242,134245,134249,134263,134307,134310,134314,134317,134322,134348,134353,134430,134433,134437,134440,134443,134446,134449,134452,134455,134458],[10,132986,132982],{"id":132987},"_11-传统布局与定位体系",[14,132989,132991],{"id":132990},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[58,132993,132995],{"id":132994},"_1111-普通流标准流","11.1.1 普通流（标准流）",[232,132997,132998,133001,133004],{},[22,132999,133000],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[22,133002,133003],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[22,133005,133006],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[58,133008,133010],{"id":133009},"_1112-浮动","11.1.2 浮动",[232,133012,133013,133016,133019,133022,133025],{},[22,133014,133015],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[22,133017,133018],{},"浮动可以改变元素标签默认的排列方式",[22,133020,133021],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[22,133023,133024],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[22,133026,133027],{},"在使用行内块转换时盒子之间是有空隙的",[133,133029,133030],{"className":257,"code":131882,"language":259,"meta":138,"style":138},[140,133031,133032,133038,133048,133052,133058,133068],{"__ignoreMap":138},[143,133033,133034,133036],{"class":145,"line":146},[143,133035,131889],{"class":156},[143,133037,275],{"class":149},[143,133039,133040,133042,133044,133046],{"class":145,"line":35},[143,133041,131896],{"class":280},[143,133043,284],{"class":149},[143,133045,24634],{"class":280},[143,133047,290],{"class":149},[143,133049,133050],{"class":145,"line":46},[143,133051,348],{"class":149},[143,133053,133054,133056],{"class":145,"line":293},[143,133055,131911],{"class":156},[143,133057,275],{"class":149},[143,133059,133060,133062,133064,133066],{"class":145,"line":306},[143,133061,131896],{"class":280},[143,133063,284],{"class":149},[143,133065,73401],{"class":280},[143,133067,290],{"class":149},[143,133069,133070],{"class":145,"line":319},[143,133071,348],{"class":149},[1181,133073,133074,133082],{},[1184,133075,133076],{},[1187,133077,133078,133080],{},[1190,133079,127888],{"align":24634},[1190,133081,28387],{"align":24634},[1227,133083,133084,133091,133098],{},[1187,133085,133086,133088],{},[1232,133087,55622],{"align":24634},[1232,133089,133090],{"align":24634},"元素不浮动（默认值）",[1187,133092,133093,133095],{},[1232,133094,24634],{"align":24634},[1232,133096,133097],{"align":24634},"元素向左浮动",[1187,133099,133100,133102],{},[1232,133101,73401],{"align":24634},[1232,133103,133104],{"align":24634},"元素向右浮动",[63,133106,133107],{},"浮动重点：",[232,133109,133110,133113,133116,133119,133122],{},[22,133111,133112],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[22,133114,133115],{},"浮动的元素会一行内显示并且元素顶部对齐",[22,133117,133118],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[22,133120,133121],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[22,133123,133124],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[63,133126,133127],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[63,133129,133130],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[133,133132,133133],{"className":257,"code":131882,"language":259,"meta":138,"style":138},[140,133134,133135,133141,133151,133155,133161,133171],{"__ignoreMap":138},[143,133136,133137,133139],{"class":145,"line":146},[143,133138,131889],{"class":156},[143,133140,275],{"class":149},[143,133142,133143,133145,133147,133149],{"class":145,"line":35},[143,133144,131896],{"class":280},[143,133146,284],{"class":149},[143,133148,24634],{"class":280},[143,133150,290],{"class":149},[143,133152,133153],{"class":145,"line":46},[143,133154,348],{"class":149},[143,133156,133157,133159],{"class":145,"line":293},[143,133158,131911],{"class":156},[143,133160,275],{"class":149},[143,133162,133163,133165,133167,133169],{"class":145,"line":306},[143,133164,131896],{"class":280},[143,133166,284],{"class":149},[143,133168,73401],{"class":280},[143,133170,290],{"class":149},[143,133172,133173],{"class":145,"line":319},[143,133174,348],{"class":149},[58,133176,133178],{"id":133177},"_1113-定位","11.1.3 定位",[22896,133180,133182],{"id":133181},"_11131-使用场景","11.1.3.1 使用场景",[63,133184,133185],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[63,133187,133188],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22896,133190,133192],{"id":133191},"_11132-定位组成","11.1.3.2 定位组成",[63,133194,133195],{},"定位 = 定位模式 + 边偏移",[19,133197,133198],{},[22,133199,133200,133203,133204],{},[25,133201,133202],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[25,133205,133206],{},"定位模式",[133,133208,133210],{"className":257,"code":133209,"language":259,"meta":138,"style":138},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[140,133211,133212,133218,133232,133249,133266],{"__ignoreMap":138},[143,133213,133214,133216],{"class":145,"line":146},[143,133215,131268],{"class":156},[143,133217,275],{"class":149},[143,133219,133220,133223,133225,133227,133229],{"class":145,"line":35},[143,133221,133222],{"class":280},"  position",[143,133224,284],{"class":149},[143,133226,55649],{"class":280},[143,133228,131283],{"class":149},[143,133230,133231],{"class":266},"\u002F* 定位模式 *\u002F\n",[143,133233,133234,133237,133239,133241,133243,133246],{"class":145,"line":46},[143,133235,133236],{"class":280},"  top",[143,133238,284],{"class":149},[143,133240,1487],{"class":280},[143,133242,774],{"class":755},[143,133244,133245],{"class":149},";           ",[143,133247,133248],{"class":266},"\u002F* 边偏移：上 *\u002F\n",[143,133250,133251,133254,133256,133258,133260,133263],{"class":145,"line":293},[143,133252,133253],{"class":280},"  left",[143,133255,284],{"class":149},[143,133257,1741],{"class":280},[143,133259,774],{"class":755},[143,133261,133262],{"class":149},";          ",[143,133264,133265],{"class":266},"\u002F* 边偏移：左 *\u002F\n",[143,133267,133268],{"class":145,"line":306},[143,133269,348],{"class":149},[1181,133271,133272,133281],{},[1184,133273,133274],{},[1187,133275,133276,133278],{},[1190,133277,1195],{"align":24634},[1190,133279,133280],{"align":24634},"语义",[1227,133282,133283,133290,133297,133304],{},[1187,133284,133285,133287],{},[1232,133286,132869],{"align":24634},[1232,133288,133289],{"align":24634},"静态定位",[1187,133291,133292,133294],{},[1232,133293,55649],{"align":24634},[1232,133295,133296],{"align":24634},"相对定位",[1187,133298,133299,133301],{},[1232,133300,55716],{"align":24634},[1232,133302,133303],{"align":24634},"绝对定位",[1187,133305,133306,133308],{},[1232,133307,87111],{"align":24634},[1232,133309,133310],{"align":24634},"固定定位",[63,133312,133313],{},"（1）静态定位：",[232,133315,133316,133327],{},[22,133317,133318,133319,133322,133323,133326],{},"静态定位是元素的 ",[25,133320,133321],{},"默认定位方式"," ， ",[25,133324,133325],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[22,133328,6081],{},[133,133330,133331],{"className":257,"code":133209,"language":259,"meta":138,"style":138},[140,133332,133333,133339,133351,133365,133379],{"__ignoreMap":138},[143,133334,133335,133337],{"class":145,"line":146},[143,133336,131268],{"class":156},[143,133338,275],{"class":149},[143,133340,133341,133343,133345,133347,133349],{"class":145,"line":35},[143,133342,133222],{"class":280},[143,133344,284],{"class":149},[143,133346,55649],{"class":280},[143,133348,131283],{"class":149},[143,133350,133231],{"class":266},[143,133352,133353,133355,133357,133359,133361,133363],{"class":145,"line":46},[143,133354,133236],{"class":280},[143,133356,284],{"class":149},[143,133358,1487],{"class":280},[143,133360,774],{"class":755},[143,133362,133245],{"class":149},[143,133364,133248],{"class":266},[143,133366,133367,133369,133371,133373,133375,133377],{"class":145,"line":293},[143,133368,133253],{"class":280},[143,133370,284],{"class":149},[143,133372,1741],{"class":280},[143,133374,774],{"class":755},[143,133376,133262],{"class":149},[143,133378,133265],{"class":266},[143,133380,133381],{"class":145,"line":306},[143,133382,348],{"class":149},[232,133384,133385,133388],{},[22,133386,133387],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[22,133389,133390],{},"静态定位在布局时我们几乎不用的",[63,133392,133393],{},"（2）相对定位",[232,133395,133396,133403],{},[22,133397,133398,133399,133402],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[25,133400,133401],{},"原来的位置"," 来说的（自恋型）",[22,133404,6081],{},[133,133406,133407],{"className":257,"code":133209,"language":259,"meta":138,"style":138},[140,133408,133409,133415,133427,133441,133455],{"__ignoreMap":138},[143,133410,133411,133413],{"class":145,"line":146},[143,133412,131268],{"class":156},[143,133414,275],{"class":149},[143,133416,133417,133419,133421,133423,133425],{"class":145,"line":35},[143,133418,133222],{"class":280},[143,133420,284],{"class":149},[143,133422,55649],{"class":280},[143,133424,131283],{"class":149},[143,133426,133231],{"class":266},[143,133428,133429,133431,133433,133435,133437,133439],{"class":145,"line":46},[143,133430,133236],{"class":280},[143,133432,284],{"class":149},[143,133434,1487],{"class":280},[143,133436,774],{"class":755},[143,133438,133245],{"class":149},[143,133440,133248],{"class":266},[143,133442,133443,133445,133447,133449,133451,133453],{"class":145,"line":293},[143,133444,133253],{"class":280},[143,133446,284],{"class":149},[143,133448,1741],{"class":280},[143,133450,774],{"class":755},[143,133452,133262],{"class":149},[143,133454,133265],{"class":266},[143,133456,133457],{"class":145,"line":306},[143,133458,348],{"class":149},[232,133460,133461],{},[22,133462,133463,133464,133466,133467,133469,133470,133473,133474,133477,133478,133480,133481,133484],{},"相对定位的特点：",[54602,133465],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54602,133468],{},"  ② ",[25,133471,133472],{},"原来"," 在标准流的 ",[25,133475,133476],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54602,133479],{},"  ③因此， ",[25,133482,133483],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[63,133486,133487],{},"（3）绝对定位",[232,133489,133490,133499],{},[22,133491,133492,133494,133495,133498],{},[25,133493,133303],{}," 是元素在移动位置的时候，是相对于它 ",[25,133496,133497],{},"祖先元素"," 来说的（拼爹型）",[22,133500,6081],{},[133,133502,133503],{"className":257,"code":133209,"language":259,"meta":138,"style":138},[140,133504,133505,133511,133523,133537,133551],{"__ignoreMap":138},[143,133506,133507,133509],{"class":145,"line":146},[143,133508,131268],{"class":156},[143,133510,275],{"class":149},[143,133512,133513,133515,133517,133519,133521],{"class":145,"line":35},[143,133514,133222],{"class":280},[143,133516,284],{"class":149},[143,133518,55649],{"class":280},[143,133520,131283],{"class":149},[143,133522,133231],{"class":266},[143,133524,133525,133527,133529,133531,133533,133535],{"class":145,"line":46},[143,133526,133236],{"class":280},[143,133528,284],{"class":149},[143,133530,1487],{"class":280},[143,133532,774],{"class":755},[143,133534,133245],{"class":149},[143,133536,133248],{"class":266},[143,133538,133539,133541,133543,133545,133547,133549],{"class":145,"line":293},[143,133540,133253],{"class":280},[143,133542,284],{"class":149},[143,133544,1741],{"class":280},[143,133546,774],{"class":755},[143,133548,133262],{"class":149},[143,133550,133265],{"class":266},[143,133552,133553],{"class":145,"line":306},[143,133554,348],{"class":149},[232,133556,133557,133572,133581,133584],{},[22,133558,133559,133560,133562,133563,133565,133566,133568,133569,133571],{},"绝对定位的特点：",[54602,133561],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54602,133564],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54602,133567],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54602,133570],{},"  (4)固定定位",[22,133573,133574,133576,133577,133580],{},[25,133575,133310],{}," 是元素 ",[25,133578,133579],{},"固定于浏览器可视区的位置"," 。（认死理型）",[22,133582,133583],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[22,133585,133586],{},"语法:",[133,133588,133589],{"className":257,"code":133209,"language":259,"meta":138,"style":138},[140,133590,133591,133597,133609,133623,133637],{"__ignoreMap":138},[143,133592,133593,133595],{"class":145,"line":146},[143,133594,131268],{"class":156},[143,133596,275],{"class":149},[143,133598,133599,133601,133603,133605,133607],{"class":145,"line":35},[143,133600,133222],{"class":280},[143,133602,284],{"class":149},[143,133604,55649],{"class":280},[143,133606,131283],{"class":149},[143,133608,133231],{"class":266},[143,133610,133611,133613,133615,133617,133619,133621],{"class":145,"line":46},[143,133612,133236],{"class":280},[143,133614,284],{"class":149},[143,133616,1487],{"class":280},[143,133618,774],{"class":755},[143,133620,133245],{"class":149},[143,133622,133248],{"class":266},[143,133624,133625,133627,133629,133631,133633,133635],{"class":145,"line":293},[143,133626,133253],{"class":280},[143,133628,284],{"class":149},[143,133630,1741],{"class":280},[143,133632,774],{"class":755},[143,133634,133262],{"class":149},[143,133636,133265],{"class":266},[143,133638,133639],{"class":145,"line":306},[143,133640,348],{"class":149},[232,133642,133643,133652],{},[22,133644,133645,133646,133648,133649,133651],{},"特点:",[54602,133647],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54602,133650],{},"  ②固定定位不再占有原先的位置,完全脱标",[22,133653,133654,133655,133657,133658,133660,133661,133663],{},"固定在版心位置的方法:",[54602,133656],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54602,133659],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54602,133662],{},"  实例：",[133,133665,133666],{"className":257,"code":133209,"language":259,"meta":138,"style":138},[140,133667,133668,133674,133686,133700,133714],{"__ignoreMap":138},[143,133669,133670,133672],{"class":145,"line":146},[143,133671,131268],{"class":156},[143,133673,275],{"class":149},[143,133675,133676,133678,133680,133682,133684],{"class":145,"line":35},[143,133677,133222],{"class":280},[143,133679,284],{"class":149},[143,133681,55649],{"class":280},[143,133683,131283],{"class":149},[143,133685,133231],{"class":266},[143,133687,133688,133690,133692,133694,133696,133698],{"class":145,"line":46},[143,133689,133236],{"class":280},[143,133691,284],{"class":149},[143,133693,1487],{"class":280},[143,133695,774],{"class":755},[143,133697,133245],{"class":149},[143,133699,133248],{"class":266},[143,133701,133702,133704,133706,133708,133710,133712],{"class":145,"line":293},[143,133703,133253],{"class":280},[143,133705,284],{"class":149},[143,133707,1741],{"class":280},[143,133709,774],{"class":755},[143,133711,133262],{"class":149},[143,133713,133265],{"class":266},[143,133715,133716],{"class":145,"line":306},[143,133717,348],{"class":149},[29,133719],{"style":31,"src":133720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[63,133722,133723],{},"(5)粘性定位",[232,133725,133726,133729],{},[22,133727,133728],{},"粘性定位可以被认为是相对定位和固定定位的混合",[22,133730,6081],{},[133,133732,133733],{"className":257,"code":133209,"language":259,"meta":138,"style":138},[140,133734,133735,133741,133753,133767,133781],{"__ignoreMap":138},[143,133736,133737,133739],{"class":145,"line":146},[143,133738,131268],{"class":156},[143,133740,275],{"class":149},[143,133742,133743,133745,133747,133749,133751],{"class":145,"line":35},[143,133744,133222],{"class":280},[143,133746,284],{"class":149},[143,133748,55649],{"class":280},[143,133750,131283],{"class":149},[143,133752,133231],{"class":266},[143,133754,133755,133757,133759,133761,133763,133765],{"class":145,"line":46},[143,133756,133236],{"class":280},[143,133758,284],{"class":149},[143,133760,1487],{"class":280},[143,133762,774],{"class":755},[143,133764,133245],{"class":149},[143,133766,133248],{"class":266},[143,133768,133769,133771,133773,133775,133777,133779],{"class":145,"line":293},[143,133770,133253],{"class":280},[143,133772,284],{"class":149},[143,133774,1741],{"class":280},[143,133776,774],{"class":755},[143,133778,133262],{"class":149},[143,133780,133265],{"class":266},[143,133782,133783],{"class":145,"line":306},[143,133784,348],{"class":149},[232,133786,133787],{},[22,133788,133789,133790,133792,133793,133795,133796,133798,133799,133802,133803,133805],{},"粘性定位的特点：",[54602,133791],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54602,133794],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54602,133797],{},"  ③必须添加 top 、left、right、bottom ",[25,133800,133801],{},"其中一个"," 才有效",[54602,133804],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[133,133807,133808],{"className":257,"code":133209,"language":259,"meta":138,"style":138},[140,133809,133810,133816,133828,133842,133856],{"__ignoreMap":138},[143,133811,133812,133814],{"class":145,"line":146},[143,133813,131268],{"class":156},[143,133815,275],{"class":149},[143,133817,133818,133820,133822,133824,133826],{"class":145,"line":35},[143,133819,133222],{"class":280},[143,133821,284],{"class":149},[143,133823,55649],{"class":280},[143,133825,131283],{"class":149},[143,133827,133231],{"class":266},[143,133829,133830,133832,133834,133836,133838,133840],{"class":145,"line":46},[143,133831,133236],{"class":280},[143,133833,284],{"class":149},[143,133835,1487],{"class":280},[143,133837,774],{"class":755},[143,133839,133245],{"class":149},[143,133841,133248],{"class":266},[143,133843,133844,133846,133848,133850,133852,133854],{"class":145,"line":293},[143,133845,133253],{"class":280},[143,133847,284],{"class":149},[143,133849,1741],{"class":280},[143,133851,774],{"class":755},[143,133853,133262],{"class":149},[143,133855,133265],{"class":266},[143,133857,133858],{"class":145,"line":306},[143,133859,348],{"class":149},[29,133861],{"style":31,"src":133862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[63,133864,133865],{},"(6)总结",[1181,133867,133868,133883],{},[1184,133869,133870],{},[1187,133871,133872,133874,133877,133880],{},[1190,133873,133206],{"align":24634},[1190,133875,133876],{"align":24634},"是否脱标",[1190,133878,133879],{"align":24634},"移动位置",[1190,133881,133882],{"align":24634},"是否常用",[1227,133884,133885,133898,133912,133926,133939],{},[1187,133886,133887,133890,133892,133895],{},[1232,133888,133889],{"align":24634},"Static 静态定位",[1232,133891,105553],{"align":24634},[1232,133893,133894],{"align":24634},"不能使用边偏移",[1232,133896,133897],{"align":24634},"很少",[1187,133899,133900,133903,133906,133909],{},[1232,133901,133902],{"align":24634},"Relative 相对定位",[1232,133904,133905],{"align":24634},"否(占有位置)",[1232,133907,133908],{"align":24634},"相对于自身位置移动",[1232,133910,133911],{"align":24634},"基本单独使用",[1187,133913,133914,133917,133920,133923],{},[1232,133915,133916],{"align":24634},"Absolute 绝对定位",[1232,133918,133919],{"align":24634},"是(不占有位置)",[1232,133921,133922],{"align":24634},"带有定位的父级",[1232,133924,133925],{"align":24634},"要和定位父级元素搭配使用",[1187,133927,133928,133931,133933,133936],{},[1232,133929,133930],{"align":24634},"Fixed 固定定位",[1232,133932,133919],{"align":24634},[1232,133934,133935],{"align":24634},"浏览器可视区",[1232,133937,133938],{"align":24634},"单独使用,不需要父级",[1187,133940,133941,133944,133946,133948],{},[1232,133942,133943],{"align":24634},"Sticky 粘性定位",[1232,133945,133905],{"align":24634},[1232,133947,133935],{"align":24634},[1232,133949,133950],{"align":24634},"当前阶段少",[19,133952,133953],{"start":35},[22,133954,133955,133958],{},[25,133956,133957],{},"边偏移"," 则决定了该元素的最终位置",[1181,133960,133961,133972],{},[1184,133962,133963],{},[1187,133964,133965,133968,133970],{},[1190,133966,133967],{"align":24634},"边偏移属性",[1190,133969,28390],{"align":24634},[1190,133971,28387],{"align":24634},[1227,133973,133974,133985,133996,134006],{},[1187,133975,133976,133979,133982],{},[1232,133977,133978],{"align":24634},"top",[1232,133980,133981],{"align":24634},"top: 80px;",[1232,133983,133984],{"align":24634},"顶端偏移量，定义元素相对于父元素上边线的距离",[1187,133986,133987,133990,133993],{},[1232,133988,133989],{"align":24634},"bottom",[1232,133991,133992],{"align":24634},"bottom: 80px ;",[1232,133994,133995],{"align":24634},"底部偏移量，定义元素相对于其父元素下边线的距离",[1187,133997,133998,134000,134003],{},[1232,133999,24634],{"align":24634},[1232,134001,134002],{"align":24634},"left: 80px ;",[1232,134004,134005],{"align":24634},"左侧偏移量，定义元素相对于其父元素左边线的距离",[1187,134007,134008,134010,134013],{},[1232,134009,73401],{"align":24634},[1232,134011,134012],{"align":24634},"right: 80px ;",[1232,134014,134015],{"align":24634},"右侧偏移量，定义元素相对于其父元素右边线的距离",[232,134017,134018],{},[22,134019,9925,134020,134022,134023,134025,134026,134028,134029,134032,134033,134035,134036,134038],{},[54602,134021],{},"  ① ",[25,134024,133957],{}," 需要和 ",[25,134027,133206],{}," 联合使用， ",[25,134030,134031],{},"单独使用无效"," ；",[54602,134034],{},"  ②top和bottom不要同时使用",[54602,134037],{},"  ③left和right不要同时使用",[22896,134040,134042],{"id":134041},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[63,134044,134045],{},"子级是绝对定位的话，父级要用相对定位",[232,134047,134048,134051,134054,134057],{},[22,134049,134050],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[22,134052,134053],{},"父盒子需要加定位限制子盒子在父盒子内显示",[22,134055,134056],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[22,134058,134059,134060,134063],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[25,134061,134062],{},"子绝父绝"," 也会遇到",[22896,134065,134067],{"id":134066},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[232,134069,134070,134085],{},[22,134071,134072,134073,134076,134077,134080,134081,134084],{},"在使用 ",[25,134074,134075],{},"定位"," 布局时，可能会 ",[25,134078,134079],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[25,134082,134083],{},"z-index"," 来控制盒子的前后次序 (z轴)",[22,134086,6081],{},[133,134088,134089],{"className":257,"code":133209,"language":259,"meta":138,"style":138},[140,134090,134091,134097,134109,134123,134137],{"__ignoreMap":138},[143,134092,134093,134095],{"class":145,"line":146},[143,134094,131268],{"class":156},[143,134096,275],{"class":149},[143,134098,134099,134101,134103,134105,134107],{"class":145,"line":35},[143,134100,133222],{"class":280},[143,134102,284],{"class":149},[143,134104,55649],{"class":280},[143,134106,131283],{"class":149},[143,134108,133231],{"class":266},[143,134110,134111,134113,134115,134117,134119,134121],{"class":145,"line":46},[143,134112,133236],{"class":280},[143,134114,284],{"class":149},[143,134116,1487],{"class":280},[143,134118,774],{"class":755},[143,134120,133245],{"class":149},[143,134122,133248],{"class":266},[143,134124,134125,134127,134129,134131,134133,134135],{"class":145,"line":293},[143,134126,133253],{"class":280},[143,134128,284],{"class":149},[143,134130,1741],{"class":280},[143,134132,774],{"class":755},[143,134134,133262],{"class":149},[143,134136,133265],{"class":266},[143,134138,134139],{"class":145,"line":306},[143,134140,348],{"class":149},[232,134142,134143],{},[22,134144,134145,134146,134022,134148,134150,134151,128585,134154,83417,134157,134159,134160,134162,134163,134166,134167,134032,134170,134172,134173,134176,134178],{},"z-index的特性",[54602,134147],{},[25,134149,127888],{}," ： ",[25,134152,134153],{},"正整数",[25,134155,134156],{},"负整数",[25,134158,1234],{}," ，默认值是 0，数值越大，盒子越靠上；",[54602,134161],{},"  ②如果 ",[25,134164,134165],{},"属性值相同"," ，则按照书写顺序， ",[25,134168,134169],{},"后来居上",[54602,134171],{},"  ③数字后面 ",[25,134174,134175],{},"不能加单位",[54602,134177],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22896,134180,134182],{"id":134181},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[63,134184,134185],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[63,134187,134188],{},"方法:",[232,134190,134191,134201],{},[22,134192,134193,134194,134197,134198],{},"left: 50%; 让 ",[25,134195,134196],{},"盒子的左侧"," 移动到 ",[25,134199,134200],{},"父级元素的水平中心位置",[22,134202,134203,134204,134207,134208],{},"margin-left: -100px; 让盒子 ",[25,134205,134206],{},"向左"," 移动 ",[25,134209,134210],{},"自身宽度的一半",[22896,134212,134214],{"id":134213},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[19,134216,134217,134220],{},[22,134218,134219],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[22,134221,134222],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[63,134224,134225],{},"也就是说绝对定位和固定定位和浮动类似",[19,134227,134228],{"start":46},[22,134229,134230],{},"display 是显示模式， 可以改变显示模式有以下方式:",[232,134232,134233,134236,134239],{},[22,134234,134235],{},"可以用inline-block 转换为行内块",[22,134237,134238],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[22,134240,134241],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[63,134243,134244],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22896,134246,134248],{"id":134247},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[19,134250,134251,134254,134257,134260],{},[22,134252,134253],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[22,134255,134256],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[22,134258,134259],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[22,134261,134262],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[133,134264,134265],{"className":257,"code":131882,"language":259,"meta":138,"style":138},[140,134266,134267,134273,134283,134287,134293,134303],{"__ignoreMap":138},[143,134268,134269,134271],{"class":145,"line":146},[143,134270,131889],{"class":156},[143,134272,275],{"class":149},[143,134274,134275,134277,134279,134281],{"class":145,"line":35},[143,134276,131896],{"class":280},[143,134278,284],{"class":149},[143,134280,24634],{"class":280},[143,134282,290],{"class":149},[143,134284,134285],{"class":145,"line":46},[143,134286,348],{"class":149},[143,134288,134289,134291],{"class":145,"line":293},[143,134290,131911],{"class":156},[143,134292,275],{"class":149},[143,134294,134295,134297,134299,134301],{"class":145,"line":306},[143,134296,131896],{"class":280},[143,134298,284],{"class":149},[143,134300,73401],{"class":280},[143,134302,290],{"class":149},[143,134304,134305],{"class":145,"line":319},[143,134306,348],{"class":149},[29,134308],{"style":31,"src":134309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22896,134311,134313],{"id":134312},"_11138-轮播图","11.1.3.8 轮播图",[29,134315],{"style":31,"src":134316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[19,134318,134319],{},[22,134320,134321],{},"制作顺序:",[232,134323,134324,134327,134330,134339],{},[22,134325,134326],{},"大盒子我们类名为： tb-promo 淘宝广告",[22,134328,134329],{},"里面先放一张图片",[22,134331,134332,134333,134335,134336,134338],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54602,134334],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54602,134337],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[22,134340,134341,134342,134344,134345,134347],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54602,134343],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54602,134346],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[19,134349,134350],{"start":35},[22,134351,134352],{},"代码模块",[133,134354,134356],{"className":257,"code":134355,"language":259,"meta":138,"style":138},"\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",[140,134357,134358,134363,134370,134380,134390,134400,134404,134409,134416,134426],{"__ignoreMap":138},[143,134359,134360],{"class":145,"line":146},[143,134361,134362],{"class":266},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[143,134364,134365,134368],{"class":145,"line":35},[143,134366,134367],{"class":156},".son",[143,134369,275],{"class":149},[143,134371,134372,134374,134376,134378],{"class":145,"line":46},[143,134373,133222],{"class":280},[143,134375,284],{"class":149},[143,134377,55716],{"class":280},[143,134379,290],{"class":149},[143,134381,134382,134384,134386,134388],{"class":145,"line":293},[143,134383,133236],{"class":280},[143,134385,284],{"class":149},[143,134387,1234],{"class":280},[143,134389,290],{"class":149},[143,134391,134392,134394,134396,134398],{"class":145,"line":306},[143,134393,133253],{"class":280},[143,134395,284],{"class":149},[143,134397,1234],{"class":280},[143,134399,290],{"class":149},[143,134401,134402],{"class":145,"line":319},[143,134403,348],{"class":149},[143,134405,134406],{"class":145,"line":332},[143,134407,134408],{"class":266},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[143,134410,134411,134414],{"class":145,"line":345},[143,134412,134413],{"class":156},".father",[143,134415,275],{"class":149},[143,134417,134418,134420,134422,134424],{"class":145,"line":701},[143,134419,133222],{"class":280},[143,134421,284],{"class":149},[143,134423,55649],{"class":280},[143,134425,290],{"class":149},[143,134427,134428],{"class":145,"line":707},[143,134429,348],{"class":149},[63,134431,134432],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[58,134434,134436],{"id":134435},"_1114-定位数值的移动","11.1.4 定位数值的移动",[29,134438],{"style":31,"src":134439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[63,134441,134442],{},"✨ 黄金口诀：",[63,134444,134445],{},"\"TOP正下负上，LEFT正右负左\"",[63,134447,134448],{},"\"RIGHT正左负右，BOTTOM正上负下",[63,134450,134451],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[63,134453,134454],{},"✨ 简单记：",[63,134456,134457],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[954,134459,134460],{},"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":138,"searchDepth":35,"depth":35,"links":134462},[134463],{"id":132990,"depth":35,"text":132991,"children":134464},[134465,134466,134467,134468],{"id":132994,"depth":46,"text":132995},{"id":133009,"depth":46,"text":133010},{"id":133177,"depth":46,"text":133178},{"id":134435,"depth":46,"text":134436},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132982,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134475,"title":134476,"body":134477,"description":973,"extension":974,"meta":135895,"navigation":976,"path":135896,"seo":135897,"stem":135898,"__hash__":135899},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134478,"toc":135874},[134479,134482,134486,134494,134498,134503,134511,134523,134527,134532,134540,134551,134555,134560,134601,134609,134613,134616,134619,134622,134716,134719,134813,134816,134910,134913,134916,134946,134949,134952,134982,134985,134988,134991,134994,134997,135000,135003,135073,135076,135080,135084,135125,135129,135135,135138,135141,135145,135148,135151,135154,135235,135238,135241,135245,135249,135252,135255,135258,135261,135264,135270,135279,135283,135302,135306,135316,135319,135322,135325,135328,135331,135334,135337,135340,135349,135353,135362,135365,135370,135423,135428,135594,135597,135600,135605,135608,135611,135614,135617,135622,135770,135773,135776,135781,135784,135789,135823,135826,135829,135833,135836,135843,135846,135849,135852,135855,135858,135861,135864,135868,135871],[10,134480,134476],{"id":134481},"_12-显示隐藏与图形资源",[14,134483,134485],{"id":134484},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[232,134487,134488,134491],{},[22,134489,134490],{},"目的:让一个元素在页面中消失或者显示出来",[22,134492,134493],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[58,134495,134497],{"id":134496},"_1211-display-显示","12.1.1 display 显示",[19,134499,134500],{},[22,134501,134502],{},"display 设置或检索对象是否及如何显示",[232,134504,134505,134508],{},[22,134506,134507],{},"display: none;隐藏对象",[22,134509,134510],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[19,134512,134513,134520],{"start":35},[22,134514,134515,134516,134519],{},"特点： display 隐藏元素后， ",[25,134517,134518],{},"不再占"," 有原来的位置",[22,134521,134522],{},"在js中使用非常的广泛",[58,134524,134526],{"id":134525},"_1212-visibility可见性","12.1.2 visibility可见性",[19,134528,134529],{},[22,134530,134531],{},"visibility 属性用于指定一个元素应可见还是隐藏",[232,134533,134534,134537],{},[22,134535,134536],{},"visibility： visible；元素可见",[22,134538,134539],{},"visibility：hidden；元素隐藏",[19,134541,134542,134545,134548],{"start":35},[22,134543,134544],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[22,134546,134547],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[22,134549,134550],{},"隐藏后继续占有原有位置",[58,134552,134554],{"id":134553},"_1213-overflow溢出","12.1.3 overflow溢出",[232,134556,134557],{},[22,134558,134559],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[1181,134561,134562,134570],{},[1184,134563,134564],{},[1187,134565,134566,134568],{},[1190,134567,127888],{"align":24634},[1190,134569,28387],{"align":24634},[1227,134571,134572,134580,134587,134594],{},[1187,134573,134574,134577],{},[1232,134575,134576],{"align":24634},"visible",[1232,134578,134579],{"align":24634},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[1187,134581,134582,134584],{},[1232,134583,62597],{"align":24634},[1232,134585,134586],{"align":24634},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[1187,134588,134589,134591],{},[1232,134590,129841],{"align":24634},[1232,134592,134593],{"align":24634},"不管超出内容否，总是显示滚动条",[1187,134595,134596,134598],{},[1232,134597,73542],{"align":24634},[1232,134599,134600],{"align":24634},"超出自动显示滚动条，不超出不显示滚动条",[232,134602,134603,134606],{},[22,134604,134605],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[22,134607,134608],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[58,134610,134612],{"id":134611},"_1214-案例收获","12.1.4 案例收获",[29,134614],{"style":31,"src":134615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[63,134617,134618],{},"问题：没做出来动态效果，使用hover没实现",[63,134620,134621],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[133,134623,134624],{"className":257,"code":132848,"language":259,"meta":138,"style":138},[140,134625,134626,134630,134644,134648,134662,134666,134680,134684,134698,134702],{"__ignoreMap":138},[143,134627,134628],{"class":145,"line":146},[143,134629,132855],{"class":266},[143,134631,134632,134634,134636,134638,134640,134642],{"class":145,"line":35},[143,134633,132860],{"class":156},[143,134635,80685],{"class":149},[143,134637,129781],{"class":280},[143,134639,284],{"class":149},[143,134641,132869],{"class":280},[143,134643,130351],{"class":149},[143,134645,134646],{"class":145,"line":46},[143,134647,132876],{"class":266},[143,134649,134650,134652,134654,134656,134658,134660],{"class":145,"line":293},[143,134651,132881],{"class":156},[143,134653,80685],{"class":149},[143,134655,129781],{"class":280},[143,134657,284],{"class":149},[143,134659,55649],{"class":280},[143,134661,130351],{"class":149},[143,134663,134664],{"class":145,"line":306},[143,134665,132896],{"class":266},[143,134667,134668,134670,134672,134674,134676,134678],{"class":145,"line":319},[143,134669,132901],{"class":156},[143,134671,80685],{"class":149},[143,134673,129781],{"class":280},[143,134675,284],{"class":149},[143,134677,55716],{"class":280},[143,134679,130351],{"class":149},[143,134681,134682],{"class":145,"line":332},[143,134683,132916],{"class":266},[143,134685,134686,134688,134690,134692,134694,134696],{"class":145,"line":345},[143,134687,132921],{"class":156},[143,134689,80685],{"class":149},[143,134691,129781],{"class":280},[143,134693,284],{"class":149},[143,134695,87111],{"class":280},[143,134697,130351],{"class":149},[143,134699,134700],{"class":145,"line":701},[143,134701,132936],{"class":266},[143,134703,134704,134706,134708,134710,134712,134714],{"class":145,"line":707},[143,134705,132941],{"class":156},[143,134707,80685],{"class":149},[143,134709,129781],{"class":280},[143,134711,284],{"class":149},[143,134713,132950],{"class":280},[143,134715,130351],{"class":149},[63,134717,134718],{},"完整代码：",[133,134720,134721],{"className":257,"code":132848,"language":259,"meta":138,"style":138},[140,134722,134723,134727,134741,134745,134759,134763,134777,134781,134795,134799],{"__ignoreMap":138},[143,134724,134725],{"class":145,"line":146},[143,134726,132855],{"class":266},[143,134728,134729,134731,134733,134735,134737,134739],{"class":145,"line":35},[143,134730,132860],{"class":156},[143,134732,80685],{"class":149},[143,134734,129781],{"class":280},[143,134736,284],{"class":149},[143,134738,132869],{"class":280},[143,134740,130351],{"class":149},[143,134742,134743],{"class":145,"line":46},[143,134744,132876],{"class":266},[143,134746,134747,134749,134751,134753,134755,134757],{"class":145,"line":293},[143,134748,132881],{"class":156},[143,134750,80685],{"class":149},[143,134752,129781],{"class":280},[143,134754,284],{"class":149},[143,134756,55649],{"class":280},[143,134758,130351],{"class":149},[143,134760,134761],{"class":145,"line":306},[143,134762,132896],{"class":266},[143,134764,134765,134767,134769,134771,134773,134775],{"class":145,"line":319},[143,134766,132901],{"class":156},[143,134768,80685],{"class":149},[143,134770,129781],{"class":280},[143,134772,284],{"class":149},[143,134774,55716],{"class":280},[143,134776,130351],{"class":149},[143,134778,134779],{"class":145,"line":332},[143,134780,132916],{"class":266},[143,134782,134783,134785,134787,134789,134791,134793],{"class":145,"line":345},[143,134784,132921],{"class":156},[143,134786,80685],{"class":149},[143,134788,129781],{"class":280},[143,134790,284],{"class":149},[143,134792,87111],{"class":280},[143,134794,130351],{"class":149},[143,134796,134797],{"class":145,"line":701},[143,134798,132936],{"class":266},[143,134800,134801,134803,134805,134807,134809,134811],{"class":145,"line":707},[143,134802,132941],{"class":156},[143,134804,80685],{"class":149},[143,134806,129781],{"class":280},[143,134808,284],{"class":149},[143,134810,132950],{"class":280},[143,134812,130351],{"class":149},[63,134814,134815],{},"分布思路重点详解：",[133,134817,134818],{"className":257,"code":132848,"language":259,"meta":138,"style":138},[140,134819,134820,134824,134838,134842,134856,134860,134874,134878,134892,134896],{"__ignoreMap":138},[143,134821,134822],{"class":145,"line":146},[143,134823,132855],{"class":266},[143,134825,134826,134828,134830,134832,134834,134836],{"class":145,"line":35},[143,134827,132860],{"class":156},[143,134829,80685],{"class":149},[143,134831,129781],{"class":280},[143,134833,284],{"class":149},[143,134835,132869],{"class":280},[143,134837,130351],{"class":149},[143,134839,134840],{"class":145,"line":46},[143,134841,132876],{"class":266},[143,134843,134844,134846,134848,134850,134852,134854],{"class":145,"line":293},[143,134845,132881],{"class":156},[143,134847,80685],{"class":149},[143,134849,129781],{"class":280},[143,134851,284],{"class":149},[143,134853,55649],{"class":280},[143,134855,130351],{"class":149},[143,134857,134858],{"class":145,"line":306},[143,134859,132896],{"class":266},[143,134861,134862,134864,134866,134868,134870,134872],{"class":145,"line":319},[143,134863,132901],{"class":156},[143,134865,80685],{"class":149},[143,134867,129781],{"class":280},[143,134869,284],{"class":149},[143,134871,55716],{"class":280},[143,134873,130351],{"class":149},[143,134875,134876],{"class":145,"line":332},[143,134877,132916],{"class":266},[143,134879,134880,134882,134884,134886,134888,134890],{"class":145,"line":345},[143,134881,132921],{"class":156},[143,134883,80685],{"class":149},[143,134885,129781],{"class":280},[143,134887,284],{"class":149},[143,134889,87111],{"class":280},[143,134891,130351],{"class":149},[143,134893,134894],{"class":145,"line":701},[143,134895,132936],{"class":266},[143,134897,134898,134900,134902,134904,134906,134908],{"class":145,"line":707},[143,134899,132941],{"class":156},[143,134901,80685],{"class":149},[143,134903,129781],{"class":280},[143,134905,284],{"class":149},[143,134907,132950],{"class":280},[143,134909,130351],{"class":149},[29,134911],{"style":31,"src":134912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[63,134914,134915],{},"图片太大，盒子太小，此时需要修改图片的大小",[133,134917,134918],{"className":135,"code":136,"language":137,"meta":138,"style":138},[140,134919,134920],{"__ignoreMap":138},[143,134921,134922,134924,134926,134928,134930,134932,134934,134936,134938,134940,134942,134944],{"class":145,"line":146},[143,134923,150],{"class":149},[143,134925,29],{"class":153},[143,134927,157],{"class":156},[143,134929,160],{"class":149},[143,134931,164],{"class":163},[143,134933,167],{"class":156},[143,134935,160],{"class":149},[143,134937,172],{"class":163},[143,134939,175],{"class":156},[143,134941,160],{"class":149},[143,134943,180],{"class":163},[143,134945,183],{"class":149},[29,134947],{"style":31,"src":134948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[63,134950,134951],{},"制造遮罩层",[133,134953,134954],{"className":135,"code":136,"language":137,"meta":138,"style":138},[140,134955,134956],{"__ignoreMap":138},[143,134957,134958,134960,134962,134964,134966,134968,134970,134972,134974,134976,134978,134980],{"class":145,"line":146},[143,134959,150],{"class":149},[143,134961,29],{"class":153},[143,134963,157],{"class":156},[143,134965,160],{"class":149},[143,134967,164],{"class":163},[143,134969,167],{"class":156},[143,134971,160],{"class":149},[143,134973,172],{"class":163},[143,134975,175],{"class":156},[143,134977,160],{"class":149},[143,134979,180],{"class":163},[143,134981,183],{"class":149},[63,134983,134984],{},"此时是这样的为标准流",[29,134986],{"style":31,"src":134987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[63,134989,134990],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[63,134992,134993],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[63,134995,134996],{},"让他在中间，用center(background-position)",[63,134998,134999],{},"将需要变的尽可能放到一个盒子中",[63,135001,135002],{},"放大盒子上内部盒子发生变化",[133,135004,135006],{"className":257,"code":135005,"language":259,"meta":138,"style":138},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[140,135007,135008,135014,135024,135028,135035,135045,135057,135069],{"__ignoreMap":138},[143,135009,135010,135012],{"class":145,"line":146},[143,135011,128489],{"class":156},[143,135013,275],{"class":149},[143,135015,135016,135018,135020,135022],{"class":145,"line":35},[143,135017,133222],{"class":280},[143,135019,284],{"class":149},[143,135021,55649],{"class":280},[143,135023,290],{"class":149},[143,135025,135026],{"class":145,"line":46},[143,135027,348],{"class":149},[143,135029,135030,135033],{"class":145,"line":293},[143,135031,135032],{"class":156},".child",[143,135034,275],{"class":149},[143,135036,135037,135039,135041,135043],{"class":145,"line":306},[143,135038,133222],{"class":280},[143,135040,284],{"class":149},[143,135042,55716],{"class":280},[143,135044,290],{"class":149},[143,135046,135047,135049,135051,135053,135055],{"class":145,"line":319},[143,135048,133236],{"class":280},[143,135050,284],{"class":149},[143,135052,1697],{"class":280},[143,135054,1369],{"class":755},[143,135056,290],{"class":149},[143,135058,135059,135061,135063,135065,135067],{"class":145,"line":332},[143,135060,133253],{"class":280},[143,135062,284],{"class":149},[143,135064,1697],{"class":280},[143,135066,1369],{"class":755},[143,135068,290],{"class":149},[143,135070,135071],{"class":145,"line":345},[143,135072,348],{"class":149},[63,135074,135075],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135077,135079],{"id":135078},"_122-精灵图","12.2 精灵图",[58,135081,135083],{"id":135082},"_1221-理解","12.2.1 理解",[19,135085,135086,135104],{},[22,135087,135088,135089,133322,135092,135095,135096,135099,135100,135103],{},"目的： ",[25,135090,135091],{},"为了有效地减少服务器接收和发送请求的次数",[25,135093,135094],{},"提高"," 页面的 ",[25,135097,135098],{},"加载速度"," ，出现了 ",[25,135101,135102],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[22,135105,135106,135107,135109,135110,135112,135113,135115,135116,135118,135119,135121,135122,135124],{},"使用精灵图核心：",[54602,135108],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54602,135111],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54602,135114],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54602,135117],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54602,135120],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54602,135123],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[58,135126,135128],{"id":135127},"_1222-扒图","12.2.2 扒图",[133,135130,135133],{"className":135131,"code":135132,"language":6087},[6085],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[140,135134,135132],{"__ignoreMap":138},[29,135136],{"style":31,"src":135137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[29,135139],{"style":31,"src":135140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[58,135142,135144],{"id":135143},"_1223-精灵图的实现","12.2.3 精灵图的实现",[29,135146],{"style":31,"src":135147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[63,135149,135150],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[29,135152],{"style":31,"src":135153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[133,135155,135157],{"className":257,"code":135156,"language":259,"meta":138,"style":138},"\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",[140,135158,135159,135164,135171,135183,135195,135214,135231],{"__ignoreMap":138},[143,135160,135161],{"class":145,"line":146},[143,135162,135163],{"class":266},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[143,135165,135166,135169],{"class":145,"line":35},[143,135167,135168],{"class":156},".icon",[143,135170,275],{"class":149},[143,135172,135173,135175,135177,135179,135181],{"class":145,"line":46},[143,135174,71448],{"class":280},[143,135176,284],{"class":149},[143,135178,1741],{"class":280},[143,135180,774],{"class":755},[143,135182,290],{"class":149},[143,135184,135185,135187,135189,135191,135193],{"class":145,"line":293},[143,135186,71668],{"class":280},[143,135188,284],{"class":149},[143,135190,1741],{"class":280},[143,135192,774],{"class":755},[143,135194,290],{"class":149},[143,135196,135197,135199,135201,135203,135205,135208,135210,135212],{"class":145,"line":306},[143,135198,71491],{"class":280},[143,135200,284],{"class":149},[143,135202,62609],{"class":280},[143,135204,1049],{"class":149},[143,135206,135207],{"class":6116},"sprites.png",[143,135209,14614],{"class":149},[143,135211,62619],{"class":280},[143,135213,290],{"class":149},[143,135215,135216,135218,135220,135222,135224,135227,135229],{"class":145,"line":319},[143,135217,129681],{"class":280},[143,135219,284],{"class":149},[143,135221,52652],{"class":280},[143,135223,774],{"class":755},[143,135225,135226],{"class":280}," -20",[143,135228,774],{"class":755},[143,135230,290],{"class":149},[143,135232,135233],{"class":145,"line":332},[143,135234,348],{"class":149},[29,135236],{"style":31,"src":135237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[63,135239,135240],{},"在前端中坐标轴的正方向是右和下",[14,135242,135244],{"id":135243},"_123-字体图标","12.3 字体图标",[58,135246,135248],{"id":135247},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[63,135250,135251],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[63,135253,135254],{},"精灵图是有诸多优点的，但是缺点很明显。",[63,135256,135257],{},"1.图片文件还是比较大的。",[63,135259,135260],{},"2.图片本身放大和缩小会失真。",[63,135262,135263],{},"3.一旦图片制作完毕想要更换非常复杂。",[63,135265,135266,135267,26638],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[25,135268,135269],{},"字体图标 iconfont",[63,135271,135272,135275,135276,29283],{},[25,135273,135274],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[25,135277,135278],{},"展示的是图标，本质属于字体",[58,135280,135282],{"id":135281},"_1232-字体图标的优点","12.3.2 字体图标的优点",[232,135284,135285,135290,135293,135296,135299],{},[22,135286,135287,135289],{},[25,135288,26774],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[22,135291,135292],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[22,135294,135295],{},"兼容性：几乎支持所有的浏览器，请放心使用",[22,135297,135298],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[22,135300,135301],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[58,135303,135305],{"id":135304},"_1233-字体库下载网站","12.3.3 字体库下载网站",[232,135307,135308],{},[22,135309,135310,135311],{},"icomoon字体库：",[67,135312,135315],{"href":135313,"rel":135314},"http:\u002F\u002Ficomoon.io\u002F",[71],"http:\u002F\u002Ficomoon.io",[63,135317,135318],{},"进去之后点icomoon app",[29,135320],{"style":31,"src":135321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[63,135323,135324],{},"可以对其编辑：",[29,135326],{"style":31,"src":135327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[63,135329,135330],{},"生成字体：",[29,135332],{"style":31,"src":135333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[63,135335,135336],{},"下载：",[29,135338],{"style":31,"src":135339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[232,135341,135342],{},[22,135343,135344,135345],{},"阿里iconfont字体库： ",[67,135346,135347],{"href":135347,"rel":135348},"http:\u002F\u002Fwww.iconfont.cn\u002F",[71],[58,135350,135352],{"id":135351},"_1234-字体图标的引入","12.3.4 字体图标的引入",[19,135354,135355],{},[22,135356,135357,135358,135361],{},"把下载包里面的 ",[25,135359,135360],{},"fonts"," 文件夹放入页面根目录下",[29,135363],{"style":31,"src":135364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[19,135366,135367],{"start":35},[22,135368,135369],{},"字体文件格式",[1181,135371,135372,135381],{},[1184,135373,135374],{},[1187,135375,135376,135379],{},[1190,135377,135378],{"align":24634},"格式",[1190,135380,24638],{"align":24634},[1227,135382,135383,135393,135403,135413],{},[1187,135384,135385,135390],{},[1232,135386,135387],{"align":24634},[25,135388,135389],{},".ttf",[1232,135391,135392],{"align":24634},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[1187,135394,135395,135400],{},[1232,135396,135397],{"align":24634},[25,135398,135399],{},".woff",[1232,135401,135402],{"align":24634},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[1187,135404,135405,135410],{},[1232,135406,135407],{"align":24634},[25,135408,135409],{},".eot",[1232,135411,135412],{"align":24634},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[1187,135414,135415,135420],{},[1232,135416,135417],{"align":24634},[25,135418,135419],{},"svg",[1232,135421,135422],{"align":24634},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[19,135424,135425],{"start":46},[22,135426,135427],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[133,135429,135431],{"className":257,"code":135430,"language":259,"meta":138,"style":138},"\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",[140,135432,135433,135438,135445,135457,135473,135498,135519,135539,135559,135563,135569,135579,135590],{"__ignoreMap":138},[143,135434,135435],{"class":145,"line":146},[143,135436,135437],{"class":266},"\u002F* 引入字体图标 *\u002F\n",[143,135439,135440,135443],{"class":145,"line":35},[143,135441,135442],{"class":755},"@font-face",[143,135444,275],{"class":149},[143,135446,135447,135450,135452,135455],{"class":145,"line":46},[143,135448,135449],{"class":280},"  font-family",[143,135451,284],{"class":149},[143,135453,135454],{"class":163},"'icomoon'",[143,135456,290],{"class":149},[143,135458,135459,135462,135464,135466,135468,135471],{"class":145,"line":293},[143,135460,135461],{"class":280},"  src",[143,135463,284],{"class":149},[143,135465,62609],{"class":280},[143,135467,1049],{"class":149},[143,135469,135470],{"class":163},"'fonts\u002Ficomoon.eot'",[143,135472,3619],{"class":149},[143,135474,135475,135477,135479,135481,135483,135486,135488,135491,135493,135496],{"class":145,"line":306},[143,135476,135461],{"class":280},[143,135478,284],{"class":149},[143,135480,62609],{"class":280},[143,135482,1049],{"class":149},[143,135484,135485],{"class":163},"'fonts\u002Ficomoon.eot?#iefix'",[143,135487,14614],{"class":149},[143,135489,135490],{"class":280},"format",[143,135492,1049],{"class":149},[143,135494,135495],{"class":163},"'embedded-opentype'",[143,135497,38945],{"class":149},[143,135499,135500,135503,135505,135508,135510,135512,135514,135517],{"class":145,"line":319},[143,135501,135502],{"class":280},"       url",[143,135504,1049],{"class":149},[143,135506,135507],{"class":163},"'fonts\u002Ficomoon.woff'",[143,135509,14614],{"class":149},[143,135511,135490],{"class":280},[143,135513,1049],{"class":149},[143,135515,135516],{"class":163},"'woff'",[143,135518,38945],{"class":149},[143,135520,135521,135523,135525,135528,135530,135532,135534,135537],{"class":145,"line":332},[143,135522,135502],{"class":280},[143,135524,1049],{"class":149},[143,135526,135527],{"class":163},"'fonts\u002Ficomoon.ttf'",[143,135529,14614],{"class":149},[143,135531,135490],{"class":280},[143,135533,1049],{"class":149},[143,135535,135536],{"class":163},"'truetype'",[143,135538,38945],{"class":149},[143,135540,135541,135543,135545,135548,135550,135552,135554,135557],{"class":145,"line":345},[143,135542,135502],{"class":280},[143,135544,1049],{"class":149},[143,135546,135547],{"class":163},"'fonts\u002Ficomoon.svg#icomoon'",[143,135549,14614],{"class":149},[143,135551,135490],{"class":280},[143,135553,1049],{"class":149},[143,135555,135556],{"class":163},"'svg'",[143,135558,3619],{"class":149},[143,135560,135561],{"class":145,"line":701},[143,135562,348],{"class":149},[143,135564,135565,135567],{"class":145,"line":707},[143,135566,135168],{"class":156},[143,135568,275],{"class":149},[143,135570,135571,135573,135575,135577],{"class":145,"line":727},[143,135572,135449],{"class":280},[143,135574,284],{"class":149},[143,135576,135454],{"class":163},[143,135578,290],{"class":149},[143,135580,135581,135584,135586,135588],{"class":145,"line":2518},[143,135582,135583],{"class":280},"  font-style",[143,135585,284],{"class":149},[143,135587,64723],{"class":280},[143,135589,290],{"class":149},[143,135591,135592],{"class":145,"line":2524},[143,135593,348],{"class":149},[63,135595,135596],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[29,135598],{"style":31,"src":135599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[19,135601,135602],{"start":293},[22,135603,135604],{},"添加字体",[29,135606],{"style":31,"src":135607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[63,135609,135610],{},"复制：",[29,135612],{"style":31,"src":135613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[63,135615,135616],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[19,135618,135619],{"start":306},[22,135620,135621],{},"代码展示：",[133,135623,135624],{"className":257,"code":135430,"language":259,"meta":138,"style":138},[140,135625,135626,135630,135636,135646,135660,135682,135700,135718,135736,135740,135746,135756,135766],{"__ignoreMap":138},[143,135627,135628],{"class":145,"line":146},[143,135629,135437],{"class":266},[143,135631,135632,135634],{"class":145,"line":35},[143,135633,135442],{"class":755},[143,135635,275],{"class":149},[143,135637,135638,135640,135642,135644],{"class":145,"line":46},[143,135639,135449],{"class":280},[143,135641,284],{"class":149},[143,135643,135454],{"class":163},[143,135645,290],{"class":149},[143,135647,135648,135650,135652,135654,135656,135658],{"class":145,"line":293},[143,135649,135461],{"class":280},[143,135651,284],{"class":149},[143,135653,62609],{"class":280},[143,135655,1049],{"class":149},[143,135657,135470],{"class":163},[143,135659,3619],{"class":149},[143,135661,135662,135664,135666,135668,135670,135672,135674,135676,135678,135680],{"class":145,"line":306},[143,135663,135461],{"class":280},[143,135665,284],{"class":149},[143,135667,62609],{"class":280},[143,135669,1049],{"class":149},[143,135671,135485],{"class":163},[143,135673,14614],{"class":149},[143,135675,135490],{"class":280},[143,135677,1049],{"class":149},[143,135679,135495],{"class":163},[143,135681,38945],{"class":149},[143,135683,135684,135686,135688,135690,135692,135694,135696,135698],{"class":145,"line":319},[143,135685,135502],{"class":280},[143,135687,1049],{"class":149},[143,135689,135507],{"class":163},[143,135691,14614],{"class":149},[143,135693,135490],{"class":280},[143,135695,1049],{"class":149},[143,135697,135516],{"class":163},[143,135699,38945],{"class":149},[143,135701,135702,135704,135706,135708,135710,135712,135714,135716],{"class":145,"line":332},[143,135703,135502],{"class":280},[143,135705,1049],{"class":149},[143,135707,135527],{"class":163},[143,135709,14614],{"class":149},[143,135711,135490],{"class":280},[143,135713,1049],{"class":149},[143,135715,135536],{"class":163},[143,135717,38945],{"class":149},[143,135719,135720,135722,135724,135726,135728,135730,135732,135734],{"class":145,"line":345},[143,135721,135502],{"class":280},[143,135723,1049],{"class":149},[143,135725,135547],{"class":163},[143,135727,14614],{"class":149},[143,135729,135490],{"class":280},[143,135731,1049],{"class":149},[143,135733,135556],{"class":163},[143,135735,3619],{"class":149},[143,135737,135738],{"class":145,"line":701},[143,135739,348],{"class":149},[143,135741,135742,135744],{"class":145,"line":707},[143,135743,135168],{"class":156},[143,135745,275],{"class":149},[143,135747,135748,135750,135752,135754],{"class":145,"line":727},[143,135749,135449],{"class":280},[143,135751,284],{"class":149},[143,135753,135454],{"class":163},[143,135755,290],{"class":149},[143,135757,135758,135760,135762,135764],{"class":145,"line":2518},[143,135759,135583],{"class":280},[143,135761,284],{"class":149},[143,135763,64723],{"class":280},[143,135765,290],{"class":149},[143,135767,135768],{"class":145,"line":2524},[143,135769,348],{"class":149},[29,135771],{"style":31,"src":135772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[63,135774,135775],{},"更加细节展示：",[19,135777,135778],{},[22,135779,135780],{},"html 标签内添加小图标",[29,135782],{"style":31,"src":135783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[19,135785,135786],{"start":35},[22,135787,135788],{},"给标签定义字体",[133,135790,135791],{"className":135,"code":917,"language":137,"meta":138,"style":138},[140,135792,135793,135797,135811,135815],{"__ignoreMap":138},[143,135794,135795],{"class":145,"line":146},[143,135796,924],{"class":266},[143,135798,135799,135801,135803,135805,135807,135809],{"class":145,"line":35},[143,135800,150],{"class":149},[143,135802,614],{"class":153},[143,135804,617],{"class":156},[143,135806,160],{"class":149},[143,135808,937],{"class":163},[143,135810,183],{"class":149},[143,135812,135813],{"class":145,"line":46},[143,135814,944],{"class":149},[143,135816,135817,135819,135821],{"class":145,"line":293},[143,135818,730],{"class":149},[143,135820,614],{"class":153},[143,135822,183],{"class":149},[63,135824,135825],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[29,135827],{"style":31,"src":135828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[58,135830,135832],{"id":135831},"_1235-字体图标的追加","12.3.5 字体图标的追加",[63,135834,135835],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[63,135837,135838,135839,135842],{},"把压缩包里面的 ",[25,135840,135841],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[63,135844,135845],{},"打开网站，点下方：",[29,135847],{"style":31,"src":135848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[29,135850],{"style":31,"src":135851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[29,135853],{"style":31,"src":135854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[63,135856,135857],{},"点yes重新加载",[63,135859,135860],{},"然后重复之前的操作就可以实现了",[63,135862,135863],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[58,135865,135867],{"id":135866},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[29,135869],{"style":31,"src":135870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[954,135872,135873],{},"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":138,"searchDepth":35,"depth":35,"links":135875},[135876,135882,135887],{"id":134484,"depth":35,"text":134485,"children":135877},[135878,135879,135880,135881],{"id":134496,"depth":46,"text":134497},{"id":134525,"depth":46,"text":134526},{"id":134553,"depth":46,"text":134554},{"id":134611,"depth":46,"text":134612},{"id":135078,"depth":35,"text":135079,"children":135883},[135884,135885,135886],{"id":135082,"depth":46,"text":135083},{"id":135127,"depth":46,"text":135128},{"id":135143,"depth":46,"text":135144},{"id":135243,"depth":35,"text":135244,"children":135888},[135889,135890,135891,135892,135893,135894],{"id":135247,"depth":46,"text":135248},{"id":135281,"depth":46,"text":135282},{"id":135304,"depth":46,"text":135305},{"id":135351,"depth":46,"text":135352},{"id":135831,"depth":46,"text":135832},{"id":135866,"depth":46,"text":135867},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134476,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135901,"title":135902,"body":135903,"description":973,"extension":974,"meta":137129,"navigation":976,"path":137130,"seo":137131,"stem":137132,"__hash__":137133},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135904,"toc":137110},[135905,135908,135912,135915,135929,135997,136027,136030,136034,136038,136140,136187,136191,136194,136197,136231,136234,136237,136240,136243,136246,136249,136252,136254,136257,136260,136263,136266,136269,136272,136275,136303,136306,136310,136313,136320,136323,136326,136352,136355,136359,136362,136365,136372,136376,136379,136381,136413,136416,136419,136431,136437,136440,136443,136446,136448,136452,136454,136457,136460,136505,136509,136511,136514,136521,136563,136566,136570,136575,136589,136593,136596,136599,136602,136605,136608,136642,136645,136648,136702,136705,136708,136711,136714,136766,136769,136772,136821,136825,136827,136830,136833,136836,136839,136842,136900,136903,136909,136912,136915,136947,136950,136954,136958,136961,136993,136997,137000,137044,137048,137051,137054,137057,137060,137063,137066,137069,137071,137074,137076,137079,137082,137085,137088,137093,137096,137098,137101,137104,137107],[10,135906,135902],{"id":135907},"_13-界面样式与布局技巧",[14,135909,135911],{"id":135910},"_131-css三角","13.1 css三角",[63,135913,135914],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[232,135916,135917,135920,135923,135926],{},[22,135918,135919],{},"用css 边框可以模拟三角效果",[22,135921,135922],{},"宽度高度为0",[22,135924,135925],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[22,135927,135928],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[133,135930,135932],{"className":257,"code":135931,"language":259,"meta":138,"style":138},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[140,135933,135934,135939,135946,135956,135966,135982,135993],{"__ignoreMap":138},[143,135935,135936],{"class":145,"line":146},[143,135937,135938],{"class":266},"\u002F* CSS 实现三角形 *\u002F\n",[143,135940,135941,135944],{"class":145,"line":35},[143,135942,135943],{"class":156},".triangle",[143,135945,275],{"class":149},[143,135947,135948,135950,135952,135954],{"class":145,"line":46},[143,135949,71448],{"class":280},[143,135951,284],{"class":149},[143,135953,1234],{"class":280},[143,135955,290],{"class":149},[143,135957,135958,135960,135962,135964],{"class":145,"line":293},[143,135959,71668],{"class":280},[143,135961,284],{"class":149},[143,135963,1234],{"class":280},[143,135965,290],{"class":149},[143,135967,135968,135970,135972,135974,135976,135978,135980],{"class":145,"line":306},[143,135969,766],{"class":280},[143,135971,284],{"class":149},[143,135973,1487],{"class":280},[143,135975,774],{"class":755},[143,135977,777],{"class":280},[143,135979,64873],{"class":280},[143,135981,290],{"class":149},[143,135983,135984,135987,135989,135991],{"class":145,"line":319},[143,135985,135986],{"class":280},"  border-bottom-color",[143,135988,284],{"class":149},[143,135990,63252],{"class":280},[143,135992,290],{"class":149},[143,135994,135995],{"class":145,"line":332},[143,135996,348],{"class":149},[133,135998,135999],{"className":257,"code":131573,"language":259,"meta":138,"style":138},[140,136000,136001,136007,136023],{"__ignoreMap":138},[143,136002,136003,136005],{"class":145,"line":146},[143,136004,614],{"class":153},[143,136006,275],{"class":149},[143,136008,136009,136011,136013,136015,136017,136019,136021],{"class":145,"line":35},[143,136010,766],{"class":280},[143,136012,284],{"class":149},[143,136014,771],{"class":280},[143,136016,774],{"class":755},[143,136018,777],{"class":280},[143,136020,130813],{"class":280},[143,136022,290],{"class":149},[143,136024,136025],{"class":145,"line":46},[143,136026,348],{"class":149},[29,136028],{"style":31,"src":136029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136031,136033],{"id":136032},"_132-css用户界面样式","13.2 css用户界面样式",[58,136035,136037],{"id":136036},"_1321-鼠标样式","13.2.1 鼠标样式",[133,136039,136041],{"className":257,"code":136040,"language":259,"meta":138,"style":138},"\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",[140,136042,136043,136048,136067,136085,136104,136121],{"__ignoreMap":138},[143,136044,136045],{"class":145,"line":146},[143,136046,136047],{"class":266},"\u002F* 鼠标样式 *\u002F\n",[143,136049,136050,136052,136054,136057,136059,136061,136064],{"class":145,"line":35},[143,136051,614],{"class":153},[143,136053,80685],{"class":149},[143,136055,136056],{"class":280},"cursor",[143,136058,284],{"class":149},[143,136060,62913],{"class":280},[143,136062,136063],{"class":149},"; }   ",[143,136065,136066],{"class":266},"\u002F* 手型 *\u002F\n",[143,136068,136069,136071,136073,136075,136077,136080,136082],{"class":145,"line":46},[143,136070,614],{"class":153},[143,136072,80685],{"class":149},[143,136074,136056],{"class":280},[143,136076,284],{"class":149},[143,136078,136079],{"class":280},"default",[143,136081,136063],{"class":149},[143,136083,136084],{"class":266},"\u002F* 默认 *\u002F\n",[143,136086,136087,136089,136091,136093,136095,136098,136101],{"class":145,"line":293},[143,136088,614],{"class":153},[143,136090,80685],{"class":149},[143,136092,136056],{"class":280},[143,136094,284],{"class":149},[143,136096,136097],{"class":280},"move",[143,136099,136100],{"class":149},"; }      ",[143,136102,136103],{"class":266},"\u002F* 移动 *\u002F\n",[143,136105,136106,136108,136110,136112,136114,136116,136118],{"class":145,"line":306},[143,136107,614],{"class":153},[143,136109,80685],{"class":149},[143,136111,136056],{"class":280},[143,136113,284],{"class":149},[143,136115,6087],{"class":280},[143,136117,136100],{"class":149},[143,136119,136120],{"class":266},"\u002F* 文本 *\u002F\n",[143,136122,136123,136125,136127,136129,136131,136134,136137],{"class":145,"line":319},[143,136124,614],{"class":153},[143,136126,80685],{"class":149},[143,136128,136056],{"class":280},[143,136130,284],{"class":149},[143,136132,136133],{"class":280},"not-allowed",[143,136135,136136],{"class":149},"; } ",[143,136138,136139],{"class":266},"\u002F* 禁止 *\u002F\n",[1181,136141,136142,136150],{},[1184,136143,136144],{},[1187,136145,136146,136148],{},[1190,136147,127888],{"align":24634},[1190,136149,28387],{"align":24634},[1227,136151,136152,136159,136166,136173,136180],{},[1187,136153,136154,136156],{},[1232,136155,136079],{"align":24634},[1232,136157,136158],{"align":24634},"小白 默认",[1187,136160,136161,136163],{},[1232,136162,62913],{"align":24634},[1232,136164,136165],{"align":24634},"小手",[1187,136167,136168,136170],{},[1232,136169,136097],{"align":24634},[1232,136171,136172],{"align":24634},"移动",[1187,136174,136175,136177],{},[1232,136176,6087],{"align":24634},[1232,136178,136179],{"align":24634},"文本",[1187,136181,136182,136184],{},[1232,136183,136133],{"align":24634},[1232,136185,136186],{"align":24634},"禁止",[58,136188,136190],{"id":136189},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[63,136192,136193],{},"去除表单轮廓线",[63,136195,136196],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[133,136198,136199],{"className":257,"code":130785,"language":259,"meta":138,"style":138},[140,136200,136201,136205,136211,136227],{"__ignoreMap":138},[143,136202,136203],{"class":145,"line":146},[143,136204,130792],{"class":266},[143,136206,136207,136209],{"class":145,"line":35},[143,136208,614],{"class":153},[143,136210,275],{"class":149},[143,136212,136213,136215,136217,136219,136221,136223,136225],{"class":145,"line":46},[143,136214,766],{"class":280},[143,136216,284],{"class":149},[143,136218,771],{"class":280},[143,136220,774],{"class":755},[143,136222,777],{"class":280},[143,136224,130813],{"class":280},[143,136226,290],{"class":149},[143,136228,136229],{"class":145,"line":293},[143,136230,348],{"class":149},[63,136232,136233],{},"文本域：",[29,136235],{"style":31,"src":136236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[63,136238,136239],{},"此时会有一个空白区域",[29,136241],{"style":31,"src":136242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[63,136244,136245],{},"写在同一行就不会出现这个问题",[29,136247],{"style":31,"src":136248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[63,136250,136251],{},"文本域是行内块元素，一定记住！！！",[63,136253,99109],{},[29,136255],{"style":31,"src":136256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[63,136258,136259],{},"文本域尽量放在一行",[63,136261,136262],{},"知识回顾：cols是列，rols是行",[29,136264],{"style":31,"src":136265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[63,136267,136268],{},"它可以进行拖动，显然这是我们不愿意看到的",[29,136270],{"style":31,"src":136271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[63,136273,136274],{},"使用resize进行解决",[133,136276,136278],{"className":257,"code":136277,"language":259,"meta":138,"style":138},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[140,136279,136280,136286,136299],{"__ignoreMap":138},[143,136281,136282,136284],{"class":145,"line":146},[143,136283,746],{"class":153},[143,136285,275],{"class":149},[143,136287,136288,136290,136292,136294,136296],{"class":145,"line":35},[143,136289,71678],{"class":280},[143,136291,284],{"class":149},[143,136293,55622],{"class":280},[143,136295,131283],{"class":149},[143,136297,136298],{"class":266},"\u002F* 取消表单轮廓线 *\u002F\n",[143,136300,136301],{"class":145,"line":46},[143,136302,348],{"class":149},[63,136304,136305],{},"此时就无法通过右下方实现拖动了",[58,136307,136309],{"id":136308},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[63,136311,136312],{},"实现一个盒子中的文字和图片对齐",[63,136314,136315,136316,136319],{},"用于设置一个元素的 ",[25,136317,136318],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[63,136321,136322],{},"图片和文字默认是基线对齐",[29,136324],{"style":31,"src":136325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[133,136327,136328],{"className":257,"code":136277,"language":259,"meta":138,"style":138},[140,136329,136330,136336,136348],{"__ignoreMap":138},[143,136331,136332,136334],{"class":145,"line":146},[143,136333,746],{"class":153},[143,136335,275],{"class":149},[143,136337,136338,136340,136342,136344,136346],{"class":145,"line":35},[143,136339,71678],{"class":280},[143,136341,284],{"class":149},[143,136343,55622],{"class":280},[143,136345,131283],{"class":149},[143,136347,136298],{"class":266},[143,136349,136350],{"class":145,"line":46},[143,136351,348],{"class":149},[29,136353],{"style":31,"src":136354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22896,136356,136358],{"id":136357},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[63,136360,136361],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[29,136363],{"style":31,"src":136364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[63,136366,136367,136368,136371],{},"此时可以给图片、表单这些行内块元素的 ",[25,136369,136370],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22896,136373,136375],{"id":136374},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[63,136377,136378],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[63,136380,15532],{},[133,136382,136384],{"className":257,"code":136383,"language":259,"meta":138,"style":138},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[140,136385,136386,136391,136397,136409],{"__ignoreMap":138},[143,136387,136388],{"class":145,"line":146},[143,136389,136390],{"class":266},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[143,136392,136393,136395],{"class":145,"line":35},[143,136394,29],{"class":153},[143,136396,275],{"class":149},[143,136398,136399,136402,136404,136407],{"class":145,"line":46},[143,136400,136401],{"class":280},"  vertical-align",[143,136403,284],{"class":149},[143,136405,136406],{"class":280},"middle",[143,136408,290],{"class":149},[143,136410,136411],{"class":145,"line":293},[143,136412,348],{"class":149},[29,136414],{"style":31,"src":136415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[63,136417,136418],{},"主要解决方法有两种：",[19,136420,136421],{},[22,136422,136423,136426,136427,136430],{},[25,136424,136425],{},"给图片"," 添加 ",[25,136428,136429],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[63,136432,136433,136434],{},"2.把图片转换为块级元素 ",[25,136435,136436],{},"display: block",[63,136438,136439],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[63,136441,136442],{},"img {",[63,136444,136445],{},"vertical-align:middle;",[63,136447,366],{},[58,136449,136451],{"id":136450},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[63,136453,125],{},[29,136455],{"style":31,"src":136456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[63,136458,136459],{},"单行文本溢出显示省略号--必须满足三个条件：",[133,136461,136463],{"className":257,"code":136462,"language":259,"meta":138,"style":138},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[140,136464,136465,136470,136476,136486,136491,136501],{"__ignoreMap":138},[143,136466,136467],{"class":145,"line":146},[143,136468,136469],{"class":266},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[143,136471,136472,136474],{"class":145,"line":35},[143,136473,29],{"class":153},[143,136475,275],{"class":149},[143,136477,136478,136480,136482,136484],{"class":145,"line":46},[143,136479,136401],{"class":280},[143,136481,284],{"class":149},[143,136483,136406],{"class":280},[143,136485,290],{"class":149},[143,136487,136488],{"class":145,"line":293},[143,136489,136490],{"class":266},"  \u002F* 或 *\u002F\n",[143,136492,136493,136495,136497,136499],{"class":145,"line":306},[143,136494,281],{"class":280},[143,136496,284],{"class":149},[143,136498,61752],{"class":280},[143,136500,290],{"class":149},[143,136502,136503],{"class":145,"line":319},[143,136504,348],{"class":149},[58,136506,136508],{"id":136507},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[63,136510,125],{},[29,136512],{"style":31,"src":136513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[63,136515,136516,136517,136520],{},"多行文本溢出显示省略号， ",[25,136518,136519],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[133,136522,136523],{"className":257,"code":136462,"language":259,"meta":138,"style":138},[140,136524,136525,136529,136535,136545,136549,136559],{"__ignoreMap":138},[143,136526,136527],{"class":145,"line":146},[143,136528,136469],{"class":266},[143,136530,136531,136533],{"class":145,"line":35},[143,136532,29],{"class":153},[143,136534,275],{"class":149},[143,136536,136537,136539,136541,136543],{"class":145,"line":46},[143,136538,136401],{"class":280},[143,136540,284],{"class":149},[143,136542,136406],{"class":280},[143,136544,290],{"class":149},[143,136546,136547],{"class":145,"line":293},[143,136548,136490],{"class":266},[143,136550,136551,136553,136555,136557],{"class":145,"line":306},[143,136552,281],{"class":280},[143,136554,284],{"class":149},[143,136556,61752],{"class":280},[143,136558,290],{"class":149},[143,136560,136561],{"class":145,"line":319},[143,136562,348],{"class":149},[63,136564,136565],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136567,136569],{"id":136568},"_133-常见布局技巧","13.3 常见布局技巧",[63,136571,136572],{},[25,136573,136574],{},"巧妙利用一个技术更快更好的布局：",[19,136576,136577,136580,136583,136586],{},[22,136578,136579],{},"margin负值的运用",[22,136581,136582],{},"文字围绕浮动元素",[22,136584,136585],{},"行内块的巧妙运用",[22,136587,136588],{},"CSS三角强化",[58,136590,136592],{"id":136591},"_1331-margin负值的运用","13.3.1 margin负值的运用",[63,136594,136595],{},"应用场景：",[29,136597],{"style":31,"src":136598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[29,136600],{"style":31,"src":136601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[63,136603,136604],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[63,136606,136607],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[133,136609,136610],{"className":257,"code":130785,"language":259,"meta":138,"style":138},[140,136611,136612,136616,136622,136638],{"__ignoreMap":138},[143,136613,136614],{"class":145,"line":146},[143,136615,130792],{"class":266},[143,136617,136618,136620],{"class":145,"line":35},[143,136619,614],{"class":153},[143,136621,275],{"class":149},[143,136623,136624,136626,136628,136630,136632,136634,136636],{"class":145,"line":46},[143,136625,766],{"class":280},[143,136627,284],{"class":149},[143,136629,771],{"class":280},[143,136631,774],{"class":755},[143,136633,777],{"class":280},[143,136635,130813],{"class":280},[143,136637,290],{"class":149},[143,136639,136640],{"class":145,"line":293},[143,136641,348],{"class":149},[29,136643],{"style":31,"src":136644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[63,136646,136647],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[133,136649,136651],{"className":257,"code":136650,"language":259,"meta":138,"style":138},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[140,136652,136653,136658,136664,136674,136686,136698],{"__ignoreMap":138},[143,136654,136655],{"class":145,"line":146},[143,136656,136657],{"class":266},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[143,136659,136660,136662],{"class":145,"line":35},[143,136661,131268],{"class":156},[143,136663,275],{"class":149},[143,136665,136666,136668,136670,136672],{"class":145,"line":46},[143,136667,133222],{"class":280},[143,136669,284],{"class":149},[143,136671,55649],{"class":280},[143,136673,290],{"class":149},[143,136675,136676,136678,136680,136682,136684],{"class":145,"line":293},[143,136677,133236],{"class":280},[143,136679,284],{"class":149},[143,136681,1487],{"class":280},[143,136683,774],{"class":755},[143,136685,290],{"class":149},[143,136687,136688,136690,136692,136694,136696],{"class":145,"line":306},[143,136689,133253],{"class":280},[143,136691,284],{"class":149},[143,136693,1741],{"class":280},[143,136695,774],{"class":755},[143,136697,290],{"class":149},[143,136699,136700],{"class":145,"line":319},[143,136701,348],{"class":149},[63,136703,136704],{},"加上上述代码会发现：",[29,136706],{"style":31,"src":136707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[63,136709,136710],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[63,136712,136713],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[133,136715,136716],{"className":257,"code":136650,"language":259,"meta":138,"style":138},[140,136717,136718,136722,136728,136738,136750,136762],{"__ignoreMap":138},[143,136719,136720],{"class":145,"line":146},[143,136721,136657],{"class":266},[143,136723,136724,136726],{"class":145,"line":35},[143,136725,131268],{"class":156},[143,136727,275],{"class":149},[143,136729,136730,136732,136734,136736],{"class":145,"line":46},[143,136731,133222],{"class":280},[143,136733,284],{"class":149},[143,136735,55649],{"class":280},[143,136737,290],{"class":149},[143,136739,136740,136742,136744,136746,136748],{"class":145,"line":293},[143,136741,133236],{"class":280},[143,136743,284],{"class":149},[143,136745,1487],{"class":280},[143,136747,774],{"class":755},[143,136749,290],{"class":149},[143,136751,136752,136754,136756,136758,136760],{"class":145,"line":306},[143,136753,133253],{"class":280},[143,136755,284],{"class":149},[143,136757,1741],{"class":280},[143,136759,774],{"class":755},[143,136761,290],{"class":149},[143,136763,136764],{"class":145,"line":319},[143,136765,348],{"class":149},[63,136767,136768],{},"解决方式2：",[63,136770,136771],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[133,136773,136775],{"className":257,"code":136774,"language":259,"meta":138,"style":138},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[140,136776,136777,136783,136793,136805,136817],{"__ignoreMap":138},[143,136778,136779,136781],{"class":145,"line":146},[143,136780,614],{"class":153},[143,136782,275],{"class":149},[143,136784,136785,136787,136789,136791],{"class":145,"line":35},[143,136786,133222],{"class":280},[143,136788,284],{"class":149},[143,136790,55649],{"class":280},[143,136792,290],{"class":149},[143,136794,136795,136797,136799,136801,136803],{"class":145,"line":46},[143,136796,133236],{"class":280},[143,136798,284],{"class":149},[143,136800,1487],{"class":280},[143,136802,774],{"class":755},[143,136804,290],{"class":149},[143,136806,136807,136809,136811,136813,136815],{"class":145,"line":293},[143,136808,133253],{"class":280},[143,136810,284],{"class":149},[143,136812,1741],{"class":280},[143,136814,774],{"class":755},[143,136816,290],{"class":149},[143,136818,136819],{"class":145,"line":306},[143,136820,348],{"class":149},[58,136822,136824],{"id":136823},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[63,136826,136595],{},[29,136828],{"style":31,"src":136829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[63,136831,136832],{},"实现结构图：",[29,136834],{"style":31,"src":136835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[63,136837,136838],{},"巧妙运用浮动元素不会压住文字的特性",[63,136840,136841],{},"代码显示：",[133,136843,136845],{"className":257,"code":136844,"language":259,"meta":138,"style":138},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[140,136846,136847,136853,136863,136867,136872,136876,136882,136896],{"__ignoreMap":138},[143,136848,136849,136851],{"class":145,"line":146},[143,136850,131268],{"class":156},[143,136852,275],{"class":149},[143,136854,136855,136857,136859,136861],{"class":145,"line":35},[143,136856,131896],{"class":280},[143,136858,284],{"class":149},[143,136860,24634],{"class":280},[143,136862,290],{"class":149},[143,136864,136865],{"class":145,"line":46},[143,136866,348],{"class":149},[143,136868,136869],{"class":145,"line":293},[143,136870,136871],{"class":149},"```Css\n",[143,136873,136874],{"class":145,"line":306},[143,136875,131263],{"class":266},[143,136877,136878,136880],{"class":145,"line":319},[143,136879,131268],{"class":156},[143,136881,275],{"class":149},[143,136883,136884,136886,136888,136890,136892,136894],{"class":145,"line":332},[143,136885,71350],{"class":280},[143,136887,284],{"class":149},[143,136889,1234],{"class":280},[143,136891,52448],{"class":280},[143,136893,131283],{"class":149},[143,136895,131286],{"class":266},[143,136897,136898],{"class":145,"line":345},[143,136899,348],{"class":149},[63,136901,136902],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[133,136904,136907],{"className":136905,"code":136906,"language":6087},[6085],"\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",[140,136908,136906],{"__ignoreMap":138},[29,136910],{"style":31,"src":136911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[63,136913,136914],{},"最终展示结果：",[133,136916,136917],{"className":257,"code":131256,"language":259,"meta":138,"style":138},[140,136918,136919,136923,136929,136943],{"__ignoreMap":138},[143,136920,136921],{"class":145,"line":146},[143,136922,131263],{"class":266},[143,136924,136925,136927],{"class":145,"line":35},[143,136926,131268],{"class":156},[143,136928,275],{"class":149},[143,136930,136931,136933,136935,136937,136939,136941],{"class":145,"line":46},[143,136932,71350],{"class":280},[143,136934,284],{"class":149},[143,136936,1234],{"class":280},[143,136938,52448],{"class":280},[143,136940,131283],{"class":149},[143,136942,131286],{"class":266},[143,136944,136945],{"class":145,"line":293},[143,136946,348],{"class":149},[29,136948],{"style":31,"src":136949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136951,136953],{"id":136952},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[58,136955,136957],{"id":136956},"_1341-原理","13.4.1 原理",[29,136959],{"style":31,"src":136960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[133,136962,136963],{"className":257,"code":131256,"language":259,"meta":138,"style":138},[140,136964,136965,136969,136975,136989],{"__ignoreMap":138},[143,136966,136967],{"class":145,"line":146},[143,136968,131263],{"class":266},[143,136970,136971,136973],{"class":145,"line":35},[143,136972,131268],{"class":156},[143,136974,275],{"class":149},[143,136976,136977,136979,136981,136983,136985,136987],{"class":145,"line":46},[143,136978,71350],{"class":280},[143,136980,284],{"class":149},[143,136982,1234],{"class":280},[143,136984,52448],{"class":280},[143,136986,131283],{"class":149},[143,136988,131286],{"class":266},[143,136990,136991],{"class":145,"line":293},[143,136992,348],{"class":149},[58,136994,136996],{"id":136995},"_1342-实例","13.4.2 实例",[29,136998],{"style":31,"src":136999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[133,137001,137002],{"className":257,"code":131882,"language":259,"meta":138,"style":138},[140,137003,137004,137010,137020,137024,137030,137040],{"__ignoreMap":138},[143,137005,137006,137008],{"class":145,"line":146},[143,137007,131889],{"class":156},[143,137009,275],{"class":149},[143,137011,137012,137014,137016,137018],{"class":145,"line":35},[143,137013,131896],{"class":280},[143,137015,284],{"class":149},[143,137017,24634],{"class":280},[143,137019,290],{"class":149},[143,137021,137022],{"class":145,"line":46},[143,137023,348],{"class":149},[143,137025,137026,137028],{"class":145,"line":293},[143,137027,131911],{"class":156},[143,137029,275],{"class":149},[143,137031,137032,137034,137036,137038],{"class":145,"line":306},[143,137033,131896],{"class":280},[143,137035,284],{"class":149},[143,137037,73401],{"class":280},[143,137039,290],{"class":149},[143,137041,137042],{"class":145,"line":319},[143,137043,348],{"class":149},[14,137045,137047],{"id":137046},"_135-css的初始化","13.5 css的初始化",[63,137049,137050],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[63,137052,137053],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[63,137055,137056],{},"每个网页都必须首先进行 CSS初始化。",[63,137058,137059],{},"这里我们以 京东CSS初始化代码为例。",[63,137061,137062],{},"在网页右键查看网页源代码",[63,137064,137065],{},"找到css的link引入语句",[63,137067,137068],{},"然后ctrl+f 输入body",[63,137070,78105],{},[29,137072],{"style":31,"src":137073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[63,137075,78128],{},[29,137077],{"style":31,"src":137078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[63,137080,137081],{},"③打开了网页上传压缩的代码",[29,137083],{"style":31,"src":137084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[63,137086,137087],{},"④从body前可以查看这个网页的初始化代码",[63,137089,137090],{},[25,137091,137092],{},"Unicode编码字体：",[63,137094,137095],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[63,137097,84085],{},[63,137099,137100],{},"黑体 \\9ED1\\4F53",[63,137102,137103],{},"宋体 \\5B8B\\4F53",[63,137105,137106],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[954,137108,137109],{},"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":138,"searchDepth":35,"depth":35,"links":137111},[137112,137113,137120,137124,137128],{"id":135910,"depth":35,"text":135911},{"id":136032,"depth":35,"text":136033,"children":137114},[137115,137116,137117,137118,137119],{"id":136036,"depth":46,"text":136037},{"id":136189,"depth":46,"text":136190},{"id":136308,"depth":46,"text":136309},{"id":136450,"depth":46,"text":136451},{"id":136507,"depth":46,"text":136508},{"id":136568,"depth":35,"text":136569,"children":137121},[137122,137123],{"id":136591,"depth":46,"text":136592},{"id":136823,"depth":46,"text":136824},{"id":136952,"depth":35,"text":136953,"children":137125},[137126,137127],{"id":136956,"depth":46,"text":136957},{"id":136995,"depth":46,"text":136996},{"id":137046,"depth":35,"text":137047},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135902,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137135,"title":137136,"body":137137,"description":973,"extension":974,"meta":138820,"navigation":976,"path":138821,"seo":138822,"stem":138823,"__hash__":138824},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137138,"toc":138809},[137139,137142,137146,137150,137153,137160,137163,137166,137204,137207,137209,137223,137227,137236,137240,137245,137248,137251,137254,137289,137294,137297,137327,137330,137335,137338,137341,137371,137374,137428,137431,137435,137440,137452,137455,137459,137489,137492,137497,137500,137530,137533,137537,137554,137558,137562,137565,137598,137601,137605,137608,137611,137614,137617,137620,137731,137734,137737,137740,137842,137845,137849,137853,137857,137860,137898,137901,137903,137919,137923,137926,137931,138012,138015,138018,138144,138149,138152,138160,138163,138168,138253,138256,138260,138263,138266,138270,138290,138295,138379,138382,138387,138390,138393,138471,138474,138477,138480,138483,138486,138491,138494,138497,138569,138572,138577,138580,138677,138680,138686,138689,138692,138695,138698,138701,138704,138707,138710,138714,138719,138722,138755,138760,138763,138804,138807],[10,137140,137136],{"id":137141},"_14-html5与css3新特性",[14,137143,137145],{"id":137144},"_141-html5的新特性","14.1 HTML5的新特性",[58,137147,137149],{"id":137148},"_1411-基本标签","14.1.1 基本标签",[63,137151,137152],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[63,137154,137155,137156,137159],{},"这些新特性都有兼容性问题，基本是 ",[25,137157,137158],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[63,137161,137162],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[63,137164,137165],{},"现在使用的是新特性：",[232,137167,137168,137174,137180,137186,137192,137198],{},[22,137169,137170,137173],{},[140,137171,137172],{},"\u003Cheader>"," 头部标签",[22,137175,137176,137179],{},[140,137177,137178],{},"\u003Cnav>"," 导航标签",[22,137181,137182,137185],{},[140,137183,137184],{},"\u003Carticle>"," 内容标签",[22,137187,137188,137191],{},[140,137189,137190],{},"\u003Csection>"," 定义文档某个区域",[22,137193,137194,137197],{},[140,137195,137196],{},"\u003Caside>"," 侧边栏标签",[22,137199,137200,137203],{},[140,137201,137202],{},"\u003Cfooter>"," 尾部标签",[29,137205],{"style":31,"src":137206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[63,137208,110],{},[232,137210,137211,137214,137217,137220],{},[22,137212,137213],{},"这种语义化标准主要是针对搜索引擎的",[22,137215,137216],{},"这些标签页面中可以经常使用",[22,137218,137219],{},"在IE9中，需要把这些元素转换为块级元素",[22,137221,137222],{},"移动端更喜欢使用这些标签",[58,137224,137226],{"id":137225},"_1412-多媒体标签","14.1.2 多媒体标签",[63,137228,137229,137230,137232,137233,137235],{},"音频 ",[25,137231,29072],{}," 和视频 ",[25,137234,29081],{}," 两个标签",[22896,137237,137239],{"id":137238},"_14121-视频标签-video","14.1.2.1 视频标签- video",[19,137241,137242],{},[22,137243,137244],{},"支持格式：",[29,137246],{"style":31,"src":137247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[63,137249,137250],{},"尽量使用MP4，兼容性好",[63,137252,137253],{},"用MP4就可以",[133,137255,137257],{"className":135,"code":137256,"language":137,"meta":138,"style":138},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[140,137258,137259],{"__ignoreMap":138},[143,137260,137261,137263,137265,137267,137269,137272,137274,137277,137280,137283,137285,137287],{"class":145,"line":146},[143,137262,150],{"class":149},[143,137264,29081],{"class":153},[143,137266,157],{"class":156},[143,137268,160],{"class":149},[143,137270,137271],{"class":163},"\"movie.mp4\"",[143,137273,93300],{"class":156},[143,137275,137276],{"class":156}," autoplay",[143,137278,137279],{"class":156}," muted",[143,137281,137282],{"class":156}," loop",[143,137284,56197],{"class":149},[143,137286,29081],{"class":153},[143,137288,183],{"class":149},[19,137290,137291],{"start":35},[22,137292,137293],{},"兼容写法",[63,137295,137296],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[133,137298,137299],{"className":135,"code":137256,"language":137,"meta":138,"style":138},[140,137300,137301],{"__ignoreMap":138},[143,137302,137303,137305,137307,137309,137311,137313,137315,137317,137319,137321,137323,137325],{"class":145,"line":146},[143,137304,150],{"class":149},[143,137306,29081],{"class":153},[143,137308,157],{"class":156},[143,137310,160],{"class":149},[143,137312,137271],{"class":163},[143,137314,93300],{"class":156},[143,137316,137276],{"class":156},[143,137318,137279],{"class":156},[143,137320,137282],{"class":156},[143,137322,56197],{"class":149},[143,137324,29081],{"class":153},[143,137326,183],{"class":149},[63,137328,137329],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[19,137331,137332],{"start":46},[22,137333,137334],{},"video常用属性",[29,137336],{"style":31,"src":137337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[63,137339,137340],{},"poster属性后面是跟的等待加载图片的地址",[133,137342,137343],{"className":135,"code":136,"language":137,"meta":138,"style":138},[140,137344,137345],{"__ignoreMap":138},[143,137346,137347,137349,137351,137353,137355,137357,137359,137361,137363,137365,137367,137369],{"class":145,"line":146},[143,137348,150],{"class":149},[143,137350,29],{"class":153},[143,137352,157],{"class":156},[143,137354,160],{"class":149},[143,137356,164],{"class":163},[143,137358,167],{"class":156},[143,137360,160],{"class":149},[143,137362,172],{"class":163},[143,137364,175],{"class":156},[143,137366,160],{"class":149},[143,137368,180],{"class":163},[143,137370,183],{"class":149},[63,137372,137373],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[133,137375,137377],{"className":257,"code":137376,"language":259,"meta":138,"style":138},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[140,137378,137379,137384,137390,137414,137419,137424],{"__ignoreMap":138},[143,137380,137381],{"class":145,"line":146},[143,137382,137383],{"class":266},"\u002F* 2D 位移 *\u002F\n",[143,137385,137386,137388],{"class":145,"line":35},[143,137387,614],{"class":153},[143,137389,275],{"class":149},[143,137391,137392,137395,137397,137400,137402,137404,137406,137408,137410,137412],{"class":145,"line":46},[143,137393,137394],{"class":280},"  transform",[143,137396,284],{"class":149},[143,137398,137399],{"class":280},"translate",[143,137401,1049],{"class":149},[143,137403,1352],{"class":280},[143,137405,774],{"class":755},[143,137407,13335],{"class":149},[143,137409,1697],{"class":280},[143,137411,774],{"class":755},[143,137413,3619],{"class":149},[143,137415,137416],{"class":145,"line":293},[143,137417,137418],{"class":266},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[143,137420,137421],{"class":145,"line":306},[143,137422,137423],{"class":266},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[143,137425,137426],{"class":145,"line":319},[143,137427,348],{"class":149},[63,137429,137430],{},"muted:自动静音属性",[22896,137432,137434],{"id":137433},"_14122-音频标签audio","14.1.2.2 音频标签audio",[19,137436,137437],{},[22,137438,137439],{},"基本使用",[63,137441,137442,137443,137448,137449],{},"当前 ",[25,137444,137445],{},[140,137446,137447],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[25,137450,137451],{},"mp3格式",[29,137453],{"style":31,"src":137454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[19,137456,137457],{"start":35},[22,137458,137293],{},[133,137460,137461],{"className":135,"code":137256,"language":137,"meta":138,"style":138},[140,137462,137463],{"__ignoreMap":138},[143,137464,137465,137467,137469,137471,137473,137475,137477,137479,137481,137483,137485,137487],{"class":145,"line":146},[143,137466,150],{"class":149},[143,137468,29081],{"class":153},[143,137470,157],{"class":156},[143,137472,160],{"class":149},[143,137474,137271],{"class":163},[143,137476,93300],{"class":156},[143,137478,137276],{"class":156},[143,137480,137279],{"class":156},[143,137482,137282],{"class":156},[143,137484,56197],{"class":149},[143,137486,29081],{"class":153},[143,137488,183],{"class":149},[63,137490,137491],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[19,137493,137494],{"start":46},[22,137495,137496],{},"常用属性",[29,137498],{"style":31,"src":137499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[133,137501,137502],{"className":135,"code":137256,"language":137,"meta":138,"style":138},[140,137503,137504],{"__ignoreMap":138},[143,137505,137506,137508,137510,137512,137514,137516,137518,137520,137522,137524,137526,137528],{"class":145,"line":146},[143,137507,150],{"class":149},[143,137509,29081],{"class":153},[143,137511,157],{"class":156},[143,137513,160],{"class":149},[143,137515,137271],{"class":163},[143,137517,93300],{"class":156},[143,137519,137276],{"class":156},[143,137521,137279],{"class":156},[143,137523,137282],{"class":156},[143,137525,56197],{"class":149},[143,137527,29081],{"class":153},[143,137529,183],{"class":149},[63,137531,137532],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22896,137534,137536],{"id":137535},"_14123-总结","14.1.2.3 总结",[232,137538,137539,137542,137545,137548,137551],{},[22,137540,137541],{},"音频标签和视频标签使用方式基本一致",[22,137543,137544],{},"浏览器支持情况不同",[22,137546,137547],{},"谷歌浏览器把音频和视频自动播放禁止了",[22,137549,137550],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[22,137552,137553],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[58,137555,137557],{"id":137556},"_1413-表单元素","14.1.3 表单元素",[22896,137559,137561],{"id":137560},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[29,137563],{"style":31,"src":137564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[133,137566,137568],{"className":135,"code":137567,"language":137,"meta":138,"style":138},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[140,137569,137570],{"__ignoreMap":138},[143,137571,137572,137574,137576,137578,137580,137582,137584,137586,137589,137591,137593,137596],{"class":145,"line":146},[143,137573,150],{"class":149},[143,137575,746],{"class":153},[143,137577,54709],{"class":156},[143,137579,160],{"class":149},[143,137581,758],{"class":163},[143,137583,15819],{"class":156},[143,137585,160],{"class":149},[143,137587,137588],{"class":163},"\"username\"",[143,137590,61903],{"class":156},[143,137592,160],{"class":149},[143,137594,137595],{"class":163},"\"请输入用户名\"",[143,137597,183],{"class":149},[29,137599],{"style":31,"src":137600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22896,137602,137604],{"id":137603},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[29,137606],{"style":31,"src":137607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[63,137609,137610],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[63,137612,137613],{},"快捷操作：",[29,137615],{"style":31,"src":137616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[63,137618,137619],{},"例子1：",[133,137621,137623],{"className":135,"code":137622,"language":137,"meta":138,"style":138},"\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",[140,137624,137625,137648,137675,137704,137723],{"__ignoreMap":138},[143,137626,137627,137629,137631,137633,137635,137638,137641,137643,137646],{"class":145,"line":146},[143,137628,150],{"class":149},[143,137630,67507],{"class":153},[143,137632,67510],{"class":156},[143,137634,160],{"class":149},[143,137636,137637],{"class":163},"\"\u002Fsubmit\"",[143,137639,137640],{"class":156}," method",[143,137642,160],{"class":149},[143,137644,137645],{"class":163},"\"post\"",[143,137647,183],{"class":149},[143,137649,137650,137652,137654,137656,137658,137660,137662,137664,137666,137668,137670,137673],{"class":145,"line":35},[143,137651,634],{"class":149},[143,137653,746],{"class":153},[143,137655,54709],{"class":156},[143,137657,160],{"class":149},[143,137659,758],{"class":163},[143,137661,15819],{"class":156},[143,137663,160],{"class":149},[143,137665,137588],{"class":163},[143,137667,61903],{"class":156},[143,137669,160],{"class":149},[143,137671,137672],{"class":163},"\"用户名\"",[143,137674,183],{"class":149},[143,137676,137677,137679,137681,137683,137685,137688,137690,137692,137695,137697,137699,137702],{"class":145,"line":46},[143,137678,634],{"class":149},[143,137680,746],{"class":153},[143,137682,54709],{"class":156},[143,137684,160],{"class":149},[143,137686,137687],{"class":163},"\"password\"",[143,137689,15819],{"class":156},[143,137691,160],{"class":149},[143,137693,137694],{"class":163},"\"pwd\"",[143,137696,61903],{"class":156},[143,137698,160],{"class":149},[143,137700,137701],{"class":163},"\"密码\"",[143,137703,183],{"class":149},[143,137705,137706,137708,137710,137712,137714,137716,137719,137721],{"class":145,"line":293},[143,137707,634],{"class":149},[143,137709,54772],{"class":153},[143,137711,54709],{"class":156},[143,137713,160],{"class":149},[143,137715,67530],{"class":163},[143,137717,137718],{"class":149},">提交\u003C\u002F",[143,137720,54772],{"class":153},[143,137722,183],{"class":149},[143,137724,137725,137727,137729],{"class":145,"line":306},[143,137726,730],{"class":149},[143,137728,67507],{"class":153},[143,137730,183],{"class":149},[29,137732],{"style":31,"src":137733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[63,137735,137736],{},"value是表单域的内容",[63,137738,137739],{},"例子2：",[133,137741,137742],{"className":135,"code":137622,"language":137,"meta":138,"style":138},[140,137743,137744,137764,137790,137816,137834],{"__ignoreMap":138},[143,137745,137746,137748,137750,137752,137754,137756,137758,137760,137762],{"class":145,"line":146},[143,137747,150],{"class":149},[143,137749,67507],{"class":153},[143,137751,67510],{"class":156},[143,137753,160],{"class":149},[143,137755,137637],{"class":163},[143,137757,137640],{"class":156},[143,137759,160],{"class":149},[143,137761,137645],{"class":163},[143,137763,183],{"class":149},[143,137765,137766,137768,137770,137772,137774,137776,137778,137780,137782,137784,137786,137788],{"class":145,"line":35},[143,137767,634],{"class":149},[143,137769,746],{"class":153},[143,137771,54709],{"class":156},[143,137773,160],{"class":149},[143,137775,758],{"class":163},[143,137777,15819],{"class":156},[143,137779,160],{"class":149},[143,137781,137588],{"class":163},[143,137783,61903],{"class":156},[143,137785,160],{"class":149},[143,137787,137672],{"class":163},[143,137789,183],{"class":149},[143,137791,137792,137794,137796,137798,137800,137802,137804,137806,137808,137810,137812,137814],{"class":145,"line":46},[143,137793,634],{"class":149},[143,137795,746],{"class":153},[143,137797,54709],{"class":156},[143,137799,160],{"class":149},[143,137801,137687],{"class":163},[143,137803,15819],{"class":156},[143,137805,160],{"class":149},[143,137807,137694],{"class":163},[143,137809,61903],{"class":156},[143,137811,160],{"class":149},[143,137813,137701],{"class":163},[143,137815,183],{"class":149},[143,137817,137818,137820,137822,137824,137826,137828,137830,137832],{"class":145,"line":293},[143,137819,634],{"class":149},[143,137821,54772],{"class":153},[143,137823,54709],{"class":156},[143,137825,160],{"class":149},[143,137827,67530],{"class":163},[143,137829,137718],{"class":149},[143,137831,54772],{"class":153},[143,137833,183],{"class":149},[143,137835,137836,137838,137840],{"class":145,"line":306},[143,137837,730],{"class":149},[143,137839,67507],{"class":153},[143,137841,183],{"class":149},[29,137843],{"style":31,"src":137844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137846,137848],{"id":137847},"_142-css新特性","14.2 CSS新特性",[58,137850,137852],{"id":137851},"_1421-新增选择器","14.2.1 新增选择器",[22896,137854,137856],{"id":137855},"_14211-属性选择器","14.2.1.1 属性选择器",[29,137858],{"style":31,"src":137859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[133,137861,137862],{"className":257,"code":739,"language":259,"meta":138,"style":138},[140,137863,137864,137878,137894],{"__ignoreMap":138},[143,137865,137866,137868,137870,137872,137874,137876],{"class":145,"line":146},[143,137867,746],{"class":153},[143,137869,749],{"class":149},[143,137871,752],{"class":156},[143,137873,160],{"class":755},[143,137875,758],{"class":163},[143,137877,761],{"class":149},[143,137879,137880,137882,137884,137886,137888,137890,137892],{"class":145,"line":35},[143,137881,766],{"class":280},[143,137883,284],{"class":149},[143,137885,771],{"class":280},[143,137887,774],{"class":755},[143,137889,777],{"class":280},[143,137891,780],{"class":280},[143,137893,290],{"class":149},[143,137895,137896],{"class":145,"line":46},[143,137897,348],{"class":149},[29,137899],{"style":31,"src":137900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[63,137902,110],{},[232,137904,137905,137908,137911,137914],{},[22,137906,137907],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[22,137909,137910],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[22,137912,137913],{},"属性选择器也可以选择出来自定义的属性",[22,137915,137916,137918],{},[25,137917,9925],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22896,137920,137922],{"id":137921},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[29,137924],{"style":31,"src":137925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[19,137927,137928],{},[22,137929,137930],{},"fist-child",[133,137932,137934],{"className":257,"code":137933,"language":259,"meta":138,"style":138},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[140,137935,137936,137941,137956,137976,137994],{"__ignoreMap":138},[143,137937,137938],{"class":145,"line":146},[143,137939,137940],{"class":266},"\u002F* 属性选择器 *\u002F\n",[143,137942,137943,137945,137947,137949,137951,137953],{"class":145,"line":35},[143,137944,746],{"class":153},[143,137946,749],{"class":149},[143,137948,752],{"class":156},[143,137950,160],{"class":755},[143,137952,758],{"class":163},[143,137954,137955],{"class":149},"] { }\n",[143,137957,137958,137960,137962,137964,137967,137970,137973],{"class":145,"line":46},[143,137959,746],{"class":153},[143,137961,749],{"class":149},[143,137963,15593],{"class":156},[143,137965,137966],{"class":755},"^=",[143,137968,137969],{"class":163},"\"icon\"",[143,137971,137972],{"class":149},"] { }  ",[143,137974,137975],{"class":266},"\u002F* 以 icon 开头 *\u002F\n",[143,137977,137978,137980,137982,137984,137987,137989,137991],{"class":145,"line":293},[143,137979,746],{"class":153},[143,137981,749],{"class":149},[143,137983,15593],{"class":156},[143,137985,137986],{"class":755},"$=",[143,137988,137969],{"class":163},[143,137990,137972],{"class":149},[143,137992,137993],{"class":266},"\u002F* 以 icon 结尾 *\u002F\n",[143,137995,137996,137998,138000,138002,138005,138007,138009],{"class":145,"line":306},[143,137997,746],{"class":153},[143,137999,749],{"class":149},[143,138001,15593],{"class":156},[143,138003,138004],{"class":755},"*=",[143,138006,137969],{"class":163},[143,138008,137972],{"class":149},[143,138010,138011],{"class":266},"\u002F* 包含 icon *\u002F\n",[63,138013,138014],{},"ul的第一个儿子文本为红色",[63,138016,138017],{},"一定要在冒号前加空格，不然就是选中所有的了",[133,138019,138021],{"className":257,"code":138020,"language":259,"meta":138,"style":138},".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",[140,138022,138023,138029,138039,138043,138047,138052,138065,138078,138094,138111,138128],{"__ignoreMap":138},[143,138024,138025,138027],{"class":145,"line":146},[143,138026,127715],{"class":156},[143,138028,275],{"class":149},[143,138030,138031,138033,138035,138037],{"class":145,"line":35},[143,138032,71784],{"class":280},[143,138034,284],{"class":149},[143,138036,58304],{"class":280},[143,138038,290],{"class":149},[143,138040,138041],{"class":145,"line":46},[143,138042,348],{"class":149},[143,138044,138045],{"class":145,"line":293},[143,138046,136871],{"class":149},[143,138048,138049],{"class":145,"line":306},[143,138050,138051],{"class":266},"\u002F* 结构伪类选择器 *\u002F\n",[143,138053,138054,138056,138059,138062],{"class":145,"line":319},[143,138055,22],{"class":153},[143,138057,138058],{"class":156},":first-child",[143,138060,138061],{"class":149}," { }           ",[143,138063,138064],{"class":266},"\u002F* 第一个 *\u002F\n",[143,138066,138067,138069,138072,138075],{"class":145,"line":332},[143,138068,22],{"class":153},[143,138070,138071],{"class":156},":last-child",[143,138073,138074],{"class":149}," { }            ",[143,138076,138077],{"class":266},"\u002F* 最后一个 *\u002F\n",[143,138079,138080,138082,138084,138086,138088,138091],{"class":145,"line":345},[143,138081,22],{"class":153},[143,138083,130335],{"class":156},[143,138085,1049],{"class":149},[143,138087,1122],{"class":280},[143,138089,138090],{"class":149},") { }          ",[143,138092,138093],{"class":266},"\u002F* 第2个 *\u002F\n",[143,138095,138096,138098,138100,138102,138105,138108],{"class":145,"line":701},[143,138097,22],{"class":153},[143,138099,130335],{"class":156},[143,138101,1049],{"class":149},[143,138103,138104],{"class":280},"2n",[143,138106,138107],{"class":149},") { }         ",[143,138109,138110],{"class":266},"\u002F* 偶数 *\u002F\n",[143,138112,138113,138115,138117,138119,138122,138125],{"class":145,"line":707},[143,138114,22],{"class":153},[143,138116,130335],{"class":156},[143,138118,1049],{"class":149},[143,138120,138121],{"class":280},"2n+1",[143,138123,138124],{"class":149},") { }       ",[143,138126,138127],{"class":266},"\u002F* 奇数 *\u002F\n",[143,138129,138130,138132,138134,138136,138139,138141],{"class":145,"line":727},[143,138131,22],{"class":153},[143,138133,130335],{"class":156},[143,138135,1049],{"class":149},[143,138137,138138],{"class":280},"-n+3",[143,138140,138124],{"class":149},[143,138142,138143],{"class":266},"\u002F* 前3个 *\u002F\n",[614,138145,138148],{"className":138146},[138147],"example","\n  示例内容\n",[63,138150,138151],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[232,138153,138154],{},[22,138155,138156,138159],{},[140,138157,138158],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[63,138161,138162],{},"也就是说它选择的是熊大",[19,138164,138165],{"start":319},[22,138166,138167],{},"权重",[133,138169,138171],{"className":257,"code":138170,"language":259,"meta":138,"style":138},"\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",[140,138172,138173,138177,138187,138197,138211,138225,138239],{"__ignoreMap":138},[143,138174,138175],{"class":145,"line":146},[143,138176,138051],{"class":266},[143,138178,138179,138181,138183,138185],{"class":145,"line":35},[143,138180,22],{"class":153},[143,138182,138058],{"class":156},[143,138184,138061],{"class":149},[143,138186,138064],{"class":266},[143,138188,138189,138191,138193,138195],{"class":145,"line":46},[143,138190,22],{"class":153},[143,138192,138071],{"class":156},[143,138194,138074],{"class":149},[143,138196,138077],{"class":266},[143,138198,138199,138201,138203,138205,138207,138209],{"class":145,"line":293},[143,138200,22],{"class":153},[143,138202,130335],{"class":156},[143,138204,1049],{"class":149},[143,138206,1122],{"class":280},[143,138208,138090],{"class":149},[143,138210,138093],{"class":266},[143,138212,138213,138215,138217,138219,138221,138223],{"class":145,"line":306},[143,138214,22],{"class":153},[143,138216,130335],{"class":156},[143,138218,1049],{"class":149},[143,138220,138104],{"class":280},[143,138222,138107],{"class":149},[143,138224,138110],{"class":266},[143,138226,138227,138229,138231,138233,138235,138237],{"class":145,"line":319},[143,138228,22],{"class":153},[143,138230,130335],{"class":156},[143,138232,1049],{"class":149},[143,138234,138121],{"class":280},[143,138236,138124],{"class":149},[143,138238,138127],{"class":266},[143,138240,138241,138243,138245,138247,138249,138251],{"class":145,"line":332},[143,138242,22],{"class":153},[143,138244,130335],{"class":156},[143,138246,1049],{"class":149},[143,138248,138138],{"class":280},[143,138250,138124],{"class":149},[143,138252,138143],{"class":266},[63,138254,138255],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22896,138257,138259],{"id":138258},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[63,138261,138262],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[29,138264],{"style":31,"src":138265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[19,138267,138268],{},[22,138269,110],{},[232,138271,138272,138275,138278,138281,138284,138287],{},[22,138273,138274],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[22,138276,138277],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[22,138279,138280],{},"语法： element::before {}",[22,138282,138283],{},"before 和 after 必须有 content 属性",[22,138285,138286],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[22,138288,138289],{},"伪元素选择器和标签选择器一样，权重为 1",[19,138291,138292],{"start":35},[22,138293,138294],{},"实例",[133,138296,138297],{"className":257,"code":138170,"language":259,"meta":138,"style":138},[140,138298,138299,138303,138313,138323,138337,138351,138365],{"__ignoreMap":138},[143,138300,138301],{"class":145,"line":146},[143,138302,138051],{"class":266},[143,138304,138305,138307,138309,138311],{"class":145,"line":35},[143,138306,22],{"class":153},[143,138308,138058],{"class":156},[143,138310,138061],{"class":149},[143,138312,138064],{"class":266},[143,138314,138315,138317,138319,138321],{"class":145,"line":46},[143,138316,22],{"class":153},[143,138318,138071],{"class":156},[143,138320,138074],{"class":149},[143,138322,138077],{"class":266},[143,138324,138325,138327,138329,138331,138333,138335],{"class":145,"line":293},[143,138326,22],{"class":153},[143,138328,130335],{"class":156},[143,138330,1049],{"class":149},[143,138332,1122],{"class":280},[143,138334,138090],{"class":149},[143,138336,138093],{"class":266},[143,138338,138339,138341,138343,138345,138347,138349],{"class":145,"line":306},[143,138340,22],{"class":153},[143,138342,130335],{"class":156},[143,138344,1049],{"class":149},[143,138346,138104],{"class":280},[143,138348,138107],{"class":149},[143,138350,138110],{"class":266},[143,138352,138353,138355,138357,138359,138361,138363],{"class":145,"line":319},[143,138354,22],{"class":153},[143,138356,130335],{"class":156},[143,138358,1049],{"class":149},[143,138360,138121],{"class":280},[143,138362,138124],{"class":149},[143,138364,138127],{"class":266},[143,138366,138367,138369,138371,138373,138375,138377],{"class":145,"line":332},[143,138368,22],{"class":153},[143,138370,130335],{"class":156},[143,138372,1049],{"class":149},[143,138374,138138],{"class":280},[143,138376,138124],{"class":149},[143,138378,138143],{"class":266},[29,138380],{"style":31,"src":138381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[19,138383,138384],{"start":46},[22,138385,138386],{},"使用场景1",[29,138388],{"style":31,"src":138389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[63,138391,138392],{},"不需要再加盒子来整红色那部分了",[133,138394,138396],{"className":257,"code":138395,"language":259,"meta":138,"style":138},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[140,138397,138398,138403,138412,138423,138433,138437,138446,138457,138467],{"__ignoreMap":138},[143,138399,138400],{"class":145,"line":146},[143,138401,138402],{"class":266},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[143,138404,138405,138407,138410],{"class":145,"line":35},[143,138406,614],{"class":153},[143,138408,138409],{"class":156},"::before",[143,138411,275],{"class":149},[143,138413,138414,138417,138419,138421],{"class":145,"line":46},[143,138415,138416],{"class":280},"  content",[143,138418,284],{"class":149},[143,138420,8552],{"class":163},[143,138422,290],{"class":149},[143,138424,138425,138427,138429,138431],{"class":145,"line":293},[143,138426,281],{"class":280},[143,138428,284],{"class":149},[143,138430,61752],{"class":280},[143,138432,290],{"class":149},[143,138434,138435],{"class":145,"line":306},[143,138436,348],{"class":149},[143,138438,138439,138441,138444],{"class":145,"line":319},[143,138440,614],{"class":153},[143,138442,138443],{"class":156},"::after",[143,138445,275],{"class":149},[143,138447,138448,138450,138452,138455],{"class":145,"line":332},[143,138449,138416],{"class":280},[143,138451,284],{"class":149},[143,138453,138454],{"class":163},"\"→\"",[143,138456,290],{"class":149},[143,138458,138459,138461,138463,138465],{"class":145,"line":345},[143,138460,71784],{"class":280},[143,138462,284],{"class":149},[143,138464,62953],{"class":280},[143,138466,290],{"class":149},[143,138468,138469],{"class":145,"line":701},[143,138470,348],{"class":149},[29,138472],{"style":31,"src":138473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[63,138475,138476],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[29,138478],{"style":31,"src":138479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[63,138481,138482],{},"但是在引用时需要先转义一下",[63,138484,138485],{},"content='\\e930'",[19,138487,138488],{"start":293},[22,138489,138490],{},"使用场景2",[63,138492,138493],{},"仿土豆效果",[63,138495,138496],{},"通过使用伪元素选择器可以减少body中盒子的数量",[133,138498,138499],{"className":257,"code":138395,"language":259,"meta":138,"style":138},[140,138500,138501,138505,138513,138523,138533,138537,138545,138555,138565],{"__ignoreMap":138},[143,138502,138503],{"class":145,"line":146},[143,138504,138402],{"class":266},[143,138506,138507,138509,138511],{"class":145,"line":35},[143,138508,614],{"class":153},[143,138510,138409],{"class":156},[143,138512,275],{"class":149},[143,138514,138515,138517,138519,138521],{"class":145,"line":46},[143,138516,138416],{"class":280},[143,138518,284],{"class":149},[143,138520,8552],{"class":163},[143,138522,290],{"class":149},[143,138524,138525,138527,138529,138531],{"class":145,"line":293},[143,138526,281],{"class":280},[143,138528,284],{"class":149},[143,138530,61752],{"class":280},[143,138532,290],{"class":149},[143,138534,138535],{"class":145,"line":306},[143,138536,348],{"class":149},[143,138538,138539,138541,138543],{"class":145,"line":319},[143,138540,614],{"class":153},[143,138542,138443],{"class":156},[143,138544,275],{"class":149},[143,138546,138547,138549,138551,138553],{"class":145,"line":332},[143,138548,138416],{"class":280},[143,138550,284],{"class":149},[143,138552,138454],{"class":163},[143,138554,290],{"class":149},[143,138556,138557,138559,138561,138563],{"class":145,"line":345},[143,138558,71784],{"class":280},[143,138560,284],{"class":149},[143,138562,62953],{"class":280},[143,138564,290],{"class":149},[143,138566,138567],{"class":145,"line":701},[143,138568,348],{"class":149},[29,138570],{"style":31,"src":138571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[19,138573,138574],{"start":306},[22,138575,138576],{},"使用场景3",[63,138578,138579],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[133,138581,138583],{"className":257,"code":138582,"language":259,"meta":138,"style":138},".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",[140,138584,138585,138591,138601,138605,138609,138613,138621,138631,138641,138645,138653,138663,138673],{"__ignoreMap":138},[143,138586,138587,138589],{"class":145,"line":146},[143,138588,131268],{"class":156},[143,138590,275],{"class":149},[143,138592,138593,138595,138597,138599],{"class":145,"line":35},[143,138594,131896],{"class":280},[143,138596,284],{"class":149},[143,138598,24634],{"class":280},[143,138600,290],{"class":149},[143,138602,138603],{"class":145,"line":46},[143,138604,348],{"class":149},[143,138606,138607],{"class":145,"line":293},[143,138608,136871],{"class":149},[143,138610,138611],{"class":145,"line":306},[143,138612,138402],{"class":266},[143,138614,138615,138617,138619],{"class":145,"line":319},[143,138616,614],{"class":153},[143,138618,138409],{"class":156},[143,138620,275],{"class":149},[143,138622,138623,138625,138627,138629],{"class":145,"line":332},[143,138624,138416],{"class":280},[143,138626,284],{"class":149},[143,138628,8552],{"class":163},[143,138630,290],{"class":149},[143,138632,138633,138635,138637,138639],{"class":145,"line":345},[143,138634,281],{"class":280},[143,138636,284],{"class":149},[143,138638,61752],{"class":280},[143,138640,290],{"class":149},[143,138642,138643],{"class":145,"line":701},[143,138644,348],{"class":149},[143,138646,138647,138649,138651],{"class":145,"line":707},[143,138648,614],{"class":153},[143,138650,138443],{"class":156},[143,138652,275],{"class":149},[143,138654,138655,138657,138659,138661],{"class":145,"line":727},[143,138656,138416],{"class":280},[143,138658,284],{"class":149},[143,138660,138454],{"class":163},[143,138662,290],{"class":149},[143,138664,138665,138667,138669,138671],{"class":145,"line":2518},[143,138666,71784],{"class":280},[143,138668,284],{"class":149},[143,138670,62953],{"class":280},[143,138672,290],{"class":149},[143,138674,138675],{"class":145,"line":2524},[143,138676,348],{"class":149},[63,138678,138679],{},"div {\nmargin: 0 auto;\n}",[133,138681,138684],{"className":138682,"code":138683,"language":6087},[6085],"\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",[140,138685,138683],{"__ignoreMap":138},[63,138687,138688],{},"如果想让多个元素都发生变化",[63,138690,138691],{},"不能如下操作：",[63,138693,138694],{},"transition: width 2s ease 0.5s;",[63,138696,138697],{},"transition: height 2s ease 0.5s;不对！！！",[63,138699,138700],{},"上方会样式冲突，导致不显示任何过渡效果",[63,138702,138703],{},"使用如下：加逗号隔开",[63,138705,138706],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[63,138708,138709],{},"transition all 2s ease;",[58,138711,138713],{"id":138712},"_1426-过渡练习","14.2.6 过渡练习",[19,138715,138716],{},[22,138717,138718],{},"进度条",[29,138720],{"style":31,"src":138721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[133,138723,138725],{"className":257,"code":138724,"language":259,"meta":138,"style":138},"div {\n  transition: all 0.3s ease;\n}\n",[140,138726,138727,138733,138751],{"__ignoreMap":138},[143,138728,138729,138731],{"class":145,"line":146},[143,138730,614],{"class":153},[143,138732,275],{"class":149},[143,138734,138735,138738,138740,138742,138745,138747,138749],{"class":145,"line":35},[143,138736,138737],{"class":280},"  transition",[143,138739,284],{"class":149},[143,138741,29019],{"class":280},[143,138743,138744],{"class":280}," 0.3",[143,138746,1736],{"class":755},[143,138748,79558],{"class":280},[143,138750,290],{"class":149},[143,138752,138753],{"class":145,"line":46},[143,138754,348],{"class":149},[19,138756,138757],{"start":35},[22,138758,138759],{},"小米logo",[63,138761,138762],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[133,138764,138766],{"className":257,"code":138765,"language":259,"meta":138,"style":138},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[140,138767,138768,138773,138779,138795,138800],{"__ignoreMap":138},[143,138769,138770],{"class":145,"line":146},[143,138771,138772],{"class":266},"\u002F* CSS3 过渡 *\u002F\n",[143,138774,138775,138777],{"class":145,"line":35},[143,138776,614],{"class":153},[143,138778,275],{"class":149},[143,138780,138781,138783,138785,138787,138789,138791,138793],{"class":145,"line":46},[143,138782,138737],{"class":280},[143,138784,284],{"class":149},[143,138786,29019],{"class":280},[143,138788,138744],{"class":280},[143,138790,1736],{"class":755},[143,138792,79558],{"class":280},[143,138794,290],{"class":149},[143,138796,138797],{"class":145,"line":293},[143,138798,138799],{"class":266},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[143,138801,138802],{"class":145,"line":306},[143,138803,348],{"class":149},[63,138805,138806],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[954,138808,956],{},{"title":138,"searchDepth":35,"depth":35,"links":138810},[138811,138816],{"id":137144,"depth":35,"text":137145,"children":138812},[138813,138814,138815],{"id":137148,"depth":46,"text":137149},{"id":137225,"depth":46,"text":137226},{"id":137556,"depth":46,"text":137557},{"id":137847,"depth":35,"text":137848,"children":138817},[138818,138819],{"id":137851,"depth":46,"text":137852},{"id":138712,"depth":46,"text":138713},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137136,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138826,"title":138827,"body":138828,"description":973,"extension":974,"meta":140572,"navigation":976,"path":140573,"seo":140574,"stem":140575,"__hash__":140576},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138829,"toc":140553},[138830,138833,138837,138840,138846,138852,138856,138858,138861,138864,138867,138870,138873,138876,138879,138883,138887,138890,138893,138896,138900,138903,138906,138911,138914,138917,138920,138924,138927,138936,138939,138942,138946,138949,138952,138957,138964,138978,138986,138993,138998,139001,139004,139007,139014,139018,139024,139030,139033,139036,139041,139047,139049,139057,139062,139065,139071,139073,139078,139083,139086,139088,139093,139096,139101,139106,139140,139144,139148,139151,139155,139158,139244,139247,139284,139287,139323,139327,139332,139345,139399,139401,139429,139431,139459,139465,139479,139481,139525,139527,139571,139574,139581,139592,139594,139621,139623,139649,139656,139672,139674,139768,139770,139864,139871,139874,139879,139885,139959,139962,139964,140000,140002,140038,140041,140048,140067,140070,140073,140075,140100,140102,140126,140129,140132,140162,140166,140169,140232,140234,140300,140302,140366,140369,140401,140403,140429,140431,140457,140460,140491,140493,140519,140521,140547,140550],[10,138831,138827],{"id":138832},"_15-品优购项目上篇-搭建与公共模块",[14,138834,138836],{"id":138835},"_151-项目规划","15.1 项目规划",[29,138838],{"style":31,"src":138839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[63,138841,138842,138845],{},[25,138843,138844],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[63,138847,138848,138851],{},[25,138849,138850],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138853,138855],{"id":138854},"_152-项目介绍","15.2 项目介绍",[63,138857,138844],{},[29,138859],{"style":31,"src":138860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[63,138862,138863],{},"主页：",[29,138865],{"style":31,"src":138866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[63,138868,138869],{},"列表页：",[29,138871],{"style":31,"src":138872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[63,138874,138875],{},"注册页：",[29,138877],{"style":31,"src":138878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138880,138882],{"id":138881},"_153-项目搭建工作","15.3 项目搭建工作",[58,138884,138886],{"id":138885},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[29,138888],{"style":31,"src":138889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[63,138891,138892],{},"经常更换的图片要放到upload文件夹中",[63,138894,138895],{},"不经常换的放到images文件夹中",[58,138897,138899],{"id":138898},"_1532-创建文件如下","15.3.2 创建文件如下",[29,138901],{"style":31,"src":138902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[29,138904],{"style":31,"src":138905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[63,138907,138908],{},[25,138909,138910],{},"初始化样式：",[63,138912,138913],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[63,138915,138916],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[63,138918,138919],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[58,138921,138923],{"id":138922},"_1533-项目模块化开发","15.3.3 项目模块化开发",[63,138925,138926],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[63,138928,138929,138930,138935],{},"这里最典型的应用就是 ",[25,138931,138932],{},[140,138933,138934],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[29,138937],{"style":31,"src":138938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[63,138940,138941],{},"通过link方法来引入",[58,138943,138945],{"id":138944},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[29,138947],{"style":31,"src":138948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[63,138950,138951],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[19,138953,138954],{},[22,138955,138956],{},"制作favicon图标",[63,138958,138959,138960,138963],{},"①把品优购图标切成 ",[140,138961,138962],{},"png"," 图片",[63,138965,138966,138967,138969,138970,138973,138974],{},"②把 ",[140,138968,138962],{}," 图片转换为 ",[140,138971,138972],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[67,138975,138976],{"href":138976,"rel":138977},"http:\u002F\u002Fwww.bitbug.net\u002F",[71],[19,138979,138980,138983],{"start":35},[22,138981,138982],{},"favicon图标放到网站根目录下",[22,138984,138985],{},"HTML页面引入favicon",[63,138987,138988,138989,138992],{},"在html 页面里面的 ",[140,138990,138991],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[63,138994,138995],{},[140,138996,138997],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[63,138999,139000],{},"复制这行代码或者在生成这个的网站进行复制",[29,139002],{"style":31,"src":139003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[63,139005,139006],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[63,139008,139009,139010],{},"例如:",[67,139011,139012],{"href":139012,"rel":139013},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[71],[58,139015,139017],{"id":139016},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[63,139019,139020,139023],{},[25,139021,139022],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[63,139025,139026,139029],{},[25,139027,139028],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[63,139031,139032],{},"页面必须有三个标签用来符合 SEO 优化",[29,139034],{"style":31,"src":139035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[19,139037,139038],{},[22,139039,139040],{},"title网站标题",[63,139042,139043,139046],{},[25,139044,139045],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[63,139048,69672],{},[232,139050,139051,139054],{},[22,139052,139053],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[22,139055,139056],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[19,139058,139059],{"start":35},[22,139060,139061],{},"description网站描述",[63,139063,139064],{},"简要说明我们网站主要是做什么的",[63,139066,139067,139070],{},[25,139068,139069],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[63,139072,69672],{},[63,139074,139075],{},[140,139076,139077],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[19,139079,139080],{"start":46},[22,139081,139082],{},"keywords关键词",[63,139084,139085],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[63,139087,69672],{},[63,139089,139090],{},[140,139091,139092],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[63,139094,139095],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[63,139097,139098],{},[25,139099,139100],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[19,139102,139103],{"start":293},[22,139104,139105],{},"代码总结",[133,139107,139108],{"className":135,"code":917,"language":137,"meta":138,"style":138},[140,139109,139110,139114,139128,139132],{"__ignoreMap":138},[143,139111,139112],{"class":145,"line":146},[143,139113,924],{"class":266},[143,139115,139116,139118,139120,139122,139124,139126],{"class":145,"line":35},[143,139117,150],{"class":149},[143,139119,614],{"class":153},[143,139121,617],{"class":156},[143,139123,160],{"class":149},[143,139125,937],{"class":163},[143,139127,183],{"class":149},[143,139129,139130],{"class":145,"line":46},[143,139131,944],{"class":149},[143,139133,139134,139136,139138],{"class":145,"line":293},[143,139135,730],{"class":149},[143,139137,614],{"class":153},[143,139139,183],{"class":149},[14,139141,139143],{"id":139142},"_154-项目公共部分制作","15.4 项目公共部分制作",[58,139145,139147],{"id":139146},"_1541-常用模块类命名","15.4.1 常用模块类命名",[29,139149],{"style":31,"src":139150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[58,139152,139154],{"id":139153},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[63,139156,139157],{},"布局思路：",[232,139159,139160,139163,139166,139188,139221],{},[22,139161,139162],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[22,139164,139165],{},"里面包含版心的盒子",[22,139167,139168,139169],{},"版心盒子里面包含 1 号左侧盒子左浮动",[232,139170,139171,139179,139185],{},[22,139172,139173,139174,22398,139176,139178],{},"1 号盒子 里面包含一个",[140,139175,232],{},[140,139177,232],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[22,139180,139181,139182,139184],{},"里面的内容是水平排列，所以需要给",[140,139183,22],{},"设置浮动",[22,139186,139187],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[22,139189,139190,139191],{},"版心盒子里面包含 2 号右侧盒子右浮动",[232,139192,139193,139207,139212],{},[22,139194,139195,139196,22398,139198,139200,139201,139203,139204,139206],{},"2 号盒子 里面包含一个",[140,139197,232],{},[140,139199,232],{},"包裹",[140,139202,22],{},"，中间的",[140,139205,1960],{},"可以用样式去设置，也可以用字符 |",[22,139208,139209,139210,139184],{},"里面内容水平排列，给",[140,139211,22],{},[22,139213,139214,139215,139217,139218,139220],{},"找到里面所有偶数的 ",[140,139216,22],{}," 设置样式（偶数的 ",[140,139219,22],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[22,139222,139223,139224],{},"需要用到字体图标",[232,139225,139226,139232,139235,139238,139241],{},[22,139227,139228,139229],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[140,139230,139231],{},"arrow-icon",[22,139233,139234],{},"先要引入字体图片的资源",[22,139236,139237],{},"在样式里面利用 font-face 来进行声明",[22,139239,139240],{},"在伪元素的 content属性设置 图标的编码",[22,139242,139243],{},"给伪元素设置font-family属性",[63,139245,139246],{},"结构实例代码：",[133,139248,139250],{"className":257,"code":139249,"language":259,"meta":138,"style":138},"div::before {\n  content: \"\";\n  display: block;\n}\n",[140,139251,139252,139260,139270,139280],{"__ignoreMap":138},[143,139253,139254,139256,139258],{"class":145,"line":146},[143,139255,614],{"class":153},[143,139257,138409],{"class":156},[143,139259,275],{"class":149},[143,139261,139262,139264,139266,139268],{"class":145,"line":35},[143,139263,138416],{"class":280},[143,139265,284],{"class":149},[143,139267,8552],{"class":163},[143,139269,290],{"class":149},[143,139271,139272,139274,139276,139278],{"class":145,"line":46},[143,139273,281],{"class":280},[143,139275,284],{"class":149},[143,139277,61752],{"class":280},[143,139279,290],{"class":149},[143,139281,139282],{"class":145,"line":293},[143,139283,348],{"class":149},[63,139285,139286],{},"样式实例代码：",[133,139288,139289],{"className":257,"code":139249,"language":259,"meta":138,"style":138},[140,139290,139291,139299,139309,139319],{"__ignoreMap":138},[143,139292,139293,139295,139297],{"class":145,"line":146},[143,139294,614],{"class":153},[143,139296,138409],{"class":156},[143,139298,275],{"class":149},[143,139300,139301,139303,139305,139307],{"class":145,"line":35},[143,139302,138416],{"class":280},[143,139304,284],{"class":149},[143,139306,8552],{"class":163},[143,139308,290],{"class":149},[143,139310,139311,139313,139315,139317],{"class":145,"line":46},[143,139312,281],{"class":280},[143,139314,284],{"class":149},[143,139316,61752],{"class":280},[143,139318,290],{"class":149},[143,139320,139321],{"class":145,"line":293},[143,139322,348],{"class":149},[58,139324,139326],{"id":139325},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[232,139328,139329],{},[22,139330,139331],{},"header 盒子必须要有高度",[63,139333,139334,139335,139337,139338],{},"1 号盒子是 ",[140,139336,132428],{}," 标志定位，在正常开发过程中， ",[25,139339,139340,139341,139344],{},"logo的布局其实是有讲究的，需要进行 ",[140,139342,139343],{},"logoSEO","的优化 （★★★）",[232,139346,139347,139355,139363,139390],{},[22,139348,139349,139351,139352,139354],{},[140,139350,132428],{}," 里面首先放一个 ",[140,139353,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[22,139356,139357,139359,139360,139362],{},[140,139358,10],{}," 里面再放一个链接，可以返回首页的，把 ",[140,139361,132428],{}," 的背景图片给链接即可",[22,139364,139365,139366],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[232,139367,139368,139383],{},[22,139369,139370,139371,139374,139375,139378,139379,139382],{},"方法1：",[140,139372,139373],{},"text-indent"," 移到盒子外面（",[140,139376,139377],{},"text-indent: -9999px",") ，然后 ",[140,139380,139381],{},"overflow:hidden"," ，淘宝的做法",[22,139384,139385,139386,139389],{},"方法2：直接给 ",[140,139387,139388],{},"font-size: 0;"," 就看不到文字了，京东的做法",[22,139391,139392,139393,139395,139396,139398],{},"最后给链接一个 ",[140,139394,52303],{}," 属性，这样鼠标放到 ",[140,139397,132428],{}," 上就可以看到提示文字了",[63,139400,139246],{},[133,139402,139403],{"className":135,"code":132649,"language":137,"meta":138,"style":138},[140,139404,139405],{"__ignoreMap":138},[143,139406,139407,139409,139411,139413,139415,139417,139419,139421,139423,139425,139427],{"class":145,"line":146},[143,139408,150],{"class":149},[143,139410,67],{"class":153},[143,139412,61940],{"class":156},[143,139414,160],{"class":149},[143,139416,132664],{"class":163},[143,139418,132667],{"class":156},[143,139420,160],{"class":149},[143,139422,132672],{"class":163},[143,139424,132675],{"class":149},[143,139426,67],{"class":153},[143,139428,183],{"class":149},[63,139430,139286],{},[133,139432,139433],{"className":135,"code":132649,"language":137,"meta":138,"style":138},[140,139434,139435],{"__ignoreMap":138},[143,139436,139437,139439,139441,139443,139445,139447,139449,139451,139453,139455,139457],{"class":145,"line":146},[143,139438,150],{"class":149},[143,139440,67],{"class":153},[143,139442,61940],{"class":156},[143,139444,160],{"class":149},[143,139446,132664],{"class":163},[143,139448,132667],{"class":156},[143,139450,160],{"class":149},[143,139452,132672],{"class":163},[143,139454,132675],{"class":149},[143,139456,67],{"class":153},[143,139458,183],{"class":149},[63,139460,139461,139462,139464],{},"2 号盒子是 ",[140,139463,132441],{}," 搜索模块定位",[232,139466,139467,139470,139473,139476],{},[22,139468,139469],{},"search盒子利用定位的方式放在对应的位置",[22,139471,139472],{},"search盒子设置绝对定位，header盒子设置相对定位",[22,139474,139475],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[22,139477,139478],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[63,139480,139246],{},[133,139482,139483],{"className":257,"code":132736,"language":259,"meta":138,"style":138},[140,139484,139485,139507,139511,139521],{"__ignoreMap":138},[143,139486,139487,139489,139491,139493,139495,139497,139499,139501,139503,139505],{"class":145,"line":146},[143,139488,614],{"class":153},[143,139490,13335],{"class":149},[143,139492,63],{"class":153},[143,139494,13335],{"class":149},[143,139496,10],{"class":153},[143,139498,13335],{"class":149},[143,139500,232],{"class":153},[143,139502,13335],{"class":149},[143,139504,22],{"class":153},[143,139506,275],{"class":149},[143,139508,139509],{"class":145,"line":35},[143,139510,132765],{"class":266},[143,139512,139513,139515,139517,139519],{"class":145,"line":46},[143,139514,281],{"class":280},[143,139516,284],{"class":149},[143,139518,61752],{"class":280},[143,139520,290],{"class":149},[143,139522,139523],{"class":145,"line":293},[143,139524,348],{"class":149},[63,139526,139286],{},[133,139528,139529],{"className":257,"code":132736,"language":259,"meta":138,"style":138},[140,139530,139531,139553,139557,139567],{"__ignoreMap":138},[143,139532,139533,139535,139537,139539,139541,139543,139545,139547,139549,139551],{"class":145,"line":146},[143,139534,614],{"class":153},[143,139536,13335],{"class":149},[143,139538,63],{"class":153},[143,139540,13335],{"class":149},[143,139542,10],{"class":153},[143,139544,13335],{"class":149},[143,139546,232],{"class":153},[143,139548,13335],{"class":149},[143,139550,22],{"class":153},[143,139552,275],{"class":149},[143,139554,139555],{"class":145,"line":35},[143,139556,132765],{"class":266},[143,139558,139559,139561,139563,139565],{"class":145,"line":46},[143,139560,281],{"class":280},[143,139562,284],{"class":149},[143,139564,61752],{"class":280},[143,139566,290],{"class":149},[143,139568,139569],{"class":145,"line":293},[143,139570,348],{"class":149},[63,139572,139573],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[63,139575,139576,139577,139580],{},"3 号盒子是 ",[140,139578,139579],{},"hotwords"," 热词模块定位",[232,139582,139583,139586,139589],{},[22,139584,139585],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[22,139587,139588],{},"给里面所有的a标签设置 左右10px的外边距",[22,139590,139591],{},"给第一个a标签设置文字变红色（#c81623）",[63,139593,139246],{},[133,139595,139597],{"className":257,"code":139596,"language":259,"meta":138,"style":138},"div {\n  margin: 0 auto;\n}\n",[140,139598,139599,139605,139617],{"__ignoreMap":138},[143,139600,139601,139603],{"class":145,"line":146},[143,139602,614],{"class":153},[143,139604,275],{"class":149},[143,139606,139607,139609,139611,139613,139615],{"class":145,"line":35},[143,139608,71350],{"class":280},[143,139610,284],{"class":149},[143,139612,1234],{"class":280},[143,139614,52448],{"class":280},[143,139616,290],{"class":149},[143,139618,139619],{"class":145,"line":46},[143,139620,348],{"class":149},[63,139622,139286],{},[133,139624,139625],{"className":257,"code":139596,"language":259,"meta":138,"style":138},[140,139626,139627,139633,139645],{"__ignoreMap":138},[143,139628,139629,139631],{"class":145,"line":146},[143,139630,614],{"class":153},[143,139632,275],{"class":149},[143,139634,139635,139637,139639,139641,139643],{"class":145,"line":35},[143,139636,71350],{"class":280},[143,139638,284],{"class":149},[143,139640,1234],{"class":280},[143,139642,52448],{"class":280},[143,139644,290],{"class":149},[143,139646,139647],{"class":145,"line":46},[143,139648,348],{"class":149},[63,139650,139651,139652,139655],{},"4 号盒子是 ",[140,139653,139654],{},"shopcar"," 购物车模块",[232,139657,139658,139663,139666,139669],{},[22,139659,124210,139660,139662],{},[140,139661,139654],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[22,139664,139665],{},"count 统计部分用绝对定位做",[22,139667,139668],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[22,139670,139671],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[63,139673,139246],{},[133,139675,139676],{"className":257,"code":132848,"language":259,"meta":138,"style":138},[140,139677,139678,139682,139696,139700,139714,139718,139732,139736,139750,139754],{"__ignoreMap":138},[143,139679,139680],{"class":145,"line":146},[143,139681,132855],{"class":266},[143,139683,139684,139686,139688,139690,139692,139694],{"class":145,"line":35},[143,139685,132860],{"class":156},[143,139687,80685],{"class":149},[143,139689,129781],{"class":280},[143,139691,284],{"class":149},[143,139693,132869],{"class":280},[143,139695,130351],{"class":149},[143,139697,139698],{"class":145,"line":46},[143,139699,132876],{"class":266},[143,139701,139702,139704,139706,139708,139710,139712],{"class":145,"line":293},[143,139703,132881],{"class":156},[143,139705,80685],{"class":149},[143,139707,129781],{"class":280},[143,139709,284],{"class":149},[143,139711,55649],{"class":280},[143,139713,130351],{"class":149},[143,139715,139716],{"class":145,"line":306},[143,139717,132896],{"class":266},[143,139719,139720,139722,139724,139726,139728,139730],{"class":145,"line":319},[143,139721,132901],{"class":156},[143,139723,80685],{"class":149},[143,139725,129781],{"class":280},[143,139727,284],{"class":149},[143,139729,55716],{"class":280},[143,139731,130351],{"class":149},[143,139733,139734],{"class":145,"line":332},[143,139735,132916],{"class":266},[143,139737,139738,139740,139742,139744,139746,139748],{"class":145,"line":345},[143,139739,132921],{"class":156},[143,139741,80685],{"class":149},[143,139743,129781],{"class":280},[143,139745,284],{"class":149},[143,139747,87111],{"class":280},[143,139749,130351],{"class":149},[143,139751,139752],{"class":145,"line":701},[143,139753,132936],{"class":266},[143,139755,139756,139758,139760,139762,139764,139766],{"class":145,"line":707},[143,139757,132941],{"class":156},[143,139759,80685],{"class":149},[143,139761,129781],{"class":280},[143,139763,284],{"class":149},[143,139765,132950],{"class":280},[143,139767,130351],{"class":149},[63,139769,139286],{},[133,139771,139772],{"className":257,"code":132848,"language":259,"meta":138,"style":138},[140,139773,139774,139778,139792,139796,139810,139814,139828,139832,139846,139850],{"__ignoreMap":138},[143,139775,139776],{"class":145,"line":146},[143,139777,132855],{"class":266},[143,139779,139780,139782,139784,139786,139788,139790],{"class":145,"line":35},[143,139781,132860],{"class":156},[143,139783,80685],{"class":149},[143,139785,129781],{"class":280},[143,139787,284],{"class":149},[143,139789,132869],{"class":280},[143,139791,130351],{"class":149},[143,139793,139794],{"class":145,"line":46},[143,139795,132876],{"class":266},[143,139797,139798,139800,139802,139804,139806,139808],{"class":145,"line":293},[143,139799,132881],{"class":156},[143,139801,80685],{"class":149},[143,139803,129781],{"class":280},[143,139805,284],{"class":149},[143,139807,55649],{"class":280},[143,139809,130351],{"class":149},[143,139811,139812],{"class":145,"line":306},[143,139813,132896],{"class":266},[143,139815,139816,139818,139820,139822,139824,139826],{"class":145,"line":319},[143,139817,132901],{"class":156},[143,139819,80685],{"class":149},[143,139821,129781],{"class":280},[143,139823,284],{"class":149},[143,139825,55716],{"class":280},[143,139827,130351],{"class":149},[143,139829,139830],{"class":145,"line":332},[143,139831,132916],{"class":266},[143,139833,139834,139836,139838,139840,139842,139844],{"class":145,"line":345},[143,139835,132921],{"class":156},[143,139837,80685],{"class":149},[143,139839,129781],{"class":280},[143,139841,284],{"class":149},[143,139843,87111],{"class":280},[143,139845,130351],{"class":149},[143,139847,139848],{"class":145,"line":701},[143,139849,132936],{"class":266},[143,139851,139852,139854,139856,139858,139860,139862],{"class":145,"line":707},[143,139853,132941],{"class":156},[143,139855,80685],{"class":149},[143,139857,129781],{"class":280},[143,139859,284],{"class":149},[143,139861,132950],{"class":280},[143,139863,130351],{"class":149},[58,139865,139867,139868,139870],{"id":139866},"_1544-nav导航模块制作","15.4.4 ",[140,139869,54599],{},"导航模块制作",[29,139872],{"style":31,"src":139873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[63,139875,139876,139878],{},[140,139877,54599],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[63,139880,139881,139882],{},"1 号盒子左侧浮动，",[140,139883,139884],{},"dropdown",[232,139886,139887,139897,139905,139911,139919,139929,139937,139948],{},[22,139888,139889,139890,101894,139893,139896],{},"1号盒子有讲究，根据相关性 里面包含 ",[140,139891,139892],{},".dt",[140,139894,139895],{},".dd"," 两个盒子",[22,139898,139899,139901,139902,139904],{},[140,139900,139892],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[140,139903,139895],{}," 挤到下面去了",[22,139906,139907,139908,139910],{},"给 ",[140,139909,139895],{}," 盒子设置宽度 和 高度，以及背景颜色",[22,139912,139907,139913,139915,139916,121112],{},[140,139914,139895],{}," 盒子里面定义 无序列表 （",[140,139917,139918],{},"ul > li > a",[22,139920,139921,139922,139924,139925,139928],{},"每个 ",[140,139923,22],{}," 都有一个高度（",[140,139926,139927],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[22,139930,139907,139931,139933,139934,121112],{},[140,139932,22],{}," 里面的a设置文字大小（",[140,139935,139936],{},"14px",[22,139938,139907,139939,139941,139942,139944,139945,139947],{},[140,139940,22],{}," 设置 ",[140,139943,128583],{},"，当鼠标移入的时候，让",[140,139946,22],{},"的背景变成白色，让里面的文字变成红色",[22,139949,139950,139952,139953,139955,139956,139958],{},[140,139951,22],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[140,139954,22],{},"的右侧，那么给",[140,139957,22],{},"设置相对定位",[63,139960,139961],{},"一定要注意相关性",[63,139963,139246],{},[133,139965,139966],{"className":257,"code":139249,"language":259,"meta":138,"style":138},[140,139967,139968,139976,139986,139996],{"__ignoreMap":138},[143,139969,139970,139972,139974],{"class":145,"line":146},[143,139971,614],{"class":153},[143,139973,138409],{"class":156},[143,139975,275],{"class":149},[143,139977,139978,139980,139982,139984],{"class":145,"line":35},[143,139979,138416],{"class":280},[143,139981,284],{"class":149},[143,139983,8552],{"class":163},[143,139985,290],{"class":149},[143,139987,139988,139990,139992,139994],{"class":145,"line":46},[143,139989,281],{"class":280},[143,139991,284],{"class":149},[143,139993,61752],{"class":280},[143,139995,290],{"class":149},[143,139997,139998],{"class":145,"line":293},[143,139999,348],{"class":149},[63,140001,139286],{},[133,140003,140004],{"className":257,"code":139249,"language":259,"meta":138,"style":138},[140,140005,140006,140014,140024,140034],{"__ignoreMap":138},[143,140007,140008,140010,140012],{"class":145,"line":146},[143,140009,614],{"class":153},[143,140011,138409],{"class":156},[143,140013,275],{"class":149},[143,140015,140016,140018,140020,140022],{"class":145,"line":35},[143,140017,138416],{"class":280},[143,140019,284],{"class":149},[143,140021,8552],{"class":163},[143,140023,290],{"class":149},[143,140025,140026,140028,140030,140032],{"class":145,"line":46},[143,140027,281],{"class":280},[143,140029,284],{"class":149},[143,140031,61752],{"class":280},[143,140033,290],{"class":149},[143,140035,140036],{"class":145,"line":293},[143,140037,348],{"class":149},[63,140039,140040],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[63,140042,140043,140044,140047],{},"2 号盒子左侧浮动，",[140,140045,140046],{},"navitems"," 导航栏组",[232,140049,140050,140055,140064],{},[22,140051,140052,140053],{},"里面结构是 ",[140,140054,139918],{},[22,140056,140057,140058,140060,140061,140063],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[140,140059,67],{},"左右的",[140,140062,31781],{},"把两侧撑开",[22,140065,140066],{},"让文字垂直居中（行高等于高度）",[29,140068],{"style":31,"src":140069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[63,140071,140072],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[63,140074,139246],{},[133,140076,140078],{"className":257,"code":140077,"language":259,"meta":138,"style":138},".box {\n  float: left;\n}\n",[140,140079,140080,140086,140096],{"__ignoreMap":138},[143,140081,140082,140084],{"class":145,"line":146},[143,140083,131268],{"class":156},[143,140085,275],{"class":149},[143,140087,140088,140090,140092,140094],{"class":145,"line":35},[143,140089,131896],{"class":280},[143,140091,284],{"class":149},[143,140093,24634],{"class":280},[143,140095,290],{"class":149},[143,140097,140098],{"class":145,"line":46},[143,140099,348],{"class":149},[63,140101,139286],{},[133,140103,140104],{"className":257,"code":140077,"language":259,"meta":138,"style":138},[140,140105,140106,140112,140122],{"__ignoreMap":138},[143,140107,140108,140110],{"class":145,"line":146},[143,140109,131268],{"class":156},[143,140111,275],{"class":149},[143,140113,140114,140116,140118,140120],{"class":145,"line":35},[143,140115,131896],{"class":280},[143,140117,284],{"class":149},[143,140119,24634],{"class":280},[143,140121,290],{"class":149},[143,140123,140124],{"class":145,"line":46},[143,140125,348],{"class":149},[63,140127,140128],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[29,140130],{"style":31,"src":140131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[133,140133,140134],{"className":257,"code":131573,"language":259,"meta":138,"style":138},[140,140135,140136,140142,140158],{"__ignoreMap":138},[143,140137,140138,140140],{"class":145,"line":146},[143,140139,614],{"class":153},[143,140141,275],{"class":149},[143,140143,140144,140146,140148,140150,140152,140154,140156],{"class":145,"line":35},[143,140145,766],{"class":280},[143,140147,284],{"class":149},[143,140149,771],{"class":280},[143,140151,774],{"class":755},[143,140153,777],{"class":280},[143,140155,130813],{"class":280},[143,140157,290],{"class":149},[143,140159,140160],{"class":145,"line":46},[143,140161,348],{"class":149},[58,140163,140165],{"id":140164},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[29,140167],{"style":31,"src":140168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[232,140170,140171,140176,140181],{},[22,140172,140173,140175],{},[140,140174,132619],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[22,140177,140178,140180],{},[140,140179,132619],{}," 里面有一个大的版心",[22,140182,140183,140184,140187,140188],{},"版心里面包含 1 号盒子，",[140,140185,140186],{},"mod_service"," 是服务模块，mod 是模块的意思",[232,140189,140190,140195,140208,140224,140229],{},[22,140191,139907,140192,140194],{},[140,140193,140186],{}," 设置高度（80px）和下边框",[22,140196,140197,140198,140201,140202,140204,140205,140207],{},"在里面定义 ",[140,140199,140200],{},"ul > li"," ,每个",[140,140203,22],{}," 宽度是300px 高度是 50px，给每个",[140,140206,22],{},"设置35px的左内边距",[22,140209,140210,140211,140213,140214,140216,140217,140219,140220,19308,140222,121112],{},"在每个",[140,140212,22],{},"里面，放一个 ",[140,140215,23808],{},"（里面放图标），一个",[140,140218,614],{},"（里面放",[140,140221,614],{},[140,140223,63],{},[22,140225,139907,140226,140228],{},[140,140227,23808],{},"设置浮动，让h5与这个div左右排列",[22,140230,140231],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[63,140233,139246],{},[133,140235,140237],{"className":257,"code":140236,"language":259,"meta":138,"style":138},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[140,140238,140239,140245,140257,140269,140296],{"__ignoreMap":138},[143,140240,140241,140243],{"class":145,"line":146},[143,140242,135168],{"class":156},[143,140244,275],{"class":149},[143,140246,140247,140249,140251,140253,140255],{"class":145,"line":35},[143,140248,71448],{"class":280},[143,140250,284],{"class":149},[143,140252,1741],{"class":280},[143,140254,774],{"class":755},[143,140256,290],{"class":149},[143,140258,140259,140261,140263,140265,140267],{"class":145,"line":46},[143,140260,71668],{"class":280},[143,140262,284],{"class":149},[143,140264,1741],{"class":280},[143,140266,774],{"class":755},[143,140268,290],{"class":149},[143,140270,140271,140273,140275,140277,140279,140281,140283,140285,140288,140290,140292,140294],{"class":145,"line":293},[143,140272,71491],{"class":280},[143,140274,284],{"class":149},[143,140276,62609],{"class":280},[143,140278,1049],{"class":149},[143,140280,135207],{"class":6116},[143,140282,14614],{"class":149},[143,140284,62619],{"class":280},[143,140286,140287],{"class":280}," -10",[143,140289,774],{"class":755},[143,140291,135226],{"class":280},[143,140293,774],{"class":755},[143,140295,290],{"class":149},[143,140297,140298],{"class":145,"line":306},[143,140299,348],{"class":149},[63,140301,139286],{},[133,140303,140304],{"className":257,"code":140236,"language":259,"meta":138,"style":138},[140,140305,140306,140312,140324,140336,140362],{"__ignoreMap":138},[143,140307,140308,140310],{"class":145,"line":146},[143,140309,135168],{"class":156},[143,140311,275],{"class":149},[143,140313,140314,140316,140318,140320,140322],{"class":145,"line":35},[143,140315,71448],{"class":280},[143,140317,284],{"class":149},[143,140319,1741],{"class":280},[143,140321,774],{"class":755},[143,140323,290],{"class":149},[143,140325,140326,140328,140330,140332,140334],{"class":145,"line":46},[143,140327,71668],{"class":280},[143,140329,284],{"class":149},[143,140331,1741],{"class":280},[143,140333,774],{"class":755},[143,140335,290],{"class":149},[143,140337,140338,140340,140342,140344,140346,140348,140350,140352,140354,140356,140358,140360],{"class":145,"line":293},[143,140339,71491],{"class":280},[143,140341,284],{"class":149},[143,140343,62609],{"class":280},[143,140345,1049],{"class":149},[143,140347,135207],{"class":6116},[143,140349,14614],{"class":149},[143,140351,62619],{"class":280},[143,140353,140287],{"class":280},[143,140355,774],{"class":755},[143,140357,135226],{"class":280},[143,140359,774],{"class":755},[143,140361,290],{"class":149},[143,140363,140364],{"class":145,"line":306},[143,140365,348],{"class":149},[63,140367,140368],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[232,140370,140371,140374,140380,140386,140398],{},[22,140372,140373],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[22,140375,140376,140377,121112],{},"里面的布局利用 自定义列表来实现（",[140,140378,140379],{},"dl > dt + dd",[22,140381,139907,140382,140385],{},[140,140383,140384],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[22,140387,139907,140388,140391,140392,19308,140394,140397],{},[140,140389,140390],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[140,140393,140390],{},[140,140395,140396],{},"dd","之间有些距离",[22,140399,140400],{},"最后一个 dl 结构和样式不一样，需要单独设置",[63,140402,139246],{},[133,140404,140405],{"className":257,"code":139596,"language":259,"meta":138,"style":138},[140,140406,140407,140413,140425],{"__ignoreMap":138},[143,140408,140409,140411],{"class":145,"line":146},[143,140410,614],{"class":153},[143,140412,275],{"class":149},[143,140414,140415,140417,140419,140421,140423],{"class":145,"line":35},[143,140416,71350],{"class":280},[143,140418,284],{"class":149},[143,140420,1234],{"class":280},[143,140422,52448],{"class":280},[143,140424,290],{"class":149},[143,140426,140427],{"class":145,"line":46},[143,140428,348],{"class":149},[63,140430,139286],{},[133,140432,140433],{"className":257,"code":139596,"language":259,"meta":138,"style":138},[140,140434,140435,140441,140453],{"__ignoreMap":138},[143,140436,140437,140439],{"class":145,"line":146},[143,140438,614],{"class":153},[143,140440,275],{"class":149},[143,140442,140443,140445,140447,140449,140451],{"class":145,"line":35},[143,140444,71350],{"class":280},[143,140446,284],{"class":149},[143,140448,1234],{"class":280},[143,140450,52448],{"class":280},[143,140452,290],{"class":149},[143,140454,140455],{"class":145,"line":46},[143,140456,348],{"class":149},[63,140458,140459],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[232,140461,140462,140471,140474,140485],{},[22,140463,140464,140465,140467,140468,140470],{},"分为上下两块，上面是 ",[140,140466,132636],{}," 友情链接，下面是 ",[140,140469,132629],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[22,140472,140473],{},"把内容分别复制到相应模块中",[22,140475,139907,140476,140478,140479,140481,140482,140484],{},[140,140477,132636],{}," 设置 15px 的下外边距，给",[140,140480,132636],{}," 里面 的 ",[140,140483,67],{}," 标签设置 左右 3px 的外边距",[22,140486,140487,140488,140490],{},"给",[140,140489,132629],{}," 设置 20px 的行高",[63,140492,139246],{},[133,140494,140495],{"className":257,"code":139596,"language":259,"meta":138,"style":138},[140,140496,140497,140503,140515],{"__ignoreMap":138},[143,140498,140499,140501],{"class":145,"line":146},[143,140500,614],{"class":153},[143,140502,275],{"class":149},[143,140504,140505,140507,140509,140511,140513],{"class":145,"line":35},[143,140506,71350],{"class":280},[143,140508,284],{"class":149},[143,140510,1234],{"class":280},[143,140512,52448],{"class":280},[143,140514,290],{"class":149},[143,140516,140517],{"class":145,"line":46},[143,140518,348],{"class":149},[63,140520,139286],{},[133,140522,140523],{"className":257,"code":139596,"language":259,"meta":138,"style":138},[140,140524,140525,140531,140543],{"__ignoreMap":138},[143,140526,140527,140529],{"class":145,"line":146},[143,140528,614],{"class":153},[143,140530,275],{"class":149},[143,140532,140533,140535,140537,140539,140541],{"class":145,"line":35},[143,140534,71350],{"class":280},[143,140536,284],{"class":149},[143,140538,1234],{"class":280},[143,140540,52448],{"class":280},[143,140542,290],{"class":149},[143,140544,140545],{"class":145,"line":46},[143,140546,348],{"class":149},[63,140548,140549],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[954,140551,140552],{},"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":138,"searchDepth":35,"depth":35,"links":140554},[140555,140556,140557,140564],{"id":138835,"depth":35,"text":138836},{"id":138854,"depth":35,"text":138855},{"id":138881,"depth":35,"text":138882,"children":140558},[140559,140560,140561,140562,140563],{"id":138885,"depth":46,"text":138886},{"id":138898,"depth":46,"text":138899},{"id":138922,"depth":46,"text":138923},{"id":138944,"depth":46,"text":138945},{"id":139016,"depth":46,"text":139017},{"id":139142,"depth":35,"text":139143,"children":140565},[140566,140567,140568,140569,140571],{"id":139146,"depth":46,"text":139147},{"id":139153,"depth":46,"text":139154},{"id":139325,"depth":46,"text":139326},{"id":139866,"depth":46,"text":140570},"15.4.4 nav导航模块制作",{"id":140164,"depth":46,"text":140165},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138827,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140578,"title":140579,"body":140580,"description":973,"extension":974,"meta":142980,"navigation":976,"path":142981,"seo":142982,"stem":142983,"__hash__":142984},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140581,"toc":142957},[140582,140585,140589,140593,140605,140608,140611,140614,140625,140627,140651,140653,140677,140682,140685,140687,140723,140725,140761,140764,140769,140772,140775,140777,140807,140814,140817,140827,140829,140863,140865,140899,140905,140922,140924,140960,140962,140998,141003,141028,141030,141056,141058,141082,141089,141092,141156,141158,141200,141202,141242,141249,141254,141256,141286,141288,141318,141322,141325,141332,141344,141346,141372,141374,141398,141401,141403,141427,141433,141443,141445,141475,141477,141507,141514,141555,141557,141593,141595,141631,141635,141638,141641,141644,141650,141655,141658,141681,141684,141708,141711,141735,141740,141743,141746,141749,141752,141755,141829,141831,141861,141863,141893,141896,141899,141931,141935,141939,141953,141962,141965,141970,141972,142066,142068,142162,142185,142187,142211,142213,142237,142244,142247,142257,142259,142283,142288,142296,142298,142328,142333,142373,142375,142401,142403,142429,142433,142436,142441,142444,142448,142456,142463,142471,142473,142503,142505,142535,142543,142546,142549,142551,142581,142583,142613,142616,142621,142623,142647,142649,142673,142676,142761,142763,142787,142789,142813,142817,142819,142843,142845,142879,142883,142897,142900,142905,142908,142913,142916,142946,142954],[10,140583,140579],{"id":140584},"_16-品优购项目下篇-主体与页面开发",[14,140586,140588],{"id":140587},"_161-项目主体模块制作","16.1 项目主体模块制作",[58,140590,140592],{"id":140591},"_1611-首页制作","16.1.1 首页制作",[63,140594,140595,140597,140598,140600,140601,140604],{},[25,140596,102934],{}," 主体模块是 ",[25,140599,74937],{}," 里面专有的，注意需要新的样式文件 ",[25,140602,140603],{},"index.css，"," 就不要写在common.css中了",[29,140606],{"style":31,"src":140607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[29,140609],{"style":31,"src":140610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[63,140612,140613],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[232,140615,140616,140619,140622],{},[22,140617,140618],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[22,140620,140621],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[22,140623,140624],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[63,140626,139246],{},[133,140628,140629],{"className":257,"code":140077,"language":259,"meta":138,"style":138},[140,140630,140631,140637,140647],{"__ignoreMap":138},[143,140632,140633,140635],{"class":145,"line":146},[143,140634,131268],{"class":156},[143,140636,275],{"class":149},[143,140638,140639,140641,140643,140645],{"class":145,"line":35},[143,140640,131896],{"class":280},[143,140642,284],{"class":149},[143,140644,24634],{"class":280},[143,140646,290],{"class":149},[143,140648,140649],{"class":145,"line":46},[143,140650,348],{"class":149},[63,140652,139286],{},[133,140654,140655],{"className":257,"code":140077,"language":259,"meta":138,"style":138},[140,140656,140657,140663,140673],{"__ignoreMap":138},[143,140658,140659,140661],{"class":145,"line":146},[143,140660,131268],{"class":156},[143,140662,275],{"class":149},[143,140664,140665,140667,140669,140671],{"class":145,"line":35},[143,140666,131896],{"class":280},[143,140668,284],{"class":149},[143,140670,24634],{"class":280},[143,140672,290],{"class":149},[143,140674,140675],{"class":145,"line":46},[143,140676,348],{"class":149},[19,140678,140679],{},[22,140680,140681],{},"左侧focus模块制作",[29,140683],{"style":31,"src":140684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[63,140686,139246],{},[133,140688,140689],{"className":257,"code":128745,"language":259,"meta":138,"style":138},[140,140690,140691,140699,140709,140719],{"__ignoreMap":138},[143,140692,140693,140695,140697],{"class":145,"line":146},[143,140694,746],{"class":153},[143,140696,62783],{"class":156},[143,140698,275],{"class":149},[143,140700,140701,140703,140705,140707],{"class":145,"line":35},[143,140702,128760],{"class":280},[143,140704,284],{"class":149},[143,140706,55774],{"class":280},[143,140708,290],{"class":149},[143,140710,140711,140713,140715,140717],{"class":145,"line":46},[143,140712,71678],{"class":280},[143,140714,284],{"class":149},[143,140716,55622],{"class":280},[143,140718,290],{"class":149},[143,140720,140721],{"class":145,"line":293},[143,140722,348],{"class":149},[63,140724,139286],{},[133,140726,140727],{"className":257,"code":128745,"language":259,"meta":138,"style":138},[140,140728,140729,140737,140747,140757],{"__ignoreMap":138},[143,140730,140731,140733,140735],{"class":145,"line":146},[143,140732,746],{"class":153},[143,140734,62783],{"class":156},[143,140736,275],{"class":149},[143,140738,140739,140741,140743,140745],{"class":145,"line":35},[143,140740,128760],{"class":280},[143,140742,284],{"class":149},[143,140744,55774],{"class":280},[143,140746,290],{"class":149},[143,140748,140749,140751,140753,140755],{"class":145,"line":46},[143,140750,71678],{"class":280},[143,140752,284],{"class":149},[143,140754,55622],{"class":280},[143,140756,290],{"class":149},[143,140758,140759],{"class":145,"line":293},[143,140760,348],{"class":149},[63,140762,140763],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[19,140765,140766],{"start":35},[22,140767,140768],{},"右侧newsflash模块制作",[29,140770],{"style":31,"src":140771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[63,140773,140774],{},"右侧的模块 分为上中下三个盒子",[63,140776,131],{},[133,140778,140779],{"className":135,"code":136,"language":137,"meta":138,"style":138},[140,140780,140781],{"__ignoreMap":138},[143,140782,140783,140785,140787,140789,140791,140793,140795,140797,140799,140801,140803,140805],{"class":145,"line":146},[143,140784,150],{"class":149},[143,140786,29],{"class":153},[143,140788,157],{"class":156},[143,140790,160],{"class":149},[143,140792,164],{"class":163},[143,140794,167],{"class":156},[143,140796,160],{"class":149},[143,140798,172],{"class":163},[143,140800,175],{"class":156},[143,140802,160],{"class":149},[143,140804,180],{"class":163},[143,140806,183],{"class":149},[63,140808,140809,140810,140813],{},"1 号盒子为 ",[140,140811,140812],{},"news"," 新闻模块 高度为 165px",[29,140815],{"style":31,"src":140816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[63,140818,140819,140820,140823,140824],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[140,140821,140822],{},"news-hd","，下面是 ",[140,140825,140826],{},"news-bd",[63,140828,131],{},[133,140830,140831],{"className":135,"code":917,"language":137,"meta":138,"style":138},[140,140832,140833,140837,140851,140855],{"__ignoreMap":138},[143,140834,140835],{"class":145,"line":146},[143,140836,924],{"class":266},[143,140838,140839,140841,140843,140845,140847,140849],{"class":145,"line":35},[143,140840,150],{"class":149},[143,140842,614],{"class":153},[143,140844,617],{"class":156},[143,140846,160],{"class":149},[143,140848,937],{"class":163},[143,140850,183],{"class":149},[143,140852,140853],{"class":145,"line":46},[143,140854,944],{"class":149},[143,140856,140857,140859,140861],{"class":145,"line":293},[143,140858,730],{"class":149},[143,140860,614],{"class":153},[143,140862,183],{"class":149},[63,140864,186],{},[133,140866,140867],{"className":135,"code":917,"language":137,"meta":138,"style":138},[140,140868,140869,140873,140887,140891],{"__ignoreMap":138},[143,140870,140871],{"class":145,"line":146},[143,140872,924],{"class":266},[143,140874,140875,140877,140879,140881,140883,140885],{"class":145,"line":35},[143,140876,150],{"class":149},[143,140878,614],{"class":153},[143,140880,617],{"class":156},[143,140882,160],{"class":149},[143,140884,937],{"class":163},[143,140886,183],{"class":149},[143,140888,140889],{"class":145,"line":46},[143,140890,944],{"class":149},[143,140892,140893,140895,140897],{"class":145,"line":293},[143,140894,730],{"class":149},[143,140896,614],{"class":153},[143,140898,183],{"class":149},[63,140900,140901,140902,140904],{},"上面是",[140,140903,140822],{},"，设置高度是 33px，设置下边框",[232,140906,140907,140913],{},[22,140908,140909,140910,140912],{},"里面放一个",[140,140911,23808],{}," 标题",[22,140914,140915,140916,140918,140919,140921],{},"放一个a",[140,140917,103569],{},"，内容是 更多，然后让 ",[140,140920,67],{}," 进行右浮动，三角用伪元素设置字体图标就好",[63,140923,131],{},[133,140925,140926],{"className":257,"code":139249,"language":259,"meta":138,"style":138},[140,140927,140928,140936,140946,140956],{"__ignoreMap":138},[143,140929,140930,140932,140934],{"class":145,"line":146},[143,140931,614],{"class":153},[143,140933,138409],{"class":156},[143,140935,275],{"class":149},[143,140937,140938,140940,140942,140944],{"class":145,"line":35},[143,140939,138416],{"class":280},[143,140941,284],{"class":149},[143,140943,8552],{"class":163},[143,140945,290],{"class":149},[143,140947,140948,140950,140952,140954],{"class":145,"line":46},[143,140949,281],{"class":280},[143,140951,284],{"class":149},[143,140953,61752],{"class":280},[143,140955,290],{"class":149},[143,140957,140958],{"class":145,"line":293},[143,140959,348],{"class":149},[63,140961,186],{},[133,140963,140964],{"className":257,"code":139249,"language":259,"meta":138,"style":138},[140,140965,140966,140974,140984,140994],{"__ignoreMap":138},[143,140967,140968,140970,140972],{"class":145,"line":146},[143,140969,614],{"class":153},[143,140971,138409],{"class":156},[143,140973,275],{"class":149},[143,140975,140976,140978,140980,140982],{"class":145,"line":35},[143,140977,138416],{"class":280},[143,140979,284],{"class":149},[143,140981,8552],{"class":163},[143,140983,290],{"class":149},[143,140985,140986,140988,140990,140992],{"class":145,"line":46},[143,140987,281],{"class":280},[143,140989,284],{"class":149},[143,140991,61752],{"class":280},[143,140993,290],{"class":149},[143,140995,140996],{"class":145,"line":293},[143,140997,348],{"class":149},[63,140999,141000,141001],{},"下面是",[140,141002,140826],{},[232,141004,141005,141013],{},[22,141006,141007,141008,101894,141010,141012],{},"里面包含 ",[140,141009,232],{},[140,141011,22],{}," 还有链接",[22,141014,140487,141015,141017,141018,141020,141021,141024,141025],{},[140,141016,22],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[140,141019,132082],{}," 2.设置 ",[140,141022,141023],{},"white-space: nowrap;"," 3. 设置 ",[140,141026,141027],{},"text-overflow: ellipsis;",[63,141029,131],{},[133,141031,141033],{"className":257,"code":141032,"language":259,"meta":138,"style":138},"div {\n  overflow: hidden;\n}\n",[140,141034,141035,141041,141052],{"__ignoreMap":138},[143,141036,141037,141039],{"class":145,"line":146},[143,141038,614],{"class":153},[143,141040,275],{"class":149},[143,141042,141043,141046,141048,141050],{"class":145,"line":35},[143,141044,141045],{"class":280},"  overflow",[143,141047,284],{"class":149},[143,141049,62597],{"class":280},[143,141051,290],{"class":149},[143,141053,141054],{"class":145,"line":46},[143,141055,348],{"class":149},[63,141057,186],{},[133,141059,141060],{"className":257,"code":141032,"language":259,"meta":138,"style":138},[140,141061,141062,141068,141078],{"__ignoreMap":138},[143,141063,141064,141066],{"class":145,"line":146},[143,141065,614],{"class":153},[143,141067,275],{"class":149},[143,141069,141070,141072,141074,141076],{"class":145,"line":35},[143,141071,141045],{"class":280},[143,141073,284],{"class":149},[143,141075,62597],{"class":280},[143,141077,290],{"class":149},[143,141079,141080],{"class":145,"line":46},[143,141081,348],{"class":149},[63,141083,141084,141085,141088],{},"2 号盒子为 ",[140,141086,141087],{},"lifeservice"," 生活服务模块 高度为 209px",[29,141090],{"style":31,"src":141091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[232,141093,141094,141097,141107,141131,141142],{},[22,141095,141096],{},"设置边框（左右下边框）",[22,141098,141099,141100,141103,141104,141106],{},"里面的内容 是 ",[140,141101,141102],{},"ul > 12*li","，给",[140,141105,22],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[22,141108,141109,141110],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[232,141111,141112,141117,141126],{},[22,141113,141114,141116],{},[140,141115,141087],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[22,141118,141119,141120,141122,141123,141125],{},"可以让 ",[140,141121,141087],{}," 里面的 ",[140,141124,232],{}," 宽度为 252，就可以装的下 4 个 小 li",[22,141127,141128,141130],{},[140,141129,141087],{}," 盒子 overflow 隐藏多余的部分就可以了",[22,141132,117342,141133,141135,141136,141138,141139,141141],{},[140,141134,22],{}," 里面放一个 ",[140,141137,1482],{},"（里面放图标），下面的文本用 ",[140,141140,63],{}," 标签包裹",[22,141143,139907,141144,141146,141147,141149,141150,139941,141152,141155],{},[140,141145,1482],{}," 设置 24px宽和28px的高（注意 ",[140,141148,1482],{}," 是行内元素， 转成行内块），给 ",[140,141151,22],{},[140,141153,141154],{},"text-align:center"," 让里面内容居中显示",[63,141157,131],{},[133,141159,141161],{"className":257,"code":141160,"language":259,"meta":138,"style":138},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[140,141162,141163,141181,141186,141196],{"__ignoreMap":138},[143,141164,141165,141167,141169,141171,141173,141175,141177,141179],{"class":145,"line":146},[143,141166,143],{"class":153},[143,141168,13335],{"class":149},[143,141170,67],{"class":153},[143,141172,13335],{"class":149},[143,141174,24451],{"class":153},[143,141176,13335],{"class":149},[143,141178,25],{"class":153},[143,141180,275],{"class":149},[143,141182,141183],{"class":145,"line":35},[143,141184,141185],{"class":266},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[143,141187,141188,141190,141192,141194],{"class":145,"line":46},[143,141189,281],{"class":280},[143,141191,284],{"class":149},[143,141193,129099],{"class":280},[143,141195,290],{"class":149},[143,141197,141198],{"class":145,"line":293},[143,141199,348],{"class":149},[63,141201,186],{},[133,141203,141204],{"className":257,"code":141160,"language":259,"meta":138,"style":138},[140,141205,141206,141224,141228,141238],{"__ignoreMap":138},[143,141207,141208,141210,141212,141214,141216,141218,141220,141222],{"class":145,"line":146},[143,141209,143],{"class":153},[143,141211,13335],{"class":149},[143,141213,67],{"class":153},[143,141215,13335],{"class":149},[143,141217,24451],{"class":153},[143,141219,13335],{"class":149},[143,141221,25],{"class":153},[143,141223,275],{"class":149},[143,141225,141226],{"class":145,"line":35},[143,141227,141185],{"class":266},[143,141229,141230,141232,141234,141236],{"class":145,"line":46},[143,141231,281],{"class":280},[143,141233,284],{"class":149},[143,141235,129099],{"class":280},[143,141237,290],{"class":149},[143,141239,141240],{"class":145,"line":293},[143,141241,348],{"class":149},[63,141243,141244,141245,141248],{},"3 号盒子为 ",[140,141246,141247],{},"bargain"," 特价商品",[232,141250,141251],{},[22,141252,141253],{},"这个比较简单，直接插入一张图片即可",[63,141255,131],{},[133,141257,141258],{"className":135,"code":136,"language":137,"meta":138,"style":138},[140,141259,141260],{"__ignoreMap":138},[143,141261,141262,141264,141266,141268,141270,141272,141274,141276,141278,141280,141282,141284],{"class":145,"line":146},[143,141263,150],{"class":149},[143,141265,29],{"class":153},[143,141267,157],{"class":156},[143,141269,160],{"class":149},[143,141271,164],{"class":163},[143,141273,167],{"class":156},[143,141275,160],{"class":149},[143,141277,172],{"class":163},[143,141279,175],{"class":156},[143,141281,160],{"class":149},[143,141283,180],{"class":163},[143,141285,183],{"class":149},[63,141287,186],{},[133,141289,141290],{"className":135,"code":136,"language":137,"meta":138,"style":138},[140,141291,141292],{"__ignoreMap":138},[143,141293,141294,141296,141298,141300,141302,141304,141306,141308,141310,141312,141314,141316],{"class":145,"line":146},[143,141295,150],{"class":149},[143,141297,29],{"class":153},[143,141299,157],{"class":156},[143,141301,160],{"class":149},[143,141303,164],{"class":163},[143,141305,167],{"class":156},[143,141307,160],{"class":149},[143,141309,172],{"class":163},[143,141311,175],{"class":156},[143,141313,160],{"class":149},[143,141315,180],{"class":163},[143,141317,183],{"class":149},[58,141319,141321],{"id":141320},"_1612-推荐模块制作","16.1.2 推荐模块制作",[29,141323],{"style":31,"src":141324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[63,141326,141327,141328,141331],{},"大盒子 ",[140,141329,141330],{},"recom"," 推荐模块 recommend",[232,141333,141334],{},[22,141335,141336,141337,141339,141340,141343],{},"给这个 ",[140,141338,141330],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[140,141341,141342],{},"#ebebeb","），设置距离上边 12px",[63,141345,131],{},[133,141347,141349],{"className":257,"code":141348,"language":259,"meta":138,"style":138},"div {\n  background-color: #f0f0f0;\n}\n",[140,141350,141351,141357,141368],{"__ignoreMap":138},[143,141352,141353,141355],{"class":145,"line":146},[143,141354,614],{"class":153},[143,141356,275],{"class":149},[143,141358,141359,141361,141363,141366],{"class":145,"line":35},[143,141360,71758],{"class":280},[143,141362,284],{"class":149},[143,141364,141365],{"class":280},"#f0f0f0",[143,141367,290],{"class":149},[143,141369,141370],{"class":145,"line":46},[143,141371,348],{"class":149},[63,141373,186],{},[133,141375,141376],{"className":257,"code":141348,"language":259,"meta":138,"style":138},[140,141377,141378,141384,141394],{"__ignoreMap":138},[143,141379,141380,141382],{"class":145,"line":146},[143,141381,614],{"class":153},[143,141383,275],{"class":149},[143,141385,141386,141388,141390,141392],{"class":145,"line":35},[143,141387,71758],{"class":280},[143,141389,284],{"class":149},[143,141391,141365],{"class":280},[143,141393,290],{"class":149},[143,141395,141396],{"class":145,"line":46},[143,141397,348],{"class":149},[63,141399,141400],{},"里面包含 2 个盒子， 浮动即可",[63,141402,131],{},[133,141404,141405],{"className":257,"code":140077,"language":259,"meta":138,"style":138},[140,141406,141407,141413,141423],{"__ignoreMap":138},[143,141408,141409,141411],{"class":145,"line":146},[143,141410,131268],{"class":156},[143,141412,275],{"class":149},[143,141414,141415,141417,141419,141421],{"class":145,"line":35},[143,141416,131896],{"class":280},[143,141418,284],{"class":149},[143,141420,24634],{"class":280},[143,141422,290],{"class":149},[143,141424,141425],{"class":145,"line":46},[143,141426,348],{"class":149},[63,141428,141429,141430],{},"1 号盒子 ",[140,141431,141432],{},"recom_hd",[232,141434,141435,141438],{},[22,141436,141437],{},"设置宽度205px，高度163px",[22,141439,140909,141440,141442],{},[140,141441,29],{},"标签，插入图片即可",[63,141444,131],{},[133,141446,141447],{"className":135,"code":136,"language":137,"meta":138,"style":138},[140,141448,141449],{"__ignoreMap":138},[143,141450,141451,141453,141455,141457,141459,141461,141463,141465,141467,141469,141471,141473],{"class":145,"line":146},[143,141452,150],{"class":149},[143,141454,29],{"class":153},[143,141456,157],{"class":156},[143,141458,160],{"class":149},[143,141460,164],{"class":163},[143,141462,167],{"class":156},[143,141464,160],{"class":149},[143,141466,172],{"class":163},[143,141468,175],{"class":156},[143,141470,160],{"class":149},[143,141472,180],{"class":163},[143,141474,183],{"class":149},[63,141476,186],{},[133,141478,141479],{"className":135,"code":136,"language":137,"meta":138,"style":138},[140,141480,141481],{"__ignoreMap":138},[143,141482,141483,141485,141487,141489,141491,141493,141495,141497,141499,141501,141503,141505],{"class":145,"line":146},[143,141484,150],{"class":149},[143,141486,29],{"class":153},[143,141488,157],{"class":156},[143,141490,160],{"class":149},[143,141492,164],{"class":163},[143,141494,167],{"class":156},[143,141496,160],{"class":149},[143,141498,172],{"class":163},[143,141500,175],{"class":156},[143,141502,160],{"class":149},[143,141504,180],{"class":163},[143,141506,183],{"class":149},[63,141508,141509,141510,141513],{},"2 号盒子 ",[140,141511,141512],{},"recom_bd"," ，注意里面的小竖线",[232,141515,141516,141527,141530,141535,141540],{},[22,141517,141518,141519,141521,141522,141524,141525],{},"右侧结构里面放 ",[140,141520,232],{}," 包含 4个 ",[140,141523,22],{},"，每个li里面包含一个",[140,141526,29],{},[22,141528,141529],{},"直接利用切片工具把里面的内容当成一张图片",[22,141531,139907,141532,141534],{},[140,141533,22],{}," 设置浮动",[22,141536,139907,141537,141539],{},[140,141538,29],{}," 设置宽高，宽度 248px，高度 163px",[22,141541,141542,141543,141103,141546,141548,141549,141551,141552],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[140,141544,141545],{},"top 10px",[140,141547,22],{},"设置相对定位（注意，最后一个",[140,141550,22],{},"不用设置伪元素），可以利用 ",[140,141553,141554],{},"nth-child(-n+3){...}",[63,141556,131],{},[133,141558,141559],{"className":257,"code":139249,"language":259,"meta":138,"style":138},[140,141560,141561,141569,141579,141589],{"__ignoreMap":138},[143,141562,141563,141565,141567],{"class":145,"line":146},[143,141564,614],{"class":153},[143,141566,138409],{"class":156},[143,141568,275],{"class":149},[143,141570,141571,141573,141575,141577],{"class":145,"line":35},[143,141572,138416],{"class":280},[143,141574,284],{"class":149},[143,141576,8552],{"class":163},[143,141578,290],{"class":149},[143,141580,141581,141583,141585,141587],{"class":145,"line":46},[143,141582,281],{"class":280},[143,141584,284],{"class":149},[143,141586,61752],{"class":280},[143,141588,290],{"class":149},[143,141590,141591],{"class":145,"line":293},[143,141592,348],{"class":149},[63,141594,186],{},[133,141596,141597],{"className":257,"code":139249,"language":259,"meta":138,"style":138},[140,141598,141599,141607,141617,141627],{"__ignoreMap":138},[143,141600,141601,141603,141605],{"class":145,"line":146},[143,141602,614],{"class":153},[143,141604,138409],{"class":156},[143,141606,275],{"class":149},[143,141608,141609,141611,141613,141615],{"class":145,"line":35},[143,141610,138416],{"class":280},[143,141612,284],{"class":149},[143,141614,8552],{"class":163},[143,141616,290],{"class":149},[143,141618,141619,141621,141623,141625],{"class":145,"line":46},[143,141620,281],{"class":280},[143,141622,284],{"class":149},[143,141624,61752],{"class":280},[143,141626,290],{"class":149},[143,141628,141629],{"class":145,"line":293},[143,141630,348],{"class":149},[58,141632,141634],{"id":141633},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[29,141636],{"style":31,"src":141637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[63,141639,141640],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[63,141642,141643],{},"第一楼是家用电器模块： 里面包含两个盒子",[63,141645,141646,141649],{},[140,141647,141648],{},"box_hd"," 制作",[63,141651,141429,141652,141654],{},[140,141653,141648],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[29,141656],{"style":31,"src":141657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[232,141659,141660,141665,141670,141673],{},[22,141661,141662,141664],{},[140,141663,141648],{}," 给 30px 的高度，2个像素的下边框",[22,141666,141667,141668],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[140,141669,139918],{},[22,141671,141672],{},"左侧盒左浮动，右侧盒子右浮动",[22,141674,141675,141677,141678,141680],{},[140,141676,67],{},"标签之间的距离用左右的",[140,141679,31781],{},"撑开即可",[63,141682,141683],{},"结构代码",[133,141685,141686],{"className":257,"code":140077,"language":259,"meta":138,"style":138},[140,141687,141688,141694,141704],{"__ignoreMap":138},[143,141689,141690,141692],{"class":145,"line":146},[143,141691,131268],{"class":156},[143,141693,275],{"class":149},[143,141695,141696,141698,141700,141702],{"class":145,"line":35},[143,141697,131896],{"class":280},[143,141699,284],{"class":149},[143,141701,24634],{"class":280},[143,141703,290],{"class":149},[143,141705,141706],{"class":145,"line":46},[143,141707,348],{"class":149},[63,141709,141710],{},"样式代码",[133,141712,141713],{"className":257,"code":140077,"language":259,"meta":138,"style":138},[140,141714,141715,141721,141731],{"__ignoreMap":138},[143,141716,141717,141719],{"class":145,"line":146},[143,141718,131268],{"class":156},[143,141720,275],{"class":149},[143,141722,141723,141725,141727,141729],{"class":145,"line":35},[143,141724,131896],{"class":280},[143,141726,284],{"class":149},[143,141728,24634],{"class":280},[143,141730,290],{"class":149},[143,141732,141733],{"class":145,"line":46},[143,141734,348],{"class":149},[63,141736,141737,141649],{},[140,141738,141739],{},"box_bd",[63,141741,141742],{},"2 号盒子 box_bd，不要给高度",[29,141744],{"style":31,"src":141745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[63,141747,141748],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[63,141750,141751],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[63,141753,141754],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[232,141756,141757,141769,141785],{},[22,141758,141759,141761,141762,141765,141766,141768],{},[140,141760,141739],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[140,141763,141764],{},"tab_content","，在",[140,141767,141764],{}," 里面包裹tab选项卡对应的内容",[22,141770,141771,141772,141775,141776,141778,141779,141781,141782,141784],{},"内容被一个大盒子包裹（",[140,141773,141774],{},"tab_list_item","），里面是 ",[140,141777,232],{}," 包裹 5个 ",[140,141780,22],{},"，每个",[140,141783,22],{},"设置对应的宽度，然后设置浮动",[22,141786,141787,141788,141790,141791,141793,141794],{},"而这5个",[140,141789,22],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[140,141792,22],{},"设置",[232,141795,141796,141814,141817],{},[22,141797,141798,141799,141801,141802,141804,141805,141807,141808,141810,141811,141813],{},"第一个小 ",[140,141800,22],{}," 分为上下结构，上面是 ",[140,141803,232],{}," 包裹 ",[140,141806,22],{}," ，",[140,141809,22],{},"里面包裹 ",[140,141812,67],{},"，下面插入一张图片",[22,141815,141816],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[22,141818,141819,141820,141822,141823,141825,141826,141828],{},"后面的小 ",[140,141821,22],{}," 里面先放一个",[140,141824,67],{},"标签，然后在",[140,141827,67],{},"标签里面插入图片即可",[63,141830,141683],{},[133,141832,141833],{"className":135,"code":136,"language":137,"meta":138,"style":138},[140,141834,141835],{"__ignoreMap":138},[143,141836,141837,141839,141841,141843,141845,141847,141849,141851,141853,141855,141857,141859],{"class":145,"line":146},[143,141838,150],{"class":149},[143,141840,29],{"class":153},[143,141842,157],{"class":156},[143,141844,160],{"class":149},[143,141846,164],{"class":163},[143,141848,167],{"class":156},[143,141850,160],{"class":149},[143,141852,172],{"class":163},[143,141854,175],{"class":156},[143,141856,160],{"class":149},[143,141858,180],{"class":163},[143,141860,183],{"class":149},[63,141862,141710],{},[133,141864,141865],{"className":135,"code":136,"language":137,"meta":138,"style":138},[140,141866,141867],{"__ignoreMap":138},[143,141868,141869,141871,141873,141875,141877,141879,141881,141883,141885,141887,141889,141891],{"class":145,"line":146},[143,141870,150],{"class":149},[143,141872,29],{"class":153},[143,141874,157],{"class":156},[143,141876,160],{"class":149},[143,141878,164],{"class":163},[143,141880,167],{"class":156},[143,141882,160],{"class":149},[143,141884,172],{"class":163},[143,141886,175],{"class":156},[143,141888,160],{"class":149},[143,141890,180],{"class":163},[143,141892,183],{"class":149},[63,141894,141895],{},"tab栏切换需求！！！！！！介绍：",[29,141897],{"style":31,"src":141898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[232,141900,141901,141909,141915,141918],{},[22,141902,141903,141906,141907],{},[140,141904,141905],{},"tab","栏的布局是 ",[140,141908,139918],{},[22,141910,141911,141912,141914],{},"有多少个",[140,141913,141905],{},"选项卡，那么对应就有多少个内容",[22,141916,141917],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[22,141919,141920,141921,141924,141925,141927,141928,141930],{},"等后面我们学习了",[140,141922,141923],{},"js","之后，我们就会配合",[140,141926,141923],{},"来实现，",[140,141929,141905],{},"栏的切换",[14,141932,141934],{"id":141933},"_162-列表制作","16.2 列表制作",[58,141936,141938],{"id":141937},"_1621-准备工作","16.2.1 准备工作",[232,141940,141941,141944,141947,141950],{},[22,141942,141943],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[22,141945,141946],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[22,141948,141949],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[22,141951,141952],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[58,141954,141956,141957,101894,141959,141961],{"id":141955},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[140,141958,132421],{},[140,141960,54599],{}," 修改",[29,141963],{"style":31,"src":141964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[232,141966,141967],{},[22,141968,141969],{},"秒杀盒子 sk（ second kill ） 定位即可",[63,141971,131],{},[133,141973,141974],{"className":257,"code":132848,"language":259,"meta":138,"style":138},[140,141975,141976,141980,141994,141998,142012,142016,142030,142034,142048,142052],{"__ignoreMap":138},[143,141977,141978],{"class":145,"line":146},[143,141979,132855],{"class":266},[143,141981,141982,141984,141986,141988,141990,141992],{"class":145,"line":35},[143,141983,132860],{"class":156},[143,141985,80685],{"class":149},[143,141987,129781],{"class":280},[143,141989,284],{"class":149},[143,141991,132869],{"class":280},[143,141993,130351],{"class":149},[143,141995,141996],{"class":145,"line":46},[143,141997,132876],{"class":266},[143,141999,142000,142002,142004,142006,142008,142010],{"class":145,"line":293},[143,142001,132881],{"class":156},[143,142003,80685],{"class":149},[143,142005,129781],{"class":280},[143,142007,284],{"class":149},[143,142009,55649],{"class":280},[143,142011,130351],{"class":149},[143,142013,142014],{"class":145,"line":306},[143,142015,132896],{"class":266},[143,142017,142018,142020,142022,142024,142026,142028],{"class":145,"line":319},[143,142019,132901],{"class":156},[143,142021,80685],{"class":149},[143,142023,129781],{"class":280},[143,142025,284],{"class":149},[143,142027,55716],{"class":280},[143,142029,130351],{"class":149},[143,142031,142032],{"class":145,"line":332},[143,142033,132916],{"class":266},[143,142035,142036,142038,142040,142042,142044,142046],{"class":145,"line":345},[143,142037,132921],{"class":156},[143,142039,80685],{"class":149},[143,142041,129781],{"class":280},[143,142043,284],{"class":149},[143,142045,87111],{"class":280},[143,142047,130351],{"class":149},[143,142049,142050],{"class":145,"line":701},[143,142051,132936],{"class":266},[143,142053,142054,142056,142058,142060,142062,142064],{"class":145,"line":707},[143,142055,132941],{"class":156},[143,142057,80685],{"class":149},[143,142059,129781],{"class":280},[143,142061,284],{"class":149},[143,142063,132950],{"class":280},[143,142065,130351],{"class":149},[63,142067,186],{},[133,142069,142070],{"className":257,"code":132848,"language":259,"meta":138,"style":138},[140,142071,142072,142076,142090,142094,142108,142112,142126,142130,142144,142148],{"__ignoreMap":138},[143,142073,142074],{"class":145,"line":146},[143,142075,132855],{"class":266},[143,142077,142078,142080,142082,142084,142086,142088],{"class":145,"line":35},[143,142079,132860],{"class":156},[143,142081,80685],{"class":149},[143,142083,129781],{"class":280},[143,142085,284],{"class":149},[143,142087,132869],{"class":280},[143,142089,130351],{"class":149},[143,142091,142092],{"class":145,"line":46},[143,142093,132876],{"class":266},[143,142095,142096,142098,142100,142102,142104,142106],{"class":145,"line":293},[143,142097,132881],{"class":156},[143,142099,80685],{"class":149},[143,142101,129781],{"class":280},[143,142103,284],{"class":149},[143,142105,55649],{"class":280},[143,142107,130351],{"class":149},[143,142109,142110],{"class":145,"line":306},[143,142111,132896],{"class":266},[143,142113,142114,142116,142118,142120,142122,142124],{"class":145,"line":319},[143,142115,132901],{"class":156},[143,142117,80685],{"class":149},[143,142119,129781],{"class":280},[143,142121,284],{"class":149},[143,142123,55716],{"class":280},[143,142125,130351],{"class":149},[143,142127,142128],{"class":145,"line":332},[143,142129,132916],{"class":266},[143,142131,142132,142134,142136,142138,142140,142142],{"class":145,"line":345},[143,142133,132921],{"class":156},[143,142135,80685],{"class":149},[143,142137,129781],{"class":280},[143,142139,284],{"class":149},[143,142141,87111],{"class":280},[143,142143,130351],{"class":149},[143,142145,142146],{"class":145,"line":701},[143,142147,132936],{"class":266},[143,142149,142150,142152,142154,142156,142158,142160],{"class":145,"line":707},[143,142151,132941],{"class":156},[143,142153,80685],{"class":149},[143,142155,129781],{"class":280},[143,142157,284],{"class":149},[143,142159,132950],{"class":280},[143,142161,130351],{"class":149},[232,142163,142164,142175],{},[22,142165,142166,142167,142170,142171,101894,142173],{},"1 号盒子左侧浮动 ",[140,142168,142169],{},"sk_list"," 里面包含 ",[140,142172,232],{},[140,142174,22],{},[22,142176,142177,142178,142170,142181,101894,142183],{},"2 号盒子左侧浮动 ",[140,142179,142180],{},"sk_con",[140,142182,232],{},[140,142184,22],{},[63,142186,131],{},[133,142188,142189],{"className":257,"code":140077,"language":259,"meta":138,"style":138},[140,142190,142191,142197,142207],{"__ignoreMap":138},[143,142192,142193,142195],{"class":145,"line":146},[143,142194,131268],{"class":156},[143,142196,275],{"class":149},[143,142198,142199,142201,142203,142205],{"class":145,"line":35},[143,142200,131896],{"class":280},[143,142202,284],{"class":149},[143,142204,24634],{"class":280},[143,142206,290],{"class":149},[143,142208,142209],{"class":145,"line":46},[143,142210,348],{"class":149},[63,142212,186],{},[133,142214,142215],{"className":257,"code":140077,"language":259,"meta":138,"style":138},[140,142216,142217,142223,142233],{"__ignoreMap":138},[143,142218,142219,142221],{"class":145,"line":146},[143,142220,131268],{"class":156},[143,142222,275],{"class":149},[143,142224,142225,142227,142229,142231],{"class":145,"line":35},[143,142226,131896],{"class":280},[143,142228,284],{"class":149},[143,142230,24634],{"class":280},[143,142232,290],{"class":149},[143,142234,142235],{"class":145,"line":46},[143,142236,348],{"class":149},[58,142238,142240,142241],{"id":142239},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[140,142242,142243],{},"sk_container",[29,142245],{"style":31,"src":142246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[232,142248,142249,142254],{},[22,142250,141429,142251,142253],{},[140,142252,142243],{}," 给宽度 1200，不要给高度",[22,142255,142256],{},"一定不要忘记清除浮动",[63,142258,131],{},[133,142260,142261],{"className":257,"code":140077,"language":259,"meta":138,"style":138},[140,142262,142263,142269,142279],{"__ignoreMap":138},[143,142264,142265,142267],{"class":145,"line":146},[143,142266,131268],{"class":156},[143,142268,275],{"class":149},[143,142270,142271,142273,142275,142277],{"class":145,"line":35},[143,142272,131896],{"class":280},[143,142274,284],{"class":149},[143,142276,24634],{"class":280},[143,142278,290],{"class":149},[143,142280,142281],{"class":145,"line":46},[143,142282,348],{"class":149},[19,142284,142285],{},[22,142286,142287],{},"sk_hd制作",[232,142289,142290],{},[22,142291,141509,142292,142295],{},[140,142293,142294],{},"sk_hd"," ，插入图片即可",[63,142297,131],{},[133,142299,142300],{"className":135,"code":136,"language":137,"meta":138,"style":138},[140,142301,142302],{"__ignoreMap":138},[143,142303,142304,142306,142308,142310,142312,142314,142316,142318,142320,142322,142324,142326],{"class":145,"line":146},[143,142305,150],{"class":149},[143,142307,29],{"class":153},[143,142309,157],{"class":156},[143,142311,160],{"class":149},[143,142313,164],{"class":163},[143,142315,167],{"class":156},[143,142317,160],{"class":149},[143,142319,172],{"class":163},[143,142321,175],{"class":156},[143,142323,160],{"class":149},[143,142325,180],{"class":163},[143,142327,183],{"class":149},[19,142329,142330],{"start":35},[22,142331,142332],{},"sk_bd制作",[232,142334,142335],{},[22,142336,142337,142338,142341,142342,101894,142344,142346],{},"3 号盒子 ",[140,142339,142340],{},"sk_bd"," ，里面包含很多的 ",[140,142343,232],{},[140,142345,22],{},[232,142347,142348,142357],{},[22,142349,142350,142351,142353,142354,142356],{},"当鼠标移入到 ",[140,142352,22],{}," 上面的时候显示红色的边框，在这里先给 ",[140,142355,22],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[22,142358,142359,142360,142362,142363,142365,142366,142369,142370,142372],{},"由于给每个 ",[140,142361,22],{}," 都设置了外边距，导致一行的最后一个 ",[140,142364,22],{}," 掉了下来，在这里我们利用 ",[140,142367,142368],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[140,142371,22],{},"，去掉外边距就好了",[63,142374,131],{},[133,142376,142377],{"className":257,"code":139596,"language":259,"meta":138,"style":138},[140,142378,142379,142385,142397],{"__ignoreMap":138},[143,142380,142381,142383],{"class":145,"line":146},[143,142382,614],{"class":153},[143,142384,275],{"class":149},[143,142386,142387,142389,142391,142393,142395],{"class":145,"line":35},[143,142388,71350],{"class":280},[143,142390,284],{"class":149},[143,142392,1234],{"class":280},[143,142394,52448],{"class":280},[143,142396,290],{"class":149},[143,142398,142399],{"class":145,"line":46},[143,142400,348],{"class":149},[63,142402,186],{},[133,142404,142405],{"className":257,"code":139596,"language":259,"meta":138,"style":138},[140,142406,142407,142413,142425],{"__ignoreMap":138},[143,142408,142409,142411],{"class":145,"line":146},[143,142410,614],{"class":153},[143,142412,275],{"class":149},[143,142414,142415,142417,142419,142421,142423],{"class":145,"line":35},[143,142416,71350],{"class":280},[143,142418,284],{"class":149},[143,142420,1234],{"class":280},[143,142422,52448],{"class":280},[143,142424,290],{"class":149},[143,142426,142427],{"class":145,"line":46},[143,142428,348],{"class":149},[14,142430,142432],{"id":142431},"_163-注册页面制作","16.3 注册页面制作",[29,142434],{"style":31,"src":142435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[63,142437,142438,142440],{},[25,142439,9925],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[29,142442],{"style":31,"src":142443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[58,142445,142447],{"id":142446},"_1631-准备工作","16.3.1 准备工作",[232,142449,142450,142453],{},[22,142451,142452],{},"创建register.html，引入 base.css，引入favicon图标",[22,142454,142455],{},"创建register.css ，在html页面进行引入",[58,142457,142459,142460,142462],{"id":142458},"_1632-header-头部实现","16.3.2 ",[140,142461,132421],{}," 头部实现",[232,142464,142465,142468],{},[22,142466,142467],{},"整个内容用 版心 进行包裹",[22,142469,142470],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[63,142472,131],{},[133,142474,142475],{"className":135,"code":136,"language":137,"meta":138,"style":138},[140,142476,142477],{"__ignoreMap":138},[143,142478,142479,142481,142483,142485,142487,142489,142491,142493,142495,142497,142499,142501],{"class":145,"line":146},[143,142480,150],{"class":149},[143,142482,29],{"class":153},[143,142484,157],{"class":156},[143,142486,160],{"class":149},[143,142488,164],{"class":163},[143,142490,167],{"class":156},[143,142492,160],{"class":149},[143,142494,172],{"class":163},[143,142496,175],{"class":156},[143,142498,160],{"class":149},[143,142500,180],{"class":163},[143,142502,183],{"class":149},[63,142504,186],{},[133,142506,142507],{"className":135,"code":136,"language":137,"meta":138,"style":138},[140,142508,142509],{"__ignoreMap":138},[143,142510,142511,142513,142515,142517,142519,142521,142523,142525,142527,142529,142531,142533],{"class":145,"line":146},[143,142512,150],{"class":149},[143,142514,29],{"class":153},[143,142516,157],{"class":156},[143,142518,160],{"class":149},[143,142520,164],{"class":163},[143,142522,167],{"class":156},[143,142524,160],{"class":149},[143,142526,172],{"class":163},[143,142528,175],{"class":156},[143,142530,160],{"class":149},[143,142532,180],{"class":163},[143,142534,183],{"class":149},[58,142536,142538,142539,142542],{"id":142537},"_1633-registerarea-主体模块实现","16.3.3 ",[140,142540,142541],{},"registerarea"," 主体模块实现",[29,142544],{"style":31,"src":142545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[63,142547,142548],{},"整个大盒子 高度为 522px，设置4个边框",[63,142550,131],{},[133,142552,142553],{"className":257,"code":131573,"language":259,"meta":138,"style":138},[140,142554,142555,142561,142577],{"__ignoreMap":138},[143,142556,142557,142559],{"class":145,"line":146},[143,142558,614],{"class":153},[143,142560,275],{"class":149},[143,142562,142563,142565,142567,142569,142571,142573,142575],{"class":145,"line":35},[143,142564,766],{"class":280},[143,142566,284],{"class":149},[143,142568,771],{"class":280},[143,142570,774],{"class":755},[143,142572,777],{"class":280},[143,142574,130813],{"class":280},[143,142576,290],{"class":149},[143,142578,142579],{"class":145,"line":46},[143,142580,348],{"class":149},[63,142582,186],{},[133,142584,142585],{"className":257,"code":131573,"language":259,"meta":138,"style":138},[140,142586,142587,142593,142609],{"__ignoreMap":138},[143,142588,142589,142591],{"class":145,"line":146},[143,142590,614],{"class":153},[143,142592,275],{"class":149},[143,142594,142595,142597,142599,142601,142603,142605,142607],{"class":145,"line":35},[143,142596,766],{"class":280},[143,142598,284],{"class":149},[143,142600,771],{"class":280},[143,142602,774],{"class":755},[143,142604,777],{"class":280},[143,142606,130813],{"class":280},[143,142608,290],{"class":149},[143,142610,142611],{"class":145,"line":46},[143,142612,348],{"class":149},[63,142614,142615],{},"1号盒子 是一个 h3 标签，放标题",[232,142617,142618],{},[22,142619,142620],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[63,142622,131],{},[133,142624,142625],{"className":257,"code":140077,"language":259,"meta":138,"style":138},[140,142626,142627,142633,142643],{"__ignoreMap":138},[143,142628,142629,142631],{"class":145,"line":146},[143,142630,131268],{"class":156},[143,142632,275],{"class":149},[143,142634,142635,142637,142639,142641],{"class":145,"line":35},[143,142636,131896],{"class":280},[143,142638,284],{"class":149},[143,142640,24634],{"class":280},[143,142642,290],{"class":149},[143,142644,142645],{"class":145,"line":46},[143,142646,348],{"class":149},[63,142648,186],{},[133,142650,142651],{"className":257,"code":140077,"language":259,"meta":138,"style":138},[140,142652,142653,142659,142669],{"__ignoreMap":138},[143,142654,142655,142657],{"class":145,"line":146},[143,142656,131268],{"class":156},[143,142658,275],{"class":149},[143,142660,142661,142663,142665,142667],{"class":145,"line":35},[143,142662,131896],{"class":280},[143,142664,284],{"class":149},[143,142666,24634],{"class":280},[143,142668,290],{"class":149},[143,142670,142671],{"class":145,"line":46},[143,142672,348],{"class":149},[63,142674,142675],{},"2号盒子 里面放注册的内容",[232,142677,142678,142681,142690,142704,142717,142720,142723,142741,142755],{},[22,142679,142680],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[22,142682,142683,142684,142686,142687,142689],{},"里面的内容利用 ",[140,142685,232],{}," 包含 ",[140,142688,22],{}," 来实现的（不需要用表格）",[22,142691,139921,142692,142694,142695,142697,142698,142700,142701,142703],{},[140,142693,22],{}," 里面，左侧放 ",[140,142696,34506],{}," 标签， 中间放",[140,142699,746],{}," 标签， 右侧放 ",[140,142702,143],{}," 提示信息",[22,142705,142706,142707,142709,142710,142712,142713,142716],{},"左侧 ",[140,142708,34506],{},"里面的文字都是右对齐，我们可以给",[140,142711,34506],{},"设置一个宽度（88px），然后利用",[140,142714,142715],{},"text-align"," 来设置右对齐",[22,142718,142719],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[22,142721,142722],{},"右侧 span修饰一下文字颜色",[22,142724,142725,142726],{},"提示信息的样式优化",[232,142727,142728,142731,142734],{},[22,142729,142730],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[22,142732,142733],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[22,142735,142736,142737,142740],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[140,142738,142739],{},"vertical-algin"," 来设置 图片与文字对齐方式",[22,142742,142743,142744],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[232,142745,142746,142752],{},[22,142747,142748,142749,142751],{},"设置 ",[140,142750,24451],{}," 的 左右 12px 的内边距，设置一下文字颜色",[22,142753,142754],{},"分别设置 背景颜色",[22,142756,142757,142758,142760],{},"同意协议 和 完成注册 都是用 ",[140,142759,22],{}," 进行包裹",[63,142762,131],{},[133,142764,142765],{"className":257,"code":141348,"language":259,"meta":138,"style":138},[140,142766,142767,142773,142783],{"__ignoreMap":138},[143,142768,142769,142771],{"class":145,"line":146},[143,142770,614],{"class":153},[143,142772,275],{"class":149},[143,142774,142775,142777,142779,142781],{"class":145,"line":35},[143,142776,71758],{"class":280},[143,142778,284],{"class":149},[143,142780,141365],{"class":280},[143,142782,290],{"class":149},[143,142784,142785],{"class":145,"line":46},[143,142786,348],{"class":149},[63,142788,186],{},[133,142790,142791],{"className":257,"code":141348,"language":259,"meta":138,"style":138},[140,142792,142793,142799,142809],{"__ignoreMap":138},[143,142794,142795,142797],{"class":145,"line":146},[143,142796,614],{"class":153},[143,142798,275],{"class":149},[143,142800,142801,142803,142805,142807],{"class":145,"line":35},[143,142802,71758],{"class":280},[143,142804,284],{"class":149},[143,142806,141365],{"class":280},[143,142808,290],{"class":149},[143,142810,142811],{"class":145,"line":46},[143,142812,348],{"class":149},[58,142814,142816],{"id":142815},"_1634-底部实现","16.3.4 底部实现",[63,142818,131],{},[133,142820,142821],{"className":257,"code":141348,"language":259,"meta":138,"style":138},[140,142822,142823,142829,142839],{"__ignoreMap":138},[143,142824,142825,142827],{"class":145,"line":146},[143,142826,614],{"class":153},[143,142828,275],{"class":149},[143,142830,142831,142833,142835,142837],{"class":145,"line":35},[143,142832,71758],{"class":280},[143,142834,284],{"class":149},[143,142836,141365],{"class":280},[143,142838,290],{"class":149},[143,142840,142841],{"class":145,"line":46},[143,142842,348],{"class":149},[63,142844,186],{},[133,142846,142847],{"className":135,"code":917,"language":137,"meta":138,"style":138},[140,142848,142849,142853,142867,142871],{"__ignoreMap":138},[143,142850,142851],{"class":145,"line":146},[143,142852,924],{"class":266},[143,142854,142855,142857,142859,142861,142863,142865],{"class":145,"line":35},[143,142856,150],{"class":149},[143,142858,614],{"class":153},[143,142860,617],{"class":156},[143,142862,160],{"class":149},[143,142864,937],{"class":163},[143,142866,183],{"class":149},[143,142868,142869],{"class":145,"line":46},[143,142870,944],{"class":149},[143,142872,142873,142875,142877],{"class":145,"line":293},[143,142874,730],{"class":149},[143,142876,614],{"class":153},[143,142878,183],{"class":149},[14,142880,142882],{"id":142881},"_164-项目总结","16.4 项目总结",[19,142884,142885,142888,142891,142894],{},[22,142886,142887],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[22,142889,142890],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[22,142892,142893],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[22,142895,142896],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[29,142898],{"style":31,"src":142899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[19,142901,142902],{"start":306},[22,142903,142904],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[29,142906],{"style":31,"src":142907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[19,142909,142910],{"start":319},[22,142911,142912],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[29,142914],{"style":31,"src":142915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[133,142917,142918],{"className":135,"code":137567,"language":137,"meta":138,"style":138},[140,142919,142920],{"__ignoreMap":138},[143,142921,142922,142924,142926,142928,142930,142932,142934,142936,142938,142940,142942,142944],{"class":145,"line":146},[143,142923,150],{"class":149},[143,142925,746],{"class":153},[143,142927,54709],{"class":156},[143,142929,160],{"class":149},[143,142931,758],{"class":163},[143,142933,15819],{"class":156},[143,142935,160],{"class":149},[143,142937,137588],{"class":163},[143,142939,61903],{"class":156},[143,142941,160],{"class":149},[143,142943,137595],{"class":163},[143,142945,183],{"class":149},[19,142947,142948,142951],{"start":332},[22,142949,142950],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[22,142952,142953],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[954,142955,142956],{},"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":138,"searchDepth":35,"depth":35,"links":142958},[142959,142964,142971,142979],{"id":140587,"depth":35,"text":140588,"children":142960},[142961,142962,142963],{"id":140591,"depth":46,"text":140592},{"id":141320,"depth":46,"text":141321},{"id":141633,"depth":46,"text":141634},{"id":141933,"depth":35,"text":141934,"children":142965},[142966,142967,142969],{"id":141937,"depth":46,"text":141938},{"id":141955,"depth":46,"text":142968},"16.2.2 列表页 header 和 nav 修改",{"id":142239,"depth":46,"text":142970},"16.2.3 列表页主体 sk_container",{"id":142431,"depth":35,"text":142432,"children":142972},[142973,142974,142976,142978],{"id":142446,"depth":46,"text":142447},{"id":142458,"depth":46,"text":142975},"16.3.2 header 头部实现",{"id":142537,"depth":46,"text":142977},"16.3.3 registerarea 主体模块实现",{"id":142815,"depth":46,"text":142816},{"id":142881,"depth":35,"text":142882},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140579,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142986,"title":142987,"body":142988,"description":973,"extension":974,"meta":143096,"navigation":976,"path":143097,"seo":143098,"stem":143099,"__hash__":143100},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142989,"toc":143091},[142990,142993,142997,143000,143003,143012,143021,143025,143030,143037,143055,143058,143061,143064,143067,143070,143073,143076,143079,143082,143085,143088],[10,142991,142987],{"id":142992},"_17-web服务器与网站发布",[14,142994,142996],{"id":142995},"_171-web服务器","17.1 Web服务器",[63,142998,142999],{},"把自己网站上传到服务器上，可以让其他人访问",[29,143001],{"style":31,"src":143002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[63,143004,143005,143008,143009],{},[25,143006,143007],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[25,143010,143011],{},"Web 服务器等",[63,143013,143014,143015,101894,143018,26638],{},"根据服务器在网络中所在的位置不同，又可分为 ",[25,143016,143017],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[25,143019,143020],{},"远程服务器",[58,143022,143024],{"id":143023},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[63,143026,143027],{},[25,143028,143029],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[63,143031,143032,143033],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[67,143034,143035],{"href":143035,"rel":143036},"http:\u002F\u002Ffree.3v.do\u002F",[71],[232,143038,143039,143042,143045,143052],{},[22,143040,143041],{},"去免费空间网站注册账号。",[22,143043,143044],{},"记录下主机名、用户名、密码、域名。",[22,143046,143047,143048,143051],{},"利用 ",[140,143049,143050],{},"utftp"," 软件 上传网站到远程服务器",[22,143053,143054],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[63,143056,143057],{},"使用软件上传，对上传软件文件进行解压",[29,143059],{"style":31,"src":143060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[29,143062],{"style":31,"src":143063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[63,143065,143066],{},"输入刚刚申请的服务器账号信息：",[29,143068],{"style":31,"src":143069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[29,143071],{"style":31,"src":143072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[29,143074],{"style":31,"src":143075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[29,143077],{"style":31,"src":143078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[63,143080,143081],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[29,143083],{"style":31,"src":143084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[63,143086,143087],{},"浏览器输入域名即可访问",[63,143089,143090],{},"首页一定必须是index",{"title":138,"searchDepth":35,"depth":35,"links":143092},[143093],{"id":142995,"depth":35,"text":142996,"children":143094},[143095],{"id":143023,"depth":46,"text":143024},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142987,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143102,"title":143103,"body":143104,"description":973,"extension":974,"meta":144031,"navigation":976,"path":144032,"seo":144033,"stem":144034,"__hash__":144035},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143105,"toc":144014},[143106,143109,143113,143116,143119,143130,143133,143137,143141,143146,143149,143152,143155,143158,143162,143188,143192,143196,143199,143202,143206,143239,143243,143246,143249,143313,143317,143321,143324,143327,143330,143334,143379,143383,143386,143416,143420,143424,143427,143430,143434,143437,143506,143509,143617,143619,143625,143629,143632,143635,143731,143734,143738,143762,143766,143769,143773,143776,143780,143783,143786,143789,143792,143796,143799,143802,143806,143810,143813,143816,143819,143822,143826,143829,143833,143836,143839,143884,143888,143892,143895,143898,143901,143933,143937,143940,143974,143978,143981,144011],[10,143107,143103],{"id":143108},"_18-2d动画与3d转换",[14,143110,143112],{"id":143111},"_181-css3-2d转换","18.1 CSS3 2D转换",[63,143114,143115],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[63,143117,143118],{},"转换（transform）你可以简单理解为变形",[232,143120,143121,143124,143127],{},[22,143122,143123],{},"移动：translate",[22,143125,143126],{},"旋转：rotate",[22,143128,143129],{},"缩放：scale",[29,143131],{"style":31,"src":143132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[58,143134,143136],{"id":143135},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22896,143138,143140],{"id":143139},"_18111-translate介绍","18.1.1.1 translate介绍",[63,143142,143143,143144],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[25,143145,134075],{},[29,143147],{"style":31,"src":143148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[63,143150,143151],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[63,143153,143154],{},"对于行内元素无效",[63,143156,143157],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22896,143159,143161],{"id":143160},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[133,143163,143164],{"className":257,"code":139596,"language":259,"meta":138,"style":138},[140,143165,143166,143172,143184],{"__ignoreMap":138},[143,143167,143168,143170],{"class":145,"line":146},[143,143169,614],{"class":153},[143,143171,275],{"class":149},[143,143173,143174,143176,143178,143180,143182],{"class":145,"line":35},[143,143175,71350],{"class":280},[143,143177,284],{"class":149},[143,143179,1234],{"class":280},[143,143181,52448],{"class":280},[143,143183,290],{"class":149},[143,143185,143186],{"class":145,"line":46},[143,143187,348],{"class":149},[58,143189,143191],{"id":143190},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22896,143193,143195],{"id":143194},"_18121-rotate介绍","18.1.2.1 rotate介绍",[63,143197,143198],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[29,143200],{"style":31,"src":143201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22896,143203,143205],{"id":143204},"_18122-旋转效果","18.1.2.2 旋转效果",[133,143207,143209],{"className":257,"code":143208,"language":259,"meta":138,"style":138},"div {\n  transform: rotate(45deg);\n}\n",[140,143210,143211,143217,143235],{"__ignoreMap":138},[143,143212,143213,143215],{"class":145,"line":146},[143,143214,614],{"class":153},[143,143216,275],{"class":149},[143,143218,143219,143221,143223,143226,143228,143230,143233],{"class":145,"line":35},[143,143220,137394],{"class":280},[143,143222,284],{"class":149},[143,143224,143225],{"class":280},"rotate",[143,143227,1049],{"class":149},[143,143229,1570],{"class":280},[143,143231,143232],{"class":755},"deg",[143,143234,3619],{"class":149},[143,143236,143237],{"class":145,"line":46},[143,143238,348],{"class":149},[22896,143240,143242],{"id":143241},"_18123-三角做法","18.1.2.3 三角做法",[63,143244,143245],{},"该下标当经过最外层大盒子时会实现向上反转",[29,143247],{"style":31,"src":143248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[133,143250,143251],{"className":257,"code":135931,"language":259,"meta":138,"style":138},[140,143252,143253,143257,143263,143273,143283,143299,143309],{"__ignoreMap":138},[143,143254,143255],{"class":145,"line":146},[143,143256,135938],{"class":266},[143,143258,143259,143261],{"class":145,"line":35},[143,143260,135943],{"class":156},[143,143262,275],{"class":149},[143,143264,143265,143267,143269,143271],{"class":145,"line":46},[143,143266,71448],{"class":280},[143,143268,284],{"class":149},[143,143270,1234],{"class":280},[143,143272,290],{"class":149},[143,143274,143275,143277,143279,143281],{"class":145,"line":293},[143,143276,71668],{"class":280},[143,143278,284],{"class":149},[143,143280,1234],{"class":280},[143,143282,290],{"class":149},[143,143284,143285,143287,143289,143291,143293,143295,143297],{"class":145,"line":306},[143,143286,766],{"class":280},[143,143288,284],{"class":149},[143,143290,1487],{"class":280},[143,143292,774],{"class":755},[143,143294,777],{"class":280},[143,143296,64873],{"class":280},[143,143298,290],{"class":149},[143,143300,143301,143303,143305,143307],{"class":145,"line":319},[143,143302,135986],{"class":280},[143,143304,284],{"class":149},[143,143306,63252],{"class":280},[143,143308,290],{"class":149},[143,143310,143311],{"class":145,"line":332},[143,143312,348],{"class":149},[58,143314,143316],{"id":143315},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22896,143318,143320],{"id":143319},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[63,143322,143323],{},"设置中心点",[29,143325],{"style":31,"src":143326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[63,143328,143329],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22896,143331,143333],{"id":143332},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[133,143335,143337],{"className":257,"code":143336,"language":259,"meta":138,"style":138},"\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",[140,143338,143339,143344,143350,143365,143370,143375],{"__ignoreMap":138},[143,143340,143341],{"class":145,"line":146},[143,143342,143343],{"class":266},"\u002F* 转换中心点 *\u002F\n",[143,143345,143346,143348],{"class":145,"line":35},[143,143347,614],{"class":153},[143,143349,275],{"class":149},[143,143351,143352,143355,143357,143359,143361,143363],{"class":145,"line":46},[143,143353,143354],{"class":280},"  transform-origin",[143,143356,284],{"class":149},[143,143358,327],{"class":280},[143,143360,18042],{"class":280},[143,143362,131283],{"class":149},[143,143364,136084],{"class":266},[143,143366,143367],{"class":145,"line":293},[143,143368,143369],{"class":266},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[143,143371,143372],{"class":145,"line":306},[143,143373,143374],{"class":266},"  \u002F* transform-origin: left top; *\u002F\n",[143,143376,143377],{"class":145,"line":319},[143,143378,348],{"class":149},[22896,143380,143382],{"id":143381},"_18133-旋转案例","18.1.3.3 旋转案例",[29,143384],{"style":31,"src":143385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[133,143387,143388],{"className":257,"code":143208,"language":259,"meta":138,"style":138},[140,143389,143390,143396,143412],{"__ignoreMap":138},[143,143391,143392,143394],{"class":145,"line":146},[143,143393,614],{"class":153},[143,143395,275],{"class":149},[143,143397,143398,143400,143402,143404,143406,143408,143410],{"class":145,"line":35},[143,143399,137394],{"class":280},[143,143401,284],{"class":149},[143,143403,143225],{"class":280},[143,143405,1049],{"class":149},[143,143407,1570],{"class":280},[143,143409,143232],{"class":755},[143,143411,3619],{"class":149},[143,143413,143414],{"class":145,"line":46},[143,143415,348],{"class":149},[58,143417,143419],{"id":143418},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22896,143421,143423],{"id":143422},"_18141-scale介绍","18.1.4.1 scale介绍",[63,143425,143426],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[29,143428],{"style":31,"src":143429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22896,143431,143433],{"id":143432},"_18142-分页按钮","18.1.4.2 分页按钮",[29,143435],{"style":31,"src":143436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[133,143438,143440],{"className":257,"code":143439,"language":259,"meta":138,"style":138},"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",[140,143441,143442,143448,143464,143468,143472,143477,143483,143497,143502],{"__ignoreMap":138},[143,143443,143444,143446],{"class":145,"line":146},[143,143445,614],{"class":153},[143,143447,275],{"class":149},[143,143449,143450,143452,143454,143457,143459,143462],{"class":145,"line":35},[143,143451,137394],{"class":280},[143,143453,284],{"class":149},[143,143455,143456],{"class":280},"scale",[143,143458,1049],{"class":149},[143,143460,143461],{"class":280},"1.2",[143,143463,3619],{"class":149},[143,143465,143466],{"class":145,"line":46},[143,143467,348],{"class":149},[143,143469,143470],{"class":145,"line":293},[143,143471,136871],{"class":149},[143,143473,143474],{"class":145,"line":306},[143,143475,143476],{"class":266},"\u002F* 2D 缩放 *\u002F\n",[143,143478,143479,143481],{"class":145,"line":319},[143,143480,614],{"class":153},[143,143482,275],{"class":149},[143,143484,143485,143487,143489,143491,143493,143495],{"class":145,"line":332},[143,143486,137394],{"class":280},[143,143488,284],{"class":149},[143,143490,143456],{"class":280},[143,143492,1049],{"class":149},[143,143494,143461],{"class":280},[143,143496,3619],{"class":149},[143,143498,143499],{"class":145,"line":345},[143,143500,143501],{"class":266},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[143,143503,143504],{"class":145,"line":701},[143,143505,348],{"class":149},[63,143507,143508],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[133,143510,143512],{"className":257,"code":143511,"language":259,"meta":138,"style":138},"\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",[140,143513,143514,143519,143529,143550,143571,143575,143580,143586,143613],{"__ignoreMap":138},[143,143515,143516],{"class":145,"line":146},[143,143517,143518],{"class":266},"\u002F* 定义动画 *\u002F\n",[143,143520,143521,143524,143527],{"class":145,"line":35},[143,143522,143523],{"class":755},"@keyframes",[143,143525,143526],{"class":6116}," move",[143,143528,275],{"class":149},[143,143530,143531,143534,143536,143538,143540,143543,143545,143547],{"class":145,"line":46},[143,143532,143533],{"class":156},"  0%",[143,143535,80685],{"class":149},[143,143537,49032],{"class":280},[143,143539,284],{"class":149},[143,143541,143542],{"class":280},"translateX",[143,143544,1049],{"class":149},[143,143546,1234],{"class":280},[143,143548,143549],{"class":149},"); }\n",[143,143551,143552,143555,143557,143559,143561,143563,143565,143567,143569],{"class":145,"line":293},[143,143553,143554],{"class":156},"  100%",[143,143556,80685],{"class":149},[143,143558,49032],{"class":280},[143,143560,284],{"class":149},[143,143562,143542],{"class":280},[143,143564,1049],{"class":149},[143,143566,1352],{"class":280},[143,143568,774],{"class":755},[143,143570,143549],{"class":149},[143,143572,143573],{"class":145,"line":306},[143,143574,348],{"class":149},[143,143576,143577],{"class":145,"line":319},[143,143578,143579],{"class":266},"\u002F* 调用动画 *\u002F\n",[143,143581,143582,143584],{"class":145,"line":332},[143,143583,614],{"class":153},[143,143585,275],{"class":149},[143,143587,143588,143591,143593,143595,143597,143599,143601,143603,143605,143608,143611],{"class":145,"line":345},[143,143589,143590],{"class":280},"  animation",[143,143592,284],{"class":149},[143,143594,136097],{"class":280},[143,143596,26016],{"class":280},[143,143598,1736],{"class":755},[143,143600,79558],{"class":280},[143,143602,4993],{"class":280},[143,143604,1736],{"class":755},[143,143606,143607],{"class":280}," infinite",[143,143609,143610],{"class":280}," alternate",[143,143612,290],{"class":149},[143,143614,143615],{"class":145,"line":701},[143,143616,348],{"class":149},[63,143618,143508],{},[133,143620,143623],{"className":143621,"code":143622,"language":6087},[6085],"\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",[140,143624,143622],{"__ignoreMap":138},[22896,143626,143628],{"id":143627},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[63,143630,143631],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[29,143633],{"style":31,"src":143634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[133,143636,143637],{"className":257,"code":143511,"language":259,"meta":138,"style":138},[140,143638,143639,143643,143651,143669,143689,143693,143697,143703,143727],{"__ignoreMap":138},[143,143640,143641],{"class":145,"line":146},[143,143642,143518],{"class":266},[143,143644,143645,143647,143649],{"class":145,"line":35},[143,143646,143523],{"class":755},[143,143648,143526],{"class":6116},[143,143650,275],{"class":149},[143,143652,143653,143655,143657,143659,143661,143663,143665,143667],{"class":145,"line":46},[143,143654,143533],{"class":156},[143,143656,80685],{"class":149},[143,143658,49032],{"class":280},[143,143660,284],{"class":149},[143,143662,143542],{"class":280},[143,143664,1049],{"class":149},[143,143666,1234],{"class":280},[143,143668,143549],{"class":149},[143,143670,143671,143673,143675,143677,143679,143681,143683,143685,143687],{"class":145,"line":293},[143,143672,143554],{"class":156},[143,143674,80685],{"class":149},[143,143676,49032],{"class":280},[143,143678,284],{"class":149},[143,143680,143542],{"class":280},[143,143682,1049],{"class":149},[143,143684,1352],{"class":280},[143,143686,774],{"class":755},[143,143688,143549],{"class":149},[143,143690,143691],{"class":145,"line":306},[143,143692,348],{"class":149},[143,143694,143695],{"class":145,"line":319},[143,143696,143579],{"class":266},[143,143698,143699,143701],{"class":145,"line":332},[143,143700,614],{"class":153},[143,143702,275],{"class":149},[143,143704,143705,143707,143709,143711,143713,143715,143717,143719,143721,143723,143725],{"class":145,"line":345},[143,143706,143590],{"class":280},[143,143708,284],{"class":149},[143,143710,136097],{"class":280},[143,143712,26016],{"class":280},[143,143714,1736],{"class":755},[143,143716,79558],{"class":280},[143,143718,4993],{"class":280},[143,143720,1736],{"class":755},[143,143722,143607],{"class":280},[143,143724,143610],{"class":280},[143,143726,290],{"class":149},[143,143728,143729],{"class":145,"line":701},[143,143730,348],{"class":149},[63,143732,143733],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[58,143735,143737],{"id":143736},"_1823-知识点回顾","18.2.3 知识点回顾",[133,143739,143740],{"className":257,"code":129590,"language":259,"meta":138,"style":138},[140,143741,143742,143748,143758],{"__ignoreMap":138},[143,143743,143744,143746],{"class":145,"line":146},[143,143745,614],{"class":153},[143,143747,275],{"class":149},[143,143749,143750,143752,143754,143756],{"class":145,"line":35},[143,143751,129603],{"class":280},[143,143753,284],{"class":149},[143,143755,62619],{"class":280},[143,143757,290],{"class":149},[143,143759,143760],{"class":145,"line":46},[143,143761,348],{"class":149},[14,143763,143765],{"id":143764},"_183-3d-转换","18.3 3D 转换",[63,143767,143768],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[58,143770,143772],{"id":143771},"_1831-坐标轴认识","18.3.1 坐标轴认识",[29,143774],{"style":31,"src":143775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[58,143777,143779],{"id":143778},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[29,143781],{"style":31,"src":143782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[63,143784,143785],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[63,143787,143788],{},"translate3d的效果需要搭配透视perspective来使用",[29,143790],{"style":31,"src":143791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[58,143793,143795],{"id":143794},"_1833-透视-perspective","18.3.3 透视 perspective",[29,143797],{"style":31,"src":143798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[63,143800,143801],{},"透视写在父盒子上，单位为像素",[58,143803,143805],{"id":143804},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22896,143807,143809],{"id":143808},"_18341-分开解释","18.3.4.1 分开解释",[29,143811],{"style":31,"src":143812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[29,143814],{"style":31,"src":143815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[29,143817],{"style":31,"src":143818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[63,143820,143821],{},"总结来说就是左手原则",[22896,143823,143825],{"id":143824},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[29,143827],{"style":31,"src":143828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[58,143830,143832],{"id":143831},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[29,143834],{"style":31,"src":143835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[29,143837],{"style":31,"src":143838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[133,143840,143842],{"className":257,"code":143841,"language":259,"meta":138,"style":138},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[140,143843,143844,143850,143863,143880],{"__ignoreMap":138},[143,143845,143846,143848],{"class":145,"line":146},[143,143847,614],{"class":153},[143,143849,275],{"class":149},[143,143851,143852,143855,143857,143859,143861],{"class":145,"line":35},[143,143853,143854],{"class":280},"  perspective",[143,143856,284],{"class":149},[143,143858,65956],{"class":280},[143,143860,774],{"class":755},[143,143862,290],{"class":149},[143,143864,143865,143867,143869,143872,143874,143876,143878],{"class":145,"line":46},[143,143866,137394],{"class":280},[143,143868,284],{"class":149},[143,143870,143871],{"class":280},"rotateX",[143,143873,1049],{"class":149},[143,143875,1570],{"class":280},[143,143877,143232],{"class":755},[143,143879,3619],{"class":149},[143,143881,143882],{"class":145,"line":293},[143,143883,348],{"class":149},[58,143885,143887],{"id":143886},"_1836-案例","18.3.6 案例",[22896,143889,143891],{"id":143890},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[29,143893],{"style":31,"src":143894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[29,143896],{"style":31,"src":143897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[29,143899],{"style":31,"src":143900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[133,143902,143904],{"className":257,"code":143903,"language":259,"meta":138,"style":138},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[140,143905,143906,143911,143917,143929],{"__ignoreMap":138},[143,143907,143908],{"class":145,"line":146},[143,143909,143910],{"class":266},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[143,143912,143913,143915],{"class":145,"line":35},[143,143914,134413],{"class":156},[143,143916,275],{"class":149},[143,143918,143919,143921,143923,143925,143927],{"class":145,"line":46},[143,143920,143854],{"class":280},[143,143922,284],{"class":149},[143,143924,65956],{"class":280},[143,143926,774],{"class":755},[143,143928,290],{"class":149},[143,143930,143931],{"class":145,"line":293},[143,143932,348],{"class":149},[22896,143934,143936],{"id":143935},"_18362-3d导航栏","18.3.6.2 3D导航栏",[29,143938],{"style":31,"src":143939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[133,143941,143942],{"className":135,"code":917,"language":137,"meta":138,"style":138},[140,143943,143944,143948,143962,143966],{"__ignoreMap":138},[143,143945,143946],{"class":145,"line":146},[143,143947,924],{"class":266},[143,143949,143950,143952,143954,143956,143958,143960],{"class":145,"line":35},[143,143951,150],{"class":149},[143,143953,614],{"class":153},[143,143955,617],{"class":156},[143,143957,160],{"class":149},[143,143959,937],{"class":163},[143,143961,183],{"class":149},[143,143963,143964],{"class":145,"line":46},[143,143965,944],{"class":149},[143,143967,143968,143970,143972],{"class":145,"line":293},[143,143969,730],{"class":149},[143,143971,614],{"class":153},[143,143973,183],{"class":149},[22896,143975,143977],{"id":143976},"_18363-旋转木马","18.3.6.3 旋转木马",[29,143979],{"style":31,"src":143980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[133,143982,143983],{"className":257,"code":143208,"language":259,"meta":138,"style":138},[140,143984,143985,143991,144007],{"__ignoreMap":138},[143,143986,143987,143989],{"class":145,"line":146},[143,143988,614],{"class":153},[143,143990,275],{"class":149},[143,143992,143993,143995,143997,143999,144001,144003,144005],{"class":145,"line":35},[143,143994,137394],{"class":280},[143,143996,284],{"class":149},[143,143998,143225],{"class":280},[143,144000,1049],{"class":149},[143,144002,1570],{"class":280},[143,144004,143232],{"class":755},[143,144006,3619],{"class":149},[143,144008,144009],{"class":145,"line":46},[143,144010,348],{"class":149},[954,144012,144013],{},"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":138,"searchDepth":35,"depth":35,"links":144015},[144016,144023],{"id":143111,"depth":35,"text":143112,"children":144017},[144018,144019,144020,144021,144022],{"id":143135,"depth":46,"text":143136},{"id":143190,"depth":46,"text":143191},{"id":143315,"depth":46,"text":143316},{"id":143418,"depth":46,"text":143419},{"id":143736,"depth":46,"text":143737},{"id":143764,"depth":35,"text":143765,"children":144024},[144025,144026,144027,144028,144029,144030],{"id":143771,"depth":46,"text":143772},{"id":143778,"depth":46,"text":143779},{"id":143794,"depth":46,"text":143795},{"id":143804,"depth":46,"text":143805},{"id":143831,"depth":46,"text":143832},{"id":143886,"depth":46,"text":143887},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143103,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144037,"title":144038,"body":144039,"description":973,"extension":974,"meta":144242,"navigation":976,"path":144243,"seo":144244,"stem":144245,"__hash__":144246},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144040,"toc":144231},[144041,144044,144048,144051,144054,144058,144061,144064,144067,144071,144074,144078,144081,144085,144088,144092,144106,144110,144135,144138,144141,144158,144162,144166,144169,144172,144176,144179,144182,144200,144204,144207,144221,144225,144228],[10,144042,144038],{"id":144043},"_19-移动端基础-前缀现状与视口",[14,144045,144047],{"id":144046},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[29,144049],{"style":31,"src":144050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[63,144052,144053],{},"意思就是加个前缀，增加兼容性",[14,144055,144057],{"id":144056},"_192-移动端现状认识","19.2 移动端现状认识",[29,144059],{"style":31,"src":144060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[63,144062,144063],{},"调试方法：",[29,144065],{"style":31,"src":144066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144068,144070],{"id":144069},"_193-视口","19.3 视口",[63,144072,144073],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[58,144075,144077],{"id":144076},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[29,144079],{"style":31,"src":144080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[58,144082,144084],{"id":144083},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[29,144086],{"style":31,"src":144087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[58,144089,144091],{"id":144090},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[232,144093,144094,144097,144100,144103],{},[22,144095,144096],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[22,144098,144099],{},"理想视口，对设备来讲，是最理想的视口尺寸",[22,144101,144102],{},"需要手动添写meta视口标签通知浏览器操作",[22,144104,144105],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[58,144107,144109],{"id":144108},"_1934-meta视口标签","19.3.4 meta视口标签",[133,144111,144113],{"className":135,"code":144112,"language":137,"meta":138,"style":138},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[140,144114,144115],{"__ignoreMap":138},[143,144116,144117,144119,144121,144123,144125,144127,144129,144131,144133],{"class":145,"line":146},[143,144118,150],{"class":149},[143,144120,52240],{"class":153},[143,144122,15819],{"class":156},[143,144124,160],{"class":149},[143,144126,52287],{"class":163},[143,144128,52267],{"class":156},[143,144130,160],{"class":149},[143,144132,52294],{"class":163},[143,144134,183],{"class":149},[29,144136],{"style":31,"src":144137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[63,144139,144140],{},"标准视口设置：",[19,144142,144143,144146,144149,144152,144155],{},[22,144144,144145],{},"视口宽度和设备保持一致",[22,144147,144148],{},"视口的默认缩放比例1.0",[22,144150,144151],{},"不允许用户自行缩放",[22,144153,144154],{},"最大允许的缩放比例1.0",[22,144156,144157],{},"最小允许的缩放比例1.0",[58,144159,144161],{"id":144160},"_1935-二倍图","19.3.5 二倍图",[22896,144163,144165],{"id":144164},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[29,144167],{"style":31,"src":144168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[29,144170],{"style":31,"src":144171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22896,144173,144175],{"id":144174},"_19352-多倍图","19.3.5.2 多倍图",[29,144177],{"style":31,"src":144178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[63,144180,144181],{},"二倍图法，代码如下：",[133,144183,144185],{"className":257,"code":144184,"language":259,"meta":138,"style":138},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[140,144186,144187,144192],{"__ignoreMap":138},[143,144188,144189],{"class":145,"line":146},[143,144190,144191],{"class":266},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[143,144193,144194,144197],{"class":145,"line":35},[143,144195,144196],{"class":153},"background-size",[143,144198,144199],{"class":149},": 50% 50%;\n",[22896,144201,144203],{"id":144202},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[29,144205],{"style":31,"src":144206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[19,144208,144209,144212,144215,144218],{},[22,144210,144211],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[22,144213,144214],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[22,144216,144217],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[22,144219,144220],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22896,144222,144224],{"id":144223},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[29,144226],{"style":31,"src":144227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[954,144229,144230],{},"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":138,"searchDepth":35,"depth":35,"links":144232},[144233,144234,144235],{"id":144046,"depth":35,"text":144047},{"id":144056,"depth":35,"text":144057},{"id":144069,"depth":35,"text":144070,"children":144236},[144237,144238,144239,144240,144241],{"id":144076,"depth":46,"text":144077},{"id":144083,"depth":46,"text":144084},{"id":144090,"depth":46,"text":144091},{"id":144108,"depth":46,"text":144109},{"id":144160,"depth":46,"text":144161},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144038,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":4,"title":5,"body":144248,"description":973,"extension":974,"meta":145001,"navigation":976,"path":977,"seo":145002,"stem":979,"__hash__":980},{"type":7,"value":144249,"toc":144985},[144250,144252,144254,144260,144262,144268,144270,144274,144276,144278,144280,144285,144287,144289,144291,144293,144295,144297,144299,144301,144303,144305,144307,144309,144311,144313,144315,144317,144319,144321,144323,144353,144355,144385,144387,144389,144391,144393,144405,144407,144409,144477,144479,144481,144483,144485,144487,144489,144491,144493,144495,144511,144513,144515,144519,144521,144525,144527,144531,144533,144535,144539,144541,144543,144545,144549,144551,144553,144555,144557,144561,144563,144565,144571,144573,144575,144577,144579,144587,144589,144591,144597,144599,144601,144603,144605,144607,144609,144611,144613,144657,144659,144661,144663,144665,144783,144785,144823,144825,144827,144829,144947,144949,144983],[10,144251,5],{"id":12},[14,144253,17],{"id":16},[19,144255,144256],{},[22,144257,144258],{},[25,144259,27],{},[29,144261],{"style":31,"src":32},[19,144263,144264],{"start":35},[22,144265,144266],{},[25,144267,40],{},[29,144269],{"style":31,"src":43},[19,144271,144272],{"start":46},[22,144273,49],{},[29,144275],{"style":31,"src":52},[14,144277,56],{"id":55},[58,144279,61],{"id":60},[63,144281,65,144282],{},[67,144283,69],{"href":69,"rel":144284},[71],[29,144286],{"style":31,"src":74},[29,144288],{"style":31,"src":77},[58,144290,81],{"id":80},[29,144292],{"style":31,"src":84},[29,144294],{"style":31,"src":87},[63,144296,90],{},[63,144298,93],{},[63,144300,96],{},[14,144302,100],{"id":99},[29,144304],{"style":31,"src":103},[14,144306,107],{"id":106},[63,144308,110],{},[63,144310,113],{},[63,144312,116],{},[63,144314,119],{},[29,144316],{"style":31,"src":122},[63,144318,125],{},[29,144320],{"style":31,"src":128},[63,144322,131],{},[133,144324,144325],{"className":135,"code":136,"language":137,"meta":138,"style":138},[140,144326,144327],{"__ignoreMap":138},[143,144328,144329,144331,144333,144335,144337,144339,144341,144343,144345,144347,144349,144351],{"class":145,"line":146},[143,144330,150],{"class":149},[143,144332,29],{"class":153},[143,144334,157],{"class":156},[143,144336,160],{"class":149},[143,144338,164],{"class":163},[143,144340,167],{"class":156},[143,144342,160],{"class":149},[143,144344,172],{"class":163},[143,144346,175],{"class":156},[143,144348,160],{"class":149},[143,144350,180],{"class":163},[143,144352,183],{"class":149},[63,144354,186],{},[133,144356,144357],{"className":135,"code":136,"language":137,"meta":138,"style":138},[140,144358,144359],{"__ignoreMap":138},[143,144360,144361,144363,144365,144367,144369,144371,144373,144375,144377,144379,144381,144383],{"class":145,"line":146},[143,144362,150],{"class":149},[143,144364,29],{"class":153},[143,144366,157],{"class":156},[143,144368,160],{"class":149},[143,144370,164],{"class":163},[143,144372,167],{"class":156},[143,144374,160],{"class":149},[143,144376,172],{"class":163},[143,144378,175],{"class":156},[143,144380,160],{"class":149},[143,144382,180],{"class":163},[143,144384,183],{"class":149},[14,144386,220],{"id":219},[29,144388],{"style":31,"src":223},[58,144390,227],{"id":226},[63,144392,230],{},[232,144394,144395,144397,144399,144401,144403],{},[22,144396,236],{},[22,144398,239],{},[22,144400,242],{},[22,144402,245],{},[22,144404,248],{},[63,144406,251],{},[63,144408,254],{},[133,144410,144411],{"className":257,"code":258,"language":259,"meta":138,"style":138},[140,144412,144413,144417,144423,144433,144443,144453,144463,144473],{"__ignoreMap":138},[143,144414,144415],{"class":145,"line":146},[143,144416,267],{"class":266},[143,144418,144419,144421],{"class":145,"line":35},[143,144420,272],{"class":156},[143,144422,275],{"class":149},[143,144424,144425,144427,144429,144431],{"class":145,"line":46},[143,144426,281],{"class":280},[143,144428,284],{"class":149},[143,144430,287],{"class":280},[143,144432,290],{"class":149},[143,144434,144435,144437,144439,144441],{"class":145,"line":293},[143,144436,296],{"class":280},[143,144438,284],{"class":149},[143,144440,301],{"class":280},[143,144442,290],{"class":149},[143,144444,144445,144447,144449,144451],{"class":145,"line":306},[143,144446,309],{"class":280},[143,144448,284],{"class":149},[143,144450,314],{"class":280},[143,144452,290],{"class":149},[143,144454,144455,144457,144459,144461],{"class":145,"line":319},[143,144456,322],{"class":280},[143,144458,284],{"class":149},[143,144460,327],{"class":280},[143,144462,290],{"class":149},[143,144464,144465,144467,144469,144471],{"class":145,"line":332},[143,144466,335],{"class":280},[143,144468,284],{"class":149},[143,144470,340],{"class":280},[143,144472,290],{"class":149},[143,144474,144475],{"class":145,"line":345},[143,144476,348],{"class":149},[63,144478,351],{},[63,144480,354],{},[63,144482,357],{},[63,144484,360],{},[63,144486,363],{},[63,144488,366],{},[29,144490],{"style":31,"src":369},[29,144492],{"style":31,"src":372},[58,144494,376],{"id":375},[19,144496,144497,144499,144501,144503,144505,144507,144509],{},[22,144498,381],{},[22,144500,384],{},[22,144502,387],{},[22,144504,390],{},[22,144506,393],{},[22,144508,396],{},[22,144510,381],{},[29,144512],{"style":31,"src":401},[29,144514],{"style":31,"src":404},[19,144516,144517],{"start":35},[22,144518,384],{},[29,144520],{"style":31,"src":411},[63,144522,144523,417],{},[140,144524,416],{},[63,144526,420],{},[19,144528,144529],{"start":46},[22,144530,387],{},[29,144532],{"style":31,"src":427},[63,144534,430],{},[19,144536,144537],{"start":293},[22,144538,390],{},[29,144540],{"style":31,"src":437},[63,144542,440],{},[63,144544,443],{},[19,144546,144547],{"start":306},[22,144548,393],{},[29,144550],{"style":31,"src":450},[63,144552,453],{},[63,144554,456],{},[29,144556],{"style":31,"src":459},[19,144558,144559],{"start":319},[22,144560,396],{},[29,144562],{"style":31,"src":466},[58,144564,470],{"id":469},[19,144566,144567],{},[22,144568,144569],{},[25,144570,477],{},[63,144572,480],{},[29,144574],{"style":31,"src":483},[63,144576,486],{},[63,144578,489],{},[19,144580,144581],{"start":35},[22,144582,144583,497,144585],{},[25,144584,496],{},[25,144586,500],{},[29,144588],{"style":31,"src":503},[63,144590,506],{},[19,144592,144593],{"start":46},[22,144594,144595,514],{},[25,144596,513],{},[29,144598],{"style":31,"src":517},[58,144600,521],{"id":520},[29,144602],{"style":31,"src":524},[63,144604,527],{},[58,144606,531],{"id":530},[63,144608,534],{},[63,144610,537],{},[29,144612],{"style":31,"src":540},[133,144614,144615],{"className":257,"code":543,"language":259,"meta":138,"style":138},[140,144616,144617,144623,144633,144643,144653],{"__ignoreMap":138},[143,144618,144619,144621],{"class":145,"line":146},[143,144620,272],{"class":156},[143,144622,275],{"class":149},[143,144624,144625,144627,144629,144631],{"class":145,"line":35},[143,144626,281],{"class":280},[143,144628,284],{"class":149},[143,144630,287],{"class":280},[143,144632,290],{"class":149},[143,144634,144635,144637,144639,144641],{"class":145,"line":46},[143,144636,309],{"class":280},[143,144638,284],{"class":149},[143,144640,327],{"class":280},[143,144642,290],{"class":149},[143,144644,144645,144647,144649,144651],{"class":145,"line":293},[143,144646,322],{"class":280},[143,144648,284],{"class":149},[143,144650,327],{"class":280},[143,144652,290],{"class":149},[143,144654,144655],{"class":145,"line":306},[143,144656,348],{"class":149},[63,144658,588],{},[63,144660,591],{},[29,144662],{"style":31,"src":594},[63,144664,597],{},[133,144666,144667],{"className":135,"code":600,"language":137,"meta":138,"style":138},[140,144668,144669,144673,144687,144691,144709,144713,144731,144735,144753,144757,144775],{"__ignoreMap":138},[143,144670,144671],{"class":145,"line":146},[143,144672,607],{"class":266},[143,144674,144675,144677,144679,144681,144683,144685],{"class":145,"line":35},[143,144676,150],{"class":149},[143,144678,614],{"class":153},[143,144680,617],{"class":156},[143,144682,160],{"class":149},[143,144684,622],{"class":163},[143,144686,183],{"class":149},[143,144688,144689],{"class":145,"line":46},[143,144690,629],{"class":266},[143,144692,144693,144695,144697,144699,144701,144703,144705,144707],{"class":145,"line":293},[143,144694,634],{"class":149},[143,144696,614],{"class":153},[143,144698,617],{"class":156},[143,144700,160],{"class":149},[143,144702,643],{"class":163},[143,144704,646],{"class":149},[143,144706,614],{"class":153},[143,144708,183],{"class":149},[143,144710,144711],{"class":145,"line":306},[143,144712,655],{"class":266},[143,144714,144715,144717,144719,144721,144723,144725,144727,144729],{"class":145,"line":319},[143,144716,634],{"class":149},[143,144718,614],{"class":153},[143,144720,617],{"class":156},[143,144722,160],{"class":149},[143,144724,668],{"class":163},[143,144726,646],{"class":149},[143,144728,614],{"class":153},[143,144730,183],{"class":149},[143,144732,144733],{"class":145,"line":332},[143,144734,679],{"class":266},[143,144736,144737,144739,144741,144743,144745,144747,144749,144751],{"class":145,"line":345},[143,144738,634],{"class":149},[143,144740,614],{"class":153},[143,144742,617],{"class":156},[143,144744,160],{"class":149},[143,144746,692],{"class":163},[143,144748,646],{"class":149},[143,144750,614],{"class":153},[143,144752,183],{"class":149},[143,144754,144755],{"class":145,"line":701},[143,144756,704],{"class":266},[143,144758,144759,144761,144763,144765,144767,144769,144771,144773],{"class":145,"line":707},[143,144760,634],{"class":149},[143,144762,614],{"class":153},[143,144764,617],{"class":156},[143,144766,160],{"class":149},[143,144768,718],{"class":163},[143,144770,646],{"class":149},[143,144772,614],{"class":153},[143,144774,183],{"class":149},[143,144776,144777,144779,144781],{"class":145,"line":727},[143,144778,730],{"class":149},[143,144780,614],{"class":153},[143,144782,183],{"class":149},[63,144784,351],{},[133,144786,144787],{"className":257,"code":739,"language":259,"meta":138,"style":138},[140,144788,144789,144803,144819],{"__ignoreMap":138},[143,144790,144791,144793,144795,144797,144799,144801],{"class":145,"line":146},[143,144792,746],{"class":153},[143,144794,749],{"class":149},[143,144796,752],{"class":156},[143,144798,160],{"class":755},[143,144800,758],{"class":163},[143,144802,761],{"class":149},[143,144804,144805,144807,144809,144811,144813,144815,144817],{"class":145,"line":35},[143,144806,766],{"class":280},[143,144808,284],{"class":149},[143,144810,771],{"class":280},[143,144812,774],{"class":755},[143,144814,777],{"class":280},[143,144816,780],{"class":280},[143,144818,290],{"class":149},[143,144820,144821],{"class":145,"line":46},[143,144822,348],{"class":149},[63,144824,789],{},[29,144826],{"style":31,"src":792},[63,144828,597],{},[133,144830,144831],{"className":135,"code":600,"language":137,"meta":138,"style":138},[140,144832,144833,144837,144851,144855,144873,144877,144895,144899,144917,144921,144939],{"__ignoreMap":138},[143,144834,144835],{"class":145,"line":146},[143,144836,607],{"class":266},[143,144838,144839,144841,144843,144845,144847,144849],{"class":145,"line":35},[143,144840,150],{"class":149},[143,144842,614],{"class":153},[143,144844,617],{"class":156},[143,144846,160],{"class":149},[143,144848,622],{"class":163},[143,144850,183],{"class":149},[143,144852,144853],{"class":145,"line":46},[143,144854,629],{"class":266},[143,144856,144857,144859,144861,144863,144865,144867,144869,144871],{"class":145,"line":293},[143,144858,634],{"class":149},[143,144860,614],{"class":153},[143,144862,617],{"class":156},[143,144864,160],{"class":149},[143,144866,643],{"class":163},[143,144868,646],{"class":149},[143,144870,614],{"class":153},[143,144872,183],{"class":149},[143,144874,144875],{"class":145,"line":306},[143,144876,655],{"class":266},[143,144878,144879,144881,144883,144885,144887,144889,144891,144893],{"class":145,"line":319},[143,144880,634],{"class":149},[143,144882,614],{"class":153},[143,144884,617],{"class":156},[143,144886,160],{"class":149},[143,144888,668],{"class":163},[143,144890,646],{"class":149},[143,144892,614],{"class":153},[143,144894,183],{"class":149},[143,144896,144897],{"class":145,"line":332},[143,144898,679],{"class":266},[143,144900,144901,144903,144905,144907,144909,144911,144913,144915],{"class":145,"line":345},[143,144902,634],{"class":149},[143,144904,614],{"class":153},[143,144906,617],{"class":156},[143,144908,160],{"class":149},[143,144910,692],{"class":163},[143,144912,646],{"class":149},[143,144914,614],{"class":153},[143,144916,183],{"class":149},[143,144918,144919],{"class":145,"line":701},[143,144920,704],{"class":266},[143,144922,144923,144925,144927,144929,144931,144933,144935,144937],{"class":145,"line":707},[143,144924,634],{"class":149},[143,144926,614],{"class":153},[143,144928,617],{"class":156},[143,144930,160],{"class":149},[143,144932,718],{"class":163},[143,144934,646],{"class":149},[143,144936,614],{"class":153},[143,144938,183],{"class":149},[143,144940,144941,144943,144945],{"class":145,"line":727},[143,144942,730],{"class":149},[143,144944,614],{"class":153},[143,144946,183],{"class":149},[63,144948,351],{},[133,144950,144951],{"className":135,"code":917,"language":137,"meta":138,"style":138},[140,144952,144953,144957,144971,144975],{"__ignoreMap":138},[143,144954,144955],{"class":145,"line":146},[143,144956,924],{"class":266},[143,144958,144959,144961,144963,144965,144967,144969],{"class":145,"line":35},[143,144960,150],{"class":149},[143,144962,614],{"class":153},[143,144964,617],{"class":156},[143,144966,160],{"class":149},[143,144968,937],{"class":163},[143,144970,183],{"class":149},[143,144972,144973],{"class":145,"line":46},[143,144974,944],{"class":149},[143,144976,144977,144979,144981],{"class":145,"line":293},[143,144978,730],{"class":149},[143,144980,614],{"class":153},[143,144982,183],{"class":149},[954,144984,956],{},{"title":138,"searchDepth":35,"depth":35,"links":144986},[144987,144988,144992,144993,144994],{"id":16,"depth":35,"text":17},{"id":55,"depth":35,"text":56,"children":144989},[144990,144991],{"id":60,"depth":46,"text":61},{"id":80,"depth":46,"text":81},{"id":99,"depth":35,"text":100},{"id":106,"depth":35,"text":107},{"id":219,"depth":35,"text":220,"children":144995},[144996,144997,144998,144999,145000],{"id":226,"depth":46,"text":227},{"id":375,"depth":46,"text":376},{"id":469,"depth":46,"text":470},{"id":520,"depth":46,"text":521},{"id":530,"depth":46,"text":531},{},{"title":5,"description":973},{"id":145004,"title":145005,"body":145006,"description":973,"extension":974,"meta":146233,"navigation":976,"path":146234,"seo":146235,"stem":146236,"__hash__":146237},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145007,"toc":146211},[145008,145011,145015,145019,145022,145025,145029,145034,145037,145040,145043,145046,145049,145106,145109,145114,145117,145120,145124,145135,145139,145142,145145,145152,145157,145161,145164,145170,145173,145177,145180,145187,145190,145193,145200,145203,145210,145213,145216,145223,145226,145229,145231,145248,145252,145255,145258,145261,145265,145268,145271,145274,145277,145280,145283,145285,145288,145291,145353,145356,145466,145473,145479,145482,145485,145489,145492,145496,145501,145504,145511,145514,145520,145525,145528,145531,145534,145537,145540,145543,145546,145549,145605,145607,145633,145637,145640,145643,145646,145654,145657,145660,145664,145720,145723,145727,145733,145744,145747,145752,145755,145758,145764,145767,145770,145773,145776,145779,145782,145785,145788,145813,145819,145822,145825,145828,145831,145834,145837,145842,145845,145848,145851,145859,145862,145869,145872,145875,145877,145901,145903,145906,145909,145912,145915,145918,145921,145924,145958,145961,145964,145998,146005,146008,146011,146014,146017,146020,146023,146030,146033,146036,146039,146042,146049,146052,146055,146062,146065,146068,146072,146075,146078,146081,146084,146087,146090,146093,146096,146098,146122,146124,146148,146152,146163,146166,146169,146172,146175,146178,146181,146184,146187,146190,146193,146196,146199,146202,146205,146208],[10,145009,145005],{"id":145010},"_21-移动端布局实战下篇",[14,145012,145014],{"id":145013},"_211-rem适配布局","21.1 rem适配布局",[58,145016,145018],{"id":145017},"_2111-rem单位","21.1.1 rem单位",[29,145020],{"style":31,"src":145021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[63,145023,145024],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[58,145026,145028],{"id":145027},"_2112-媒体查询","21.1.2 媒体查询",[19,145030,145031],{},[22,145032,145033],{},"参数介绍",[29,145035],{"style":31,"src":145036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[29,145038],{"style":31,"src":145039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[29,145041],{"style":31,"src":145042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[29,145044],{"style":31,"src":145045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[29,145047],{"style":31,"src":145048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[133,145050,145052],{"className":257,"code":145051,"language":259,"meta":138,"style":138},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[140,145053,145054,145059,145078,145085,145098,145102],{"__ignoreMap":138},[143,145055,145056],{"class":145,"line":146},[143,145057,145058],{"class":266},"\u002F* 媒体查询 *\u002F\n",[143,145060,145061,145064,145066,145069,145071,145074,145076],{"class":145,"line":35},[143,145062,145063],{"class":755},"@media",[143,145065,2559],{"class":149},[143,145067,145068],{"class":280},"max-width",[143,145070,284],{"class":149},[143,145072,145073],{"class":280},"768",[143,145075,774],{"class":755},[143,145077,13342],{"class":149},[143,145079,145080,145083],{"class":145,"line":46},[143,145081,145082],{"class":156},"  .container",[143,145084,275],{"class":149},[143,145086,145087,145090,145092,145094,145096],{"class":145,"line":293},[143,145088,145089],{"class":280},"    width",[143,145091,284],{"class":149},[143,145093,1352],{"class":280},[143,145095,1369],{"class":755},[143,145097,290],{"class":149},[143,145099,145100],{"class":145,"line":306},[143,145101,128218],{"class":149},[143,145103,145104],{"class":145,"line":319},[143,145105,348],{"class":149},[63,145107,145108],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[19,145110,145111],{"start":35},[22,145112,145113],{},"引入资源",[29,145115],{"style":31,"src":145116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[63,145118,145119],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[58,145121,145123],{"id":145122},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[232,145125,145126,145129,145132],{},[22,145127,145128],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[22,145130,145131],{},"媒体查询可以根据不同设备宽度来修改样式",[22,145133,145134],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145136,145138],{"id":145137},"_212-less基础","21.2 Less基础",[63,145140,145141],{},"css冗余度较高，不利于复用，没有很好的计算能力",[63,145143,145144],{},"Less可以解决该问题，它是css的扩展语言",[63,145146,145147,145148],{},"Less中文网址： ",[67,145149,145150],{"href":145150,"rel":145151},"http:\u002F\u002Flesscss.cn\u002F",[71],[63,145153,145154],{},[25,145155,145156],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[58,145158,145160],{"id":145159},"_2121-less安装","21.2.1 less安装",[63,145162,145163],{},"如果使用vscode，则无需进行下方安装步骤",[63,145165,145166],{},[67,145167,145168],{"href":145168,"rel":145169},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[71],[29,145171],{"style":31,"src":145172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[58,145174,145176],{"id":145175},"_2122-less使用","21.2.2 less使用",[63,145178,145179],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[19,145181,145182],{},[22,145183,145184],{},[25,145185,145186],{},"Less 变量",[29,145188],{"style":31,"src":145189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[29,145191],{"style":31,"src":145192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[19,145194,145195],{"start":35},[22,145196,145197],{},[25,145198,145199],{},"Less 编译",[29,145201],{"style":31,"src":145202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[19,145204,145205],{"start":46},[22,145206,145207],{},[25,145208,145209],{},"Less 嵌套",[29,145211],{"style":31,"src":145212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[29,145214],{"style":31,"src":145215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[19,145217,145218],{"start":293},[22,145219,145220],{},[25,145221,145222],{},"Less 运算",[29,145224],{"style":31,"src":145225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[63,145227,145228],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[63,145230,110],{},[232,145232,145233,145236,145239,145242,145245],{},[22,145234,145235],{},"乘号（*）和除号（\u002F）的写法",[22,145237,145238],{},"运算符中间左右有个空格隔开 1px + 5",[22,145240,145241],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[22,145243,145244],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[22,145246,145247],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145249,145251],{"id":145250},"_213-rem-适配方案","21.3 rem 适配方案",[63,145253,145254],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[63,145256,145257],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[29,145259],{"style":31,"src":145260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[58,145262,145264],{"id":145263},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[63,145266,145267],{},"rem + 媒体查询 + less 技术",[29,145269],{"style":31,"src":145270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[63,145272,145273],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[63,145275,145276],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[29,145278],{"style":31,"src":145279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[63,145281,145282],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[63,145284,15532],{},[29,145286],{"style":31,"src":145287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[63,145289,145290],{},"index.html:",[133,145292,145294],{"className":257,"code":145293,"language":259,"meta":138,"style":138},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[140,145295,145296,145301,145307,145323,145327,145333,145349],{"__ignoreMap":138},[143,145297,145298],{"class":145,"line":146},[143,145299,145300],{"class":266},"\u002F* rem 适配方案 *\u002F\n",[143,145302,145303,145305],{"class":145,"line":35},[143,145304,51533],{"class":153},[143,145306,275],{"class":149},[143,145308,145309,145311,145313,145316,145318,145320],{"class":145,"line":46},[143,145310,71506],{"class":280},[143,145312,284],{"class":149},[143,145314,145315],{"class":280},"62.5",[143,145317,1369],{"class":755},[143,145319,131283],{"class":149},[143,145321,145322],{"class":266},"\u002F* 1rem = 10px *\u002F\n",[143,145324,145325],{"class":145,"line":293},[143,145326,348],{"class":149},[143,145328,145329,145331],{"class":145,"line":306},[143,145330,131268],{"class":156},[143,145332,275],{"class":149},[143,145334,145335,145337,145339,145341,145344,145346],{"class":145,"line":319},[143,145336,71448],{"class":280},[143,145338,284],{"class":149},[143,145340,1487],{"class":280},[143,145342,145343],{"class":755},"rem",[143,145345,131283],{"class":149},[143,145347,145348],{"class":266},"\u002F* 100px *\u002F\n",[143,145350,145351],{"class":145,"line":332},[143,145352,348],{"class":149},[63,145354,145355],{},"common.less",[133,145357,145359],{"className":257,"code":145358,"language":259,"meta":138,"style":138},"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",[140,145360,145361,145367,145382,145386,145392,145406,145410,145414,145418,145424,145438,145442,145448,145462],{"__ignoreMap":138},[143,145362,145363,145365],{"class":145,"line":146},[143,145364,51533],{"class":153},[143,145366,275],{"class":149},[143,145368,145369,145371,145373,145375,145377,145379],{"class":145,"line":35},[143,145370,71506],{"class":280},[143,145372,284],{"class":149},[143,145374,145315],{"class":280},[143,145376,1369],{"class":755},[143,145378,26965],{"class":149},[143,145380,145381],{"class":266},"\u002F* 10px *\u002F\n",[143,145383,145384],{"class":145,"line":46},[143,145385,348],{"class":149},[143,145387,145388,145390],{"class":145,"line":293},[143,145389,614],{"class":153},[143,145391,275],{"class":149},[143,145393,145394,145396,145398,145400,145402,145404],{"class":145,"line":306},[143,145395,71448],{"class":280},[143,145397,284],{"class":149},[143,145399,1487],{"class":280},[143,145401,145343],{"class":755},[143,145403,26965],{"class":149},[143,145405,145348],{"class":266},[143,145407,145408],{"class":145,"line":319},[143,145409,348],{"class":149},[143,145411,145412],{"class":145,"line":332},[143,145413,136871],{"class":149},[143,145415,145416],{"class":145,"line":345},[143,145417,145300],{"class":266},[143,145419,145420,145422],{"class":145,"line":701},[143,145421,51533],{"class":153},[143,145423,275],{"class":149},[143,145425,145426,145428,145430,145432,145434,145436],{"class":145,"line":707},[143,145427,71506],{"class":280},[143,145429,284],{"class":149},[143,145431,145315],{"class":280},[143,145433,1369],{"class":755},[143,145435,131283],{"class":149},[143,145437,145322],{"class":266},[143,145439,145440],{"class":145,"line":727},[143,145441,348],{"class":149},[143,145443,145444,145446],{"class":145,"line":2518},[143,145445,131268],{"class":156},[143,145447,275],{"class":149},[143,145449,145450,145452,145454,145456,145458,145460],{"class":145,"line":2524},[143,145451,71448],{"class":280},[143,145453,284],{"class":149},[143,145455,1487],{"class":280},[143,145457,145343],{"class":755},[143,145459,131283],{"class":149},[143,145461,145348],{"class":266},[143,145463,145464],{"class":145,"line":2529},[143,145465,348],{"class":149},[63,145467,145468,145469,145472],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24451,145470,145471],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[133,145474,145477],{"className":145475,"code":145476,"language":6087},[6085],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[140,145478,145476],{"__ignoreMap":138},[63,145480,145481],{},"less保存时会自动变成.css文件",[63,145483,145484],{},"好好搞懂上述代码写法",[58,145486,145488],{"id":145487},"_2132-样式导入样式","21.3.2 样式导入样式",[29,145490],{"style":31,"src":145491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[58,145493,145495],{"id":145494},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[19,145497,145498],{},[22,145499,145500],{},"准备工作",[29,145502],{"style":31,"src":145503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[63,145505,145506,145507],{},"github地址：",[67,145508,145509],{"href":145509,"rel":145510},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[71],[63,145512,145513],{},"下载之后，将index.js文件拖到项目中就可以了",[63,145515,145516,145517],{},"js文件引入到index.html中使用的是",[140,145518,145519],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[19,145521,145522],{"start":35},[22,145523,145524],{},"vscode插件",[29,145526],{"style":31,"src":145527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[63,145529,145530],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[63,145532,145533],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[29,145535],{"style":31,"src":145536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[63,145538,145539],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[29,145541],{"style":31,"src":145542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[63,145544,145545],{},"修改成75就可以，alt+z为快捷键",[63,145547,145548],{},"index.css：",[133,145550,145551],{"className":257,"code":145293,"language":259,"meta":138,"style":138},[140,145552,145553,145557,145563,145577,145581,145587,145601],{"__ignoreMap":138},[143,145554,145555],{"class":145,"line":146},[143,145556,145300],{"class":266},[143,145558,145559,145561],{"class":145,"line":35},[143,145560,51533],{"class":153},[143,145562,275],{"class":149},[143,145564,145565,145567,145569,145571,145573,145575],{"class":145,"line":46},[143,145566,71506],{"class":280},[143,145568,284],{"class":149},[143,145570,145315],{"class":280},[143,145572,1369],{"class":755},[143,145574,131283],{"class":149},[143,145576,145322],{"class":266},[143,145578,145579],{"class":145,"line":293},[143,145580,348],{"class":149},[143,145582,145583,145585],{"class":145,"line":306},[143,145584,131268],{"class":156},[143,145586,275],{"class":149},[143,145588,145589,145591,145593,145595,145597,145599],{"class":145,"line":319},[143,145590,71448],{"class":280},[143,145592,284],{"class":149},[143,145594,1487],{"class":280},[143,145596,145343],{"class":755},[143,145598,131283],{"class":149},[143,145600,145348],{"class":266},[143,145602,145603],{"class":145,"line":332},[143,145604,348],{"class":149},[63,145606,145290],{},[133,145608,145609],{"className":257,"code":127828,"language":259,"meta":138,"style":138},[140,145610,145611,145617,145629],{"__ignoreMap":138},[143,145612,145613,145615],{"class":145,"line":146},[143,145614,52688],{"class":153},[143,145616,275],{"class":149},[143,145618,145619,145621,145623,145625,145627],{"class":145,"line":35},[143,145620,71506],{"class":280},[143,145622,284],{"class":149},[143,145624,1642],{"class":280},[143,145626,774],{"class":755},[143,145628,290],{"class":149},[143,145630,145631],{"class":145,"line":46},[143,145632,348],{"class":149},[14,145634,145636],{"id":145635},"_214-响应式开发","21.4 响应式开发",[63,145638,145639],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[29,145641],{"style":31,"src":145642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[63,145644,145645],{},"做法：",[232,145647,145648,145651],{},[22,145649,145650],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[22,145652,145653],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[29,145655],{"style":31,"src":145656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[63,145658,145659],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[58,145661,145663],{"id":145662},"_2141-简单代码示范","21.4.1 简单代码示范",[133,145665,145666],{"className":257,"code":145293,"language":259,"meta":138,"style":138},[140,145667,145668,145672,145678,145692,145696,145702,145716],{"__ignoreMap":138},[143,145669,145670],{"class":145,"line":146},[143,145671,145300],{"class":266},[143,145673,145674,145676],{"class":145,"line":35},[143,145675,51533],{"class":153},[143,145677,275],{"class":149},[143,145679,145680,145682,145684,145686,145688,145690],{"class":145,"line":46},[143,145681,71506],{"class":280},[143,145683,284],{"class":149},[143,145685,145315],{"class":280},[143,145687,1369],{"class":755},[143,145689,131283],{"class":149},[143,145691,145322],{"class":266},[143,145693,145694],{"class":145,"line":293},[143,145695,348],{"class":149},[143,145697,145698,145700],{"class":145,"line":306},[143,145699,131268],{"class":156},[143,145701,275],{"class":149},[143,145703,145704,145706,145708,145710,145712,145714],{"class":145,"line":319},[143,145705,71448],{"class":280},[143,145707,284],{"class":149},[143,145709,1487],{"class":280},[143,145711,145343],{"class":755},[143,145713,131283],{"class":149},[143,145715,145348],{"class":266},[143,145717,145718],{"class":145,"line":332},[143,145719,348],{"class":149},[63,145721,145722],{},"父盒子一般命名为container",[58,145724,145726],{"id":145725},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[63,145728,145729,145730],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[25,145731,145732],{},"使得 Web 开发更加快捷",[232,145734,145735],{},[22,145736,145737,145738],{},"官网：",[25,145739,145740],{},[67,145741,145742],{"href":145742,"rel":145743},"http:\u002F\u002Fgetbootstrap.com\u002F",[71],[63,145745,145746],{},"可以直接去官网拿现成的东西",[19,145748,145749],{},[22,145750,145751],{},"Bootstrap的使用",[63,145753,145754],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[63,145756,145757],{},"Bootstrap 使用四步曲：",[63,145759,145760,145763],{},[25,145761,145762],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[29,145765],{"style":31,"src":145766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[63,145768,145769],{},"打开Bootstrap官网，然后下载",[29,145771],{"style":31,"src":145772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[29,145774],{"style":31,"src":145775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[63,145777,145778],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[63,145780,145781],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[63,145783,145784],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[29,145786],{"style":31,"src":145787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[133,145789,145791],{"className":257,"code":145790,"language":259,"meta":138,"style":138},".center {\n  color: red;\n}\n",[140,145792,145793,145799,145809],{"__ignoreMap":138},[143,145794,145795,145797],{"class":145,"line":146},[143,145796,127715],{"class":156},[143,145798,275],{"class":149},[143,145800,145801,145803,145805,145807],{"class":145,"line":35},[143,145802,71784],{"class":280},[143,145804,284],{"class":149},[143,145806,58304],{"class":280},[143,145808,290],{"class":149},[143,145810,145811],{"class":145,"line":46},[143,145812,348],{"class":149},[63,145814,145815,145818],{},[140,145816,145817],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[29,145820],{"style":31,"src":145821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[29,145823],{"style":31,"src":145824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[29,145826],{"style":31,"src":145827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[63,145829,145830],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[29,145832],{"style":31,"src":145833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[63,145835,145836],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[19,145838,145839],{"start":35},[22,145840,145841],{},"布局容器",[29,145843],{"style":31,"src":145844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[63,145846,145847],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[63,145849,145850],{},"container-fluid用于移动式布局比较方便",[19,145852,145853],{"start":46},[22,145854,145855,145856],{},"bootstrap ",[25,145857,145858],{},"栅格系统原理",[29,145860],{"style":31,"src":145861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[19,145863,145864],{"start":293},[22,145865,145866],{},[25,145867,145868],{},"栅格选项参数",[29,145870],{"style":31,"src":145871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[63,145873,145874],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[63,145876,15532],{},[133,145878,145879],{"className":257,"code":145790,"language":259,"meta":138,"style":138},[140,145880,145881,145887,145897],{"__ignoreMap":138},[143,145882,145883,145885],{"class":145,"line":146},[143,145884,127715],{"class":156},[143,145886,275],{"class":149},[143,145888,145889,145891,145893,145895],{"class":145,"line":35},[143,145890,71784],{"class":280},[143,145892,284],{"class":149},[143,145894,58304],{"class":280},[143,145896,290],{"class":149},[143,145898,145899],{"class":145,"line":46},[143,145900,348],{"class":149},[63,145902,125],{},[29,145904],{"style":31,"src":145905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[63,145907,145908],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[63,145910,145911],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[63,145913,145914],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[63,145916,145917],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[63,145919,145920],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[63,145922,145923],{},"汇总展示说明：",[133,145925,145926],{"className":135,"code":917,"language":137,"meta":138,"style":138},[140,145927,145928,145932,145946,145950],{"__ignoreMap":138},[143,145929,145930],{"class":145,"line":146},[143,145931,924],{"class":266},[143,145933,145934,145936,145938,145940,145942,145944],{"class":145,"line":35},[143,145935,150],{"class":149},[143,145937,614],{"class":153},[143,145939,617],{"class":156},[143,145941,160],{"class":149},[143,145943,937],{"class":163},[143,145945,183],{"class":149},[143,145947,145948],{"class":145,"line":46},[143,145949,944],{"class":149},[143,145951,145952,145954,145956],{"class":145,"line":293},[143,145953,730],{"class":149},[143,145955,614],{"class":153},[143,145957,183],{"class":149},[29,145959],{"style":31,"src":145960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[63,145962,145963],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[133,145965,145966],{"className":135,"code":917,"language":137,"meta":138,"style":138},[140,145967,145968,145972,145986,145990],{"__ignoreMap":138},[143,145969,145970],{"class":145,"line":146},[143,145971,924],{"class":266},[143,145973,145974,145976,145978,145980,145982,145984],{"class":145,"line":35},[143,145975,150],{"class":149},[143,145977,614],{"class":153},[143,145979,617],{"class":156},[143,145981,160],{"class":149},[143,145983,937],{"class":163},[143,145985,183],{"class":149},[143,145987,145988],{"class":145,"line":46},[143,145989,944],{"class":149},[143,145991,145992,145994,145996],{"class":145,"line":293},[143,145993,730],{"class":149},[143,145995,614],{"class":153},[143,145997,183],{"class":149},[19,145999,146000],{"start":306},[22,146001,146002],{},[25,146003,146004],{},"列嵌套",[29,146006],{"style":31,"src":146007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[63,146009,146010],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[63,146012,146013],{},"没加row内部这样：",[29,146015],{"style":31,"src":146016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[63,146018,146019],{},"加上row之后内部为：",[29,146021],{"style":31,"src":146022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[19,146024,146025],{"start":319},[22,146026,146027],{},[25,146028,146029],{},"列偏移",[29,146031],{"style":31,"src":146032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[63,146034,146035],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[63,146037,146038],{},"要加偏移量，即偏移份数",[63,146040,146041],{},"偏移的份数=12-两个盒子的份数",[19,146043,146044],{"start":332},[22,146045,146046],{},[25,146047,146048],{},"列排序",[29,146050],{"style":31,"src":146051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[63,146053,146054],{},"pull拉左；push推右",[19,146056,146057],{"start":345},[22,146058,146059],{},[25,146060,146061],{},"响应式工具",[29,146063],{"style":31,"src":146064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[63,146066,146067],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[58,146069,146071],{"id":146070},"_2143-响应式小项目","21.4.3 响应式小项目",[63,146073,146074],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[63,146076,146077],{},"ul {",[63,146079,146080],{},"list-style: none;",[63,146082,146083],{},"margin:0;",[63,146085,146086],{},"padding:0; }",[29,146088],{"style":31,"src":146089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[29,146091],{"style":31,"src":146092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[63,146094,146095],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[63,146097,597],{},[133,146099,146100],{"className":257,"code":140077,"language":259,"meta":138,"style":138},[140,146101,146102,146108,146118],{"__ignoreMap":138},[143,146103,146104,146106],{"class":145,"line":146},[143,146105,131268],{"class":156},[143,146107,275],{"class":149},[143,146109,146110,146112,146114,146116],{"class":145,"line":35},[143,146111,131896],{"class":280},[143,146113,284],{"class":149},[143,146115,24634],{"class":280},[143,146117,290],{"class":149},[143,146119,146120],{"class":145,"line":46},[143,146121,348],{"class":149},[63,146123,351],{},[133,146125,146126],{"className":257,"code":140077,"language":259,"meta":138,"style":138},[140,146127,146128,146134,146144],{"__ignoreMap":138},[143,146129,146130,146132],{"class":145,"line":146},[143,146131,131268],{"class":156},[143,146133,275],{"class":149},[143,146135,146136,146138,146140,146142],{"class":145,"line":35},[143,146137,131896],{"class":280},[143,146139,284],{"class":149},[143,146141,24634],{"class":280},[143,146143,290],{"class":149},[143,146145,146146],{"class":145,"line":46},[143,146147,348],{"class":149},[14,146149,146151],{"id":146150},"_215-swiper-插件使用","21.5 swiper 插件使用",[232,146153,146154,146157,146160],{},[22,146155,146156],{},"下载需要的css和js文件html页面中 引入相关文件",[22,146158,146159],{},"官网找到类似案例，复制html结构，css样式 js 语法",[22,146161,146162],{},"根据需求定制修改模块",[29,146164],{"style":31,"src":146165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[63,146167,146168],{},"解压后将这两部分放到项目中",[29,146170],{"style":31,"src":146171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[63,146173,146174],{},"这个插件可以帮助我们实现轮播图效果",[63,146176,146177],{},"用法：",[29,146179],{"style":31,"src":146180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[63,146182,146183],{},"找到自己喜欢的",[29,146185],{"style":31,"src":146186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[63,146188,146189],{},"右键，查看网页源代码",[29,146191],{"style":31,"src":146192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[63,146194,146195],{},"复制人家的结构内容",[63,146197,146198],{},"然后去看API文档：",[29,146200],{"style":31,"src":146201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[63,146203,146204],{},"可以看看如何修改样式",[63,146206,146207],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[954,146209,146210],{},"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":138,"searchDepth":35,"depth":35,"links":146212},[146213,146218,146222,146227,146232],{"id":145013,"depth":35,"text":145014,"children":146214},[146215,146216,146217],{"id":145017,"depth":46,"text":145018},{"id":145027,"depth":46,"text":145028},{"id":145122,"depth":46,"text":145123},{"id":145137,"depth":35,"text":145138,"children":146219},[146220,146221],{"id":145159,"depth":46,"text":145160},{"id":145175,"depth":46,"text":145176},{"id":145250,"depth":35,"text":145251,"children":146223},[146224,146225,146226],{"id":145263,"depth":46,"text":145264},{"id":145487,"depth":46,"text":145488},{"id":145494,"depth":46,"text":145495},{"id":145635,"depth":35,"text":145636,"children":146228},[146229,146230,146231],{"id":145662,"depth":46,"text":145663},{"id":145725,"depth":46,"text":145726},{"id":146070,"depth":46,"text":146071},{"id":146150,"depth":35,"text":146151},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145005,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146239,"title":146240,"body":146241,"description":973,"extension":974,"meta":146461,"navigation":976,"path":146462,"seo":146463,"stem":146464,"__hash__":146465},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146242,"toc":146457},[146243,146246,146250,146253,146268,146273,146276,146281,146316,146321,146333,146338,146351,146356,146373,146378,146398,146403,146421,146424,146427,146430,146433,146437,146440,146443,146446,146449,146452,146455],[10,146244,146240],{"id":146245},"_22-代码提交与新型相对单位",[14,146247,146249],{"id":146248},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[63,146251,146252],{},"法1：",[19,146254,146255,146262,146265],{},[22,146256,146257,146258],{},"登录网站注册：",[67,146259,146260],{"href":146260,"rel":146261},"https:\u002F\u002Fgitee.com\u002F",[71],[22,146263,146264],{},"码云创建新的仓库",[22,146266,146267],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[232,146269,146270],{},[22,146271,146272],{},"在网站根目录右键-- Git Bash Here",[29,146274],{"style":31,"src":146275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[232,146277,146278],{},[22,146279,146280],{},"如果是第一次利用git提交，请配置好全局选项",[133,146282,146284],{"className":118171,"code":146283,"language":118173,"meta":138,"style":138},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[140,146285,146286,146302],{"__ignoreMap":138},[143,146287,146288,146291,146293,146296,146299],{"class":145,"line":146},[143,146289,146290],{"class":156},"git",[143,146292,120594],{"class":163},[143,146294,146295],{"class":280}," --global",[143,146297,146298],{"class":163}," user.name",[143,146300,146301],{"class":163}," \"你的名字\"\n",[143,146303,146304,146306,146308,146310,146313],{"class":145,"line":35},[143,146305,146290],{"class":156},[143,146307,120594],{"class":163},[143,146309,146295],{"class":280},[143,146311,146312],{"class":163}," user.email",[143,146314,146315],{"class":163}," \"你的邮箱\"\n",[232,146317,146318],{},[22,146319,146320],{},"初始化仓库",[133,146322,146324],{"className":118171,"code":146323,"language":118173,"meta":138,"style":138},"git init\n",[140,146325,146326],{"__ignoreMap":138},[143,146327,146328,146330],{"class":145,"line":146},[143,146329,146290],{"class":156},[143,146331,146332],{"class":163}," init\n",[232,146334,146335],{},[22,146336,146337],{},"把本地文件放到暂存区",[133,146339,146341],{"className":118171,"code":146340,"language":118173,"meta":138,"style":138},"git add .\n",[140,146342,146343],{"__ignoreMap":138},[143,146344,146345,146347,146349],{"class":145,"line":146},[143,146346,146290],{"class":156},[143,146348,6109],{"class":163},[143,146350,29639],{"class":163},[232,146352,146353],{},[22,146354,146355],{},"把本地文件放到本地仓库里面",[133,146357,146359],{"className":118171,"code":146358,"language":118173,"meta":138,"style":138},"git commit -m \"first commit\"\n",[140,146360,146361],{"__ignoreMap":138},[143,146362,146363,146365,146368,146370],{"class":145,"line":146},[143,146364,146290],{"class":156},[143,146366,146367],{"class":163}," commit",[143,146369,101758],{"class":280},[143,146371,146372],{"class":163}," \"first commit\"\n",[232,146374,146375],{},[22,146376,146377],{},"链接远程仓库",[133,146379,146381],{"className":118171,"code":146380,"language":118173,"meta":138,"style":138},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[140,146382,146383],{"__ignoreMap":138},[143,146384,146385,146387,146390,146392,146395],{"class":145,"line":146},[143,146386,146290],{"class":156},[143,146388,146389],{"class":163}," remote",[143,146391,6109],{"class":163},[143,146393,146394],{"class":163}," origin",[143,146396,146397],{"class":163}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[232,146399,146400],{},[22,146401,146402],{},"把本地仓库的文件推送到远程仓库 push",[133,146404,146406],{"className":118171,"code":146405,"language":118173,"meta":138,"style":138},"git push -u origin master\n",[140,146407,146408],{"__ignoreMap":138},[143,146409,146410,146412,146414,146416,146418],{"class":145,"line":146},[143,146411,146290],{"class":156},[143,146413,29914],{"class":163},[143,146415,29188],{"class":280},[143,146417,146394],{"class":163},[143,146419,146420],{"class":163}," master\n",[29,146422],{"style":31,"src":146423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[63,146425,146426],{},"上方方法暂未实现，后边学完git后在整",[63,146428,146429],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[29,146431],{"style":31,"src":146432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146434,146436],{"id":146435},"_222-新型相对单位","22.2 新型相对单位",[29,146438],{"style":31,"src":146439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[29,146441],{"style":31,"src":146442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[63,146444,146445],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[63,146447,146448],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[29,146450],{"style":31,"src":146451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[63,146453,146454],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[954,146456,24855],{},{"title":138,"searchDepth":35,"depth":35,"links":146458},[146459,146460],{"id":146248,"depth":35,"text":146249},{"id":146435,"depth":35,"text":146436},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146240,"description":973},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146467,"title":146468,"body":146469,"description":146473,"extension":974,"meta":146474,"navigation":976,"path":146475,"seo":146476,"stem":146477,"__hash__":146478},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146470,"toc":146471},[],{"title":138,"searchDepth":35,"depth":35,"links":146472},[],"自己正经开始学编程的第一门语言！",{"category":93716},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146468,"description":146473},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146480,"title":146481,"body":146482,"description":973,"extension":974,"meta":147629,"navigation":976,"path":147630,"seo":147631,"stem":147632,"__hash__":147633},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146483,"toc":147605},[146484,146487,146491,146494,146497,146522,146525,146531,146535,146538,146565,146568,146608,146611,146623,146626,146632,146636,146640,146667,146684,146691,146695,146698,146724,146727,146731,146734,146774,146777,146794,146800,146804,146809,146853,146856,146874,146877,146945,146949,146956,146959,146974,146977,146986,146989,147000,147003,147012,147015,147032,147035,147050,147054,147058,147061,147063,147083,147087,147090,147093,147104,147107,147113,147117,147123,147150,147153,147165,147168,147179,147182,147188,147192,147198,147248,147251,147293,147296,147329,147332,147366,147370,147373,147393,147396,147432,147435,147448,147452,147456,147462,147465,147478,147482,147485,147491,147494,147498,147501,147504,147553,147557,147573,147579,147586,147592,147602],[10,146485,146481],{"id":146486},"_1-python环境与第一个程序",[14,146488,146490],{"id":146489},"_11-什么是python","1.1 什么是Python",[63,146492,146493],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[63,146495,146496],{},"理解 Python 时抓住三个关键词：",[19,146498,146499,146502,146505],{},[22,146500,146501],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[22,146503,146504],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[22,146506,146507,146508,1255,146511,1255,146514,1255,146517,1255,146519,29283],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[140,146509,146510],{},"os",[140,146512,146513],{},"sys",[140,146515,146516],{},"json",[140,146518,58743],{},[140,146520,146521],{},"datetime",[63,146523,146524],{},"Python 程序的运行链路：",[133,146526,146529],{"className":146527,"code":146528,"language":6087,"meta":138},[6085],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[140,146530,146528],{"__ignoreMap":138},[14,146532,146534],{"id":146533},"_12-python解释器","1.2 Python解释器",[63,146536,146537],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[133,146539,146541],{"className":24720,"code":146540,"language":24722,"meta":138,"style":138},"python --version\npython3 --version\npython\npython3\n",[140,146542,146543,146549,146555,146560],{"__ignoreMap":138},[143,146544,146545,146547],{"class":145,"line":146},[143,146546,31278],{"class":156},[143,146548,27191],{"class":280},[143,146550,146551,146553],{"class":145,"line":35},[143,146552,101755],{"class":156},[143,146554,27191],{"class":280},[143,146556,146557],{"class":145,"line":46},[143,146558,146559],{"class":156},"python\n",[143,146561,146562],{"class":145,"line":293},[143,146563,146564],{"class":156},"python3\n",[63,146566,146567],{},"进入交互模式后，可以直接输入表达式：",[133,146569,146571],{"className":31276,"code":146570,"language":31278,"meta":138,"style":138},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[140,146572,146573,146584,146589,146603],{"__ignoreMap":138},[143,146574,146575,146578,146580,146582],{"class":145,"line":146},[143,146576,146577],{"class":755},">>>",[143,146579,26016],{"class":280},[143,146581,46464],{"class":755},[143,146583,48621],{"class":280},[143,146585,146586],{"class":145,"line":35},[143,146587,146588],{"class":280},"3\n",[143,146590,146591,146593,146596,146598,146601],{"class":145,"line":46},[143,146592,146577],{"class":755},[143,146594,146595],{"class":280}," print",[143,146597,1049],{"class":149},[143,146599,146600],{"class":163},"\"hello python\"",[143,146602,1055],{"class":149},[143,146604,146605],{"class":145,"line":293},[143,146606,146607],{"class":149},"hello python\n",[63,146609,146610],{},"退出交互模式：",[133,146612,146614],{"className":31276,"code":146613,"language":31278,"meta":138,"style":138},"exit()\n",[140,146615,146616],{"__ignoreMap":138},[143,146617,146618,146621],{"class":145,"line":146},[143,146619,146620],{"class":280},"exit",[143,146622,2876],{"class":149},[63,146624,146625],{},"或使用快捷键：",[133,146627,146630],{"className":146628,"code":146629,"language":6087,"meta":138},[6085],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[140,146631,146629],{"__ignoreMap":138},[14,146633,146635],{"id":146634},"_13-安装python","1.3 安装Python",[58,146637,146639],{"id":146638},"_131-windows安装","1.3.1 Windows安装",[19,146641,146642,146649,146652,146658,146664],{},[22,146643,146644,146645],{},"打开 Python 官网：",[67,146646,146647],{"href":146647,"rel":146648},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[71],[22,146650,146651],{},"下载 Windows Installer。",[22,146653,146654,146655,29283],{},"安装时勾选 ",[140,146656,146657],{},"Add Python to PATH",[22,146659,146660,146661,29283],{},"点击 ",[140,146662,146663],{},"Install Now",[22,146665,146666],{},"安装完成后打开命令提示符验证：",[133,146668,146670],{"className":24720,"code":146669,"language":24722,"meta":138,"style":138},"python --version\npip --version\n",[140,146671,146672,146678],{"__ignoreMap":138},[143,146673,146674,146676],{"class":145,"line":146},[143,146675,31278],{"class":156},[143,146677,27191],{"class":280},[143,146679,146680,146682],{"class":145,"line":35},[143,146681,24729],{"class":156},[143,146683,27191],{"class":280},[63,146685,146686,146687,146690],{},"如果提示 ",[140,146688,146689],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[58,146692,146694],{"id":146693},"_132-macos安装","1.3.2 macOS安装",[63,146696,146697],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[133,146699,146701],{"className":24720,"code":146700,"language":24722,"meta":138,"style":138},"brew install python\npython3 --version\npip3 --version\n",[140,146702,146703,146712,146718],{"__ignoreMap":138},[143,146704,146705,146708,146710],{"class":145,"line":146},[143,146706,146707],{"class":156},"brew",[143,146709,24732],{"class":163},[143,146711,125193],{"class":163},[143,146713,146714,146716],{"class":145,"line":35},[143,146715,101755],{"class":156},[143,146717,27191],{"class":280},[143,146719,146720,146722],{"class":145,"line":46},[143,146721,120575],{"class":156},[143,146723,27191],{"class":280},[63,146725,146726],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[58,146728,146730],{"id":146729},"_133-linux安装","1.3.3 Linux安装",[63,146732,146733],{},"Ubuntu\u002FDebian：",[133,146735,146737],{"className":24720,"code":146736,"language":24722,"meta":138,"style":138},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[140,146738,146739,146747,146762,146768],{"__ignoreMap":138},[143,146740,146741,146743,146745],{"class":145,"line":146},[143,146742,25474],{"class":156},[143,146744,118192],{"class":163},[143,146746,27140],{"class":163},[143,146748,146749,146751,146753,146755,146757,146759],{"class":145,"line":35},[143,146750,25474],{"class":156},[143,146752,118192],{"class":163},[143,146754,24732],{"class":163},[143,146756,105278],{"class":163},[143,146758,101674],{"class":163},[143,146760,146761],{"class":163}," python3-venv\n",[143,146763,146764,146766],{"class":145,"line":46},[143,146765,101755],{"class":156},[143,146767,27191],{"class":280},[143,146769,146770,146772],{"class":145,"line":293},[143,146771,120575],{"class":156},[143,146773,27191],{"class":280},[63,146775,146776],{},"Fedora：",[133,146778,146780],{"className":24720,"code":146779,"language":24722,"meta":138,"style":138},"sudo dnf install python3 python3-pip\n",[140,146781,146782],{"__ignoreMap":138},[143,146783,146784,146786,146788,146790,146792],{"class":145,"line":146},[143,146785,25474],{"class":156},[143,146787,27213],{"class":163},[143,146789,24732],{"class":163},[143,146791,105278],{"class":163},[143,146793,120640],{"class":163},[63,146795,146796,146797,146799],{},"Linux 上通常使用 ",[140,146798,101755],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146801,146803],{"id":146802},"_14-pip包管理器","1.4 pip包管理器",[63,146805,146806,146808],{},[140,146807,24729],{}," 用来安装第三方库。",[133,146810,146812],{"className":24720,"code":146811,"language":24722,"meta":138,"style":138},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[140,146813,146814,146823,146832,146840,146846],{"__ignoreMap":138},[143,146815,146816,146818,146820],{"class":145,"line":146},[143,146817,24729],{"class":156},[143,146819,24732],{"class":163},[143,146821,146822],{"class":163}," requests\n",[143,146824,146825,146827,146830],{"class":145,"line":35},[143,146826,24729],{"class":156},[143,146828,146829],{"class":163}," uninstall",[143,146831,146822],{"class":163},[143,146833,146834,146836,146838],{"class":145,"line":46},[143,146835,24729],{"class":156},[143,146837,118449],{"class":163},[143,146839,146822],{"class":163},[143,146841,146842,146844],{"class":145,"line":293},[143,146843,24729],{"class":156},[143,146845,119830],{"class":163},[143,146847,146848,146850],{"class":145,"line":306},[143,146849,24729],{"class":156},[143,146851,146852],{"class":163}," freeze\n",[63,146854,146855],{},"国内网络较慢时可以临时使用镜像：",[133,146857,146859],{"className":24720,"code":146858,"language":24722,"meta":138,"style":138},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[140,146860,146861],{"__ignoreMap":138},[143,146862,146863,146865,146867,146870,146872],{"class":145,"line":146},[143,146864,24729],{"class":156},[143,146866,24732],{"class":163},[143,146868,146869],{"class":163}," requests",[143,146871,27328],{"class":280},[143,146873,120603],{"class":163},[63,146875,146876],{},"常见第三方库：",[1181,146878,146879,146888],{},[1184,146880,146881],{},[1187,146882,146883,146886],{},[1190,146884,146885],{},"库",[1190,146887,103572],{},[1227,146889,146890,146898,146905,146913,146921,146929,146937],{},[1187,146891,146892,146895],{},[1232,146893,146894],{},"requests",[1232,146896,146897],{},"网络请求",[1187,146899,146900,146902],{},[1232,146901,101502],{},[1232,146903,146904],{},"数值计算",[1187,146906,146907,146910],{},[1232,146908,146909],{},"pandas",[1232,146911,146912],{},"表格数据处理",[1187,146914,146915,146918],{},[1232,146916,146917],{},"matplotlib",[1232,146919,146920],{},"绘图",[1187,146922,146923,146926],{},[1232,146924,146925],{},"pyecharts",[1232,146927,146928],{},"ECharts 图表",[1187,146930,146931,146934],{},[1232,146932,146933],{},"flask",[1232,146935,146936],{},"Web 后端",[1187,146938,146939,146942],{},[1232,146940,146941],{},"pytest",[1232,146943,146944],{},"自动化测试",[14,146946,146948],{"id":146947},"_15-虚拟环境","1.5 虚拟环境",[63,146950,146951,146952,146955],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[140,146953,146954],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[63,146957,146958],{},"创建虚拟环境：",[133,146960,146962],{"className":24720,"code":146961,"language":24722,"meta":138,"style":138},"python -m venv .venv\n",[140,146963,146964],{"__ignoreMap":138},[143,146965,146966,146968,146970,146972],{"class":145,"line":146},[143,146967,31278],{"class":156},[143,146969,101758],{"class":280},[143,146971,101761],{"class":163},[143,146973,101764],{"class":163},[63,146975,146976],{},"Windows 激活：",[133,146978,146980],{"className":24720,"code":146979,"language":24722,"meta":138,"style":138},".venv\\Scripts\\activate\n",[140,146981,146982],{"__ignoreMap":138},[143,146983,146984],{"class":145,"line":146},[143,146985,146979],{"class":156},[63,146987,146988],{},"macOS\u002FLinux 激活：",[133,146990,146992],{"className":24720,"code":146991,"language":24722,"meta":138,"style":138},"source .venv\u002Fbin\u002Factivate\n",[140,146993,146994],{"__ignoreMap":138},[143,146995,146996,146998],{"class":145,"line":146},[143,146997,101769],{"class":280},[143,146999,101772],{"class":163},[63,147001,147002],{},"退出虚拟环境：",[133,147004,147006],{"className":24720,"code":147005,"language":24722,"meta":138,"style":138},"deactivate\n",[140,147007,147008],{"__ignoreMap":138},[143,147009,147010],{"class":145,"line":146},[143,147011,147005],{"class":156},[63,147013,147014],{},"保存依赖：",[133,147016,147018],{"className":24720,"code":147017,"language":24722,"meta":138,"style":138},"pip freeze > requirements.txt\n",[140,147019,147020],{"__ignoreMap":138},[143,147021,147022,147024,147027,147029],{"class":145,"line":146},[143,147023,24729],{"class":156},[143,147025,147026],{"class":163}," freeze",[143,147028,27120],{"class":755},[143,147030,147031],{"class":163}," requirements.txt\n",[63,147033,147034],{},"安装依赖：",[133,147036,147038],{"className":24720,"code":147037,"language":24722,"meta":138,"style":138},"pip install -r requirements.txt\n",[140,147039,147040],{"__ignoreMap":138},[143,147041,147042,147044,147046,147048],{"class":145,"line":146},[143,147043,24729],{"class":156},[143,147045,24732],{"class":163},[143,147047,120514],{"class":280},[143,147049,147031],{"class":163},[14,147051,147053],{"id":147052},"_16-开发工具","1.6 开发工具",[58,147055,147057],{"id":147056},"_161-pycharm","1.6.1 PyCharm",[63,147059,147060],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[63,147062,122937],{},[19,147064,147065,147068,147071,147077,147080],{},[22,147066,147067],{},"New Project：创建项目。",[22,147069,147070],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[22,147072,147073,147074,126858],{},"New Python File：创建 ",[140,147075,147076],{},".py",[22,147078,147079],{},"Run：运行当前文件。",[22,147081,147082],{},"Debug：断点调试。",[58,147084,147086],{"id":147085},"_162-vs-code","1.6.2 VS Code",[63,147088,147089],{},"VS Code 轻量，适合后续多语言开发。",[63,147091,147092],{},"建议安装插件：",[19,147094,147095,147098,147101],{},[22,147096,147097],{},"Python。",[22,147099,147100],{},"Pylance。",[22,147102,147103],{},"Jupyter。",[63,147105,147106],{},"选择解释器：",[133,147108,147111],{"className":147109,"code":147110,"language":6087,"meta":138},[6085],"Ctrl + Shift + P -> Python: Select Interpreter\n",[140,147112,147110],{"__ignoreMap":138},[14,147114,147116],{"id":147115},"_17-第一个python程序","1.7 第一个Python程序",[63,147118,147119,147120,25516],{},"创建文件 ",[140,147121,147122],{},"hello.py",[133,147124,147126],{"className":31276,"code":147125,"language":31278,"meta":138,"style":138},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[140,147127,147128,147139],{"__ignoreMap":138},[143,147129,147130,147132,147134,147137],{"class":145,"line":146},[143,147131,31313],{"class":280},[143,147133,1049],{"class":149},[143,147135,147136],{"class":163},"\"Hello World\"",[143,147138,1055],{"class":149},[143,147140,147141,147143,147145,147148],{"class":145,"line":35},[143,147142,31313],{"class":280},[143,147144,1049],{"class":149},[143,147146,147147],{"class":163},"\"你好，Python\"",[143,147149,1055],{"class":149},[63,147151,147152],{},"在终端运行：",[133,147154,147156],{"className":24720,"code":147155,"language":24722,"meta":138,"style":138},"python hello.py\n",[140,147157,147158],{"__ignoreMap":138},[143,147159,147160,147162],{"class":145,"line":146},[143,147161,31278],{"class":156},[143,147163,147164],{"class":163}," hello.py\n",[63,147166,147167],{},"或：",[133,147169,147171],{"className":24720,"code":147170,"language":24722,"meta":138,"style":138},"python3 hello.py\n",[140,147172,147173],{"__ignoreMap":138},[143,147174,147175,147177],{"class":145,"line":146},[143,147176,101755],{"class":156},[143,147178,147164],{"class":163},[63,147180,147181],{},"输出：",[133,147183,147186],{"className":147184,"code":147185,"language":6087,"meta":138},[6085],"Hello World\n你好，Python\n",[140,147187,147185],{"__ignoreMap":138},[14,147189,147191],{"id":147190},"_18-print函数","1.8 print函数",[63,147193,147194,147197],{},[140,147195,147196],{},"print()"," 用来输出内容。",[133,147199,147201],{"className":31276,"code":147200,"language":31278,"meta":138,"style":138},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[140,147202,147203,147213,147223,147233],{"__ignoreMap":138},[143,147204,147205,147207,147209,147211],{"class":145,"line":146},[143,147206,31313],{"class":280},[143,147208,1049],{"class":149},[143,147210,6744],{"class":163},[143,147212,1055],{"class":149},[143,147214,147215,147217,147219,147221],{"class":145,"line":35},[143,147216,31313],{"class":280},[143,147218,1049],{"class":149},[143,147220,1352],{"class":280},[143,147222,1055],{"class":149},[143,147224,147225,147227,147229,147231],{"class":145,"line":46},[143,147226,31313],{"class":280},[143,147228,1049],{"class":149},[143,147230,1095],{"class":280},[143,147232,1055],{"class":149},[143,147234,147235,147237,147239,147242,147244,147246],{"class":145,"line":293},[143,147236,31313],{"class":280},[143,147238,1049],{"class":149},[143,147240,147241],{"class":163},"\"年龄:\"",[143,147243,13335],{"class":149},[143,147245,1691],{"class":280},[143,147247,1055],{"class":149},[63,147249,147250],{},"多个内容用逗号隔开，默认中间加空格：",[133,147252,147254],{"className":31276,"code":147253,"language":31278,"meta":138,"style":138},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[140,147255,147256,147266,147276],{"__ignoreMap":138},[143,147257,147258,147261,147263],{"class":145,"line":146},[143,147259,147260],{"class":149},"name ",[143,147262,160],{"class":755},[143,147264,147265],{"class":163}," \"张三\"\n",[143,147267,147268,147271,147273],{"class":145,"line":35},[143,147269,147270],{"class":149},"age ",[143,147272,160],{"class":755},[143,147274,147275],{"class":280}," 18\n",[143,147277,147278,147280,147282,147285,147288,147290],{"class":145,"line":46},[143,147279,31313],{"class":280},[143,147281,1049],{"class":149},[143,147283,147284],{"class":163},"\"姓名:\"",[143,147286,147287],{"class":149},", name, ",[143,147289,147241],{"class":163},[143,147291,147292],{"class":149},", age)\n",[63,147294,147295],{},"修改分隔符：",[133,147297,147299],{"className":31276,"code":147298,"language":31278,"meta":138,"style":138},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[140,147300,147301],{"__ignoreMap":138},[143,147302,147303,147305,147307,147310,147312,147314,147316,147318,147320,147323,147325,147327],{"class":145,"line":146},[143,147304,31313],{"class":280},[143,147306,1049],{"class":149},[143,147308,147309],{"class":163},"\"2024\"",[143,147311,13335],{"class":149},[143,147313,55201],{"class":163},[143,147315,13335],{"class":149},[143,147317,55201],{"class":163},[143,147319,13335],{"class":149},[143,147321,147322],{"class":6116},"sep",[143,147324,160],{"class":755},[143,147326,33381],{"class":163},[143,147328,1055],{"class":149},[63,147330,147331],{},"修改结尾符：",[133,147333,147335],{"className":31276,"code":147334,"language":31278,"meta":138,"style":138},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[140,147336,147337,147355],{"__ignoreMap":138},[143,147338,147339,147341,147343,147345,147347,147349,147351,147353],{"class":145,"line":146},[143,147340,31313],{"class":280},[143,147342,1049],{"class":149},[143,147344,6744],{"class":163},[143,147346,13335],{"class":149},[143,147348,46699],{"class":6116},[143,147350,160],{"class":755},[143,147352,5259],{"class":163},[143,147354,1055],{"class":149},[143,147356,147357,147359,147361,147364],{"class":145,"line":35},[143,147358,31313],{"class":280},[143,147360,1049],{"class":149},[143,147362,147363],{"class":163},"\"python\"",[143,147365,1055],{"class":149},[14,147367,147369],{"id":147368},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[63,147371,147372],{},"交互运行适合临时验证：",[133,147374,147376],{"className":31276,"code":147375,"language":31278,"meta":138,"style":138},">>> 10 * 3\n30\n",[140,147377,147378,147388],{"__ignoreMap":138},[143,147379,147380,147382,147384,147386],{"class":145,"line":146},[143,147381,146577],{"class":755},[143,147383,2938],{"class":280},[143,147385,7418],{"class":755},[143,147387,120911],{"class":280},[143,147389,147390],{"class":145,"line":35},[143,147391,147392],{"class":280},"30\n",[63,147394,147395],{},"脚本运行适合保存程序：",[133,147397,147399],{"className":31276,"code":147398,"language":31278,"meta":138,"style":138},"price = 8\ncount = 5\nprint(price * count)\n",[140,147400,147401,147411,147420],{"__ignoreMap":138},[143,147402,147403,147406,147408],{"class":145,"line":146},[143,147404,147405],{"class":149},"price ",[143,147407,160],{"class":755},[143,147409,147410],{"class":280}," 8\n",[143,147412,147413,147416,147418],{"class":145,"line":35},[143,147414,147415],{"class":149},"count ",[143,147417,160],{"class":755},[143,147419,55312],{"class":280},[143,147421,147422,147424,147427,147429],{"class":145,"line":46},[143,147423,31313],{"class":280},[143,147425,147426],{"class":149},"(price ",[143,147428,1496],{"class":755},[143,147430,147431],{"class":149}," count)\n",[63,147433,147434],{},"实际学习中推荐：",[19,147436,147437,147440,147445],{},[22,147438,147439],{},"临时试一个语法，用交互模式。",[22,147441,147442,147443,126858],{},"写完整练习，用 ",[140,147444,147076],{},[22,147446,147447],{},"写项目，用独立目录和虚拟环境。",[14,147449,147451],{"id":147450},"_110-常见错误","1.10 常见错误",[58,147453,147455],{"id":147454},"_1101-命令找不到","1.10.1 命令找不到",[133,147457,147460],{"className":147458,"code":147459,"language":6087,"meta":138},[6085],"python: command not found\n",[140,147461,147459],{"__ignoreMap":138},[63,147463,147464],{},"原因：",[19,147466,147467,147470,147473],{},[22,147468,147469],{},"没安装 Python。",[22,147471,147472],{},"PATH 没配置。",[22,147474,147475,147476,29283],{},"Linux\u002FmacOS 应该使用 ",[140,147477,101755],{},[58,147479,147481],{"id":147480},"_1102-文件名冲突","1.10.2 文件名冲突",[63,147483,147484],{},"不要把文件命名为：",[133,147486,147489],{"className":147487,"code":147488,"language":6087,"meta":138},[6085],"random.py\njson.py\ntime.py\nrequests.py\n",[140,147490,147488],{"__ignoreMap":138},[63,147492,147493],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[58,147495,147497],{"id":147496},"_1103-中文乱码","1.10.3 中文乱码",[63,147499,147500],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[63,147502,147503],{},"如果读写文件出现乱码，要明确指定编码：",[133,147505,147507],{"className":31276,"code":147506,"language":31278,"meta":138,"style":138},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[140,147508,147509,147543],{"__ignoreMap":138},[143,147510,147511,147513,147516,147518,147521,147523,147526,147528,147531,147533,147536,147538,147540],{"class":145,"line":146},[143,147512,108708],{"class":755},[143,147514,147515],{"class":280}," open",[143,147517,1049],{"class":149},[143,147519,147520],{"class":163},"\"data.txt\"",[143,147522,13335],{"class":149},[143,147524,147525],{"class":163},"\"r\"",[143,147527,13335],{"class":149},[143,147529,147530],{"class":6116},"encoding",[143,147532,160],{"class":755},[143,147534,147535],{"class":163},"\"utf-8\"",[143,147537,14614],{"class":149},[143,147539,32281],{"class":755},[143,147541,147542],{"class":149}," f:\n",[143,147544,147545,147548,147550],{"class":145,"line":35},[143,147546,147547],{"class":149},"    content ",[143,147549,160],{"class":755},[143,147551,147552],{"class":149}," f.read()\n",[14,147554,147556],{"id":147555},"_111-本章练习","1.11 本章练习",[19,147558,147559,147562,147568],{},[22,147560,147561],{},"安装 Python，并在终端输出版本号。",[22,147563,147564,147565,147567],{},"新建 ",[140,147566,147122],{},"，输出自己的姓名、年龄、学习目标。",[22,147569,105241,147570,147572],{},[140,147571,147196],{}," 输出下面格式：",[133,147574,147577],{"className":147575,"code":147576,"language":6087,"meta":138},[6085],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[140,147578,147576],{"__ignoreMap":138},[19,147580,147581],{"start":293},[22,147582,105241,147583,147585],{},[140,147584,147322],{}," 输出日期：",[133,147587,147590],{"className":147588,"code":147589,"language":6087,"meta":138},[6085],"2024-10-10\n",[140,147591,147589],{"__ignoreMap":138},[19,147593,147594],{"start":306},[22,147595,105241,147596,147598,147599,147601],{},[140,147597,46699],{}," 让两次 ",[140,147600,147196],{}," 输出在同一行。",[954,147603,147604],{},"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":138,"searchDepth":35,"depth":35,"links":147606},[147607,147608,147609,147614,147615,147616,147620,147621,147622,147623,147628],{"id":146489,"depth":35,"text":146490},{"id":146533,"depth":35,"text":146534},{"id":146634,"depth":35,"text":146635,"children":147610},[147611,147612,147613],{"id":146638,"depth":46,"text":146639},{"id":146693,"depth":46,"text":146694},{"id":146729,"depth":46,"text":146730},{"id":146802,"depth":35,"text":146803},{"id":146947,"depth":35,"text":146948},{"id":147052,"depth":35,"text":147053,"children":147617},[147618,147619],{"id":147056,"depth":46,"text":147057},{"id":147085,"depth":46,"text":147086},{"id":147115,"depth":35,"text":147116},{"id":147190,"depth":35,"text":147191},{"id":147368,"depth":35,"text":147369},{"id":147450,"depth":35,"text":147451,"children":147624},[147625,147626,147627],{"id":147454,"depth":46,"text":147455},{"id":147480,"depth":46,"text":147481},{"id":147496,"depth":46,"text":147497},{"id":147555,"depth":35,"text":147556},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146481,"description":973},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147635,"title":147636,"body":147637,"description":973,"extension":974,"meta":150041,"navigation":976,"path":150042,"seo":150043,"stem":150044,"__hash__":150045},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147638,"toc":150026},[147639,147642,147646,147649,147652,147669,147672,147714,147717,147721,147724,147727,147764,147767,147801,147804,147896,147900,147914,147917,147944,147947,147951,148054,148061,148064,148081,148085,148092,148281,148284,148357,148361,148364,148448,148451,148483,148487,148691,148694,148698,148704,148806,148809,149065,149069,149072,149075,149089,149091,149277,149281,149643,149649,149653,149656,149780,149783,149962,149965,149969,150002,150006,150023],[10,147640,147636],{"id":147641},"_10-json与pyecharts折线图",[14,147643,147645],{"id":147644},"_101-数据可视化","10.1 数据可视化",[63,147647,147648],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[63,147650,147651],{},"常见图表：",[19,147653,147654,147657,147660,147663,147666],{},[22,147655,147656],{},"折线图：看趋势。",[22,147658,147659],{},"柱状图：看分类对比。",[22,147661,147662],{},"饼图：看占比。",[22,147664,147665],{},"地图：看地域分布。",[22,147667,147668],{},"散点图：看两个变量之间的关系。",[63,147670,147671],{},"Python 可视化常用库：",[1181,147673,147674,147682],{},[1184,147675,147676],{},[1187,147677,147678,147680],{},[1190,147679,146885],{},[1190,147681,24638],{},[1227,147683,147684,147691,147699,147706],{},[1187,147685,147686,147688],{},[1232,147687,146917],{},[1232,147689,147690],{},"基础、经典、可定制",[1187,147692,147693,147696],{},[1232,147694,147695],{},"seaborn",[1232,147697,147698],{},"统计图表更美观",[1187,147700,147701,147703],{},[1232,147702,146925],{},[1232,147704,147705],{},"生成交互式网页图表",[1187,147707,147708,147711],{},[1232,147709,147710],{},"plotly",[1232,147712,147713],{},"交互图表能力强",[63,147715,147716],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147718,147720],{"id":147719},"_102-json回顾","10.2 JSON回顾",[63,147722,147723],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[63,147725,147726],{},"Python 字典：",[133,147728,147730],{"className":31276,"code":147729,"language":31278,"meta":138,"style":138},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[140,147731,147732,147740,147751,147760],{"__ignoreMap":138},[143,147733,147734,147736,147738],{"class":145,"line":146},[143,147735,102534],{"class":149},[143,147737,160],{"class":755},[143,147739,275],{"class":149},[143,147741,147742,147745,147747,147749],{"class":145,"line":35},[143,147743,147744],{"class":163},"    \"name\"",[143,147746,284],{"class":149},[143,147748,70150],{"class":163},[143,147750,32364],{"class":149},[143,147752,147753,147756,147758],{"class":145,"line":46},[143,147754,147755],{"class":163},"    \"value\"",[143,147757,284],{"class":149},[143,147759,98334],{"class":280},[143,147761,147762],{"class":145,"line":293},[143,147763,348],{"class":149},[63,147765,147766],{},"JSON 字符串：",[133,147768,147771],{"className":147769,"code":147770,"language":146516,"meta":138,"style":138},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[140,147772,147773,147777,147788,147797],{"__ignoreMap":138},[143,147774,147775],{"class":145,"line":146},[143,147776,2449],{"class":149},[143,147778,147779,147782,147784,147786],{"class":145,"line":35},[143,147780,147781],{"class":280},"  \"name\"",[143,147783,284],{"class":149},[143,147785,70150],{"class":163},[143,147787,32364],{"class":149},[143,147789,147790,147793,147795],{"class":145,"line":46},[143,147791,147792],{"class":280},"  \"value\"",[143,147794,284],{"class":149},[143,147796,98334],{"class":280},[143,147798,147799],{"class":145,"line":293},[143,147800,348],{"class":149},[63,147802,147803],{},"Python 与 JSON 的转换：",[133,147805,147807],{"className":31276,"code":147806,"language":31278,"meta":138,"style":138},"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",[140,147808,147809,147816,147820,147845,147849,147868,147875,147879,147889],{"__ignoreMap":138},[143,147810,147811,147813],{"class":145,"line":146},[143,147812,31290],{"class":755},[143,147814,147815],{"class":149}," json\n",[143,147817,147818],{"class":145,"line":35},[143,147819,3300],{"emptyLinePlaceholder":976},[143,147821,147822,147824,147826,147828,147830,147832,147834,147836,147839,147841,147843],{"class":145,"line":46},[143,147823,102534],{"class":149},[143,147825,160],{"class":755},[143,147827,5348],{"class":149},[143,147829,63562],{"class":163},[143,147831,284],{"class":149},[143,147833,70150],{"class":163},[143,147835,13335],{"class":149},[143,147837,147838],{"class":163},"\"value\"",[143,147840,284],{"class":149},[143,147842,1352],{"class":280},[143,147844,348],{"class":149},[143,147846,147847],{"class":145,"line":293},[143,147848,3300],{"emptyLinePlaceholder":976},[143,147850,147851,147854,147856,147859,147862,147864,147866],{"class":145,"line":306},[143,147852,147853],{"class":149},"json_text ",[143,147855,160],{"class":755},[143,147857,147858],{"class":149}," json.dumps(data, ",[143,147860,147861],{"class":6116},"ensure_ascii",[143,147863,160],{"class":755},[143,147865,34885],{"class":280},[143,147867,1055],{"class":149},[143,147869,147870,147872],{"class":145,"line":319},[143,147871,31313],{"class":280},[143,147873,147874],{"class":149},"(json_text)\n",[143,147876,147877],{"class":145,"line":332},[143,147878,3300],{"emptyLinePlaceholder":976},[143,147880,147881,147884,147886],{"class":145,"line":345},[143,147882,147883],{"class":149},"new_data ",[143,147885,160],{"class":755},[143,147887,147888],{"class":149}," json.loads(json_text)\n",[143,147890,147891,147893],{"class":145,"line":701},[143,147892,31313],{"class":280},[143,147894,147895],{"class":149},"(new_data)\n",[14,147897,147899],{"id":147898},"_103-安装pyecharts","10.3 安装pyecharts",[133,147901,147903],{"className":24720,"code":147902,"language":24722,"meta":138,"style":138},"pip install pyecharts\n",[140,147904,147905],{"__ignoreMap":138},[143,147906,147907,147909,147911],{"class":145,"line":146},[143,147908,24729],{"class":156},[143,147910,24732],{"class":163},[143,147912,147913],{"class":163}," pyecharts\n",[63,147915,147916],{},"验证：",[133,147918,147920],{"className":31276,"code":147919,"language":31278,"meta":138,"style":138},"import pyecharts\n\nprint(pyecharts.__version__)\n",[140,147921,147922,147928,147932],{"__ignoreMap":138},[143,147923,147924,147926],{"class":145,"line":146},[143,147925,31290],{"class":755},[143,147927,147913],{"class":149},[143,147929,147930],{"class":145,"line":35},[143,147931,3300],{"emptyLinePlaceholder":976},[143,147933,147934,147936,147939,147942],{"class":145,"line":46},[143,147935,31313],{"class":280},[143,147937,147938],{"class":149},"(pyecharts.",[143,147940,147941],{"class":280},"__version__",[143,147943,1055],{"class":149},[63,147945,147946],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147948,147950],{"id":147949},"_104-第一个折线图","10.4 第一个折线图",[133,147952,147954],{"className":31276,"code":147953,"language":31278,"meta":138,"style":138},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[140,147955,147956,147968,147972,147982,148012,148044],{"__ignoreMap":138},[143,147957,147958,147960,147963,147965],{"class":145,"line":146},[143,147959,31635],{"class":755},[143,147961,147962],{"class":149}," pyecharts.charts ",[143,147964,31290],{"class":755},[143,147966,147967],{"class":149}," Line\n",[143,147969,147970],{"class":145,"line":35},[143,147971,3300],{"emptyLinePlaceholder":976},[143,147973,147974,147977,147979],{"class":145,"line":46},[143,147975,147976],{"class":149},"line ",[143,147978,160],{"class":755},[143,147980,147981],{"class":149}," Line()\n",[143,147983,147984,147987,147990,147992,147995,147997,148000,148002,148005,148007,148010],{"class":145,"line":293},[143,147985,147986],{"class":149},"line.add_xaxis([",[143,147988,147989],{"class":163},"\"周一\"",[143,147991,13335],{"class":149},[143,147993,147994],{"class":163},"\"周二\"",[143,147996,13335],{"class":149},[143,147998,147999],{"class":163},"\"周三\"",[143,148001,13335],{"class":149},[143,148003,148004],{"class":163},"\"周四\"",[143,148006,13335],{"class":149},[143,148008,148009],{"class":163},"\"周五\"",[143,148011,5557],{"class":149},[143,148013,148014,148017,148020,148022,148024,148026,148028,148030,148032,148034,148037,148039,148042],{"class":145,"line":306},[143,148015,148016],{"class":149},"line.add_yaxis(",[143,148018,148019],{"class":163},"\"销售额\"",[143,148021,78397],{"class":149},[143,148023,1352],{"class":280},[143,148025,13335],{"class":149},[143,148027,1858],{"class":280},[143,148029,13335],{"class":149},[143,148031,1903],{"class":280},[143,148033,13335],{"class":149},[143,148035,148036],{"class":280},"150",[143,148038,13335],{"class":149},[143,148040,148041],{"class":280},"180",[143,148043,5557],{"class":149},[143,148045,148046,148049,148052],{"class":145,"line":319},[143,148047,148048],{"class":149},"line.render(",[143,148050,148051],{"class":163},"\"line.html\"",[143,148053,1055],{"class":149},[63,148055,148056,148057,148060],{},"运行后会生成 ",[140,148058,148059],{},"line.html","，用浏览器打开即可看到图表。",[63,148062,148063],{},"核心步骤：",[19,148065,148066,148069,148072,148075,148078],{},[22,148067,148068],{},"导入图表类。",[22,148070,148071],{},"创建图表对象。",[22,148073,148074],{},"添加 x 轴数据。",[22,148076,148077],{},"添加 y 轴数据。",[22,148079,148080],{},"渲染为 HTML。",[14,148082,148084],{"id":148083},"_105-全局配置","10.5 全局配置",[63,148086,148087,148088,148091],{},"常用配置在 ",[140,148089,148090],{},"pyecharts.options"," 中。",[133,148093,148095],{"className":31276,"code":148094,"language":31278,"meta":138,"style":138},"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",[140,148096,148097,148114,148124,148128,148136,148160,148188,148193,148212,148231,148249,148269,148273],{"__ignoreMap":138},[143,148098,148099,148101,148104,148106,148109,148111],{"class":145,"line":146},[143,148100,31635],{"class":755},[143,148102,148103],{"class":149}," pyecharts ",[143,148105,31290],{"class":755},[143,148107,148108],{"class":149}," options ",[143,148110,32281],{"class":755},[143,148112,148113],{"class":149}," opts\n",[143,148115,148116,148118,148120,148122],{"class":145,"line":35},[143,148117,31635],{"class":755},[143,148119,147962],{"class":149},[143,148121,31290],{"class":755},[143,148123,147967],{"class":149},[143,148125,148126],{"class":145,"line":46},[143,148127,3300],{"emptyLinePlaceholder":976},[143,148129,148130,148132,148134],{"class":145,"line":293},[143,148131,147976],{"class":149},[143,148133,160],{"class":755},[143,148135,147981],{"class":149},[143,148137,148138,148140,148142,148144,148146,148148,148150,148152,148154,148156,148158],{"class":145,"line":306},[143,148139,147986],{"class":149},[143,148141,147989],{"class":163},[143,148143,13335],{"class":149},[143,148145,147994],{"class":163},[143,148147,13335],{"class":149},[143,148149,147999],{"class":163},[143,148151,13335],{"class":149},[143,148153,148004],{"class":163},[143,148155,13335],{"class":149},[143,148157,148009],{"class":163},[143,148159,5557],{"class":149},[143,148161,148162,148164,148166,148168,148170,148172,148174,148176,148178,148180,148182,148184,148186],{"class":145,"line":319},[143,148163,148016],{"class":149},[143,148165,148019],{"class":163},[143,148167,78397],{"class":149},[143,148169,1352],{"class":280},[143,148171,13335],{"class":149},[143,148173,1858],{"class":280},[143,148175,13335],{"class":149},[143,148177,1903],{"class":280},[143,148179,13335],{"class":149},[143,148181,148036],{"class":280},[143,148183,13335],{"class":149},[143,148185,148041],{"class":280},[143,148187,5557],{"class":149},[143,148189,148190],{"class":145,"line":332},[143,148191,148192],{"class":149},"line.set_global_opts(\n",[143,148194,148195,148198,148200,148203,148205,148207,148210],{"class":145,"line":345},[143,148196,148197],{"class":6116},"    title_opts",[143,148199,160],{"class":755},[143,148201,148202],{"class":149},"opts.TitleOpts(",[143,148204,52303],{"class":6116},[143,148206,160],{"class":755},[143,148208,148209],{"class":163},"\"一周销售额\"",[143,148211,38945],{"class":149},[143,148213,148214,148217,148219,148222,148224,148226,148229],{"class":145,"line":701},[143,148215,148216],{"class":6116},"    xaxis_opts",[143,148218,160],{"class":755},[143,148220,148221],{"class":149},"opts.AxisOpts(",[143,148223,80688],{"class":6116},[143,148225,160],{"class":755},[143,148227,148228],{"class":163},"\"日期\"",[143,148230,38945],{"class":149},[143,148232,148233,148236,148238,148240,148242,148244,148247],{"class":145,"line":707},[143,148234,148235],{"class":6116},"    yaxis_opts",[143,148237,160],{"class":755},[143,148239,148221],{"class":149},[143,148241,80688],{"class":6116},[143,148243,160],{"class":755},[143,148245,148246],{"class":163},"\"金额\"",[143,148248,38945],{"class":149},[143,148250,148251,148254,148256,148259,148262,148264,148267],{"class":145,"line":727},[143,148252,148253],{"class":6116},"    tooltip_opts",[143,148255,160],{"class":755},[143,148257,148258],{"class":149},"opts.TooltipOpts(",[143,148260,148261],{"class":6116},"trigger",[143,148263,160],{"class":755},[143,148265,148266],{"class":163},"\"axis\"",[143,148268,38945],{"class":149},[143,148270,148271],{"class":145,"line":2518},[143,148272,1055],{"class":149},[143,148274,148275,148277,148279],{"class":145,"line":2524},[143,148276,148048],{"class":149},[143,148278,148051],{"class":163},[143,148280,1055],{"class":149},[63,148282,148283],{},"常见全局配置：",[1181,148285,148286,148295],{},[1184,148287,148288],{},[1187,148289,148290,148293],{},[1190,148291,148292],{},"配置",[1190,148294,103572],{},[1227,148296,148297,148307,148317,148327,148337,148347],{},[1187,148298,148299,148304],{},[1232,148300,148301],{},[140,148302,148303],{},"TitleOpts",[1232,148305,148306],{},"标题",[1187,148308,148309,148314],{},[1232,148310,148311],{},[140,148312,148313],{},"LegendOpts",[1232,148315,148316],{},"图例",[1187,148318,148319,148324],{},[1232,148320,148321],{},[140,148322,148323],{},"TooltipOpts",[1232,148325,148326],{},"提示框",[1187,148328,148329,148334],{},[1232,148330,148331],{},[140,148332,148333],{},"AxisOpts",[1232,148335,148336],{},"坐标轴",[1187,148338,148339,148344],{},[1232,148340,148341],{},[140,148342,148343],{},"VisualMapOpts",[1232,148345,148346],{},"视觉映射",[1187,148348,148349,148354],{},[1232,148350,148351],{},[140,148352,148353],{},"DataZoomOpts",[1232,148355,148356],{},"区域缩放",[14,148358,148360],{"id":148359},"_106-系列配置","10.6 系列配置",[63,148362,148363],{},"系列配置作用于某一组数据。",[133,148365,148367],{"className":31276,"code":148366,"language":31278,"meta":138,"style":138},"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",[140,148368,148369,148374,148385,148414,148425,148444],{"__ignoreMap":138},[143,148370,148371],{"class":145,"line":146},[143,148372,148373],{"class":149},"line.add_yaxis(\n",[143,148375,148376,148379,148381,148383],{"class":145,"line":35},[143,148377,148378],{"class":6116},"    series_name",[143,148380,160],{"class":755},[143,148382,148019],{"class":163},[143,148384,32364],{"class":149},[143,148386,148387,148390,148392,148394,148396,148398,148400,148402,148404,148406,148408,148410,148412],{"class":145,"line":46},[143,148388,148389],{"class":6116},"    y_axis",[143,148391,160],{"class":755},[143,148393,749],{"class":149},[143,148395,1352],{"class":280},[143,148397,13335],{"class":149},[143,148399,1858],{"class":280},[143,148401,13335],{"class":149},[143,148403,1903],{"class":280},[143,148405,13335],{"class":149},[143,148407,148036],{"class":280},[143,148409,13335],{"class":149},[143,148411,148041],{"class":280},[143,148413,88714],{"class":149},[143,148415,148416,148419,148421,148423],{"class":145,"line":293},[143,148417,148418],{"class":6116},"    is_smooth",[143,148420,160],{"class":755},[143,148422,32374],{"class":280},[143,148424,32364],{"class":149},[143,148426,148427,148430,148432,148435,148438,148440,148442],{"class":145,"line":306},[143,148428,148429],{"class":6116},"    label_opts",[143,148431,160],{"class":755},[143,148433,148434],{"class":149},"opts.LabelOpts(",[143,148436,148437],{"class":6116},"is_show",[143,148439,160],{"class":755},[143,148441,32374],{"class":280},[143,148443,38945],{"class":149},[143,148445,148446],{"class":145,"line":319},[143,148447,1055],{"class":149},[63,148449,148450],{},"常用参数：",[19,148452,148453,148459,148465,148471,148477],{},[22,148454,148455,148458],{},[140,148456,148457],{},"series_name","：系列名称。",[22,148460,148461,148464],{},[140,148462,148463],{},"y_axis","：y 轴数据。",[22,148466,148467,148470],{},[140,148468,148469],{},"is_smooth","：是否平滑曲线。",[22,148472,148473,148476],{},[140,148474,148475],{},"label_opts","：标签配置。",[22,148478,148479,148482],{},[140,148480,148481],{},"symbol_size","：标记点大小。",[14,148484,148486],{"id":148485},"_107-多条折线","10.7 多条折线",[133,148488,148490],{"className":31276,"code":148489,"language":31278,"meta":138,"style":138},"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",[140,148491,148492,148506,148516,148520,148549,148553,148561,148566,148604,148641,148645,148662,148678,148682],{"__ignoreMap":138},[143,148493,148494,148496,148498,148500,148502,148504],{"class":145,"line":146},[143,148495,31635],{"class":755},[143,148497,148103],{"class":149},[143,148499,31290],{"class":755},[143,148501,148108],{"class":149},[143,148503,32281],{"class":755},[143,148505,148113],{"class":149},[143,148507,148508,148510,148512,148514],{"class":145,"line":35},[143,148509,31635],{"class":755},[143,148511,147962],{"class":149},[143,148513,31290],{"class":755},[143,148515,147967],{"class":149},[143,148517,148518],{"class":145,"line":46},[143,148519,3300],{"emptyLinePlaceholder":976},[143,148521,148522,148525,148527,148529,148531,148533,148535,148537,148539,148541,148543,148545,148547],{"class":145,"line":293},[143,148523,148524],{"class":149},"dates ",[143,148526,160],{"class":755},[143,148528,53113],{"class":149},[143,148530,147989],{"class":163},[143,148532,13335],{"class":149},[143,148534,147994],{"class":163},[143,148536,13335],{"class":149},[143,148538,147999],{"class":163},[143,148540,13335],{"class":149},[143,148542,148004],{"class":163},[143,148544,13335],{"class":149},[143,148546,148009],{"class":163},[143,148548,34144],{"class":149},[143,148550,148551],{"class":145,"line":306},[143,148552,3300],{"emptyLinePlaceholder":976},[143,148554,148555,148557,148559],{"class":145,"line":319},[143,148556,147976],{"class":149},[143,148558,160],{"class":755},[143,148560,147981],{"class":149},[143,148562,148563],{"class":145,"line":332},[143,148564,148565],{"class":149},"line.add_xaxis(dates)\n",[143,148567,148568,148570,148573,148575,148577,148579,148582,148584,148586,148588,148590,148592,148594,148596,148598,148600,148602],{"class":145,"line":345},[143,148569,148016],{"class":149},[143,148571,148572],{"class":163},"\"线上销售\"",[143,148574,78397],{"class":149},[143,148576,1352],{"class":280},[143,148578,13335],{"class":149},[143,148580,148581],{"class":280},"130",[143,148583,13335],{"class":149},[143,148585,1858],{"class":280},[143,148587,13335],{"class":149},[143,148589,21946],{"class":280},[143,148591,13335],{"class":149},[143,148593,2623],{"class":280},[143,148595,113077],{"class":149},[143,148597,148469],{"class":6116},[143,148599,160],{"class":755},[143,148601,32374],{"class":280},[143,148603,1055],{"class":149},[143,148605,148606,148608,148611,148613,148615,148617,148619,148621,148623,148625,148627,148629,148631,148633,148635,148637,148639],{"class":145,"line":701},[143,148607,148016],{"class":149},[143,148609,148610],{"class":163},"\"线下销售\"",[143,148612,78397],{"class":149},[143,148614,1653],{"class":280},[143,148616,13335],{"class":149},[143,148618,1903],{"class":280},[143,148620,13335],{"class":149},[143,148622,1352],{"class":280},[143,148624,13335],{"class":149},[143,148626,1858],{"class":280},[143,148628,13335],{"class":149},[143,148630,148036],{"class":280},[143,148632,113077],{"class":149},[143,148634,148469],{"class":6116},[143,148636,160],{"class":755},[143,148638,32374],{"class":280},[143,148640,1055],{"class":149},[143,148642,148643],{"class":145,"line":707},[143,148644,148192],{"class":149},[143,148646,148647,148649,148651,148653,148655,148657,148660],{"class":145,"line":727},[143,148648,148197],{"class":6116},[143,148650,160],{"class":755},[143,148652,148202],{"class":149},[143,148654,52303],{"class":6116},[143,148656,160],{"class":755},[143,148658,148659],{"class":163},"\"线上线下销售趋势\"",[143,148661,38945],{"class":149},[143,148663,148664,148666,148668,148670,148672,148674,148676],{"class":145,"line":2518},[143,148665,148253],{"class":6116},[143,148667,160],{"class":755},[143,148669,148258],{"class":149},[143,148671,148261],{"class":6116},[143,148673,160],{"class":755},[143,148675,148266],{"class":163},[143,148677,38945],{"class":149},[143,148679,148680],{"class":145,"line":2524},[143,148681,1055],{"class":149},[143,148683,148684,148686,148689],{"class":145,"line":2529},[143,148685,148048],{"class":149},[143,148687,148688],{"class":163},"\"sales.html\"",[143,148690,1055],{"class":149},[63,148692,148693],{},"多条折线适合比较不同指标或不同地区。",[14,148695,148697],{"id":148696},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[63,148699,148700,148701,25516],{},"假设 ",[140,148702,148703],{},"sales.json",[133,148705,148707],{"className":147769,"code":148706,"language":146516,"meta":138,"style":138},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[140,148708,148709,148714,148746,148774,148802],{"__ignoreMap":138},[143,148710,148711],{"class":145,"line":146},[143,148712,148713],{"class":149},"[\n",[143,148715,148716,148719,148722,148724,148726,148728,148731,148733,148735,148737,148740,148742,148744],{"class":145,"line":35},[143,148717,148718],{"class":149},"  {",[143,148720,148721],{"class":280},"\"date\"",[143,148723,284],{"class":149},[143,148725,147989],{"class":163},[143,148727,13335],{"class":149},[143,148729,148730],{"class":280},"\"online\"",[143,148732,284],{"class":149},[143,148734,1352],{"class":280},[143,148736,13335],{"class":149},[143,148738,148739],{"class":280},"\"offline\"",[143,148741,284],{"class":149},[143,148743,1653],{"class":280},[143,148745,5830],{"class":149},[143,148747,148748,148750,148752,148754,148756,148758,148760,148762,148764,148766,148768,148770,148772],{"class":145,"line":46},[143,148749,148718],{"class":149},[143,148751,148721],{"class":280},[143,148753,284],{"class":149},[143,148755,147994],{"class":163},[143,148757,13335],{"class":149},[143,148759,148730],{"class":280},[143,148761,284],{"class":149},[143,148763,148581],{"class":280},[143,148765,13335],{"class":149},[143,148767,148739],{"class":280},[143,148769,284],{"class":149},[143,148771,1903],{"class":280},[143,148773,5830],{"class":149},[143,148775,148776,148778,148780,148782,148784,148786,148788,148790,148792,148794,148796,148798,148800],{"class":145,"line":293},[143,148777,148718],{"class":149},[143,148779,148721],{"class":280},[143,148781,284],{"class":149},[143,148783,147999],{"class":163},[143,148785,13335],{"class":149},[143,148787,148730],{"class":280},[143,148789,284],{"class":149},[143,148791,1858],{"class":280},[143,148793,13335],{"class":149},[143,148795,148739],{"class":280},[143,148797,284],{"class":149},[143,148799,1352],{"class":280},[143,148801,348],{"class":149},[143,148803,148804],{"class":145,"line":306},[143,148805,34144],{"class":149},[63,148807,148808],{},"读取并绘图：",[133,148810,148812],{"className":31276,"code":148811,"language":31278,"meta":138,"style":138},"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",[140,148813,148814,148820,148834,148844,148848,148880,148893,148897,148905,148914,148923,148927,148939,148948,148957,148966,148970,148978,148982,148999,149016,149020,149037,149053,149057],{"__ignoreMap":138},[143,148815,148816,148818],{"class":145,"line":146},[143,148817,31290],{"class":755},[143,148819,147815],{"class":149},[143,148821,148822,148824,148826,148828,148830,148832],{"class":145,"line":35},[143,148823,31635],{"class":755},[143,148825,148103],{"class":149},[143,148827,31290],{"class":755},[143,148829,148108],{"class":149},[143,148831,32281],{"class":755},[143,148833,148113],{"class":149},[143,148835,148836,148838,148840,148842],{"class":145,"line":46},[143,148837,31635],{"class":755},[143,148839,147962],{"class":149},[143,148841,31290],{"class":755},[143,148843,147967],{"class":149},[143,148845,148846],{"class":145,"line":293},[143,148847,3300],{"emptyLinePlaceholder":976},[143,148849,148850,148852,148854,148856,148859,148861,148863,148865,148867,148869,148871,148873,148875,148878],{"class":145,"line":306},[143,148851,108708],{"class":755},[143,148853,147515],{"class":280},[143,148855,1049],{"class":149},[143,148857,148858],{"class":163},"\"sales.json\"",[143,148860,13335],{"class":149},[143,148862,147525],{"class":163},[143,148864,13335],{"class":149},[143,148866,147530],{"class":6116},[143,148868,160],{"class":755},[143,148870,147535],{"class":163},[143,148872,14614],{"class":149},[143,148874,32281],{"class":755},[143,148876,148877],{"class":6116}," file",[143,148879,4639],{"class":149},[143,148881,148882,148884,148886,148889,148891],{"class":145,"line":319},[143,148883,102297],{"class":149},[143,148885,160],{"class":755},[143,148887,148888],{"class":149}," json.load(",[143,148890,46252],{"class":6116},[143,148892,1055],{"class":149},[143,148894,148895],{"class":145,"line":332},[143,148896,3300],{"emptyLinePlaceholder":976},[143,148898,148899,148901,148903],{"class":145,"line":345},[143,148900,148524],{"class":149},[143,148902,160],{"class":755},[143,148904,52726],{"class":149},[143,148906,148907,148910,148912],{"class":145,"line":701},[143,148908,148909],{"class":149},"online_sales ",[143,148911,160],{"class":755},[143,148913,52726],{"class":149},[143,148915,148916,148919,148921],{"class":145,"line":707},[143,148917,148918],{"class":149},"offline_sales ",[143,148920,160],{"class":755},[143,148922,52726],{"class":149},[143,148924,148925],{"class":145,"line":727},[143,148926,3300],{"emptyLinePlaceholder":976},[143,148928,148929,148931,148934,148936],{"class":145,"line":2518},[143,148930,3925],{"class":755},[143,148932,148933],{"class":149}," item ",[143,148935,26941],{"class":755},[143,148937,148938],{"class":149}," data:\n",[143,148940,148941,148944,148946],{"class":145,"line":2524},[143,148942,148943],{"class":149},"    dates.append(item[",[143,148945,148721],{"class":163},[143,148947,5557],{"class":149},[143,148949,148950,148953,148955],{"class":145,"line":2529},[143,148951,148952],{"class":149},"    online_sales.append(item[",[143,148954,148730],{"class":163},[143,148956,5557],{"class":149},[143,148958,148959,148962,148964],{"class":145,"line":2543},[143,148960,148961],{"class":149},"    offline_sales.append(item[",[143,148963,148739],{"class":163},[143,148965,5557],{"class":149},[143,148967,148968],{"class":145,"line":2548},[143,148969,3300],{"emptyLinePlaceholder":976},[143,148971,148972,148974,148976],{"class":145,"line":2554},[143,148973,147976],{"class":149},[143,148975,160],{"class":755},[143,148977,147981],{"class":149},[143,148979,148980],{"class":145,"line":2575},[143,148981,148565],{"class":149},[143,148983,148984,148986,148988,148991,148993,148995,148997],{"class":145,"line":2580},[143,148985,148016],{"class":149},[143,148987,148572],{"class":163},[143,148989,148990],{"class":149},", online_sales, ",[143,148992,148469],{"class":6116},[143,148994,160],{"class":755},[143,148996,32374],{"class":280},[143,148998,1055],{"class":149},[143,149000,149001,149003,149005,149008,149010,149012,149014],{"class":145,"line":2594},[143,149002,148016],{"class":149},[143,149004,148610],{"class":163},[143,149006,149007],{"class":149},", offline_sales, ",[143,149009,148469],{"class":6116},[143,149011,160],{"class":755},[143,149013,32374],{"class":280},[143,149015,1055],{"class":149},[143,149017,149018],{"class":145,"line":2599},[143,149019,148192],{"class":149},[143,149021,149022,149024,149026,149028,149030,149032,149035],{"class":145,"line":2628},[143,149023,148197],{"class":6116},[143,149025,160],{"class":755},[143,149027,148202],{"class":149},[143,149029,52303],{"class":6116},[143,149031,160],{"class":755},[143,149033,149034],{"class":163},"\"销售趋势\"",[143,149036,38945],{"class":149},[143,149038,149039,149041,149043,149045,149047,149049,149051],{"class":145,"line":2633},[143,149040,148253],{"class":6116},[143,149042,160],{"class":755},[143,149044,148258],{"class":149},[143,149046,148261],{"class":6116},[143,149048,160],{"class":755},[143,149050,148266],{"class":163},[143,149052,38945],{"class":149},[143,149054,149055],{"class":145,"line":2650},[143,149056,1055],{"class":149},[143,149058,149059,149061,149063],{"class":145,"line":2655},[143,149060,148048],{"class":149},[143,149062,148688],{"class":163},[143,149064,1055],{"class":149},[14,149066,149068],{"id":149067},"_109-数据清洗","10.9 数据清洗",[63,149070,149071],{},"真实数据经常不整齐，需要清洗。",[63,149073,149074],{},"常见问题：",[19,149076,149077,149080,149083,149086],{},[22,149078,149079],{},"数字是字符串。",[22,149081,149082],{},"字段缺失。",[22,149084,149085],{},"空值。",[22,149087,149088],{},"日期格式不统一。",[63,149090,16034],{},[133,149092,149094],{"className":31276,"code":149093,"language":31278,"meta":138,"style":138},"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",[140,149095,149096,149105,149128,149148,149169,149173,149177,149185,149194,149198,149209,149223,149232,149237,149241,149249,149259,149263,149270],{"__ignoreMap":138},[143,149097,149098,149101,149103],{"class":145,"line":146},[143,149099,149100],{"class":149},"raw_data ",[143,149102,160],{"class":755},[143,149104,56330],{"class":149},[143,149106,149107,149110,149112,149114,149116,149118,149121,149123,149126],{"class":145,"line":35},[143,149108,149109],{"class":149},"    {",[143,149111,148721],{"class":163},[143,149113,284],{"class":149},[143,149115,147989],{"class":163},[143,149117,13335],{"class":149},[143,149119,149120],{"class":163},"\"sales\"",[143,149122,284],{"class":149},[143,149124,149125],{"class":163},"\"100\"",[143,149127,5830],{"class":149},[143,149129,149130,149132,149134,149136,149138,149140,149142,149144,149146],{"class":145,"line":46},[143,149131,149109],{"class":149},[143,149133,148721],{"class":163},[143,149135,284],{"class":149},[143,149137,147994],{"class":163},[143,149139,13335],{"class":149},[143,149141,149120],{"class":163},[143,149143,284],{"class":149},[143,149145,8552],{"class":163},[143,149147,5830],{"class":149},[143,149149,149150,149152,149154,149156,149158,149160,149162,149164,149167],{"class":145,"line":293},[143,149151,149109],{"class":149},[143,149153,148721],{"class":163},[143,149155,284],{"class":149},[143,149157,147999],{"class":163},[143,149159,13335],{"class":149},[143,149161,149120],{"class":163},[143,149163,284],{"class":149},[143,149165,149166],{"class":163},"\"120\"",[143,149168,5830],{"class":149},[143,149170,149171],{"class":145,"line":306},[143,149172,34144],{"class":149},[143,149174,149175],{"class":145,"line":319},[143,149176,3300],{"emptyLinePlaceholder":976},[143,149178,149179,149181,149183],{"class":145,"line":332},[143,149180,148524],{"class":149},[143,149182,160],{"class":755},[143,149184,52726],{"class":149},[143,149186,149187,149190,149192],{"class":145,"line":345},[143,149188,149189],{"class":149},"sales ",[143,149191,160],{"class":755},[143,149193,52726],{"class":149},[143,149195,149196],{"class":145,"line":701},[143,149197,3300],{"emptyLinePlaceholder":976},[143,149199,149200,149202,149204,149206],{"class":145,"line":707},[143,149201,3925],{"class":755},[143,149203,148933],{"class":149},[143,149205,26941],{"class":755},[143,149207,149208],{"class":149}," raw_data:\n",[143,149210,149211,149214,149216,149219,149221],{"class":145,"line":727},[143,149212,149213],{"class":149},"    value ",[143,149215,160],{"class":755},[143,149217,149218],{"class":149}," item.get(",[143,149220,149120],{"class":163},[143,149222,1055],{"class":149},[143,149224,149225,149227,149229],{"class":145,"line":2518},[143,149226,4001],{"class":755},[143,149228,39828],{"class":755},[143,149230,149231],{"class":149}," value:\n",[143,149233,149234],{"class":145,"line":2524},[143,149235,149236],{"class":755},"        continue\n",[143,149238,149239],{"class":145,"line":2529},[143,149240,3300],{"emptyLinePlaceholder":976},[143,149242,149243,149245,149247],{"class":145,"line":2543},[143,149244,148943],{"class":149},[143,149246,148721],{"class":163},[143,149248,5557],{"class":149},[143,149250,149251,149254,149256],{"class":145,"line":2548},[143,149252,149253],{"class":149},"    sales.append(",[143,149255,1052],{"class":280},[143,149257,149258],{"class":149},"(value))\n",[143,149260,149261],{"class":145,"line":2554},[143,149262,3300],{"emptyLinePlaceholder":976},[143,149264,149265,149267],{"class":145,"line":2575},[143,149266,31313],{"class":280},[143,149268,149269],{"class":149},"(dates)\n",[143,149271,149272,149274],{"class":145,"line":2580},[143,149273,31313],{"class":280},[143,149275,149276],{"class":149},"(sales)\n",[14,149278,149280],{"id":149279},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[133,149282,149284],{"className":31276,"code":149283,"language":31278,"meta":138,"style":138},"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",[140,149285,149286,149300,149310,149314,149322,149343,149365,149387,149409,149431,149435,149439,149461,149482,149486,149494,149498,149502,149512,149521,149531,149547,149551,149555,149572,149588,149604,149620,149630,149634],{"__ignoreMap":138},[143,149287,149288,149290,149292,149294,149296,149298],{"class":145,"line":146},[143,149289,31635],{"class":755},[143,149291,148103],{"class":149},[143,149293,31290],{"class":755},[143,149295,148108],{"class":149},[143,149297,32281],{"class":755},[143,149299,148113],{"class":149},[143,149301,149302,149304,149306,149308],{"class":145,"line":35},[143,149303,31635],{"class":755},[143,149305,147962],{"class":149},[143,149307,31290],{"class":755},[143,149309,147967],{"class":149},[143,149311,149312],{"class":145,"line":46},[143,149313,3300],{"emptyLinePlaceholder":976},[143,149315,149316,149318,149320],{"class":145,"line":293},[143,149317,149189],{"class":149},[143,149319,160],{"class":755},[143,149321,56330],{"class":149},[143,149323,149324,149326,149328,149330,149333,149335,149337,149339,149341],{"class":145,"line":306},[143,149325,149109],{"class":149},[143,149327,148721],{"class":163},[143,149329,284],{"class":149},[143,149331,149332],{"class":163},"\"2024-10-01\"",[143,149334,13335],{"class":149},[143,149336,84962],{"class":163},[143,149338,284],{"class":149},[143,149340,92901],{"class":280},[143,149342,5830],{"class":149},[143,149344,149345,149347,149349,149351,149354,149356,149358,149360,149363],{"class":145,"line":319},[143,149346,149109],{"class":149},[143,149348,148721],{"class":163},[143,149350,284],{"class":149},[143,149352,149353],{"class":163},"\"2024-10-02\"",[143,149355,13335],{"class":149},[143,149357,84962],{"class":163},[143,149359,284],{"class":149},[143,149361,149362],{"class":280},"1800",[143,149364,5830],{"class":149},[143,149366,149367,149369,149371,149373,149376,149378,149380,149382,149385],{"class":145,"line":332},[143,149368,149109],{"class":149},[143,149370,148721],{"class":163},[143,149372,284],{"class":149},[143,149374,149375],{"class":163},"\"2024-10-03\"",[143,149377,13335],{"class":149},[143,149379,84962],{"class":163},[143,149381,284],{"class":149},[143,149383,149384],{"class":280},"1500",[143,149386,5830],{"class":149},[143,149388,149389,149391,149393,149395,149398,149400,149402,149404,149407],{"class":145,"line":345},[143,149390,149109],{"class":149},[143,149392,148721],{"class":163},[143,149394,284],{"class":149},[143,149396,149397],{"class":163},"\"2024-10-04\"",[143,149399,13335],{"class":149},[143,149401,84962],{"class":163},[143,149403,284],{"class":149},[143,149405,149406],{"class":280},"2100",[143,149408,5830],{"class":149},[143,149410,149411,149413,149415,149417,149420,149422,149424,149426,149429],{"class":145,"line":701},[143,149412,149109],{"class":149},[143,149414,148721],{"class":163},[143,149416,284],{"class":149},[143,149418,149419],{"class":163},"\"2024-10-05\"",[143,149421,13335],{"class":149},[143,149423,84962],{"class":163},[143,149425,284],{"class":149},[143,149427,149428],{"class":280},"2600",[143,149430,5830],{"class":149},[143,149432,149433],{"class":145,"line":707},[143,149434,34144],{"class":149},[143,149436,149437],{"class":145,"line":727},[143,149438,3300],{"emptyLinePlaceholder":976},[143,149440,149441,149443,149445,149448,149450,149452,149454,149456,149458],{"class":145,"line":2518},[143,149442,148524],{"class":149},[143,149444,160],{"class":755},[143,149446,149447],{"class":149}," [item[",[143,149449,148721],{"class":163},[143,149451,5343],{"class":149},[143,149453,3925],{"class":755},[143,149455,148933],{"class":149},[143,149457,26941],{"class":755},[143,149459,149460],{"class":149}," sales]\n",[143,149462,149463,149466,149468,149470,149472,149474,149476,149478,149480],{"class":145,"line":2524},[143,149464,149465],{"class":149},"amounts ",[143,149467,160],{"class":755},[143,149469,149447],{"class":149},[143,149471,84962],{"class":163},[143,149473,5343],{"class":149},[143,149475,3925],{"class":755},[143,149477,148933],{"class":149},[143,149479,26941],{"class":755},[143,149481,149460],{"class":149},[143,149483,149484],{"class":145,"line":2529},[143,149485,3300],{"emptyLinePlaceholder":976},[143,149487,149488,149490,149492],{"class":145,"line":2543},[143,149489,147976],{"class":149},[143,149491,160],{"class":755},[143,149493,147981],{"class":149},[143,149495,149496],{"class":145,"line":2548},[143,149497,148565],{"class":149},[143,149499,149500],{"class":145,"line":2554},[143,149501,148373],{"class":149},[143,149503,149504,149506,149508,149510],{"class":145,"line":2575},[143,149505,148378],{"class":6116},[143,149507,160],{"class":755},[143,149509,148019],{"class":163},[143,149511,32364],{"class":149},[143,149513,149514,149516,149518],{"class":145,"line":2580},[143,149515,148389],{"class":6116},[143,149517,160],{"class":755},[143,149519,149520],{"class":149},"amounts,\n",[143,149522,149523,149525,149527,149529],{"class":145,"line":2594},[143,149524,148418],{"class":6116},[143,149526,160],{"class":755},[143,149528,32374],{"class":280},[143,149530,32364],{"class":149},[143,149532,149533,149535,149537,149539,149541,149543,149545],{"class":145,"line":2599},[143,149534,148429],{"class":6116},[143,149536,160],{"class":755},[143,149538,148434],{"class":149},[143,149540,148437],{"class":6116},[143,149542,160],{"class":755},[143,149544,32374],{"class":280},[143,149546,38945],{"class":149},[143,149548,149549],{"class":145,"line":2628},[143,149550,1055],{"class":149},[143,149552,149553],{"class":145,"line":2633},[143,149554,148192],{"class":149},[143,149556,149557,149559,149561,149563,149565,149567,149570],{"class":145,"line":2650},[143,149558,148197],{"class":6116},[143,149560,160],{"class":755},[143,149562,148202],{"class":149},[143,149564,52303],{"class":6116},[143,149566,160],{"class":755},[143,149568,149569],{"class":163},"\"每日销售额\"",[143,149571,38945],{"class":149},[143,149573,149574,149576,149578,149580,149582,149584,149586],{"class":145,"line":2655},[143,149575,148216],{"class":6116},[143,149577,160],{"class":755},[143,149579,148221],{"class":149},[143,149581,80688],{"class":6116},[143,149583,160],{"class":755},[143,149585,148228],{"class":163},[143,149587,38945],{"class":149},[143,149589,149590,149592,149594,149596,149598,149600,149602],{"class":145,"line":2660},[143,149591,148235],{"class":6116},[143,149593,160],{"class":755},[143,149595,148221],{"class":149},[143,149597,80688],{"class":6116},[143,149599,160],{"class":755},[143,149601,148246],{"class":163},[143,149603,38945],{"class":149},[143,149605,149606,149608,149610,149612,149614,149616,149618],{"class":145,"line":2665},[143,149607,148253],{"class":6116},[143,149609,160],{"class":755},[143,149611,148258],{"class":149},[143,149613,148261],{"class":6116},[143,149615,160],{"class":755},[143,149617,148266],{"class":163},[143,149619,38945],{"class":149},[143,149621,149622,149625,149627],{"class":145,"line":2679},[143,149623,149624],{"class":6116},"    datazoom_opts",[143,149626,160],{"class":755},[143,149628,149629],{"class":149},"[opts.DataZoomOpts()],\n",[143,149631,149632],{"class":145,"line":2684},[143,149633,1055],{"class":149},[143,149635,149636,149638,149641],{"class":145,"line":3477},[143,149637,148048],{"class":149},[143,149639,149640],{"class":163},"\"daily_sales.html\"",[143,149642,1055],{"class":149},[63,149644,149645,149648],{},[140,149646,149647],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149650,149652],{"id":149651},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[63,149654,149655],{},"如果数据结构如下：",[133,149657,149659],{"className":31276,"code":149658,"language":31278,"meta":138,"style":138},"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",[140,149660,149661,149669,149677,149699,149720,149725,149732,149752,149772,149776],{"__ignoreMap":138},[143,149662,149663,149665,149667],{"class":145,"line":146},[143,149664,102534],{"class":149},[143,149666,160],{"class":755},[143,149668,275],{"class":149},[143,149670,149671,149674],{"class":145,"line":35},[143,149672,149673],{"class":163},"    \"北京\"",[143,149675,149676],{"class":149},": [\n",[143,149678,149679,149681,149683,149685,149688,149690,149693,149695,149697],{"class":145,"line":46},[143,149680,5817],{"class":149},[143,149682,148721],{"class":163},[143,149684,284],{"class":149},[143,149686,149687],{"class":163},"\"2024-01-01\"",[143,149689,13335],{"class":149},[143,149691,149692],{"class":163},"\"confirm\"",[143,149694,284],{"class":149},[143,149696,1487],{"class":280},[143,149698,5830],{"class":149},[143,149700,149701,149703,149705,149707,149710,149712,149714,149716,149718],{"class":145,"line":293},[143,149702,5817],{"class":149},[143,149704,148721],{"class":163},[143,149706,284],{"class":149},[143,149708,149709],{"class":163},"\"2024-01-02\"",[143,149711,13335],{"class":149},[143,149713,149692],{"class":163},[143,149715,284],{"class":149},[143,149717,1539],{"class":280},[143,149719,5830],{"class":149},[143,149721,149722],{"class":145,"line":306},[143,149723,149724],{"class":149},"    ],\n",[143,149726,149727,149730],{"class":145,"line":319},[143,149728,149729],{"class":163},"    \"上海\"",[143,149731,149676],{"class":149},[143,149733,149734,149736,149738,149740,149742,149744,149746,149748,149750],{"class":145,"line":332},[143,149735,5817],{"class":149},[143,149737,148721],{"class":163},[143,149739,284],{"class":149},[143,149741,149687],{"class":163},[143,149743,13335],{"class":149},[143,149745,149692],{"class":163},[143,149747,284],{"class":149},[143,149749,1436],{"class":280},[143,149751,5830],{"class":149},[143,149753,149754,149756,149758,149760,149762,149764,149766,149768,149770],{"class":145,"line":345},[143,149755,5817],{"class":149},[143,149757,148721],{"class":163},[143,149759,284],{"class":149},[143,149761,149709],{"class":163},[143,149763,13335],{"class":149},[143,149765,149692],{"class":163},[143,149767,284],{"class":149},[143,149769,1564],{"class":280},[143,149771,5830],{"class":149},[143,149773,149774],{"class":145,"line":701},[143,149775,149724],{"class":149},[143,149777,149778],{"class":145,"line":707},[143,149779,348],{"class":149},[63,149781,149782],{},"绘制多地区趋势：",[133,149784,149786],{"className":31276,"code":149785,"language":31278,"meta":138,"style":138},"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",[140,149787,149788,149802,149812,149816,149841,149845,149853,149857,149861,149873,149895,149908,149912,149916,149933,149949,149953],{"__ignoreMap":138},[143,149789,149790,149792,149794,149796,149798,149800],{"class":145,"line":146},[143,149791,31635],{"class":755},[143,149793,148103],{"class":149},[143,149795,31290],{"class":755},[143,149797,148108],{"class":149},[143,149799,32281],{"class":755},[143,149801,148113],{"class":149},[143,149803,149804,149806,149808,149810],{"class":145,"line":35},[143,149805,31635],{"class":755},[143,149807,147962],{"class":149},[143,149809,31290],{"class":755},[143,149811,147967],{"class":149},[143,149813,149814],{"class":145,"line":46},[143,149815,3300],{"emptyLinePlaceholder":976},[143,149817,149818,149820,149822,149824,149826,149828,149830,149832,149834,149837,149839],{"class":145,"line":293},[143,149819,148524],{"class":149},[143,149821,160],{"class":755},[143,149823,149447],{"class":149},[143,149825,148721],{"class":163},[143,149827,5343],{"class":149},[143,149829,3925],{"class":755},[143,149831,148933],{"class":149},[143,149833,26941],{"class":755},[143,149835,149836],{"class":149}," data[",[143,149838,70150],{"class":163},[143,149840,78406],{"class":149},[143,149842,149843],{"class":145,"line":306},[143,149844,3300],{"emptyLinePlaceholder":976},[143,149846,149847,149849,149851],{"class":145,"line":319},[143,149848,147976],{"class":149},[143,149850,160],{"class":755},[143,149852,147981],{"class":149},[143,149854,149855],{"class":145,"line":332},[143,149856,148565],{"class":149},[143,149858,149859],{"class":145,"line":345},[143,149860,3300],{"emptyLinePlaceholder":976},[143,149862,149863,149865,149868,149870],{"class":145,"line":701},[143,149864,3925],{"class":755},[143,149866,149867],{"class":149}," city, records ",[143,149869,26941],{"class":755},[143,149871,149872],{"class":149}," data.items():\n",[143,149874,149875,149878,149880,149882,149884,149886,149888,149890,149892],{"class":145,"line":707},[143,149876,149877],{"class":149},"    values ",[143,149879,160],{"class":755},[143,149881,149447],{"class":149},[143,149883,149692],{"class":163},[143,149885,5343],{"class":149},[143,149887,3925],{"class":755},[143,149889,148933],{"class":149},[143,149891,26941],{"class":755},[143,149893,149894],{"class":149}," records]\n",[143,149896,149897,149900,149902,149904,149906],{"class":145,"line":727},[143,149898,149899],{"class":149},"    line.add_yaxis(city, values, ",[143,149901,148469],{"class":6116},[143,149903,160],{"class":755},[143,149905,32374],{"class":280},[143,149907,1055],{"class":149},[143,149909,149910],{"class":145,"line":2518},[143,149911,3300],{"emptyLinePlaceholder":976},[143,149913,149914],{"class":145,"line":2524},[143,149915,148192],{"class":149},[143,149917,149918,149920,149922,149924,149926,149928,149931],{"class":145,"line":2529},[143,149919,148197],{"class":6116},[143,149921,160],{"class":755},[143,149923,148202],{"class":149},[143,149925,52303],{"class":6116},[143,149927,160],{"class":755},[143,149929,149930],{"class":163},"\"多地区趋势图\"",[143,149932,38945],{"class":149},[143,149934,149935,149937,149939,149941,149943,149945,149947],{"class":145,"line":2543},[143,149936,148253],{"class":6116},[143,149938,160],{"class":755},[143,149940,148258],{"class":149},[143,149942,148261],{"class":6116},[143,149944,160],{"class":755},[143,149946,148266],{"class":163},[143,149948,38945],{"class":149},[143,149950,149951],{"class":145,"line":2548},[143,149952,1055],{"class":149},[143,149954,149955,149957,149960],{"class":145,"line":2554},[143,149956,148048],{"class":149},[143,149958,149959],{"class":163},"\"trend.html\"",[143,149961,1055],{"class":149},[63,149963,149964],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149966,149968],{"id":149967},"_1012-易错点","10.12 易错点",[19,149970,149971,149977,149983,149993,149999],{},[22,149972,149973,149976],{},[140,149974,149975],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[22,149978,149979,149982],{},[140,149980,149981],{},"render()"," 生成的是 HTML，不是图片。",[22,149984,149985,149986,149989,149990,29283],{},"JSON 字符串用 ",[140,149987,149988],{},"json.loads()","，JSON 文件用 ",[140,149991,149992],{},"json.load()",[22,149994,149995,149996,29283],{},"中文 JSON 保存时加 ",[140,149997,149998],{},"ensure_ascii=False",[22,150000,150001],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150003,150005],{"id":150004},"_1013-本章练习","10.13 本章练习",[19,150007,150008,150011,150014,150017,150020],{},[22,150009,150010],{},"安装 pyecharts 并生成第一个折线图。",[22,150012,150013],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[22,150015,150016],{},"绘制两条折线，对比线上和线下销售额。",[22,150018,150019],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[22,150021,150022],{},"对含有空值的销售数据进行清洗后再绘图。",[954,150024,150025],{},"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":138,"searchDepth":35,"depth":35,"links":150027},[150028,150029,150030,150031,150032,150033,150034,150035,150036,150037,150038,150039,150040],{"id":147644,"depth":35,"text":147645},{"id":147719,"depth":35,"text":147720},{"id":147898,"depth":35,"text":147899},{"id":147949,"depth":35,"text":147950},{"id":148083,"depth":35,"text":148084},{"id":148359,"depth":35,"text":148360},{"id":148485,"depth":35,"text":148486},{"id":148696,"depth":35,"text":148697},{"id":149067,"depth":35,"text":149068},{"id":149279,"depth":35,"text":149280},{"id":149651,"depth":35,"text":149652},{"id":149967,"depth":35,"text":149968},{"id":150004,"depth":35,"text":150005},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147636,"description":973},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150047,"title":150048,"body":150049,"description":973,"extension":974,"meta":152409,"navigation":976,"path":152410,"seo":152411,"stem":152412,"__hash__":152413},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150050,"toc":152386},[150051,150054,150058,150061,150064,150140,150143,150234,150237,150241,150244,150288,150301,150305,150308,150375,150378,150382,150385,150469,150477,150481,150486,150627,150630,150641,150647,150653,150767,150771,150774,150777,151030,151033,151037,151040,151144,151147,151151,151302,151306,151313,151426,151430,151433,151539,151542,151546,151549,151580,151583,151688,151691,151695,151699,151709,151777,151781,151788,151852,151855,151859,151865,151961,151970,151974,152298,152307,152311,152339,152343,152383],[10,150052,150048],{"id":150053},"_11-面向对象基础",[14,150055,150057],{"id":150056},"_111-什么是面向对象","11.1 什么是面向对象",[63,150059,150060],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[63,150062,150063],{},"面向过程：",[133,150065,150067],{"className":31276,"code":150066,"language":31278,"meta":138,"style":138},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[140,150068,150069,150078,150086,150090,150100,150131,150135],{"__ignoreMap":138},[143,150070,150071,150073,150075],{"class":145,"line":146},[143,150072,147260],{"class":149},[143,150074,160],{"class":755},[143,150076,150077],{"class":163}," \"小明\"\n",[143,150079,150080,150082,150084],{"class":145,"line":35},[143,150081,147270],{"class":149},[143,150083,160],{"class":755},[143,150085,147275],{"class":280},[143,150087,150088],{"class":145,"line":46},[143,150089,3300],{"emptyLinePlaceholder":976},[143,150091,150092,150094,150097],{"class":145,"line":293},[143,150093,32845],{"class":755},[143,150095,150096],{"class":156}," introduce",[143,150098,150099],{"class":149},"(name, age):\n",[143,150101,150102,150104,150106,150108,150111,150113,150115,150117,150120,150122,150124,150126,150129],{"class":145,"line":306},[143,150103,32197],{"class":280},[143,150105,1049],{"class":149},[143,150107,1098],{"class":755},[143,150109,150110],{"class":163},"\"我叫",[143,150112,1936],{"class":280},[143,150114,80688],{"class":149},[143,150116,366],{"class":280},[143,150118,150119],{"class":163},"，今年",[143,150121,1936],{"class":280},[143,150123,71102],{"class":149},[143,150125,366],{"class":280},[143,150127,150128],{"class":163},"岁\"",[143,150130,1055],{"class":149},[143,150132,150133],{"class":145,"line":319},[143,150134,3300],{"emptyLinePlaceholder":976},[143,150136,150137],{"class":145,"line":332},[143,150138,150139],{"class":149},"introduce(name, age)\n",[63,150141,150142],{},"面向对象：",[133,150144,150146],{"className":31276,"code":150145,"language":31278,"meta":138,"style":138},"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",[140,150147,150148,150156,150164,150193,150197,150201,150211,150220,150229],{"__ignoreMap":138},[143,150149,150150,150152,150154],{"class":145,"line":146},[143,150151,15593],{"class":755},[143,150153,8798],{"class":156},[143,150155,4639],{"class":149},[143,150157,150158,150160,150162],{"class":145,"line":35},[143,150159,31699],{"class":755},[143,150161,150096],{"class":156},[143,150163,31705],{"class":149},[143,150165,150166,150168,150170,150172,150174,150177,150179,150181,150183,150185,150187,150189,150191],{"class":145,"line":46},[143,150167,33349],{"class":280},[143,150169,1049],{"class":149},[143,150171,1098],{"class":755},[143,150173,150110],{"class":163},[143,150175,150176],{"class":280},"{self",[143,150178,81179],{"class":149},[143,150180,366],{"class":280},[143,150182,150119],{"class":163},[143,150184,150176],{"class":280},[143,150186,81191],{"class":149},[143,150188,366],{"class":280},[143,150190,150128],{"class":163},[143,150192,1055],{"class":149},[143,150194,150195],{"class":145,"line":293},[143,150196,3300],{"emptyLinePlaceholder":976},[143,150198,150199],{"class":145,"line":306},[143,150200,3300],{"emptyLinePlaceholder":976},[143,150202,150203,150206,150208],{"class":145,"line":319},[143,150204,150205],{"class":149},"student ",[143,150207,160],{"class":755},[143,150209,150210],{"class":149}," Student()\n",[143,150212,150213,150216,150218],{"class":145,"line":332},[143,150214,150215],{"class":149},"student.name ",[143,150217,160],{"class":755},[143,150219,150077],{"class":163},[143,150221,150222,150225,150227],{"class":145,"line":345},[143,150223,150224],{"class":149},"student.age ",[143,150226,160],{"class":755},[143,150228,147275],{"class":280},[143,150230,150231],{"class":145,"line":701},[143,150232,150233],{"class":149},"student.introduce()\n",[63,150235,150236],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150238,150240],{"id":150239},"_112-类和对象","11.2 类和对象",[63,150242,150243],{},"类是模板，对象是根据模板创建出来的具体实例。",[133,150245,150247],{"className":31276,"code":150246,"language":31278,"meta":138,"style":138},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[140,150248,150249,150257,150262,150266,150270,150279],{"__ignoreMap":138},[143,150250,150251,150253,150255],{"class":145,"line":146},[143,150252,15593],{"class":755},[143,150254,8798],{"class":156},[143,150256,4639],{"class":149},[143,150258,150259],{"class":145,"line":35},[143,150260,150261],{"class":755},"    pass\n",[143,150263,150264],{"class":145,"line":46},[143,150265,3300],{"emptyLinePlaceholder":976},[143,150267,150268],{"class":145,"line":293},[143,150269,3300],{"emptyLinePlaceholder":976},[143,150271,150272,150275,150277],{"class":145,"line":306},[143,150273,150274],{"class":149},"student1 ",[143,150276,160],{"class":755},[143,150278,150210],{"class":149},[143,150280,150281,150284,150286],{"class":145,"line":319},[143,150282,150283],{"class":149},"student2 ",[143,150285,160],{"class":755},[143,150287,150210],{"class":149},[63,150289,150290,150293,150294,101894,150297,150300],{},[140,150291,150292],{},"Student"," 是类，",[140,150295,150296],{},"student1",[140,150298,150299],{},"student2"," 是对象。",[14,150302,150304],{"id":150303},"_113-属性","11.3 属性",[63,150306,150307],{},"属性是对象保存的数据。",[133,150309,150311],{"className":31276,"code":150310,"language":31278,"meta":138,"style":138},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[140,150312,150313,150321,150325,150329,150333,150341,150349,150357,150361,150368],{"__ignoreMap":138},[143,150314,150315,150317,150319],{"class":145,"line":146},[143,150316,15593],{"class":755},[143,150318,8798],{"class":156},[143,150320,4639],{"class":149},[143,150322,150323],{"class":145,"line":35},[143,150324,150261],{"class":755},[143,150326,150327],{"class":145,"line":46},[143,150328,3300],{"emptyLinePlaceholder":976},[143,150330,150331],{"class":145,"line":293},[143,150332,3300],{"emptyLinePlaceholder":976},[143,150334,150335,150337,150339],{"class":145,"line":306},[143,150336,150205],{"class":149},[143,150338,160],{"class":755},[143,150340,150210],{"class":149},[143,150342,150343,150345,150347],{"class":145,"line":319},[143,150344,150215],{"class":149},[143,150346,160],{"class":755},[143,150348,150077],{"class":163},[143,150350,150351,150353,150355],{"class":145,"line":332},[143,150352,150224],{"class":149},[143,150354,160],{"class":755},[143,150356,147275],{"class":280},[143,150358,150359],{"class":145,"line":345},[143,150360,3300],{"emptyLinePlaceholder":976},[143,150362,150363,150365],{"class":145,"line":701},[143,150364,31313],{"class":280},[143,150366,150367],{"class":149},"(student.name)\n",[143,150369,150370,150372],{"class":145,"line":707},[143,150371,31313],{"class":280},[143,150373,150374],{"class":149},"(student.age)\n",[63,150376,150377],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150379,150381],{"id":150380},"_114-方法","11.4 方法",[63,150383,150384],{},"类中的函数叫方法。",[133,150386,150387],{"className":31276,"code":150145,"language":31278,"meta":138,"style":138},[140,150388,150389,150397,150405,150433,150437,150441,150449,150457,150465],{"__ignoreMap":138},[143,150390,150391,150393,150395],{"class":145,"line":146},[143,150392,15593],{"class":755},[143,150394,8798],{"class":156},[143,150396,4639],{"class":149},[143,150398,150399,150401,150403],{"class":145,"line":35},[143,150400,31699],{"class":755},[143,150402,150096],{"class":156},[143,150404,31705],{"class":149},[143,150406,150407,150409,150411,150413,150415,150417,150419,150421,150423,150425,150427,150429,150431],{"class":145,"line":46},[143,150408,33349],{"class":280},[143,150410,1049],{"class":149},[143,150412,1098],{"class":755},[143,150414,150110],{"class":163},[143,150416,150176],{"class":280},[143,150418,81179],{"class":149},[143,150420,366],{"class":280},[143,150422,150119],{"class":163},[143,150424,150176],{"class":280},[143,150426,81191],{"class":149},[143,150428,366],{"class":280},[143,150430,150128],{"class":163},[143,150432,1055],{"class":149},[143,150434,150435],{"class":145,"line":293},[143,150436,3300],{"emptyLinePlaceholder":976},[143,150438,150439],{"class":145,"line":306},[143,150440,3300],{"emptyLinePlaceholder":976},[143,150442,150443,150445,150447],{"class":145,"line":319},[143,150444,150205],{"class":149},[143,150446,160],{"class":755},[143,150448,150210],{"class":149},[143,150450,150451,150453,150455],{"class":145,"line":332},[143,150452,150215],{"class":149},[143,150454,160],{"class":755},[143,150456,150077],{"class":163},[143,150458,150459,150461,150463],{"class":145,"line":345},[143,150460,150224],{"class":149},[143,150462,160],{"class":755},[143,150464,147275],{"class":280},[143,150466,150467],{"class":145,"line":701},[143,150468,150233],{"class":149},[63,150470,150471,150473,150474,150476],{},[140,150472,31721],{}," 表示当前对象。调用方法时不需要手动传入 ",[140,150475,31721],{},"，Python 会自动传。",[14,150478,150480],{"id":150479},"_115-构造方法__init__","11.5 构造方法__init__",[63,150482,150483,150485],{},[140,150484,31727],{}," 在对象创建时自动执行，用于初始化属性。",[133,150487,150489],{"className":31276,"code":150488,"language":31278,"meta":138,"style":138},"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",[140,150490,150491,150499,150508,150520,150532,150543,150547,150555,150593,150597,150601,150623],{"__ignoreMap":138},[143,150492,150493,150495,150497],{"class":145,"line":146},[143,150494,15593],{"class":755},[143,150496,8798],{"class":156},[143,150498,4639],{"class":149},[143,150500,150501,150503,150505],{"class":145,"line":35},[143,150502,31699],{"class":755},[143,150504,31702],{"class":280},[143,150506,150507],{"class":149},"(self, name, age, score):\n",[143,150509,150510,150512,150515,150517],{"class":145,"line":46},[143,150511,31743],{"class":280},[143,150513,150514],{"class":149},".name ",[143,150516,160],{"class":755},[143,150518,150519],{"class":149}," name\n",[143,150521,150522,150524,150527,150529],{"class":145,"line":293},[143,150523,31743],{"class":280},[143,150525,150526],{"class":149},".age ",[143,150528,160],{"class":755},[143,150530,150531],{"class":149}," age\n",[143,150533,150534,150536,150539,150541],{"class":145,"line":306},[143,150535,31743],{"class":280},[143,150537,150538],{"class":149},".score ",[143,150540,160],{"class":755},[143,150542,2481],{"class":149},[143,150544,150545],{"class":145,"line":319},[143,150546,3300],{"emptyLinePlaceholder":976},[143,150548,150549,150551,150553],{"class":145,"line":332},[143,150550,31699],{"class":755},[143,150552,150096],{"class":156},[143,150554,31705],{"class":149},[143,150556,150557,150559,150561,150563,150565,150567,150569,150571,150573,150575,150577,150579,150582,150584,150587,150589,150591],{"class":145,"line":345},[143,150558,33349],{"class":280},[143,150560,1049],{"class":149},[143,150562,1098],{"class":755},[143,150564,150110],{"class":163},[143,150566,150176],{"class":280},[143,150568,81179],{"class":149},[143,150570,366],{"class":280},[143,150572,150119],{"class":163},[143,150574,150176],{"class":280},[143,150576,81191],{"class":149},[143,150578,366],{"class":280},[143,150580,150581],{"class":163},"岁，成绩",[143,150583,150176],{"class":280},[143,150585,150586],{"class":149},".score",[143,150588,366],{"class":280},[143,150590,1292],{"class":163},[143,150592,1055],{"class":149},[143,150594,150595],{"class":145,"line":701},[143,150596,3300],{"emptyLinePlaceholder":976},[143,150598,150599],{"class":145,"line":707},[143,150600,3300],{"emptyLinePlaceholder":976},[143,150602,150603,150605,150607,150610,150613,150615,150617,150619,150621],{"class":145,"line":727},[143,150604,150205],{"class":149},[143,150606,160],{"class":755},[143,150608,150609],{"class":149}," Student(",[143,150611,150612],{"class":163},"\"小明\"",[143,150614,13335],{"class":149},[143,150616,1691],{"class":280},[143,150618,13335],{"class":149},[143,150620,2027],{"class":280},[143,150622,1055],{"class":149},[143,150624,150625],{"class":145,"line":2518},[143,150626,150233],{"class":149},[63,150628,150629],{},"构造方法的好处：",[19,150631,150632,150635,150638],{},[22,150633,150634],{},"创建对象时必须提供必要数据。",[22,150636,150637],{},"属性初始化集中，不容易漏。",[22,150639,150640],{},"对象状态更完整。",[14,150642,150644,150645],{"id":150643},"_116-str","11.6 ",[25,150646,2206],{},[63,150648,150649,150650,29283],{},"直接打印对象时，默认输出不直观。可以定义 ",[140,150651,150652],{},"__str__",[133,150654,150656],{"className":31276,"code":150655,"language":31278,"meta":138,"style":138},"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",[140,150657,150658,150666,150675,150685,150695,150699,150708,150736,150740,150744,150760],{"__ignoreMap":138},[143,150659,150660,150662,150664],{"class":145,"line":146},[143,150661,15593],{"class":755},[143,150663,8798],{"class":156},[143,150665,4639],{"class":149},[143,150667,150668,150670,150672],{"class":145,"line":35},[143,150669,31699],{"class":755},[143,150671,31702],{"class":280},[143,150673,150674],{"class":149},"(self, name, age):\n",[143,150676,150677,150679,150681,150683],{"class":145,"line":46},[143,150678,31743],{"class":280},[143,150680,150514],{"class":149},[143,150682,160],{"class":755},[143,150684,150519],{"class":149},[143,150686,150687,150689,150691,150693],{"class":145,"line":293},[143,150688,31743],{"class":280},[143,150690,150526],{"class":149},[143,150692,160],{"class":755},[143,150694,150531],{"class":149},[143,150696,150697],{"class":145,"line":306},[143,150698,3300],{"emptyLinePlaceholder":976},[143,150700,150701,150703,150706],{"class":145,"line":319},[143,150702,31699],{"class":755},[143,150704,150705],{"class":280}," __str__",[143,150707,31705],{"class":149},[143,150709,150710,150712,150715,150718,150720,150722,150724,150727,150729,150731,150733],{"class":145,"line":332},[143,150711,15651],{"class":755},[143,150713,150714],{"class":755}," f",[143,150716,150717],{"class":163},"\"Student(name=",[143,150719,150176],{"class":280},[143,150721,81179],{"class":149},[143,150723,366],{"class":280},[143,150725,150726],{"class":163},", age=",[143,150728,150176],{"class":280},[143,150730,81191],{"class":149},[143,150732,366],{"class":280},[143,150734,150735],{"class":163},")\"\n",[143,150737,150738],{"class":145,"line":345},[143,150739,3300],{"emptyLinePlaceholder":976},[143,150741,150742],{"class":145,"line":701},[143,150743,3300],{"emptyLinePlaceholder":976},[143,150745,150746,150748,150750,150752,150754,150756,150758],{"class":145,"line":707},[143,150747,150205],{"class":149},[143,150749,160],{"class":755},[143,150751,150609],{"class":149},[143,150753,150612],{"class":163},[143,150755,13335],{"class":149},[143,150757,1691],{"class":280},[143,150759,1055],{"class":149},[143,150761,150762,150764],{"class":145,"line":727},[143,150763,31313],{"class":280},[143,150765,150766],{"class":149},"(student)\n",[14,150768,150770],{"id":150769},"_117-封装","11.7 封装",[63,150772,150773],{},"封装就是把数据和方法放到类中，并控制访问方式。",[63,150775,150776],{},"Python 中以双下划线开头的属性通常视为私有属性。",[133,150778,150780],{"className":31276,"code":150779,"language":31278,"meta":138,"style":138},"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",[140,150781,150782,150791,150800,150812,150824,150828,150837,150846,150850,150860,150873,150884,150889,150900,150904,150913,150925,150936,150940,150953,150964,150968,150979,150983,150987,151005,151014,151023],{"__ignoreMap":138},[143,150783,150784,150786,150789],{"class":145,"line":146},[143,150785,15593],{"class":755},[143,150787,150788],{"class":156}," Account",[143,150790,4639],{"class":149},[143,150792,150793,150795,150797],{"class":145,"line":35},[143,150794,31699],{"class":755},[143,150796,31702],{"class":280},[143,150798,150799],{"class":149},"(self, owner, balance):\n",[143,150801,150802,150804,150807,150809],{"class":145,"line":46},[143,150803,31743],{"class":280},[143,150805,150806],{"class":149},".owner ",[143,150808,160],{"class":755},[143,150810,150811],{"class":149}," owner\n",[143,150813,150814,150816,150819,150821],{"class":145,"line":293},[143,150815,31743],{"class":280},[143,150817,150818],{"class":149},".__balance ",[143,150820,160],{"class":755},[143,150822,150823],{"class":149}," balance\n",[143,150825,150826],{"class":145,"line":306},[143,150827,3300],{"emptyLinePlaceholder":976},[143,150829,150830,150832,150835],{"class":145,"line":319},[143,150831,31699],{"class":755},[143,150833,150834],{"class":156}," get_balance",[143,150836,31705],{"class":149},[143,150838,150839,150841,150843],{"class":145,"line":332},[143,150840,15651],{"class":755},[143,150842,39771],{"class":280},[143,150844,150845],{"class":149},".__balance\n",[143,150847,150848],{"class":145,"line":345},[143,150849,3300],{"emptyLinePlaceholder":976},[143,150851,150852,150854,150857],{"class":145,"line":701},[143,150853,31699],{"class":755},[143,150855,150856],{"class":156}," deposit",[143,150858,150859],{"class":149},"(self, money):\n",[143,150861,150862,150864,150867,150869,150871],{"class":145,"line":707},[143,150863,3397],{"class":755},[143,150865,150866],{"class":149}," money ",[143,150868,2490],{"class":755},[143,150870,4993],{"class":280},[143,150872,4639],{"class":149},[143,150874,150875,150877,150879,150882],{"class":145,"line":727},[143,150876,35548],{"class":280},[143,150878,1049],{"class":149},[143,150880,150881],{"class":163},"\"存款金额必须大于0\"",[143,150883,1055],{"class":149},[143,150885,150886],{"class":145,"line":2518},[143,150887,150888],{"class":755},"            return\n",[143,150890,150891,150893,150895,150897],{"class":145,"line":2524},[143,150892,31743],{"class":280},[143,150894,150818],{"class":149},[143,150896,10377],{"class":755},[143,150898,150899],{"class":149}," money\n",[143,150901,150902],{"class":145,"line":2529},[143,150903,3300],{"emptyLinePlaceholder":976},[143,150905,150906,150908,150911],{"class":145,"line":2543},[143,150907,31699],{"class":755},[143,150909,150910],{"class":156}," withdraw",[143,150912,150859],{"class":149},[143,150914,150915,150917,150919,150921,150923],{"class":145,"line":2548},[143,150916,3397],{"class":755},[143,150918,150866],{"class":149},[143,150920,2490],{"class":755},[143,150922,4993],{"class":280},[143,150924,4639],{"class":149},[143,150926,150927,150929,150931,150934],{"class":145,"line":2554},[143,150928,35548],{"class":280},[143,150930,1049],{"class":149},[143,150932,150933],{"class":163},"\"取款金额必须大于0\"",[143,150935,1055],{"class":149},[143,150937,150938],{"class":145,"line":2575},[143,150939,150888],{"class":755},[143,150941,150942,150944,150946,150948,150950],{"class":145,"line":2580},[143,150943,3397],{"class":755},[143,150945,150866],{"class":149},[143,150947,1998],{"class":755},[143,150949,39771],{"class":280},[143,150951,150952],{"class":149},".__balance:\n",[143,150954,150955,150957,150959,150962],{"class":145,"line":2594},[143,150956,35548],{"class":280},[143,150958,1049],{"class":149},[143,150960,150961],{"class":163},"\"余额不足\"",[143,150963,1055],{"class":149},[143,150965,150966],{"class":145,"line":2599},[143,150967,150888],{"class":755},[143,150969,150970,150972,150974,150977],{"class":145,"line":2628},[143,150971,31743],{"class":280},[143,150973,150818],{"class":149},[143,150975,150976],{"class":755},"-=",[143,150978,150899],{"class":149},[143,150980,150981],{"class":145,"line":2633},[143,150982,3300],{"emptyLinePlaceholder":976},[143,150984,150985],{"class":145,"line":2650},[143,150986,3300],{"emptyLinePlaceholder":976},[143,150988,150989,150992,150994,150997,150999,151001,151003],{"class":145,"line":2655},[143,150990,150991],{"class":149},"account ",[143,150993,160],{"class":755},[143,150995,150996],{"class":149}," Account(",[143,150998,150612],{"class":163},[143,151000,13335],{"class":149},[143,151002,7310],{"class":280},[143,151004,1055],{"class":149},[143,151006,151007,151010,151012],{"class":145,"line":2660},[143,151008,151009],{"class":149},"account.deposit(",[143,151011,2623],{"class":280},[143,151013,1055],{"class":149},[143,151015,151016,151019,151021],{"class":145,"line":2665},[143,151017,151018],{"class":149},"account.withdraw(",[143,151020,1352],{"class":280},[143,151022,1055],{"class":149},[143,151024,151025,151027],{"class":145,"line":2679},[143,151026,31313],{"class":280},[143,151028,151029],{"class":149},"(account.get_balance())\n",[63,151031,151032],{},"封装的意义是避免外部随意修改内部状态。",[14,151034,151036],{"id":151035},"_118-继承","11.8 继承",[63,151038,151039],{},"继承可以让子类复用父类的属性和方法。",[133,151041,151043],{"className":31276,"code":151042,"language":31278,"meta":138,"style":138},"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",[140,151044,151045,151054,151063,151074,151078,151082,151096,151105,151116,151120,151124,151134,151139],{"__ignoreMap":138},[143,151046,151047,151049,151052],{"class":145,"line":146},[143,151048,15593],{"class":755},[143,151050,151051],{"class":156}," Animal",[143,151053,4639],{"class":149},[143,151055,151056,151058,151061],{"class":145,"line":35},[143,151057,31699],{"class":755},[143,151059,151060],{"class":156}," eat",[143,151062,31705],{"class":149},[143,151064,151065,151067,151069,151072],{"class":145,"line":46},[143,151066,33349],{"class":280},[143,151068,1049],{"class":149},[143,151070,151071],{"class":163},"\"吃东西\"",[143,151073,1055],{"class":149},[143,151075,151076],{"class":145,"line":293},[143,151077,3300],{"emptyLinePlaceholder":976},[143,151079,151080],{"class":145,"line":306},[143,151081,3300],{"emptyLinePlaceholder":976},[143,151083,151084,151086,151089,151091,151094],{"class":145,"line":319},[143,151085,15593],{"class":755},[143,151087,151088],{"class":156}," Dog",[143,151090,1049],{"class":149},[143,151092,151093],{"class":156},"Animal",[143,151095,31684],{"class":149},[143,151097,151098,151100,151103],{"class":145,"line":332},[143,151099,31699],{"class":755},[143,151101,151102],{"class":156}," bark",[143,151104,31705],{"class":149},[143,151106,151107,151109,151111,151114],{"class":145,"line":345},[143,151108,33349],{"class":280},[143,151110,1049],{"class":149},[143,151112,151113],{"class":163},"\"汪汪\"",[143,151115,1055],{"class":149},[143,151117,151118],{"class":145,"line":701},[143,151119,3300],{"emptyLinePlaceholder":976},[143,151121,151122],{"class":145,"line":707},[143,151123,3300],{"emptyLinePlaceholder":976},[143,151125,151126,151129,151131],{"class":145,"line":727},[143,151127,151128],{"class":149},"dog ",[143,151130,160],{"class":755},[143,151132,151133],{"class":149}," Dog()\n",[143,151135,151136],{"class":145,"line":2518},[143,151137,151138],{"class":149},"dog.eat()\n",[143,151140,151141],{"class":145,"line":2524},[143,151142,151143],{"class":149},"dog.bark()\n",[63,151145,151146],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151148,151150],{"id":151149},"_119-方法重写","11.9 方法重写",[133,151152,151154],{"className":31276,"code":151153,"language":31278,"meta":138,"style":138},"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",[140,151155,151156,151164,151173,151184,151188,151192,151204,151212,151222,151226,151230,151243,151251,151262,151266,151270,151278,151288,151292,151297],{"__ignoreMap":138},[143,151157,151158,151160,151162],{"class":145,"line":146},[143,151159,15593],{"class":755},[143,151161,151051],{"class":156},[143,151163,4639],{"class":149},[143,151165,151166,151168,151171],{"class":145,"line":35},[143,151167,31699],{"class":755},[143,151169,151170],{"class":156}," speak",[143,151172,31705],{"class":149},[143,151174,151175,151177,151179,151182],{"class":145,"line":46},[143,151176,33349],{"class":280},[143,151178,1049],{"class":149},[143,151180,151181],{"class":163},"\"动物叫\"",[143,151183,1055],{"class":149},[143,151185,151186],{"class":145,"line":293},[143,151187,3300],{"emptyLinePlaceholder":976},[143,151189,151190],{"class":145,"line":306},[143,151191,3300],{"emptyLinePlaceholder":976},[143,151193,151194,151196,151198,151200,151202],{"class":145,"line":319},[143,151195,15593],{"class":755},[143,151197,151088],{"class":156},[143,151199,1049],{"class":149},[143,151201,151093],{"class":156},[143,151203,31684],{"class":149},[143,151205,151206,151208,151210],{"class":145,"line":332},[143,151207,31699],{"class":755},[143,151209,151170],{"class":156},[143,151211,31705],{"class":149},[143,151213,151214,151216,151218,151220],{"class":145,"line":345},[143,151215,33349],{"class":280},[143,151217,1049],{"class":149},[143,151219,151113],{"class":163},[143,151221,1055],{"class":149},[143,151223,151224],{"class":145,"line":701},[143,151225,3300],{"emptyLinePlaceholder":976},[143,151227,151228],{"class":145,"line":707},[143,151229,3300],{"emptyLinePlaceholder":976},[143,151231,151232,151234,151237,151239,151241],{"class":145,"line":727},[143,151233,15593],{"class":755},[143,151235,151236],{"class":156}," Cat",[143,151238,1049],{"class":149},[143,151240,151093],{"class":156},[143,151242,31684],{"class":149},[143,151244,151245,151247,151249],{"class":145,"line":2518},[143,151246,31699],{"class":755},[143,151248,151170],{"class":156},[143,151250,31705],{"class":149},[143,151252,151253,151255,151257,151260],{"class":145,"line":2524},[143,151254,33349],{"class":280},[143,151256,1049],{"class":149},[143,151258,151259],{"class":163},"\"喵喵\"",[143,151261,1055],{"class":149},[143,151263,151264],{"class":145,"line":2529},[143,151265,3300],{"emptyLinePlaceholder":976},[143,151267,151268],{"class":145,"line":2543},[143,151269,3300],{"emptyLinePlaceholder":976},[143,151271,151272,151274,151276],{"class":145,"line":2548},[143,151273,151128],{"class":149},[143,151275,160],{"class":755},[143,151277,151133],{"class":149},[143,151279,151280,151283,151285],{"class":145,"line":2554},[143,151281,151282],{"class":149},"cat ",[143,151284,160],{"class":755},[143,151286,151287],{"class":149}," Cat()\n",[143,151289,151290],{"class":145,"line":2575},[143,151291,3300],{"emptyLinePlaceholder":976},[143,151293,151294],{"class":145,"line":2580},[143,151295,151296],{"class":149},"dog.speak()\n",[143,151298,151299],{"class":145,"line":2594},[143,151300,151301],{"class":149},"cat.speak()\n",[14,151303,151305],{"id":151304},"_1110-super","11.10 super",[63,151307,151308,151309,151312],{},"子类可以通过 ",[140,151310,151311],{},"super()"," 调用父类方法。",[133,151314,151316],{"className":31276,"code":151315,"language":31278,"meta":138,"style":138},"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",[140,151317,151318,151326,151335,151345,151349,151353,151365,151374,151385,151395,151399,151403,151419],{"__ignoreMap":138},[143,151319,151320,151322,151324],{"class":145,"line":146},[143,151321,15593],{"class":755},[143,151323,16468],{"class":156},[143,151325,4639],{"class":149},[143,151327,151328,151330,151332],{"class":145,"line":35},[143,151329,31699],{"class":755},[143,151331,31702],{"class":280},[143,151333,151334],{"class":149},"(self, name):\n",[143,151336,151337,151339,151341,151343],{"class":145,"line":46},[143,151338,31743],{"class":280},[143,151340,150514],{"class":149},[143,151342,160],{"class":755},[143,151344,150519],{"class":149},[143,151346,151347],{"class":145,"line":293},[143,151348,3300],{"emptyLinePlaceholder":976},[143,151350,151351],{"class":145,"line":306},[143,151352,3300],{"emptyLinePlaceholder":976},[143,151354,151355,151357,151359,151361,151363],{"class":145,"line":319},[143,151356,15593],{"class":755},[143,151358,8798],{"class":156},[143,151360,1049],{"class":149},[143,151362,19944],{"class":156},[143,151364,31684],{"class":149},[143,151366,151367,151369,151371],{"class":145,"line":332},[143,151368,31699],{"class":755},[143,151370,31702],{"class":280},[143,151372,151373],{"class":149},"(self, name, score):\n",[143,151375,151376,151378,151380,151382],{"class":145,"line":345},[143,151377,31715],{"class":280},[143,151379,18159],{"class":149},[143,151381,31727],{"class":280},[143,151383,151384],{"class":149},"(name)\n",[143,151386,151387,151389,151391,151393],{"class":145,"line":701},[143,151388,31743],{"class":280},[143,151390,150538],{"class":149},[143,151392,160],{"class":755},[143,151394,2481],{"class":149},[143,151396,151397],{"class":145,"line":707},[143,151398,3300],{"emptyLinePlaceholder":976},[143,151400,151401],{"class":145,"line":727},[143,151402,3300],{"emptyLinePlaceholder":976},[143,151404,151405,151407,151409,151411,151413,151415,151417],{"class":145,"line":2518},[143,151406,150205],{"class":149},[143,151408,160],{"class":755},[143,151410,150609],{"class":149},[143,151412,150612],{"class":163},[143,151414,13335],{"class":149},[143,151416,2027],{"class":280},[143,151418,1055],{"class":149},[143,151420,151421,151423],{"class":145,"line":2524},[143,151422,31313],{"class":280},[143,151424,151425],{"class":149},"(student.name, student.score)\n",[14,151427,151429],{"id":151428},"_1111-多态","11.11 多态",[63,151431,151432],{},"多态指不同对象响应同一个方法，表现出不同结果。",[133,151434,151436],{"className":31276,"code":151435,"language":31278,"meta":138,"style":138},"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",[140,151437,151438,151446,151454,151464,151468,151472,151480,151488,151498,151502,151506,151516,151521,151525,151529,151534],{"__ignoreMap":138},[143,151439,151440,151442,151444],{"class":145,"line":146},[143,151441,15593],{"class":755},[143,151443,151088],{"class":156},[143,151445,4639],{"class":149},[143,151447,151448,151450,151452],{"class":145,"line":35},[143,151449,31699],{"class":755},[143,151451,151170],{"class":156},[143,151453,31705],{"class":149},[143,151455,151456,151458,151460,151462],{"class":145,"line":46},[143,151457,33349],{"class":280},[143,151459,1049],{"class":149},[143,151461,151113],{"class":163},[143,151463,1055],{"class":149},[143,151465,151466],{"class":145,"line":293},[143,151467,3300],{"emptyLinePlaceholder":976},[143,151469,151470],{"class":145,"line":306},[143,151471,3300],{"emptyLinePlaceholder":976},[143,151473,151474,151476,151478],{"class":145,"line":319},[143,151475,15593],{"class":755},[143,151477,151236],{"class":156},[143,151479,4639],{"class":149},[143,151481,151482,151484,151486],{"class":145,"line":332},[143,151483,31699],{"class":755},[143,151485,151170],{"class":156},[143,151487,31705],{"class":149},[143,151489,151490,151492,151494,151496],{"class":145,"line":345},[143,151491,33349],{"class":280},[143,151493,1049],{"class":149},[143,151495,151259],{"class":163},[143,151497,1055],{"class":149},[143,151499,151500],{"class":145,"line":701},[143,151501,3300],{"emptyLinePlaceholder":976},[143,151503,151504],{"class":145,"line":707},[143,151505,3300],{"emptyLinePlaceholder":976},[143,151507,151508,151510,151513],{"class":145,"line":727},[143,151509,32845],{"class":755},[143,151511,151512],{"class":156}," make_sound",[143,151514,151515],{"class":149},"(animal):\n",[143,151517,151518],{"class":145,"line":2518},[143,151519,151520],{"class":149},"    animal.speak()\n",[143,151522,151523],{"class":145,"line":2524},[143,151524,3300],{"emptyLinePlaceholder":976},[143,151526,151527],{"class":145,"line":2529},[143,151528,3300],{"emptyLinePlaceholder":976},[143,151530,151531],{"class":145,"line":2543},[143,151532,151533],{"class":149},"make_sound(Dog())\n",[143,151535,151536],{"class":145,"line":2548},[143,151537,151538],{"class":149},"make_sound(Cat())\n",[63,151540,151541],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,151543,151545],{"id":151544},"_1112-类属性和实例属性","11.12 类属性和实例属性",[63,151547,151548],{},"实例属性属于对象：",[133,151550,151552],{"className":31276,"code":151551,"language":31278,"meta":138,"style":138},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[140,151553,151554,151562,151570],{"__ignoreMap":138},[143,151555,151556,151558,151560],{"class":145,"line":146},[143,151557,15593],{"class":755},[143,151559,8798],{"class":156},[143,151561,4639],{"class":149},[143,151563,151564,151566,151568],{"class":145,"line":35},[143,151565,31699],{"class":755},[143,151567,31702],{"class":280},[143,151569,151334],{"class":149},[143,151571,151572,151574,151576,151578],{"class":145,"line":46},[143,151573,31743],{"class":280},[143,151575,150514],{"class":149},[143,151577,160],{"class":755},[143,151579,150519],{"class":149},[63,151581,151582],{},"类属性属于类，所有对象共享：",[133,151584,151586],{"className":31276,"code":151585,"language":31278,"meta":138,"style":138},"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",[140,151587,151588,151596,151606,151610,151618,151628,151632,151636,151649,151663,151667,151674,151681],{"__ignoreMap":138},[143,151589,151590,151592,151594],{"class":145,"line":146},[143,151591,15593],{"class":755},[143,151593,8798],{"class":156},[143,151595,4639],{"class":149},[143,151597,151598,151601,151603],{"class":145,"line":35},[143,151599,151600],{"class":149},"    school ",[143,151602,160],{"class":755},[143,151604,151605],{"class":163}," \"黑马学校\"\n",[143,151607,151608],{"class":145,"line":46},[143,151609,3300],{"emptyLinePlaceholder":976},[143,151611,151612,151614,151616],{"class":145,"line":293},[143,151613,31699],{"class":755},[143,151615,31702],{"class":280},[143,151617,151334],{"class":149},[143,151619,151620,151622,151624,151626],{"class":145,"line":306},[143,151621,31743],{"class":280},[143,151623,150514],{"class":149},[143,151625,160],{"class":755},[143,151627,150519],{"class":149},[143,151629,151630],{"class":145,"line":319},[143,151631,3300],{"emptyLinePlaceholder":976},[143,151633,151634],{"class":145,"line":332},[143,151635,3300],{"emptyLinePlaceholder":976},[143,151637,151638,151641,151643,151645,151647],{"class":145,"line":345},[143,151639,151640],{"class":149},"s1 ",[143,151642,160],{"class":755},[143,151644,150609],{"class":149},[143,151646,150612],{"class":163},[143,151648,1055],{"class":149},[143,151650,151651,151654,151656,151658,151661],{"class":145,"line":701},[143,151652,151653],{"class":149},"s2 ",[143,151655,160],{"class":755},[143,151657,150609],{"class":149},[143,151659,151660],{"class":163},"\"小红\"",[143,151662,1055],{"class":149},[143,151664,151665],{"class":145,"line":707},[143,151666,3300],{"emptyLinePlaceholder":976},[143,151668,151669,151671],{"class":145,"line":727},[143,151670,31313],{"class":280},[143,151672,151673],{"class":149},"(s1.school)\n",[143,151675,151676,151678],{"class":145,"line":2518},[143,151677,31313],{"class":280},[143,151679,151680],{"class":149},"(s2.school)\n",[143,151682,151683,151685],{"class":145,"line":2524},[143,151684,31313],{"class":280},[143,151686,151687],{"class":149},"(Student.school)\n",[63,151689,151690],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151692,151694],{"id":151693},"_1113-类方法和静态方法","11.13 类方法和静态方法",[58,151696,151698],{"id":151697},"_11131-类方法","11.13.1 类方法",[63,151700,151701,151702,151705,151706,29283],{},"类方法使用 ",[140,151703,151704],{},"@classmethod","，第一个参数通常是 ",[140,151707,151708],{},"cls",[133,151710,151712],{"className":31276,"code":151711,"language":31278,"meta":138,"style":138},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[140,151713,151714,151722,151730,151734,151742,151752,151762,151766,151770],{"__ignoreMap":138},[143,151715,151716,151718,151720],{"class":145,"line":146},[143,151717,15593],{"class":755},[143,151719,8798],{"class":156},[143,151721,4639],{"class":149},[143,151723,151724,151726,151728],{"class":145,"line":35},[143,151725,151600],{"class":149},[143,151727,160],{"class":755},[143,151729,151605],{"class":163},[143,151731,151732],{"class":145,"line":46},[143,151733,3300],{"emptyLinePlaceholder":976},[143,151735,151736,151739],{"class":145,"line":293},[143,151737,151738],{"class":156},"    @",[143,151740,151741],{"class":280},"classmethod\n",[143,151743,151744,151746,151749],{"class":145,"line":306},[143,151745,31699],{"class":755},[143,151747,151748],{"class":156}," get_school",[143,151750,151751],{"class":149},"(cls):\n",[143,151753,151754,151756,151759],{"class":145,"line":319},[143,151755,15651],{"class":755},[143,151757,151758],{"class":280}," cls",[143,151760,151761],{"class":149},".school\n",[143,151763,151764],{"class":145,"line":332},[143,151765,3300],{"emptyLinePlaceholder":976},[143,151767,151768],{"class":145,"line":345},[143,151769,3300],{"emptyLinePlaceholder":976},[143,151771,151772,151774],{"class":145,"line":701},[143,151773,31313],{"class":280},[143,151775,151776],{"class":149},"(Student.get_school())\n",[58,151778,151780],{"id":151779},"_11132-静态方法","11.13.2 静态方法",[63,151782,151783,151784,151787],{},"静态方法使用 ",[140,151785,151786],{},"@staticmethod","，不需要访问实例和类。",[133,151789,151791],{"className":31276,"code":151790,"language":31278,"meta":138,"style":138},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[140,151792,151793,151802,151809,151818,151829,151833,151837],{"__ignoreMap":138},[143,151794,151795,151797,151800],{"class":145,"line":146},[143,151796,15593],{"class":755},[143,151798,151799],{"class":156}," MathUtils",[143,151801,4639],{"class":149},[143,151803,151804,151806],{"class":145,"line":35},[143,151805,151738],{"class":156},[143,151807,151808],{"class":280},"staticmethod\n",[143,151810,151811,151813,151815],{"class":145,"line":46},[143,151812,31699],{"class":755},[143,151814,6109],{"class":156},[143,151816,151817],{"class":149},"(a, b):\n",[143,151819,151820,151822,151824,151826],{"class":145,"line":293},[143,151821,15651],{"class":755},[143,151823,11769],{"class":149},[143,151825,1522],{"class":755},[143,151827,151828],{"class":149}," b\n",[143,151830,151831],{"class":145,"line":306},[143,151832,3300],{"emptyLinePlaceholder":976},[143,151834,151835],{"class":145,"line":319},[143,151836,3300],{"emptyLinePlaceholder":976},[143,151838,151839,151841,151844,151846,151848,151850],{"class":145,"line":332},[143,151840,31313],{"class":280},[143,151842,151843],{"class":149},"(MathUtils.add(",[143,151845,771],{"class":280},[143,151847,13335],{"class":149},[143,151849,1122],{"class":280},[143,151851,31395],{"class":149},[63,151853,151854],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151856,151858],{"id":151857},"_1114-dataclass","11.14 dataclass",[63,151860,151861,151864],{},[140,151862,151863],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[133,151866,151868],{"className":31276,"code":151867,"language":31278,"meta":138,"style":138},"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",[140,151869,151870,151882,151886,151890,151895,151903,151911,151919,151927,151931,151935,151955],{"__ignoreMap":138},[143,151871,151872,151874,151877,151879],{"class":145,"line":146},[143,151873,31635],{"class":755},[143,151875,151876],{"class":149}," dataclasses ",[143,151878,31290],{"class":755},[143,151880,151881],{"class":149}," dataclass\n",[143,151883,151884],{"class":145,"line":35},[143,151885,3300],{"emptyLinePlaceholder":976},[143,151887,151888],{"class":145,"line":46},[143,151889,3300],{"emptyLinePlaceholder":976},[143,151891,151892],{"class":145,"line":293},[143,151893,151894],{"class":156},"@dataclass\n",[143,151896,151897,151899,151901],{"class":145,"line":306},[143,151898,15593],{"class":755},[143,151900,8798],{"class":156},[143,151902,4639],{"class":149},[143,151904,151905,151908],{"class":145,"line":319},[143,151906,151907],{"class":149},"    name: ",[143,151909,151910],{"class":280},"str\n",[143,151912,151913,151916],{"class":145,"line":332},[143,151914,151915],{"class":149},"    age: ",[143,151917,151918],{"class":280},"int\n",[143,151920,151921,151924],{"class":145,"line":345},[143,151922,151923],{"class":149},"    score: ",[143,151925,151926],{"class":280},"float\n",[143,151928,151929],{"class":145,"line":701},[143,151930,3300],{"emptyLinePlaceholder":976},[143,151932,151933],{"class":145,"line":707},[143,151934,3300],{"emptyLinePlaceholder":976},[143,151936,151937,151939,151941,151943,151945,151947,151949,151951,151953],{"class":145,"line":727},[143,151938,150205],{"class":149},[143,151940,160],{"class":755},[143,151942,150609],{"class":149},[143,151944,150612],{"class":163},[143,151946,13335],{"class":149},[143,151948,1691],{"class":280},[143,151950,13335],{"class":149},[143,151952,2027],{"class":280},[143,151954,1055],{"class":149},[143,151956,151957,151959],{"class":145,"line":2518},[143,151958,31313],{"class":280},[143,151960,150766],{"class":149},[63,151962,151963,151964,1255,151966,151969],{},"它会自动生成 ",[140,151965,31727],{},[140,151967,151968],{},"__repr__"," 等方法。适合数据模型类。",[14,151971,151973],{"id":151972},"_1115-小案例学生类","11.15 小案例：学生类",[133,151975,151977],{"className":31276,"code":151976,"language":31278,"meta":138,"style":138},"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",[140,151978,151979,151987,151996,152008,152018,152028,152038,152042,152051,152064,152068,152077,152083,152095,152107,152119,152131,152135,152139,152145,152155,152164,152174,152182,152190,152199,152203,152207,152215,152251,152255,152259,152284,152291],{"__ignoreMap":138},[143,151980,151981,151983,151985],{"class":145,"line":146},[143,151982,15593],{"class":755},[143,151984,8798],{"class":156},[143,151986,4639],{"class":149},[143,151988,151989,151991,151993],{"class":145,"line":35},[143,151990,31699],{"class":755},[143,151992,31702],{"class":280},[143,151994,151995],{"class":149},"(self, student_id, name, age, score):\n",[143,151997,151998,152000,152003,152005],{"class":145,"line":46},[143,151999,31743],{"class":280},[143,152001,152002],{"class":149},".student_id ",[143,152004,160],{"class":755},[143,152006,152007],{"class":149}," student_id\n",[143,152009,152010,152012,152014,152016],{"class":145,"line":293},[143,152011,31743],{"class":280},[143,152013,150514],{"class":149},[143,152015,160],{"class":755},[143,152017,150519],{"class":149},[143,152019,152020,152022,152024,152026],{"class":145,"line":306},[143,152021,31743],{"class":280},[143,152023,150526],{"class":149},[143,152025,160],{"class":755},[143,152027,150531],{"class":149},[143,152029,152030,152032,152034,152036],{"class":145,"line":319},[143,152031,31743],{"class":280},[143,152033,150538],{"class":149},[143,152035,160],{"class":755},[143,152037,2481],{"class":149},[143,152039,152040],{"class":145,"line":332},[143,152041,3300],{"emptyLinePlaceholder":976},[143,152043,152044,152046,152049],{"class":145,"line":345},[143,152045,31699],{"class":755},[143,152047,152048],{"class":156}," is_passed",[143,152050,31705],{"class":149},[143,152052,152053,152055,152057,152059,152061],{"class":145,"line":701},[143,152054,15651],{"class":755},[143,152056,39771],{"class":280},[143,152058,150538],{"class":149},[143,152060,2611],{"class":755},[143,152062,152063],{"class":280}," 60\n",[143,152065,152066],{"class":145,"line":707},[143,152067,3300],{"emptyLinePlaceholder":976},[143,152069,152070,152072,152075],{"class":145,"line":727},[143,152071,31699],{"class":755},[143,152073,152074],{"class":156}," to_dict",[143,152076,31705],{"class":149},[143,152078,152079,152081],{"class":145,"line":2518},[143,152080,15651],{"class":755},[143,152082,275],{"class":149},[143,152084,152085,152088,152090,152092],{"class":145,"line":2524},[143,152086,152087],{"class":163},"            \"student_id\"",[143,152089,284],{"class":149},[143,152091,31721],{"class":280},[143,152093,152094],{"class":149},".student_id,\n",[143,152096,152097,152100,152102,152104],{"class":145,"line":2529},[143,152098,152099],{"class":163},"            \"name\"",[143,152101,284],{"class":149},[143,152103,31721],{"class":280},[143,152105,152106],{"class":149},".name,\n",[143,152108,152109,152112,152114,152116],{"class":145,"line":2543},[143,152110,152111],{"class":163},"            \"age\"",[143,152113,284],{"class":149},[143,152115,31721],{"class":280},[143,152117,152118],{"class":149},".age,\n",[143,152120,152121,152124,152126,152128],{"class":145,"line":2548},[143,152122,152123],{"class":163},"            \"score\"",[143,152125,284],{"class":149},[143,152127,31721],{"class":280},[143,152129,152130],{"class":149},".score,\n",[143,152132,152133],{"class":145,"line":2554},[143,152134,3429],{"class":149},[143,152136,152137],{"class":145,"line":2575},[143,152138,3300],{"emptyLinePlaceholder":976},[143,152140,152141,152143],{"class":145,"line":2580},[143,152142,151738],{"class":156},[143,152144,151741],{"class":280},[143,152146,152147,152149,152152],{"class":145,"line":2594},[143,152148,31699],{"class":755},[143,152150,152151],{"class":156}," from_dict",[143,152153,152154],{"class":149},"(cls, data):\n",[143,152156,152157,152159,152161],{"class":145,"line":2599},[143,152158,15651],{"class":755},[143,152160,151758],{"class":280},[143,152162,152163],{"class":149},"(\n",[143,152165,152166,152169,152172],{"class":145,"line":2628},[143,152167,152168],{"class":149},"            data[",[143,152170,152171],{"class":163},"\"student_id\"",[143,152173,88714],{"class":149},[143,152175,152176,152178,152180],{"class":145,"line":2633},[143,152177,152168],{"class":149},[143,152179,63562],{"class":163},[143,152181,88714],{"class":149},[143,152183,152184,152186,152188],{"class":145,"line":2650},[143,152185,152168],{"class":149},[143,152187,70005],{"class":163},[143,152189,88714],{"class":149},[143,152191,152192,152194,152197],{"class":145,"line":2655},[143,152193,152168],{"class":149},[143,152195,152196],{"class":163},"\"score\"",[143,152198,88714],{"class":149},[143,152200,152201],{"class":145,"line":2660},[143,152202,39024],{"class":149},[143,152204,152205],{"class":145,"line":2665},[143,152206,3300],{"emptyLinePlaceholder":976},[143,152208,152209,152211,152213],{"class":145,"line":2679},[143,152210,31699],{"class":755},[143,152212,150705],{"class":280},[143,152214,31705],{"class":149},[143,152216,152217,152219,152221,152223,152225,152228,152230,152233,152235,152237,152239,152241,152243,152245,152247,152249],{"class":145,"line":2684},[143,152218,15651],{"class":755},[143,152220,150714],{"class":755},[143,152222,1292],{"class":163},[143,152224,150176],{"class":280},[143,152226,152227],{"class":149},".student_id",[143,152229,366],{"class":280},[143,152231,152232],{"class":280}," {self",[143,152234,81179],{"class":149},[143,152236,366],{"class":280},[143,152238,152232],{"class":280},[143,152240,81191],{"class":149},[143,152242,366],{"class":280},[143,152244,152232],{"class":280},[143,152246,150586],{"class":149},[143,152248,366],{"class":280},[143,152250,26031],{"class":163},[143,152252,152253],{"class":145,"line":3477},[143,152254,3300],{"emptyLinePlaceholder":976},[143,152256,152257],{"class":145,"line":3491},[143,152258,3300],{"emptyLinePlaceholder":976},[143,152260,152261,152263,152265,152267,152270,152272,152274,152276,152278,152280,152282],{"class":145,"line":3499},[143,152262,150205],{"class":149},[143,152264,160],{"class":755},[143,152266,150609],{"class":149},[143,152268,152269],{"class":163},"\"001\"",[143,152271,13335],{"class":149},[143,152273,150612],{"class":163},[143,152275,13335],{"class":149},[143,152277,1691],{"class":280},[143,152279,13335],{"class":149},[143,152281,2027],{"class":280},[143,152283,1055],{"class":149},[143,152285,152286,152288],{"class":145,"line":3504},[143,152287,31313],{"class":280},[143,152289,152290],{"class":149},"(student.is_passed())\n",[143,152292,152293,152295],{"class":145,"line":3510},[143,152294,31313],{"class":280},[143,152296,152297],{"class":149},"(student.to_dict())\n",[63,152299,152300,101894,152303,152306],{},[140,152301,152302],{},"to_dict()",[140,152304,152305],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152308,152310],{"id":152309},"_1116-易错点","11.16 易错点",[19,152312,152313,152319,152325,152330,152333,152336],{},[22,152314,152315,152316,29283],{},"类名推荐使用大驼峰，如 ",[140,152317,152318],{},"StudentManager",[22,152320,152321,152322,152324],{},"方法第一个参数必须写 ",[140,152323,31721],{},"，调用时不用传。",[22,152326,152327,152329],{},[140,152328,31727],{}," 不是普通方法，它在创建对象时自动执行。",[22,152331,152332],{},"私有属性不是绝对安全，只是约定和名称改写。",[22,152334,152335],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[22,152337,152338],{},"类中方法太多时，说明职责可能过重。",[14,152340,152342],{"id":152341},"_1117-本章练习","11.17 本章练习",[19,152344,152345,152351,152357,152362,152375],{},[22,152346,152347,152348,152350],{},"定义 ",[140,152349,150292],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[22,152352,152347,152353,152356],{},[140,152354,152355],{},"Account"," 类，实现存款、取款、查询余额。",[22,152358,152347,152359,152361],{},[140,152360,18124],{}," 类，计算圆的周长和面积。",[22,152363,152347,152364,1255,152367,152370,152371,152374],{},[140,152365,152366],{},"Dog",[140,152368,152369],{},"Cat"," 类，并用同一个函数调用它们的 ",[140,152372,152373],{},"speak()"," 方法。",[22,152376,105241,152377,152379,152380,29283],{},[140,152378,151863],{}," 定义一个商品类 ",[140,152381,152382],{},"Product",[954,152384,152385],{},"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":138,"searchDepth":35,"depth":35,"links":152387},[152388,152389,152390,152391,152392,152393,152395,152396,152397,152398,152399,152400,152401,152405,152406,152407,152408],{"id":150056,"depth":35,"text":150057},{"id":150239,"depth":35,"text":150240},{"id":150303,"depth":35,"text":150304},{"id":150380,"depth":35,"text":150381},{"id":150479,"depth":35,"text":150480},{"id":150643,"depth":35,"text":152394},"11.6 str",{"id":150769,"depth":35,"text":150770},{"id":151035,"depth":35,"text":151036},{"id":151149,"depth":35,"text":151150},{"id":151304,"depth":35,"text":151305},{"id":151428,"depth":35,"text":151429},{"id":151544,"depth":35,"text":151545},{"id":151693,"depth":35,"text":151694,"children":152402},[152403,152404],{"id":151697,"depth":46,"text":151698},{"id":151779,"depth":46,"text":151780},{"id":151857,"depth":35,"text":151858},{"id":151972,"depth":35,"text":151973},{"id":152309,"depth":35,"text":152310},{"id":152341,"depth":35,"text":152342},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150048,"description":973},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152415,"title":152416,"body":152417,"description":973,"extension":974,"meta":155730,"navigation":976,"path":155731,"seo":155732,"stem":155733,"__hash__":155734},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152418,"toc":155706},[152419,152422,152426,152429,152432,152461,152464,152472,152476,152480,152483,152506,152509,152515,152519,153965,153968,153989,153993,153996,154008,154011,154195,154198,154324,154327,154331,154335,154471,154475,154561,154565,154647,154651,154688,154692,154881,154885,154888,155118,155122,155125,155306,155309,155313,155316,155322,155325,155351,155355,155358,155372,155375,155400,155403,155417,155420,155437,155440,155457,155460,155477,155481,155507,155511,155534,155538,155541,155543,155549,155551,155572,155575,155581,155587,155591,155594,155670,155673,155677,155703],[10,152420,152416],{"id":152421},"_12-综合案例与复习路线",[14,152423,152425],{"id":152424},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[63,152427,152428],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[63,152430,152431],{},"一个合格的入门综合项目最好覆盖：",[19,152433,152434,152437,152440,152443,152446,152449,152452,152455,152458],{},[22,152435,152436],{},"输入输出。",[22,152438,152439],{},"判断和循环。",[22,152441,152442],{},"函数拆分。",[22,152444,152445],{},"列表、字典等容器。",[22,152447,152448],{},"文件持久化。",[22,152450,152451],{},"异常处理。",[22,152453,152454],{},"模块拆分。",[22,152456,152457],{},"可选：面向对象。",[22,152459,152460],{},"可选：数据可视化。",[63,152462,152463],{},"本章整理两个方向：",[19,152465,152466,152469],{},[22,152467,152468],{},"学生管理系统。",[22,152470,152471],{},"销售数据统计和可视化。",[14,152473,152475],{"id":152474},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[58,152477,152479],{"id":152478},"_1221-需求","12.2.1 需求",[63,152481,152482],{},"实现一个命令行学生管理系统：",[19,152484,152485,152488,152491,152494,152497,152500,152503],{},[22,152486,152487],{},"添加学生。",[22,152489,152490],{},"删除学生。",[22,152492,152493],{},"修改学生。",[22,152495,152496],{},"查询学生。",[22,152498,152499],{},"显示所有学生。",[22,152501,152502],{},"保存到 JSON 文件。",[22,152504,152505],{},"程序启动时自动读取 JSON 文件。",[63,152507,152508],{},"学生字段：",[133,152510,152513],{"className":152511,"code":152512,"language":6087,"meta":138},[6085],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[140,152514,152512],{"__ignoreMap":138},[14,152516,152518],{"id":152517},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[133,152520,152522],{"className":31276,"code":152521,"language":31278,"meta":138,"style":138},"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",[140,152523,152524,152530,152540,152544,152558,152562,152566,152575,152587,152593,152597,152603,152634,152644,152651,152662,152668,152672,152676,152686,152717,152743,152747,152751,152760,152771,152782,152793,152804,152815,152826,152837,152841,152845,152855,152867,152883,152890,152897,152901,152905,152915,152923,152930,152943,152953,152964,152968,152972,152981,152989,152995,153007,153015,153026,153030,153034,153043,153059,153063,153070,153081,153086,153090,153106,153121,153136,153140,153145,153153,153161,153169,153177,153181,153186,153197,153201,153205,153214,153229,153239,153243,153255,153266,153270,153274,153279,153283,153294,153298,153302,153311,153326,153334,153338,153350,153360,153364,153368,153383,153396,153409,153413,153426,153438,153450,153454,153458,153469,153473,153477,153486,153501,153509,153513,153525,153535,153539,153543,153548,153552,153556,153566,153572,153594,153613,153632,153651,153656,153660,153664,153673,153681,153692,153696,153700,153726,153736,153741,153745,153749,153757,153767,153771,153779,153784,153800,153804,153818,153823,153837,153842,153855,153860,153873,153878,153891,153896,153909,153920,153924,153930,153941,153945,153949,153961],{"__ignoreMap":138},[143,152525,152526,152528],{"class":145,"line":146},[143,152527,31290],{"class":755},[143,152529,147815],{"class":149},[143,152531,152532,152534,152536,152538],{"class":145,"line":35},[143,152533,31635],{"class":755},[143,152535,109186],{"class":149},[143,152537,31290],{"class":755},[143,152539,109191],{"class":149},[143,152541,152542],{"class":145,"line":46},[143,152543,3300],{"emptyLinePlaceholder":976},[143,152545,152546,152549,152551,152553,152556],{"class":145,"line":293},[143,152547,152548],{"class":280},"DATA_FILE",[143,152550,14464],{"class":755},[143,152552,109420],{"class":149},[143,152554,152555],{"class":163},"\"students.json\"",[143,152557,1055],{"class":149},[143,152559,152560],{"class":145,"line":306},[143,152561,3300],{"emptyLinePlaceholder":976},[143,152563,152564],{"class":145,"line":319},[143,152565,3300],{"emptyLinePlaceholder":976},[143,152567,152568,152570,152573],{"class":145,"line":332},[143,152569,32845],{"class":755},[143,152571,152572],{"class":156}," load_students",[143,152574,32851],{"class":149},[143,152576,152577,152579,152581,152584],{"class":145,"line":345},[143,152578,4001],{"class":755},[143,152580,39828],{"class":755},[143,152582,152583],{"class":280}," DATA_FILE",[143,152585,152586],{"class":149},".exists():\n",[143,152588,152589,152591],{"class":145,"line":701},[143,152590,15651],{"class":755},[143,152592,52726],{"class":149},[143,152594,152595],{"class":145,"line":707},[143,152596,3300],{"emptyLinePlaceholder":976},[143,152598,152599,152601],{"class":145,"line":727},[143,152600,126659],{"class":755},[143,152602,4639],{"class":149},[143,152604,152605,152608,152610,152612,152614,152616,152618,152620,152622,152624,152626,152628,152630,152632],{"class":145,"line":2518},[143,152606,152607],{"class":755},"        with",[143,152609,147515],{"class":280},[143,152611,1049],{"class":149},[143,152613,152548],{"class":280},[143,152615,13335],{"class":149},[143,152617,147525],{"class":163},[143,152619,13335],{"class":149},[143,152621,147530],{"class":6116},[143,152623,160],{"class":755},[143,152625,147535],{"class":163},[143,152627,14614],{"class":149},[143,152629,32281],{"class":755},[143,152631,148877],{"class":6116},[143,152633,4639],{"class":149},[143,152635,152636,152638,152640,152642],{"class":145,"line":2524},[143,152637,16630],{"class":755},[143,152639,148888],{"class":149},[143,152641,46252],{"class":6116},[143,152643,1055],{"class":149},[143,152645,152646,152648],{"class":145,"line":2529},[143,152647,126687],{"class":755},[143,152649,152650],{"class":149}," json.JSONDecodeError:\n",[143,152652,152653,152655,152657,152660],{"class":145,"line":2543},[143,152654,33349],{"class":280},[143,152656,1049],{"class":149},[143,152658,152659],{"class":163},"\"数据文件格式错误，已使用空数据启动\"",[143,152661,1055],{"class":149},[143,152663,152664,152666],{"class":145,"line":2548},[143,152665,15651],{"class":755},[143,152667,52726],{"class":149},[143,152669,152670],{"class":145,"line":2554},[143,152671,3300],{"emptyLinePlaceholder":976},[143,152673,152674],{"class":145,"line":2575},[143,152675,3300],{"emptyLinePlaceholder":976},[143,152677,152678,152680,152683],{"class":145,"line":2580},[143,152679,32845],{"class":755},[143,152681,152682],{"class":156}," save_students",[143,152684,152685],{"class":149},"(students):\n",[143,152687,152688,152690,152692,152694,152696,152698,152701,152703,152705,152707,152709,152711,152713,152715],{"class":145,"line":2594},[143,152689,35076],{"class":755},[143,152691,147515],{"class":280},[143,152693,1049],{"class":149},[143,152695,152548],{"class":280},[143,152697,13335],{"class":149},[143,152699,152700],{"class":163},"\"w\"",[143,152702,13335],{"class":149},[143,152704,147530],{"class":6116},[143,152706,160],{"class":755},[143,152708,147535],{"class":163},[143,152710,14614],{"class":149},[143,152712,32281],{"class":755},[143,152714,148877],{"class":6116},[143,152716,4639],{"class":149},[143,152718,152719,152722,152724,152726,152728,152730,152732,152734,152737,152739,152741],{"class":145,"line":2599},[143,152720,152721],{"class":149},"        json.dump(students, ",[143,152723,46252],{"class":6116},[143,152725,13335],{"class":149},[143,152727,147861],{"class":6116},[143,152729,160],{"class":755},[143,152731,34885],{"class":280},[143,152733,13335],{"class":149},[143,152735,152736],{"class":6116},"indent",[143,152738,160],{"class":755},[143,152740,1122],{"class":280},[143,152742,1055],{"class":149},[143,152744,152745],{"class":145,"line":2628},[143,152746,3300],{"emptyLinePlaceholder":976},[143,152748,152749],{"class":145,"line":2633},[143,152750,3300],{"emptyLinePlaceholder":976},[143,152752,152753,152755,152758],{"class":145,"line":2650},[143,152754,32845],{"class":755},[143,152756,152757],{"class":156}," show_menu",[143,152759,32851],{"class":149},[143,152761,152762,152764,152766,152769],{"class":145,"line":2655},[143,152763,32197],{"class":280},[143,152765,1049],{"class":149},[143,152767,152768],{"class":163},"\"====== 学生管理系统 ======\"",[143,152770,1055],{"class":149},[143,152772,152773,152775,152777,152780],{"class":145,"line":2660},[143,152774,32197],{"class":280},[143,152776,1049],{"class":149},[143,152778,152779],{"class":163},"\"1. 添加学生\"",[143,152781,1055],{"class":149},[143,152783,152784,152786,152788,152791],{"class":145,"line":2665},[143,152785,32197],{"class":280},[143,152787,1049],{"class":149},[143,152789,152790],{"class":163},"\"2. 删除学生\"",[143,152792,1055],{"class":149},[143,152794,152795,152797,152799,152802],{"class":145,"line":2679},[143,152796,32197],{"class":280},[143,152798,1049],{"class":149},[143,152800,152801],{"class":163},"\"3. 修改学生\"",[143,152803,1055],{"class":149},[143,152805,152806,152808,152810,152813],{"class":145,"line":2684},[143,152807,32197],{"class":280},[143,152809,1049],{"class":149},[143,152811,152812],{"class":163},"\"4. 查询学生\"",[143,152814,1055],{"class":149},[143,152816,152817,152819,152821,152824],{"class":145,"line":3477},[143,152818,32197],{"class":280},[143,152820,1049],{"class":149},[143,152822,152823],{"class":163},"\"5. 显示所有学生\"",[143,152825,1055],{"class":149},[143,152827,152828,152830,152832,152835],{"class":145,"line":3491},[143,152829,32197],{"class":280},[143,152831,1049],{"class":149},[143,152833,152834],{"class":163},"\"0. 退出系统\"",[143,152836,1055],{"class":149},[143,152838,152839],{"class":145,"line":3499},[143,152840,3300],{"emptyLinePlaceholder":976},[143,152842,152843],{"class":145,"line":3504},[143,152844,3300],{"emptyLinePlaceholder":976},[143,152846,152847,152849,152852],{"class":145,"line":3510},[143,152848,32845],{"class":755},[143,152850,152851],{"class":156}," find_student",[143,152853,152854],{"class":149},"(students, student_id):\n",[143,152856,152857,152859,152862,152864],{"class":145,"line":3516},[143,152858,4101],{"class":755},[143,152860,152861],{"class":149}," student ",[143,152863,26941],{"class":755},[143,152865,152866],{"class":149}," students:\n",[143,152868,152869,152871,152874,152876,152878,152880],{"class":145,"line":3521},[143,152870,3397],{"class":755},[143,152872,152873],{"class":149}," student[",[143,152875,152171],{"class":163},[143,152877,5343],{"class":149},[143,152879,3849],{"class":755},[143,152881,152882],{"class":149}," student_id:\n",[143,152884,152885,152887],{"class":145,"line":8848},[143,152886,16630],{"class":755},[143,152888,152889],{"class":149}," student\n",[143,152891,152892,152894],{"class":145,"line":8872},[143,152893,4990],{"class":755},[143,152895,152896],{"class":280}," None\n",[143,152898,152899],{"class":145,"line":8877},[143,152900,3300],{"emptyLinePlaceholder":976},[143,152902,152903],{"class":145,"line":8883},[143,152904,3300],{"emptyLinePlaceholder":976},[143,152906,152907,152909,152912],{"class":145,"line":8910},[143,152908,32845],{"class":755},[143,152910,152911],{"class":156}," input_int",[143,152913,152914],{"class":149},"(prompt):\n",[143,152916,152917,152919,152921],{"class":145,"line":8915},[143,152918,3151],{"class":755},[143,152920,96169],{"class":280},[143,152922,4639],{"class":149},[143,152924,152925,152928],{"class":145,"line":8921},[143,152926,152927],{"class":755},"        try",[143,152929,4639],{"class":149},[143,152931,152932,152934,152936,152938,152940],{"class":145,"line":8933},[143,152933,16630],{"class":755},[143,152935,3282],{"class":280},[143,152937,1049],{"class":149},[143,152939,746],{"class":280},[143,152941,152942],{"class":149},"(prompt))\n",[143,152944,152945,152948,152951],{"class":145,"line":8945},[143,152946,152947],{"class":755},"        except",[143,152949,152950],{"class":280}," ValueError",[143,152952,4639],{"class":149},[143,152954,152955,152957,152959,152962],{"class":145,"line":8957},[143,152956,35548],{"class":280},[143,152958,1049],{"class":149},[143,152960,152961],{"class":163},"\"请输入整数\"",[143,152963,1055],{"class":149},[143,152965,152966],{"class":145,"line":10616},[143,152967,3300],{"emptyLinePlaceholder":976},[143,152969,152970],{"class":145,"line":10641},[143,152971,3300],{"emptyLinePlaceholder":976},[143,152973,152974,152976,152979],{"class":145,"line":10664},[143,152975,32845],{"class":755},[143,152977,152978],{"class":156}," input_float",[143,152980,152914],{"class":149},[143,152982,152983,152985,152987],{"class":145,"line":10688},[143,152984,3151],{"class":755},[143,152986,96169],{"class":280},[143,152988,4639],{"class":149},[143,152990,152991,152993],{"class":145,"line":10693},[143,152992,152927],{"class":755},[143,152994,4639],{"class":149},[143,152996,152997,152999,153001,153003,153005],{"class":145,"line":10698},[143,152998,16630],{"class":755},[143,153000,110672],{"class":280},[143,153002,1049],{"class":149},[143,153004,746],{"class":280},[143,153006,152942],{"class":149},[143,153008,153009,153011,153013],{"class":145,"line":10703},[143,153010,152947],{"class":755},[143,153012,152950],{"class":280},[143,153014,4639],{"class":149},[143,153016,153017,153019,153021,153024],{"class":145,"line":10712},[143,153018,35548],{"class":280},[143,153020,1049],{"class":149},[143,153022,153023],{"class":163},"\"请输入数字\"",[143,153025,1055],{"class":149},[143,153027,153028],{"class":145,"line":10717},[143,153029,3300],{"emptyLinePlaceholder":976},[143,153031,153032],{"class":145,"line":10723},[143,153033,3300],{"emptyLinePlaceholder":976},[143,153035,153036,153038,153041],{"class":145,"line":10744},[143,153037,32845],{"class":755},[143,153039,153040],{"class":156}," add_student",[143,153042,152685],{"class":149},[143,153044,153045,153048,153050,153052,153054,153057],{"class":145,"line":10750},[143,153046,153047],{"class":149},"    student_id ",[143,153049,160],{"class":755},[143,153051,61488],{"class":280},[143,153053,1049],{"class":149},[143,153055,153056],{"class":163},"\"请输入学号:\"",[143,153058,1055],{"class":149},[143,153060,153061],{"class":145,"line":10764},[143,153062,3300],{"emptyLinePlaceholder":976},[143,153064,153065,153067],{"class":145,"line":10770},[143,153066,4001],{"class":755},[143,153068,153069],{"class":149}," find_student(students, student_id):\n",[143,153071,153072,153074,153076,153079],{"class":145,"line":10797},[143,153073,33349],{"class":280},[143,153075,1049],{"class":149},[143,153077,153078],{"class":163},"\"学号已存在\"",[143,153080,1055],{"class":149},[143,153082,153083],{"class":145,"line":10806},[143,153084,153085],{"class":755},"        return\n",[143,153087,153088],{"class":145,"line":10812},[143,153089,3300],{"emptyLinePlaceholder":976},[143,153091,153092,153095,153097,153099,153101,153104],{"class":145,"line":10820},[143,153093,153094],{"class":149},"    name ",[143,153096,160],{"class":755},[143,153098,61488],{"class":280},[143,153100,1049],{"class":149},[143,153102,153103],{"class":163},"\"请输入姓名:\"",[143,153105,1055],{"class":149},[143,153107,153108,153111,153113,153116,153119],{"class":145,"line":10825},[143,153109,153110],{"class":149},"    age ",[143,153112,160],{"class":755},[143,153114,153115],{"class":149}," input_int(",[143,153117,153118],{"class":163},"\"请输入年龄:\"",[143,153120,1055],{"class":149},[143,153122,153123,153126,153128,153131,153134],{"class":145,"line":17502},[143,153124,153125],{"class":149},"    score ",[143,153127,160],{"class":755},[143,153129,153130],{"class":149}," input_float(",[143,153132,153133],{"class":163},"\"请输入成绩:\"",[143,153135,1055],{"class":149},[143,153137,153138],{"class":145,"line":17508},[143,153139,3300],{"emptyLinePlaceholder":976},[143,153141,153142],{"class":145,"line":17531},[143,153143,153144],{"class":149},"    students.append({\n",[143,153146,153147,153150],{"class":145,"line":17537},[143,153148,153149],{"class":163},"        \"student_id\"",[143,153151,153152],{"class":149},": student_id,\n",[143,153154,153155,153158],{"class":145,"line":17560},[143,153156,153157],{"class":163},"        \"name\"",[143,153159,153160],{"class":149},": name,\n",[143,153162,153163,153166],{"class":145,"line":17574},[143,153164,153165],{"class":163},"        \"age\"",[143,153167,153168],{"class":149},": age,\n",[143,153170,153171,153174],{"class":145,"line":17594},[143,153172,153173],{"class":163},"        \"score\"",[143,153175,153176],{"class":149},": score,\n",[143,153178,153179],{"class":145,"line":17600},[143,153180,34359],{"class":149},[143,153182,153183],{"class":145,"line":17611},[143,153184,153185],{"class":149},"    save_students(students)\n",[143,153187,153188,153190,153192,153195],{"class":145,"line":17634},[143,153189,32197],{"class":280},[143,153191,1049],{"class":149},[143,153193,153194],{"class":163},"\"添加成功\"",[143,153196,1055],{"class":149},[143,153198,153199],{"class":145,"line":17656},[143,153200,3300],{"emptyLinePlaceholder":976},[143,153202,153203],{"class":145,"line":17661},[143,153204,3300],{"emptyLinePlaceholder":976},[143,153206,153207,153209,153212],{"class":145,"line":17667},[143,153208,32845],{"class":755},[143,153210,153211],{"class":156}," delete_student",[143,153213,152685],{"class":149},[143,153215,153216,153218,153220,153222,153224,153227],{"class":145,"line":17681},[143,153217,153047],{"class":149},[143,153219,160],{"class":755},[143,153221,61488],{"class":280},[143,153223,1049],{"class":149},[143,153225,153226],{"class":163},"\"请输入要删除的学号:\"",[143,153228,1055],{"class":149},[143,153230,153231,153234,153236],{"class":145,"line":17694},[143,153232,153233],{"class":149},"    student ",[143,153235,160],{"class":755},[143,153237,153238],{"class":149}," find_student(students, student_id)\n",[143,153240,153241],{"class":145,"line":17699},[143,153242,3300],{"emptyLinePlaceholder":976},[143,153244,153245,153247,153249,153251,153253],{"class":145,"line":17713},[143,153246,4001],{"class":755},[143,153248,152861],{"class":149},[143,153250,39825],{"class":755},[143,153252,39831],{"class":280},[143,153254,4639],{"class":149},[143,153256,153257,153259,153261,153264],{"class":145,"line":17718},[143,153258,33349],{"class":280},[143,153260,1049],{"class":149},[143,153262,153263],{"class":163},"\"学生不存在\"",[143,153265,1055],{"class":149},[143,153267,153268],{"class":145,"line":17724},[143,153269,153085],{"class":755},[143,153271,153272],{"class":145,"line":17729},[143,153273,3300],{"emptyLinePlaceholder":976},[143,153275,153276],{"class":145,"line":17743},[143,153277,153278],{"class":149},"    students.remove(student)\n",[143,153280,153281],{"class":145,"line":17748},[143,153282,153185],{"class":149},[143,153284,153285,153287,153289,153292],{"class":145,"line":17753},[143,153286,32197],{"class":280},[143,153288,1049],{"class":149},[143,153290,153291],{"class":163},"\"删除成功\"",[143,153293,1055],{"class":149},[143,153295,153296],{"class":145,"line":17767},[143,153297,3300],{"emptyLinePlaceholder":976},[143,153299,153300],{"class":145,"line":17779},[143,153301,3300],{"emptyLinePlaceholder":976},[143,153303,153304,153306,153309],{"class":145,"line":17784},[143,153305,32845],{"class":755},[143,153307,153308],{"class":156}," update_student",[143,153310,152685],{"class":149},[143,153312,153313,153315,153317,153319,153321,153324],{"class":145,"line":17797},[143,153314,153047],{"class":149},[143,153316,160],{"class":755},[143,153318,61488],{"class":280},[143,153320,1049],{"class":149},[143,153322,153323],{"class":163},"\"请输入要修改的学号:\"",[143,153325,1055],{"class":149},[143,153327,153328,153330,153332],{"class":145,"line":17802},[143,153329,153233],{"class":149},[143,153331,160],{"class":755},[143,153333,153238],{"class":149},[143,153335,153336],{"class":145,"line":17807},[143,153337,3300],{"emptyLinePlaceholder":976},[143,153339,153340,153342,153344,153346,153348],{"class":145,"line":17812},[143,153341,4001],{"class":755},[143,153343,152861],{"class":149},[143,153345,39825],{"class":755},[143,153347,39831],{"class":280},[143,153349,4639],{"class":149},[143,153351,153352,153354,153356,153358],{"class":145,"line":17825},[143,153353,33349],{"class":280},[143,153355,1049],{"class":149},[143,153357,153263],{"class":163},[143,153359,1055],{"class":149},[143,153361,153362],{"class":145,"line":17830},[143,153363,153085],{"class":755},[143,153365,153366],{"class":145,"line":33531},[143,153367,3300],{"emptyLinePlaceholder":976},[143,153369,153370,153372,153374,153376,153378,153381],{"class":145,"line":33537},[143,153371,153094],{"class":149},[143,153373,160],{"class":755},[143,153375,61488],{"class":280},[143,153377,1049],{"class":149},[143,153379,153380],{"class":163},"\"请输入新姓名:\"",[143,153382,1055],{"class":149},[143,153384,153385,153387,153389,153391,153394],{"class":145,"line":33543},[143,153386,153110],{"class":149},[143,153388,160],{"class":755},[143,153390,153115],{"class":149},[143,153392,153393],{"class":163},"\"请输入新年龄:\"",[143,153395,1055],{"class":149},[143,153397,153398,153400,153402,153404,153407],{"class":145,"line":33549},[143,153399,153125],{"class":149},[143,153401,160],{"class":755},[143,153403,153130],{"class":149},[143,153405,153406],{"class":163},"\"请输入新成绩:\"",[143,153408,1055],{"class":149},[143,153410,153411],{"class":145,"line":33555},[143,153412,3300],{"emptyLinePlaceholder":976},[143,153414,153415,153418,153420,153422,153424],{"class":145,"line":33566},[143,153416,153417],{"class":149},"    student[",[143,153419,63562],{"class":163},[143,153421,5343],{"class":149},[143,153423,160],{"class":755},[143,153425,150519],{"class":149},[143,153427,153428,153430,153432,153434,153436],{"class":145,"line":33572},[143,153429,153417],{"class":149},[143,153431,70005],{"class":163},[143,153433,5343],{"class":149},[143,153435,160],{"class":755},[143,153437,150531],{"class":149},[143,153439,153440,153442,153444,153446,153448],{"class":145,"line":33592},[143,153441,153417],{"class":149},[143,153443,152196],{"class":163},[143,153445,5343],{"class":149},[143,153447,160],{"class":755},[143,153449,2481],{"class":149},[143,153451,153452],{"class":145,"line":33598},[143,153453,3300],{"emptyLinePlaceholder":976},[143,153455,153456],{"class":145,"line":33609},[143,153457,153185],{"class":149},[143,153459,153460,153462,153464,153467],{"class":145,"line":33615},[143,153461,32197],{"class":280},[143,153463,1049],{"class":149},[143,153465,153466],{"class":163},"\"修改成功\"",[143,153468,1055],{"class":149},[143,153470,153471],{"class":145,"line":33621},[143,153472,3300],{"emptyLinePlaceholder":976},[143,153474,153475],{"class":145,"line":33627},[143,153476,3300],{"emptyLinePlaceholder":976},[143,153478,153479,153481,153484],{"class":145,"line":33633},[143,153480,32845],{"class":755},[143,153482,153483],{"class":156}," query_student",[143,153485,152685],{"class":149},[143,153487,153488,153490,153492,153494,153496,153499],{"class":145,"line":33639},[143,153489,153047],{"class":149},[143,153491,160],{"class":755},[143,153493,61488],{"class":280},[143,153495,1049],{"class":149},[143,153497,153498],{"class":163},"\"请输入要查询的学号:\"",[143,153500,1055],{"class":149},[143,153502,153503,153505,153507],{"class":145,"line":33645},[143,153504,153233],{"class":149},[143,153506,160],{"class":755},[143,153508,153238],{"class":149},[143,153510,153511],{"class":145,"line":33651},[143,153512,3300],{"emptyLinePlaceholder":976},[143,153514,153515,153517,153519,153521,153523],{"class":145,"line":33671},[143,153516,4001],{"class":755},[143,153518,152861],{"class":149},[143,153520,39825],{"class":755},[143,153522,39831],{"class":280},[143,153524,4639],{"class":149},[143,153526,153527,153529,153531,153533],{"class":145,"line":33677},[143,153528,33349],{"class":280},[143,153530,1049],{"class":149},[143,153532,153263],{"class":163},[143,153534,1055],{"class":149},[143,153536,153537],{"class":145,"line":33693},[143,153538,153085],{"class":755},[143,153540,153541],{"class":145,"line":33699},[143,153542,3300],{"emptyLinePlaceholder":976},[143,153544,153545],{"class":145,"line":33713},[143,153546,153547],{"class":149},"    print_student(student)\n",[143,153549,153550],{"class":145,"line":33719},[143,153551,3300],{"emptyLinePlaceholder":976},[143,153553,153554],{"class":145,"line":33734},[143,153555,3300],{"emptyLinePlaceholder":976},[143,153557,153558,153560,153563],{"class":145,"line":33740},[143,153559,32845],{"class":755},[143,153561,153562],{"class":156}," print_student",[143,153564,153565],{"class":149},"(student):\n",[143,153567,153568,153570],{"class":145,"line":33749},[143,153569,32197],{"class":280},[143,153571,152163],{"class":149},[143,153573,153574,153577,153579,153581,153584,153587,153589,153592],{"class":145,"line":33755},[143,153575,153576],{"class":755},"        f",[143,153578,1292],{"class":163},[143,153580,1936],{"class":280},[143,153582,153583],{"class":149},"student[",[143,153585,153586],{"class":163},"'student_id'",[143,153588,1979],{"class":149},[143,153590,153591],{"class":280},"}\\t",[143,153593,26031],{"class":163},[143,153595,153596,153598,153600,153602,153604,153607,153609,153611],{"class":145,"line":33764},[143,153597,153576],{"class":755},[143,153599,1292],{"class":163},[143,153601,1936],{"class":280},[143,153603,153583],{"class":149},[143,153605,153606],{"class":163},"'name'",[143,153608,1979],{"class":149},[143,153610,153591],{"class":280},[143,153612,26031],{"class":163},[143,153614,153615,153617,153619,153621,153623,153626,153628,153630],{"class":145,"line":33770},[143,153616,153576],{"class":755},[143,153618,1292],{"class":163},[143,153620,1936],{"class":280},[143,153622,153583],{"class":149},[143,153624,153625],{"class":163},"'age'",[143,153627,1979],{"class":149},[143,153629,153591],{"class":280},[143,153631,26031],{"class":163},[143,153633,153634,153636,153638,153640,153642,153645,153647,153649],{"class":145,"line":33776},[143,153635,153576],{"class":755},[143,153637,1292],{"class":163},[143,153639,1936],{"class":280},[143,153641,153583],{"class":149},[143,153643,153644],{"class":163},"'score'",[143,153646,1979],{"class":149},[143,153648,366],{"class":280},[143,153650,26031],{"class":163},[143,153652,153653],{"class":145,"line":33785},[143,153654,153655],{"class":149},"    )\n",[143,153657,153658],{"class":145,"line":33791},[143,153659,3300],{"emptyLinePlaceholder":976},[143,153661,153662],{"class":145,"line":33802},[143,153663,3300],{"emptyLinePlaceholder":976},[143,153665,153666,153668,153671],{"class":145,"line":33808},[143,153667,32845],{"class":755},[143,153669,153670],{"class":156}," show_all_students",[143,153672,152685],{"class":149},[143,153674,153675,153677,153679],{"class":145,"line":33827},[143,153676,4001],{"class":755},[143,153678,39828],{"class":755},[143,153680,152866],{"class":149},[143,153682,153683,153685,153687,153690],{"class":145,"line":33833},[143,153684,33349],{"class":280},[143,153686,1049],{"class":149},[143,153688,153689],{"class":163},"\"暂无学生\"",[143,153691,1055],{"class":149},[143,153693,153694],{"class":145,"line":33844},[143,153695,153085],{"class":755},[143,153697,153698],{"class":145,"line":33850},[143,153699,3300],{"emptyLinePlaceholder":976},[143,153701,153702,153704,153706,153709,153711,153714,153716,153719,153721,153724],{"class":145,"line":33870},[143,153703,32197],{"class":280},[143,153705,1049],{"class":149},[143,153707,153708],{"class":163},"\"学号",[143,153710,2138],{"class":280},[143,153712,153713],{"class":163},"姓名",[143,153715,2138],{"class":280},[143,153717,153718],{"class":163},"年龄",[143,153720,2138],{"class":280},[143,153722,153723],{"class":163},"成绩\"",[143,153725,1055],{"class":149},[143,153727,153728,153730,153732,153734],{"class":145,"line":33886},[143,153729,4101],{"class":755},[143,153731,152861],{"class":149},[143,153733,26941],{"class":755},[143,153735,152866],{"class":149},[143,153737,153738],{"class":145,"line":33892},[143,153739,153740],{"class":149},"        print_student(student)\n",[143,153742,153743],{"class":145,"line":33906},[143,153744,3300],{"emptyLinePlaceholder":976},[143,153746,153747],{"class":145,"line":33912},[143,153748,3300],{"emptyLinePlaceholder":976},[143,153750,153751,153753,153755],{"class":145,"line":33918},[143,153752,32845],{"class":755},[143,153754,2873],{"class":156},[143,153756,32851],{"class":149},[143,153758,153759,153762,153764],{"class":145,"line":33929},[143,153760,153761],{"class":149},"    students ",[143,153763,160],{"class":755},[143,153765,153766],{"class":149}," load_students()\n",[143,153768,153769],{"class":145,"line":33935},[143,153770,3300],{"emptyLinePlaceholder":976},[143,153772,153773,153775,153777],{"class":145,"line":33941},[143,153774,3151],{"class":755},[143,153776,96169],{"class":280},[143,153778,4639],{"class":149},[143,153780,153781],{"class":145,"line":33951},[143,153782,153783],{"class":149},"        show_menu()\n",[143,153785,153786,153789,153791,153793,153795,153798],{"class":145,"line":33957},[143,153787,153788],{"class":149},"        choice ",[143,153790,160],{"class":755},[143,153792,61488],{"class":280},[143,153794,1049],{"class":149},[143,153796,153797],{"class":163},"\"请输入操作:\"",[143,153799,1055],{"class":149},[143,153801,153802],{"class":145,"line":33968},[143,153803,3300],{"emptyLinePlaceholder":976},[143,153805,153806,153808,153811,153813,153816],{"class":145,"line":33974},[143,153807,3397],{"class":755},[143,153809,153810],{"class":149}," choice ",[143,153812,3849],{"class":755},[143,153814,153815],{"class":163}," \"1\"",[143,153817,4639],{"class":149},[143,153819,153820],{"class":145,"line":33984},[143,153821,153822],{"class":149},"            add_student(students)\n",[143,153824,153825,153828,153830,153832,153835],{"class":145,"line":33989},[143,153826,153827],{"class":755},"        elif",[143,153829,153810],{"class":149},[143,153831,3849],{"class":755},[143,153833,153834],{"class":163}," \"2\"",[143,153836,4639],{"class":149},[143,153838,153839],{"class":145,"line":33995},[143,153840,153841],{"class":149},"            delete_student(students)\n",[143,153843,153844,153846,153848,153850,153853],{"class":145,"line":34044},[143,153845,153827],{"class":755},[143,153847,153810],{"class":149},[143,153849,3849],{"class":755},[143,153851,153852],{"class":163}," \"3\"",[143,153854,4639],{"class":149},[143,153856,153857],{"class":145,"line":34091},[143,153858,153859],{"class":149},"            update_student(students)\n",[143,153861,153862,153864,153866,153868,153871],{"class":145,"line":34096},[143,153863,153827],{"class":755},[143,153865,153810],{"class":149},[143,153867,3849],{"class":755},[143,153869,153870],{"class":163}," \"4\"",[143,153872,4639],{"class":149},[143,153874,153875],{"class":145,"line":34102},[143,153876,153877],{"class":149},"            query_student(students)\n",[143,153879,153880,153882,153884,153886,153889],{"class":145,"line":34121},[143,153881,153827],{"class":755},[143,153883,153810],{"class":149},[143,153885,3849],{"class":755},[143,153887,153888],{"class":163}," \"5\"",[143,153890,4639],{"class":149},[143,153892,153893],{"class":145,"line":34127},[143,153894,153895],{"class":149},"            show_all_students(students)\n",[143,153897,153898,153900,153902,153904,153907],{"class":145,"line":34147},[143,153899,153827],{"class":755},[143,153901,153810],{"class":149},[143,153903,3849],{"class":755},[143,153905,153906],{"class":163}," \"0\"",[143,153908,4639],{"class":149},[143,153910,153911,153913,153915,153918],{"class":145,"line":34153},[143,153912,35548],{"class":280},[143,153914,1049],{"class":149},[143,153916,153917],{"class":163},"\"退出系统\"",[143,153919,1055],{"class":149},[143,153921,153922],{"class":145,"line":34159},[143,153923,115973],{"class":755},[143,153925,153926,153928],{"class":145,"line":34169},[143,153927,3434],{"class":755},[143,153929,4639],{"class":149},[143,153931,153932,153934,153936,153939],{"class":145,"line":34174},[143,153933,35548],{"class":280},[143,153935,1049],{"class":149},[143,153937,153938],{"class":163},"\"输入错误\"",[143,153940,1055],{"class":149},[143,153942,153943],{"class":145,"line":34180},[143,153944,3300],{"emptyLinePlaceholder":976},[143,153946,153947],{"class":145,"line":34196},[143,153948,3300],{"emptyLinePlaceholder":976},[143,153950,153951,153953,153955,153957,153959],{"class":145,"line":34241},[143,153952,2434],{"class":755},[143,153954,32118],{"class":280},[143,153956,102435],{"class":755},[143,153958,102438],{"class":163},[143,153960,4639],{"class":149},[143,153962,153963],{"class":145,"line":34247},[143,153964,102445],{"class":149},[63,153966,153967],{},"这个项目串联了：",[19,153969,153970,153973,153976,153979,153982,153984],{},[22,153971,153972],{},"菜单循环。",[22,153974,153975],{},"函数封装。",[22,153977,153978],{},"列表字典。",[22,153980,153981],{},"JSON 读写。",[22,153983,152451],{},[22,153985,153986,29283],{},[140,153987,153988],{},"if __name__ == \"__main__\"",[14,153990,153992],{"id":153991},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[63,153994,153995],{},"可以进一步拆成两个类：",[19,153997,153998,154003],{},[22,153999,154000,154002],{},[140,154001,150292],{},"：表示单个学生。",[22,154004,154005,154007],{},[140,154006,152318],{},"：负责学生增删改查和文件保存。",[63,154009,154010],{},"示意代码：",[133,154012,154014],{"className":31276,"code":154013,"language":31278,"meta":138,"style":138},"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",[140,154015,154016,154026,154030,154034,154038,154046,154053,154059,154065,154071,154075,154083,154089,154099,154109,154119,154129,154133,154137,154143,154151,154159,154167,154175,154183,154191],{"__ignoreMap":138},[143,154017,154018,154020,154022,154024],{"class":145,"line":146},[143,154019,31635],{"class":755},[143,154021,151876],{"class":149},[143,154023,31290],{"class":755},[143,154025,151881],{"class":149},[143,154027,154028],{"class":145,"line":35},[143,154029,3300],{"emptyLinePlaceholder":976},[143,154031,154032],{"class":145,"line":46},[143,154033,3300],{"emptyLinePlaceholder":976},[143,154035,154036],{"class":145,"line":293},[143,154037,151894],{"class":156},[143,154039,154040,154042,154044],{"class":145,"line":306},[143,154041,15593],{"class":755},[143,154043,8798],{"class":156},[143,154045,4639],{"class":149},[143,154047,154048,154051],{"class":145,"line":319},[143,154049,154050],{"class":149},"    student_id: ",[143,154052,151910],{"class":280},[143,154054,154055,154057],{"class":145,"line":332},[143,154056,151907],{"class":149},[143,154058,151910],{"class":280},[143,154060,154061,154063],{"class":145,"line":345},[143,154062,151915],{"class":149},[143,154064,151918],{"class":280},[143,154066,154067,154069],{"class":145,"line":701},[143,154068,151923],{"class":149},[143,154070,151926],{"class":280},[143,154072,154073],{"class":145,"line":707},[143,154074,3300],{"emptyLinePlaceholder":976},[143,154076,154077,154079,154081],{"class":145,"line":727},[143,154078,31699],{"class":755},[143,154080,152074],{"class":156},[143,154082,31705],{"class":149},[143,154084,154085,154087],{"class":145,"line":2518},[143,154086,15651],{"class":755},[143,154088,275],{"class":149},[143,154090,154091,154093,154095,154097],{"class":145,"line":2524},[143,154092,152087],{"class":163},[143,154094,284],{"class":149},[143,154096,31721],{"class":280},[143,154098,152094],{"class":149},[143,154100,154101,154103,154105,154107],{"class":145,"line":2529},[143,154102,152099],{"class":163},[143,154104,284],{"class":149},[143,154106,31721],{"class":280},[143,154108,152106],{"class":149},[143,154110,154111,154113,154115,154117],{"class":145,"line":2543},[143,154112,152111],{"class":163},[143,154114,284],{"class":149},[143,154116,31721],{"class":280},[143,154118,152118],{"class":149},[143,154120,154121,154123,154125,154127],{"class":145,"line":2548},[143,154122,152123],{"class":163},[143,154124,284],{"class":149},[143,154126,31721],{"class":280},[143,154128,152130],{"class":149},[143,154130,154131],{"class":145,"line":2554},[143,154132,3429],{"class":149},[143,154134,154135],{"class":145,"line":2575},[143,154136,3300],{"emptyLinePlaceholder":976},[143,154138,154139,154141],{"class":145,"line":2580},[143,154140,151738],{"class":156},[143,154142,151741],{"class":280},[143,154144,154145,154147,154149],{"class":145,"line":2594},[143,154146,31699],{"class":755},[143,154148,152151],{"class":156},[143,154150,152154],{"class":149},[143,154152,154153,154155,154157],{"class":145,"line":2599},[143,154154,15651],{"class":755},[143,154156,151758],{"class":280},[143,154158,152163],{"class":149},[143,154160,154161,154163,154165],{"class":145,"line":2628},[143,154162,152168],{"class":149},[143,154164,152171],{"class":163},[143,154166,88714],{"class":149},[143,154168,154169,154171,154173],{"class":145,"line":2633},[143,154170,152168],{"class":149},[143,154172,63562],{"class":163},[143,154174,88714],{"class":149},[143,154176,154177,154179,154181],{"class":145,"line":2650},[143,154178,152168],{"class":149},[143,154180,70005],{"class":163},[143,154182,88714],{"class":149},[143,154184,154185,154187,154189],{"class":145,"line":2655},[143,154186,152168],{"class":149},[143,154188,152196],{"class":163},[143,154190,88714],{"class":149},[143,154192,154193],{"class":145,"line":2660},[143,154194,39024],{"class":149},[63,154196,154197],{},"管理器示意：",[133,154199,154201],{"className":31276,"code":154200,"language":31278,"meta":138,"style":138},"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",[140,154202,154203,154212,154220,154231,154235,154245,154258,154269,154276,154282,154286,154295,154304,154310,154317],{"__ignoreMap":138},[143,154204,154205,154207,154210],{"class":145,"line":146},[143,154206,15593],{"class":755},[143,154208,154209],{"class":156}," StudentManager",[143,154211,4639],{"class":149},[143,154213,154214,154216,154218],{"class":145,"line":35},[143,154215,31699],{"class":755},[143,154217,31702],{"class":280},[143,154219,31705],{"class":149},[143,154221,154222,154224,154227,154229],{"class":145,"line":46},[143,154223,31743],{"class":280},[143,154225,154226],{"class":149},".students ",[143,154228,160],{"class":755},[143,154230,52726],{"class":149},[143,154232,154233],{"class":145,"line":293},[143,154234,3300],{"emptyLinePlaceholder":976},[143,154236,154237,154239,154242],{"class":145,"line":306},[143,154238,31699],{"class":755},[143,154240,154241],{"class":156}," find_by_id",[143,154243,154244],{"class":149},"(self, student_id):\n",[143,154246,154247,154249,154251,154253,154255],{"class":145,"line":319},[143,154248,4303],{"class":755},[143,154250,152861],{"class":149},[143,154252,26941],{"class":755},[143,154254,39771],{"class":280},[143,154256,154257],{"class":149},".students:\n",[143,154259,154260,154262,154265,154267],{"class":145,"line":332},[143,154261,5542],{"class":755},[143,154263,154264],{"class":149}," student.student_id ",[143,154266,3849],{"class":755},[143,154268,152882],{"class":149},[143,154270,154271,154274],{"class":145,"line":345},[143,154272,154273],{"class":755},"                return",[143,154275,152889],{"class":149},[143,154277,154278,154280],{"class":145,"line":701},[143,154279,15651],{"class":755},[143,154281,152896],{"class":280},[143,154283,154284],{"class":145,"line":707},[143,154285,3300],{"emptyLinePlaceholder":976},[143,154287,154288,154290,154292],{"class":145,"line":727},[143,154289,31699],{"class":755},[143,154291,6109],{"class":156},[143,154293,154294],{"class":149},"(self, student):\n",[143,154296,154297,154299,154301],{"class":145,"line":2518},[143,154298,3397],{"class":755},[143,154300,39771],{"class":280},[143,154302,154303],{"class":149},".find_by_id(student.student_id):\n",[143,154305,154306,154308],{"class":145,"line":2524},[143,154307,16630],{"class":755},[143,154309,126682],{"class":280},[143,154311,154312,154314],{"class":145,"line":2529},[143,154313,31743],{"class":280},[143,154315,154316],{"class":149},".students.append(student)\n",[143,154318,154319,154321],{"class":145,"line":2543},[143,154320,15651],{"class":755},[143,154322,154323],{"class":280}," True\n",[63,154325,154326],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154328,154330],{"id":154329},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[58,154332,154334],{"id":154333},"_1251-数据结构","12.5.1 数据结构",[133,154336,154338],{"className":31276,"code":154337,"language":31278,"meta":138,"style":138},"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",[140,154339,154340,154348,154379,154409,154438,154467],{"__ignoreMap":138},[143,154341,154342,154344,154346],{"class":145,"line":146},[143,154343,149189],{"class":149},[143,154345,160],{"class":755},[143,154347,56330],{"class":149},[143,154349,154350,154352,154354,154356,154358,154360,154363,154365,154368,154370,154372,154374,154377],{"class":145,"line":35},[143,154351,149109],{"class":149},[143,154353,148721],{"class":163},[143,154355,284],{"class":149},[143,154357,149332],{"class":163},[143,154359,13335],{"class":149},[143,154361,154362],{"class":163},"\"category\"",[143,154364,284],{"class":149},[143,154366,154367],{"class":163},"\"手机\"",[143,154369,13335],{"class":149},[143,154371,84962],{"class":163},[143,154373,284],{"class":149},[143,154375,154376],{"class":280},"12000",[143,154378,5830],{"class":149},[143,154380,154381,154383,154385,154387,154389,154391,154393,154395,154398,154400,154402,154404,154407],{"class":145,"line":46},[143,154382,149109],{"class":149},[143,154384,148721],{"class":163},[143,154386,284],{"class":149},[143,154388,149332],{"class":163},[143,154390,13335],{"class":149},[143,154392,154362],{"class":163},[143,154394,284],{"class":149},[143,154396,154397],{"class":163},"\"电脑\"",[143,154399,13335],{"class":149},[143,154401,84962],{"class":163},[143,154403,284],{"class":149},[143,154405,154406],{"class":280},"18000",[143,154408,5830],{"class":149},[143,154410,154411,154413,154415,154417,154419,154421,154423,154425,154427,154429,154431,154433,154436],{"class":145,"line":293},[143,154412,149109],{"class":149},[143,154414,148721],{"class":163},[143,154416,284],{"class":149},[143,154418,149353],{"class":163},[143,154420,13335],{"class":149},[143,154422,154362],{"class":163},[143,154424,284],{"class":149},[143,154426,154367],{"class":163},[143,154428,13335],{"class":149},[143,154430,84962],{"class":163},[143,154432,284],{"class":149},[143,154434,154435],{"class":280},"15000",[143,154437,5830],{"class":149},[143,154439,154440,154442,154444,154446,154448,154450,154452,154454,154456,154458,154460,154462,154465],{"class":145,"line":306},[143,154441,149109],{"class":149},[143,154443,148721],{"class":163},[143,154445,284],{"class":149},[143,154447,149353],{"class":163},[143,154449,13335],{"class":149},[143,154451,154362],{"class":163},[143,154453,284],{"class":149},[143,154455,154397],{"class":163},[143,154457,13335],{"class":149},[143,154459,84962],{"class":163},[143,154461,284],{"class":149},[143,154463,154464],{"class":280},"16000",[143,154466,5830],{"class":149},[143,154468,154469],{"class":145,"line":319},[143,154470,34144],{"class":149},[58,154472,154474],{"id":154473},"_1252-按日期统计","12.5.2 按日期统计",[133,154476,154478],{"className":31276,"code":154477,"language":31278,"meta":138,"style":138},"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",[140,154479,154480,154489,154493,154504,154518,154531,154550,154554],{"__ignoreMap":138},[143,154481,154482,154485,154487],{"class":145,"line":146},[143,154483,154484],{"class":149},"daily_total ",[143,154486,160],{"class":755},[143,154488,88746],{"class":149},[143,154490,154491],{"class":145,"line":35},[143,154492,3300],{"emptyLinePlaceholder":976},[143,154494,154495,154497,154499,154501],{"class":145,"line":46},[143,154496,3925],{"class":755},[143,154498,148933],{"class":149},[143,154500,26941],{"class":755},[143,154502,154503],{"class":149}," sales:\n",[143,154505,154506,154509,154511,154514,154516],{"class":145,"line":293},[143,154507,154508],{"class":149},"    date ",[143,154510,160],{"class":755},[143,154512,154513],{"class":149}," item[",[143,154515,148721],{"class":163},[143,154517,34144],{"class":149},[143,154519,154520,154523,154525,154527,154529],{"class":145,"line":306},[143,154521,154522],{"class":149},"    amount ",[143,154524,160],{"class":755},[143,154526,154513],{"class":149},[143,154528,84962],{"class":163},[143,154530,34144],{"class":149},[143,154532,154533,154536,154538,154541,154543,154545,154547],{"class":145,"line":319},[143,154534,154535],{"class":149},"    daily_total[date] ",[143,154537,160],{"class":755},[143,154539,154540],{"class":149}," daily_total.get(date, ",[143,154542,1234],{"class":280},[143,154544,14614],{"class":149},[143,154546,1522],{"class":755},[143,154548,154549],{"class":149}," amount\n",[143,154551,154552],{"class":145,"line":332},[143,154553,3300],{"emptyLinePlaceholder":976},[143,154555,154556,154558],{"class":145,"line":345},[143,154557,31313],{"class":280},[143,154559,154560],{"class":149},"(daily_total)\n",[58,154562,154564],{"id":154563},"_1253-按类别统计","12.5.3 按类别统计",[133,154566,154568],{"className":31276,"code":154567,"language":31278,"meta":138,"style":138},"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",[140,154569,154570,154579,154583,154593,154606,154618,154636,154640],{"__ignoreMap":138},[143,154571,154572,154575,154577],{"class":145,"line":146},[143,154573,154574],{"class":149},"category_total ",[143,154576,160],{"class":755},[143,154578,88746],{"class":149},[143,154580,154581],{"class":145,"line":35},[143,154582,3300],{"emptyLinePlaceholder":976},[143,154584,154585,154587,154589,154591],{"class":145,"line":46},[143,154586,3925],{"class":755},[143,154588,148933],{"class":149},[143,154590,26941],{"class":755},[143,154592,154503],{"class":149},[143,154594,154595,154598,154600,154602,154604],{"class":145,"line":293},[143,154596,154597],{"class":149},"    category ",[143,154599,160],{"class":755},[143,154601,154513],{"class":149},[143,154603,154362],{"class":163},[143,154605,34144],{"class":149},[143,154607,154608,154610,154612,154614,154616],{"class":145,"line":306},[143,154609,154522],{"class":149},[143,154611,160],{"class":755},[143,154613,154513],{"class":149},[143,154615,84962],{"class":163},[143,154617,34144],{"class":149},[143,154619,154620,154623,154625,154628,154630,154632,154634],{"class":145,"line":319},[143,154621,154622],{"class":149},"    category_total[category] ",[143,154624,160],{"class":755},[143,154626,154627],{"class":149}," category_total.get(category, ",[143,154629,1234],{"class":280},[143,154631,14614],{"class":149},[143,154633,1522],{"class":755},[143,154635,154549],{"class":149},[143,154637,154638],{"class":145,"line":332},[143,154639,3300],{"emptyLinePlaceholder":976},[143,154641,154642,154644],{"class":145,"line":345},[143,154643,31313],{"class":280},[143,154645,154646],{"class":149},"(category_total)\n",[58,154648,154650],{"id":154649},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[133,154652,154654],{"className":31276,"code":154653,"language":31278,"meta":138,"style":138},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[140,154655,154656,154681],{"__ignoreMap":138},[143,154657,154658,154661,154663,154665,154668,154671,154674,154677,154679],{"class":145,"line":146},[143,154659,154660],{"class":149},"top_date, top_amount ",[143,154662,160],{"class":755},[143,154664,6851],{"class":280},[143,154666,154667],{"class":149},"(daily_total.items(), ",[143,154669,154670],{"class":6116},"key",[143,154672,154673],{"class":755},"=lambda",[143,154675,154676],{"class":149}," item: item[",[143,154678,771],{"class":280},[143,154680,5557],{"class":149},[143,154682,154683,154685],{"class":145,"line":35},[143,154684,31313],{"class":280},[143,154686,154687],{"class":149},"(top_date, top_amount)\n",[14,154689,154691],{"id":154690},"_126-绘制柱状图","12.6 绘制柱状图",[133,154693,154695],{"className":31276,"code":154694,"language":31278,"meta":138,"style":138},"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",[140,154696,154697,154711,154722,154726,154734,154746,154758,154769,154773,154777,154787,154798,154812,154817,154834,154851,154867,154871],{"__ignoreMap":138},[143,154698,154699,154701,154703,154705,154707,154709],{"class":145,"line":146},[143,154700,31635],{"class":755},[143,154702,148103],{"class":149},[143,154704,31290],{"class":755},[143,154706,148108],{"class":149},[143,154708,32281],{"class":755},[143,154710,148113],{"class":149},[143,154712,154713,154715,154717,154719],{"class":145,"line":35},[143,154714,31635],{"class":755},[143,154716,147962],{"class":149},[143,154718,31290],{"class":755},[143,154720,154721],{"class":149}," Bar\n",[143,154723,154724],{"class":145,"line":46},[143,154725,3300],{"emptyLinePlaceholder":976},[143,154727,154728,154730,154732],{"class":145,"line":293},[143,154729,154574],{"class":149},[143,154731,160],{"class":755},[143,154733,275],{"class":149},[143,154735,154736,154739,154741,154744],{"class":145,"line":306},[143,154737,154738],{"class":163},"    \"手机\"",[143,154740,284],{"class":149},[143,154742,154743],{"class":280},"27000",[143,154745,32364],{"class":149},[143,154747,154748,154751,154753,154756],{"class":145,"line":319},[143,154749,154750],{"class":163},"    \"电脑\"",[143,154752,284],{"class":149},[143,154754,154755],{"class":280},"34000",[143,154757,32364],{"class":149},[143,154759,154760,154763,154765,154767],{"class":145,"line":332},[143,154761,154762],{"class":163},"    \"耳机\"",[143,154764,284],{"class":149},[143,154766,125274],{"class":280},[143,154768,32364],{"class":149},[143,154770,154771],{"class":145,"line":345},[143,154772,348],{"class":149},[143,154774,154775],{"class":145,"line":701},[143,154776,3300],{"emptyLinePlaceholder":976},[143,154778,154779,154782,154784],{"class":145,"line":707},[143,154780,154781],{"class":149},"bar ",[143,154783,160],{"class":755},[143,154785,154786],{"class":149}," Bar()\n",[143,154788,154789,154792,154795],{"class":145,"line":727},[143,154790,154791],{"class":149},"bar.add_xaxis(",[143,154793,154794],{"class":280},"list",[143,154796,154797],{"class":149},"(category_total.keys()))\n",[143,154799,154800,154803,154805,154807,154809],{"class":145,"line":2518},[143,154801,154802],{"class":149},"bar.add_yaxis(",[143,154804,148019],{"class":163},[143,154806,13335],{"class":149},[143,154808,154794],{"class":280},[143,154810,154811],{"class":149},"(category_total.values()))\n",[143,154813,154814],{"class":145,"line":2524},[143,154815,154816],{"class":149},"bar.set_global_opts(\n",[143,154818,154819,154821,154823,154825,154827,154829,154832],{"class":145,"line":2529},[143,154820,148197],{"class":6116},[143,154822,160],{"class":755},[143,154824,148202],{"class":149},[143,154826,52303],{"class":6116},[143,154828,160],{"class":755},[143,154830,154831],{"class":163},"\"品类销售额\"",[143,154833,38945],{"class":149},[143,154835,154836,154838,154840,154842,154844,154846,154849],{"class":145,"line":2543},[143,154837,148216],{"class":6116},[143,154839,160],{"class":755},[143,154841,148221],{"class":149},[143,154843,80688],{"class":6116},[143,154845,160],{"class":755},[143,154847,154848],{"class":163},"\"品类\"",[143,154850,38945],{"class":149},[143,154852,154853,154855,154857,154859,154861,154863,154865],{"class":145,"line":2548},[143,154854,148235],{"class":6116},[143,154856,160],{"class":755},[143,154858,148221],{"class":149},[143,154860,80688],{"class":6116},[143,154862,160],{"class":755},[143,154864,148019],{"class":163},[143,154866,38945],{"class":149},[143,154868,154869],{"class":145,"line":2554},[143,154870,1055],{"class":149},[143,154872,154873,154876,154879],{"class":145,"line":2575},[143,154874,154875],{"class":149},"bar.render(",[143,154877,154878],{"class":163},"\"category_sales.html\"",[143,154880,1055],{"class":149},[14,154882,154884],{"id":154883},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[63,154886,154887],{},"时间线适合展示不同日期、月份、年份的数据变化。",[133,154889,154891],{"className":31276,"code":154890,"language":31278,"meta":138,"style":138},"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",[140,154892,154893,154907,154918,154922,154930,154954,154977,155002,155006,155010,155020,155024,155035,155044,155054,155068,155099,155104,155108],{"__ignoreMap":138},[143,154894,154895,154897,154899,154901,154903,154905],{"class":145,"line":146},[143,154896,31635],{"class":755},[143,154898,148103],{"class":149},[143,154900,31290],{"class":755},[143,154902,148108],{"class":149},[143,154904,32281],{"class":755},[143,154906,148113],{"class":149},[143,154908,154909,154911,154913,154915],{"class":145,"line":35},[143,154910,31635],{"class":755},[143,154912,147962],{"class":149},[143,154914,31290],{"class":755},[143,154916,154917],{"class":149}," Bar, Timeline\n",[143,154919,154920],{"class":145,"line":46},[143,154921,3300],{"emptyLinePlaceholder":976},[143,154923,154924,154926,154928],{"class":145,"line":293},[143,154925,102534],{"class":149},[143,154927,160],{"class":755},[143,154929,275],{"class":149},[143,154931,154932,154935,154938,154940,154942,154944,154946,154948,154950,154952],{"class":145,"line":306},[143,154933,154934],{"class":163},"    \"2024-10-01\"",[143,154936,154937],{"class":149},": {",[143,154939,154367],{"class":163},[143,154941,284],{"class":149},[143,154943,154376],{"class":280},[143,154945,13335],{"class":149},[143,154947,154397],{"class":163},[143,154949,284],{"class":149},[143,154951,154406],{"class":280},[143,154953,5830],{"class":149},[143,154955,154956,154959,154961,154963,154965,154967,154969,154971,154973,154975],{"class":145,"line":319},[143,154957,154958],{"class":163},"    \"2024-10-02\"",[143,154960,154937],{"class":149},[143,154962,154367],{"class":163},[143,154964,284],{"class":149},[143,154966,154435],{"class":280},[143,154968,13335],{"class":149},[143,154970,154397],{"class":163},[143,154972,284],{"class":149},[143,154974,154464],{"class":280},[143,154976,5830],{"class":149},[143,154978,154979,154982,154984,154986,154988,154991,154993,154995,154997,155000],{"class":145,"line":332},[143,154980,154981],{"class":163},"    \"2024-10-03\"",[143,154983,154937],{"class":149},[143,154985,154367],{"class":163},[143,154987,284],{"class":149},[143,154989,154990],{"class":280},"17000",[143,154992,13335],{"class":149},[143,154994,154397],{"class":163},[143,154996,284],{"class":149},[143,154998,154999],{"class":280},"19000",[143,155001,5830],{"class":149},[143,155003,155004],{"class":145,"line":345},[143,155005,348],{"class":149},[143,155007,155008],{"class":145,"line":701},[143,155009,3300],{"emptyLinePlaceholder":976},[143,155011,155012,155015,155017],{"class":145,"line":707},[143,155013,155014],{"class":149},"timeline ",[143,155016,160],{"class":755},[143,155018,155019],{"class":149}," Timeline()\n",[143,155021,155022],{"class":145,"line":727},[143,155023,3300],{"emptyLinePlaceholder":976},[143,155025,155026,155028,155031,155033],{"class":145,"line":2518},[143,155027,3925],{"class":755},[143,155029,155030],{"class":149}," date, category_data ",[143,155032,26941],{"class":755},[143,155034,149872],{"class":149},[143,155036,155037,155040,155042],{"class":145,"line":2524},[143,155038,155039],{"class":149},"    bar ",[143,155041,160],{"class":755},[143,155043,154786],{"class":149},[143,155045,155046,155049,155051],{"class":145,"line":2529},[143,155047,155048],{"class":149},"    bar.add_xaxis(",[143,155050,154794],{"class":280},[143,155052,155053],{"class":149},"(category_data.keys()))\n",[143,155055,155056,155059,155061,155063,155065],{"class":145,"line":2543},[143,155057,155058],{"class":149},"    bar.add_yaxis(",[143,155060,148019],{"class":163},[143,155062,13335],{"class":149},[143,155064,154794],{"class":280},[143,155066,155067],{"class":149},"(category_data.values()))\n",[143,155069,155070,155073,155076,155078,155080,155082,155084,155086,155088,155090,155092,155094,155097],{"class":145,"line":2548},[143,155071,155072],{"class":149},"    bar.set_global_opts(",[143,155074,155075],{"class":6116},"title_opts",[143,155077,160],{"class":755},[143,155079,148202],{"class":149},[143,155081,52303],{"class":6116},[143,155083,160],{"class":755},[143,155085,1098],{"class":755},[143,155087,1292],{"class":163},[143,155089,1936],{"class":280},[143,155091,74805],{"class":149},[143,155093,366],{"class":280},[143,155095,155096],{"class":163},"销售额\"",[143,155098,31395],{"class":149},[143,155100,155101],{"class":145,"line":2554},[143,155102,155103],{"class":149},"    timeline.add(bar, date)\n",[143,155105,155106],{"class":145,"line":2575},[143,155107,3300],{"emptyLinePlaceholder":976},[143,155109,155110,155113,155116],{"class":145,"line":2580},[143,155111,155112],{"class":149},"timeline.render(",[143,155114,155115],{"class":163},"\"timeline_sales.html\"",[143,155117,1055],{"class":149},[14,155119,155121],{"id":155120},"_128-绘制地图","12.8 绘制地图",[63,155123,155124],{},"地图适合展示地区数据。",[133,155126,155128],{"className":31276,"code":155127,"language":31278,"meta":138,"style":138},"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",[140,155129,155130,155144,155155,155159,155167,155180,155192,155205,155218,155222,155226,155236,155251,155256,155273,155292,155296],{"__ignoreMap":138},[143,155131,155132,155134,155136,155138,155140,155142],{"class":145,"line":146},[143,155133,31635],{"class":755},[143,155135,148103],{"class":149},[143,155137,31290],{"class":755},[143,155139,148108],{"class":149},[143,155141,32281],{"class":755},[143,155143,148113],{"class":149},[143,155145,155146,155148,155150,155152],{"class":145,"line":35},[143,155147,31635],{"class":755},[143,155149,147962],{"class":149},[143,155151,31290],{"class":755},[143,155153,155154],{"class":149}," Map\n",[143,155156,155157],{"class":145,"line":46},[143,155158,3300],{"emptyLinePlaceholder":976},[143,155160,155161,155163,155165],{"class":145,"line":293},[143,155162,102534],{"class":149},[143,155164,160],{"class":755},[143,155166,56330],{"class":149},[143,155168,155169,155172,155174,155176,155178],{"class":145,"line":306},[143,155170,155171],{"class":149},"    (",[143,155173,70150],{"class":163},[143,155175,13335],{"class":149},[143,155177,1858],{"class":280},[143,155179,38945],{"class":149},[143,155181,155182,155184,155186,155188,155190],{"class":145,"line":319},[143,155183,155171],{"class":149},[143,155185,70170],{"class":163},[143,155187,13335],{"class":149},[143,155189,148036],{"class":280},[143,155191,38945],{"class":149},[143,155193,155194,155196,155199,155201,155203],{"class":145,"line":332},[143,155195,155171],{"class":149},[143,155197,155198],{"class":163},"\"广东\"",[143,155200,13335],{"class":149},[143,155202,2623],{"class":280},[143,155204,38945],{"class":149},[143,155206,155207,155209,155212,155214,155216],{"class":145,"line":345},[143,155208,155171],{"class":149},[143,155210,155211],{"class":163},"\"浙江\"",[143,155213,13335],{"class":149},[143,155215,148041],{"class":280},[143,155217,38945],{"class":149},[143,155219,155220],{"class":145,"line":701},[143,155221,34144],{"class":149},[143,155223,155224],{"class":145,"line":707},[143,155225,3300],{"emptyLinePlaceholder":976},[143,155227,155228,155231,155233],{"class":145,"line":727},[143,155229,155230],{"class":149},"map_chart ",[143,155232,160],{"class":755},[143,155234,155235],{"class":149}," Map()\n",[143,155237,155238,155241,155243,155246,155249],{"class":145,"line":2518},[143,155239,155240],{"class":149},"map_chart.add(",[143,155242,148019],{"class":163},[143,155244,155245],{"class":149},", data, ",[143,155247,155248],{"class":163},"\"china\"",[143,155250,1055],{"class":149},[143,155252,155253],{"class":145,"line":2524},[143,155254,155255],{"class":149},"map_chart.set_global_opts(\n",[143,155257,155258,155260,155262,155264,155266,155268,155271],{"class":145,"line":2529},[143,155259,148197],{"class":6116},[143,155261,160],{"class":755},[143,155263,148202],{"class":149},[143,155265,52303],{"class":6116},[143,155267,160],{"class":755},[143,155269,155270],{"class":163},"\"地区销售额\"",[143,155272,38945],{"class":149},[143,155274,155275,155278,155280,155283,155286,155288,155290],{"class":145,"line":2543},[143,155276,155277],{"class":6116},"    visualmap_opts",[143,155279,160],{"class":755},[143,155281,155282],{"class":149},"opts.VisualMapOpts(",[143,155284,155285],{"class":6116},"max_",[143,155287,160],{"class":755},[143,155289,2623],{"class":280},[143,155291,38945],{"class":149},[143,155293,155294],{"class":145,"line":2548},[143,155295,1055],{"class":149},[143,155297,155298,155301,155304],{"class":145,"line":2554},[143,155299,155300],{"class":149},"map_chart.render(",[143,155302,155303],{"class":163},"\"map_sales.html\"",[143,155305,1055],{"class":149},[63,155307,155308],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155310,155312],{"id":155311},"_129-项目拆分建议","12.9 项目拆分建议",[63,155314,155315],{},"当代码超过一个文件时，可以这样组织：",[133,155317,155320],{"className":155318,"code":155319,"language":6087,"meta":138},[6085],"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",[140,155321,155319],{"__ignoreMap":138},[63,155323,155324],{},"职责：",[19,155326,155327,155333,155339,155345],{},[22,155328,155329,155332],{},[140,155330,155331],{},"main.py","：程序入口。",[22,155334,155335,155338],{},[140,155336,155337],{},"file_utils.py","：读写 JSON。",[22,155340,155341,155344],{},[140,155342,155343],{},"sales_service.py","：统计销售数据。",[22,155346,155347,155350],{},[140,155348,155349],{},"chart_builder.py","：生成图表。",[14,155352,155354],{"id":155353},"_1210-python基础复习清单","12.10 Python基础复习清单",[63,155356,155357],{},"语法基础：",[19,155359,155360,155363,155366,155369],{},[22,155361,155362],{},"会写变量、注释、输入输出。",[22,155364,155365],{},"会使用 int、float、str、bool。",[22,155367,155368],{},"会做类型转换。",[22,155370,155371],{},"会使用 f-string 格式化输出。",[63,155373,155374],{},"流程控制：",[19,155376,155377,155383,155389,155397],{},[22,155378,155379,155380,29283],{},"会写 ",[140,155381,155382],{},"if elif else",[22,155384,155379,155385,101894,155387,29283],{},[140,155386,109538],{},[140,155388,3925],{},[22,155390,155391,155392,101894,155394,29283],{},"理解 ",[140,155393,2953],{},[140,155395,155396],{},"continue",[22,155398,155399],{},"能写嵌套循环。",[63,155401,155402],{},"函数：",[19,155404,155405,155408,155411,155414],{},[22,155406,155407],{},"会定义和调用函数。",[22,155409,155410],{},"理解参数和返回值。",[22,155412,155413],{},"知道局部变量和全局变量。",[22,155415,155416],{},"会使用默认参数、关键字参数、不定长参数。",[63,155418,155419],{},"容器：",[19,155421,155422,155425,155428,155431,155434],{},[22,155423,155424],{},"会使用列表增删改查。",[22,155426,155427],{},"会遍历列表、字典。",[22,155429,155430],{},"会使用切片。",[22,155432,155433],{},"会用集合去重。",[22,155435,155436],{},"会处理列表嵌套字典。",[63,155438,155439],{},"文件和模块：",[19,155441,155442,155445,155448,155451,155454],{},[22,155443,155444],{},"会读写文本文件。",[22,155446,155447],{},"会读写 JSON。",[22,155449,155450],{},"会捕获常见异常。",[22,155452,155453],{},"会导入模块和第三方包。",[22,155455,155456],{},"会创建简单包结构。",[63,155458,155459],{},"项目能力：",[19,155461,155462,155465,155468,155471,155474],{},[22,155463,155464],{},"能把代码拆成函数。",[22,155466,155467],{},"能把数据保存到文件。",[22,155469,155470],{},"能处理用户输入错误。",[22,155472,155473],{},"能写一个完整菜单程序。",[22,155475,155476],{},"能用 pyecharts 生成图表。",[14,155478,155480],{"id":155479},"_1211-推荐练习顺序","12.11 推荐练习顺序",[19,155482,155483,155486,155489,155492,155495,155498,155501,155504],{},[22,155484,155485],{},"猜数字游戏。",[22,155487,155488],{},"ATM 菜单程序。",[22,155490,155491],{},"学生成绩统计。",[22,155493,155494],{},"学生管理系统函数版。",[22,155496,155497],{},"学生管理系统文件持久化版。",[22,155499,155500],{},"学生管理系统面向对象版。",[22,155502,155503],{},"销售数据统计。",[22,155505,155506],{},"销售数据可视化。",[14,155508,155510],{"id":155509},"_1212-常见学习误区","12.12 常见学习误区",[19,155512,155513,155516,155519,155522,155525,155528,155531],{},[22,155514,155515],{},"只看视频不敲代码。",[22,155517,155518],{},"一报错就复制错误去搜，不先读报错位置。",[22,155520,155521],{},"变量名随便写，后续自己看不懂。",[22,155523,155524],{},"所有代码都写在一个文件一个函数里。",[22,155526,155527],{},"不保存练习代码，复习时没有材料。",[22,155529,155530],{},"还没掌握列表字典就急着学框架。",[22,155532,155533],{},"不会读官方文档，只依赖教程。",[14,155535,155537],{"id":155536},"_1213-如何读报错","12.13 如何读报错",[63,155539,155540],{},"报错通常从下往上看最后几行。",[63,155542,16034],{},[133,155544,155547],{"className":155545,"code":155546,"language":6087,"meta":138},[6085],"ValueError: invalid literal for int() with base 10: 'abc'\n",[140,155548,155546],{"__ignoreMap":138},[63,155550,25497],{},[19,155552,155553,155559,155569],{},[22,155554,155555,155556,29283],{},"异常类型是 ",[140,155557,155558],{},"ValueError",[22,155560,108220,155561,155564,155565,155568],{},[140,155562,155563],{},"int()"," 无法把 ",[140,155566,155567],{},"'abc'"," 转成整数。",[22,155570,155571],{},"应该检查输入内容或增加异常处理。",[63,155573,155574],{},"再看文件名和行号：",[133,155576,155579],{"className":155577,"code":155578,"language":6087,"meta":138},[6085],"File \"main.py\", line 10, in \u003Cmodule>\n",[140,155580,155578],{"__ignoreMap":138},[63,155582,155583,155584,155586],{},"表示错误发生在 ",[140,155585,155331],{}," 第 10 行。",[14,155588,155590],{"id":155589},"_1214-后续学习方向","12.14 后续学习方向",[63,155592,155593],{},"Python 基础完成后，可以按兴趣选择方向：",[19,155595,155596,155608,155617,155629,155640,155649,155659],{},[22,155597,155598,155599,1255,155602,1255,155605,29283],{},"自动化办公：",[140,155600,155601],{},"openpyxl",[140,155603,155604],{},"python-docx",[140,155606,155607],{},"pdfplumber",[22,155609,155610,155611,1255,155613,1255,155615,29283],{},"数据分析：",[140,155612,101502],{},[140,155614,146909],{},[140,155616,146917],{},[22,155618,155619,155620,1255,155623,1255,155626,29283],{},"Web 后端：",[140,155621,155622],{},"Flask",[140,155624,155625],{},"FastAPI",[140,155627,155628],{},"Django",[22,155630,155631,155632,1255,155634,1255,155637,29283],{},"爬虫：",[140,155633,146894],{},[140,155635,155636],{},"BeautifulSoup",[140,155638,155639],{},"Scrapy",[22,155641,155642,155643,1255,155645,155648],{},"测试开发：",[140,155644,146941],{},[140,155646,155647],{},"selenium","、接口测试。",[22,155650,155651,155652,1255,155654,1255,155656,29283],{},"人工智能：",[140,155653,101502],{},[140,155655,146909],{},[140,155657,155658],{},"pytorch",[22,155660,155661,155662,1255,155664,1255,155667,29283],{},"运维脚本：",[140,155663,146510],{},[140,155665,155666],{},"subprocess",[140,155668,155669],{},"paramiko",[63,155671,155672],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155674,155676],{"id":155675},"_1215-结课练习","12.15 结课练习",[19,155678,155679,155682,155685,155688,155691,155694,155697,155700],{},[22,155680,155681],{},"完成函数版学生管理系统。",[22,155683,155684],{},"给学生管理系统增加 JSON 持久化。",[22,155686,155687],{},"给学生管理系统增加异常处理。",[22,155689,155690],{},"把学生管理系统改成面向对象版。",[22,155692,155693],{},"使用 pyecharts 绘制学生成绩柱状图。",[22,155695,155696],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[22,155698,155699],{},"按品类统计销售额并绘制柱状图。",[22,155701,155702],{},"写一份自己的 Python 学习路线图。",[954,155704,155705],{},"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":138,"searchDepth":35,"depth":35,"links":155707},[155708,155709,155712,155713,155714,155720,155721,155722,155723,155724,155725,155726,155727,155728,155729],{"id":152424,"depth":35,"text":152425},{"id":152474,"depth":35,"text":152475,"children":155710},[155711],{"id":152478,"depth":46,"text":152479},{"id":152517,"depth":35,"text":152518},{"id":153991,"depth":35,"text":153992},{"id":154329,"depth":35,"text":154330,"children":155715},[155716,155717,155718,155719],{"id":154333,"depth":46,"text":154334},{"id":154473,"depth":46,"text":154474},{"id":154563,"depth":46,"text":154564},{"id":154649,"depth":46,"text":154650},{"id":154690,"depth":35,"text":154691},{"id":154883,"depth":35,"text":154884},{"id":155120,"depth":35,"text":155121},{"id":155311,"depth":35,"text":155312},{"id":155353,"depth":35,"text":155354},{"id":155479,"depth":35,"text":155480},{"id":155509,"depth":35,"text":155510},{"id":155536,"depth":35,"text":155537},{"id":155589,"depth":35,"text":155590},{"id":155675,"depth":35,"text":155676},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152416,"description":973},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155736,"title":155737,"body":155738,"description":973,"extension":974,"meta":158207,"navigation":976,"path":158208,"seo":158209,"stem":158210,"__hash__":158211},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155739,"toc":158182},[155740,155743,155747,155750,155753,155773,155776,155799,155802,155805,155827,155830,155852,155856,155859,155899,155902,156023,156027,156030,156070,156073,156097,156100,156104,156107,156121,156154,156157,156192,156195,156218,156221,156254,156257,156259,156265,156340,156343,156349,156366,156406,156410,156413,156459,156461,156499,156502,156537,156540,156575,156578,156610,156613,156632,156636,156640,156753,156755,156830,156834,156880,156883,156909,156918,156922,156925,156988,156996,157024,157028,157068,157133,157137,157140,157179,157182,157227,157230,157291,157295,157322,157325,157353,157356,157360,157364,157429,157432,157470,157473,157505,157509,157608,157612,157615,157688,157691,157739,157743,157749,157789,157792,157839,157842,157891,157895,157897,157911,157913,158094,158098,158125,158145,158152,158156,158173,158179],[10,155741,155737],{"id":155742},"_2-基础语法变量与字符串",[14,155744,155746],{"id":155745},"_21-注释","2.1 注释",[63,155748,155749],{},"注释是给人看的说明文字，不会被 Python 执行。",[63,155751,155752],{},"单行注释：",[133,155754,155756],{"className":31276,"code":155755,"language":31278,"meta":138,"style":138},"# 这是单行注释\nprint(\"hello\")\n",[140,155757,155758,155763],{"__ignoreMap":138},[143,155759,155760],{"class":145,"line":146},[143,155761,155762],{"class":266},"# 这是单行注释\n",[143,155764,155765,155767,155769,155771],{"class":145,"line":35},[143,155766,31313],{"class":280},[143,155768,1049],{"class":149},[143,155770,6744],{"class":163},[143,155772,1055],{"class":149},[63,155774,155775],{},"多行说明常用三引号：",[133,155777,155779],{"className":31276,"code":155778,"language":31278,"meta":138,"style":138},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[140,155780,155781,155785,155790,155795],{"__ignoreMap":138},[143,155782,155783],{"class":145,"line":146},[143,155784,96574],{"class":163},[143,155786,155787],{"class":145,"line":35},[143,155788,155789],{"class":163},"这是多行说明。\n",[143,155791,155792],{"class":145,"line":46},[143,155793,155794],{"class":163},"常用于文件顶部说明、函数说明等。\n",[143,155796,155797],{"class":145,"line":293},[143,155798,96574],{"class":163},[63,155800,155801],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[63,155803,155804],{},"不好：",[133,155806,155808],{"className":31276,"code":155807,"language":31278,"meta":138,"style":138},"# age 加 1\nage = age + 1\n",[140,155809,155810,155815],{"__ignoreMap":138},[143,155811,155812],{"class":145,"line":146},[143,155813,155814],{"class":266},"# age 加 1\n",[143,155816,155817,155819,155821,155823,155825],{"class":145,"line":35},[143,155818,147270],{"class":149},[143,155820,160],{"class":755},[143,155822,16605],{"class":149},[143,155824,1522],{"class":755},[143,155826,56582],{"class":280},[63,155828,155829],{},"较好：",[133,155831,155833],{"className":31276,"code":155832,"language":31278,"meta":138,"style":138},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[140,155834,155835,155840],{"__ignoreMap":138},[143,155836,155837],{"class":145,"line":146},[143,155838,155839],{"class":266},"# 用户过完生日后，年龄增加一岁\n",[143,155841,155842,155844,155846,155848,155850],{"class":145,"line":35},[143,155843,147270],{"class":149},[143,155845,160],{"class":755},[143,155847,16605],{"class":149},[143,155849,1522],{"class":755},[143,155851,56582],{"class":280},[14,155853,155855],{"id":155854},"_22-字面量","2.2 字面量",[63,155857,155858],{},"字面量就是代码中直接写出来的数据。",[133,155860,155862],{"className":31276,"code":155861,"language":31278,"meta":138,"style":138},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[140,155863,155864,155871,155878,155885,155892],{"__ignoreMap":138},[143,155865,155866,155868],{"class":145,"line":146},[143,155867,1352],{"class":280},[143,155869,155870],{"class":266},"          # 整数\n",[143,155872,155873,155875],{"class":145,"line":35},[143,155874,1095],{"class":280},[143,155876,155877],{"class":266},"         # 小数\n",[143,155879,155880,155882],{"class":145,"line":46},[143,155881,6744],{"class":163},[143,155883,155884],{"class":266},"      # 字符串\n",[143,155886,155887,155889],{"class":145,"line":293},[143,155888,32374],{"class":280},[143,155890,155891],{"class":266},"         # 布尔值\n",[143,155893,155894,155896],{"class":145,"line":306},[143,155895,96562],{"class":280},[143,155897,155898],{"class":266},"         # 空值\n",[63,155900,155901],{},"常见字面量类型：",[1181,155903,155904,155914],{},[1184,155905,155906],{},[1187,155907,155908,155910,155912],{},[1190,155909,24635],{},[1190,155911,28390],{},[1190,155913,26767],{},[1227,155915,155916,155927,155938,155949,155961,155973,155985,155998,156010],{},[1187,155917,155918,155920,155924],{},[1232,155919,1052],{},[1232,155921,155922],{},[140,155923,1352],{},[1232,155925,155926],{},"整数",[1187,155928,155929,155931,155935],{},[1232,155930,1087],{},[1232,155932,155933],{},[140,155934,1095],{},[1232,155936,155937],{},"浮点数",[1187,155939,155940,155942,155946],{},[1232,155941,2206],{},[1232,155943,155944],{},[140,155945,6744],{},[1232,155947,155948],{},"字符串",[1187,155950,155951,155953,155959],{},[1232,155952,2258],{},[1232,155954,155955,1255,155957],{},[140,155956,32374],{},[140,155958,34885],{},[1232,155960,66897],{},[1187,155962,155963,155966,155970],{},[1232,155964,155965],{},"NoneType",[1232,155967,155968],{},[140,155969,96562],{},[1232,155971,155972],{},"空值",[1187,155974,155975,155977,155982],{},[1232,155976,154794],{},[1232,155978,155979],{},[140,155980,155981],{},"[1, 2, 3]",[1232,155983,155984],{},"列表",[1187,155986,155987,155990,155995],{},[1232,155988,155989],{},"tuple",[1232,155991,155992],{},[140,155993,155994],{},"(1, 2, 3)",[1232,155996,155997],{},"元组",[1187,155999,156000,156002,156007],{},[1232,156001,115421],{},[1232,156003,156004],{},[140,156005,156006],{},"{\"name\": \"张三\"}",[1232,156008,156009],{},"字典",[1187,156011,156012,156015,156020],{},[1232,156013,156014],{},"set",[1232,156016,156017],{},[140,156018,156019],{},"{1, 2, 3}",[1232,156021,156022],{},"集合",[14,156024,156026],{"id":156025},"_23-变量","2.3 变量",[63,156028,156029],{},"变量是保存数据的名字。",[133,156031,156033],{"className":31276,"code":156032,"language":31278,"meta":138,"style":138},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[140,156034,156035,156043,156051,156061],{"__ignoreMap":138},[143,156036,156037,156039,156041],{"class":145,"line":146},[143,156038,147260],{"class":149},[143,156040,160],{"class":755},[143,156042,150077],{"class":163},[143,156044,156045,156047,156049],{"class":145,"line":35},[143,156046,147270],{"class":149},[143,156048,160],{"class":755},[143,156050,147275],{"class":280},[143,156052,156053,156056,156058],{"class":145,"line":46},[143,156054,156055],{"class":149},"height ",[143,156057,160],{"class":755},[143,156059,156060],{"class":280}," 1.75\n",[143,156062,156063,156066,156068],{"class":145,"line":293},[143,156064,156065],{"class":149},"is_student ",[143,156067,160],{"class":755},[143,156069,154323],{"class":280},[63,156071,156072],{},"Python 的变量不需要提前声明类型：",[133,156074,156076],{"className":31276,"code":156075,"language":31278,"meta":138,"style":138},"score = 100\nscore = \"满分\"\n",[140,156077,156078,156088],{"__ignoreMap":138},[143,156079,156080,156083,156085],{"class":145,"line":146},[143,156081,156082],{"class":149},"score ",[143,156084,160],{"class":755},[143,156086,156087],{"class":280}," 100\n",[143,156089,156090,156092,156094],{"class":145,"line":35},[143,156091,156082],{"class":149},[143,156093,160],{"class":755},[143,156095,156096],{"class":163}," \"满分\"\n",[63,156098,156099],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156101,156103],{"id":156102},"_24-变量命名规则","2.4 变量命名规则",[63,156105,156106],{},"硬性规则：",[19,156108,156109,156112,156115,156118],{},[22,156110,156111],{},"只能由字母、数字、下划线组成。",[22,156113,156114],{},"不能以数字开头。",[22,156116,156117],{},"不能使用 Python 关键字。",[22,156119,156120],{},"区分大小写。",[133,156122,156124],{"className":31276,"code":156123,"language":31278,"meta":138,"style":138},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[140,156125,156126,156135,156144],{"__ignoreMap":138},[143,156127,156128,156131,156133],{"class":145,"line":146},[143,156129,156130],{"class":149},"user_name ",[143,156132,160],{"class":755},[143,156134,147265],{"class":163},[143,156136,156137,156140,156142],{"class":145,"line":35},[143,156138,156139],{"class":149},"age2 ",[143,156141,160],{"class":755},[143,156143,147275],{"class":280},[143,156145,156146,156149,156151],{"class":145,"line":46},[143,156147,156148],{"class":149},"_token ",[143,156150,160],{"class":755},[143,156152,156153],{"class":163}," \"abc\"\n",[63,156155,156156],{},"错误写法：",[133,156158,156160],{"className":31276,"code":156159,"language":31278,"meta":138,"style":138},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[140,156161,156162,156171,156183],{"__ignoreMap":138},[143,156163,156164,156167,156169],{"class":145,"line":146},[143,156165,156166],{"class":78282},"2age",[143,156168,14464],{"class":755},[143,156170,147275],{"class":280},[143,156172,156173,156175,156177,156179,156181],{"class":145,"line":35},[143,156174,132448],{"class":149},[143,156176,1573],{"class":755},[143,156178,147260],{"class":149},[143,156180,160],{"class":755},[143,156182,147265],{"class":163},[143,156184,156185,156187,156189],{"class":145,"line":46},[143,156186,15593],{"class":755},[143,156188,14464],{"class":755},[143,156190,156191],{"class":163}," \"一班\"\n",[63,156193,156194],{},"查看关键字：",[133,156196,156198],{"className":31276,"code":156197,"language":31278,"meta":138,"style":138},"import keyword\n\nprint(keyword.kwlist)\n",[140,156199,156200,156207,156211],{"__ignoreMap":138},[143,156201,156202,156204],{"class":145,"line":146},[143,156203,31290],{"class":755},[143,156205,156206],{"class":149}," keyword\n",[143,156208,156209],{"class":145,"line":35},[143,156210,3300],{"emptyLinePlaceholder":976},[143,156212,156213,156215],{"class":145,"line":46},[143,156214,31313],{"class":280},[143,156216,156217],{"class":149},"(keyword.kwlist)\n",[63,156219,156220],{},"推荐命名风格：",[133,156222,156224],{"className":31276,"code":156223,"language":31278,"meta":138,"style":138},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[140,156225,156226,156235,156245],{"__ignoreMap":138},[143,156227,156228,156231,156233],{"class":145,"line":146},[143,156229,156230],{"class":149},"student_name ",[143,156232,160],{"class":755},[143,156234,150077],{"class":163},[143,156236,156237,156240,156242],{"class":145,"line":35},[143,156238,156239],{"class":149},"total_price ",[143,156241,160],{"class":755},[143,156243,156244],{"class":280}," 99.8\n",[143,156246,156247,156250,156252],{"class":145,"line":46},[143,156248,156249],{"class":149},"is_finished ",[143,156251,160],{"class":755},[143,156253,126682],{"class":280},[63,156255,156256],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156258,51630],{"id":51629},[63,156260,105241,156261,156264],{},[140,156262,156263],{},"type()"," 查看数据类型：",[133,156266,156268],{"className":31276,"code":156267,"language":31278,"meta":138,"style":138},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[140,156269,156270,156284,156298,156312,156326],{"__ignoreMap":138},[143,156271,156272,156274,156276,156278,156280,156282],{"class":145,"line":146},[143,156273,31313],{"class":280},[143,156275,1049],{"class":149},[143,156277,752],{"class":280},[143,156279,1049],{"class":149},[143,156281,1352],{"class":280},[143,156283,31395],{"class":149},[143,156285,156286,156288,156290,156292,156294,156296],{"class":145,"line":35},[143,156287,31313],{"class":280},[143,156289,1049],{"class":149},[143,156291,752],{"class":280},[143,156293,1049],{"class":149},[143,156295,1095],{"class":280},[143,156297,31395],{"class":149},[143,156299,156300,156302,156304,156306,156308,156310],{"class":145,"line":46},[143,156301,31313],{"class":280},[143,156303,1049],{"class":149},[143,156305,752],{"class":280},[143,156307,1049],{"class":149},[143,156309,6744],{"class":163},[143,156311,31395],{"class":149},[143,156313,156314,156316,156318,156320,156322,156324],{"class":145,"line":293},[143,156315,31313],{"class":280},[143,156317,1049],{"class":149},[143,156319,752],{"class":280},[143,156321,1049],{"class":149},[143,156323,32374],{"class":280},[143,156325,31395],{"class":149},[143,156327,156328,156330,156332,156334,156336,156338],{"class":145,"line":306},[143,156329,31313],{"class":280},[143,156331,1049],{"class":149},[143,156333,752],{"class":280},[143,156335,1049],{"class":149},[143,156337,96562],{"class":280},[143,156339,31395],{"class":149},[63,156341,156342],{},"输出类似：",[133,156344,156347],{"className":156345,"code":156346,"language":6087,"meta":138},[6085],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[140,156348,156346],{"__ignoreMap":138},[63,156350,9925,156351,108158,156353,156355,156356,156358,156359,22398,156361,156358,156363,156365],{},[140,156352,2258],{},[140,156354,1052],{}," 的子类，",[140,156357,32374],{}," 可以当作 ",[140,156360,771],{},[140,156362,34885],{},[140,156364,1234],{},"，但业务代码中不要滥用。",[133,156367,156369],{"className":31276,"code":156368,"language":31278,"meta":138,"style":138},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[140,156370,156371,156389],{"__ignoreMap":138},[143,156372,156373,156375,156377,156379,156381,156383,156386],{"class":145,"line":146},[143,156374,31313],{"class":280},[143,156376,1049],{"class":149},[143,156378,32374],{"class":280},[143,156380,46464],{"class":755},[143,156382,26016],{"class":280},[143,156384,156385],{"class":149},")   ",[143,156387,156388],{"class":266},"# 2\n",[143,156390,156391,156393,156395,156397,156399,156401,156403],{"class":145,"line":35},[143,156392,31313],{"class":280},[143,156394,1049],{"class":149},[143,156396,34885],{"class":280},[143,156398,46464],{"class":755},[143,156400,26016],{"class":280},[143,156402,46706],{"class":149},[143,156404,156405],{"class":266},"# 1\n",[14,156407,156409],{"id":156408},"_26-类型转换","2.6 类型转换",[63,156411,156412],{},"常用转换函数：",[133,156414,156416],{"className":31276,"code":156415,"language":31278,"meta":138,"style":138},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[140,156417,156418,156428,156439,156449],{"__ignoreMap":138},[143,156419,156420,156422,156424,156426],{"class":145,"line":146},[143,156421,1052],{"class":280},[143,156423,1049],{"class":149},[143,156425,55201],{"class":163},[143,156427,1055],{"class":149},[143,156429,156430,156432,156434,156437],{"class":145,"line":35},[143,156431,1087],{"class":280},[143,156433,1049],{"class":149},[143,156435,156436],{"class":163},"\"3.14\"",[143,156438,1055],{"class":149},[143,156440,156441,156443,156445,156447],{"class":145,"line":46},[143,156442,2206],{"class":280},[143,156444,1049],{"class":149},[143,156446,1352],{"class":280},[143,156448,1055],{"class":149},[143,156450,156451,156453,156455,156457],{"class":145,"line":293},[143,156452,2258],{"class":280},[143,156454,1049],{"class":149},[143,156456,771],{"class":280},[143,156458,1055],{"class":149},[63,156460,16034],{},[133,156462,156464],{"className":31276,"code":156463,"language":31278,"meta":138,"style":138},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[140,156465,156466,156475,156486],{"__ignoreMap":138},[143,156467,156468,156470,156472],{"class":145,"line":146},[143,156469,147270],{"class":149},[143,156471,160],{"class":755},[143,156473,156474],{"class":163}," \"18\"\n",[143,156476,156477,156479,156481,156483],{"class":145,"line":35},[143,156478,147270],{"class":149},[143,156480,160],{"class":755},[143,156482,3282],{"class":280},[143,156484,156485],{"class":149},"(age)\n",[143,156487,156488,156490,156493,156495,156497],{"class":145,"line":46},[143,156489,31313],{"class":280},[143,156491,156492],{"class":149},"(age ",[143,156494,1522],{"class":755},[143,156496,26016],{"class":280},[143,156498,1055],{"class":149},[63,156500,156501],{},"输入得到的内容永远是字符串：",[133,156503,156505],{"className":31276,"code":156504,"language":31278,"meta":138,"style":138},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[140,156506,156507,156523],{"__ignoreMap":138},[143,156508,156509,156512,156514,156516,156518,156521],{"class":145,"line":146},[143,156510,156511],{"class":149},"num ",[143,156513,160],{"class":755},[143,156515,61488],{"class":280},[143,156517,1049],{"class":149},[143,156519,156520],{"class":163},"\"请输入数字:\"",[143,156522,1055],{"class":149},[143,156524,156525,156527,156529,156531,156534],{"class":145,"line":35},[143,156526,31313],{"class":280},[143,156528,1049],{"class":149},[143,156530,752],{"class":280},[143,156532,156533],{"class":149},"(num))  ",[143,156535,156536],{"class":266},"# str\n",[63,156538,156539],{},"如果要做数学运算，必须转换：",[133,156541,156543],{"className":31276,"code":156542,"language":31278,"meta":138,"style":138},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[140,156544,156545,156563],{"__ignoreMap":138},[143,156546,156547,156549,156551,156553,156555,156557,156559,156561],{"class":145,"line":146},[143,156548,156511],{"class":149},[143,156550,160],{"class":755},[143,156552,3282],{"class":280},[143,156554,1049],{"class":149},[143,156556,746],{"class":280},[143,156558,1049],{"class":149},[143,156560,156520],{"class":163},[143,156562,31395],{"class":149},[143,156564,156565,156567,156569,156571,156573],{"class":145,"line":35},[143,156566,31313],{"class":280},[143,156568,46517],{"class":149},[143,156570,1522],{"class":755},[143,156572,2938],{"class":280},[143,156574,1055],{"class":149},[63,156576,156577],{},"常见错误：",[133,156579,156581],{"className":31276,"code":156580,"language":31278,"meta":138,"style":138},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[140,156582,156583,156596],{"__ignoreMap":138},[143,156584,156585,156587,156589,156591,156593],{"class":145,"line":146},[143,156586,1052],{"class":280},[143,156588,1049],{"class":149},[143,156590,156436],{"class":163},[143,156592,156385],{"class":149},[143,156594,156595],{"class":266},"# 错误\n",[143,156597,156598,156600,156602,156605,156608],{"class":145,"line":35},[143,156599,1052],{"class":280},[143,156601,1049],{"class":149},[143,156603,156604],{"class":163},"\"abc\"",[143,156606,156607],{"class":149},")    ",[143,156609,156595],{"class":266},[63,156611,156612],{},"正确写法：",[133,156614,156616],{"className":31276,"code":156615,"language":31278,"meta":138,"style":138},"num = float(\"3.14\")\n",[140,156617,156618],{"__ignoreMap":138},[143,156619,156620,156622,156624,156626,156628,156630],{"class":145,"line":146},[143,156621,156511],{"class":149},[143,156623,160],{"class":755},[143,156625,110672],{"class":280},[143,156627,1049],{"class":149},[143,156629,156436],{"class":163},[143,156631,1055],{"class":149},[14,156633,156635],{"id":156634},"_27-运算符","2.7 运算符",[58,156637,156639],{"id":156638},"_271-算术运算符","2.7.1 算术运算符",[1181,156641,156642,156653],{},[1184,156643,156644],{},[1187,156645,156646,156649,156651],{},[1190,156647,156648],{},"运算符",[1190,156650,26767],{},[1190,156652,28390],{},[1227,156654,156655,156669,156683,156697,156711,156725,156739],{},[1187,156656,156657,156661,156664],{},[1232,156658,156659],{},[140,156660,1522],{},[1232,156662,156663],{},"加法",[1232,156665,156666],{},[140,156667,156668],{},"1 + 2",[1187,156670,156671,156675,156678],{},[1232,156672,156673],{},[140,156674,1573],{},[1232,156676,156677],{},"减法",[1232,156679,156680],{},[140,156681,156682],{},"5 - 3",[1187,156684,156685,156689,156692],{},[1232,156686,156687],{},[140,156688,1496],{},[1232,156690,156691],{},"乘法",[1232,156693,156694],{},[140,156695,156696],{},"2 * 3",[1187,156698,156699,156703,156706],{},[1232,156700,156701],{},[140,156702,1625],{},[1232,156704,156705],{},"除法，结果是浮点数",[1232,156707,156708],{},[140,156709,156710],{},"5 \u002F 2",[1187,156712,156713,156717,156720],{},[1232,156714,156715],{},[140,156716,34227],{},[1232,156718,156719],{},"整除",[1232,156721,156722],{},[140,156723,156724],{},"5 \u002F\u002F 2",[1187,156726,156727,156731,156734],{},[1232,156728,156729],{},[140,156730,1369],{},[1232,156732,156733],{},"取余",[1232,156735,156736],{},[140,156737,156738],{},"5 % 2",[1187,156740,156741,156745,156748],{},[1232,156742,156743],{},[140,156744,11561],{},[1232,156746,156747],{},"幂运算",[1232,156749,156750],{},[140,156751,156752],{},"2 ** 3",[63,156754,16034],{},[133,156756,156758],{"className":31276,"code":156757,"language":31278,"meta":138,"style":138},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[140,156759,156760,156778,156795,156812],{"__ignoreMap":138},[143,156761,156762,156764,156766,156768,156771,156773,156775],{"class":145,"line":146},[143,156763,31313],{"class":280},[143,156765,1049],{"class":149},[143,156767,1360],{"class":280},[143,156769,156770],{"class":755}," \u002F",[143,156772,15654],{"class":280},[143,156774,156385],{"class":149},[143,156776,156777],{"class":266},"# 2.5\n",[143,156779,156780,156782,156784,156786,156789,156791,156793],{"class":145,"line":35},[143,156781,31313],{"class":280},[143,156783,1049],{"class":149},[143,156785,1360],{"class":280},[143,156787,156788],{"class":755}," \u002F\u002F",[143,156790,15654],{"class":280},[143,156792,46706],{"class":149},[143,156794,156388],{"class":266},[143,156796,156797,156799,156801,156803,156806,156808,156810],{"class":145,"line":46},[143,156798,31313],{"class":280},[143,156800,1049],{"class":149},[143,156802,1360],{"class":280},[143,156804,156805],{"class":755}," %",[143,156807,15654],{"class":280},[143,156809,156385],{"class":149},[143,156811,156405],{"class":266},[143,156813,156814,156816,156818,156820,156823,156825,156827],{"class":145,"line":293},[143,156815,31313],{"class":280},[143,156817,1049],{"class":149},[143,156819,1122],{"class":280},[143,156821,156822],{"class":755}," **",[143,156824,78949],{"class":280},[143,156826,46706],{"class":149},[143,156828,156829],{"class":266},"# 8\n",[58,156831,156833],{"id":156832},"_272-赋值运算符","2.7.2 赋值运算符",[133,156835,156837],{"className":31276,"code":156836,"language":31278,"meta":138,"style":138},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[140,156838,156839,156847,156855,156863,156871],{"__ignoreMap":138},[143,156840,156841,156843,156845],{"class":145,"line":146},[143,156842,156511],{"class":149},[143,156844,160],{"class":755},[143,156846,59311],{"class":280},[143,156848,156849,156851,156853],{"class":145,"line":35},[143,156850,156511],{"class":149},[143,156852,10377],{"class":755},[143,156854,55312],{"class":280},[143,156856,156857,156859,156861],{"class":145,"line":46},[143,156858,156511],{"class":149},[143,156860,150976],{"class":755},[143,156862,48621],{"class":280},[143,156864,156865,156867,156869],{"class":145,"line":293},[143,156866,156511],{"class":149},[143,156868,138004],{"class":755},[143,156870,120911],{"class":280},[143,156872,156873,156875,156878],{"class":145,"line":306},[143,156874,156511],{"class":149},[143,156876,156877],{"class":755},"\u002F=",[143,156879,48621],{"class":280},[63,156881,156882],{},"等价关系：",[133,156884,156886],{"className":31276,"code":156885,"language":31278,"meta":138,"style":138},"num += 1\nnum = num + 1\n",[140,156887,156888,156896],{"__ignoreMap":138},[143,156889,156890,156892,156894],{"class":145,"line":146},[143,156891,156511],{"class":149},[143,156893,10377],{"class":755},[143,156895,56582],{"class":280},[143,156897,156898,156900,156902,156905,156907],{"class":145,"line":35},[143,156899,156511],{"class":149},[143,156901,160],{"class":755},[143,156903,156904],{"class":149}," num ",[143,156906,1522],{"class":755},[143,156908,56582],{"class":280},[63,156910,156911,156912,101894,156915,29283],{},"Python 没有 ",[140,156913,156914],{},"num++",[140,156916,156917],{},"num--",[58,156919,156921],{"id":156920},"_273-比较运算符","2.7.3 比较运算符",[63,156923,156924],{},"比较运算结果是布尔值。",[133,156926,156928],{"className":31276,"code":156927,"language":31278,"meta":138,"style":138},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[140,156929,156930,156944,156959,156973],{"__ignoreMap":138},[143,156931,156932,156934,156936,156938,156940,156942],{"class":145,"line":146},[143,156933,31313],{"class":280},[143,156935,1049],{"class":149},[143,156937,1487],{"class":280},[143,156939,27120],{"class":755},[143,156941,3048],{"class":280},[143,156943,1055],{"class":149},[143,156945,156946,156948,156950,156952,156955,156957],{"class":145,"line":35},[143,156947,31313],{"class":280},[143,156949,1049],{"class":149},[143,156951,1487],{"class":280},[143,156953,156954],{"class":755}," >=",[143,156956,2938],{"class":280},[143,156958,1055],{"class":149},[143,156960,156961,156963,156965,156967,156969,156971],{"class":145,"line":46},[143,156962,31313],{"class":280},[143,156964,1049],{"class":149},[143,156966,1487],{"class":280},[143,156968,102435],{"class":755},[143,156970,2983],{"class":280},[143,156972,1055],{"class":149},[143,156974,156975,156977,156979,156981,156984,156986],{"class":145,"line":293},[143,156976,31313],{"class":280},[143,156978,1049],{"class":149},[143,156980,1487],{"class":280},[143,156982,156983],{"class":755}," !=",[143,156985,2983],{"class":280},[143,156987,1055],{"class":149},[63,156989,156990,156991,156993,156994,29283],{},"注意：判断相等用 ",[140,156992,3849],{},"，赋值用 ",[140,156995,160],{},[133,156997,156999],{"className":31276,"code":156998,"language":31278,"meta":138,"style":138},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[140,157000,157001,157013],{"__ignoreMap":138},[143,157002,157003,157005,157007,157010],{"class":145,"line":146},[143,157004,147270],{"class":149},[143,157006,160],{"class":755},[143,157008,157009],{"class":280}," 18",[143,157011,157012],{"class":266},"       # 赋值\n",[143,157014,157015,157017,157019,157021],{"class":145,"line":35},[143,157016,147270],{"class":149},[143,157018,3849],{"class":755},[143,157020,157009],{"class":280},[143,157022,157023],{"class":266},"      # 判断是否相等\n",[58,157025,157027],{"id":157026},"_274-逻辑运算符","2.7.4 逻辑运算符",[1181,157029,157030,157038],{},[1184,157031,157032],{},[1187,157033,157034,157036],{},[1190,157035,156648],{},[1190,157037,26767],{},[1227,157039,157040,157049,157058],{},[1187,157041,157042,157046],{},[1232,157043,157044],{},[140,157045,31360],{},[1232,157047,157048],{},"并且",[1187,157050,157051,157055],{},[1232,157052,157053],{},[140,157054,115965],{},[1232,157056,157057],{},"或者",[1187,157059,157060,157065],{},[1232,157061,157062],{},[140,157063,157064],{},"not",[1232,157066,157067],{},"取反",[133,157069,157071],{"className":31276,"code":157070,"language":31278,"meta":138,"style":138},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[140,157072,157073,157081,157090,157094,157109,157123],{"__ignoreMap":138},[143,157074,157075,157077,157079],{"class":145,"line":146},[143,157076,147270],{"class":149},[143,157078,160],{"class":755},[143,157080,88943],{"class":280},[143,157082,157083,157086,157088],{"class":145,"line":35},[143,157084,157085],{"class":149},"has_ticket ",[143,157087,160],{"class":755},[143,157089,154323],{"class":280},[143,157091,157092],{"class":145,"line":46},[143,157093,3300],{"emptyLinePlaceholder":976},[143,157095,157096,157098,157100,157102,157104,157106],{"class":145,"line":293},[143,157097,31313],{"class":280},[143,157099,156492],{"class":149},[143,157101,2611],{"class":755},[143,157103,157009],{"class":280},[143,157105,121304],{"class":755},[143,157107,157108],{"class":149}," has_ticket)\n",[143,157110,157111,157113,157115,157117,157119,157121],{"class":145,"line":306},[143,157112,31313],{"class":280},[143,157114,156492],{"class":149},[143,157116,150],{"class":755},[143,157118,157009],{"class":280},[143,157120,115076],{"class":755},[143,157122,157108],{"class":149},[143,157124,157125,157127,157129,157131],{"class":145,"line":319},[143,157126,31313],{"class":280},[143,157128,1049],{"class":149},[143,157130,157064],{"class":755},[143,157132,157108],{"class":149},[14,157134,157136],{"id":157135},"_28-字符串定义","2.8 字符串定义",[63,157138,157139],{},"三种常见写法：",[133,157141,157143],{"className":31276,"code":157142,"language":31278,"meta":138,"style":138},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[140,157144,157145,157155,157164,157174],{"__ignoreMap":138},[143,157146,157147,157150,157152],{"class":145,"line":146},[143,157148,157149],{"class":149},"name1 ",[143,157151,160],{"class":755},[143,157153,157154],{"class":163}," '小明'\n",[143,157156,157157,157160,157162],{"class":145,"line":35},[143,157158,157159],{"class":149},"name2 ",[143,157161,160],{"class":755},[143,157163,150077],{"class":163},[143,157165,157166,157169,157171],{"class":145,"line":46},[143,157167,157168],{"class":149},"text ",[143,157170,160],{"class":755},[143,157172,157173],{"class":163}," \"\"\"这是多行字符串\n",[143,157175,157176],{"class":145,"line":293},[143,157177,157178],{"class":163},"可以换行\"\"\"\n",[63,157180,157181],{},"字符串中包含引号：",[133,157183,157185],{"className":31276,"code":157184,"language":31278,"meta":138,"style":138},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[140,157186,157187,157197,157207],{"__ignoreMap":138},[143,157188,157189,157192,157194],{"class":145,"line":146},[143,157190,157191],{"class":149},"msg ",[143,157193,160],{"class":755},[143,157195,157196],{"class":163}," \"他说:'你好'\"\n",[143,157198,157199,157202,157204],{"class":145,"line":35},[143,157200,157201],{"class":149},"msg2 ",[143,157203,160],{"class":755},[143,157205,157206],{"class":163}," '他说:\"你好\"'\n",[143,157208,157209,157212,157214,157217,157220,157223,157225],{"class":145,"line":46},[143,157210,157211],{"class":149},"msg3 ",[143,157213,160],{"class":755},[143,157215,157216],{"class":163}," \"他说:",[143,157218,157219],{"class":280},"\\\"",[143,157221,157222],{"class":163},"你好",[143,157224,157219],{"class":280},[143,157226,26031],{"class":163},[63,157228,157229],{},"常见转义字符：",[1181,157231,157232,157241],{},[1184,157233,157234],{},[1187,157235,157236,157239],{},[1190,157237,157238],{},"写法",[1190,157240,101576],{},[1227,157242,157243,157253,157262,157272,157281],{},[1187,157244,157245,157250],{},[1232,157246,157247],{},[140,157248,157249],{},"\\n",[1232,157251,157252],{},"换行",[1187,157254,157255,157259],{},[1232,157256,157257],{},[140,157258,2138],{},[1232,157260,157261],{},"制表符",[1187,157263,157264,157269],{},[1232,157265,157266],{},[140,157267,157268],{},"\\\\",[1232,157270,157271],{},"反斜杠",[1187,157273,157274,157278],{},[1232,157275,157276],{},[140,157277,157219],{},[1232,157279,157280],{},"双引号",[1187,157282,157283,157288],{},[1232,157284,157285],{},[140,157286,157287],{},"\\'",[1232,157289,157290],{},"单引号",[14,157292,157294],{"id":157293},"_29-字符串拼接","2.9 字符串拼接",[133,157296,157298],{"className":31276,"code":157297,"language":31278,"meta":138,"style":138},"name = \"小明\"\nprint(\"你好，\" + name)\n",[140,157299,157300,157308],{"__ignoreMap":138},[143,157301,157302,157304,157306],{"class":145,"line":146},[143,157303,147260],{"class":149},[143,157305,160],{"class":755},[143,157307,150077],{"class":163},[143,157309,157310,157312,157314,157317,157319],{"class":145,"line":35},[143,157311,31313],{"class":280},[143,157313,1049],{"class":149},[143,157315,157316],{"class":163},"\"你好，\"",[143,157318,46464],{"class":755},[143,157320,157321],{"class":149}," name)\n",[63,157323,157324],{},"字符串只能和字符串拼接：",[133,157326,157328],{"className":31276,"code":157327,"language":31278,"meta":138,"style":138},"age = 18\nprint(\"年龄:\" + str(age))\n",[140,157329,157330,157338],{"__ignoreMap":138},[143,157331,157332,157334,157336],{"class":145,"line":146},[143,157333,147270],{"class":149},[143,157335,160],{"class":755},[143,157337,147275],{"class":280},[143,157339,157340,157342,157344,157346,157348,157350],{"class":145,"line":35},[143,157341,31313],{"class":280},[143,157343,1049],{"class":149},[143,157345,147241],{"class":163},[143,157347,46464],{"class":755},[143,157349,74798],{"class":280},[143,157351,157352],{"class":149},"(age))\n",[63,157354,157355],{},"更推荐使用格式化字符串。",[14,157357,157359],{"id":157358},"_210-字符串格式化","2.10 字符串格式化",[58,157361,157363],{"id":157362},"_2101-百分号格式化","2.10.1 百分号格式化",[133,157365,157367],{"className":31276,"code":157366,"language":31278,"meta":138,"style":138},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[140,157368,157369,157377,157385,157394,157398],{"__ignoreMap":138},[143,157370,157371,157373,157375],{"class":145,"line":146},[143,157372,147260],{"class":149},[143,157374,160],{"class":755},[143,157376,150077],{"class":163},[143,157378,157379,157381,157383],{"class":145,"line":35},[143,157380,147270],{"class":149},[143,157382,160],{"class":755},[143,157384,147275],{"class":280},[143,157386,157387,157389,157391],{"class":145,"line":46},[143,157388,156082],{"class":149},[143,157390,160],{"class":755},[143,157392,157393],{"class":280}," 95.5\n",[143,157395,157396],{"class":145,"line":293},[143,157397,3300],{"emptyLinePlaceholder":976},[143,157399,157400,157402,157404,157407,157410,157413,157416,157419,157422,157424,157426],{"class":145,"line":306},[143,157401,31313],{"class":280},[143,157403,1049],{"class":149},[143,157405,157406],{"class":163},"\"姓名:",[143,157408,157409],{"class":280},"%s",[143,157411,157412],{"class":163}," 年龄:",[143,157414,157415],{"class":280},"%d",[143,157417,157418],{"class":163}," 分数:",[143,157420,157421],{"class":280},"%.1f",[143,157423,1292],{"class":163},[143,157425,156805],{"class":755},[143,157427,157428],{"class":149}," (name, age, score))\n",[63,157430,157431],{},"常用占位符：",[1181,157433,157434,157443],{},[1184,157435,157436],{},[1187,157437,157438,157441],{},[1190,157439,157440],{},"占位符",[1190,157442,26767],{},[1227,157444,157445,157453,157461],{},[1187,157446,157447,157451],{},[1232,157448,157449],{},[140,157450,157409],{},[1232,157452,155948],{},[1187,157454,157455,157459],{},[1232,157456,157457],{},[140,157458,157415],{},[1232,157460,155926],{},[1187,157462,157463,157468],{},[1232,157464,157465],{},[140,157466,157467],{},"%f",[1232,157469,155937],{},[63,157471,157472],{},"精度控制：",[133,157474,157476],{"className":31276,"code":157475,"language":31278,"meta":138,"style":138},"price = 12.3456\nprint(\"%.2f\" % price)\n",[140,157477,157478,157487],{"__ignoreMap":138},[143,157479,157480,157482,157484],{"class":145,"line":146},[143,157481,147405],{"class":149},[143,157483,160],{"class":755},[143,157485,157486],{"class":280}," 12.3456\n",[143,157488,157489,157491,157493,157495,157498,157500,157502],{"class":145,"line":35},[143,157490,31313],{"class":280},[143,157492,1049],{"class":149},[143,157494,1292],{"class":163},[143,157496,157497],{"class":280},"%.2f",[143,157499,1292],{"class":163},[143,157501,156805],{"class":755},[143,157503,157504],{"class":149}," price)\n",[58,157506,157508],{"id":157507},"_2102-format方法","2.10.2 format方法",[133,157510,157512],{"className":31276,"code":157511,"language":31278,"meta":138,"style":138},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[140,157513,157514,157522,157530,157534,157553,157573],{"__ignoreMap":138},[143,157515,157516,157518,157520],{"class":145,"line":146},[143,157517,147260],{"class":149},[143,157519,160],{"class":755},[143,157521,150077],{"class":163},[143,157523,157524,157526,157528],{"class":145,"line":35},[143,157525,147270],{"class":149},[143,157527,160],{"class":755},[143,157529,147275],{"class":280},[143,157531,157532],{"class":145,"line":46},[143,157533,3300],{"emptyLinePlaceholder":976},[143,157535,157536,157538,157540,157542,157544,157546,157548,157550],{"class":145,"line":293},[143,157537,31313],{"class":280},[143,157539,1049],{"class":149},[143,157541,157406],{"class":163},[143,157543,33357],{"class":280},[143,157545,157412],{"class":163},[143,157547,33357],{"class":280},[143,157549,1292],{"class":163},[143,157551,157552],{"class":149},".format(name, age))\n",[143,157554,157555,157557,157559,157561,157564,157566,157569,157571],{"class":145,"line":306},[143,157556,31313],{"class":280},[143,157558,1049],{"class":149},[143,157560,157406],{"class":163},[143,157562,157563],{"class":280},"{0}",[143,157565,157412],{"class":163},[143,157567,157568],{"class":280},"{1}",[143,157570,1292],{"class":163},[143,157572,157552],{"class":149},[143,157574,157575,157577,157579,157581,157584,157586,157589,157591,157594,157596,157598,157601,157603,157605],{"class":145,"line":319},[143,157576,31313],{"class":280},[143,157578,1049],{"class":149},[143,157580,157406],{"class":163},[143,157582,157583],{"class":280},"{name}",[143,157585,157412],{"class":163},[143,157587,157588],{"class":280},"{age}",[143,157590,1292],{"class":163},[143,157592,157593],{"class":149},".format(",[143,157595,80688],{"class":6116},[143,157597,160],{"class":755},[143,157599,157600],{"class":149},"name, ",[143,157602,71102],{"class":6116},[143,157604,160],{"class":755},[143,157606,157607],{"class":149},"age))\n",[58,157609,157611],{"id":157610},"_2103-f-string","2.10.3 f-string",[63,157613,157614],{},"推荐写法：",[133,157616,157618],{"className":31276,"code":157617,"language":31278,"meta":138,"style":138},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[140,157619,157620,157628,157636,157644,157648],{"__ignoreMap":138},[143,157621,157622,157624,157626],{"class":145,"line":146},[143,157623,147260],{"class":149},[143,157625,160],{"class":755},[143,157627,150077],{"class":163},[143,157629,157630,157632,157634],{"class":145,"line":35},[143,157631,147270],{"class":149},[143,157633,160],{"class":755},[143,157635,147275],{"class":280},[143,157637,157638,157640,157642],{"class":145,"line":46},[143,157639,156082],{"class":149},[143,157641,160],{"class":755},[143,157643,157393],{"class":280},[143,157645,157646],{"class":145,"line":293},[143,157647,3300],{"emptyLinePlaceholder":976},[143,157649,157650,157652,157654,157656,157658,157660,157662,157664,157666,157668,157670,157672,157674,157676,157679,157682,157684,157686],{"class":145,"line":306},[143,157651,31313],{"class":280},[143,157653,1049],{"class":149},[143,157655,1098],{"class":755},[143,157657,157406],{"class":163},[143,157659,1936],{"class":280},[143,157661,80688],{"class":149},[143,157663,366],{"class":280},[143,157665,157412],{"class":163},[143,157667,1936],{"class":280},[143,157669,71102],{"class":149},[143,157671,366],{"class":280},[143,157673,157418],{"class":163},[143,157675,1936],{"class":280},[143,157677,157678],{"class":149},"score",[143,157680,157681],{"class":755},":.1f",[143,157683,366],{"class":280},[143,157685,1292],{"class":163},[143,157687,1055],{"class":149},[63,157689,157690],{},"表达式也可以放进去：",[133,157692,157694],{"className":31276,"code":157693,"language":31278,"meta":138,"style":138},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[140,157695,157696,157704,157712],{"__ignoreMap":138},[143,157697,157698,157700,157702],{"class":145,"line":146},[143,157699,147405],{"class":149},[143,157701,160],{"class":755},[143,157703,147410],{"class":280},[143,157705,157706,157708,157710],{"class":145,"line":35},[143,157707,147415],{"class":149},[143,157709,160],{"class":755},[143,157711,55312],{"class":280},[143,157713,157714,157716,157718,157720,157723,157725,157727,157729,157732,157734,157737],{"class":145,"line":46},[143,157715,31313],{"class":280},[143,157717,1049],{"class":149},[143,157719,1098],{"class":755},[143,157721,157722],{"class":163},"\"总价:",[143,157724,1936],{"class":280},[143,157726,147405],{"class":149},[143,157728,1496],{"class":755},[143,157730,157731],{"class":149}," count",[143,157733,366],{"class":280},[143,157735,157736],{"class":163},"元\"",[143,157738,1055],{"class":149},[14,157740,157742],{"id":157741},"_211-input输入","2.11 input输入",[63,157744,157745,157748],{},[140,157746,157747],{},"input()"," 会暂停程序，等待用户输入。",[133,157750,157752],{"className":31276,"code":157751,"language":31278,"meta":138,"style":138},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[140,157753,157754,157768],{"__ignoreMap":138},[143,157755,157756,157758,157760,157762,157764,157766],{"class":145,"line":146},[143,157757,147260],{"class":149},[143,157759,160],{"class":755},[143,157761,61488],{"class":280},[143,157763,1049],{"class":149},[143,157765,153103],{"class":163},[143,157767,1055],{"class":149},[143,157769,157770,157772,157774,157776,157779,157781,157783,157785,157787],{"class":145,"line":35},[143,157771,31313],{"class":280},[143,157773,1049],{"class":149},[143,157775,1098],{"class":755},[143,157777,157778],{"class":163},"\"你好，",[143,157780,1936],{"class":280},[143,157782,80688],{"class":149},[143,157784,366],{"class":280},[143,157786,1292],{"class":163},[143,157788,1055],{"class":149},[63,157790,157791],{},"输入整数：",[133,157793,157795],{"className":31276,"code":157794,"language":31278,"meta":138,"style":138},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[140,157796,157797,157815],{"__ignoreMap":138},[143,157798,157799,157801,157803,157805,157807,157809,157811,157813],{"class":145,"line":146},[143,157800,147270],{"class":149},[143,157802,160],{"class":755},[143,157804,3282],{"class":280},[143,157806,1049],{"class":149},[143,157808,746],{"class":280},[143,157810,1049],{"class":149},[143,157812,153118],{"class":163},[143,157814,31395],{"class":149},[143,157816,157817,157819,157821,157823,157826,157828,157830,157832,157835,157837],{"class":145,"line":35},[143,157818,31313],{"class":280},[143,157820,1049],{"class":149},[143,157822,1098],{"class":755},[143,157824,157825],{"class":163},"\"明年你",[143,157827,1936],{"class":280},[143,157829,147270],{"class":149},[143,157831,1522],{"class":755},[143,157833,157834],{"class":280}," 1}",[143,157836,150128],{"class":163},[143,157838,1055],{"class":149},[63,157840,157841],{},"输入小数：",[133,157843,157845],{"className":31276,"code":157844,"language":31278,"meta":138,"style":138},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[140,157846,157847,157866],{"__ignoreMap":138},[143,157848,157849,157851,157853,157855,157857,157859,157861,157864],{"class":145,"line":146},[143,157850,156055],{"class":149},[143,157852,160],{"class":755},[143,157854,110672],{"class":280},[143,157856,1049],{"class":149},[143,157858,746],{"class":280},[143,157860,1049],{"class":149},[143,157862,157863],{"class":163},"\"请输入身高:\"",[143,157865,31395],{"class":149},[143,157867,157868,157870,157872,157874,157877,157879,157881,157884,157886,157889],{"class":145,"line":35},[143,157869,31313],{"class":280},[143,157871,1049],{"class":149},[143,157873,1098],{"class":755},[143,157875,157876],{"class":163},"\"身高:",[143,157878,1936],{"class":280},[143,157880,25879],{"class":149},[143,157882,157883],{"class":755},":.2f",[143,157885,366],{"class":280},[143,157887,157888],{"class":163},"米\"",[143,157890,1055],{"class":149},[14,157892,157894],{"id":157893},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[63,157896,124167],{},[19,157898,157899,157902,157905,157908],{},[22,157900,157901],{},"输入商品单价。",[22,157903,157904],{},"输入购买数量。",[22,157906,157907],{},"输入折扣，例如 0.8 表示八折。",[22,157909,157910],{},"输出最终金额，保留两位小数。",[63,157912,10935],{},[133,157914,157916],{"className":31276,"code":157915,"language":31278,"meta":138,"style":138},"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",[140,157917,157918,157937,157956,157976,157980,158000,158004,158027,158048,158070],{"__ignoreMap":138},[143,157919,157920,157922,157924,157926,157928,157930,157932,157935],{"class":145,"line":146},[143,157921,147405],{"class":149},[143,157923,160],{"class":755},[143,157925,110672],{"class":280},[143,157927,1049],{"class":149},[143,157929,746],{"class":280},[143,157931,1049],{"class":149},[143,157933,157934],{"class":163},"\"请输入商品单价:\"",[143,157936,31395],{"class":149},[143,157938,157939,157941,157943,157945,157947,157949,157951,157954],{"class":145,"line":35},[143,157940,147415],{"class":149},[143,157942,160],{"class":755},[143,157944,3282],{"class":280},[143,157946,1049],{"class":149},[143,157948,746],{"class":280},[143,157950,1049],{"class":149},[143,157952,157953],{"class":163},"\"请输入购买数量:\"",[143,157955,31395],{"class":149},[143,157957,157958,157961,157963,157965,157967,157969,157971,157974],{"class":145,"line":46},[143,157959,157960],{"class":149},"discount ",[143,157962,160],{"class":755},[143,157964,110672],{"class":280},[143,157966,1049],{"class":149},[143,157968,746],{"class":280},[143,157970,1049],{"class":149},[143,157972,157973],{"class":163},"\"请输入折扣:\"",[143,157975,31395],{"class":149},[143,157977,157978],{"class":145,"line":293},[143,157979,3300],{"emptyLinePlaceholder":976},[143,157981,157982,157985,157987,157990,157992,157995,157997],{"class":145,"line":306},[143,157983,157984],{"class":149},"total ",[143,157986,160],{"class":755},[143,157988,157989],{"class":149}," price ",[143,157991,1496],{"class":755},[143,157993,157994],{"class":149}," count ",[143,157996,1496],{"class":755},[143,157998,157999],{"class":149}," discount\n",[143,158001,158002],{"class":145,"line":319},[143,158003,3300],{"emptyLinePlaceholder":976},[143,158005,158006,158008,158010,158012,158015,158017,158019,158021,158023,158025],{"class":145,"line":332},[143,158007,31313],{"class":280},[143,158009,1049],{"class":149},[143,158011,1098],{"class":755},[143,158013,158014],{"class":163},"\"商品单价:",[143,158016,1936],{"class":280},[143,158018,80693],{"class":149},[143,158020,157883],{"class":755},[143,158022,366],{"class":280},[143,158024,1292],{"class":163},[143,158026,1055],{"class":149},[143,158028,158029,158031,158033,158035,158038,158040,158042,158044,158046],{"class":145,"line":345},[143,158030,31313],{"class":280},[143,158032,1049],{"class":149},[143,158034,1098],{"class":755},[143,158036,158037],{"class":163},"\"购买数量:",[143,158039,1936],{"class":280},[143,158041,85312],{"class":149},[143,158043,366],{"class":280},[143,158045,1292],{"class":163},[143,158047,1055],{"class":149},[143,158049,158050,158052,158054,158056,158059,158061,158064,158066,158068],{"class":145,"line":701},[143,158051,31313],{"class":280},[143,158053,1049],{"class":149},[143,158055,1098],{"class":755},[143,158057,158058],{"class":163},"\"折扣:",[143,158060,1936],{"class":280},[143,158062,158063],{"class":149},"discount",[143,158065,366],{"class":280},[143,158067,1292],{"class":163},[143,158069,1055],{"class":149},[143,158071,158072,158074,158076,158078,158081,158083,158086,158088,158090,158092],{"class":145,"line":707},[143,158073,31313],{"class":280},[143,158075,1049],{"class":149},[143,158077,1098],{"class":755},[143,158079,158080],{"class":163},"\"应付金额:",[143,158082,1936],{"class":280},[143,158084,158085],{"class":149},"total",[143,158087,157883],{"class":755},[143,158089,366],{"class":280},[143,158091,157736],{"class":163},[143,158093,1055],{"class":149},[14,158095,158097],{"id":158096},"_213-易错点","2.13 易错点",[19,158099,158100,158105,158111,158119,158122],{},[22,158101,158102,158104],{},[140,158103,157747],{}," 的结果是字符串，做运算前要转换。",[22,158106,158107,158108,29283],{},"字符串拼接时，数字要先 ",[140,158109,158110],{},"str()",[22,158112,158113,158115,158116,158118],{},[140,158114,160],{}," 是赋值，",[140,158117,3849],{}," 是比较。",[22,158120,158121],{},"Python 没有自增自减运算符。",[22,158123,158124],{},"浮点数计算可能有精度误差：",[133,158126,158128],{"className":31276,"code":158127,"language":31278,"meta":138,"style":138},"print(0.1 + 0.2)\n",[140,158129,158130],{"__ignoreMap":138},[143,158131,158132,158134,158136,158138,158140,158143],{"class":145,"line":146},[143,158133,31313],{"class":280},[143,158135,1049],{"class":149},[143,158137,87088],{"class":280},[143,158139,46464],{"class":755},[143,158141,158142],{"class":280}," 0.2",[143,158144,1055],{"class":149},[63,158146,158147,158148,158151],{},"金额计算如果要求严格，可以后续学习 ",[140,158149,158150],{},"decimal"," 模块。",[14,158153,158155],{"id":158154},"_214-本章练习","2.14 本章练习",[19,158157,158158,158161,158164,158167,158170],{},[22,158159,158160],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[22,158162,158163],{},"输入圆的半径，计算面积，保留两位小数。",[22,158165,158166],{},"输入工资和奖金，计算总收入。",[22,158168,158169],{},"输入摄氏温度，转换为华氏温度。",[22,158171,158172],{},"写一个 BMI 计算程序：",[133,158174,158177],{"className":158175,"code":158176,"language":6087,"meta":138},[6085],"BMI = 体重kg \u002F 身高m ** 2\n",[140,158178,158176],{"__ignoreMap":138},[954,158180,158181],{},"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":138,"searchDepth":35,"depth":35,"links":158183},[158184,158185,158186,158187,158188,158189,158190,158196,158197,158198,158203,158204,158205,158206],{"id":155745,"depth":35,"text":155746},{"id":155854,"depth":35,"text":155855},{"id":156025,"depth":35,"text":156026},{"id":156102,"depth":35,"text":156103},{"id":51629,"depth":35,"text":51630},{"id":156408,"depth":35,"text":156409},{"id":156634,"depth":35,"text":156635,"children":158191},[158192,158193,158194,158195],{"id":156638,"depth":46,"text":156639},{"id":156832,"depth":46,"text":156833},{"id":156920,"depth":46,"text":156921},{"id":157026,"depth":46,"text":157027},{"id":157135,"depth":35,"text":157136},{"id":157293,"depth":35,"text":157294},{"id":157358,"depth":35,"text":157359,"children":158199},[158200,158201,158202],{"id":157362,"depth":46,"text":157363},{"id":157507,"depth":46,"text":157508},{"id":157610,"depth":46,"text":157611},{"id":157741,"depth":35,"text":157742},{"id":157893,"depth":35,"text":157894},{"id":158096,"depth":35,"text":158097},{"id":158154,"depth":35,"text":158155},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155737,"description":973},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158213,"title":158214,"body":158215,"description":973,"extension":974,"meta":159851,"navigation":976,"path":159852,"seo":159853,"stem":159854,"__hash__":159855},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158216,"toc":159832},[158217,158220,158224,158227,158242,158245,158273,158277,158327,158329,158345,158348,158374,158377,158381,158448,158451,158467,158471,158474,158592,158595,158602,158651,158657,158661,158664,158777,158780,158784,158788,158791,158841,158845,158848,158898,158902,158905,158943,158947,158950,158996,158999,159034,159038,159043,159046,159092,159094,159161,159165,159171,159282,159291,159295,159297,159308,159310,159476,159480,159482,159496,159498,159712,159716,159735,159752,159755,159801,159805,159829],[10,158218,158214],{"id":158219},"_3-判断语句",[14,158221,158223],{"id":158222},"_31-布尔值","3.1 布尔值",[63,158225,158226],{},"判断语句依赖布尔值：",[133,158228,158230],{"className":31276,"code":158229,"language":31278,"meta":138,"style":138},"True\nFalse\n",[140,158231,158232,158237],{"__ignoreMap":138},[143,158233,158234],{"class":145,"line":146},[143,158235,158236],{"class":280},"True\n",[143,158238,158239],{"class":145,"line":35},[143,158240,158241],{"class":280},"False\n",[63,158243,158244],{},"比较表达式会产生布尔值：",[133,158246,158248],{"className":31276,"code":158247,"language":31278,"meta":138,"style":138},"age = 18\nprint(age >= 18)  # True\n",[140,158249,158250,158258],{"__ignoreMap":138},[143,158251,158252,158254,158256],{"class":145,"line":146},[143,158253,147270],{"class":149},[143,158255,160],{"class":755},[143,158257,147275],{"class":280},[143,158259,158260,158262,158264,158266,158268,158270],{"class":145,"line":35},[143,158261,31313],{"class":280},[143,158263,156492],{"class":149},[143,158265,2611],{"class":755},[143,158267,157009],{"class":280},[143,158269,46706],{"class":149},[143,158271,158272],{"class":266},"# True\n",[14,158274,158276],{"id":158275},"_32-if基础语法","3.2 if基础语法",[133,158278,158280],{"className":31276,"code":158279,"language":31278,"meta":138,"style":138},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[140,158281,158282,158300,158304,158316],{"__ignoreMap":138},[143,158283,158284,158286,158288,158290,158292,158294,158296,158298],{"class":145,"line":146},[143,158285,147270],{"class":149},[143,158287,160],{"class":755},[143,158289,3282],{"class":280},[143,158291,1049],{"class":149},[143,158293,746],{"class":280},[143,158295,1049],{"class":149},[143,158297,153118],{"class":163},[143,158299,31395],{"class":149},[143,158301,158302],{"class":145,"line":35},[143,158303,3300],{"emptyLinePlaceholder":976},[143,158305,158306,158308,158310,158312,158314],{"class":145,"line":46},[143,158307,2434],{"class":755},[143,158309,16605],{"class":149},[143,158311,2611],{"class":755},[143,158313,157009],{"class":280},[143,158315,4639],{"class":149},[143,158317,158318,158320,158322,158325],{"class":145,"line":293},[143,158319,32197],{"class":280},[143,158321,1049],{"class":149},[143,158323,158324],{"class":163},"\"可以进入网吧\"",[143,158326,1055],{"class":149},[63,158328,9925],{},[19,158330,158331,158336,158339,158342],{},[22,158332,158333,158335],{},[140,158334,2434],{}," 后面是条件表达式。",[22,158337,158338],{},"条件后面必须写冒号。",[22,158340,158341],{},"条件成立时执行缩进代码块。",[22,158343,158344],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[63,158346,158347],{},"错误示例：",[133,158349,158351],{"className":31276,"code":158350,"language":31278,"meta":138,"style":138},"if age >= 18\n    print(\"可以进入\")\n",[140,158352,158353,158363],{"__ignoreMap":138},[143,158354,158355,158357,158359,158361],{"class":145,"line":146},[143,158356,2434],{"class":755},[143,158358,16605],{"class":149},[143,158360,2611],{"class":755},[143,158362,147275],{"class":280},[143,158364,158365,158367,158369,158372],{"class":145,"line":35},[143,158366,32197],{"class":280},[143,158368,1049],{"class":149},[143,158370,158371],{"class":163},"\"可以进入\"",[143,158373,1055],{"class":149},[63,158375,158376],{},"缺少冒号。",[14,158378,158380],{"id":158379},"_33-if-else","3.3 if else",[133,158382,158384],{"className":31276,"code":158383,"language":31278,"meta":138,"style":138},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[140,158385,158386,158404,158408,158420,158431,158437],{"__ignoreMap":138},[143,158387,158388,158390,158392,158394,158396,158398,158400,158402],{"class":145,"line":146},[143,158389,147270],{"class":149},[143,158391,160],{"class":755},[143,158393,3282],{"class":280},[143,158395,1049],{"class":149},[143,158397,746],{"class":280},[143,158399,1049],{"class":149},[143,158401,153118],{"class":163},[143,158403,31395],{"class":149},[143,158405,158406],{"class":145,"line":35},[143,158407,3300],{"emptyLinePlaceholder":976},[143,158409,158410,158412,158414,158416,158418],{"class":145,"line":46},[143,158411,2434],{"class":755},[143,158413,16605],{"class":149},[143,158415,2611],{"class":755},[143,158417,157009],{"class":280},[143,158419,4639],{"class":149},[143,158421,158422,158424,158426,158429],{"class":145,"line":293},[143,158423,32197],{"class":280},[143,158425,1049],{"class":149},[143,158427,158428],{"class":163},"\"成年人\"",[143,158430,1055],{"class":149},[143,158432,158433,158435],{"class":145,"line":306},[143,158434,2602],{"class":755},[143,158436,4639],{"class":149},[143,158438,158439,158441,158443,158446],{"class":145,"line":319},[143,158440,32197],{"class":280},[143,158442,1049],{"class":149},[143,158444,158445],{"class":163},"\"未成年人\"",[143,158447,1055],{"class":149},[63,158449,158450],{},"执行逻辑：",[19,158452,158453,158459,158464],{},[22,158454,158455,158456,158458],{},"条件成立，执行 ",[140,158457,2434],{}," 代码块。",[22,158460,158461,158462,158458],{},"条件不成立，执行 ",[140,158463,2602],{},[22,158465,158466],{},"两个代码块只会执行其中一个。",[14,158468,158470],{"id":158469},"_34-if-elif-else","3.4 if elif else",[63,158472,158473],{},"多条件判断：",[133,158475,158477],{"className":31276,"code":158476,"language":31278,"meta":138,"style":138},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[140,158478,158479,158497,158501,158515,158526,158540,158551,158564,158575,158581],{"__ignoreMap":138},[143,158480,158481,158483,158485,158487,158489,158491,158493,158495],{"class":145,"line":146},[143,158482,156082],{"class":149},[143,158484,160],{"class":755},[143,158486,3282],{"class":280},[143,158488,1049],{"class":149},[143,158490,746],{"class":280},[143,158492,1049],{"class":149},[143,158494,153133],{"class":163},[143,158496,31395],{"class":149},[143,158498,158499],{"class":145,"line":35},[143,158500,3300],{"emptyLinePlaceholder":976},[143,158502,158503,158505,158508,158510,158513],{"class":145,"line":46},[143,158504,2434],{"class":755},[143,158506,158507],{"class":149}," score ",[143,158509,2611],{"class":755},[143,158511,158512],{"class":280}," 90",[143,158514,4639],{"class":149},[143,158516,158517,158519,158521,158524],{"class":145,"line":293},[143,158518,32197],{"class":280},[143,158520,1049],{"class":149},[143,158522,158523],{"class":163},"\"优秀\"",[143,158525,1055],{"class":149},[143,158527,158528,158531,158533,158535,158538],{"class":145,"line":306},[143,158529,158530],{"class":755},"elif",[143,158532,158507],{"class":149},[143,158534,2611],{"class":755},[143,158536,158537],{"class":280}," 80",[143,158539,4639],{"class":149},[143,158541,158542,158544,158546,158549],{"class":145,"line":319},[143,158543,32197],{"class":280},[143,158545,1049],{"class":149},[143,158547,158548],{"class":163},"\"良好\"",[143,158550,1055],{"class":149},[143,158552,158553,158555,158557,158559,158562],{"class":145,"line":332},[143,158554,158530],{"class":755},[143,158556,158507],{"class":149},[143,158558,2611],{"class":755},[143,158560,158561],{"class":280}," 60",[143,158563,4639],{"class":149},[143,158565,158566,158568,158570,158573],{"class":145,"line":345},[143,158567,32197],{"class":280},[143,158569,1049],{"class":149},[143,158571,158572],{"class":163},"\"及格\"",[143,158574,1055],{"class":149},[143,158576,158577,158579],{"class":145,"line":701},[143,158578,2602],{"class":755},[143,158580,4639],{"class":149},[143,158582,158583,158585,158587,158590],{"class":145,"line":707},[143,158584,32197],{"class":280},[143,158586,1049],{"class":149},[143,158588,158589],{"class":163},"\"不及格\"",[143,158591,1055],{"class":149},[63,158593,158594],{},"注意判断顺序很重要。",[63,158596,158597,158598,158601],{},"如果把 ",[140,158599,158600],{},"score >= 60"," 放在最前面：",[133,158603,158605],{"className":31276,"code":158604,"language":31278,"meta":138,"style":138},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[140,158606,158607,158619,158629,158641],{"__ignoreMap":138},[143,158608,158609,158611,158613,158615,158617],{"class":145,"line":146},[143,158610,2434],{"class":755},[143,158612,158507],{"class":149},[143,158614,2611],{"class":755},[143,158616,158561],{"class":280},[143,158618,4639],{"class":149},[143,158620,158621,158623,158625,158627],{"class":145,"line":35},[143,158622,32197],{"class":280},[143,158624,1049],{"class":149},[143,158626,158572],{"class":163},[143,158628,1055],{"class":149},[143,158630,158631,158633,158635,158637,158639],{"class":145,"line":46},[143,158632,158530],{"class":755},[143,158634,158507],{"class":149},[143,158636,2611],{"class":755},[143,158638,158512],{"class":280},[143,158640,4639],{"class":149},[143,158642,158643,158645,158647,158649],{"class":145,"line":293},[143,158644,32197],{"class":280},[143,158646,1049],{"class":149},[143,158648,158523],{"class":163},[143,158650,1055],{"class":149},[63,158652,158653,158654,158656],{},"成绩 95 会先满足 ",[140,158655,158600],{},"，后面的优秀分支就不会执行。",[14,158658,158660],{"id":158659},"_35-判断语句嵌套","3.5 判断语句嵌套",[63,158662,158663],{},"嵌套判断就是在一个判断内部再写判断。",[133,158665,158667],{"className":31276,"code":158666,"language":31278,"meta":138,"style":138},"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",[140,158668,158669,158687,158702,158706,158718,158732,158742,158749,158760,158766],{"__ignoreMap":138},[143,158670,158671,158673,158675,158677,158679,158681,158683,158685],{"class":145,"line":146},[143,158672,147270],{"class":149},[143,158674,160],{"class":755},[143,158676,3282],{"class":280},[143,158678,1049],{"class":149},[143,158680,746],{"class":280},[143,158682,1049],{"class":149},[143,158684,153118],{"class":163},[143,158686,31395],{"class":149},[143,158688,158689,158691,158693,158695,158697,158700],{"class":145,"line":35},[143,158690,157085],{"class":149},[143,158692,160],{"class":755},[143,158694,61488],{"class":280},[143,158696,1049],{"class":149},[143,158698,158699],{"class":163},"\"是否有票(y\u002Fn):\"",[143,158701,1055],{"class":149},[143,158703,158704],{"class":145,"line":46},[143,158705,3300],{"emptyLinePlaceholder":976},[143,158707,158708,158710,158712,158714,158716],{"class":145,"line":293},[143,158709,2434],{"class":755},[143,158711,16605],{"class":149},[143,158713,2611],{"class":755},[143,158715,157009],{"class":280},[143,158717,4639],{"class":149},[143,158719,158720,158722,158725,158727,158730],{"class":145,"line":306},[143,158721,4001],{"class":755},[143,158723,158724],{"class":149}," has_ticket ",[143,158726,3849],{"class":755},[143,158728,158729],{"class":163}," \"y\"",[143,158731,4639],{"class":149},[143,158733,158734,158736,158738,158740],{"class":145,"line":319},[143,158735,33349],{"class":280},[143,158737,1049],{"class":149},[143,158739,158371],{"class":163},[143,158741,1055],{"class":149},[143,158743,158744,158747],{"class":145,"line":332},[143,158745,158746],{"class":755},"    else",[143,158748,4639],{"class":149},[143,158750,158751,158753,158755,158758],{"class":145,"line":345},[143,158752,33349],{"class":280},[143,158754,1049],{"class":149},[143,158756,158757],{"class":163},"\"请先买票\"",[143,158759,1055],{"class":149},[143,158761,158762,158764],{"class":145,"line":701},[143,158763,2602],{"class":755},[143,158765,4639],{"class":149},[143,158767,158768,158770,158772,158775],{"class":145,"line":707},[143,158769,32197],{"class":280},[143,158771,1049],{"class":149},[143,158773,158774],{"class":163},"\"未成年人禁止进入\"",[143,158776,1055],{"class":149},[63,158778,158779],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158781,158783],{"id":158782},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[58,158785,158787],{"id":158786},"_361-and","3.6.1 and",[63,158789,158790],{},"两个条件都成立才成立。",[133,158792,158794],{"className":31276,"code":158793,"language":31278,"meta":138,"style":138},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[140,158795,158796,158804,158812,158816,158831],{"__ignoreMap":138},[143,158797,158798,158800,158802],{"class":145,"line":146},[143,158799,147270],{"class":149},[143,158801,160],{"class":755},[143,158803,88943],{"class":280},[143,158805,158806,158808,158810],{"class":145,"line":35},[143,158807,157085],{"class":149},[143,158809,160],{"class":755},[143,158811,154323],{"class":280},[143,158813,158814],{"class":145,"line":46},[143,158815,3300],{"emptyLinePlaceholder":976},[143,158817,158818,158820,158822,158824,158826,158828],{"class":145,"line":293},[143,158819,2434],{"class":755},[143,158821,16605],{"class":149},[143,158823,2611],{"class":755},[143,158825,157009],{"class":280},[143,158827,121304],{"class":755},[143,158829,158830],{"class":149}," has_ticket:\n",[143,158832,158833,158835,158837,158839],{"class":145,"line":306},[143,158834,32197],{"class":280},[143,158836,1049],{"class":149},[143,158838,158371],{"class":163},[143,158840,1055],{"class":149},[58,158842,158844],{"id":158843},"_362-or","3.6.2 or",[63,158846,158847],{},"只要一个条件成立就成立。",[133,158849,158851],{"className":31276,"code":158850,"language":31278,"meta":138,"style":138},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[140,158852,158853,158862,158871,158875,158887],{"__ignoreMap":138},[143,158854,158855,158858,158860],{"class":145,"line":146},[143,158856,158857],{"class":149},"is_vip ",[143,158859,160],{"class":755},[143,158861,126682],{"class":280},[143,158863,158864,158867,158869],{"class":145,"line":35},[143,158865,158866],{"class":149},"coupon ",[143,158868,160],{"class":755},[143,158870,154323],{"class":280},[143,158872,158873],{"class":145,"line":46},[143,158874,3300],{"emptyLinePlaceholder":976},[143,158876,158877,158879,158882,158884],{"class":145,"line":293},[143,158878,2434],{"class":755},[143,158880,158881],{"class":149}," is_vip ",[143,158883,115965],{"class":755},[143,158885,158886],{"class":149}," coupon:\n",[143,158888,158889,158891,158893,158896],{"class":145,"line":306},[143,158890,32197],{"class":280},[143,158892,1049],{"class":149},[143,158894,158895],{"class":163},"\"可以享受优惠\"",[143,158897,1055],{"class":149},[58,158899,158901],{"id":158900},"_363-not","3.6.3 not",[63,158903,158904],{},"取反。",[133,158906,158908],{"className":31276,"code":158907,"language":31278,"meta":138,"style":138},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[140,158909,158910,158919,158923,158932],{"__ignoreMap":138},[143,158911,158912,158915,158917],{"class":145,"line":146},[143,158913,158914],{"class":149},"is_closed ",[143,158916,160],{"class":755},[143,158918,126682],{"class":280},[143,158920,158921],{"class":145,"line":35},[143,158922,3300],{"emptyLinePlaceholder":976},[143,158924,158925,158927,158929],{"class":145,"line":46},[143,158926,2434],{"class":755},[143,158928,39828],{"class":755},[143,158930,158931],{"class":149}," is_closed:\n",[143,158933,158934,158936,158938,158941],{"class":145,"line":293},[143,158935,32197],{"class":280},[143,158937,1049],{"class":149},[143,158939,158940],{"class":163},"\"店铺营业中\"",[143,158942,1055],{"class":149},[14,158944,158946],{"id":158945},"_37-链式比较","3.7 链式比较",[63,158948,158949],{},"Python 支持链式比较：",[133,158951,158953],{"className":31276,"code":158952,"language":31278,"meta":138,"style":138},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[140,158954,158955,158964,158968,158985],{"__ignoreMap":138},[143,158956,158957,158959,158961],{"class":145,"line":146},[143,158958,156082],{"class":149},[143,158960,160],{"class":755},[143,158962,158963],{"class":280}," 85\n",[143,158965,158966],{"class":145,"line":35},[143,158967,3300],{"emptyLinePlaceholder":976},[143,158969,158970,158972,158974,158977,158979,158981,158983],{"class":145,"line":46},[143,158971,2434],{"class":755},[143,158973,4993],{"class":280},[143,158975,158976],{"class":755}," \u003C=",[143,158978,158507],{"class":149},[143,158980,2490],{"class":755},[143,158982,6654],{"class":280},[143,158984,4639],{"class":149},[143,158986,158987,158989,158991,158994],{"class":145,"line":293},[143,158988,32197],{"class":280},[143,158990,1049],{"class":149},[143,158992,158993],{"class":163},"\"成绩合法\"",[143,158995,1055],{"class":149},[63,158997,158998],{},"等价于：",[133,159000,159002],{"className":31276,"code":159001,"language":31278,"meta":138,"style":138},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[140,159003,159004,159024],{"__ignoreMap":138},[143,159005,159006,159008,159010,159012,159014,159016,159018,159020,159022],{"class":145,"line":146},[143,159007,2434],{"class":755},[143,159009,158507],{"class":149},[143,159011,2611],{"class":755},[143,159013,4993],{"class":280},[143,159015,121304],{"class":755},[143,159017,158507],{"class":149},[143,159019,2490],{"class":755},[143,159021,6654],{"class":280},[143,159023,4639],{"class":149},[143,159025,159026,159028,159030,159032],{"class":145,"line":35},[143,159027,32197],{"class":280},[143,159029,1049],{"class":149},[143,159031,158993],{"class":163},[143,159033,1055],{"class":149},[14,159035,159037],{"id":159036},"_38-真值和假值","3.8 真值和假值",[63,159039,117342,159040,159042],{},[140,159041,2434],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[63,159044,159045],{},"假值：",[133,159047,159049],{"className":31276,"code":159048,"language":31278,"meta":138,"style":138},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[140,159050,159051,159055,159060,159064,159068,159073,159077,159081,159086],{"__ignoreMap":138},[143,159052,159053],{"class":145,"line":146},[143,159054,158241],{"class":280},[143,159056,159057],{"class":145,"line":35},[143,159058,159059],{"class":280},"None\n",[143,159061,159062],{"class":145,"line":46},[143,159063,3985],{"class":280},[143,159065,159066],{"class":145,"line":293},[143,159067,33240],{"class":280},[143,159069,159070],{"class":145,"line":306},[143,159071,159072],{"class":163},"\"\"\n",[143,159074,159075],{"class":145,"line":319},[143,159076,33255],{"class":149},[143,159078,159079],{"class":145,"line":332},[143,159080,2876],{"class":149},[143,159082,159083],{"class":145,"line":345},[143,159084,159085],{"class":149},"{}\n",[143,159087,159088,159090],{"class":145,"line":701},[143,159089,156014],{"class":280},[143,159091,2876],{"class":149},[63,159093,16034],{},[133,159095,159097],{"className":31276,"code":159096,"language":31278,"meta":138,"style":138},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[140,159098,159099,159113,159117,159124,159144,159150],{"__ignoreMap":138},[143,159100,159101,159103,159105,159107,159109,159111],{"class":145,"line":146},[143,159102,147260],{"class":149},[143,159104,160],{"class":755},[143,159106,61488],{"class":280},[143,159108,1049],{"class":149},[143,159110,153103],{"class":163},[143,159112,1055],{"class":149},[143,159114,159115],{"class":145,"line":35},[143,159116,3300],{"emptyLinePlaceholder":976},[143,159118,159119,159121],{"class":145,"line":46},[143,159120,2434],{"class":755},[143,159122,159123],{"class":149}," name:\n",[143,159125,159126,159128,159130,159132,159134,159136,159138,159140,159142],{"class":145,"line":293},[143,159127,32197],{"class":280},[143,159129,1049],{"class":149},[143,159131,1098],{"class":755},[143,159133,157778],{"class":163},[143,159135,1936],{"class":280},[143,159137,80688],{"class":149},[143,159139,366],{"class":280},[143,159141,1292],{"class":163},[143,159143,1055],{"class":149},[143,159145,159146,159148],{"class":145,"line":306},[143,159147,2602],{"class":755},[143,159149,4639],{"class":149},[143,159151,159152,159154,159156,159159],{"class":145,"line":319},[143,159153,32197],{"class":280},[143,159155,1049],{"class":149},[143,159157,159158],{"class":163},"\"姓名不能为空\"",[143,159160,1055],{"class":149},[14,159162,159164],{"id":159163},"_39-match语句","3.9 match语句",[63,159166,159167,159168,159170],{},"Python 3.10 开始支持 ",[140,159169,72144],{},"。它适合处理固定选项。",[133,159172,159174],{"className":31276,"code":159173,"language":31278,"meta":138,"style":138},"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",[140,159175,159176,159192,159196,159203,159213,159224,159233,159244,159253,159264,159271],{"__ignoreMap":138},[143,159177,159178,159181,159183,159185,159187,159190],{"class":145,"line":146},[143,159179,159180],{"class":149},"command ",[143,159182,160],{"class":755},[143,159184,61488],{"class":280},[143,159186,1049],{"class":149},[143,159188,159189],{"class":163},"\"请输入命令:\"",[143,159191,1055],{"class":149},[143,159193,159194],{"class":145,"line":35},[143,159195,3300],{"emptyLinePlaceholder":976},[143,159197,159198,159200],{"class":145,"line":46},[143,159199,72144],{"class":755},[143,159201,159202],{"class":149}," command:\n",[143,159204,159205,159208,159211],{"class":145,"line":293},[143,159206,159207],{"class":755},"    case",[143,159209,159210],{"class":163}," \"start\"",[143,159212,4639],{"class":149},[143,159214,159215,159217,159219,159222],{"class":145,"line":306},[143,159216,33349],{"class":280},[143,159218,1049],{"class":149},[143,159220,159221],{"class":163},"\"启动\"",[143,159223,1055],{"class":149},[143,159225,159226,159228,159231],{"class":145,"line":319},[143,159227,159207],{"class":755},[143,159229,159230],{"class":163}," \"stop\"",[143,159232,4639],{"class":149},[143,159234,159235,159237,159239,159242],{"class":145,"line":332},[143,159236,33349],{"class":280},[143,159238,1049],{"class":149},[143,159240,159241],{"class":163},"\"停止\"",[143,159243,1055],{"class":149},[143,159245,159246,159248,159251],{"class":145,"line":345},[143,159247,159207],{"class":755},[143,159249,159250],{"class":163}," \"restart\"",[143,159252,4639],{"class":149},[143,159254,159255,159257,159259,159262],{"class":145,"line":701},[143,159256,33349],{"class":280},[143,159258,1049],{"class":149},[143,159260,159261],{"class":163},"\"重启\"",[143,159263,1055],{"class":149},[143,159265,159266,159268],{"class":145,"line":707},[143,159267,159207],{"class":755},[143,159269,159270],{"class":149}," _:\n",[143,159272,159273,159275,159277,159280],{"class":145,"line":727},[143,159274,33349],{"class":280},[143,159276,1049],{"class":149},[143,159278,159279],{"class":163},"\"未知命令\"",[143,159281,1055],{"class":149},[63,159283,159284,159285,159287,159288,159290],{},"入门阶段掌握 ",[140,159286,155382],{}," 更重要，",[140,159289,72144],{}," 可以作为补充。",[14,159292,159294],{"id":159293},"_310-小案例成绩等级","3.10 小案例：成绩等级",[63,159296,124167],{},[19,159298,159299,159302,159305],{},[22,159300,159301],{},"输入成绩。",[22,159303,159304],{},"判断成绩是否合法。",[22,159306,159307],{},"输出等级。",[63,159309,10935],{},[133,159311,159313],{"className":31276,"code":159312,"language":31278,"meta":138,"style":138},"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",[140,159314,159315,159333,159337,159355,159366,159378,159389,159401,159412,159425,159436,159448,159459,159465],{"__ignoreMap":138},[143,159316,159317,159319,159321,159323,159325,159327,159329,159331],{"class":145,"line":146},[143,159318,156082],{"class":149},[143,159320,160],{"class":755},[143,159322,110672],{"class":280},[143,159324,1049],{"class":149},[143,159326,746],{"class":280},[143,159328,1049],{"class":149},[143,159330,153133],{"class":163},[143,159332,31395],{"class":149},[143,159334,159335],{"class":145,"line":35},[143,159336,3300],{"emptyLinePlaceholder":976},[143,159338,159339,159341,159343,159345,159347,159349,159351,159353],{"class":145,"line":46},[143,159340,2434],{"class":755},[143,159342,39828],{"class":755},[143,159344,4993],{"class":280},[143,159346,158976],{"class":755},[143,159348,158507],{"class":149},[143,159350,2490],{"class":755},[143,159352,6654],{"class":280},[143,159354,4639],{"class":149},[143,159356,159357,159359,159361,159364],{"class":145,"line":293},[143,159358,32197],{"class":280},[143,159360,1049],{"class":149},[143,159362,159363],{"class":163},"\"成绩不合法\"",[143,159365,1055],{"class":149},[143,159367,159368,159370,159372,159374,159376],{"class":145,"line":306},[143,159369,158530],{"class":755},[143,159371,158507],{"class":149},[143,159373,2611],{"class":755},[143,159375,158512],{"class":280},[143,159377,4639],{"class":149},[143,159379,159380,159382,159384,159387],{"class":145,"line":319},[143,159381,32197],{"class":280},[143,159383,1049],{"class":149},[143,159385,159386],{"class":163},"\"等级:A\"",[143,159388,1055],{"class":149},[143,159390,159391,159393,159395,159397,159399],{"class":145,"line":332},[143,159392,158530],{"class":755},[143,159394,158507],{"class":149},[143,159396,2611],{"class":755},[143,159398,158537],{"class":280},[143,159400,4639],{"class":149},[143,159402,159403,159405,159407,159410],{"class":145,"line":345},[143,159404,32197],{"class":280},[143,159406,1049],{"class":149},[143,159408,159409],{"class":163},"\"等级:B\"",[143,159411,1055],{"class":149},[143,159413,159414,159416,159418,159420,159423],{"class":145,"line":701},[143,159415,158530],{"class":755},[143,159417,158507],{"class":149},[143,159419,2611],{"class":755},[143,159421,159422],{"class":280}," 70",[143,159424,4639],{"class":149},[143,159426,159427,159429,159431,159434],{"class":145,"line":707},[143,159428,32197],{"class":280},[143,159430,1049],{"class":149},[143,159432,159433],{"class":163},"\"等级:C\"",[143,159435,1055],{"class":149},[143,159437,159438,159440,159442,159444,159446],{"class":145,"line":727},[143,159439,158530],{"class":755},[143,159441,158507],{"class":149},[143,159443,2611],{"class":755},[143,159445,158561],{"class":280},[143,159447,4639],{"class":149},[143,159449,159450,159452,159454,159457],{"class":145,"line":2518},[143,159451,32197],{"class":280},[143,159453,1049],{"class":149},[143,159455,159456],{"class":163},"\"等级:D\"",[143,159458,1055],{"class":149},[143,159460,159461,159463],{"class":145,"line":2524},[143,159462,2602],{"class":755},[143,159464,4639],{"class":149},[143,159466,159467,159469,159471,159474],{"class":145,"line":2529},[143,159468,32197],{"class":280},[143,159470,1049],{"class":149},[143,159472,159473],{"class":163},"\"等级:E\"",[143,159475,1055],{"class":149},[14,159477,159479],{"id":159478},"_311-小案例会员折扣","3.11 小案例：会员折扣",[63,159481,124167],{},[19,159483,159484,159487,159490,159493],{},[22,159485,159486],{},"输入消费金额。",[22,159488,159489],{},"输入会员等级，普通、银卡、金卡。",[22,159491,159492],{},"普通不打折，银卡 9 折，金卡 8 折。",[22,159494,159495],{},"满 500 再减 50。",[63,159497,10935],{},[133,159499,159501],{"className":31276,"code":159500,"language":31278,"meta":138,"style":138},"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",[140,159502,159503,159523,159539,159543,159551,159555,159569,159579,159592,159601,159614,159622,159628,159639,159643,159657,159661,159675,159685,159689],{"__ignoreMap":138},[143,159504,159505,159508,159510,159512,159514,159516,159518,159521],{"class":145,"line":146},[143,159506,159507],{"class":149},"amount ",[143,159509,160],{"class":755},[143,159511,110672],{"class":280},[143,159513,1049],{"class":149},[143,159515,746],{"class":280},[143,159517,1049],{"class":149},[143,159519,159520],{"class":163},"\"请输入消费金额:\"",[143,159522,31395],{"class":149},[143,159524,159525,159528,159530,159532,159534,159537],{"class":145,"line":35},[143,159526,159527],{"class":149},"level ",[143,159529,160],{"class":755},[143,159531,61488],{"class":280},[143,159533,1049],{"class":149},[143,159535,159536],{"class":163},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[143,159538,1055],{"class":149},[143,159540,159541],{"class":145,"line":46},[143,159542,3300],{"emptyLinePlaceholder":976},[143,159544,159545,159547,159549],{"class":145,"line":293},[143,159546,157960],{"class":149},[143,159548,160],{"class":755},[143,159550,56582],{"class":280},[143,159552,159553],{"class":145,"line":306},[143,159554,3300],{"emptyLinePlaceholder":976},[143,159556,159557,159559,159562,159564,159567],{"class":145,"line":319},[143,159558,2434],{"class":755},[143,159560,159561],{"class":149}," level ",[143,159563,3849],{"class":755},[143,159565,159566],{"class":163}," \"银卡\"",[143,159568,4639],{"class":149},[143,159570,159571,159574,159576],{"class":145,"line":332},[143,159572,159573],{"class":149},"    discount ",[143,159575,160],{"class":755},[143,159577,159578],{"class":280}," 0.9\n",[143,159580,159581,159583,159585,159587,159590],{"class":145,"line":345},[143,159582,158530],{"class":755},[143,159584,159561],{"class":149},[143,159586,3849],{"class":755},[143,159588,159589],{"class":163}," \"金卡\"",[143,159591,4639],{"class":149},[143,159593,159594,159596,159598],{"class":145,"line":701},[143,159595,159573],{"class":149},[143,159597,160],{"class":755},[143,159599,159600],{"class":280}," 0.8\n",[143,159602,159603,159605,159607,159609,159612],{"class":145,"line":707},[143,159604,158530],{"class":755},[143,159606,159561],{"class":149},[143,159608,3849],{"class":755},[143,159610,159611],{"class":163}," \"普通\"",[143,159613,4639],{"class":149},[143,159615,159616,159618,159620],{"class":145,"line":727},[143,159617,159573],{"class":149},[143,159619,160],{"class":755},[143,159621,56582],{"class":280},[143,159623,159624,159626],{"class":145,"line":2518},[143,159625,2602],{"class":755},[143,159627,4639],{"class":149},[143,159629,159630,159632,159634,159637],{"class":145,"line":2524},[143,159631,32197],{"class":280},[143,159633,1049],{"class":149},[143,159635,159636],{"class":163},"\"会员等级输入错误，按普通会员计算\"",[143,159638,1055],{"class":149},[143,159640,159641],{"class":145,"line":2529},[143,159642,3300],{"emptyLinePlaceholder":976},[143,159644,159645,159648,159650,159653,159655],{"class":145,"line":2543},[143,159646,159647],{"class":149},"pay ",[143,159649,160],{"class":755},[143,159651,159652],{"class":149}," amount ",[143,159654,1496],{"class":755},[143,159656,157999],{"class":149},[143,159658,159659],{"class":145,"line":2548},[143,159660,3300],{"emptyLinePlaceholder":976},[143,159662,159663,159665,159668,159670,159673],{"class":145,"line":2554},[143,159664,2434],{"class":755},[143,159666,159667],{"class":149}," pay ",[143,159669,2611],{"class":755},[143,159671,159672],{"class":280}," 500",[143,159674,4639],{"class":149},[143,159676,159677,159680,159682],{"class":145,"line":2575},[143,159678,159679],{"class":149},"    pay ",[143,159681,150976],{"class":755},[143,159683,159684],{"class":280}," 50\n",[143,159686,159687],{"class":145,"line":2580},[143,159688,3300],{"emptyLinePlaceholder":976},[143,159690,159691,159693,159695,159697,159699,159701,159704,159706,159708,159710],{"class":145,"line":2594},[143,159692,31313],{"class":280},[143,159694,1049],{"class":149},[143,159696,1098],{"class":755},[143,159698,158080],{"class":163},[143,159700,1936],{"class":280},[143,159702,159703],{"class":149},"pay",[143,159705,157883],{"class":755},[143,159707,366],{"class":280},[143,159709,157736],{"class":163},[143,159711,1055],{"class":149},[14,159713,159715],{"id":159714},"_312-易错点","3.12 易错点",[19,159717,159718,159721,159724,159727,159732],{},[22,159719,159720],{},"冒号不能漏。",[22,159722,159723],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[22,159725,159726],{},"多分支判断要注意顺序。",[22,159728,159729,159730,29283],{},"判断相等用 ",[140,159731,3849],{},[22,159733,159734],{},"字符串比较区分大小写：",[133,159736,159738],{"className":31276,"code":159737,"language":31278,"meta":138,"style":138},"\"Y\" == \"y\"  # False\n",[140,159739,159740],{"__ignoreMap":138},[143,159741,159742,159745,159747,159749],{"class":145,"line":146},[143,159743,159744],{"class":163},"\"Y\"",[143,159746,102435],{"class":755},[143,159748,158729],{"class":163},[143,159750,159751],{"class":266},"  # False\n",[63,159753,159754],{},"可转换后再判断：",[133,159756,159758],{"className":31276,"code":159757,"language":31278,"meta":138,"style":138},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[140,159759,159760,159777,159790],{"__ignoreMap":138},[143,159761,159762,159765,159767,159769,159771,159774],{"class":145,"line":146},[143,159763,159764],{"class":149},"answer ",[143,159766,160],{"class":755},[143,159768,61488],{"class":280},[143,159770,1049],{"class":149},[143,159772,159773],{"class":163},"\"是否继续(y\u002Fn):\"",[143,159775,159776],{"class":149},").lower()\n",[143,159778,159779,159781,159784,159786,159788],{"class":145,"line":35},[143,159780,2434],{"class":755},[143,159782,159783],{"class":149}," answer ",[143,159785,3849],{"class":755},[143,159787,158729],{"class":163},[143,159789,4639],{"class":149},[143,159791,159792,159794,159796,159799],{"class":145,"line":46},[143,159793,32197],{"class":280},[143,159795,1049],{"class":149},[143,159797,159798],{"class":163},"\"继续\"",[143,159800,1055],{"class":149},[14,159802,159804],{"id":159803},"_313-本章练习","3.13 本章练习",[19,159806,159807,159810,159813,159816,159826],{},[22,159808,159809],{},"输入年龄，判断是否成年。",[22,159811,159812],{},"输入年份，判断是否为闰年。",[22,159814,159815],{},"输入三个数字，输出最大值。",[22,159817,159818,159819,159822,159823,159825],{},"写登录判断：用户名是 ",[140,159820,159821],{},"admin"," 且密码是 ",[140,159824,15983],{}," 才登录成功。",[22,159827,159828],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[954,159830,159831],{},"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":138,"searchDepth":35,"depth":35,"links":159833},[159834,159835,159836,159837,159838,159839,159844,159845,159846,159847,159848,159849,159850],{"id":158222,"depth":35,"text":158223},{"id":158275,"depth":35,"text":158276},{"id":158379,"depth":35,"text":158380},{"id":158469,"depth":35,"text":158470},{"id":158659,"depth":35,"text":158660},{"id":158782,"depth":35,"text":158783,"children":159840},[159841,159842,159843],{"id":158786,"depth":46,"text":158787},{"id":158843,"depth":46,"text":158844},{"id":158900,"depth":46,"text":158901},{"id":158945,"depth":35,"text":158946},{"id":159036,"depth":35,"text":159037},{"id":159163,"depth":35,"text":159164},{"id":159293,"depth":35,"text":159294},{"id":159478,"depth":35,"text":159479},{"id":159714,"depth":35,"text":159715},{"id":159803,"depth":35,"text":159804},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158214,"description":973},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159857,"title":159858,"body":159859,"description":973,"extension":974,"meta":161628,"navigation":976,"path":161629,"seo":161630,"stem":161631,"__hash__":161632},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159860,"toc":161608},[159861,159864,159868,159874,159877,159894,159898,159900,159917,159919,159964,159966,159983,159987,159990,160056,160059,160077,160081,160242,160251,160255,160259,160264,160311,160313,160319,160323,160328,160375,160377,160383,160387,160392,160428,160431,160478,160482,160488,160546,160551,160582,160587,160591,160646,160649,160721,160724,160783,160787,160790,160865,160868,160872,160978,160981,161007,161011,161023,161092,161095,161187,161191,161193,161204,161206,161336,161340,161542,161550,161554,161584,161588,161605],[10,159862,159858],{"id":159863},"_4-循环语句",[14,159865,159867],{"id":159866},"_41-为什么需要循环","4.1 为什么需要循环",[63,159869,159870,159871,159873],{},"如果要输出 1 到 100，不应该写 100 行 ",[140,159872,147196],{},"，而应该用循环。",[63,159875,159876],{},"循环适合处理重复任务：",[19,159878,159879,159882,159885,159888,159891],{},[22,159880,159881],{},"重复输出。",[22,159883,159884],{},"重复输入。",[22,159886,159887],{},"遍历数据。",[22,159889,159890],{},"持续执行菜单。",[22,159892,159893],{},"批量处理文件或数据。",[14,159895,159897],{"id":159896},"_42-while循环","4.2 while循环",[63,159899,6081],{},[133,159901,159903],{"className":31276,"code":159902,"language":31278,"meta":138,"style":138},"while 条件:\n    循环体\n",[140,159904,159905,159912],{"__ignoreMap":138},[143,159906,159907,159909],{"class":145,"line":146},[143,159908,109538],{"class":755},[143,159910,159911],{"class":149}," 条件:\n",[143,159913,159914],{"class":145,"line":35},[143,159915,159916],{"class":149},"    循环体\n",[63,159918,16034],{},[133,159920,159922],{"className":31276,"code":159921,"language":31278,"meta":138,"style":138},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[140,159923,159924,159932,159936,159948,159955],{"__ignoreMap":138},[143,159925,159926,159928,159930],{"class":145,"line":146},[143,159927,101024],{"class":149},[143,159929,160],{"class":755},[143,159931,56582],{"class":280},[143,159933,159934],{"class":145,"line":35},[143,159935,3300],{"emptyLinePlaceholder":976},[143,159937,159938,159940,159942,159944,159946],{"class":145,"line":46},[143,159939,109538],{"class":755},[143,159941,10338],{"class":149},[143,159943,2490],{"class":755},[143,159945,3048],{"class":280},[143,159947,4639],{"class":149},[143,159949,159950,159952],{"class":145,"line":293},[143,159951,32197],{"class":280},[143,159953,159954],{"class":149},"(i)\n",[143,159956,159957,159960,159962],{"class":145,"line":306},[143,159958,159959],{"class":149},"    i ",[143,159961,10377],{"class":755},[143,159963,56582],{"class":280},[63,159965,81807],{},[19,159967,159968,159974,159977,159980],{},[22,159969,159970,159971,29283],{},"判断条件 ",[140,159972,159973],{},"i \u003C= 5",[22,159975,159976],{},"条件成立，执行循环体。",[22,159978,159979],{},"执行完后回到条件判断。",[22,159981,159982],{},"条件不成立，退出循环。",[14,159984,159986],{"id":159985},"_43-while累加","4.3 while累加",[63,159988,159989],{},"计算 1 到 100 的和：",[133,159991,159993],{"className":31276,"code":159992,"language":31278,"meta":138,"style":138},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[140,159994,159995,160003,160011,160015,160027,160037,160045,160049],{"__ignoreMap":138},[143,159996,159997,159999,160001],{"class":145,"line":146},[143,159998,101024],{"class":149},[143,160000,160],{"class":755},[143,160002,56582],{"class":280},[143,160004,160005,160007,160009],{"class":145,"line":35},[143,160006,157984],{"class":149},[143,160008,160],{"class":755},[143,160010,48231],{"class":280},[143,160012,160013],{"class":145,"line":46},[143,160014,3300],{"emptyLinePlaceholder":976},[143,160016,160017,160019,160021,160023,160025],{"class":145,"line":293},[143,160018,109538],{"class":755},[143,160020,10338],{"class":149},[143,160022,2490],{"class":755},[143,160024,6654],{"class":280},[143,160026,4639],{"class":149},[143,160028,160029,160032,160034],{"class":145,"line":306},[143,160030,160031],{"class":149},"    total ",[143,160033,10377],{"class":755},[143,160035,160036],{"class":149}," i\n",[143,160038,160039,160041,160043],{"class":145,"line":319},[143,160040,159959],{"class":149},[143,160042,10377],{"class":755},[143,160044,56582],{"class":280},[143,160046,160047],{"class":145,"line":332},[143,160048,3300],{"emptyLinePlaceholder":976},[143,160050,160051,160053],{"class":145,"line":345},[143,160052,31313],{"class":280},[143,160054,160055],{"class":149},"(total)\n",[63,160057,160058],{},"核心思想：",[19,160060,160061,160066,160071],{},[22,160062,160063,160065],{},[140,160064,1482],{}," 控制循环次数。",[22,160067,160068,160070],{},[140,160069,158085],{}," 保存累加结果。",[22,160072,160073,160074,160076],{},"每轮循环都要更新 ",[140,160075,1482],{},"，否则可能死循环。",[14,160078,160080],{"id":160079},"_44-while猜数字","4.4 while猜数字",[133,160082,160084],{"className":31276,"code":160083,"language":31278,"meta":138,"style":138},"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",[140,160085,160086,160092,160096,160113,160121,160125,160133,160153,160162,160166,160178,160189,160199,160210,160216,160238],{"__ignoreMap":138},[143,160087,160088,160090],{"class":145,"line":146},[143,160089,31290],{"class":755},[143,160091,46226],{"class":149},[143,160093,160094],{"class":145,"line":35},[143,160095,3300],{"emptyLinePlaceholder":976},[143,160097,160098,160100,160102,160105,160107,160109,160111],{"class":145,"line":46},[143,160099,159764],{"class":149},[143,160101,160],{"class":755},[143,160103,160104],{"class":149}," random.randint(",[143,160106,771],{"class":280},[143,160108,13335],{"class":149},[143,160110,1352],{"class":280},[143,160112,1055],{"class":149},[143,160114,160115,160117,160119],{"class":145,"line":293},[143,160116,147415],{"class":149},[143,160118,160],{"class":755},[143,160120,48231],{"class":280},[143,160122,160123],{"class":145,"line":306},[143,160124,3300],{"emptyLinePlaceholder":976},[143,160126,160127,160129,160131],{"class":145,"line":319},[143,160128,109538],{"class":755},[143,160130,96169],{"class":280},[143,160132,4639],{"class":149},[143,160134,160135,160138,160140,160142,160144,160146,160148,160151],{"class":145,"line":332},[143,160136,160137],{"class":149},"    guess ",[143,160139,160],{"class":755},[143,160141,3282],{"class":280},[143,160143,1049],{"class":149},[143,160145,746],{"class":280},[143,160147,1049],{"class":149},[143,160149,160150],{"class":163},"\"请输入1到100之间的数字:\"",[143,160152,31395],{"class":149},[143,160154,160155,160158,160160],{"class":145,"line":345},[143,160156,160157],{"class":149},"    count ",[143,160159,10377],{"class":755},[143,160161,56582],{"class":280},[143,160163,160164],{"class":145,"line":701},[143,160165,3300],{"emptyLinePlaceholder":976},[143,160167,160168,160170,160173,160175],{"class":145,"line":707},[143,160169,4001],{"class":755},[143,160171,160172],{"class":149}," guess ",[143,160174,1998],{"class":755},[143,160176,160177],{"class":149}," answer:\n",[143,160179,160180,160182,160184,160187],{"class":145,"line":727},[143,160181,33349],{"class":280},[143,160183,1049],{"class":149},[143,160185,160186],{"class":163},"\"猜大了\"",[143,160188,1055],{"class":149},[143,160190,160191,160193,160195,160197],{"class":145,"line":2518},[143,160192,40191],{"class":755},[143,160194,160172],{"class":149},[143,160196,150],{"class":755},[143,160198,160177],{"class":149},[143,160200,160201,160203,160205,160208],{"class":145,"line":2524},[143,160202,33349],{"class":280},[143,160204,1049],{"class":149},[143,160206,160207],{"class":163},"\"猜小了\"",[143,160209,1055],{"class":149},[143,160211,160212,160214],{"class":145,"line":2529},[143,160213,158746],{"class":755},[143,160215,4639],{"class":149},[143,160217,160218,160220,160222,160224,160227,160229,160231,160233,160236],{"class":145,"line":2543},[143,160219,33349],{"class":280},[143,160221,1049],{"class":149},[143,160223,1098],{"class":755},[143,160225,160226],{"class":163},"\"猜对了，一共猜了",[143,160228,1936],{"class":280},[143,160230,85312],{"class":149},[143,160232,366],{"class":280},[143,160234,160235],{"class":163},"次\"",[143,160237,1055],{"class":149},[143,160239,160240],{"class":145,"line":2548},[143,160241,32525],{"class":755},[63,160243,160244,160247,160248,160250],{},[140,160245,160246],{},"while True"," 表示无限循环，通常配合 ",[140,160249,2953],{}," 使用。",[14,160252,160254],{"id":160253},"_45-break和continue","4.5 break和continue",[58,160256,160258],{"id":160257},"_451-break","4.5.1 break",[63,160260,160261,160263],{},[140,160262,2953],{}," 直接结束整个循环。",[133,160265,160267],{"className":31276,"code":160266,"language":31278,"meta":138,"style":138},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[140,160268,160269,160289,160301,160305],{"__ignoreMap":138},[143,160270,160271,160273,160275,160277,160279,160281,160283,160285,160287],{"class":145,"line":146},[143,160272,3925],{"class":755},[143,160274,10338],{"class":149},[143,160276,26941],{"class":755},[143,160278,33341],{"class":280},[143,160280,1049],{"class":149},[143,160282,771],{"class":280},[143,160284,13335],{"class":149},[143,160286,1385],{"class":280},[143,160288,31684],{"class":149},[143,160290,160291,160293,160295,160297,160299],{"class":145,"line":35},[143,160292,4001],{"class":755},[143,160294,10338],{"class":149},[143,160296,3849],{"class":755},[143,160298,78949],{"class":280},[143,160300,4639],{"class":149},[143,160302,160303],{"class":145,"line":46},[143,160304,32525],{"class":755},[143,160306,160307,160309],{"class":145,"line":293},[143,160308,32197],{"class":280},[143,160310,159954],{"class":149},[63,160312,147181],{},[133,160314,160317],{"className":160315,"code":160316,"language":6087,"meta":138},[6085],"1\n2\n",[140,160318,160316],{"__ignoreMap":138},[58,160320,160322],{"id":160321},"_452-continue","4.5.2 continue",[63,160324,160325,160327],{},[140,160326,155396],{}," 跳过本轮剩余代码，进入下一轮循环。",[133,160329,160331],{"className":31276,"code":160330,"language":31278,"meta":138,"style":138},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[140,160332,160333,160353,160365,160369],{"__ignoreMap":138},[143,160334,160335,160337,160339,160341,160343,160345,160347,160349,160351],{"class":145,"line":146},[143,160336,3925],{"class":755},[143,160338,10338],{"class":149},[143,160340,26941],{"class":755},[143,160342,33341],{"class":280},[143,160344,1049],{"class":149},[143,160346,771],{"class":280},[143,160348,13335],{"class":149},[143,160350,1385],{"class":280},[143,160352,31684],{"class":149},[143,160354,160355,160357,160359,160361,160363],{"class":145,"line":35},[143,160356,4001],{"class":755},[143,160358,10338],{"class":149},[143,160360,3849],{"class":755},[143,160362,78949],{"class":280},[143,160364,4639],{"class":149},[143,160366,160367],{"class":145,"line":46},[143,160368,149236],{"class":755},[143,160370,160371,160373],{"class":145,"line":293},[143,160372,32197],{"class":280},[143,160374,159954],{"class":149},[63,160376,147181],{},[133,160378,160381],{"className":160379,"code":160380,"language":6087,"meta":138},[6085],"1\n2\n4\n5\n",[140,160382,160380],{"__ignoreMap":138},[14,160384,160386],{"id":160385},"_46-for循环","4.6 for循环",[63,160388,160389,160391],{},[140,160390,3925],{}," 常用于遍历序列。",[133,160393,160395],{"className":31276,"code":160394,"language":31278,"meta":138,"style":138},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[140,160396,160397,160406,160410,160421],{"__ignoreMap":138},[143,160398,160399,160401,160403],{"class":145,"line":146},[143,160400,147260],{"class":149},[143,160402,160],{"class":755},[143,160404,160405],{"class":163}," \"python\"\n",[143,160407,160408],{"class":145,"line":35},[143,160409,3300],{"emptyLinePlaceholder":976},[143,160411,160412,160414,160417,160419],{"class":145,"line":46},[143,160413,3925],{"class":755},[143,160415,160416],{"class":149}," ch ",[143,160418,26941],{"class":755},[143,160420,159123],{"class":149},[143,160422,160423,160425],{"class":145,"line":293},[143,160424,32197],{"class":280},[143,160426,160427],{"class":149},"(ch)\n",[63,160429,160430],{},"遍历列表：",[133,160432,160434],{"className":31276,"code":160433,"language":31278,"meta":138,"style":138},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[140,160435,160436,160458,160462,160472],{"__ignoreMap":138},[143,160437,160438,160441,160443,160445,160447,160449,160451,160453,160456],{"class":145,"line":146},[143,160439,160440],{"class":149},"students ",[143,160442,160],{"class":755},[143,160444,53113],{"class":149},[143,160446,150612],{"class":163},[143,160448,13335],{"class":149},[143,160450,151660],{"class":163},[143,160452,13335],{"class":149},[143,160454,160455],{"class":163},"\"小刚\"",[143,160457,34144],{"class":149},[143,160459,160460],{"class":145,"line":35},[143,160461,3300],{"emptyLinePlaceholder":976},[143,160463,160464,160466,160468,160470],{"class":145,"line":46},[143,160465,3925],{"class":755},[143,160467,152861],{"class":149},[143,160469,26941],{"class":755},[143,160471,152866],{"class":149},[143,160473,160474,160476],{"class":145,"line":293},[143,160475,32197],{"class":280},[143,160477,150766],{"class":149},[14,160479,160481],{"id":160480},"_47-range函数","4.7 range函数",[63,160483,160484,160487],{},[140,160485,160486],{},"range()"," 用于生成整数序列。",[133,160489,160491],{"className":31276,"code":160490,"language":31278,"meta":138,"style":138},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[140,160492,160493,160507,160525],{"__ignoreMap":138},[143,160494,160495,160497,160499,160501,160504],{"class":145,"line":146},[143,160496,34314],{"class":280},[143,160498,1049],{"class":149},[143,160500,1360],{"class":280},[143,160502,160503],{"class":149},")          ",[143,160505,160506],{"class":266},"# 0,1,2,3,4\n",[143,160508,160509,160511,160513,160515,160517,160519,160522],{"class":145,"line":35},[143,160510,34314],{"class":280},[143,160512,1049],{"class":149},[143,160514,771],{"class":280},[143,160516,13335],{"class":149},[143,160518,1360],{"class":280},[143,160520,160521],{"class":149},")       ",[143,160523,160524],{"class":266},"# 1,2,3,4\n",[143,160526,160527,160529,160531,160533,160535,160537,160539,160541,160543],{"class":145,"line":46},[143,160528,34314],{"class":280},[143,160530,1049],{"class":149},[143,160532,771],{"class":280},[143,160534,13335],{"class":149},[143,160536,1487],{"class":280},[143,160538,13335],{"class":149},[143,160540,1122],{"class":280},[143,160542,156385],{"class":149},[143,160544,160545],{"class":266},"# 1,3,5,7,9\n",[63,160547,160548,160549,25516],{},"配合 ",[140,160550,3925],{},[133,160552,160554],{"className":31276,"code":160553,"language":31278,"meta":138,"style":138},"for i in range(1, 6):\n    print(i)\n",[140,160555,160556,160576],{"__ignoreMap":138},[143,160557,160558,160560,160562,160564,160566,160568,160570,160572,160574],{"class":145,"line":146},[143,160559,3925],{"class":755},[143,160561,10338],{"class":149},[143,160563,26941],{"class":755},[143,160565,33341],{"class":280},[143,160567,1049],{"class":149},[143,160569,771],{"class":280},[143,160571,13335],{"class":149},[143,160573,1385],{"class":280},[143,160575,31684],{"class":149},[143,160577,160578,160580],{"class":145,"line":35},[143,160579,32197],{"class":280},[143,160581,159954],{"class":149},[63,160583,9925,160584,160586],{},[140,160585,34314],{}," 的结束值不包含在内。",[14,160588,160590],{"id":160589},"_48-for循环求和","4.8 for循环求和",[133,160592,160594],{"className":31276,"code":160593,"language":31278,"meta":138,"style":138},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[140,160595,160596,160604,160608,160628,160636,160640],{"__ignoreMap":138},[143,160597,160598,160600,160602],{"class":145,"line":146},[143,160599,157984],{"class":149},[143,160601,160],{"class":755},[143,160603,48231],{"class":280},[143,160605,160606],{"class":145,"line":35},[143,160607,3300],{"emptyLinePlaceholder":976},[143,160609,160610,160612,160614,160616,160618,160620,160622,160624,160626],{"class":145,"line":46},[143,160611,3925],{"class":755},[143,160613,10338],{"class":149},[143,160615,26941],{"class":755},[143,160617,33341],{"class":280},[143,160619,1049],{"class":149},[143,160621,771],{"class":280},[143,160623,13335],{"class":149},[143,160625,1378],{"class":280},[143,160627,31684],{"class":149},[143,160629,160630,160632,160634],{"class":145,"line":293},[143,160631,160031],{"class":149},[143,160633,10377],{"class":755},[143,160635,160036],{"class":149},[143,160637,160638],{"class":145,"line":306},[143,160639,3300],{"emptyLinePlaceholder":976},[143,160641,160642,160644],{"class":145,"line":319},[143,160643,31313],{"class":280},[143,160645,160055],{"class":149},[63,160647,160648],{},"求偶数和：",[133,160650,160652],{"className":31276,"code":160651,"language":31278,"meta":138,"style":138},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[140,160653,160654,160662,160666,160686,160702,160711,160715],{"__ignoreMap":138},[143,160655,160656,160658,160660],{"class":145,"line":146},[143,160657,157984],{"class":149},[143,160659,160],{"class":755},[143,160661,48231],{"class":280},[143,160663,160664],{"class":145,"line":35},[143,160665,3300],{"emptyLinePlaceholder":976},[143,160667,160668,160670,160672,160674,160676,160678,160680,160682,160684],{"class":145,"line":46},[143,160669,3925],{"class":755},[143,160671,10338],{"class":149},[143,160673,26941],{"class":755},[143,160675,33341],{"class":280},[143,160677,1049],{"class":149},[143,160679,771],{"class":280},[143,160681,13335],{"class":149},[143,160683,1378],{"class":280},[143,160685,31684],{"class":149},[143,160687,160688,160690,160692,160694,160696,160698,160700],{"class":145,"line":293},[143,160689,4001],{"class":755},[143,160691,10338],{"class":149},[143,160693,1369],{"class":755},[143,160695,15654],{"class":280},[143,160697,102435],{"class":755},[143,160699,4993],{"class":280},[143,160701,4639],{"class":149},[143,160703,160704,160707,160709],{"class":145,"line":306},[143,160705,160706],{"class":149},"        total ",[143,160708,10377],{"class":755},[143,160710,160036],{"class":149},[143,160712,160713],{"class":145,"line":319},[143,160714,3300],{"emptyLinePlaceholder":976},[143,160716,160717,160719],{"class":145,"line":332},[143,160718,31313],{"class":280},[143,160720,160055],{"class":149},[63,160722,160723],{},"也可以：",[133,160725,160727],{"className":31276,"code":160726,"language":31278,"meta":138,"style":138},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[140,160728,160729,160737,160741,160765,160773,160777],{"__ignoreMap":138},[143,160730,160731,160733,160735],{"class":145,"line":146},[143,160732,157984],{"class":149},[143,160734,160],{"class":755},[143,160736,48231],{"class":280},[143,160738,160739],{"class":145,"line":35},[143,160740,3300],{"emptyLinePlaceholder":976},[143,160742,160743,160745,160747,160749,160751,160753,160755,160757,160759,160761,160763],{"class":145,"line":46},[143,160744,3925],{"class":755},[143,160746,10338],{"class":149},[143,160748,26941],{"class":755},[143,160750,33341],{"class":280},[143,160752,1049],{"class":149},[143,160754,1122],{"class":280},[143,160756,13335],{"class":149},[143,160758,1378],{"class":280},[143,160760,13335],{"class":149},[143,160762,1122],{"class":280},[143,160764,31684],{"class":149},[143,160766,160767,160769,160771],{"class":145,"line":293},[143,160768,160031],{"class":149},[143,160770,10377],{"class":755},[143,160772,160036],{"class":149},[143,160774,160775],{"class":145,"line":306},[143,160776,3300],{"emptyLinePlaceholder":976},[143,160778,160779,160781],{"class":145,"line":319},[143,160780,31313],{"class":280},[143,160782,160055],{"class":149},[14,160784,160786],{"id":160785},"_49-循环嵌套","4.9 循环嵌套",[63,160788,160789],{},"嵌套循环就是循环里面再写循环。",[133,160791,160793],{"className":31276,"code":160792,"language":31278,"meta":138,"style":138},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[140,160794,160795,160815,160835],{"__ignoreMap":138},[143,160796,160797,160799,160801,160803,160805,160807,160809,160811,160813],{"class":145,"line":146},[143,160798,3925],{"class":755},[143,160800,10338],{"class":149},[143,160802,26941],{"class":755},[143,160804,33341],{"class":280},[143,160806,1049],{"class":149},[143,160808,771],{"class":280},[143,160810,13335],{"class":149},[143,160812,1334],{"class":280},[143,160814,31684],{"class":149},[143,160816,160817,160819,160821,160823,160825,160827,160829,160831,160833],{"class":145,"line":35},[143,160818,4101],{"class":755},[143,160820,10400],{"class":149},[143,160822,26941],{"class":755},[143,160824,33341],{"class":280},[143,160826,1049],{"class":149},[143,160828,771],{"class":280},[143,160830,13335],{"class":149},[143,160832,1334],{"class":280},[143,160834,31684],{"class":149},[143,160836,160837,160839,160841,160843,160846,160848,160850,160852,160855,160857,160859,160861,160863],{"class":145,"line":46},[143,160838,33349],{"class":280},[143,160840,1049],{"class":149},[143,160842,1098],{"class":755},[143,160844,160845],{"class":163},"\"i=",[143,160847,1936],{"class":280},[143,160849,1482],{"class":149},[143,160851,366],{"class":280},[143,160853,160854],{"class":163},", j=",[143,160856,1936],{"class":280},[143,160858,1508],{"class":149},[143,160860,366],{"class":280},[143,160862,1292],{"class":163},[143,160864,1055],{"class":149},[63,160866,160867],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160869,160871],{"id":160870},"_410-九九乘法表","4.10 九九乘法表",[133,160873,160875],{"className":31276,"code":160874,"language":31278,"meta":138,"style":138},"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",[140,160876,160877,160897,160920,160972],{"__ignoreMap":138},[143,160878,160879,160881,160883,160885,160887,160889,160891,160893,160895],{"class":145,"line":146},[143,160880,3925],{"class":755},[143,160882,10338],{"class":149},[143,160884,26941],{"class":755},[143,160886,33341],{"class":280},[143,160888,1049],{"class":149},[143,160890,771],{"class":280},[143,160892,13335],{"class":149},[143,160894,1487],{"class":280},[143,160896,31684],{"class":149},[143,160898,160899,160901,160903,160905,160907,160909,160911,160914,160916,160918],{"class":145,"line":35},[143,160900,4101],{"class":755},[143,160902,10400],{"class":149},[143,160904,26941],{"class":755},[143,160906,33341],{"class":280},[143,160908,1049],{"class":149},[143,160910,771],{"class":280},[143,160912,160913],{"class":149},", i ",[143,160915,1522],{"class":755},[143,160917,26016],{"class":280},[143,160919,31684],{"class":149},[143,160921,160922,160924,160926,160928,160930,160932,160934,160936,160938,160940,160942,160944,160946,160948,160950,160952,160954,160956,160958,160960,160962,160964,160966,160968,160970],{"class":145,"line":46},[143,160923,33349],{"class":280},[143,160925,1049],{"class":149},[143,160927,1098],{"class":755},[143,160929,1292],{"class":163},[143,160931,1936],{"class":280},[143,160933,1508],{"class":149},[143,160935,366],{"class":280},[143,160937,1496],{"class":163},[143,160939,1936],{"class":280},[143,160941,1482],{"class":149},[143,160943,366],{"class":280},[143,160945,160],{"class":163},[143,160947,1936],{"class":280},[143,160949,101024],{"class":149},[143,160951,1496],{"class":755},[143,160953,4310],{"class":149},[143,160955,366],{"class":280},[143,160957,1292],{"class":163},[143,160959,13335],{"class":149},[143,160961,46699],{"class":6116},[143,160963,160],{"class":755},[143,160965,1292],{"class":163},[143,160967,2138],{"class":280},[143,160969,1292],{"class":163},[143,160971,1055],{"class":149},[143,160973,160974,160976],{"class":145,"line":293},[143,160975,32197],{"class":280},[143,160977,2876],{"class":149},[63,160979,160980],{},"关键点：",[19,160982,160983,160989,160995,161001],{},[22,160984,160985,160986,160988],{},"外层 ",[140,160987,1482],{}," 控制行。",[22,160990,160991,160992,160994],{},"内层 ",[140,160993,1508],{}," 控制列。",[22,160996,160997,160998,161000],{},"每行结束后用 ",[140,160999,147196],{}," 换行。",[22,161002,161003,161006],{},[140,161004,161005],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161008,161010],{"id":161009},"_411-循环else","4.11 循环else",[63,161012,161013,161014,161016,161017,161019,161020,161022],{},"Python 的循环可以带 ",[140,161015,2602],{},"。当循环正常结束时执行 ",[140,161018,2602],{},"，如果被 ",[140,161021,2953],{}," 打断，则不执行。",[133,161024,161026],{"className":31276,"code":161025,"language":31278,"meta":138,"style":138},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[140,161027,161028,161048,161060,161071,161075,161081],{"__ignoreMap":138},[143,161029,161030,161032,161034,161036,161038,161040,161042,161044,161046],{"class":145,"line":146},[143,161031,3925],{"class":755},[143,161033,10338],{"class":149},[143,161035,26941],{"class":755},[143,161037,33341],{"class":280},[143,161039,1049],{"class":149},[143,161041,771],{"class":280},[143,161043,13335],{"class":149},[143,161045,1385],{"class":280},[143,161047,31684],{"class":149},[143,161049,161050,161052,161054,161056,161058],{"class":145,"line":35},[143,161051,4001],{"class":755},[143,161053,10338],{"class":149},[143,161055,3849],{"class":755},[143,161057,2938],{"class":280},[143,161059,4639],{"class":149},[143,161061,161062,161064,161066,161069],{"class":145,"line":46},[143,161063,33349],{"class":280},[143,161065,1049],{"class":149},[143,161067,161068],{"class":163},"\"找到了\"",[143,161070,1055],{"class":149},[143,161072,161073],{"class":145,"line":293},[143,161074,32525],{"class":755},[143,161076,161077,161079],{"class":145,"line":306},[143,161078,2602],{"class":755},[143,161080,4639],{"class":149},[143,161082,161083,161085,161087,161090],{"class":145,"line":319},[143,161084,32197],{"class":280},[143,161086,1049],{"class":149},[143,161088,161089],{"class":163},"\"没找到\"",[143,161091,1055],{"class":149},[63,161093,161094],{},"常用于搜索。",[133,161096,161098],{"className":31276,"code":161097,"language":31278,"meta":138,"style":138},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[140,161099,161100,161121,161130,161134,161146,161157,161167,161171,161177],{"__ignoreMap":138},[143,161101,161102,161105,161107,161109,161111,161113,161115,161117,161119],{"class":145,"line":146},[143,161103,161104],{"class":149},"names ",[143,161106,160],{"class":755},[143,161108,53113],{"class":149},[143,161110,150612],{"class":163},[143,161112,13335],{"class":149},[143,161114,151660],{"class":163},[143,161116,13335],{"class":149},[143,161118,160455],{"class":163},[143,161120,34144],{"class":149},[143,161122,161123,161125,161127],{"class":145,"line":35},[143,161124,112453],{"class":149},[143,161126,160],{"class":755},[143,161128,161129],{"class":163}," \"小李\"\n",[143,161131,161132],{"class":145,"line":46},[143,161133,3300],{"emptyLinePlaceholder":976},[143,161135,161136,161138,161141,161143],{"class":145,"line":293},[143,161137,3925],{"class":755},[143,161139,161140],{"class":149}," name ",[143,161142,26941],{"class":755},[143,161144,161145],{"class":149}," names:\n",[143,161147,161148,161150,161152,161154],{"class":145,"line":306},[143,161149,4001],{"class":755},[143,161151,161140],{"class":149},[143,161153,3849],{"class":755},[143,161155,161156],{"class":149}," target:\n",[143,161158,161159,161161,161163,161165],{"class":145,"line":319},[143,161160,33349],{"class":280},[143,161162,1049],{"class":149},[143,161164,161068],{"class":163},[143,161166,1055],{"class":149},[143,161168,161169],{"class":145,"line":332},[143,161170,32525],{"class":755},[143,161172,161173,161175],{"class":145,"line":345},[143,161174,2602],{"class":755},[143,161176,4639],{"class":149},[143,161178,161179,161181,161183,161185],{"class":145,"line":701},[143,161180,32197],{"class":280},[143,161182,1049],{"class":149},[143,161184,161089],{"class":163},[143,161186,1055],{"class":149},[14,161188,161190],{"id":161189},"_412-小案例登录重试","4.12 小案例：登录重试",[63,161192,124167],{},[19,161194,161195,161198,161201],{},[22,161196,161197],{},"用户最多输入 3 次密码。",[22,161199,161200],{},"密码正确则登录成功。",[22,161202,161203],{},"3 次都错误则锁定账号。",[63,161205,10935],{},[133,161207,161209],{"className":31276,"code":161208,"language":31278,"meta":138,"style":138},"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",[140,161210,161211,161221,161225,161241,161257,161261,161273,161284,161288,161294,161319,161325],{"__ignoreMap":138},[143,161212,161213,161216,161218],{"class":145,"line":146},[143,161214,161215],{"class":149},"password ",[143,161217,160],{"class":755},[143,161219,161220],{"class":163}," \"123456\"\n",[143,161222,161223],{"class":145,"line":35},[143,161224,3300],{"emptyLinePlaceholder":976},[143,161226,161227,161229,161231,161233,161235,161237,161239],{"class":145,"line":46},[143,161228,3925],{"class":755},[143,161230,10338],{"class":149},[143,161232,26941],{"class":755},[143,161234,33341],{"class":280},[143,161236,1049],{"class":149},[143,161238,1116],{"class":280},[143,161240,31684],{"class":149},[143,161242,161243,161246,161248,161250,161252,161255],{"class":145,"line":293},[143,161244,161245],{"class":149},"    user_password ",[143,161247,160],{"class":755},[143,161249,61488],{"class":280},[143,161251,1049],{"class":149},[143,161253,161254],{"class":163},"\"请输入密码:\"",[143,161256,1055],{"class":149},[143,161258,161259],{"class":145,"line":306},[143,161260,3300],{"emptyLinePlaceholder":976},[143,161262,161263,161265,161268,161270],{"class":145,"line":319},[143,161264,4001],{"class":755},[143,161266,161267],{"class":149}," user_password ",[143,161269,3849],{"class":755},[143,161271,161272],{"class":149}," password:\n",[143,161274,161275,161277,161279,161282],{"class":145,"line":332},[143,161276,33349],{"class":280},[143,161278,1049],{"class":149},[143,161280,161281],{"class":163},"\"登录成功\"",[143,161283,1055],{"class":149},[143,161285,161286],{"class":145,"line":345},[143,161287,32525],{"class":755},[143,161289,161290,161292],{"class":145,"line":701},[143,161291,158746],{"class":755},[143,161293,4639],{"class":149},[143,161295,161296,161298,161300,161302,161305,161308,161310,161312,161314,161317],{"class":145,"line":707},[143,161297,33349],{"class":280},[143,161299,1049],{"class":149},[143,161301,1098],{"class":755},[143,161303,161304],{"class":163},"\"密码错误，还剩",[143,161306,161307],{"class":280},"{2",[143,161309,53158],{"class":755},[143,161311,3932],{"class":149},[143,161313,366],{"class":280},[143,161315,161316],{"class":163},"次机会\"",[143,161318,1055],{"class":149},[143,161320,161321,161323],{"class":145,"line":727},[143,161322,2602],{"class":755},[143,161324,4639],{"class":149},[143,161326,161327,161329,161331,161334],{"class":145,"line":2518},[143,161328,32197],{"class":280},[143,161330,1049],{"class":149},[143,161332,161333],{"class":163},"\"账号已锁定\"",[143,161335,1055],{"class":149},[14,161337,161339],{"id":161338},"_413-小案例菜单程序","4.13 小案例：菜单程序",[133,161341,161343],{"className":31276,"code":161342,"language":31278,"meta":138,"style":138},"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",[140,161344,161345,161353,161364,161375,161386,161397,161408,161412,161427,161431,161443,161454,161466,161477,161489,161500,161512,161522,161526,161532],{"__ignoreMap":138},[143,161346,161347,161349,161351],{"class":145,"line":146},[143,161348,109538],{"class":755},[143,161350,96169],{"class":280},[143,161352,4639],{"class":149},[143,161354,161355,161357,161359,161362],{"class":145,"line":35},[143,161356,32197],{"class":280},[143,161358,1049],{"class":149},[143,161360,161361],{"class":163},"\"====== 菜单 ======\"",[143,161363,1055],{"class":149},[143,161365,161366,161368,161370,161373],{"class":145,"line":46},[143,161367,32197],{"class":280},[143,161369,1049],{"class":149},[143,161371,161372],{"class":163},"\"1. 查询余额\"",[143,161374,1055],{"class":149},[143,161376,161377,161379,161381,161384],{"class":145,"line":293},[143,161378,32197],{"class":280},[143,161380,1049],{"class":149},[143,161382,161383],{"class":163},"\"2. 存款\"",[143,161385,1055],{"class":149},[143,161387,161388,161390,161392,161395],{"class":145,"line":306},[143,161389,32197],{"class":280},[143,161391,1049],{"class":149},[143,161393,161394],{"class":163},"\"3. 取款\"",[143,161396,1055],{"class":149},[143,161398,161399,161401,161403,161406],{"class":145,"line":319},[143,161400,32197],{"class":280},[143,161402,1049],{"class":149},[143,161404,161405],{"class":163},"\"0. 退出\"",[143,161407,1055],{"class":149},[143,161409,161410],{"class":145,"line":332},[143,161411,3300],{"emptyLinePlaceholder":976},[143,161413,161414,161417,161419,161421,161423,161425],{"class":145,"line":345},[143,161415,161416],{"class":149},"    choice ",[143,161418,160],{"class":755},[143,161420,61488],{"class":280},[143,161422,1049],{"class":149},[143,161424,153797],{"class":163},[143,161426,1055],{"class":149},[143,161428,161429],{"class":145,"line":701},[143,161430,3300],{"emptyLinePlaceholder":976},[143,161432,161433,161435,161437,161439,161441],{"class":145,"line":707},[143,161434,4001],{"class":755},[143,161436,153810],{"class":149},[143,161438,3849],{"class":755},[143,161440,153815],{"class":163},[143,161442,4639],{"class":149},[143,161444,161445,161447,161449,161452],{"class":145,"line":727},[143,161446,33349],{"class":280},[143,161448,1049],{"class":149},[143,161450,161451],{"class":163},"\"余额为1000元\"",[143,161453,1055],{"class":149},[143,161455,161456,161458,161460,161462,161464],{"class":145,"line":2518},[143,161457,40191],{"class":755},[143,161459,153810],{"class":149},[143,161461,3849],{"class":755},[143,161463,153834],{"class":163},[143,161465,4639],{"class":149},[143,161467,161468,161470,161472,161475],{"class":145,"line":2524},[143,161469,33349],{"class":280},[143,161471,1049],{"class":149},[143,161473,161474],{"class":163},"\"存款功能\"",[143,161476,1055],{"class":149},[143,161478,161479,161481,161483,161485,161487],{"class":145,"line":2529},[143,161480,40191],{"class":755},[143,161482,153810],{"class":149},[143,161484,3849],{"class":755},[143,161486,153852],{"class":163},[143,161488,4639],{"class":149},[143,161490,161491,161493,161495,161498],{"class":145,"line":2543},[143,161492,33349],{"class":280},[143,161494,1049],{"class":149},[143,161496,161497],{"class":163},"\"取款功能\"",[143,161499,1055],{"class":149},[143,161501,161502,161504,161506,161508,161510],{"class":145,"line":2548},[143,161503,40191],{"class":755},[143,161505,153810],{"class":149},[143,161507,3849],{"class":755},[143,161509,153906],{"class":163},[143,161511,4639],{"class":149},[143,161513,161514,161516,161518,161520],{"class":145,"line":2554},[143,161515,33349],{"class":280},[143,161517,1049],{"class":149},[143,161519,153917],{"class":163},[143,161521,1055],{"class":149},[143,161523,161524],{"class":145,"line":2575},[143,161525,32525],{"class":755},[143,161527,161528,161530],{"class":145,"line":2580},[143,161529,158746],{"class":755},[143,161531,4639],{"class":149},[143,161533,161534,161536,161538,161540],{"class":145,"line":2594},[143,161535,33349],{"class":280},[143,161537,1049],{"class":149},[143,161539,153938],{"class":163},[143,161541,1055],{"class":149},[63,161543,161544,161545,161547,161548,29283],{},"菜单类程序通常使用 ",[140,161546,160246],{},"，用户选择退出时 ",[140,161549,2953],{},[14,161551,161553],{"id":161552},"_414-易错点","4.14 易错点",[19,161555,161556,161561,161567,161575,161581],{},[22,161557,161558,161560],{},[140,161559,109538],{}," 循环必须更新控制变量。",[22,161562,161563,161566],{},[140,161564,161565],{},"range(1, 10)"," 不包含 10。",[22,161568,161569,161571,161572,161574],{},[140,161570,2953],{}," 结束整个循环，",[140,161573,155396],{}," 只跳过本轮。",[22,161576,161577,161578,161580],{},"嵌套循环中，",[140,161579,2953],{}," 只跳出当前所在的一层循环。",[22,161582,161583],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161585,161587],{"id":161586},"_415-本章练习","4.15 本章练习",[19,161589,161590,161593,161596,161599,161602],{},[22,161591,161592],{},"输出 1 到 100。",[22,161594,161595],{},"计算 1 到 100 的偶数和。",[22,161597,161598],{},"输出 100 以内能被 3 和 5 同时整除的数。",[22,161600,161601],{},"编写猜数字游戏，限制最多猜 7 次。",[22,161603,161604],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[954,161606,161607],{},"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":138,"searchDepth":35,"depth":35,"links":161609},[161610,161611,161612,161613,161614,161618,161619,161620,161621,161622,161623,161624,161625,161626,161627],{"id":159866,"depth":35,"text":159867},{"id":159896,"depth":35,"text":159897},{"id":159985,"depth":35,"text":159986},{"id":160079,"depth":35,"text":160080},{"id":160253,"depth":35,"text":160254,"children":161615},[161616,161617],{"id":160257,"depth":46,"text":160258},{"id":160321,"depth":46,"text":160322},{"id":160385,"depth":35,"text":160386},{"id":160480,"depth":35,"text":160481},{"id":160589,"depth":35,"text":160590},{"id":160785,"depth":35,"text":160786},{"id":160870,"depth":35,"text":160871},{"id":161009,"depth":35,"text":161010},{"id":161189,"depth":35,"text":161190},{"id":161338,"depth":35,"text":161339},{"id":161552,"depth":35,"text":161553},{"id":161586,"depth":35,"text":161587},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159858,"description":973},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161634,"title":161635,"body":161636,"description":973,"extension":974,"meta":163641,"navigation":976,"path":163642,"seo":163643,"stem":163644,"__hash__":163645},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161637,"toc":163621},[161638,161641,161645,161648,161651,161665,161668,161682,161686,161688,161707,161709,161756,161758,161772,161776,161850,161853,161857,161860,161919,161927,161930,161983,161986,161990,161995,162050,162058,162108,162112,162117,162125,162224,162230,162234,162239,162242,162253,162294,162307,162311,162314,162350,162353,162366,162369,162429,162433,162437,162440,162491,162495,162498,162545,162551,162617,162620,162624,162627,162743,162746,162750,162753,162859,162863,162866,162904,162907,162949,162952,163012,163015,163019,163483,163486,163490,163517,163523,163584,163588,163618],[10,161639,161635],{"id":161640},"_5-函数基础",[14,161642,161644],{"id":161643},"_51-为什么需要函数","5.1 为什么需要函数",[63,161646,161647],{},"函数用于封装一段可以重复使用的代码。",[63,161649,161650],{},"不使用函数的问题：",[19,161652,161653,161656,161659,161662],{},[22,161654,161655],{},"重复代码多。",[22,161657,161658],{},"修改逻辑时容易漏改。",[22,161660,161661],{},"主流程不清晰。",[22,161663,161664],{},"程序越写越长，难以维护。",[63,161666,161667],{},"使用函数后的好处：",[19,161669,161670,161673,161676,161679],{},[22,161671,161672],{},"提高复用性。",[22,161674,161675],{},"提高可读性。",[22,161677,161678],{},"便于调试。",[22,161680,161681],{},"便于分工。",[14,161683,161685],{"id":161684},"_52-函数定义","5.2 函数定义",[63,161687,6081],{},[133,161689,161691],{"className":31276,"code":161690,"language":31278,"meta":138,"style":138},"def 函数名():\n    函数体\n",[140,161692,161693,161702],{"__ignoreMap":138},[143,161694,161695,161697,161700],{"class":145,"line":146},[143,161696,32845],{"class":755},[143,161698,161699],{"class":156}," 函数名",[143,161701,32851],{"class":149},[143,161703,161704],{"class":145,"line":35},[143,161705,161706],{"class":149},"    函数体\n",[63,161708,16034],{},[133,161710,161712],{"className":31276,"code":161711,"language":31278,"meta":138,"style":138},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[140,161713,161714,161723,161733,161743,161747,161751],{"__ignoreMap":138},[143,161715,161716,161718,161721],{"class":145,"line":146},[143,161717,32845],{"class":755},[143,161719,161720],{"class":156}," say_hello",[143,161722,32851],{"class":149},[143,161724,161725,161727,161729,161731],{"class":145,"line":35},[143,161726,32197],{"class":280},[143,161728,1049],{"class":149},[143,161730,6744],{"class":163},[143,161732,1055],{"class":149},[143,161734,161735,161737,161739,161741],{"class":145,"line":46},[143,161736,32197],{"class":280},[143,161738,1049],{"class":149},[143,161740,147363],{"class":163},[143,161742,1055],{"class":149},[143,161744,161745],{"class":145,"line":293},[143,161746,3300],{"emptyLinePlaceholder":976},[143,161748,161749],{"class":145,"line":306},[143,161750,3300],{"emptyLinePlaceholder":976},[143,161752,161753],{"class":145,"line":319},[143,161754,161755],{"class":149},"say_hello()\n",[63,161757,9925],{},[19,161759,161760,161763,161766,161769],{},[22,161761,161762],{},"函数必须先定义，再调用。",[22,161764,161765],{},"函数名遵循变量命名规则。",[22,161767,161768],{},"函数体需要缩进。",[22,161770,161771],{},"函数不调用就不会执行。",[14,161773,161775],{"id":161774},"_53-函数调用","5.3 函数调用",[133,161777,161779],{"className":31276,"code":161778,"language":31278,"meta":138,"style":138},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[140,161780,161781,161790,161801,161812,161823,161833,161837,161841,161846],{"__ignoreMap":138},[143,161782,161783,161785,161788],{"class":145,"line":146},[143,161784,32845],{"class":755},[143,161786,161787],{"class":156}," print_menu",[143,161789,32851],{"class":149},[143,161791,161792,161794,161796,161799],{"class":145,"line":35},[143,161793,32197],{"class":280},[143,161795,1049],{"class":149},[143,161797,161798],{"class":163},"\"1. 查询\"",[143,161800,1055],{"class":149},[143,161802,161803,161805,161807,161810],{"class":145,"line":46},[143,161804,32197],{"class":280},[143,161806,1049],{"class":149},[143,161808,161809],{"class":163},"\"2. 添加\"",[143,161811,1055],{"class":149},[143,161813,161814,161816,161818,161821],{"class":145,"line":293},[143,161815,32197],{"class":280},[143,161817,1049],{"class":149},[143,161819,161820],{"class":163},"\"3. 删除\"",[143,161822,1055],{"class":149},[143,161824,161825,161827,161829,161831],{"class":145,"line":306},[143,161826,32197],{"class":280},[143,161828,1049],{"class":149},[143,161830,161405],{"class":163},[143,161832,1055],{"class":149},[143,161834,161835],{"class":145,"line":319},[143,161836,3300],{"emptyLinePlaceholder":976},[143,161838,161839],{"class":145,"line":332},[143,161840,3300],{"emptyLinePlaceholder":976},[143,161842,161843],{"class":145,"line":345},[143,161844,161845],{"class":149},"print_menu()\n",[143,161847,161848],{"class":145,"line":701},[143,161849,161845],{"class":149},[63,161851,161852],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161854,161856],{"id":161855},"_54-参数","5.4 参数",[63,161858,161859],{},"参数用于向函数传递数据。",[133,161861,161863],{"className":31276,"code":161862,"language":31278,"meta":138,"style":138},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[140,161864,161865,161874,161894,161898,161902,161911],{"__ignoreMap":138},[143,161866,161867,161869,161871],{"class":145,"line":146},[143,161868,32845],{"class":755},[143,161870,161720],{"class":156},[143,161872,161873],{"class":149},"(name):\n",[143,161875,161876,161878,161880,161882,161884,161886,161888,161890,161892],{"class":145,"line":35},[143,161877,32197],{"class":280},[143,161879,1049],{"class":149},[143,161881,1098],{"class":755},[143,161883,157778],{"class":163},[143,161885,1936],{"class":280},[143,161887,80688],{"class":149},[143,161889,366],{"class":280},[143,161891,1292],{"class":163},[143,161893,1055],{"class":149},[143,161895,161896],{"class":145,"line":46},[143,161897,3300],{"emptyLinePlaceholder":976},[143,161899,161900],{"class":145,"line":293},[143,161901,3300],{"emptyLinePlaceholder":976},[143,161903,161904,161907,161909],{"class":145,"line":306},[143,161905,161906],{"class":149},"say_hello(",[143,161908,150612],{"class":163},[143,161910,1055],{"class":149},[143,161912,161913,161915,161917],{"class":145,"line":319},[143,161914,161906],{"class":149},[143,161916,151660],{"class":163},[143,161918,1055],{"class":149},[63,161920,161921,161923,161924,161926],{},[140,161922,80688],{}," 是形参，",[140,161925,150612],{}," 是实参。",[63,161928,161929],{},"多个参数：",[133,161931,161933],{"className":31276,"code":161932,"language":31278,"meta":138,"style":138},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[140,161934,161935,161943,161956,161962,161966,161970],{"__ignoreMap":138},[143,161936,161937,161939,161941],{"class":145,"line":146},[143,161938,32845],{"class":755},[143,161940,6109],{"class":156},[143,161942,151817],{"class":149},[143,161944,161945,161948,161950,161952,161954],{"class":145,"line":35},[143,161946,161947],{"class":149},"    result ",[143,161949,160],{"class":755},[143,161951,11769],{"class":149},[143,161953,1522],{"class":755},[143,161955,151828],{"class":149},[143,161957,161958,161960],{"class":145,"line":46},[143,161959,32197],{"class":280},[143,161961,77464],{"class":149},[143,161963,161964],{"class":145,"line":293},[143,161965,3300],{"emptyLinePlaceholder":976},[143,161967,161968],{"class":145,"line":306},[143,161969,3300],{"emptyLinePlaceholder":976},[143,161971,161972,161975,161977,161979,161981],{"class":145,"line":319},[143,161973,161974],{"class":149},"add(",[143,161976,1487],{"class":280},[143,161978,13335],{"class":149},[143,161980,1741],{"class":280},[143,161982,1055],{"class":149},[63,161984,161985],{},"调用时参数数量必须匹配。",[14,161987,161989],{"id":161988},"_55-返回值","5.5 返回值",[63,161991,161992,161994],{},[140,161993,17944],{}," 用于把函数内部的结果返回给调用者。",[133,161996,161998],{"className":31276,"code":161997,"language":31278,"meta":138,"style":138},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[140,161999,162000,162008,162018,162022,162026,162044],{"__ignoreMap":138},[143,162001,162002,162004,162006],{"class":145,"line":146},[143,162003,32845],{"class":755},[143,162005,6109],{"class":156},[143,162007,151817],{"class":149},[143,162009,162010,162012,162014,162016],{"class":145,"line":35},[143,162011,4990],{"class":755},[143,162013,11769],{"class":149},[143,162015,1522],{"class":755},[143,162017,151828],{"class":149},[143,162019,162020],{"class":145,"line":46},[143,162021,3300],{"emptyLinePlaceholder":976},[143,162023,162024],{"class":145,"line":293},[143,162025,3300],{"emptyLinePlaceholder":976},[143,162027,162028,162031,162033,162036,162038,162040,162042],{"class":145,"line":306},[143,162029,162030],{"class":149},"result ",[143,162032,160],{"class":755},[143,162034,162035],{"class":149}," add(",[143,162037,1487],{"class":280},[143,162039,13335],{"class":149},[143,162041,1741],{"class":280},[143,162043,1055],{"class":149},[143,162045,162046,162048],{"class":145,"line":319},[143,162047,31313],{"class":280},[143,162049,77464],{"class":149},[63,162051,162052,162053,162055,162056,29283],{},"如果函数没有写 ",[140,162054,17944],{},"，默认返回 ",[140,162057,96562],{},[133,162059,162061],{"className":31276,"code":162060,"language":31278,"meta":138,"style":138},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[140,162062,162063,162071,162081,162085,162089,162098],{"__ignoreMap":138},[143,162064,162065,162067,162069],{"class":145,"line":146},[143,162066,32845],{"class":755},[143,162068,161720],{"class":156},[143,162070,32851],{"class":149},[143,162072,162073,162075,162077,162079],{"class":145,"line":35},[143,162074,32197],{"class":280},[143,162076,1049],{"class":149},[143,162078,6744],{"class":163},[143,162080,1055],{"class":149},[143,162082,162083],{"class":145,"line":46},[143,162084,3300],{"emptyLinePlaceholder":976},[143,162086,162087],{"class":145,"line":293},[143,162088,3300],{"emptyLinePlaceholder":976},[143,162090,162091,162093,162095],{"class":145,"line":306},[143,162092,162030],{"class":149},[143,162094,160],{"class":755},[143,162096,162097],{"class":149}," say_hello()\n",[143,162099,162100,162102,162105],{"class":145,"line":319},[143,162101,31313],{"class":280},[143,162103,162104],{"class":149},"(result)  ",[143,162106,162107],{"class":266},"# None\n",[14,162109,162111],{"id":162110},"_56-return的作用","5.6 return的作用",[63,162113,162114,162116],{},[140,162115,17944],{}," 有两个作用：",[19,162118,162119,162122],{},[22,162120,162121],{},"返回结果。",[22,162123,162124],{},"结束函数。",[133,162126,162128],{"className":31276,"code":162127,"language":31278,"meta":138,"style":138},"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",[140,162129,162130,162140,162152,162159,162163,162175,162182,162186,162193,162197,162201,162212],{"__ignoreMap":138},[143,162131,162132,162134,162137],{"class":145,"line":146},[143,162133,32845],{"class":755},[143,162135,162136],{"class":156}," check_age",[143,162138,162139],{"class":149},"(age):\n",[143,162141,162142,162144,162146,162148,162150],{"class":145,"line":35},[143,162143,4001],{"class":755},[143,162145,16605],{"class":149},[143,162147,150],{"class":755},[143,162149,4993],{"class":280},[143,162151,4639],{"class":149},[143,162153,162154,162156],{"class":145,"line":46},[143,162155,15651],{"class":755},[143,162157,162158],{"class":163}," \"年龄不合法\"\n",[143,162160,162161],{"class":145,"line":293},[143,162162,3300],{"emptyLinePlaceholder":976},[143,162164,162165,162167,162169,162171,162173],{"class":145,"line":306},[143,162166,4001],{"class":755},[143,162168,16605],{"class":149},[143,162170,2611],{"class":755},[143,162172,157009],{"class":280},[143,162174,4639],{"class":149},[143,162176,162177,162179],{"class":145,"line":319},[143,162178,15651],{"class":755},[143,162180,162181],{"class":163}," \"成年人\"\n",[143,162183,162184],{"class":145,"line":332},[143,162185,3300],{"emptyLinePlaceholder":976},[143,162187,162188,162190],{"class":145,"line":345},[143,162189,4990],{"class":755},[143,162191,162192],{"class":163}," \"未成年人\"\n",[143,162194,162195],{"class":145,"line":701},[143,162196,3300],{"emptyLinePlaceholder":976},[143,162198,162199],{"class":145,"line":707},[143,162200,3300],{"emptyLinePlaceholder":976},[143,162202,162203,162205,162208,162210],{"class":145,"line":727},[143,162204,31313],{"class":280},[143,162206,162207],{"class":149},"(check_age(",[143,162209,1741],{"class":280},[143,162211,31395],{"class":149},[143,162213,162214,162216,162218,162220,162222],{"class":145,"line":2518},[143,162215,31313],{"class":280},[143,162217,162207],{"class":149},[143,162219,1573],{"class":755},[143,162221,771],{"class":280},[143,162223,31395],{"class":149},[63,162225,162226,162227,162229],{},"函数执行到 ",[140,162228,17944],{}," 后，后面的代码不会继续执行。",[14,162231,162233],{"id":162232},"_57-none","5.7 None",[63,162235,162236,162238],{},[140,162237,96562],{}," 表示空值或没有结果。",[63,162240,162241],{},"常见使用场景：",[19,162243,162244,162247,162250],{},[22,162245,162246],{},"函数没有返回值。",[22,162248,162249],{},"变量暂时没有具体值。",[22,162251,162252],{},"表示查询不到结果。",[133,162254,162256],{"className":31276,"code":162255,"language":31278,"meta":138,"style":138},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[140,162257,162258,162266,162270,162283],{"__ignoreMap":138},[143,162259,162260,162262,162264],{"class":145,"line":146},[143,162261,162030],{"class":149},[143,162263,160],{"class":755},[143,162265,152896],{"class":280},[143,162267,162268],{"class":145,"line":35},[143,162269,3300],{"emptyLinePlaceholder":976},[143,162271,162272,162274,162277,162279,162281],{"class":145,"line":46},[143,162273,2434],{"class":755},[143,162275,162276],{"class":149}," result ",[143,162278,39825],{"class":755},[143,162280,39831],{"class":280},[143,162282,4639],{"class":149},[143,162284,162285,162287,162289,162292],{"class":145,"line":293},[143,162286,32197],{"class":280},[143,162288,1049],{"class":149},[143,162290,162291],{"class":163},"\"没有数据\"",[143,162293,1055],{"class":149},[63,162295,162296,162297,162299,162300,162303,162304,29283],{},"判断 ",[140,162298,96562],{}," 推荐使用 ",[140,162301,162302],{},"is None","，不要写成 ",[140,162305,162306],{},"== None",[14,162308,162310],{"id":162309},"_58-函数文档字符串","5.8 函数文档字符串",[63,162312,162313],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[133,162315,162317],{"className":31276,"code":162316,"language":31278,"meta":138,"style":138},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[140,162318,162319,162329,162334],{"__ignoreMap":138},[143,162320,162321,162323,162326],{"class":145,"line":146},[143,162322,32845],{"class":755},[143,162324,162325],{"class":156}," calculate_bmi",[143,162327,162328],{"class":149},"(weight, height):\n",[143,162330,162331],{"class":145,"line":35},[143,162332,162333],{"class":163},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[143,162335,162336,162338,162341,162343,162346,162348],{"class":145,"line":46},[143,162337,4990],{"class":755},[143,162339,162340],{"class":149}," weight ",[143,162342,1625],{"class":755},[143,162344,162345],{"class":149}," height ",[143,162347,11561],{"class":755},[143,162349,48621],{"class":280},[63,162351,162352],{},"查看说明：",[133,162354,162356],{"className":31276,"code":162355,"language":31278,"meta":138,"style":138},"help(calculate_bmi)\n",[140,162357,162358],{"__ignoreMap":138},[143,162359,162360,162363],{"class":145,"line":146},[143,162361,162362],{"class":280},"help",[143,162364,162365],{"class":149},"(calculate_bmi)\n",[63,162367,162368],{},"较完整的写法：",[133,162370,162372],{"className":31276,"code":162371,"language":31278,"meta":138,"style":138},"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",[140,162373,162374,162382,162387,162392,162396,162401,162406,162411,162415],{"__ignoreMap":138},[143,162375,162376,162378,162380],{"class":145,"line":146},[143,162377,32845],{"class":755},[143,162379,162325],{"class":156},[143,162381,162328],{"class":149},[143,162383,162384],{"class":145,"line":35},[143,162385,162386],{"class":163},"    \"\"\"\n",[143,162388,162389],{"class":145,"line":46},[143,162390,162391],{"class":163},"    计算BMI。\n",[143,162393,162394],{"class":145,"line":293},[143,162395,3300],{"emptyLinePlaceholder":976},[143,162397,162398],{"class":145,"line":306},[143,162399,162400],{"class":163},"    :param weight: 体重，单位kg\n",[143,162402,162403],{"class":145,"line":319},[143,162404,162405],{"class":163},"    :param height: 身高，单位m\n",[143,162407,162408],{"class":145,"line":332},[143,162409,162410],{"class":163},"    :return: BMI数值\n",[143,162412,162413],{"class":145,"line":345},[143,162414,162386],{"class":163},[143,162416,162417,162419,162421,162423,162425,162427],{"class":145,"line":701},[143,162418,4990],{"class":755},[143,162420,162340],{"class":149},[143,162422,1625],{"class":755},[143,162424,162345],{"class":149},[143,162426,11561],{"class":755},[143,162428,48621],{"class":280},[14,162430,162432],{"id":162431},"_59-变量作用域","5.9 变量作用域",[58,162434,162436],{"id":162435},"_591-局部变量","5.9.1 局部变量",[63,162438,162439],{},"在函数内部定义的变量，只能在函数内部使用。",[133,162441,162443],{"className":31276,"code":162442,"language":31278,"meta":138,"style":138},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[140,162444,162445,162454,162462,162468,162472,162476,162481],{"__ignoreMap":138},[143,162446,162447,162449,162452],{"class":145,"line":146},[143,162448,32845],{"class":755},[143,162450,162451],{"class":156}," test",[143,162453,32851],{"class":149},[143,162455,162456,162458,162460],{"class":145,"line":35},[143,162457,46491],{"class":149},[143,162459,160],{"class":755},[143,162461,59311],{"class":280},[143,162463,162464,162466],{"class":145,"line":46},[143,162465,32197],{"class":280},[143,162467,1062],{"class":149},[143,162469,162470],{"class":145,"line":293},[143,162471,3300],{"emptyLinePlaceholder":976},[143,162473,162474],{"class":145,"line":306},[143,162475,3300],{"emptyLinePlaceholder":976},[143,162477,162478],{"class":145,"line":319},[143,162479,162480],{"class":149},"test()\n",[143,162482,162483,162485,162488],{"class":145,"line":332},[143,162484,31313],{"class":280},[143,162486,162487],{"class":149},"(num)  ",[143,162489,162490],{"class":266},"# 报错\n",[58,162492,162494],{"id":162493},"_592-全局变量","5.9.2 全局变量",[63,162496,162497],{},"在函数外部定义的变量，可以在函数内部读取。",[133,162499,162501],{"className":31276,"code":162500,"language":31278,"meta":138,"style":138},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[140,162502,162503,162511,162515,162519,162527,162533,162537,162541],{"__ignoreMap":138},[143,162504,162505,162507,162509],{"class":145,"line":146},[143,162506,147260],{"class":149},[143,162508,160],{"class":755},[143,162510,150077],{"class":163},[143,162512,162513],{"class":145,"line":35},[143,162514,3300],{"emptyLinePlaceholder":976},[143,162516,162517],{"class":145,"line":46},[143,162518,3300],{"emptyLinePlaceholder":976},[143,162520,162521,162523,162525],{"class":145,"line":293},[143,162522,32845],{"class":755},[143,162524,161720],{"class":156},[143,162526,32851],{"class":149},[143,162528,162529,162531],{"class":145,"line":306},[143,162530,32197],{"class":280},[143,162532,151384],{"class":149},[143,162534,162535],{"class":145,"line":319},[143,162536,3300],{"emptyLinePlaceholder":976},[143,162538,162539],{"class":145,"line":332},[143,162540,3300],{"emptyLinePlaceholder":976},[143,162542,162543],{"class":145,"line":345},[143,162544,161755],{"class":149},[63,162546,162547,162548,29283],{},"如果要在函数内部修改全局变量，需要 ",[140,162549,162550],{},"global",[133,162552,162554],{"className":31276,"code":162553,"language":31278,"meta":138,"style":138},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[140,162555,162556,162564,162568,162572,162581,162589,162597,162601,162605,162610],{"__ignoreMap":138},[143,162557,162558,162560,162562],{"class":145,"line":146},[143,162559,147415],{"class":149},[143,162561,160],{"class":755},[143,162563,48231],{"class":280},[143,162565,162566],{"class":145,"line":35},[143,162567,3300],{"emptyLinePlaceholder":976},[143,162569,162570],{"class":145,"line":46},[143,162571,3300],{"emptyLinePlaceholder":976},[143,162573,162574,162576,162579],{"class":145,"line":293},[143,162575,32845],{"class":755},[143,162577,162578],{"class":156}," add_count",[143,162580,32851],{"class":149},[143,162582,162583,162586],{"class":145,"line":306},[143,162584,162585],{"class":755},"    global",[143,162587,162588],{"class":149}," count\n",[143,162590,162591,162593,162595],{"class":145,"line":319},[143,162592,160157],{"class":149},[143,162594,10377],{"class":755},[143,162596,56582],{"class":280},[143,162598,162599],{"class":145,"line":332},[143,162600,3300],{"emptyLinePlaceholder":976},[143,162602,162603],{"class":145,"line":345},[143,162604,3300],{"emptyLinePlaceholder":976},[143,162606,162607],{"class":145,"line":701},[143,162608,162609],{"class":149},"add_count()\n",[143,162611,162612,162614],{"class":145,"line":707},[143,162613,31313],{"class":280},[143,162615,162616],{"class":149},"(count)\n",[63,162618,162619],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162621,162623],{"id":162622},"_510-函数嵌套调用","5.10 函数嵌套调用",[63,162625,162626],{},"一个函数中可以调用另一个函数。",[133,162628,162630],{"className":31276,"code":162629,"language":31278,"meta":138,"style":138},"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",[140,162631,162632,162641,162655,162659,162663,162672,162677,162697,162718,162722,162726,162730],{"__ignoreMap":138},[143,162633,162634,162636,162639],{"class":145,"line":146},[143,162635,32845],{"class":755},[143,162637,162638],{"class":156}," print_line",[143,162640,32851],{"class":149},[143,162642,162643,162645,162647,162649,162651,162653],{"class":145,"line":35},[143,162644,32197],{"class":280},[143,162646,1049],{"class":149},[143,162648,33381],{"class":163},[143,162650,7418],{"class":755},[143,162652,79543],{"class":280},[143,162654,1055],{"class":149},[143,162656,162657],{"class":145,"line":46},[143,162658,3300],{"emptyLinePlaceholder":976},[143,162660,162661],{"class":145,"line":293},[143,162662,3300],{"emptyLinePlaceholder":976},[143,162664,162665,162667,162670],{"class":145,"line":306},[143,162666,32845],{"class":755},[143,162668,162669],{"class":156}," print_info",[143,162671,150099],{"class":149},[143,162673,162674],{"class":145,"line":319},[143,162675,162676],{"class":149},"    print_line()\n",[143,162678,162679,162681,162683,162685,162687,162689,162691,162693,162695],{"class":145,"line":332},[143,162680,32197],{"class":280},[143,162682,1049],{"class":149},[143,162684,1098],{"class":755},[143,162686,157406],{"class":163},[143,162688,1936],{"class":280},[143,162690,80688],{"class":149},[143,162692,366],{"class":280},[143,162694,1292],{"class":163},[143,162696,1055],{"class":149},[143,162698,162699,162701,162703,162705,162708,162710,162712,162714,162716],{"class":145,"line":345},[143,162700,32197],{"class":280},[143,162702,1049],{"class":149},[143,162704,1098],{"class":755},[143,162706,162707],{"class":163},"\"年龄:",[143,162709,1936],{"class":280},[143,162711,71102],{"class":149},[143,162713,366],{"class":280},[143,162715,1292],{"class":163},[143,162717,1055],{"class":149},[143,162719,162720],{"class":145,"line":701},[143,162721,162676],{"class":149},[143,162723,162724],{"class":145,"line":707},[143,162725,3300],{"emptyLinePlaceholder":976},[143,162727,162728],{"class":145,"line":727},[143,162729,3300],{"emptyLinePlaceholder":976},[143,162731,162732,162735,162737,162739,162741],{"class":145,"line":2518},[143,162733,162734],{"class":149},"print_info(",[143,162736,150612],{"class":163},[143,162738,13335],{"class":149},[143,162740,1691],{"class":280},[143,162742,1055],{"class":149},[63,162744,162745],{},"这种方式可以把小功能组合成大功能。",[14,162747,162749],{"id":162748},"_511-参数检查","5.11 参数检查",[63,162751,162752],{},"函数内部可以检查参数是否合法。",[133,162754,162756],{"className":31276,"code":162755,"language":31278,"meta":138,"style":138},"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",[140,162757,162758,162767,162779,162785,162795,162799,162803,162820,162824,162836,162847,162853],{"__ignoreMap":138},[143,162759,162760,162762,162765],{"class":145,"line":146},[143,162761,32845],{"class":755},[143,162763,162764],{"class":156}," divide",[143,162766,151817],{"class":149},[143,162768,162769,162771,162773,162775,162777],{"class":145,"line":35},[143,162770,4001],{"class":755},[143,162772,11782],{"class":149},[143,162774,3849],{"class":755},[143,162776,4993],{"class":280},[143,162778,4639],{"class":149},[143,162780,162781,162783],{"class":145,"line":46},[143,162782,15651],{"class":755},[143,162784,152896],{"class":280},[143,162786,162787,162789,162791,162793],{"class":145,"line":293},[143,162788,4990],{"class":755},[143,162790,11769],{"class":149},[143,162792,1625],{"class":755},[143,162794,151828],{"class":149},[143,162796,162797],{"class":145,"line":306},[143,162798,3300],{"emptyLinePlaceholder":976},[143,162800,162801],{"class":145,"line":319},[143,162802,3300],{"emptyLinePlaceholder":976},[143,162804,162805,162807,162809,162812,162814,162816,162818],{"class":145,"line":332},[143,162806,162030],{"class":149},[143,162808,160],{"class":755},[143,162810,162811],{"class":149}," divide(",[143,162813,1487],{"class":280},[143,162815,13335],{"class":149},[143,162817,1234],{"class":280},[143,162819,1055],{"class":149},[143,162821,162822],{"class":145,"line":345},[143,162823,3300],{"emptyLinePlaceholder":976},[143,162825,162826,162828,162830,162832,162834],{"class":145,"line":701},[143,162827,2434],{"class":755},[143,162829,162276],{"class":149},[143,162831,39825],{"class":755},[143,162833,39831],{"class":280},[143,162835,4639],{"class":149},[143,162837,162838,162840,162842,162845],{"class":145,"line":707},[143,162839,32197],{"class":280},[143,162841,1049],{"class":149},[143,162843,162844],{"class":163},"\"除数不能为0\"",[143,162846,1055],{"class":149},[143,162848,162849,162851],{"class":145,"line":727},[143,162850,2602],{"class":755},[143,162852,4639],{"class":149},[143,162854,162855,162857],{"class":145,"line":2518},[143,162856,32197],{"class":280},[143,162858,77464],{"class":149},[14,162860,162862],{"id":162861},"_512-类型提示","5.12 类型提示",[63,162864,162865],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[133,162867,162869],{"className":31276,"code":162868,"language":31278,"meta":138,"style":138},"def add(a: int, b: int) -> int:\n    return a + b\n",[140,162870,162871,162894],{"__ignoreMap":138},[143,162872,162873,162875,162877,162880,162882,162885,162887,162890,162892],{"class":145,"line":146},[143,162874,32845],{"class":755},[143,162876,6109],{"class":156},[143,162878,162879],{"class":149},"(a: ",[143,162881,1052],{"class":280},[143,162883,162884],{"class":149},", b: ",[143,162886,1052],{"class":280},[143,162888,162889],{"class":149},") -> ",[143,162891,1052],{"class":280},[143,162893,4639],{"class":149},[143,162895,162896,162898,162900,162902],{"class":145,"line":35},[143,162897,4990],{"class":755},[143,162899,11769],{"class":149},[143,162901,1522],{"class":755},[143,162903,151828],{"class":149},[63,162905,162906],{},"字符串参数：",[133,162908,162910],{"className":31276,"code":162909,"language":31278,"meta":138,"style":138},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[140,162911,162912,162929],{"__ignoreMap":138},[143,162913,162914,162916,162918,162921,162923,162925,162927],{"class":145,"line":146},[143,162915,32845],{"class":755},[143,162917,161720],{"class":156},[143,162919,162920],{"class":149},"(name: ",[143,162922,2206],{"class":280},[143,162924,162889],{"class":149},[143,162926,96562],{"class":280},[143,162928,4639],{"class":149},[143,162930,162931,162933,162935,162937,162939,162941,162943,162945,162947],{"class":145,"line":35},[143,162932,32197],{"class":280},[143,162934,1049],{"class":149},[143,162936,1098],{"class":755},[143,162938,157778],{"class":163},[143,162940,1936],{"class":280},[143,162942,80688],{"class":149},[143,162944,366],{"class":280},[143,162946,1292],{"class":163},[143,162948,1055],{"class":149},[63,162950,162951],{},"列表参数：",[133,162953,162955],{"className":31276,"code":162954,"language":31278,"meta":138,"style":138},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[140,162956,162957,162976,162984,162996,163005],{"__ignoreMap":138},[143,162958,162959,162961,162964,162967,162969,162972,162974],{"class":145,"line":146},[143,162960,32845],{"class":755},[143,162962,162963],{"class":156}," get_total",[143,162965,162966],{"class":149},"(numbers: list[",[143,162968,1052],{"class":280},[143,162970,162971],{"class":149},"]) -> ",[143,162973,1052],{"class":280},[143,162975,4639],{"class":149},[143,162977,162978,162980,162982],{"class":145,"line":35},[143,162979,160031],{"class":149},[143,162981,160],{"class":755},[143,162983,48231],{"class":280},[143,162985,162986,162988,162991,162993],{"class":145,"line":46},[143,162987,4101],{"class":755},[143,162989,162990],{"class":149}," number ",[143,162992,26941],{"class":755},[143,162994,162995],{"class":149}," numbers:\n",[143,162997,162998,163000,163002],{"class":145,"line":293},[143,162999,160706],{"class":149},[143,163001,10377],{"class":755},[143,163003,163004],{"class":149}," number\n",[143,163006,163007,163009],{"class":145,"line":306},[143,163008,4990],{"class":755},[143,163010,163011],{"class":149}," total\n",[63,163013,163014],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163016,163018],{"id":163017},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[133,163020,163022],{"className":31276,"code":163021,"language":31278,"meta":138,"style":138},"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",[140,163023,163024,163034,163038,163042,163050,163061,163071,163081,163091,163101,163105,163109,163118,163140,163144,163148,163157,163163,163183,163195,163206,163210,163219,163230,163235,163239,163243,163252,163258,163277,163289,163299,163303,163314,163324,163328,163336,163347,163351,163355,163359,163367,163372,163386,163390,163402,163407,163419,163424,163436,163441,163453,163463,163467,163473],{"__ignoreMap":138},[143,163025,163026,163029,163031],{"class":145,"line":146},[143,163027,163028],{"class":149},"balance ",[143,163030,160],{"class":755},[143,163032,163033],{"class":280}," 1000\n",[143,163035,163036],{"class":145,"line":35},[143,163037,3300],{"emptyLinePlaceholder":976},[143,163039,163040],{"class":145,"line":46},[143,163041,3300],{"emptyLinePlaceholder":976},[143,163043,163044,163046,163048],{"class":145,"line":293},[143,163045,32845],{"class":755},[143,163047,152757],{"class":156},[143,163049,32851],{"class":149},[143,163051,163052,163054,163056,163059],{"class":145,"line":306},[143,163053,32197],{"class":280},[143,163055,1049],{"class":149},[143,163057,163058],{"class":163},"\"====== ATM ======\"",[143,163060,1055],{"class":149},[143,163062,163063,163065,163067,163069],{"class":145,"line":319},[143,163064,32197],{"class":280},[143,163066,1049],{"class":149},[143,163068,161372],{"class":163},[143,163070,1055],{"class":149},[143,163072,163073,163075,163077,163079],{"class":145,"line":332},[143,163074,32197],{"class":280},[143,163076,1049],{"class":149},[143,163078,161383],{"class":163},[143,163080,1055],{"class":149},[143,163082,163083,163085,163087,163089],{"class":145,"line":345},[143,163084,32197],{"class":280},[143,163086,1049],{"class":149},[143,163088,161394],{"class":163},[143,163090,1055],{"class":149},[143,163092,163093,163095,163097,163099],{"class":145,"line":701},[143,163094,32197],{"class":280},[143,163096,1049],{"class":149},[143,163098,161405],{"class":163},[143,163100,1055],{"class":149},[143,163102,163103],{"class":145,"line":707},[143,163104,3300],{"emptyLinePlaceholder":976},[143,163106,163107],{"class":145,"line":727},[143,163108,3300],{"emptyLinePlaceholder":976},[143,163110,163111,163113,163116],{"class":145,"line":2518},[143,163112,32845],{"class":755},[143,163114,163115],{"class":156}," show_balance",[143,163117,32851],{"class":149},[143,163119,163120,163122,163124,163126,163129,163131,163134,163136,163138],{"class":145,"line":2524},[143,163121,32197],{"class":280},[143,163123,1049],{"class":149},[143,163125,1098],{"class":755},[143,163127,163128],{"class":163},"\"当前余额:",[143,163130,1936],{"class":280},[143,163132,163133],{"class":149},"balance",[143,163135,366],{"class":280},[143,163137,157736],{"class":163},[143,163139,1055],{"class":149},[143,163141,163142],{"class":145,"line":2529},[143,163143,3300],{"emptyLinePlaceholder":976},[143,163145,163146],{"class":145,"line":2543},[143,163147,3300],{"emptyLinePlaceholder":976},[143,163149,163150,163152,163155],{"class":145,"line":2548},[143,163151,32845],{"class":755},[143,163153,163154],{"class":156}," save_money",[143,163156,32851],{"class":149},[143,163158,163159,163161],{"class":145,"line":2554},[143,163160,162585],{"class":755},[143,163162,150823],{"class":149},[143,163164,163165,163168,163170,163172,163174,163176,163178,163181],{"class":145,"line":2575},[143,163166,163167],{"class":149},"    money ",[143,163169,160],{"class":755},[143,163171,110672],{"class":280},[143,163173,1049],{"class":149},[143,163175,746],{"class":280},[143,163177,1049],{"class":149},[143,163179,163180],{"class":163},"\"请输入存款金额:\"",[143,163182,31395],{"class":149},[143,163184,163185,163187,163189,163191,163193],{"class":145,"line":2580},[143,163186,4001],{"class":755},[143,163188,150866],{"class":149},[143,163190,2490],{"class":755},[143,163192,4993],{"class":280},[143,163194,4639],{"class":149},[143,163196,163197,163199,163201,163204],{"class":145,"line":2594},[143,163198,33349],{"class":280},[143,163200,1049],{"class":149},[143,163202,163203],{"class":163},"\"金额必须大于0\"",[143,163205,1055],{"class":149},[143,163207,163208],{"class":145,"line":2599},[143,163209,153085],{"class":755},[143,163211,163212,163215,163217],{"class":145,"line":2628},[143,163213,163214],{"class":149},"    balance ",[143,163216,10377],{"class":755},[143,163218,150899],{"class":149},[143,163220,163221,163223,163225,163228],{"class":145,"line":2633},[143,163222,32197],{"class":280},[143,163224,1049],{"class":149},[143,163226,163227],{"class":163},"\"存款成功\"",[143,163229,1055],{"class":149},[143,163231,163232],{"class":145,"line":2650},[143,163233,163234],{"class":149},"    show_balance()\n",[143,163236,163237],{"class":145,"line":2655},[143,163238,3300],{"emptyLinePlaceholder":976},[143,163240,163241],{"class":145,"line":2660},[143,163242,3300],{"emptyLinePlaceholder":976},[143,163244,163245,163247,163250],{"class":145,"line":2665},[143,163246,32845],{"class":755},[143,163248,163249],{"class":156}," withdraw_money",[143,163251,32851],{"class":149},[143,163253,163254,163256],{"class":145,"line":2679},[143,163255,162585],{"class":755},[143,163257,150823],{"class":149},[143,163259,163260,163262,163264,163266,163268,163270,163272,163275],{"class":145,"line":2684},[143,163261,163167],{"class":149},[143,163263,160],{"class":755},[143,163265,110672],{"class":280},[143,163267,1049],{"class":149},[143,163269,746],{"class":280},[143,163271,1049],{"class":149},[143,163273,163274],{"class":163},"\"请输入取款金额:\"",[143,163276,31395],{"class":149},[143,163278,163279,163281,163283,163285,163287],{"class":145,"line":3477},[143,163280,4001],{"class":755},[143,163282,150866],{"class":149},[143,163284,2490],{"class":755},[143,163286,4993],{"class":280},[143,163288,4639],{"class":149},[143,163290,163291,163293,163295,163297],{"class":145,"line":3491},[143,163292,33349],{"class":280},[143,163294,1049],{"class":149},[143,163296,163203],{"class":163},[143,163298,1055],{"class":149},[143,163300,163301],{"class":145,"line":3499},[143,163302,153085],{"class":755},[143,163304,163305,163307,163309,163311],{"class":145,"line":3504},[143,163306,4001],{"class":755},[143,163308,150866],{"class":149},[143,163310,1998],{"class":755},[143,163312,163313],{"class":149}," balance:\n",[143,163315,163316,163318,163320,163322],{"class":145,"line":3510},[143,163317,33349],{"class":280},[143,163319,1049],{"class":149},[143,163321,150961],{"class":163},[143,163323,1055],{"class":149},[143,163325,163326],{"class":145,"line":3516},[143,163327,153085],{"class":755},[143,163329,163330,163332,163334],{"class":145,"line":3521},[143,163331,163214],{"class":149},[143,163333,150976],{"class":755},[143,163335,150899],{"class":149},[143,163337,163338,163340,163342,163345],{"class":145,"line":8848},[143,163339,32197],{"class":280},[143,163341,1049],{"class":149},[143,163343,163344],{"class":163},"\"取款成功\"",[143,163346,1055],{"class":149},[143,163348,163349],{"class":145,"line":8872},[143,163350,163234],{"class":149},[143,163352,163353],{"class":145,"line":8877},[143,163354,3300],{"emptyLinePlaceholder":976},[143,163356,163357],{"class":145,"line":8883},[143,163358,3300],{"emptyLinePlaceholder":976},[143,163360,163361,163363,163365],{"class":145,"line":8910},[143,163362,109538],{"class":755},[143,163364,96169],{"class":280},[143,163366,4639],{"class":149},[143,163368,163369],{"class":145,"line":8915},[143,163370,163371],{"class":149},"    show_menu()\n",[143,163373,163374,163376,163378,163380,163382,163384],{"class":145,"line":8921},[143,163375,161416],{"class":149},[143,163377,160],{"class":755},[143,163379,61488],{"class":280},[143,163381,1049],{"class":149},[143,163383,153797],{"class":163},[143,163385,1055],{"class":149},[143,163387,163388],{"class":145,"line":8933},[143,163389,3300],{"emptyLinePlaceholder":976},[143,163391,163392,163394,163396,163398,163400],{"class":145,"line":8945},[143,163393,4001],{"class":755},[143,163395,153810],{"class":149},[143,163397,3849],{"class":755},[143,163399,153815],{"class":163},[143,163401,4639],{"class":149},[143,163403,163404],{"class":145,"line":8957},[143,163405,163406],{"class":149},"        show_balance()\n",[143,163408,163409,163411,163413,163415,163417],{"class":145,"line":10616},[143,163410,40191],{"class":755},[143,163412,153810],{"class":149},[143,163414,3849],{"class":755},[143,163416,153834],{"class":163},[143,163418,4639],{"class":149},[143,163420,163421],{"class":145,"line":10641},[143,163422,163423],{"class":149},"        save_money()\n",[143,163425,163426,163428,163430,163432,163434],{"class":145,"line":10664},[143,163427,40191],{"class":755},[143,163429,153810],{"class":149},[143,163431,3849],{"class":755},[143,163433,153852],{"class":163},[143,163435,4639],{"class":149},[143,163437,163438],{"class":145,"line":10688},[143,163439,163440],{"class":149},"        withdraw_money()\n",[143,163442,163443,163445,163447,163449,163451],{"class":145,"line":10693},[143,163444,40191],{"class":755},[143,163446,153810],{"class":149},[143,163448,3849],{"class":755},[143,163450,153906],{"class":163},[143,163452,4639],{"class":149},[143,163454,163455,163457,163459,163461],{"class":145,"line":10698},[143,163456,33349],{"class":280},[143,163458,1049],{"class":149},[143,163460,153917],{"class":163},[143,163462,1055],{"class":149},[143,163464,163465],{"class":145,"line":10703},[143,163466,32525],{"class":755},[143,163468,163469,163471],{"class":145,"line":10712},[143,163470,158746],{"class":755},[143,163472,4639],{"class":149},[143,163474,163475,163477,163479,163481],{"class":145,"line":10717},[143,163476,33349],{"class":280},[143,163478,1049],{"class":149},[143,163480,153938],{"class":163},[143,163482,1055],{"class":149},[63,163484,163485],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163487,163489],{"id":163488},"_514-易错点","5.14 易错点",[19,163491,163492,163495,163498,163503,163508,163511],{},[22,163493,163494],{},"函数定义后必须调用才会执行。",[22,163496,163497],{},"函数名后面有括号才是调用。",[22,163499,163500,163502],{},[140,163501,17944],{}," 后面的代码不会执行。",[22,163504,163505,163506,29283],{},"没有返回值的函数默认返回 ",[140,163507,96562],{},[22,163509,163510],{},"局部变量不能在函数外部访问。",[22,163512,163513,163514,163516],{},"不要滥用 ",[140,163515,162550],{},"，更好的方式是让函数返回新值。",[63,163518,163519,163520,163522],{},"例如不用 ",[140,163521,162550],{}," 改写存款：",[133,163524,163526],{"className":31276,"code":163525,"language":31278,"meta":138,"style":138},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[140,163527,163528,163537,163548,163552,163556,163564,163577],{"__ignoreMap":138},[143,163529,163530,163532,163534],{"class":145,"line":146},[143,163531,32845],{"class":755},[143,163533,163154],{"class":156},[143,163535,163536],{"class":149},"(balance, money):\n",[143,163538,163539,163541,163544,163546],{"class":145,"line":35},[143,163540,4990],{"class":755},[143,163542,163543],{"class":149}," balance ",[143,163545,1522],{"class":755},[143,163547,150899],{"class":149},[143,163549,163550],{"class":145,"line":46},[143,163551,3300],{"emptyLinePlaceholder":976},[143,163553,163554],{"class":145,"line":293},[143,163555,3300],{"emptyLinePlaceholder":976},[143,163557,163558,163560,163562],{"class":145,"line":306},[143,163559,163028],{"class":149},[143,163561,160],{"class":755},[143,163563,163033],{"class":280},[143,163565,163566,163568,163570,163573,163575],{"class":145,"line":319},[143,163567,163028],{"class":149},[143,163569,160],{"class":755},[143,163571,163572],{"class":149}," save_money(balance, ",[143,163574,2623],{"class":280},[143,163576,1055],{"class":149},[143,163578,163579,163581],{"class":145,"line":332},[143,163580,31313],{"class":280},[143,163582,163583],{"class":149},"(balance)\n",[14,163585,163587],{"id":163586},"_515-本章练习","5.15 本章练习",[19,163589,163590,163597,163603,163609,163615],{},[22,163591,163592,163593,163596],{},"定义函数 ",[140,163594,163595],{},"print_student(name, age)","，输出学生信息。",[22,163598,163592,163599,163602],{},[140,163600,163601],{},"get_max(a, b, c)","，返回三个数中的最大值。",[22,163604,163592,163605,163608],{},[140,163606,163607],{},"is_even(num)","，判断一个数是否为偶数。",[22,163610,163592,163611,163614],{},[140,163612,163613],{},"calculate_bmi(weight, height)","，返回 BMI。",[22,163616,163617],{},"把第 4 章的菜单程序拆分成多个函数。",[954,163619,163620],{},"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":138,"searchDepth":35,"depth":35,"links":163622},[163623,163624,163625,163626,163627,163628,163629,163630,163631,163635,163636,163637,163638,163639,163640],{"id":161643,"depth":35,"text":161644},{"id":161684,"depth":35,"text":161685},{"id":161774,"depth":35,"text":161775},{"id":161855,"depth":35,"text":161856},{"id":161988,"depth":35,"text":161989},{"id":162110,"depth":35,"text":162111},{"id":162232,"depth":35,"text":162233},{"id":162309,"depth":35,"text":162310},{"id":162431,"depth":35,"text":162432,"children":163632},[163633,163634],{"id":162435,"depth":46,"text":162436},{"id":162493,"depth":46,"text":162494},{"id":162622,"depth":35,"text":162623},{"id":162748,"depth":35,"text":162749},{"id":162861,"depth":35,"text":162862},{"id":163017,"depth":35,"text":163018},{"id":163488,"depth":35,"text":163489},{"id":163586,"depth":35,"text":163587},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161635,"description":973},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163647,"title":163648,"body":163649,"description":973,"extension":974,"meta":166693,"navigation":976,"path":166694,"seo":166695,"stem":166696,"__hash__":166697},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163650,"toc":166674},[163651,163654,163658,163661,163664,163768,163771,163775,163778,163858,163861,163865,163868,163928,163931,163967,163970,163985,163989,164062,164065,164120,164123,164193,164196,164280,164290,164348,164352,164397,164400,164426,164429,164535,164539,164542,164584,164587,164651,164654,164658,164661,164722,164725,164755,164758,164796,164800,164803,164812,164815,164939,164942,164983,164987,164990,165001,165041,165044,165059,165064,165067,165134,165137,165227,165231,165234,165282,165285,165312,165314,165344,165347,165367,165370,165401,165404,165437,165441,165444,165468,165471,165495,165498,165522,165526,165529,165659,165662,165742,165745,165820,165824,165827,165877,165880,165922,165925,165949,165951,165975,165978,166033,166036,166102,166106,166109,166112,166150,166153,166206,166209,166255,166258,166291,166294,166298,166617,166621,166650,166654,166671],[10,163652,163648],{"id":163653},"_6-数据容器",[14,163655,163657],{"id":163656},"_61-什么是数据容器","6.1 什么是数据容器",[63,163659,163660],{},"数据容器用于一次保存多个数据。",[63,163662,163663],{},"常见容器：",[1181,163665,163666,163683],{},[1184,163667,163668],{},[1187,163669,163670,163672,163675,163678,163681],{},[1190,163671,26669],{},[1190,163673,163674],{},"是否有序",[1190,163676,163677],{},"是否可变",[1190,163679,163680],{},"是否允许重复",[1190,163682,28390],{},[1227,163684,163685,163703,163719,163734,163751],{},[1187,163686,163687,163690,163693,163696,163699],{},[1232,163688,163689],{},"list列表",[1232,163691,163692],{},"有序",[1232,163694,163695],{},"可变",[1232,163697,163698],{},"允许",[1232,163700,163701],{},[140,163702,155981],{},[1187,163704,163705,163708,163710,163713,163715],{},[1232,163706,163707],{},"tuple元组",[1232,163709,163692],{},[1232,163711,163712],{},"不可变",[1232,163714,163698],{},[1232,163716,163717],{},[140,163718,155994],{},[1187,163720,163721,163724,163726,163728,163730],{},[1232,163722,163723],{},"str字符串",[1232,163725,163692],{},[1232,163727,163712],{},[1232,163729,163698],{},[1232,163731,163732],{},[140,163733,156604],{},[1187,163735,163736,163739,163742,163744,163747],{},[1232,163737,163738],{},"set集合",[1232,163740,163741],{},"无序",[1232,163743,163695],{},[1232,163745,163746],{},"不允许",[1232,163748,163749],{},[140,163750,156019],{},[1187,163752,163753,163756,163758,163760,163763],{},[1232,163754,163755],{},"dict字典",[1232,163757,163692],{},[1232,163759,163695],{},[1232,163761,163762],{},"key不允许重复",[1232,163764,163765],{},[140,163766,163767],{},"{\"name\": \"小明\"}",[63,163769,163770],{},"Python 3.7 之后，字典保持插入顺序。",[14,163772,163774],{"id":163773},"_62-列表list","6.2 列表list",[63,163776,163777],{},"列表用于保存一组有顺序的数据。",[133,163779,163781],{"className":31276,"code":163780,"language":31278,"meta":138,"style":138},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[140,163782,163783,163803,163828,163849],{"__ignoreMap":138},[143,163784,163785,163787,163789,163791,163793,163795,163797,163799,163801],{"class":145,"line":146},[143,163786,161104],{"class":149},[143,163788,160],{"class":755},[143,163790,53113],{"class":149},[143,163792,150612],{"class":163},[143,163794,13335],{"class":149},[143,163796,151660],{"class":163},[143,163798,13335],{"class":149},[143,163800,160455],{"class":163},[143,163802,34144],{"class":149},[143,163804,163805,163808,163810,163812,163814,163816,163818,163820,163822,163824,163826],{"class":145,"line":35},[143,163806,163807],{"class":149},"numbers ",[143,163809,160],{"class":755},[143,163811,53113],{"class":149},[143,163813,771],{"class":280},[143,163815,13335],{"class":149},[143,163817,1122],{"class":280},[143,163819,13335],{"class":149},[143,163821,1116],{"class":280},[143,163823,13335],{"class":149},[143,163825,1334],{"class":280},[143,163827,34144],{"class":149},[143,163829,163830,163833,163835,163837,163839,163841,163843,163845,163847],{"class":145,"line":46},[143,163831,163832],{"class":149},"mixed ",[143,163834,160],{"class":755},[143,163836,53113],{"class":149},[143,163838,150612],{"class":163},[143,163840,13335],{"class":149},[143,163842,1691],{"class":280},[143,163844,13335],{"class":149},[143,163846,32374],{"class":280},[143,163848,34144],{"class":149},[143,163850,163851,163854,163856],{"class":145,"line":293},[143,163852,163853],{"class":149},"empty ",[143,163855,160],{"class":755},[143,163857,52726],{"class":149},[63,163859,163860],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163862,163864],{"id":163863},"_63-列表索引","6.3 列表索引",[63,163866,163867],{},"正向索引从 0 开始：",[133,163869,163871],{"className":31276,"code":163870,"language":31278,"meta":138,"style":138},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[140,163872,163873,163893,163897,163908,163918],{"__ignoreMap":138},[143,163874,163875,163877,163879,163881,163883,163885,163887,163889,163891],{"class":145,"line":146},[143,163876,161104],{"class":149},[143,163878,160],{"class":755},[143,163880,53113],{"class":149},[143,163882,150612],{"class":163},[143,163884,13335],{"class":149},[143,163886,151660],{"class":163},[143,163888,13335],{"class":149},[143,163890,160455],{"class":163},[143,163892,34144],{"class":149},[143,163894,163895],{"class":145,"line":35},[143,163896,3300],{"emptyLinePlaceholder":976},[143,163898,163899,163901,163904,163906],{"class":145,"line":46},[143,163900,31313],{"class":280},[143,163902,163903],{"class":149},"(names[",[143,163905,1234],{"class":280},[143,163907,5557],{"class":149},[143,163909,163910,163912,163914,163916],{"class":145,"line":293},[143,163911,31313],{"class":280},[143,163913,163903],{"class":149},[143,163915,771],{"class":280},[143,163917,5557],{"class":149},[143,163919,163920,163922,163924,163926],{"class":145,"line":306},[143,163921,31313],{"class":280},[143,163923,163903],{"class":149},[143,163925,1122],{"class":280},[143,163927,5557],{"class":149},[63,163929,163930],{},"反向索引从 -1 开始：",[133,163932,163934],{"className":31276,"code":163933,"language":31278,"meta":138,"style":138},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[140,163935,163936,163952],{"__ignoreMap":138},[143,163937,163938,163940,163942,163944,163946,163949],{"class":145,"line":146},[143,163939,31313],{"class":280},[143,163941,163903],{"class":149},[143,163943,1573],{"class":755},[143,163945,771],{"class":280},[143,163947,163948],{"class":149},"])  ",[143,163950,163951],{"class":266},"# 小刚\n",[143,163953,163954,163956,163958,163960,163962,163964],{"class":145,"line":35},[143,163955,31313],{"class":280},[143,163957,163903],{"class":149},[143,163959,1573],{"class":755},[143,163961,1122],{"class":280},[143,163963,163948],{"class":149},[143,163965,163966],{"class":266},"# 小红\n",[63,163968,163969],{},"索引越界会报错：",[133,163971,163973],{"className":31276,"code":163972,"language":31278,"meta":138,"style":138},"print(names[3])\n",[140,163974,163975],{"__ignoreMap":138},[143,163976,163977,163979,163981,163983],{"class":145,"line":146},[143,163978,31313],{"class":280},[143,163980,163903],{"class":149},[143,163982,1116],{"class":280},[143,163984,5557],{"class":149},[14,163986,163988],{"id":163987},"_64-列表常用方法","6.4 列表常用方法",[133,163990,163992],{"className":31276,"code":163991,"language":31278,"meta":138,"style":138},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[140,163993,163994,164010,164014,164023,164037,164051,164055],{"__ignoreMap":138},[143,163995,163996,163998,164000,164002,164004,164006,164008],{"class":145,"line":146},[143,163997,161104],{"class":149},[143,163999,160],{"class":755},[143,164001,53113],{"class":149},[143,164003,150612],{"class":163},[143,164005,13335],{"class":149},[143,164007,151660],{"class":163},[143,164009,34144],{"class":149},[143,164011,164012],{"class":145,"line":35},[143,164013,3300],{"emptyLinePlaceholder":976},[143,164015,164016,164019,164021],{"class":145,"line":46},[143,164017,164018],{"class":149},"names.append(",[143,164020,160455],{"class":163},[143,164022,1055],{"class":149},[143,164024,164025,164028,164030,164032,164035],{"class":145,"line":293},[143,164026,164027],{"class":149},"names.insert(",[143,164029,771],{"class":280},[143,164031,13335],{"class":149},[143,164033,164034],{"class":163},"\"小李\"",[143,164036,1055],{"class":149},[143,164038,164039,164042,164044,164046,164049],{"class":145,"line":306},[143,164040,164041],{"class":149},"names.extend([",[143,164043,9583],{"class":163},[143,164045,13335],{"class":149},[143,164047,164048],{"class":163},"\"小赵\"",[143,164050,5557],{"class":149},[143,164052,164053],{"class":145,"line":319},[143,164054,3300],{"emptyLinePlaceholder":976},[143,164056,164057,164059],{"class":145,"line":332},[143,164058,31313],{"class":280},[143,164060,164061],{"class":149},"(names)\n",[63,164063,164064],{},"删除元素：",[133,164066,164068],{"className":31276,"code":164067,"language":31278,"meta":138,"style":138},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[140,164069,164070,164079,164089,164103,164115],{"__ignoreMap":138},[143,164071,164072,164075,164077],{"class":145,"line":146},[143,164073,164074],{"class":149},"names.remove(",[143,164076,151660],{"class":163},[143,164078,1055],{"class":149},[143,164080,164081,164084,164086],{"class":145,"line":35},[143,164082,164083],{"class":149},"last ",[143,164085,160],{"class":755},[143,164087,164088],{"class":149}," names.pop()\n",[143,164090,164091,164094,164096,164099,164101],{"class":145,"line":46},[143,164092,164093],{"class":149},"first ",[143,164095,160],{"class":755},[143,164097,164098],{"class":149}," names.pop(",[143,164100,1234],{"class":280},[143,164102,1055],{"class":149},[143,164104,164105,164108,164111,164113],{"class":145,"line":293},[143,164106,164107],{"class":755},"del",[143,164109,164110],{"class":149}," names[",[143,164112,1234],{"class":280},[143,164114,34144],{"class":149},[143,164116,164117],{"class":145,"line":306},[143,164118,164119],{"class":149},"names.clear()\n",[63,164121,164122],{},"查询和统计：",[133,164124,164126],{"className":31276,"code":164125,"language":31278,"meta":138,"style":138},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[140,164127,164128,164156,164160,164171,164182],{"__ignoreMap":138},[143,164129,164130,164132,164134,164136,164138,164140,164142,164144,164146,164148,164150,164152,164154],{"class":145,"line":146},[143,164131,163807],{"class":149},[143,164133,160],{"class":755},[143,164135,53113],{"class":149},[143,164137,771],{"class":280},[143,164139,13335],{"class":149},[143,164141,1122],{"class":280},[143,164143,13335],{"class":149},[143,164145,1116],{"class":280},[143,164147,13335],{"class":149},[143,164149,1122],{"class":280},[143,164151,13335],{"class":149},[143,164153,1334],{"class":280},[143,164155,34144],{"class":149},[143,164157,164158],{"class":145,"line":35},[143,164159,3300],{"emptyLinePlaceholder":976},[143,164161,164162,164164,164167,164169],{"class":145,"line":46},[143,164163,31313],{"class":280},[143,164165,164166],{"class":149},"(numbers.index(",[143,164168,1116],{"class":280},[143,164170,31395],{"class":149},[143,164172,164173,164175,164178,164180],{"class":145,"line":293},[143,164174,31313],{"class":280},[143,164176,164177],{"class":149},"(numbers.count(",[143,164179,1122],{"class":280},[143,164181,31395],{"class":149},[143,164183,164184,164186,164188,164190],{"class":145,"line":306},[143,164185,31313],{"class":280},[143,164187,1049],{"class":149},[143,164189,8258],{"class":280},[143,164191,164192],{"class":149},"(numbers))\n",[63,164194,164195],{},"排序：",[133,164197,164199],{"className":31276,"code":164198,"language":31278,"meta":138,"style":138},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[140,164200,164201,164225,164229,164234,164241,164245,164259,164265,164269,164274],{"__ignoreMap":138},[143,164202,164203,164205,164207,164209,164211,164213,164215,164217,164219,164221,164223],{"class":145,"line":146},[143,164204,163807],{"class":149},[143,164206,160],{"class":755},[143,164208,53113],{"class":149},[143,164210,1116],{"class":280},[143,164212,13335],{"class":149},[143,164214,771],{"class":280},[143,164216,13335],{"class":149},[143,164218,1360],{"class":280},[143,164220,13335],{"class":149},[143,164222,1122],{"class":280},[143,164224,34144],{"class":149},[143,164226,164227],{"class":145,"line":35},[143,164228,3300],{"emptyLinePlaceholder":976},[143,164230,164231],{"class":145,"line":46},[143,164232,164233],{"class":149},"numbers.sort()\n",[143,164235,164236,164238],{"class":145,"line":293},[143,164237,31313],{"class":280},[143,164239,164240],{"class":149},"(numbers)\n",[143,164242,164243],{"class":145,"line":306},[143,164244,3300],{"emptyLinePlaceholder":976},[143,164246,164247,164250,164253,164255,164257],{"class":145,"line":319},[143,164248,164249],{"class":149},"numbers.sort(",[143,164251,164252],{"class":6116},"reverse",[143,164254,160],{"class":755},[143,164256,32374],{"class":280},[143,164258,1055],{"class":149},[143,164260,164261,164263],{"class":145,"line":332},[143,164262,31313],{"class":280},[143,164264,164240],{"class":149},[143,164266,164267],{"class":145,"line":345},[143,164268,3300],{"emptyLinePlaceholder":976},[143,164270,164271],{"class":145,"line":701},[143,164272,164273],{"class":149},"numbers.reverse()\n",[143,164275,164276,164278],{"class":145,"line":707},[143,164277,31313],{"class":280},[143,164279,164240],{"class":149},[63,164281,164282,164285,164286,164289],{},[140,164283,164284],{},"sort()"," 会修改原列表，",[140,164287,164288],{},"sorted()"," 返回新列表。",[133,164291,164293],{"className":31276,"code":164292,"language":31278,"meta":138,"style":138},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[140,164294,164295,164319,164331,164335,164341],{"__ignoreMap":138},[143,164296,164297,164299,164301,164303,164305,164307,164309,164311,164313,164315,164317],{"class":145,"line":146},[143,164298,163807],{"class":149},[143,164300,160],{"class":755},[143,164302,53113],{"class":149},[143,164304,1116],{"class":280},[143,164306,13335],{"class":149},[143,164308,771],{"class":280},[143,164310,13335],{"class":149},[143,164312,1360],{"class":280},[143,164314,13335],{"class":149},[143,164316,1122],{"class":280},[143,164318,34144],{"class":149},[143,164320,164321,164324,164326,164329],{"class":145,"line":35},[143,164322,164323],{"class":149},"new_numbers ",[143,164325,160],{"class":755},[143,164327,164328],{"class":280}," sorted",[143,164330,164240],{"class":149},[143,164332,164333],{"class":145,"line":46},[143,164334,3300],{"emptyLinePlaceholder":976},[143,164336,164337,164339],{"class":145,"line":293},[143,164338,31313],{"class":280},[143,164340,164240],{"class":149},[143,164342,164343,164345],{"class":145,"line":306},[143,164344,31313],{"class":280},[143,164346,164347],{"class":149},"(new_numbers)\n",[14,164349,164351],{"id":164350},"_65-列表遍历","6.5 列表遍历",[133,164353,164355],{"className":31276,"code":164354,"language":31278,"meta":138,"style":138},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[140,164356,164357,164377,164381,164391],{"__ignoreMap":138},[143,164358,164359,164361,164363,164365,164367,164369,164371,164373,164375],{"class":145,"line":146},[143,164360,161104],{"class":149},[143,164362,160],{"class":755},[143,164364,53113],{"class":149},[143,164366,150612],{"class":163},[143,164368,13335],{"class":149},[143,164370,151660],{"class":163},[143,164372,13335],{"class":149},[143,164374,160455],{"class":163},[143,164376,34144],{"class":149},[143,164378,164379],{"class":145,"line":35},[143,164380,3300],{"emptyLinePlaceholder":976},[143,164382,164383,164385,164387,164389],{"class":145,"line":46},[143,164384,3925],{"class":755},[143,164386,161140],{"class":149},[143,164388,26941],{"class":755},[143,164390,161145],{"class":149},[143,164392,164393,164395],{"class":145,"line":293},[143,164394,32197],{"class":280},[143,164396,151384],{"class":149},[63,164398,164399],{},"需要索引时：",[133,164401,164403],{"className":31276,"code":164402,"language":31278,"meta":138,"style":138},"for index, name in enumerate(names):\n    print(index, name)\n",[140,164404,164405,164419],{"__ignoreMap":138},[143,164406,164407,164409,164412,164414,164416],{"class":145,"line":146},[143,164408,3925],{"class":755},[143,164410,164411],{"class":149}," index, name ",[143,164413,26941],{"class":755},[143,164415,32504],{"class":280},[143,164417,164418],{"class":149},"(names):\n",[143,164420,164421,164423],{"class":145,"line":35},[143,164422,32197],{"class":280},[143,164424,164425],{"class":149},"(index, name)\n",[63,164427,164428],{},"统计总分：",[133,164430,164432],{"className":31276,"code":164431,"language":31278,"meta":138,"style":138},"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",[140,164433,164434,164459,164467,164471,164482,164490,164494,164511],{"__ignoreMap":138},[143,164435,164436,164439,164441,164443,164445,164447,164449,164451,164453,164455,164457],{"class":145,"line":146},[143,164437,164438],{"class":149},"scores ",[143,164440,160],{"class":755},[143,164442,53113],{"class":149},[143,164444,1903],{"class":280},[143,164446,13335],{"class":149},[143,164448,1777],{"class":280},[143,164450,13335],{"class":149},[143,164452,1295],{"class":280},[143,164454,13335],{"class":149},[143,164456,1602],{"class":280},[143,164458,34144],{"class":149},[143,164460,164461,164463,164465],{"class":145,"line":35},[143,164462,157984],{"class":149},[143,164464,160],{"class":755},[143,164466,48231],{"class":280},[143,164468,164469],{"class":145,"line":46},[143,164470,3300],{"emptyLinePlaceholder":976},[143,164472,164473,164475,164477,164479],{"class":145,"line":293},[143,164474,3925],{"class":755},[143,164476,158507],{"class":149},[143,164478,26941],{"class":755},[143,164480,164481],{"class":149}," scores:\n",[143,164483,164484,164486,164488],{"class":145,"line":306},[143,164485,160031],{"class":149},[143,164487,10377],{"class":755},[143,164489,2481],{"class":149},[143,164491,164492],{"class":145,"line":319},[143,164493,3300],{"emptyLinePlaceholder":976},[143,164495,164496,164499,164501,164504,164506,164508],{"class":145,"line":332},[143,164497,164498],{"class":149},"avg ",[143,164500,160],{"class":755},[143,164502,164503],{"class":149}," total ",[143,164505,1625],{"class":755},[143,164507,8231],{"class":280},[143,164509,164510],{"class":149},"(scores)\n",[143,164512,164513,164515,164517,164519,164522,164524,164527,164529,164531,164533],{"class":145,"line":345},[143,164514,31313],{"class":280},[143,164516,1049],{"class":149},[143,164518,1098],{"class":755},[143,164520,164521],{"class":163},"\"平均分:",[143,164523,1936],{"class":280},[143,164525,164526],{"class":149},"avg",[143,164528,157883],{"class":755},[143,164530,366],{"class":280},[143,164532,1292],{"class":163},[143,164534,1055],{"class":149},[14,164536,164538],{"id":164537},"_66-元组tuple","6.6 元组tuple",[63,164540,164541],{},"元组和列表类似，但不可修改。",[133,164543,164545],{"className":31276,"code":164544,"language":31278,"meta":138,"style":138},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[140,164546,164547,164564],{"__ignoreMap":138},[143,164548,164549,164552,164554,164556,164558,164560,164562],{"class":145,"line":146},[143,164550,164551],{"class":149},"point ",[143,164553,160],{"class":755},[143,164555,2559],{"class":149},[143,164557,1487],{"class":280},[143,164559,13335],{"class":149},[143,164561,1741],{"class":280},[143,164563,1055],{"class":149},[143,164565,164566,164568,164570,164572,164574,164576,164578,164580,164582],{"class":145,"line":35},[143,164567,117189],{"class":149},[143,164569,160],{"class":755},[143,164571,2559],{"class":149},[143,164573,150612],{"class":163},[143,164575,13335],{"class":149},[143,164577,1691],{"class":280},[143,164579,13335],{"class":149},[143,164581,70150],{"class":163},[143,164583,1055],{"class":149},[63,164585,164586],{},"单元素元组必须加逗号：",[133,164588,164590],{"className":31276,"code":164589,"language":31278,"meta":138,"style":138},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[140,164591,164592,164606,164619,164623,164637],{"__ignoreMap":138},[143,164593,164594,164597,164599,164601,164603],{"class":145,"line":146},[143,164595,164596],{"class":149},"t1 ",[143,164598,160],{"class":755},[143,164600,2559],{"class":149},[143,164602,1487],{"class":280},[143,164604,164605],{"class":149},",)\n",[143,164607,164608,164611,164613,164615,164617],{"class":145,"line":35},[143,164609,164610],{"class":149},"t2 ",[143,164612,160],{"class":755},[143,164614,2559],{"class":149},[143,164616,1487],{"class":280},[143,164618,1055],{"class":149},[143,164620,164621],{"class":145,"line":46},[143,164622,3300],{"emptyLinePlaceholder":976},[143,164624,164625,164627,164629,164631,164634],{"class":145,"line":293},[143,164626,31313],{"class":280},[143,164628,1049],{"class":149},[143,164630,752],{"class":280},[143,164632,164633],{"class":149},"(t1))  ",[143,164635,164636],{"class":266},"# tuple\n",[143,164638,164639,164641,164643,164645,164648],{"class":145,"line":306},[143,164640,31313],{"class":280},[143,164642,1049],{"class":149},[143,164644,752],{"class":280},[143,164646,164647],{"class":149},"(t2))  ",[143,164649,164650],{"class":266},"# int\n",[63,164652,164653],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164655,164657],{"id":164656},"_67-字符串str","6.7 字符串str",[63,164659,164660],{},"字符串也是序列，可以索引、切片和遍历。",[133,164662,164664],{"className":31276,"code":164663,"language":31278,"meta":138,"style":138},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[140,164665,164666,164674,164678,164689,164701,164705,164716],{"__ignoreMap":138},[143,164667,164668,164670,164672],{"class":145,"line":146},[143,164669,157168],{"class":149},[143,164671,160],{"class":755},[143,164673,160405],{"class":163},[143,164675,164676],{"class":145,"line":35},[143,164677,3300],{"emptyLinePlaceholder":976},[143,164679,164680,164682,164685,164687],{"class":145,"line":46},[143,164681,31313],{"class":280},[143,164683,164684],{"class":149},"(text[",[143,164686,1234],{"class":280},[143,164688,5557],{"class":149},[143,164690,164691,164693,164695,164697,164699],{"class":145,"line":293},[143,164692,31313],{"class":280},[143,164694,164684],{"class":149},[143,164696,1573],{"class":755},[143,164698,771],{"class":280},[143,164700,5557],{"class":149},[143,164702,164703],{"class":145,"line":306},[143,164704,3300],{"emptyLinePlaceholder":976},[143,164706,164707,164709,164711,164713],{"class":145,"line":319},[143,164708,3925],{"class":755},[143,164710,160416],{"class":149},[143,164712,26941],{"class":755},[143,164714,164715],{"class":149}," text:\n",[143,164717,164718,164720],{"class":145,"line":332},[143,164719,32197],{"class":280},[143,164721,160427],{"class":149},[63,164723,164724],{},"字符串不可变：",[133,164726,164728],{"className":31276,"code":164727,"language":31278,"meta":138,"style":138},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[140,164729,164730,164738],{"__ignoreMap":138},[143,164731,164732,164734,164736],{"class":145,"line":146},[143,164733,157168],{"class":149},[143,164735,160],{"class":755},[143,164737,160405],{"class":163},[143,164739,164740,164743,164745,164747,164749,164752],{"class":145,"line":35},[143,164741,164742],{"class":149},"text[",[143,164744,1234],{"class":280},[143,164746,5343],{"class":149},[143,164748,160],{"class":755},[143,164750,164751],{"class":163}," \"P\"",[143,164753,164754],{"class":266},"  # 报错\n",[63,164756,164757],{},"如果要得到新字符串：",[133,164759,164761],{"className":31276,"code":164760,"language":31278,"meta":138,"style":138},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[140,164762,164763,164771,164789],{"__ignoreMap":138},[143,164764,164765,164767,164769],{"class":145,"line":146},[143,164766,157168],{"class":149},[143,164768,160],{"class":755},[143,164770,160405],{"class":163},[143,164772,164773,164775,164777,164779,164781,164784,164786],{"class":145,"line":35},[143,164774,157168],{"class":149},[143,164776,160],{"class":755},[143,164778,164751],{"class":163},[143,164780,46464],{"class":755},[143,164782,164783],{"class":149}," text[",[143,164785,771],{"class":280},[143,164787,164788],{"class":149},":]\n",[143,164790,164791,164793],{"class":145,"line":46},[143,164792,31313],{"class":280},[143,164794,164795],{"class":149},"(text)\n",[14,164797,164799],{"id":164798},"_68-切片","6.8 切片",[63,164801,164802],{},"切片用于从序列中取一部分。",[133,164804,164806],{"className":31276,"code":164805,"language":31278,"meta":138,"style":138},"序列[开始:结束:步长]\n",[140,164807,164808],{"__ignoreMap":138},[143,164809,164810],{"class":145,"line":146},[143,164811,164805],{"class":149},[63,164813,164814],{},"结束位置不包含。",[133,164816,164818],{"className":31276,"code":164817,"language":31278,"meta":138,"style":138},"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",[140,164819,164820,164857,164861,164880,164895,164909,164923],{"__ignoreMap":138},[143,164821,164822,164825,164827,164829,164831,164833,164835,164837,164839,164841,164843,164845,164847,164849,164851,164853,164855],{"class":145,"line":146},[143,164823,164824],{"class":149},"nums ",[143,164826,160],{"class":755},[143,164828,53113],{"class":149},[143,164830,1234],{"class":280},[143,164832,13335],{"class":149},[143,164834,771],{"class":280},[143,164836,13335],{"class":149},[143,164838,1122],{"class":280},[143,164840,13335],{"class":149},[143,164842,1116],{"class":280},[143,164844,13335],{"class":149},[143,164846,1334],{"class":280},[143,164848,13335],{"class":149},[143,164850,1360],{"class":280},[143,164852,13335],{"class":149},[143,164854,1385],{"class":280},[143,164856,34144],{"class":149},[143,164858,164859],{"class":145,"line":35},[143,164860,3300],{"emptyLinePlaceholder":976},[143,164862,164863,164865,164868,164870,164872,164874,164877],{"class":145,"line":46},[143,164864,31313],{"class":280},[143,164866,164867],{"class":149},"(nums[",[143,164869,771],{"class":280},[143,164871,1900],{"class":149},[143,164873,1334],{"class":280},[143,164875,164876],{"class":149},"])    ",[143,164878,164879],{"class":266},"# [1, 2, 3]\n",[143,164881,164882,164884,164887,164889,164892],{"class":145,"line":293},[143,164883,31313],{"class":280},[143,164885,164886],{"class":149},"(nums[:",[143,164888,1116],{"class":280},[143,164890,164891],{"class":149},"])     ",[143,164893,164894],{"class":266},"# [0, 1, 2]\n",[143,164896,164897,164899,164901,164903,164906],{"class":145,"line":306},[143,164898,31313],{"class":280},[143,164900,164867],{"class":149},[143,164902,1116],{"class":280},[143,164904,164905],{"class":149},":])     ",[143,164907,164908],{"class":266},"# [3, 4, 5, 6]\n",[143,164910,164911,164913,164916,164918,164920],{"class":145,"line":319},[143,164912,31313],{"class":280},[143,164914,164915],{"class":149},"(nums[::",[143,164917,1122],{"class":280},[143,164919,164876],{"class":149},[143,164921,164922],{"class":266},"# [0, 2, 4, 6]\n",[143,164924,164925,164927,164929,164931,164933,164936],{"class":145,"line":332},[143,164926,31313],{"class":280},[143,164928,164915],{"class":149},[143,164930,1573],{"class":755},[143,164932,771],{"class":280},[143,164934,164935],{"class":149},"])   ",[143,164937,164938],{"class":266},"# 反转\n",[63,164940,164941],{},"字符串切片：",[133,164943,164945],{"className":31276,"code":164944,"language":31278,"meta":138,"style":138},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[140,164946,164947,164956,164970],{"__ignoreMap":138},[143,164948,164949,164951,164953],{"class":145,"line":146},[143,164950,157168],{"class":149},[143,164952,160],{"class":755},[143,164954,164955],{"class":163}," \"abcdef\"\n",[143,164957,164958,164960,164962,164964,164966,164968],{"class":145,"line":35},[143,164959,31313],{"class":280},[143,164961,164684],{"class":149},[143,164963,771],{"class":280},[143,164965,1900],{"class":149},[143,164967,1334],{"class":280},[143,164969,5557],{"class":149},[143,164971,164972,164974,164977,164979,164981],{"class":145,"line":46},[143,164973,31313],{"class":280},[143,164975,164976],{"class":149},"(text[::",[143,164978,1573],{"class":755},[143,164980,771],{"class":280},[143,164982,5557],{"class":149},[14,164984,164986],{"id":164985},"_69-集合set","6.9 集合set",[63,164988,164989],{},"集合特点：",[19,164991,164992,164995,164998],{},[22,164993,164994],{},"无序。",[22,164996,164997],{},"元素不重复。",[22,164999,165000],{},"可以做交集、并集、差集。",[133,165002,165004],{"className":31276,"code":165003,"language":31278,"meta":138,"style":138},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[140,165005,165006,165034],{"__ignoreMap":138},[143,165007,165008,165010,165012,165014,165016,165018,165020,165022,165024,165026,165028,165030,165032],{"class":145,"line":146},[143,165009,164824],{"class":149},[143,165011,160],{"class":755},[143,165013,5348],{"class":149},[143,165015,771],{"class":280},[143,165017,13335],{"class":149},[143,165019,1122],{"class":280},[143,165021,13335],{"class":149},[143,165023,1116],{"class":280},[143,165025,13335],{"class":149},[143,165027,1116],{"class":280},[143,165029,13335],{"class":149},[143,165031,1334],{"class":280},[143,165033,348],{"class":149},[143,165035,165036,165038],{"class":145,"line":35},[143,165037,31313],{"class":280},[143,165039,165040],{"class":149},"(nums)\n",[63,165042,165043],{},"创建空集合：",[133,165045,165047],{"className":31276,"code":165046,"language":31278,"meta":138,"style":138},"s = set()\n",[140,165048,165049],{"__ignoreMap":138},[143,165050,165051,165053,165055,165057],{"class":145,"line":146},[143,165052,11479],{"class":149},[143,165054,160],{"class":755},[143,165056,120597],{"class":280},[143,165058,2876],{"class":149},[63,165060,9925,165061,165063],{},[140,165062,33357],{}," 是空字典，不是空集合。",[63,165065,165066],{},"集合常用操作：",[133,165068,165070],{"className":31276,"code":165069,"language":31278,"meta":138,"style":138},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[140,165071,165072,165092,165096,165105,165114,165123],{"__ignoreMap":138},[143,165073,165074,165076,165078,165080,165082,165084,165086,165088,165090],{"class":145,"line":146},[143,165075,11479],{"class":149},[143,165077,160],{"class":755},[143,165079,5348],{"class":149},[143,165081,771],{"class":280},[143,165083,13335],{"class":149},[143,165085,1122],{"class":280},[143,165087,13335],{"class":149},[143,165089,1116],{"class":280},[143,165091,348],{"class":149},[143,165093,165094],{"class":145,"line":35},[143,165095,3300],{"emptyLinePlaceholder":976},[143,165097,165098,165101,165103],{"class":145,"line":46},[143,165099,165100],{"class":149},"s.add(",[143,165102,1334],{"class":280},[143,165104,1055],{"class":149},[143,165106,165107,165110,165112],{"class":145,"line":293},[143,165108,165109],{"class":149},"s.remove(",[143,165111,1122],{"class":280},[143,165113,1055],{"class":149},[143,165115,165116,165119,165121],{"class":145,"line":306},[143,165117,165118],{"class":149},"s.discard(",[143,165120,1487],{"class":280},[143,165122,1055],{"class":149},[143,165124,165125,165127,165129,165131],{"class":145,"line":319},[143,165126,31313],{"class":280},[143,165128,1049],{"class":149},[143,165130,8258],{"class":280},[143,165132,165133],{"class":149},"(s))\n",[63,165135,165136],{},"交并差：",[133,165138,165140],{"className":31276,"code":165139,"language":31278,"meta":138,"style":138},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[140,165141,165142,165162,165182,165186,165201,165214],{"__ignoreMap":138},[143,165143,165144,165146,165148,165150,165152,165154,165156,165158,165160],{"class":145,"line":146},[143,165145,11819],{"class":149},[143,165147,160],{"class":755},[143,165149,5348],{"class":149},[143,165151,771],{"class":280},[143,165153,13335],{"class":149},[143,165155,1122],{"class":280},[143,165157,13335],{"class":149},[143,165159,1116],{"class":280},[143,165161,348],{"class":149},[143,165163,165164,165166,165168,165170,165172,165174,165176,165178,165180],{"class":145,"line":35},[143,165165,11845],{"class":149},[143,165167,160],{"class":755},[143,165169,5348],{"class":149},[143,165171,1116],{"class":280},[143,165173,13335],{"class":149},[143,165175,1334],{"class":280},[143,165177,13335],{"class":149},[143,165179,1360],{"class":280},[143,165181,348],{"class":149},[143,165183,165184],{"class":145,"line":46},[143,165185,3300],{"emptyLinePlaceholder":976},[143,165187,165188,165190,165193,165195,165198],{"class":145,"line":293},[143,165189,31313],{"class":280},[143,165191,165192],{"class":149},"(a ",[143,165194,1394],{"class":755},[143,165196,165197],{"class":149}," b)  ",[143,165199,165200],{"class":266},"# 交集\n",[143,165202,165203,165205,165207,165209,165211],{"class":145,"line":306},[143,165204,31313],{"class":280},[143,165206,165192],{"class":149},[143,165208,1960],{"class":755},[143,165210,165197],{"class":149},[143,165212,165213],{"class":266},"# 并集\n",[143,165215,165216,165218,165220,165222,165224],{"class":145,"line":319},[143,165217,31313],{"class":280},[143,165219,165192],{"class":149},[143,165221,1573],{"class":755},[143,165223,165197],{"class":149},[143,165225,165226],{"class":266},"# 差集\n",[14,165228,165230],{"id":165229},"_610-字典dict","6.10 字典dict",[63,165232,165233],{},"字典通过 key-value 保存数据。",[133,165235,165237],{"className":31276,"code":165236,"language":31278,"meta":138,"style":138},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[140,165238,165239,165247,165257,165268,165278],{"__ignoreMap":138},[143,165240,165241,165243,165245],{"class":145,"line":146},[143,165242,150205],{"class":149},[143,165244,160],{"class":755},[143,165246,275],{"class":149},[143,165248,165249,165251,165253,165255],{"class":145,"line":35},[143,165250,147744],{"class":163},[143,165252,284],{"class":149},[143,165254,150612],{"class":163},[143,165256,32364],{"class":149},[143,165258,165259,165262,165264,165266],{"class":145,"line":46},[143,165260,165261],{"class":163},"    \"age\"",[143,165263,284],{"class":149},[143,165265,1691],{"class":280},[143,165267,32364],{"class":149},[143,165269,165270,165273,165275],{"class":145,"line":293},[143,165271,165272],{"class":163},"    \"score\"",[143,165274,284],{"class":149},[143,165276,165277],{"class":280},"95\n",[143,165279,165280],{"class":145,"line":306},[143,165281,348],{"class":149},[63,165283,165284],{},"获取值：",[133,165286,165288],{"className":31276,"code":165287,"language":31278,"meta":138,"style":138},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[140,165289,165290,165301],{"__ignoreMap":138},[143,165291,165292,165294,165297,165299],{"class":145,"line":146},[143,165293,31313],{"class":280},[143,165295,165296],{"class":149},"(student[",[143,165298,63562],{"class":163},[143,165300,5557],{"class":149},[143,165302,165303,165305,165308,165310],{"class":145,"line":35},[143,165304,31313],{"class":280},[143,165306,165307],{"class":149},"(student.get(",[143,165309,63562],{"class":163},[143,165311,31395],{"class":149},[63,165313,16287],{},[133,165315,165317],{"className":31276,"code":165316,"language":31278,"meta":138,"style":138},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[140,165318,165319,165332],{"__ignoreMap":138},[143,165320,165321,165323,165326,165329],{"class":145,"line":146},[143,165322,153583],{"class":149},[143,165324,165325],{"class":163},"\"address\"",[143,165327,165328],{"class":149},"]     ",[143,165330,165331],{"class":266},"# key不存在会报错\n",[143,165333,165334,165337,165339,165341],{"class":145,"line":35},[143,165335,165336],{"class":149},"student.get(",[143,165338,165325],{"class":163},[143,165340,14614],{"class":149},[143,165342,165343],{"class":266},"# key不存在返回None\n",[63,165345,165346],{},"设置默认值：",[133,165348,165350],{"className":31276,"code":165349,"language":31278,"meta":138,"style":138},"print(student.get(\"address\", \"未知\"))\n",[140,165351,165352],{"__ignoreMap":138},[143,165353,165354,165356,165358,165360,165362,165365],{"class":145,"line":146},[143,165355,31313],{"class":280},[143,165357,165307],{"class":149},[143,165359,165325],{"class":163},[143,165361,13335],{"class":149},[143,165363,165364],{"class":163},"\"未知\"",[143,165366,31395],{"class":149},[63,165368,165369],{},"新增和修改：",[133,165371,165373],{"className":31276,"code":165372,"language":31278,"meta":138,"style":138},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[140,165374,165375,165388],{"__ignoreMap":138},[143,165376,165377,165379,165381,165383,165385],{"class":145,"line":146},[143,165378,153583],{"class":149},[143,165380,70005],{"class":163},[143,165382,5343],{"class":149},[143,165384,160],{"class":755},[143,165386,165387],{"class":280}," 19\n",[143,165389,165390,165392,165394,165396,165398],{"class":145,"line":35},[143,165391,153583],{"class":149},[143,165393,165325],{"class":163},[143,165395,5343],{"class":149},[143,165397,160],{"class":755},[143,165399,165400],{"class":163}," \"北京\"\n",[63,165402,165403],{},"删除：",[133,165405,165407],{"className":31276,"code":165406,"language":31278,"meta":138,"style":138},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[140,165408,165409,165422,165432],{"__ignoreMap":138},[143,165410,165411,165413,165415,165418,165420],{"class":145,"line":146},[143,165412,156082],{"class":149},[143,165414,160],{"class":755},[143,165416,165417],{"class":149}," student.pop(",[143,165419,152196],{"class":163},[143,165421,1055],{"class":149},[143,165423,165424,165426,165428,165430],{"class":145,"line":35},[143,165425,164107],{"class":755},[143,165427,152873],{"class":149},[143,165429,70005],{"class":163},[143,165431,34144],{"class":149},[143,165433,165434],{"class":145,"line":46},[143,165435,165436],{"class":149},"student.clear()\n",[14,165438,165440],{"id":165439},"_611-字典遍历","6.11 字典遍历",[63,165442,165443],{},"遍历 key：",[133,165445,165447],{"className":31276,"code":165446,"language":31278,"meta":138,"style":138},"for key in student:\n    print(key, student[key])\n",[140,165448,165449,165461],{"__ignoreMap":138},[143,165450,165451,165453,165456,165458],{"class":145,"line":146},[143,165452,3925],{"class":755},[143,165454,165455],{"class":149}," key ",[143,165457,26941],{"class":755},[143,165459,165460],{"class":149}," student:\n",[143,165462,165463,165465],{"class":145,"line":35},[143,165464,32197],{"class":280},[143,165466,165467],{"class":149},"(key, student[key])\n",[63,165469,165470],{},"遍历 value：",[133,165472,165474],{"className":31276,"code":165473,"language":31278,"meta":138,"style":138},"for value in student.values():\n    print(value)\n",[140,165475,165476,165488],{"__ignoreMap":138},[143,165477,165478,165480,165483,165485],{"class":145,"line":146},[143,165479,3925],{"class":755},[143,165481,165482],{"class":149}," value ",[143,165484,26941],{"class":755},[143,165486,165487],{"class":149}," student.values():\n",[143,165489,165490,165492],{"class":145,"line":35},[143,165491,32197],{"class":280},[143,165493,165494],{"class":149},"(value)\n",[63,165496,165497],{},"遍历 key 和 value：",[133,165499,165501],{"className":31276,"code":165500,"language":31278,"meta":138,"style":138},"for key, value in student.items():\n    print(key, value)\n",[140,165502,165503,165515],{"__ignoreMap":138},[143,165504,165505,165507,165510,165512],{"class":145,"line":146},[143,165506,3925],{"class":755},[143,165508,165509],{"class":149}," key, value ",[143,165511,26941],{"class":755},[143,165513,165514],{"class":149}," student.items():\n",[143,165516,165517,165519],{"class":145,"line":35},[143,165518,32197],{"class":280},[143,165520,165521],{"class":149},"(key, value)\n",[14,165523,165525],{"id":165524},"_612-嵌套容器","6.12 嵌套容器",[63,165527,165528],{},"列表中保存字典，是项目中最常见的结构之一。",[133,165530,165532],{"className":31276,"code":165531,"language":31278,"meta":138,"style":138},"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",[140,165533,165534,165542,165570,165598,165626,165630,165634,165644],{"__ignoreMap":138},[143,165535,165536,165538,165540],{"class":145,"line":146},[143,165537,160440],{"class":149},[143,165539,160],{"class":755},[143,165541,56330],{"class":149},[143,165543,165544,165546,165548,165550,165552,165554,165556,165558,165560,165562,165564,165566,165568],{"class":145,"line":35},[143,165545,149109],{"class":149},[143,165547,63562],{"class":163},[143,165549,284],{"class":149},[143,165551,150612],{"class":163},[143,165553,13335],{"class":149},[143,165555,70005],{"class":163},[143,165557,284],{"class":149},[143,165559,1691],{"class":280},[143,165561,13335],{"class":149},[143,165563,152196],{"class":163},[143,165565,284],{"class":149},[143,165567,2027],{"class":280},[143,165569,5830],{"class":149},[143,165571,165572,165574,165576,165578,165580,165582,165584,165586,165588,165590,165592,165594,165596],{"class":145,"line":46},[143,165573,149109],{"class":149},[143,165575,63562],{"class":163},[143,165577,284],{"class":149},[143,165579,151660],{"class":163},[143,165581,13335],{"class":149},[143,165583,70005],{"class":163},[143,165585,284],{"class":149},[143,165587,1666],{"class":280},[143,165589,13335],{"class":149},[143,165591,152196],{"class":163},[143,165593,284],{"class":149},[143,165595,1852],{"class":280},[143,165597,5830],{"class":149},[143,165599,165600,165602,165604,165606,165608,165610,165612,165614,165616,165618,165620,165622,165624],{"class":145,"line":293},[143,165601,149109],{"class":149},[143,165603,63562],{"class":163},[143,165605,284],{"class":149},[143,165607,160455],{"class":163},[143,165609,13335],{"class":149},[143,165611,70005],{"class":163},[143,165613,284],{"class":149},[143,165615,1716],{"class":280},[143,165617,13335],{"class":149},[143,165619,152196],{"class":163},[143,165621,284],{"class":149},[143,165623,1447],{"class":280},[143,165625,5830],{"class":149},[143,165627,165628],{"class":145,"line":306},[143,165629,34144],{"class":149},[143,165631,165632],{"class":145,"line":319},[143,165633,3300],{"emptyLinePlaceholder":976},[143,165635,165636,165638,165640,165642],{"class":145,"line":332},[143,165637,3925],{"class":755},[143,165639,152861],{"class":149},[143,165641,26941],{"class":755},[143,165643,152866],{"class":149},[143,165645,165646,165648,165650,165652,165655,165657],{"class":145,"line":345},[143,165647,32197],{"class":280},[143,165649,165296],{"class":149},[143,165651,63562],{"class":163},[143,165653,165654],{"class":149},"], student[",[143,165656,152196],{"class":163},[143,165658,5557],{"class":149},[63,165660,165661],{},"统计平均分：",[133,165663,165665],{"className":31276,"code":165664,"language":31278,"meta":138,"style":138},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[140,165666,165667,165675,165679,165689,165701,165705,165720],{"__ignoreMap":138},[143,165668,165669,165671,165673],{"class":145,"line":146},[143,165670,157984],{"class":149},[143,165672,160],{"class":755},[143,165674,48231],{"class":280},[143,165676,165677],{"class":145,"line":35},[143,165678,3300],{"emptyLinePlaceholder":976},[143,165680,165681,165683,165685,165687],{"class":145,"line":46},[143,165682,3925],{"class":755},[143,165684,152861],{"class":149},[143,165686,26941],{"class":755},[143,165688,152866],{"class":149},[143,165690,165691,165693,165695,165697,165699],{"class":145,"line":293},[143,165692,160031],{"class":149},[143,165694,10377],{"class":755},[143,165696,152873],{"class":149},[143,165698,152196],{"class":163},[143,165700,34144],{"class":149},[143,165702,165703],{"class":145,"line":306},[143,165704,3300],{"emptyLinePlaceholder":976},[143,165706,165707,165709,165711,165713,165715,165717],{"class":145,"line":319},[143,165708,164498],{"class":149},[143,165710,160],{"class":755},[143,165712,164503],{"class":149},[143,165714,1625],{"class":755},[143,165716,8231],{"class":280},[143,165718,165719],{"class":149},"(students)\n",[143,165721,165722,165724,165726,165728,165730,165732,165734,165736,165738,165740],{"class":145,"line":332},[143,165723,31313],{"class":280},[143,165725,1049],{"class":149},[143,165727,1098],{"class":755},[143,165729,164521],{"class":163},[143,165731,1936],{"class":280},[143,165733,164526],{"class":149},[143,165735,157883],{"class":755},[143,165737,366],{"class":280},[143,165739,1292],{"class":163},[143,165741,1055],{"class":149},[63,165743,165744],{},"查找学生：",[133,165746,165748],{"className":31276,"code":165747,"language":31278,"meta":138,"style":138},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[140,165749,165750,165765,165769,165779,165793,165799,165803,165809],{"__ignoreMap":138},[143,165751,165752,165754,165756,165758,165760,165763],{"class":145,"line":146},[143,165753,112453],{"class":149},[143,165755,160],{"class":755},[143,165757,61488],{"class":280},[143,165759,1049],{"class":149},[143,165761,165762],{"class":163},"\"请输入学生姓名:\"",[143,165764,1055],{"class":149},[143,165766,165767],{"class":145,"line":35},[143,165768,3300],{"emptyLinePlaceholder":976},[143,165770,165771,165773,165775,165777],{"class":145,"line":46},[143,165772,3925],{"class":755},[143,165774,152861],{"class":149},[143,165776,26941],{"class":755},[143,165778,152866],{"class":149},[143,165780,165781,165783,165785,165787,165789,165791],{"class":145,"line":293},[143,165782,4001],{"class":755},[143,165784,152873],{"class":149},[143,165786,63562],{"class":163},[143,165788,5343],{"class":149},[143,165790,3849],{"class":755},[143,165792,161156],{"class":149},[143,165794,165795,165797],{"class":145,"line":306},[143,165796,33349],{"class":280},[143,165798,150766],{"class":149},[143,165800,165801],{"class":145,"line":319},[143,165802,32525],{"class":755},[143,165804,165805,165807],{"class":145,"line":332},[143,165806,2602],{"class":755},[143,165808,4639],{"class":149},[143,165810,165811,165813,165815,165818],{"class":145,"line":345},[143,165812,32197],{"class":280},[143,165814,1049],{"class":149},[143,165816,165817],{"class":163},"\"没有找到\"",[143,165819,1055],{"class":149},[14,165821,165823],{"id":165822},"_613-容器通用操作","6.13 容器通用操作",[63,165825,165826],{},"长度：",[133,165828,165830],{"className":31276,"code":165829,"language":31278,"meta":138,"style":138},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[140,165831,165832,165851,165861],{"__ignoreMap":138},[143,165833,165834,165836,165839,165841,165843,165845,165847,165849],{"class":145,"line":146},[143,165835,8258],{"class":280},[143,165837,165838],{"class":149},"([",[143,165840,771],{"class":280},[143,165842,13335],{"class":149},[143,165844,1122],{"class":280},[143,165846,13335],{"class":149},[143,165848,1116],{"class":280},[143,165850,5557],{"class":149},[143,165852,165853,165855,165857,165859],{"class":145,"line":35},[143,165854,8258],{"class":280},[143,165856,1049],{"class":149},[143,165858,156604],{"class":163},[143,165860,1055],{"class":149},[143,165862,165863,165865,165868,165870,165872,165874],{"class":145,"line":46},[143,165864,8258],{"class":280},[143,165866,165867],{"class":149},"({",[143,165869,63562],{"class":163},[143,165871,284],{"class":149},[143,165873,150612],{"class":163},[143,165875,165876],{"class":149},"})\n",[63,165878,165879],{},"最大最小：",[133,165881,165883],{"className":31276,"code":165882,"language":31278,"meta":138,"style":138},"max([1, 2, 3])\nmin([1, 2, 3])\n",[140,165884,165885,165903],{"__ignoreMap":138},[143,165886,165887,165889,165891,165893,165895,165897,165899,165901],{"class":145,"line":146},[143,165888,6915],{"class":280},[143,165890,165838],{"class":149},[143,165892,771],{"class":280},[143,165894,13335],{"class":149},[143,165896,1122],{"class":280},[143,165898,13335],{"class":149},[143,165900,1116],{"class":280},[143,165902,5557],{"class":149},[143,165904,165905,165908,165910,165912,165914,165916,165918,165920],{"class":145,"line":35},[143,165906,165907],{"class":280},"min",[143,165909,165838],{"class":149},[143,165911,771],{"class":280},[143,165913,13335],{"class":149},[143,165915,1122],{"class":280},[143,165917,13335],{"class":149},[143,165919,1116],{"class":280},[143,165921,5557],{"class":149},[63,165923,165924],{},"求和：",[133,165926,165928],{"className":31276,"code":165927,"language":31278,"meta":138,"style":138},"sum([1, 2, 3])\n",[140,165929,165930],{"__ignoreMap":138},[143,165931,165932,165935,165937,165939,165941,165943,165945,165947],{"class":145,"line":146},[143,165933,165934],{"class":280},"sum",[143,165936,165838],{"class":149},[143,165938,771],{"class":280},[143,165940,13335],{"class":149},[143,165942,1122],{"class":280},[143,165944,13335],{"class":149},[143,165946,1116],{"class":280},[143,165948,5557],{"class":149},[63,165950,164195],{},[133,165952,165954],{"className":31276,"code":165953,"language":31278,"meta":138,"style":138},"sorted([3, 1, 2])\n",[140,165955,165956],{"__ignoreMap":138},[143,165957,165958,165961,165963,165965,165967,165969,165971,165973],{"class":145,"line":146},[143,165959,165960],{"class":280},"sorted",[143,165962,165838],{"class":149},[143,165964,1116],{"class":280},[143,165966,13335],{"class":149},[143,165968,771],{"class":280},[143,165970,13335],{"class":149},[143,165972,1122],{"class":280},[143,165974,5557],{"class":149},[63,165976,165977],{},"类型转换：",[133,165979,165981],{"className":31276,"code":165980,"language":31278,"meta":138,"style":138},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[140,165982,165983,165993,166011],{"__ignoreMap":138},[143,165984,165985,165987,165989,165991],{"class":145,"line":146},[143,165986,154794],{"class":280},[143,165988,1049],{"class":149},[143,165990,156604],{"class":163},[143,165992,1055],{"class":149},[143,165994,165995,165997,165999,166001,166003,166005,166007,166009],{"class":145,"line":35},[143,165996,155989],{"class":280},[143,165998,165838],{"class":149},[143,166000,771],{"class":280},[143,166002,13335],{"class":149},[143,166004,1122],{"class":280},[143,166006,13335],{"class":149},[143,166008,1116],{"class":280},[143,166010,5557],{"class":149},[143,166012,166013,166015,166017,166019,166021,166023,166025,166027,166029,166031],{"class":145,"line":46},[143,166014,156014],{"class":280},[143,166016,165838],{"class":149},[143,166018,771],{"class":280},[143,166020,13335],{"class":149},[143,166022,771],{"class":280},[143,166024,13335],{"class":149},[143,166026,1122],{"class":280},[143,166028,13335],{"class":149},[143,166030,1116],{"class":280},[143,166032,5557],{"class":149},[63,166034,166035],{},"成员判断：",[133,166037,166039],{"className":31276,"code":166038,"language":31278,"meta":138,"style":138},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[140,166040,166041,166058,166082],{"__ignoreMap":138},[143,166042,166043,166045,166047,166050,166053,166056],{"class":145,"line":146},[143,166044,31313],{"class":280},[143,166046,1049],{"class":149},[143,166048,166049],{"class":163},"\"a\"",[143,166051,166052],{"class":755}," in",[143,166054,166055],{"class":163}," \"abc\"",[143,166057,1055],{"class":149},[143,166059,166060,166062,166064,166066,166068,166070,166072,166074,166076,166078,166080],{"class":145,"line":35},[143,166061,31313],{"class":280},[143,166063,1049],{"class":149},[143,166065,771],{"class":280},[143,166067,166052],{"class":755},[143,166069,53113],{"class":149},[143,166071,771],{"class":280},[143,166073,13335],{"class":149},[143,166075,1122],{"class":280},[143,166077,13335],{"class":149},[143,166079,1116],{"class":280},[143,166081,5557],{"class":149},[143,166083,166084,166086,166088,166090,166092,166094,166096,166098,166100],{"class":145,"line":46},[143,166085,31313],{"class":280},[143,166087,1049],{"class":149},[143,166089,63562],{"class":163},[143,166091,166052],{"class":755},[143,166093,5348],{"class":149},[143,166095,63562],{"class":163},[143,166097,284],{"class":149},[143,166099,150612],{"class":163},[143,166101,165876],{"class":149},[14,166103,166105],{"id":166104},"_614-推导式","6.14 推导式",[63,166107,166108],{},"推导式用于快速生成容器。",[63,166110,166111],{},"列表推导式：",[133,166113,166115],{"className":31276,"code":166114,"language":31278,"meta":138,"style":138},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[140,166116,166117,166144],{"__ignoreMap":138},[143,166118,166119,166121,166123,166126,166128,166130,166132,166134,166136,166138,166140,166142],{"class":145,"line":146},[143,166120,164824],{"class":149},[143,166122,160],{"class":755},[143,166124,166125],{"class":149}," [i ",[143,166127,3925],{"class":755},[143,166129,10338],{"class":149},[143,166131,26941],{"class":755},[143,166133,33341],{"class":280},[143,166135,1049],{"class":149},[143,166137,771],{"class":280},[143,166139,13335],{"class":149},[143,166141,1385],{"class":280},[143,166143,98176],{"class":149},[143,166145,166146,166148],{"class":145,"line":35},[143,166147,31313],{"class":280},[143,166149,165040],{"class":149},[63,166151,166152],{},"带条件：",[133,166154,166156],{"className":31276,"code":166155,"language":31278,"meta":138,"style":138},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[140,166157,166158,166199],{"__ignoreMap":138},[143,166159,166160,166163,166165,166167,166169,166171,166173,166175,166177,166179,166181,166183,166185,166187,166189,166191,166193,166195,166197],{"class":145,"line":146},[143,166161,166162],{"class":149},"even_nums ",[143,166164,160],{"class":755},[143,166166,166125],{"class":149},[143,166168,3925],{"class":755},[143,166170,10338],{"class":149},[143,166172,26941],{"class":755},[143,166174,33341],{"class":280},[143,166176,1049],{"class":149},[143,166178,771],{"class":280},[143,166180,13335],{"class":149},[143,166182,1378],{"class":280},[143,166184,14614],{"class":149},[143,166186,2434],{"class":755},[143,166188,10338],{"class":149},[143,166190,1369],{"class":755},[143,166192,15654],{"class":280},[143,166194,102435],{"class":755},[143,166196,4993],{"class":280},[143,166198,34144],{"class":149},[143,166200,166201,166203],{"class":145,"line":35},[143,166202,31313],{"class":280},[143,166204,166205],{"class":149},"(even_nums)\n",[63,166207,166208],{},"字典推导式：",[133,166210,166212],{"className":31276,"code":166211,"language":31278,"meta":138,"style":138},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[140,166213,166214,166248],{"__ignoreMap":138},[143,166215,166216,166219,166221,166224,166226,166228,166231,166233,166235,166237,166239,166241,166243,166245],{"class":145,"line":146},[143,166217,166218],{"class":149},"squares ",[143,166220,160],{"class":755},[143,166222,166223],{"class":149}," {i: i ",[143,166225,11561],{"class":755},[143,166227,15654],{"class":280},[143,166229,166230],{"class":755}," for",[143,166232,10338],{"class":149},[143,166234,26941],{"class":755},[143,166236,33341],{"class":280},[143,166238,1049],{"class":149},[143,166240,771],{"class":280},[143,166242,13335],{"class":149},[143,166244,1385],{"class":280},[143,166246,166247],{"class":149},")}\n",[143,166249,166250,166252],{"class":145,"line":35},[143,166251,31313],{"class":280},[143,166253,166254],{"class":149},"(squares)\n",[63,166256,166257],{},"集合推导式：",[133,166259,166261],{"className":31276,"code":166260,"language":31278,"meta":138,"style":138},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[140,166262,166263,166284],{"__ignoreMap":138},[143,166264,166265,166268,166270,166273,166275,166277,166279,166282],{"class":145,"line":146},[143,166266,166267],{"class":149},"chars ",[143,166269,160],{"class":755},[143,166271,166272],{"class":149}," {ch ",[143,166274,3925],{"class":755},[143,166276,160416],{"class":149},[143,166278,26941],{"class":755},[143,166280,166281],{"class":163}," \"hello\"",[143,166283,348],{"class":149},[143,166285,166286,166288],{"class":145,"line":35},[143,166287,31313],{"class":280},[143,166289,166290],{"class":149},"(chars)\n",[63,166292,166293],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166295,166297],{"id":166296},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[133,166299,166301],{"className":31276,"code":166300,"language":31278,"meta":138,"style":138},"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",[140,166302,166303,166311,166331,166351,166371,166391,166395,166399,166407,166421,166430,166434,166444,166456,166460,166480,166489,166493,166509,166514,166518,166532,166536,166558,166594],{"__ignoreMap":138},[143,166304,166305,166307,166309],{"class":145,"line":146},[143,166306,160440],{"class":149},[143,166308,160],{"class":755},[143,166310,56330],{"class":149},[143,166312,166313,166315,166317,166319,166321,166323,166325,166327,166329],{"class":145,"line":35},[143,166314,149109],{"class":149},[143,166316,63562],{"class":163},[143,166318,284],{"class":149},[143,166320,150612],{"class":163},[143,166322,13335],{"class":149},[143,166324,152196],{"class":163},[143,166326,284],{"class":149},[143,166328,2027],{"class":280},[143,166330,5830],{"class":149},[143,166332,166333,166335,166337,166339,166341,166343,166345,166347,166349],{"class":145,"line":46},[143,166334,149109],{"class":149},[143,166336,63562],{"class":163},[143,166338,284],{"class":149},[143,166340,151660],{"class":163},[143,166342,13335],{"class":149},[143,166344,152196],{"class":163},[143,166346,284],{"class":149},[143,166348,1852],{"class":280},[143,166350,5830],{"class":149},[143,166352,166353,166355,166357,166359,166361,166363,166365,166367,166369],{"class":145,"line":293},[143,166354,149109],{"class":149},[143,166356,63562],{"class":163},[143,166358,284],{"class":149},[143,166360,160455],{"class":163},[143,166362,13335],{"class":149},[143,166364,152196],{"class":163},[143,166366,284],{"class":149},[143,166368,1447],{"class":280},[143,166370,5830],{"class":149},[143,166372,166373,166375,166377,166379,166381,166383,166385,166387,166389],{"class":145,"line":306},[143,166374,149109],{"class":149},[143,166376,63562],{"class":163},[143,166378,284],{"class":149},[143,166380,164034],{"class":163},[143,166382,13335],{"class":149},[143,166384,152196],{"class":163},[143,166386,284],{"class":149},[143,166388,1923],{"class":280},[143,166390,5830],{"class":149},[143,166392,166393],{"class":145,"line":319},[143,166394,34144],{"class":149},[143,166396,166397],{"class":145,"line":332},[143,166398,3300],{"emptyLinePlaceholder":976},[143,166400,166401,166403,166405],{"class":145,"line":345},[143,166402,157984],{"class":149},[143,166404,160],{"class":755},[143,166406,48231],{"class":280},[143,166408,166409,166412,166414,166417,166419],{"class":145,"line":701},[143,166410,166411],{"class":149},"max_student ",[143,166413,160],{"class":755},[143,166415,166416],{"class":149}," students[",[143,166418,1234],{"class":280},[143,166420,34144],{"class":149},[143,166422,166423,166426,166428],{"class":145,"line":707},[143,166424,166425],{"class":149},"passed ",[143,166427,160],{"class":755},[143,166429,52726],{"class":149},[143,166431,166432],{"class":145,"line":727},[143,166433,3300],{"emptyLinePlaceholder":976},[143,166435,166436,166438,166440,166442],{"class":145,"line":2518},[143,166437,3925],{"class":755},[143,166439,152861],{"class":149},[143,166441,26941],{"class":755},[143,166443,152866],{"class":149},[143,166445,166446,166448,166450,166452,166454],{"class":145,"line":2524},[143,166447,160031],{"class":149},[143,166449,10377],{"class":755},[143,166451,152873],{"class":149},[143,166453,152196],{"class":163},[143,166455,34144],{"class":149},[143,166457,166458],{"class":145,"line":2529},[143,166459,3300],{"emptyLinePlaceholder":976},[143,166461,166462,166464,166466,166468,166470,166472,166475,166477],{"class":145,"line":2543},[143,166463,4001],{"class":755},[143,166465,152873],{"class":149},[143,166467,152196],{"class":163},[143,166469,5343],{"class":149},[143,166471,1998],{"class":755},[143,166473,166474],{"class":149}," max_student[",[143,166476,152196],{"class":163},[143,166478,166479],{"class":149},"]:\n",[143,166481,166482,166485,166487],{"class":145,"line":2548},[143,166483,166484],{"class":149},"        max_student ",[143,166486,160],{"class":755},[143,166488,152889],{"class":149},[143,166490,166491],{"class":145,"line":2554},[143,166492,3300],{"emptyLinePlaceholder":976},[143,166494,166495,166497,166499,166501,166503,166505,166507],{"class":145,"line":2575},[143,166496,4001],{"class":755},[143,166498,152873],{"class":149},[143,166500,152196],{"class":163},[143,166502,5343],{"class":149},[143,166504,2611],{"class":755},[143,166506,158561],{"class":280},[143,166508,4639],{"class":149},[143,166510,166511],{"class":145,"line":2580},[143,166512,166513],{"class":149},"        passed.append(student)\n",[143,166515,166516],{"class":145,"line":2594},[143,166517,3300],{"emptyLinePlaceholder":976},[143,166519,166520,166522,166524,166526,166528,166530],{"class":145,"line":2599},[143,166521,164498],{"class":149},[143,166523,160],{"class":755},[143,166525,164503],{"class":149},[143,166527,1625],{"class":755},[143,166529,8231],{"class":280},[143,166531,165719],{"class":149},[143,166533,166534],{"class":145,"line":2628},[143,166535,3300],{"emptyLinePlaceholder":976},[143,166537,166538,166540,166542,166544,166546,166548,166550,166552,166554,166556],{"class":145,"line":2633},[143,166539,31313],{"class":280},[143,166541,1049],{"class":149},[143,166543,1098],{"class":755},[143,166545,164521],{"class":163},[143,166547,1936],{"class":280},[143,166549,164526],{"class":149},[143,166551,157883],{"class":755},[143,166553,366],{"class":280},[143,166555,1292],{"class":163},[143,166557,1055],{"class":149},[143,166559,166560,166562,166564,166566,166569,166571,166574,166576,166578,166580,166582,166584,166586,166588,166590,166592],{"class":145,"line":2650},[143,166561,31313],{"class":280},[143,166563,1049],{"class":149},[143,166565,1098],{"class":755},[143,166567,166568],{"class":163},"\"最高分学生:",[143,166570,1936],{"class":280},[143,166572,166573],{"class":149},"max_student[",[143,166575,153606],{"class":163},[143,166577,1979],{"class":149},[143,166579,366],{"class":280},[143,166581,5348],{"class":280},[143,166583,166573],{"class":149},[143,166585,153644],{"class":163},[143,166587,1979],{"class":149},[143,166589,366],{"class":280},[143,166591,1292],{"class":163},[143,166593,1055],{"class":149},[143,166595,166596,166598,166600,166602,166605,166608,166611,166613,166615],{"class":145,"line":2655},[143,166597,31313],{"class":280},[143,166599,1049],{"class":149},[143,166601,1098],{"class":755},[143,166603,166604],{"class":163},"\"及格人数:",[143,166606,166607],{"class":280},"{len",[143,166609,166610],{"class":149},"(passed)",[143,166612,366],{"class":280},[143,166614,1292],{"class":163},[143,166616,1055],{"class":149},[14,166618,166620],{"id":166619},"_616-易错点","6.16 易错点",[19,166622,166623,166626,166629,166632,166638,166647],{},[22,166624,166625],{},"列表可变，元组和字符串不可变。",[22,166627,166628],{},"切片结束位置不包含。",[22,166630,166631],{},"字典通过 key 取值，不是通过索引。",[22,166633,166634,166635,29283],{},"空集合要用 ",[140,166636,166637],{},"set()",[22,166639,105241,166640,166643,166644,29283],{},[140,166641,166642],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[140,166645,166646],{},"get()",[22,166648,166649],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166651,166653],{"id":166652},"_617-本章练习","6.17 本章练习",[19,166655,166656,166659,166662,166665,166668],{},[22,166657,166658],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[22,166660,166661],{},"输入一句话，统计每个字符出现次数。",[22,166663,166664],{},"使用集合去除列表中的重复元素。",[22,166666,166667],{},"使用字典保存一个学生的信息，并实现修改成绩。",[22,166669,166670],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[954,166672,166673],{},"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":138,"searchDepth":35,"depth":35,"links":166675},[166676,166677,166678,166679,166680,166681,166682,166683,166684,166685,166686,166687,166688,166689,166690,166691,166692],{"id":163656,"depth":35,"text":163657},{"id":163773,"depth":35,"text":163774},{"id":163863,"depth":35,"text":163864},{"id":163987,"depth":35,"text":163988},{"id":164350,"depth":35,"text":164351},{"id":164537,"depth":35,"text":164538},{"id":164656,"depth":35,"text":164657},{"id":164798,"depth":35,"text":164799},{"id":164985,"depth":35,"text":164986},{"id":165229,"depth":35,"text":165230},{"id":165439,"depth":35,"text":165440},{"id":165524,"depth":35,"text":165525},{"id":165822,"depth":35,"text":165823},{"id":166104,"depth":35,"text":166105},{"id":166296,"depth":35,"text":166297},{"id":166619,"depth":35,"text":166620},{"id":166652,"depth":35,"text":166653},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163648,"description":973},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166699,"title":166700,"body":166701,"description":973,"extension":974,"meta":168873,"navigation":976,"path":168874,"seo":168875,"stem":168876,"__hash__":168877},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166702,"toc":168848},[166703,166706,166710,166713,166793,166796,166817,166820,166824,166827,166889,166892,166909,166913,166916,166961,166963,166971,166975,166978,167060,167063,167066,167091,167094,167117,167121,167124,167126,167188,167191,167193,167244,167248,167252,167258,167363,167367,167373,167444,167448,167451,167519,167522,167602,167606,167612,167648,167651,167654,167764,167770,167774,167777,167849,167852,167856,167860,167865,167927,167931,167936,168004,168008,168013,168129,168133,168136,168216,168219,168223,168226,168330,168332,168347,168350,168354,168492,168500,168504,168506,168517,168519,168777,168781,168813,168817,168845],[10,166704,166700],{"id":166705},"_7-函数进阶",[14,166707,166709],{"id":166708},"_71-多返回值","7.1 多返回值",[63,166711,166712],{},"Python 函数可以返回多个值，本质上返回的是元组。",[133,166714,166716],{"className":31276,"code":166715,"language":31278,"meta":138,"style":138},"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",[140,166717,166718,166727,166735,166743,166752,166759,166763,166767,166776,166782],{"__ignoreMap":138},[143,166719,166720,166722,166725],{"class":145,"line":146},[143,166721,32845],{"class":755},[143,166723,166724],{"class":156}," get_info",[143,166726,32851],{"class":149},[143,166728,166729,166731,166733],{"class":145,"line":35},[143,166730,153094],{"class":149},[143,166732,160],{"class":755},[143,166734,150077],{"class":163},[143,166736,166737,166739,166741],{"class":145,"line":46},[143,166738,153110],{"class":149},[143,166740,160],{"class":755},[143,166742,147275],{"class":280},[143,166744,166745,166747,166749],{"class":145,"line":293},[143,166746,153125],{"class":149},[143,166748,160],{"class":755},[143,166750,166751],{"class":280}," 95\n",[143,166753,166754,166756],{"class":145,"line":306},[143,166755,4990],{"class":755},[143,166757,166758],{"class":149}," name, age, score\n",[143,166760,166761],{"class":145,"line":319},[143,166762,3300],{"emptyLinePlaceholder":976},[143,166764,166765],{"class":145,"line":332},[143,166766,3300],{"emptyLinePlaceholder":976},[143,166768,166769,166771,166773],{"class":145,"line":345},[143,166770,162030],{"class":149},[143,166772,160],{"class":755},[143,166774,166775],{"class":149}," get_info()\n",[143,166777,166778,166780],{"class":145,"line":701},[143,166779,31313],{"class":280},[143,166781,77464],{"class":149},[143,166783,166784,166786,166788,166790],{"class":145,"line":707},[143,166785,31313],{"class":280},[143,166787,1049],{"class":149},[143,166789,752],{"class":280},[143,166791,166792],{"class":149},"(result))\n",[63,166794,166795],{},"可以直接解包：",[133,166797,166799],{"className":31276,"code":166798,"language":31278,"meta":138,"style":138},"name, age, score = get_info()\nprint(name, age, score)\n",[140,166800,166801,166810],{"__ignoreMap":138},[143,166802,166803,166806,166808],{"class":145,"line":146},[143,166804,166805],{"class":149},"name, age, score ",[143,166807,160],{"class":755},[143,166809,166775],{"class":149},[143,166811,166812,166814],{"class":145,"line":35},[143,166813,31313],{"class":280},[143,166815,166816],{"class":149},"(name, age, score)\n",[63,166818,166819],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166821,166823],{"id":166822},"_72-位置参数","7.2 位置参数",[63,166825,166826],{},"位置参数按顺序传递。",[133,166828,166830],{"className":31276,"code":166829,"language":31278,"meta":138,"style":138},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[140,166831,166832,166840,166868,166872,166876],{"__ignoreMap":138},[143,166833,166834,166836,166838],{"class":145,"line":146},[143,166835,32845],{"class":755},[143,166837,150096],{"class":156},[143,166839,150099],{"class":149},[143,166841,166842,166844,166846,166848,166850,166852,166854,166856,166858,166860,166862,166864,166866],{"class":145,"line":35},[143,166843,32197],{"class":280},[143,166845,1049],{"class":149},[143,166847,1098],{"class":755},[143,166849,150110],{"class":163},[143,166851,1936],{"class":280},[143,166853,80688],{"class":149},[143,166855,366],{"class":280},[143,166857,150119],{"class":163},[143,166859,1936],{"class":280},[143,166861,71102],{"class":149},[143,166863,366],{"class":280},[143,166865,150128],{"class":163},[143,166867,1055],{"class":149},[143,166869,166870],{"class":145,"line":46},[143,166871,3300],{"emptyLinePlaceholder":976},[143,166873,166874],{"class":145,"line":293},[143,166875,3300],{"emptyLinePlaceholder":976},[143,166877,166878,166881,166883,166885,166887],{"class":145,"line":306},[143,166879,166880],{"class":149},"introduce(",[143,166882,150612],{"class":163},[143,166884,13335],{"class":149},[143,166886,1691],{"class":280},[143,166888,1055],{"class":149},[63,166890,166891],{},"顺序错了就会得到错误含义：",[133,166893,166895],{"className":31276,"code":166894,"language":31278,"meta":138,"style":138},"introduce(18, \"小明\")\n",[140,166896,166897],{"__ignoreMap":138},[143,166898,166899,166901,166903,166905,166907],{"class":145,"line":146},[143,166900,166880],{"class":149},[143,166902,1691],{"class":280},[143,166904,13335],{"class":149},[143,166906,150612],{"class":163},[143,166908,1055],{"class":149},[14,166910,166912],{"id":166911},"_73-关键字参数","7.3 关键字参数",[63,166914,166915],{},"关键字参数按参数名传递。",[133,166917,166919],{"className":31276,"code":166918,"language":31278,"meta":138,"style":138},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[140,166920,166921,166941],{"__ignoreMap":138},[143,166922,166923,166925,166927,166929,166931,166933,166935,166937,166939],{"class":145,"line":146},[143,166924,166880],{"class":149},[143,166926,80688],{"class":6116},[143,166928,160],{"class":755},[143,166930,150612],{"class":163},[143,166932,13335],{"class":149},[143,166934,71102],{"class":6116},[143,166936,160],{"class":755},[143,166938,1691],{"class":280},[143,166940,1055],{"class":149},[143,166942,166943,166945,166947,166949,166951,166953,166955,166957,166959],{"class":145,"line":35},[143,166944,166880],{"class":149},[143,166946,71102],{"class":6116},[143,166948,160],{"class":755},[143,166950,1691],{"class":280},[143,166952,13335],{"class":149},[143,166954,80688],{"class":6116},[143,166956,160],{"class":755},[143,166958,150612],{"class":163},[143,166960,1055],{"class":149},[63,166962,118809],{},[19,166964,166965,166968],{},[22,166966,166967],{},"顺序不容易错。",[22,166969,166970],{},"调用时可读性更强。",[14,166972,166974],{"id":166973},"_74-默认参数","7.4 默认参数",[63,166976,166977],{},"默认参数给参数设置默认值。",[133,166979,166981],{"className":31276,"code":166980,"language":31278,"meta":138,"style":138},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[140,166982,166983,166999,167029,167033,167037,167047],{"__ignoreMap":138},[143,166984,166985,166987,166989,166992,166994,166997],{"class":145,"line":146},[143,166986,32845],{"class":755},[143,166988,122968],{"class":156},[143,166990,166991],{"class":149},"(host, port",[143,166993,160],{"class":755},[143,166995,166996],{"class":280},"3306",[143,166998,31684],{"class":149},[143,167000,167001,167003,167005,167007,167010,167012,167014,167016,167018,167020,167023,167025,167027],{"class":145,"line":35},[143,167002,32197],{"class":280},[143,167004,1049],{"class":149},[143,167006,1098],{"class":755},[143,167008,167009],{"class":163},"\"连接",[143,167011,1936],{"class":280},[143,167013,28293],{"class":149},[143,167015,366],{"class":280},[143,167017,1900],{"class":163},[143,167019,1936],{"class":280},[143,167021,167022],{"class":149},"port",[143,167024,366],{"class":280},[143,167026,1292],{"class":163},[143,167028,1055],{"class":149},[143,167030,167031],{"class":145,"line":46},[143,167032,3300],{"emptyLinePlaceholder":976},[143,167034,167035],{"class":145,"line":293},[143,167036,3300],{"emptyLinePlaceholder":976},[143,167038,167039,167042,167045],{"class":145,"line":306},[143,167040,167041],{"class":149},"connect(",[143,167043,167044],{"class":163},"\"localhost\"",[143,167046,1055],{"class":149},[143,167048,167049,167051,167053,167055,167058],{"class":145,"line":319},[143,167050,167041],{"class":149},[143,167052,167044],{"class":163},[143,167054,13335],{"class":149},[143,167056,167057],{"class":280},"6379",[143,167059,1055],{"class":149},[63,167061,167062],{},"注意：默认参数必须放在非默认参数后面。",[63,167064,167065],{},"错误：",[133,167067,167069],{"className":31276,"code":167068,"language":31278,"meta":138,"style":138},"def connect(port=3306, host):\n    pass\n",[140,167070,167071,167087],{"__ignoreMap":138},[143,167072,167073,167075,167077,167080,167082,167084],{"class":145,"line":146},[143,167074,32845],{"class":755},[143,167076,122968],{"class":156},[143,167078,167079],{"class":149},"(port",[143,167081,160],{"class":755},[143,167083,166996],{"class":280},[143,167085,167086],{"class":149},", host):\n",[143,167088,167089],{"class":145,"line":35},[143,167090,150261],{"class":755},[63,167092,167093],{},"正确：",[133,167095,167097],{"className":31276,"code":167096,"language":31278,"meta":138,"style":138},"def connect(host, port=3306):\n    pass\n",[140,167098,167099,167113],{"__ignoreMap":138},[143,167100,167101,167103,167105,167107,167109,167111],{"class":145,"line":146},[143,167102,32845],{"class":755},[143,167104,122968],{"class":156},[143,167106,166991],{"class":149},[143,167108,160],{"class":755},[143,167110,166996],{"class":280},[143,167112,31684],{"class":149},[143,167114,167115],{"class":145,"line":35},[143,167116,150261],{"class":755},[14,167118,167120],{"id":167119},"_75-默认参数的坑","7.5 默认参数的坑",[63,167122,167123],{},"不要使用可变对象作为默认参数。",[63,167125,158347],{},[133,167127,167129],{"className":31276,"code":167128,"language":31278,"meta":138,"style":138},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[140,167130,167131,167146,167151,167158,167162,167166,167177],{"__ignoreMap":138},[143,167132,167133,167135,167138,167141,167143],{"class":145,"line":146},[143,167134,32845],{"class":755},[143,167136,167137],{"class":156}," add_item",[143,167139,167140],{"class":149},"(item, items",[143,167142,160],{"class":755},[143,167144,167145],{"class":149},"[]):\n",[143,167147,167148],{"class":145,"line":35},[143,167149,167150],{"class":149},"    items.append(item)\n",[143,167152,167153,167155],{"class":145,"line":46},[143,167154,4990],{"class":755},[143,167156,167157],{"class":149}," items\n",[143,167159,167160],{"class":145,"line":293},[143,167161,3300],{"emptyLinePlaceholder":976},[143,167163,167164],{"class":145,"line":306},[143,167165,3300],{"emptyLinePlaceholder":976},[143,167167,167168,167170,167173,167175],{"class":145,"line":319},[143,167169,31313],{"class":280},[143,167171,167172],{"class":149},"(add_item(",[143,167174,166049],{"class":163},[143,167176,31395],{"class":149},[143,167178,167179,167181,167183,167186],{"class":145,"line":332},[143,167180,31313],{"class":280},[143,167182,167172],{"class":149},[143,167184,167185],{"class":163},"\"b\"",[143,167187,31395],{"class":149},[63,167189,167190],{},"第二次调用会复用第一次的列表。",[63,167192,156612],{},[133,167194,167196],{"className":31276,"code":167195,"language":31278,"meta":138,"style":138},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[140,167197,167198,167212,167225,167234,167238],{"__ignoreMap":138},[143,167199,167200,167202,167204,167206,167208,167210],{"class":145,"line":146},[143,167201,32845],{"class":755},[143,167203,167137],{"class":156},[143,167205,167140],{"class":149},[143,167207,160],{"class":755},[143,167209,96562],{"class":280},[143,167211,31684],{"class":149},[143,167213,167214,167216,167219,167221,167223],{"class":145,"line":35},[143,167215,4001],{"class":755},[143,167217,167218],{"class":149}," items ",[143,167220,39825],{"class":755},[143,167222,39831],{"class":280},[143,167224,4639],{"class":149},[143,167226,167227,167230,167232],{"class":145,"line":46},[143,167228,167229],{"class":149},"        items ",[143,167231,160],{"class":755},[143,167233,52726],{"class":149},[143,167235,167236],{"class":145,"line":293},[143,167237,167150],{"class":149},[143,167239,167240,167242],{"class":145,"line":306},[143,167241,4990],{"class":755},[143,167243,167157],{"class":149},[14,167245,167247],{"id":167246},"_76-不定长参数","7.6 不定长参数",[58,167249,167251],{"id":167250},"_761-args","7.6.1 *args",[63,167253,167254,167257],{},[140,167255,167256],{},"*args"," 接收任意数量的位置参数，得到元组。",[133,167259,167261],{"className":31276,"code":167260,"language":31278,"meta":138,"style":138},"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",[140,167262,167263,167276,167284,167295,167304,167310,167314,167318,167337],{"__ignoreMap":138},[143,167264,167265,167267,167269,167271,167273],{"class":145,"line":146},[143,167266,32845],{"class":755},[143,167268,6109],{"class":156},[143,167270,1049],{"class":149},[143,167272,1496],{"class":755},[143,167274,167275],{"class":149},"args):\n",[143,167277,167278,167280,167282],{"class":145,"line":35},[143,167279,160031],{"class":149},[143,167281,160],{"class":755},[143,167283,48231],{"class":280},[143,167285,167286,167288,167290,167292],{"class":145,"line":46},[143,167287,4101],{"class":755},[143,167289,156904],{"class":149},[143,167291,26941],{"class":755},[143,167293,167294],{"class":149}," args:\n",[143,167296,167297,167299,167301],{"class":145,"line":293},[143,167298,160706],{"class":149},[143,167300,10377],{"class":755},[143,167302,167303],{"class":149}," num\n",[143,167305,167306,167308],{"class":145,"line":306},[143,167307,4990],{"class":755},[143,167309,163011],{"class":149},[143,167311,167312],{"class":145,"line":319},[143,167313,3300],{"emptyLinePlaceholder":976},[143,167315,167316],{"class":145,"line":332},[143,167317,3300],{"emptyLinePlaceholder":976},[143,167319,167320,167322,167325,167327,167329,167331,167333,167335],{"class":145,"line":345},[143,167321,31313],{"class":280},[143,167323,167324],{"class":149},"(add(",[143,167326,771],{"class":280},[143,167328,13335],{"class":149},[143,167330,1122],{"class":280},[143,167332,13335],{"class":149},[143,167334,1116],{"class":280},[143,167336,31395],{"class":149},[143,167338,167339,167341,167343,167345,167347,167349,167351,167353,167355,167357,167359,167361],{"class":145,"line":701},[143,167340,31313],{"class":280},[143,167342,167324],{"class":149},[143,167344,771],{"class":280},[143,167346,13335],{"class":149},[143,167348,1122],{"class":280},[143,167350,13335],{"class":149},[143,167352,1116],{"class":280},[143,167354,13335],{"class":149},[143,167356,1334],{"class":280},[143,167358,13335],{"class":149},[143,167360,1360],{"class":280},[143,167362,31395],{"class":149},[58,167364,167366],{"id":167365},"_762-kwargs","7.6.2 **kwargs",[63,167368,167369,167372],{},[140,167370,167371],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[133,167374,167376],{"className":31276,"code":167375,"language":31278,"meta":138,"style":138},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[140,167377,167378,167391,167402,167408,167412,167416],{"__ignoreMap":138},[143,167379,167380,167382,167384,167386,167388],{"class":145,"line":146},[143,167381,32845],{"class":755},[143,167383,162669],{"class":156},[143,167385,1049],{"class":149},[143,167387,11561],{"class":755},[143,167389,167390],{"class":149},"kwargs):\n",[143,167392,167393,167395,167397,167399],{"class":145,"line":35},[143,167394,4101],{"class":755},[143,167396,165509],{"class":149},[143,167398,26941],{"class":755},[143,167400,167401],{"class":149}," kwargs.items():\n",[143,167403,167404,167406],{"class":145,"line":46},[143,167405,33349],{"class":280},[143,167407,165521],{"class":149},[143,167409,167410],{"class":145,"line":293},[143,167411,3300],{"emptyLinePlaceholder":976},[143,167413,167414],{"class":145,"line":306},[143,167415,3300],{"emptyLinePlaceholder":976},[143,167417,167418,167420,167422,167424,167426,167428,167430,167432,167434,167436,167438,167440,167442],{"class":145,"line":319},[143,167419,162734],{"class":149},[143,167421,80688],{"class":6116},[143,167423,160],{"class":755},[143,167425,150612],{"class":163},[143,167427,13335],{"class":149},[143,167429,71102],{"class":6116},[143,167431,160],{"class":755},[143,167433,1691],{"class":280},[143,167435,13335],{"class":149},[143,167437,71153],{"class":6116},[143,167439,160],{"class":755},[143,167441,70150],{"class":163},[143,167443,1055],{"class":149},[14,167445,167447],{"id":167446},"_77-参数解包","7.7 参数解包",[63,167449,167450],{},"列表或元组解包为位置参数：",[133,167452,167454],{"className":31276,"code":167453,"language":31278,"meta":138,"style":138},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[140,167455,167456,167465,167480,167484,167488,167508],{"__ignoreMap":138},[143,167457,167458,167460,167462],{"class":145,"line":146},[143,167459,32845],{"class":755},[143,167461,6109],{"class":156},[143,167463,167464],{"class":149},"(a, b, c):\n",[143,167466,167467,167469,167471,167473,167475,167477],{"class":145,"line":35},[143,167468,4990],{"class":755},[143,167470,11769],{"class":149},[143,167472,1522],{"class":755},[143,167474,11782],{"class":149},[143,167476,1522],{"class":755},[143,167478,167479],{"class":149}," c\n",[143,167481,167482],{"class":145,"line":46},[143,167483,3300],{"emptyLinePlaceholder":976},[143,167485,167486],{"class":145,"line":293},[143,167487,3300],{"emptyLinePlaceholder":976},[143,167489,167490,167492,167494,167496,167498,167500,167502,167504,167506],{"class":145,"line":306},[143,167491,164824],{"class":149},[143,167493,160],{"class":755},[143,167495,53113],{"class":149},[143,167497,771],{"class":280},[143,167499,13335],{"class":149},[143,167501,1122],{"class":280},[143,167503,13335],{"class":149},[143,167505,1116],{"class":280},[143,167507,34144],{"class":149},[143,167509,167510,167512,167514,167516],{"class":145,"line":319},[143,167511,31313],{"class":280},[143,167513,167324],{"class":149},[143,167515,1496],{"class":755},[143,167517,167518],{"class":149},"nums))\n",[63,167520,167521],{},"字典解包为关键字参数：",[133,167523,167525],{"className":31276,"code":167524,"language":31278,"meta":138,"style":138},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[140,167526,167527,167535,167561,167565,167569,167593],{"__ignoreMap":138},[143,167528,167529,167531,167533],{"class":145,"line":146},[143,167530,32845],{"class":755},[143,167532,150096],{"class":156},[143,167534,150099],{"class":149},[143,167536,167537,167539,167541,167543,167545,167547,167549,167551,167553,167555,167557,167559],{"class":145,"line":35},[143,167538,32197],{"class":280},[143,167540,1049],{"class":149},[143,167542,1098],{"class":755},[143,167544,1292],{"class":163},[143,167546,1936],{"class":280},[143,167548,80688],{"class":149},[143,167550,366],{"class":280},[143,167552,5348],{"class":280},[143,167554,71102],{"class":149},[143,167556,366],{"class":280},[143,167558,1292],{"class":163},[143,167560,1055],{"class":149},[143,167562,167563],{"class":145,"line":46},[143,167564,3300],{"emptyLinePlaceholder":976},[143,167566,167567],{"class":145,"line":293},[143,167568,3300],{"emptyLinePlaceholder":976},[143,167570,167571,167573,167575,167577,167579,167581,167583,167585,167587,167589,167591],{"class":145,"line":306},[143,167572,117189],{"class":149},[143,167574,160],{"class":755},[143,167576,5348],{"class":149},[143,167578,63562],{"class":163},[143,167580,284],{"class":149},[143,167582,150612],{"class":163},[143,167584,13335],{"class":149},[143,167586,70005],{"class":163},[143,167588,284],{"class":149},[143,167590,1691],{"class":280},[143,167592,348],{"class":149},[143,167594,167595,167597,167599],{"class":145,"line":319},[143,167596,166880],{"class":149},[143,167598,11561],{"class":755},[143,167600,167601],{"class":149},"info)\n",[14,167603,167605],{"id":167604},"_78-匿名函数lambda","7.8 匿名函数lambda",[63,167607,167608,167611],{},[140,167609,167610],{},"lambda"," 用于定义简单匿名函数。",[133,167613,167615],{"className":31276,"code":167614,"language":31278,"meta":138,"style":138},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[140,167616,167617,167634],{"__ignoreMap":138},[143,167618,167619,167622,167624,167627,167630,167632],{"class":145,"line":146},[143,167620,167621],{"class":149},"add ",[143,167623,160],{"class":755},[143,167625,167626],{"class":755}," lambda",[143,167628,167629],{"class":149}," a, b: a ",[143,167631,1522],{"class":755},[143,167633,151828],{"class":149},[143,167635,167636,167638,167640,167642,167644,167646],{"class":145,"line":35},[143,167637,31313],{"class":280},[143,167639,167324],{"class":149},[143,167641,771],{"class":280},[143,167643,13335],{"class":149},[143,167645,1122],{"class":280},[143,167647,31395],{"class":149},[63,167649,167650],{},"常和排序、过滤等函数一起使用。",[63,167652,167653],{},"按分数排序：",[133,167655,167657],{"className":31276,"code":167656,"language":31278,"meta":138,"style":138},"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",[140,167658,167659,167667,167687,167707,167727,167731,167735,167758],{"__ignoreMap":138},[143,167660,167661,167663,167665],{"class":145,"line":146},[143,167662,160440],{"class":149},[143,167664,160],{"class":755},[143,167666,56330],{"class":149},[143,167668,167669,167671,167673,167675,167677,167679,167681,167683,167685],{"class":145,"line":35},[143,167670,149109],{"class":149},[143,167672,63562],{"class":163},[143,167674,284],{"class":149},[143,167676,150612],{"class":163},[143,167678,13335],{"class":149},[143,167680,152196],{"class":163},[143,167682,284],{"class":149},[143,167684,2027],{"class":280},[143,167686,5830],{"class":149},[143,167688,167689,167691,167693,167695,167697,167699,167701,167703,167705],{"class":145,"line":46},[143,167690,149109],{"class":149},[143,167692,63562],{"class":163},[143,167694,284],{"class":149},[143,167696,151660],{"class":163},[143,167698,13335],{"class":149},[143,167700,152196],{"class":163},[143,167702,284],{"class":149},[143,167704,1852],{"class":280},[143,167706,5830],{"class":149},[143,167708,167709,167711,167713,167715,167717,167719,167721,167723,167725],{"class":145,"line":293},[143,167710,149109],{"class":149},[143,167712,63562],{"class":163},[143,167714,284],{"class":149},[143,167716,160455],{"class":163},[143,167718,13335],{"class":149},[143,167720,152196],{"class":163},[143,167722,284],{"class":149},[143,167724,1447],{"class":280},[143,167726,5830],{"class":149},[143,167728,167729],{"class":145,"line":306},[143,167730,34144],{"class":149},[143,167732,167733],{"class":145,"line":319},[143,167734,3300],{"emptyLinePlaceholder":976},[143,167736,167737,167740,167742,167744,167746,167748,167750,167752,167754,167756],{"class":145,"line":332},[143,167738,167739],{"class":149},"students.sort(",[143,167741,154670],{"class":6116},[143,167743,154673],{"class":755},[143,167745,154676],{"class":149},[143,167747,152196],{"class":163},[143,167749,113077],{"class":149},[143,167751,164252],{"class":6116},[143,167753,160],{"class":755},[143,167755,32374],{"class":280},[143,167757,1055],{"class":149},[143,167759,167760,167762],{"class":145,"line":345},[143,167761,31313],{"class":280},[143,167763,165719],{"class":149},[63,167765,167766,167767,167769],{},"如果逻辑复杂，不要硬写 ",[140,167768,167610],{},"，定义普通函数更清晰。",[14,167771,167773],{"id":167772},"_79-函数作为参数","7.9 函数作为参数",[63,167775,167776],{},"函数可以作为参数传给另一个函数。",[133,167778,167780],{"className":31276,"code":167779,"language":31278,"meta":138,"style":138},"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",[140,167781,167782,167790,167800,167804,167808,167818,167825,167829,167833],{"__ignoreMap":138},[143,167783,167784,167786,167788],{"class":145,"line":146},[143,167785,32845],{"class":755},[143,167787,6109],{"class":156},[143,167789,151817],{"class":149},[143,167791,167792,167794,167796,167798],{"class":145,"line":35},[143,167793,4990],{"class":755},[143,167795,11769],{"class":149},[143,167797,1522],{"class":755},[143,167799,151828],{"class":149},[143,167801,167802],{"class":145,"line":46},[143,167803,3300],{"emptyLinePlaceholder":976},[143,167805,167806],{"class":145,"line":293},[143,167807,3300],{"emptyLinePlaceholder":976},[143,167809,167810,167812,167815],{"class":145,"line":306},[143,167811,32845],{"class":755},[143,167813,167814],{"class":156}," calculate",[143,167816,167817],{"class":149},"(a, b, func):\n",[143,167819,167820,167822],{"class":145,"line":319},[143,167821,4990],{"class":755},[143,167823,167824],{"class":149}," func(a, b)\n",[143,167826,167827],{"class":145,"line":332},[143,167828,3300],{"emptyLinePlaceholder":976},[143,167830,167831],{"class":145,"line":345},[143,167832,3300],{"emptyLinePlaceholder":976},[143,167834,167835,167837,167840,167842,167844,167846],{"class":145,"line":701},[143,167836,31313],{"class":280},[143,167838,167839],{"class":149},"(calculate(",[143,167841,1487],{"class":280},[143,167843,13335],{"class":149},[143,167845,1741],{"class":280},[143,167847,167848],{"class":149},", add))\n",[63,167850,167851],{},"这种思想在排序、回调、框架中经常出现。",[14,167853,167855],{"id":167854},"_710-mapfiltersorted","7.10 map、filter、sorted",[58,167857,167859],{"id":167858},"_7101-map","7.10.1 map",[63,167861,167862,167864],{},[140,167863,74923],{}," 对每个元素执行函数。",[133,167866,167868],{"className":31276,"code":167867,"language":31278,"meta":138,"style":138},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[140,167869,167870,167894,167917],{"__ignoreMap":138},[143,167871,167872,167874,167876,167878,167880,167882,167884,167886,167888,167890,167892],{"class":145,"line":146},[143,167873,164824],{"class":149},[143,167875,160],{"class":755},[143,167877,53113],{"class":149},[143,167879,771],{"class":280},[143,167881,13335],{"class":149},[143,167883,1122],{"class":280},[143,167885,13335],{"class":149},[143,167887,1116],{"class":280},[143,167889,13335],{"class":149},[143,167891,1334],{"class":280},[143,167893,34144],{"class":149},[143,167895,167896,167898,167900,167903,167905,167907,167910,167912,167914],{"class":145,"line":35},[143,167897,162030],{"class":149},[143,167899,160],{"class":755},[143,167901,167902],{"class":280}," map",[143,167904,1049],{"class":149},[143,167906,167610],{"class":755},[143,167908,167909],{"class":149}," x: x ",[143,167911,1496],{"class":755},[143,167913,15654],{"class":280},[143,167915,167916],{"class":149},", nums)\n",[143,167918,167919,167921,167923,167925],{"class":145,"line":46},[143,167920,31313],{"class":280},[143,167922,1049],{"class":149},[143,167924,154794],{"class":280},[143,167926,166792],{"class":149},[58,167928,167930],{"id":167929},"_7102-filter","7.10.2 filter",[63,167932,167933,167935],{},[140,167934,80929],{}," 保留满足条件的元素。",[133,167937,167939],{"className":31276,"code":167938,"language":31278,"meta":138,"style":138},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[140,167940,167941,167969,167994],{"__ignoreMap":138},[143,167942,167943,167945,167947,167949,167951,167953,167955,167957,167959,167961,167963,167965,167967],{"class":145,"line":146},[143,167944,164824],{"class":149},[143,167946,160],{"class":755},[143,167948,53113],{"class":149},[143,167950,771],{"class":280},[143,167952,13335],{"class":149},[143,167954,1122],{"class":280},[143,167956,13335],{"class":149},[143,167958,1116],{"class":280},[143,167960,13335],{"class":149},[143,167962,1334],{"class":280},[143,167964,13335],{"class":149},[143,167966,1360],{"class":280},[143,167968,34144],{"class":149},[143,167970,167971,167973,167975,167978,167980,167982,167984,167986,167988,167990,167992],{"class":145,"line":35},[143,167972,162030],{"class":149},[143,167974,160],{"class":755},[143,167976,167977],{"class":280}," filter",[143,167979,1049],{"class":149},[143,167981,167610],{"class":755},[143,167983,167909],{"class":149},[143,167985,1369],{"class":755},[143,167987,15654],{"class":280},[143,167989,102435],{"class":755},[143,167991,4993],{"class":280},[143,167993,167916],{"class":149},[143,167995,167996,167998,168000,168002],{"class":145,"line":46},[143,167997,31313],{"class":280},[143,167999,1049],{"class":149},[143,168001,154794],{"class":280},[143,168003,166792],{"class":149},[58,168005,168007],{"id":168006},"_7103-sorted","7.10.3 sorted",[63,168009,168010,168012],{},[140,168011,165960],{}," 返回排序后的新列表。",[133,168014,168016],{"className":31276,"code":168015,"language":31278,"meta":138,"style":138},"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",[140,168017,168018,168026,168046,168066,168086,168090,168094,168123],{"__ignoreMap":138},[143,168019,168020,168022,168024],{"class":145,"line":146},[143,168021,160440],{"class":149},[143,168023,160],{"class":755},[143,168025,56330],{"class":149},[143,168027,168028,168030,168032,168034,168036,168038,168040,168042,168044],{"class":145,"line":35},[143,168029,149109],{"class":149},[143,168031,63562],{"class":163},[143,168033,284],{"class":149},[143,168035,150612],{"class":163},[143,168037,13335],{"class":149},[143,168039,152196],{"class":163},[143,168041,284],{"class":149},[143,168043,2027],{"class":280},[143,168045,5830],{"class":149},[143,168047,168048,168050,168052,168054,168056,168058,168060,168062,168064],{"class":145,"line":46},[143,168049,149109],{"class":149},[143,168051,63562],{"class":163},[143,168053,284],{"class":149},[143,168055,151660],{"class":163},[143,168057,13335],{"class":149},[143,168059,152196],{"class":163},[143,168061,284],{"class":149},[143,168063,1852],{"class":280},[143,168065,5830],{"class":149},[143,168067,168068,168070,168072,168074,168076,168078,168080,168082,168084],{"class":145,"line":293},[143,168069,149109],{"class":149},[143,168071,63562],{"class":163},[143,168073,284],{"class":149},[143,168075,160455],{"class":163},[143,168077,13335],{"class":149},[143,168079,152196],{"class":163},[143,168081,284],{"class":149},[143,168083,1447],{"class":280},[143,168085,5830],{"class":149},[143,168087,168088],{"class":145,"line":306},[143,168089,34144],{"class":149},[143,168091,168092],{"class":145,"line":319},[143,168093,3300],{"emptyLinePlaceholder":976},[143,168095,168096,168098,168100,168102,168105,168107,168109,168111,168113,168115,168117,168119,168121],{"class":145,"line":332},[143,168097,162030],{"class":149},[143,168099,160],{"class":755},[143,168101,164328],{"class":280},[143,168103,168104],{"class":149},"(students, ",[143,168106,154670],{"class":6116},[143,168108,154673],{"class":755},[143,168110,154676],{"class":149},[143,168112,152196],{"class":163},[143,168114,113077],{"class":149},[143,168116,164252],{"class":6116},[143,168118,160],{"class":755},[143,168120,32374],{"class":280},[143,168122,1055],{"class":149},[143,168124,168125,168127],{"class":145,"line":345},[143,168126,31313],{"class":280},[143,168128,77464],{"class":149},[14,168130,168132],{"id":168131},"_711-闭包入门","7.11 闭包入门",[63,168134,168135],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[133,168137,168139],{"className":31276,"code":168138,"language":31278,"meta":138,"style":138},"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",[140,168140,168141,168151,168161,168172,168176,168183,168187,168191,168205],{"__ignoreMap":138},[143,168142,168143,168145,168148],{"class":145,"line":146},[143,168144,32845],{"class":755},[143,168146,168147],{"class":156}," outer",[143,168149,168150],{"class":149},"(base):\n",[143,168152,168153,168155,168158],{"class":145,"line":35},[143,168154,31699],{"class":755},[143,168156,168157],{"class":156}," inner",[143,168159,168160],{"class":149},"(num):\n",[143,168162,168163,168165,168168,168170],{"class":145,"line":46},[143,168164,15651],{"class":755},[143,168166,168167],{"class":149}," base ",[143,168169,1522],{"class":755},[143,168171,167303],{"class":149},[143,168173,168174],{"class":145,"line":293},[143,168175,3300],{"emptyLinePlaceholder":976},[143,168177,168178,168180],{"class":145,"line":306},[143,168179,4990],{"class":755},[143,168181,168182],{"class":149}," inner\n",[143,168184,168185],{"class":145,"line":319},[143,168186,3300],{"emptyLinePlaceholder":976},[143,168188,168189],{"class":145,"line":332},[143,168190,3300],{"emptyLinePlaceholder":976},[143,168192,168193,168196,168198,168201,168203],{"class":145,"line":345},[143,168194,168195],{"class":149},"add_10 ",[143,168197,160],{"class":755},[143,168199,168200],{"class":149}," outer(",[143,168202,1487],{"class":280},[143,168204,1055],{"class":149},[143,168206,168207,168209,168212,168214],{"class":145,"line":701},[143,168208,31313],{"class":280},[143,168210,168211],{"class":149},"(add_10(",[143,168213,1360],{"class":280},[143,168215,31395],{"class":149},[63,168217,168218],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168220,168222],{"id":168221},"_712-装饰器入门","7.12 装饰器入门",[63,168224,168225],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[133,168227,168229],{"className":31276,"code":168228,"language":31278,"meta":138,"style":138},"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",[140,168230,168231,168240,168249,168260,168265,168276,168280,168287,168291,168295,168300,168308,168318,168322,168326],{"__ignoreMap":138},[143,168232,168233,168235,168237],{"class":145,"line":146},[143,168234,32845],{"class":755},[143,168236,88069],{"class":156},[143,168238,168239],{"class":149},"(func):\n",[143,168241,168242,168244,168247],{"class":145,"line":35},[143,168243,31699],{"class":755},[143,168245,168246],{"class":156}," wrapper",[143,168248,32851],{"class":149},[143,168250,168251,168253,168255,168258],{"class":145,"line":46},[143,168252,33349],{"class":280},[143,168254,1049],{"class":149},[143,168256,168257],{"class":163},"\"函数开始执行\"",[143,168259,1055],{"class":149},[143,168261,168262],{"class":145,"line":293},[143,168263,168264],{"class":149},"        func()\n",[143,168266,168267,168269,168271,168274],{"class":145,"line":306},[143,168268,33349],{"class":280},[143,168270,1049],{"class":149},[143,168272,168273],{"class":163},"\"函数执行结束\"",[143,168275,1055],{"class":149},[143,168277,168278],{"class":145,"line":319},[143,168279,3300],{"emptyLinePlaceholder":976},[143,168281,168282,168284],{"class":145,"line":332},[143,168283,4990],{"class":755},[143,168285,168286],{"class":149}," wrapper\n",[143,168288,168289],{"class":145,"line":345},[143,168290,3300],{"emptyLinePlaceholder":976},[143,168292,168293],{"class":145,"line":701},[143,168294,3300],{"emptyLinePlaceholder":976},[143,168296,168297],{"class":145,"line":707},[143,168298,168299],{"class":156},"@log\n",[143,168301,168302,168304,168306],{"class":145,"line":727},[143,168303,32845],{"class":755},[143,168305,161720],{"class":156},[143,168307,32851],{"class":149},[143,168309,168310,168312,168314,168316],{"class":145,"line":2518},[143,168311,32197],{"class":280},[143,168313,1049],{"class":149},[143,168315,6744],{"class":163},[143,168317,1055],{"class":149},[143,168319,168320],{"class":145,"line":2524},[143,168321,3300],{"emptyLinePlaceholder":976},[143,168323,168324],{"class":145,"line":2529},[143,168325,3300],{"emptyLinePlaceholder":976},[143,168327,168328],{"class":145,"line":2543},[143,168329,161755],{"class":149},[63,168331,158998],{},[133,168333,168335],{"className":31276,"code":168334,"language":31278,"meta":138,"style":138},"say_hello = log(say_hello)\n",[140,168336,168337],{"__ignoreMap":138},[143,168338,168339,168342,168344],{"class":145,"line":146},[143,168340,168341],{"class":149},"say_hello ",[143,168343,160],{"class":755},[143,168345,168346],{"class":149}," log(say_hello)\n",[63,168348,168349],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168351,168353],{"id":168352},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[133,168355,168357],{"className":31276,"code":168356,"language":31278,"meta":138,"style":138},"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",[140,168358,168359,168367,168384,168394,168413,168423,168430,168434,168440,168444,168448,168452,168460,168470,168474,168478],{"__ignoreMap":138},[143,168360,168361,168363,168365],{"class":145,"line":146},[143,168362,32845],{"class":755},[143,168364,88069],{"class":156},[143,168366,168239],{"class":149},[143,168368,168369,168371,168373,168375,168377,168380,168382],{"class":145,"line":35},[143,168370,31699],{"class":755},[143,168372,168246],{"class":156},[143,168374,1049],{"class":149},[143,168376,1496],{"class":755},[143,168378,168379],{"class":149},"args, ",[143,168381,11561],{"class":755},[143,168383,167390],{"class":149},[143,168385,168386,168388,168390,168392],{"class":145,"line":46},[143,168387,33349],{"class":280},[143,168389,1049],{"class":149},[143,168391,168257],{"class":163},[143,168393,1055],{"class":149},[143,168395,168396,168399,168401,168404,168406,168408,168410],{"class":145,"line":293},[143,168397,168398],{"class":149},"        result ",[143,168400,160],{"class":755},[143,168402,168403],{"class":149}," func(",[143,168405,1496],{"class":755},[143,168407,168379],{"class":149},[143,168409,11561],{"class":755},[143,168411,168412],{"class":149},"kwargs)\n",[143,168414,168415,168417,168419,168421],{"class":145,"line":306},[143,168416,33349],{"class":280},[143,168418,1049],{"class":149},[143,168420,168273],{"class":163},[143,168422,1055],{"class":149},[143,168424,168425,168427],{"class":145,"line":319},[143,168426,15651],{"class":755},[143,168428,168429],{"class":149}," result\n",[143,168431,168432],{"class":145,"line":332},[143,168433,3300],{"emptyLinePlaceholder":976},[143,168435,168436,168438],{"class":145,"line":345},[143,168437,4990],{"class":755},[143,168439,168286],{"class":149},[143,168441,168442],{"class":145,"line":701},[143,168443,3300],{"emptyLinePlaceholder":976},[143,168445,168446],{"class":145,"line":707},[143,168447,3300],{"emptyLinePlaceholder":976},[143,168449,168450],{"class":145,"line":727},[143,168451,168299],{"class":156},[143,168453,168454,168456,168458],{"class":145,"line":2518},[143,168455,32845],{"class":755},[143,168457,6109],{"class":156},[143,168459,151817],{"class":149},[143,168461,168462,168464,168466,168468],{"class":145,"line":2524},[143,168463,4990],{"class":755},[143,168465,11769],{"class":149},[143,168467,1522],{"class":755},[143,168469,151828],{"class":149},[143,168471,168472],{"class":145,"line":2529},[143,168473,3300],{"emptyLinePlaceholder":976},[143,168475,168476],{"class":145,"line":2543},[143,168477,3300],{"emptyLinePlaceholder":976},[143,168479,168480,168482,168484,168486,168488,168490],{"class":145,"line":2548},[143,168481,31313],{"class":280},[143,168483,167324],{"class":149},[143,168485,1487],{"class":280},[143,168487,13335],{"class":149},[143,168489,1741],{"class":280},[143,168491,31395],{"class":149},[63,168493,168494,168495,101894,168497,168499],{},"这个写法使用 ",[140,168496,167256],{},[140,168498,167371],{}," 接收原函数的所有参数。",[14,168501,168503],{"id":168502},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[63,168505,124167],{},[19,168507,168508,168511,168514],{},[22,168509,168510],{},"给定一组学生数据。",[22,168512,168513],{},"封装函数，根据传入规则筛选学生。",[22,168515,168516],{},"筛选及格、优秀、未成年学生。",[63,168518,10935],{},[133,168520,168522],{"className":31276,"code":168521,"language":31278,"meta":138,"style":138},"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",[140,168523,168524,168532,168560,168588,168616,168620,168624,168628,168638,168646,168656,168663,168668,168674,168678,168682,168706,168729,168752,168756,168763,168770],{"__ignoreMap":138},[143,168525,168526,168528,168530],{"class":145,"line":146},[143,168527,160440],{"class":149},[143,168529,160],{"class":755},[143,168531,56330],{"class":149},[143,168533,168534,168536,168538,168540,168542,168544,168546,168548,168550,168552,168554,168556,168558],{"class":145,"line":35},[143,168535,149109],{"class":149},[143,168537,63562],{"class":163},[143,168539,284],{"class":149},[143,168541,150612],{"class":163},[143,168543,13335],{"class":149},[143,168545,70005],{"class":163},[143,168547,284],{"class":149},[143,168549,1691],{"class":280},[143,168551,13335],{"class":149},[143,168553,152196],{"class":163},[143,168555,284],{"class":149},[143,168557,2027],{"class":280},[143,168559,5830],{"class":149},[143,168561,168562,168564,168566,168568,168570,168572,168574,168576,168578,168580,168582,168584,168586],{"class":145,"line":46},[143,168563,149109],{"class":149},[143,168565,63562],{"class":163},[143,168567,284],{"class":149},[143,168569,151660],{"class":163},[143,168571,13335],{"class":149},[143,168573,70005],{"class":163},[143,168575,284],{"class":149},[143,168577,1666],{"class":280},[143,168579,13335],{"class":149},[143,168581,152196],{"class":163},[143,168583,284],{"class":149},[143,168585,1852],{"class":280},[143,168587,5830],{"class":149},[143,168589,168590,168592,168594,168596,168598,168600,168602,168604,168606,168608,168610,168612,168614],{"class":145,"line":293},[143,168591,149109],{"class":149},[143,168593,63562],{"class":163},[143,168595,284],{"class":149},[143,168597,160455],{"class":163},[143,168599,13335],{"class":149},[143,168601,70005],{"class":163},[143,168603,284],{"class":149},[143,168605,1716],{"class":280},[143,168607,13335],{"class":149},[143,168609,152196],{"class":163},[143,168611,284],{"class":149},[143,168613,1923],{"class":280},[143,168615,5830],{"class":149},[143,168617,168618],{"class":145,"line":306},[143,168619,34144],{"class":149},[143,168621,168622],{"class":145,"line":319},[143,168623,3300],{"emptyLinePlaceholder":976},[143,168625,168626],{"class":145,"line":332},[143,168627,3300],{"emptyLinePlaceholder":976},[143,168629,168630,168632,168635],{"class":145,"line":345},[143,168631,32845],{"class":755},[143,168633,168634],{"class":156}," filter_students",[143,168636,168637],{"class":149},"(students, condition):\n",[143,168639,168640,168642,168644],{"class":145,"line":701},[143,168641,161947],{"class":149},[143,168643,160],{"class":755},[143,168645,52726],{"class":149},[143,168647,168648,168650,168652,168654],{"class":145,"line":707},[143,168649,4101],{"class":755},[143,168651,152861],{"class":149},[143,168653,26941],{"class":755},[143,168655,152866],{"class":149},[143,168657,168658,168660],{"class":145,"line":727},[143,168659,3397],{"class":755},[143,168661,168662],{"class":149}," condition(student):\n",[143,168664,168665],{"class":145,"line":2518},[143,168666,168667],{"class":149},"            result.append(student)\n",[143,168669,168670,168672],{"class":145,"line":2524},[143,168671,4990],{"class":755},[143,168673,168429],{"class":149},[143,168675,168676],{"class":145,"line":2529},[143,168677,3300],{"emptyLinePlaceholder":976},[143,168679,168680],{"class":145,"line":2543},[143,168681,3300],{"emptyLinePlaceholder":976},[143,168683,168684,168686,168688,168691,168693,168696,168698,168700,168702,168704],{"class":145,"line":2548},[143,168685,166425],{"class":149},[143,168687,160],{"class":755},[143,168689,168690],{"class":149}," filter_students(students, ",[143,168692,167610],{"class":755},[143,168694,168695],{"class":149}," s: s[",[143,168697,152196],{"class":163},[143,168699,5343],{"class":149},[143,168701,2611],{"class":755},[143,168703,158561],{"class":280},[143,168705,1055],{"class":149},[143,168707,168708,168711,168713,168715,168717,168719,168721,168723,168725,168727],{"class":145,"line":2554},[143,168709,168710],{"class":149},"excellent ",[143,168712,160],{"class":755},[143,168714,168690],{"class":149},[143,168716,167610],{"class":755},[143,168718,168695],{"class":149},[143,168720,152196],{"class":163},[143,168722,5343],{"class":149},[143,168724,2611],{"class":755},[143,168726,158512],{"class":280},[143,168728,1055],{"class":149},[143,168730,168731,168734,168736,168738,168740,168742,168744,168746,168748,168750],{"class":145,"line":2575},[143,168732,168733],{"class":149},"under_age ",[143,168735,160],{"class":755},[143,168737,168690],{"class":149},[143,168739,167610],{"class":755},[143,168741,168695],{"class":149},[143,168743,70005],{"class":163},[143,168745,5343],{"class":149},[143,168747,150],{"class":755},[143,168749,157009],{"class":280},[143,168751,1055],{"class":149},[143,168753,168754],{"class":145,"line":2580},[143,168755,3300],{"emptyLinePlaceholder":976},[143,168757,168758,168760],{"class":145,"line":2594},[143,168759,31313],{"class":280},[143,168761,168762],{"class":149},"(passed)\n",[143,168764,168765,168767],{"class":145,"line":2599},[143,168766,31313],{"class":280},[143,168768,168769],{"class":149},"(excellent)\n",[143,168771,168772,168774],{"class":145,"line":2628},[143,168773,31313],{"class":280},[143,168775,168776],{"class":149},"(under_age)\n",[14,168778,168780],{"id":168779},"_715-易错点","7.15 易错点",[19,168782,168783,168786,168794,168799,168810],{},[22,168784,168785],{},"默认参数不要写可变对象。",[22,168787,168788,168790,168791,168793],{},[140,168789,167256],{}," 是元组，",[140,168792,167371],{}," 是字典。",[22,168795,168796,168798],{},[140,168797,167610],{}," 只适合简单表达式。",[22,168800,168801,101894,168803,168805,168806,168809],{},[140,168802,74923],{},[140,168804,80929],{}," 的结果是迭代器，常用 ",[140,168807,168808],{},"list()"," 转换查看。",[22,168811,168812],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168814,168816],{"id":168815},"_716-本章练习","7.16 本章练习",[19,168818,168819,168826,168832,168837,168842],{},[22,168820,168821,168822,168825],{},"写函数 ",[140,168823,168824],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[22,168827,168821,168828,168831],{},[140,168829,168830],{},"print_user(**kwargs)","，输出用户所有字段。",[22,168833,105241,168834,168836],{},[140,168835,167610],{}," 对学生列表按年龄排序。",[22,168838,105241,168839,168841],{},[140,168840,80929],{}," 找出成绩不及格的学生。",[22,168843,168844],{},"写一个装饰器，统计函数执行前后的提示信息。",[954,168846,168847],{},"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":138,"searchDepth":35,"depth":35,"links":168849},[168850,168851,168852,168853,168854,168855,168859,168860,168861,168862,168867,168868,168869,168870,168871,168872],{"id":166708,"depth":35,"text":166709},{"id":166822,"depth":35,"text":166823},{"id":166911,"depth":35,"text":166912},{"id":166973,"depth":35,"text":166974},{"id":167119,"depth":35,"text":167120},{"id":167246,"depth":35,"text":167247,"children":168856},[168857,168858],{"id":167250,"depth":46,"text":167251},{"id":167365,"depth":46,"text":167366},{"id":167446,"depth":35,"text":167447},{"id":167604,"depth":35,"text":167605},{"id":167772,"depth":35,"text":167773},{"id":167854,"depth":35,"text":167855,"children":168863},[168864,168865,168866],{"id":167858,"depth":46,"text":167859},{"id":167929,"depth":46,"text":167930},{"id":168006,"depth":46,"text":168007},{"id":168131,"depth":35,"text":168132},{"id":168221,"depth":35,"text":168222},{"id":168352,"depth":35,"text":168353},{"id":168502,"depth":35,"text":168503},{"id":168779,"depth":35,"text":168780},{"id":168815,"depth":35,"text":168816},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166700,"description":973},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168879,"title":168880,"body":168881,"description":973,"extension":974,"meta":171400,"navigation":976,"path":171401,"seo":171402,"stem":171403,"__hash__":171404},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168882,"toc":171375},[168883,168886,168890,168893,168896,168927,168931,168935,168938,168965,168969,168972,169023,169026,169041,169044,169079,169083,169085,169109,169112,169172,169176,169180,169183,169240,169243,169263,169267,169270,169333,169337,169340,169396,169403,169427,169431,169434,169497,169501,169506,169557,169560,169564,169569,169636,169639,169721,169725,169730,169781,169784,169788,169791,169794,169802,169805,169851,169854,169900,169904,169910,169954,169957,170003,170006,170046,170049,170110,170114,170117,170207,170210,170352,170355,170422,170426,170429,170432,170573,170576,170654,170657,170833,170837,170839,170850,170852,171051,171055,171299,171303,171337,171341,171372],[10,168884,168880],{"id":168885},"_8-文件操作",[14,168887,168889],{"id":168888},"_81-文件操作的意义","8.1 文件操作的意义",[63,168891,168892],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[63,168894,168895],{},"常见文件类型：",[19,168897,168898,168904,168910,168916,168922],{},[22,168899,168900,168903],{},[140,168901,168902],{},".txt","：普通文本。",[22,168905,168906,168909],{},[140,168907,168908],{},".csv","：表格文本。",[22,168911,168912,168915],{},[140,168913,168914],{},".json","：结构化数据。",[22,168917,168918,168921],{},[140,168919,168920],{},".log","：日志文件。",[22,168923,168924,168926],{},[140,168925,147076],{},"：Python 源代码。",[14,168928,168930],{"id":168929},"_82-路径","8.2 路径",[58,168932,168934],{"id":168933},"_821-相对路径","8.2.1 相对路径",[63,168936,168937],{},"相对当前运行目录：",[133,168939,168941],{"className":31276,"code":168940,"language":31278,"meta":138,"style":138},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[140,168942,168943],{"__ignoreMap":138},[143,168944,168945,168947,168949,168951,168953,168955,168957,168959,168961,168963],{"class":145,"line":146},[143,168946,87793],{"class":280},[143,168948,1049],{"class":149},[143,168950,147520],{"class":163},[143,168952,13335],{"class":149},[143,168954,147525],{"class":163},[143,168956,13335],{"class":149},[143,168958,147530],{"class":6116},[143,168960,160],{"class":755},[143,168962,147535],{"class":163},[143,168964,1055],{"class":149},[58,168966,168968],{"id":168967},"_822-绝对路径","8.2.2 绝对路径",[63,168970,168971],{},"从根目录或盘符开始：",[133,168973,168975],{"className":31276,"code":168974,"language":31278,"meta":138,"style":138},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[140,168976,168977,169000],{"__ignoreMap":138},[143,168978,168979,168981,168983,168986,168988,168990,168992,168994,168996,168998],{"class":145,"line":146},[143,168980,87793],{"class":280},[143,168982,1049],{"class":149},[143,168984,168985],{"class":163},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[143,168987,13335],{"class":149},[143,168989,147525],{"class":163},[143,168991,13335],{"class":149},[143,168993,147530],{"class":6116},[143,168995,160],{"class":755},[143,168997,147535],{"class":163},[143,168999,1055],{"class":149},[143,169001,169002,169004,169006,169009,169011,169013,169015,169017,169019,169021],{"class":145,"line":35},[143,169003,87793],{"class":280},[143,169005,1049],{"class":149},[143,169007,169008],{"class":163},"\"D:\u002Fdata\u002Fdata.txt\"",[143,169010,13335],{"class":149},[143,169012,147525],{"class":163},[143,169014,13335],{"class":149},[143,169016,147530],{"class":6116},[143,169018,160],{"class":755},[143,169020,147535],{"class":163},[143,169022,1055],{"class":149},[63,169024,169025],{},"Windows 路径建议写成：",[133,169027,169029],{"className":31276,"code":169028,"language":31278,"meta":138,"style":138},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[140,169030,169031],{"__ignoreMap":138},[143,169032,169033,169036,169038],{"class":145,"line":146},[143,169034,169035],{"class":149},"path ",[143,169037,160],{"class":755},[143,169039,169040],{"class":163}," \"D:\u002Fdata\u002Fdata.txt\"\n",[63,169042,169043],{},"或原始字符串：",[133,169045,169047],{"className":31276,"code":169046,"language":31278,"meta":138,"style":138},"path = r\"D:\\data\\data.txt\"\n",[140,169048,169049],{"__ignoreMap":138},[143,169050,169051,169053,169055,169057,169059,169062,169065,169068,169070,169072,169074,169077],{"class":145,"line":146},[143,169052,169035],{"class":149},[143,169054,160],{"class":755},[143,169056,18019],{"class":755},[143,169058,1292],{"class":163},[143,169060,169061],{"class":48875},"D:",[143,169063,169064],{"class":280},"\\d",[143,169066,169067],{"class":48875},"ata",[143,169069,169064],{"class":280},[143,169071,169067],{"class":48875},[143,169073,1599],{"class":280},[143,169075,169076],{"class":48875},"txt",[143,169078,26031],{"class":163},[14,169080,169082],{"id":169081},"_83-open函数","8.3 open函数",[63,169084,6081],{},[133,169086,169088],{"className":31276,"code":169087,"language":31278,"meta":138,"style":138},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[140,169089,169090],{"__ignoreMap":138},[143,169091,169092,169094,169096,169098,169101,169103,169105,169107],{"class":145,"line":146},[143,169093,46252],{"class":6116},[143,169095,14464],{"class":755},[143,169097,147515],{"class":280},[143,169099,169100],{"class":149},"(文件路径, 打开模式, ",[143,169102,147530],{"class":6116},[143,169104,160],{"class":755},[143,169106,147535],{"class":163},[143,169108,1055],{"class":149},[63,169110,169111],{},"常见模式：",[1181,169113,169114,169123],{},[1184,169115,169116],{},[1187,169117,169118,169121],{},[1190,169119,169120],{},"模式",[1190,169122,26767],{},[1227,169124,169125,169134,169143,169152,169162],{},[1187,169126,169127,169131],{},[1232,169128,169129],{},[140,169130,1711],{},[1232,169132,169133],{},"只读，文件不存在会报错",[1187,169135,169136,169140],{},[1232,169137,169138],{},[140,169139,1836],{},[1232,169141,169142],{},"只写，文件不存在会创建，存在会清空",[1187,169144,169145,169149],{},[1232,169146,169147],{},[140,169148,67],{},[1232,169150,169151],{},"追加，文件不存在会创建",[1187,169153,169154,169159],{},[1232,169155,169156],{},[140,169157,169158],{},"rb",[1232,169160,169161],{},"二进制只读",[1187,169163,169164,169169],{},[1232,169165,169166],{},[140,169167,169168],{},"wb",[1232,169170,169171],{},"二进制只写",[14,169173,169175],{"id":169174},"_84-读取文件","8.4 读取文件",[58,169177,169179],{"id":169178},"_841-read","8.4.1 read",[63,169181,169182],{},"一次读取全部内容：",[133,169184,169186],{"className":31276,"code":169185,"language":31278,"meta":138,"style":138},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[140,169187,169188,169214,169226,169233],{"__ignoreMap":138},[143,169189,169190,169192,169194,169196,169198,169200,169202,169204,169206,169208,169210,169212],{"class":145,"line":146},[143,169191,46252],{"class":6116},[143,169193,14464],{"class":755},[143,169195,147515],{"class":280},[143,169197,1049],{"class":149},[143,169199,147520],{"class":163},[143,169201,13335],{"class":149},[143,169203,147525],{"class":163},[143,169205,13335],{"class":149},[143,169207,147530],{"class":6116},[143,169209,160],{"class":755},[143,169211,147535],{"class":163},[143,169213,1055],{"class":149},[143,169215,169216,169219,169221,169223],{"class":145,"line":35},[143,169217,169218],{"class":149},"content ",[143,169220,160],{"class":755},[143,169222,148877],{"class":6116},[143,169224,169225],{"class":149},".read()\n",[143,169227,169228,169230],{"class":145,"line":46},[143,169229,31313],{"class":280},[143,169231,169232],{"class":149},"(content)\n",[143,169234,169235,169237],{"class":145,"line":293},[143,169236,46252],{"class":6116},[143,169238,169239],{"class":149},".close()\n",[63,169241,169242],{},"可以指定读取字符数：",[133,169244,169246],{"className":31276,"code":169245,"language":31278,"meta":138,"style":138},"content = file.read(10)\n",[140,169247,169248],{"__ignoreMap":138},[143,169249,169250,169252,169254,169256,169259,169261],{"class":145,"line":146},[143,169251,169218],{"class":149},[143,169253,160],{"class":755},[143,169255,148877],{"class":6116},[143,169257,169258],{"class":149},".read(",[143,169260,1487],{"class":280},[143,169262,1055],{"class":149},[58,169264,169266],{"id":169265},"_842-readline","8.4.2 readline",[63,169268,169269],{},"一次读取一行：",[133,169271,169273],{"className":31276,"code":169272,"language":31278,"meta":138,"style":138},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[140,169274,169275,169301,169305,169316,169323,169327],{"__ignoreMap":138},[143,169276,169277,169279,169281,169283,169285,169287,169289,169291,169293,169295,169297,169299],{"class":145,"line":146},[143,169278,46252],{"class":6116},[143,169280,14464],{"class":755},[143,169282,147515],{"class":280},[143,169284,1049],{"class":149},[143,169286,147520],{"class":163},[143,169288,13335],{"class":149},[143,169290,147525],{"class":163},[143,169292,13335],{"class":149},[143,169294,147530],{"class":6116},[143,169296,160],{"class":755},[143,169298,147535],{"class":163},[143,169300,1055],{"class":149},[143,169302,169303],{"class":145,"line":35},[143,169304,3300],{"emptyLinePlaceholder":976},[143,169306,169307,169309,169311,169313],{"class":145,"line":46},[143,169308,147976],{"class":149},[143,169310,160],{"class":755},[143,169312,148877],{"class":6116},[143,169314,169315],{"class":149},".readline()\n",[143,169317,169318,169320],{"class":145,"line":293},[143,169319,31313],{"class":280},[143,169321,169322],{"class":149},"(line)\n",[143,169324,169325],{"class":145,"line":306},[143,169326,3300],{"emptyLinePlaceholder":976},[143,169328,169329,169331],{"class":145,"line":319},[143,169330,46252],{"class":6116},[143,169332,169239],{"class":149},[58,169334,169336],{"id":169335},"_843-readlines","8.4.3 readlines",[63,169338,169339],{},"读取所有行，返回列表：",[133,169341,169343],{"className":31276,"code":169342,"language":31278,"meta":138,"style":138},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[140,169344,169345,169371,169383,169390],{"__ignoreMap":138},[143,169346,169347,169349,169351,169353,169355,169357,169359,169361,169363,169365,169367,169369],{"class":145,"line":146},[143,169348,46252],{"class":6116},[143,169350,14464],{"class":755},[143,169352,147515],{"class":280},[143,169354,1049],{"class":149},[143,169356,147520],{"class":163},[143,169358,13335],{"class":149},[143,169360,147525],{"class":163},[143,169362,13335],{"class":149},[143,169364,147530],{"class":6116},[143,169366,160],{"class":755},[143,169368,147535],{"class":163},[143,169370,1055],{"class":149},[143,169372,169373,169376,169378,169380],{"class":145,"line":35},[143,169374,169375],{"class":149},"lines ",[143,169377,160],{"class":755},[143,169379,148877],{"class":6116},[143,169381,169382],{"class":149},".readlines()\n",[143,169384,169385,169387],{"class":145,"line":46},[143,169386,31313],{"class":280},[143,169388,169389],{"class":149},"(lines)\n",[143,169391,169392,169394],{"class":145,"line":293},[143,169393,46252],{"class":6116},[143,169395,169239],{"class":149},[63,169397,169398,169399,169402],{},"每一行通常带有换行符，可以用 ",[140,169400,169401],{},"strip()"," 去掉：",[133,169404,169406],{"className":31276,"code":169405,"language":31278,"meta":138,"style":138},"for line in lines:\n    print(line.strip())\n",[140,169407,169408,169420],{"__ignoreMap":138},[143,169409,169410,169412,169415,169417],{"class":145,"line":146},[143,169411,3925],{"class":755},[143,169413,169414],{"class":149}," line ",[143,169416,26941],{"class":755},[143,169418,169419],{"class":149}," lines:\n",[143,169421,169422,169424],{"class":145,"line":35},[143,169423,32197],{"class":280},[143,169425,169426],{"class":149},"(line.strip())\n",[58,169428,169430],{"id":169429},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[63,169432,169433],{},"推荐读取大文件时使用：",[133,169435,169437],{"className":31276,"code":169436,"language":31278,"meta":138,"style":138},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[140,169438,169439,169465,169469,169481,169487,169491],{"__ignoreMap":138},[143,169440,169441,169443,169445,169447,169449,169451,169453,169455,169457,169459,169461,169463],{"class":145,"line":146},[143,169442,46252],{"class":6116},[143,169444,14464],{"class":755},[143,169446,147515],{"class":280},[143,169448,1049],{"class":149},[143,169450,147520],{"class":163},[143,169452,13335],{"class":149},[143,169454,147525],{"class":163},[143,169456,13335],{"class":149},[143,169458,147530],{"class":6116},[143,169460,160],{"class":755},[143,169462,147535],{"class":163},[143,169464,1055],{"class":149},[143,169466,169467],{"class":145,"line":35},[143,169468,3300],{"emptyLinePlaceholder":976},[143,169470,169471,169473,169475,169477,169479],{"class":145,"line":46},[143,169472,3925],{"class":755},[143,169474,169414],{"class":149},[143,169476,26941],{"class":755},[143,169478,148877],{"class":6116},[143,169480,4639],{"class":149},[143,169482,169483,169485],{"class":145,"line":293},[143,169484,32197],{"class":280},[143,169486,169426],{"class":149},[143,169488,169489],{"class":145,"line":306},[143,169490,3300],{"emptyLinePlaceholder":976},[143,169492,169493,169495],{"class":145,"line":319},[143,169494,46252],{"class":6116},[143,169496,169239],{"class":149},[14,169498,169500],{"id":169499},"_85-with语句","8.5 with语句",[63,169502,169503,169505],{},[140,169504,108708],{}," 会自动关闭文件，推荐使用。",[133,169507,169509],{"className":31276,"code":169508,"language":31278,"meta":138,"style":138},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[140,169510,169511,169541,169551],{"__ignoreMap":138},[143,169512,169513,169515,169517,169519,169521,169523,169525,169527,169529,169531,169533,169535,169537,169539],{"class":145,"line":146},[143,169514,108708],{"class":755},[143,169516,147515],{"class":280},[143,169518,1049],{"class":149},[143,169520,147520],{"class":163},[143,169522,13335],{"class":149},[143,169524,147525],{"class":163},[143,169526,13335],{"class":149},[143,169528,147530],{"class":6116},[143,169530,160],{"class":755},[143,169532,147535],{"class":163},[143,169534,14614],{"class":149},[143,169536,32281],{"class":755},[143,169538,148877],{"class":6116},[143,169540,4639],{"class":149},[143,169542,169543,169545,169547,169549],{"class":145,"line":35},[143,169544,147547],{"class":149},[143,169546,160],{"class":755},[143,169548,148877],{"class":6116},[143,169550,169225],{"class":149},[143,169552,169553,169555],{"class":145,"line":46},[143,169554,32197],{"class":280},[143,169556,169232],{"class":149},[63,169558,169559],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,169561,169563],{"id":169562},"_86-写入文件","8.6 写入文件",[63,169565,169566,169568],{},[140,169567,1836],{}," 模式会清空原文件。",[133,169570,169572],{"className":31276,"code":169571,"language":31278,"meta":138,"style":138},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[140,169573,169574,169604,169621],{"__ignoreMap":138},[143,169575,169576,169578,169580,169582,169584,169586,169588,169590,169592,169594,169596,169598,169600,169602],{"class":145,"line":146},[143,169577,108708],{"class":755},[143,169579,147515],{"class":280},[143,169581,1049],{"class":149},[143,169583,147520],{"class":163},[143,169585,13335],{"class":149},[143,169587,152700],{"class":163},[143,169589,13335],{"class":149},[143,169591,147530],{"class":6116},[143,169593,160],{"class":755},[143,169595,147535],{"class":163},[143,169597,14614],{"class":149},[143,169599,32281],{"class":755},[143,169601,148877],{"class":6116},[143,169603,4639],{"class":149},[143,169605,169606,169609,169612,169615,169617,169619],{"class":145,"line":35},[143,169607,169608],{"class":6116},"    file",[143,169610,169611],{"class":149},".write(",[143,169613,169614],{"class":163},"\"hello",[143,169616,157249],{"class":280},[143,169618,1292],{"class":163},[143,169620,1055],{"class":149},[143,169622,169623,169625,169627,169630,169632,169634],{"class":145,"line":46},[143,169624,169608],{"class":6116},[143,169626,169611],{"class":149},[143,169628,169629],{"class":163},"\"python",[143,169631,157249],{"class":280},[143,169633,1292],{"class":163},[143,169635,1055],{"class":149},[63,169637,169638],{},"写入多行：",[133,169640,169642],{"className":31276,"code":169641,"language":31278,"meta":138,"style":138},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[140,169643,169644,169679,169683,169714],{"__ignoreMap":138},[143,169645,169646,169648,169650,169652,169655,169657,169659,169661,169664,169666,169668,169670,169673,169675,169677],{"class":145,"line":146},[143,169647,169375],{"class":149},[143,169649,160],{"class":755},[143,169651,53113],{"class":149},[143,169653,169654],{"class":163},"\"小明,18",[143,169656,157249],{"class":280},[143,169658,1292],{"class":163},[143,169660,13335],{"class":149},[143,169662,169663],{"class":163},"\"小红,17",[143,169665,157249],{"class":280},[143,169667,1292],{"class":163},[143,169669,13335],{"class":149},[143,169671,169672],{"class":163},"\"小刚,19",[143,169674,157249],{"class":280},[143,169676,1292],{"class":163},[143,169678,34144],{"class":149},[143,169680,169681],{"class":145,"line":35},[143,169682,3300],{"emptyLinePlaceholder":976},[143,169684,169685,169687,169689,169691,169694,169696,169698,169700,169702,169704,169706,169708,169710,169712],{"class":145,"line":46},[143,169686,108708],{"class":755},[143,169688,147515],{"class":280},[143,169690,1049],{"class":149},[143,169692,169693],{"class":163},"\"students.txt\"",[143,169695,13335],{"class":149},[143,169697,152700],{"class":163},[143,169699,13335],{"class":149},[143,169701,147530],{"class":6116},[143,169703,160],{"class":755},[143,169705,147535],{"class":163},[143,169707,14614],{"class":149},[143,169709,32281],{"class":755},[143,169711,148877],{"class":6116},[143,169713,4639],{"class":149},[143,169715,169716,169718],{"class":145,"line":293},[143,169717,169608],{"class":6116},[143,169719,169720],{"class":149},".writelines(lines)\n",[14,169722,169724],{"id":169723},"_87-追加文件","8.7 追加文件",[63,169726,169727,169729],{},[140,169728,67],{}," 模式不会清空原内容，而是在末尾追加。",[133,169731,169733],{"className":31276,"code":169732,"language":31278,"meta":138,"style":138},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[140,169734,169735,169766],{"__ignoreMap":138},[143,169736,169737,169739,169741,169743,169746,169748,169750,169752,169754,169756,169758,169760,169762,169764],{"class":145,"line":146},[143,169738,108708],{"class":755},[143,169740,147515],{"class":280},[143,169742,1049],{"class":149},[143,169744,169745],{"class":163},"\"log.txt\"",[143,169747,13335],{"class":149},[143,169749,166049],{"class":163},[143,169751,13335],{"class":149},[143,169753,147530],{"class":6116},[143,169755,160],{"class":755},[143,169757,147535],{"class":163},[143,169759,14614],{"class":149},[143,169761,32281],{"class":755},[143,169763,148877],{"class":6116},[143,169765,4639],{"class":149},[143,169767,169768,169770,169772,169775,169777,169779],{"class":145,"line":35},[143,169769,169608],{"class":6116},[143,169771,169611],{"class":149},[143,169773,169774],{"class":163},"\"程序启动",[143,169776,157249],{"class":280},[143,169778,1292],{"class":163},[143,169780,1055],{"class":149},[63,169782,169783],{},"日志类文件常用追加模式。",[14,169785,169787],{"id":169786},"_88-文件编码","8.8 文件编码",[63,169789,169790],{},"编码决定文字如何保存为字节。",[63,169792,169793],{},"常见编码：",[19,169795,169796,169799],{},[22,169797,169798],{},"UTF-8：推荐。",[22,169800,169801],{},"GBK：部分 Windows 中文文件常见。",[63,169803,169804],{},"读取文件乱码时，可以尝试：",[133,169806,169808],{"className":31276,"code":169807,"language":31278,"meta":138,"style":138},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[140,169809,169810,169841],{"__ignoreMap":138},[143,169811,169812,169814,169816,169818,169820,169822,169824,169826,169828,169830,169833,169835,169837,169839],{"class":145,"line":146},[143,169813,108708],{"class":755},[143,169815,147515],{"class":280},[143,169817,1049],{"class":149},[143,169819,147520],{"class":163},[143,169821,13335],{"class":149},[143,169823,147525],{"class":163},[143,169825,13335],{"class":149},[143,169827,147530],{"class":6116},[143,169829,160],{"class":755},[143,169831,169832],{"class":163},"\"gbk\"",[143,169834,14614],{"class":149},[143,169836,32281],{"class":755},[143,169838,148877],{"class":6116},[143,169840,4639],{"class":149},[143,169842,169843,169845,169847,169849],{"class":145,"line":35},[143,169844,147547],{"class":149},[143,169846,160],{"class":755},[143,169848,148877],{"class":6116},[143,169850,169225],{"class":149},[63,169852,169853],{},"写文件时建议统一 UTF-8：",[133,169855,169857],{"className":31276,"code":169856,"language":31278,"meta":138,"style":138},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[140,169858,169859,169889],{"__ignoreMap":138},[143,169860,169861,169863,169865,169867,169869,169871,169873,169875,169877,169879,169881,169883,169885,169887],{"class":145,"line":146},[143,169862,108708],{"class":755},[143,169864,147515],{"class":280},[143,169866,1049],{"class":149},[143,169868,147520],{"class":163},[143,169870,13335],{"class":149},[143,169872,152700],{"class":163},[143,169874,13335],{"class":149},[143,169876,147530],{"class":6116},[143,169878,160],{"class":755},[143,169880,147535],{"class":163},[143,169882,14614],{"class":149},[143,169884,32281],{"class":755},[143,169886,148877],{"class":6116},[143,169888,4639],{"class":149},[143,169890,169891,169893,169895,169898],{"class":145,"line":35},[143,169892,169608],{"class":6116},[143,169894,169611],{"class":149},[143,169896,169897],{"class":163},"\"中文内容\"",[143,169899,1055],{"class":149},[14,169901,169903],{"id":169902},"_89-pathlib","8.9 pathlib",[63,169905,169906,169909],{},[140,169907,169908],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[133,169911,169913],{"className":31276,"code":169912,"language":31278,"meta":138,"style":138},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[140,169914,169915,169925,169929,169947],{"__ignoreMap":138},[143,169916,169917,169919,169921,169923],{"class":145,"line":146},[143,169918,31635],{"class":755},[143,169920,109186],{"class":149},[143,169922,31290],{"class":755},[143,169924,109191],{"class":149},[143,169926,169927],{"class":145,"line":35},[143,169928,3300],{"emptyLinePlaceholder":976},[143,169930,169931,169933,169935,169937,169940,169942,169944],{"class":145,"line":46},[143,169932,169035],{"class":149},[143,169934,160],{"class":755},[143,169936,109420],{"class":149},[143,169938,169939],{"class":163},"\"data\"",[143,169941,14614],{"class":149},[143,169943,1625],{"class":755},[143,169945,169946],{"class":163}," \"students.txt\"\n",[143,169948,169949,169951],{"class":145,"line":293},[143,169950,31313],{"class":280},[143,169952,169953],{"class":149},"(path)\n",[63,169955,169956],{},"创建目录：",[133,169958,169960],{"className":31276,"code":169959,"language":31278,"meta":138,"style":138},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[140,169961,169962,169972,169976,169989],{"__ignoreMap":138},[143,169963,169964,169966,169968,169970],{"class":145,"line":146},[143,169965,31635],{"class":755},[143,169967,109186],{"class":149},[143,169969,31290],{"class":755},[143,169971,109191],{"class":149},[143,169973,169974],{"class":145,"line":35},[143,169975,3300],{"emptyLinePlaceholder":976},[143,169977,169978,169981,169983,169985,169987],{"class":145,"line":46},[143,169979,169980],{"class":149},"data_dir ",[143,169982,160],{"class":755},[143,169984,109420],{"class":149},[143,169986,169939],{"class":163},[143,169988,1055],{"class":149},[143,169990,169991,169994,169997,169999,170001],{"class":145,"line":293},[143,169992,169993],{"class":149},"data_dir.mkdir(",[143,169995,169996],{"class":6116},"exist_ok",[143,169998,160],{"class":755},[143,170000,32374],{"class":280},[143,170002,1055],{"class":149},[63,170004,170005],{},"判断文件是否存在：",[133,170007,170009],{"className":31276,"code":170008,"language":31278,"meta":138,"style":138},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[140,170010,170011,170024,170028,170035],{"__ignoreMap":138},[143,170012,170013,170015,170017,170019,170022],{"class":145,"line":146},[143,170014,169035],{"class":149},[143,170016,160],{"class":755},[143,170018,109420],{"class":149},[143,170020,170021],{"class":163},"\"data\u002Fstudents.txt\"",[143,170023,1055],{"class":149},[143,170025,170026],{"class":145,"line":35},[143,170027,3300],{"emptyLinePlaceholder":976},[143,170029,170030,170032],{"class":145,"line":46},[143,170031,2434],{"class":755},[143,170033,170034],{"class":149}," path.exists():\n",[143,170036,170037,170039,170041,170044],{"class":145,"line":293},[143,170038,32197],{"class":280},[143,170040,1049],{"class":149},[143,170042,170043],{"class":163},"\"文件存在\"",[143,170045,1055],{"class":149},[63,170047,170048],{},"读写文本：",[133,170050,170052],{"className":31276,"code":170051,"language":31278,"meta":138,"style":138},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[140,170053,170054,170066,170070,170087,170104],{"__ignoreMap":138},[143,170055,170056,170058,170060,170062,170064],{"class":145,"line":146},[143,170057,169035],{"class":149},[143,170059,160],{"class":755},[143,170061,109420],{"class":149},[143,170063,147520],{"class":163},[143,170065,1055],{"class":149},[143,170067,170068],{"class":145,"line":35},[143,170069,3300],{"emptyLinePlaceholder":976},[143,170071,170072,170075,170077,170079,170081,170083,170085],{"class":145,"line":46},[143,170073,170074],{"class":149},"path.write_text(",[143,170076,146600],{"class":163},[143,170078,13335],{"class":149},[143,170080,147530],{"class":6116},[143,170082,160],{"class":755},[143,170084,147535],{"class":163},[143,170086,1055],{"class":149},[143,170088,170089,170091,170093,170096,170098,170100,170102],{"class":145,"line":293},[143,170090,169218],{"class":149},[143,170092,160],{"class":755},[143,170094,170095],{"class":149}," path.read_text(",[143,170097,147530],{"class":6116},[143,170099,160],{"class":755},[143,170101,147535],{"class":163},[143,170103,1055],{"class":149},[143,170105,170106,170108],{"class":145,"line":306},[143,170107,31313],{"class":280},[143,170109,169232],{"class":149},[14,170111,170113],{"id":170112},"_810-json文件","8.10 JSON文件",[63,170115,170116],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[133,170118,170120],{"className":31276,"code":170119,"language":31278,"meta":138,"style":138},"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",[140,170121,170122,170128,170132,170140,170150,170160,170168,170172,170176,170201],{"__ignoreMap":138},[143,170123,170124,170126],{"class":145,"line":146},[143,170125,31290],{"class":755},[143,170127,147815],{"class":149},[143,170129,170130],{"class":145,"line":35},[143,170131,3300],{"emptyLinePlaceholder":976},[143,170133,170134,170136,170138],{"class":145,"line":46},[143,170135,150205],{"class":149},[143,170137,160],{"class":755},[143,170139,275],{"class":149},[143,170141,170142,170144,170146,170148],{"class":145,"line":293},[143,170143,147744],{"class":163},[143,170145,284],{"class":149},[143,170147,150612],{"class":163},[143,170149,32364],{"class":149},[143,170151,170152,170154,170156,170158],{"class":145,"line":306},[143,170153,165261],{"class":163},[143,170155,284],{"class":149},[143,170157,1691],{"class":280},[143,170159,32364],{"class":149},[143,170161,170162,170164,170166],{"class":145,"line":319},[143,170163,165272],{"class":163},[143,170165,284],{"class":149},[143,170167,165277],{"class":280},[143,170169,170170],{"class":145,"line":332},[143,170171,348],{"class":149},[143,170173,170174],{"class":145,"line":345},[143,170175,3300],{"emptyLinePlaceholder":976},[143,170177,170178,170180,170182,170185,170187,170189,170191,170193,170195,170197,170199],{"class":145,"line":701},[143,170179,157168],{"class":149},[143,170181,160],{"class":755},[143,170183,170184],{"class":149}," json.dumps(student, ",[143,170186,147861],{"class":6116},[143,170188,160],{"class":755},[143,170190,34885],{"class":280},[143,170192,13335],{"class":149},[143,170194,152736],{"class":6116},[143,170196,160],{"class":755},[143,170198,1122],{"class":280},[143,170200,1055],{"class":149},[143,170202,170203,170205],{"class":145,"line":707},[143,170204,31313],{"class":280},[143,170206,164795],{"class":149},[63,170208,170209],{},"写入 JSON 文件：",[133,170211,170213],{"className":31276,"code":170212,"language":31278,"meta":138,"style":138},"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",[140,170214,170215,170221,170225,170233,170261,170289,170293,170297,170327],{"__ignoreMap":138},[143,170216,170217,170219],{"class":145,"line":146},[143,170218,31290],{"class":755},[143,170220,147815],{"class":149},[143,170222,170223],{"class":145,"line":35},[143,170224,3300],{"emptyLinePlaceholder":976},[143,170226,170227,170229,170231],{"class":145,"line":46},[143,170228,160440],{"class":149},[143,170230,160],{"class":755},[143,170232,56330],{"class":149},[143,170234,170235,170237,170239,170241,170243,170245,170247,170249,170251,170253,170255,170257,170259],{"class":145,"line":293},[143,170236,149109],{"class":149},[143,170238,63562],{"class":163},[143,170240,284],{"class":149},[143,170242,150612],{"class":163},[143,170244,13335],{"class":149},[143,170246,70005],{"class":163},[143,170248,284],{"class":149},[143,170250,1691],{"class":280},[143,170252,13335],{"class":149},[143,170254,152196],{"class":163},[143,170256,284],{"class":149},[143,170258,2027],{"class":280},[143,170260,5830],{"class":149},[143,170262,170263,170265,170267,170269,170271,170273,170275,170277,170279,170281,170283,170285,170287],{"class":145,"line":306},[143,170264,149109],{"class":149},[143,170266,63562],{"class":163},[143,170268,284],{"class":149},[143,170270,151660],{"class":163},[143,170272,13335],{"class":149},[143,170274,70005],{"class":163},[143,170276,284],{"class":149},[143,170278,1666],{"class":280},[143,170280,13335],{"class":149},[143,170282,152196],{"class":163},[143,170284,284],{"class":149},[143,170286,1852],{"class":280},[143,170288,5830],{"class":149},[143,170290,170291],{"class":145,"line":319},[143,170292,34144],{"class":149},[143,170294,170295],{"class":145,"line":332},[143,170296,3300],{"emptyLinePlaceholder":976},[143,170298,170299,170301,170303,170305,170307,170309,170311,170313,170315,170317,170319,170321,170323,170325],{"class":145,"line":345},[143,170300,108708],{"class":755},[143,170302,147515],{"class":280},[143,170304,1049],{"class":149},[143,170306,152555],{"class":163},[143,170308,13335],{"class":149},[143,170310,152700],{"class":163},[143,170312,13335],{"class":149},[143,170314,147530],{"class":6116},[143,170316,160],{"class":755},[143,170318,147535],{"class":163},[143,170320,14614],{"class":149},[143,170322,32281],{"class":755},[143,170324,148877],{"class":6116},[143,170326,4639],{"class":149},[143,170328,170329,170332,170334,170336,170338,170340,170342,170344,170346,170348,170350],{"class":145,"line":701},[143,170330,170331],{"class":149},"    json.dump(students, ",[143,170333,46252],{"class":6116},[143,170335,13335],{"class":149},[143,170337,147861],{"class":6116},[143,170339,160],{"class":755},[143,170341,34885],{"class":280},[143,170343,13335],{"class":149},[143,170345,152736],{"class":6116},[143,170347,160],{"class":755},[143,170349,1122],{"class":280},[143,170351,1055],{"class":149},[63,170353,170354],{},"读取 JSON 文件：",[133,170356,170358],{"className":31276,"code":170357,"language":31278,"meta":138,"style":138},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[140,170359,170360,170366,170370,170400,170412,170416],{"__ignoreMap":138},[143,170361,170362,170364],{"class":145,"line":146},[143,170363,31290],{"class":755},[143,170365,147815],{"class":149},[143,170367,170368],{"class":145,"line":35},[143,170369,3300],{"emptyLinePlaceholder":976},[143,170371,170372,170374,170376,170378,170380,170382,170384,170386,170388,170390,170392,170394,170396,170398],{"class":145,"line":46},[143,170373,108708],{"class":755},[143,170375,147515],{"class":280},[143,170377,1049],{"class":149},[143,170379,152555],{"class":163},[143,170381,13335],{"class":149},[143,170383,147525],{"class":163},[143,170385,13335],{"class":149},[143,170387,147530],{"class":6116},[143,170389,160],{"class":755},[143,170391,147535],{"class":163},[143,170393,14614],{"class":149},[143,170395,32281],{"class":755},[143,170397,148877],{"class":6116},[143,170399,4639],{"class":149},[143,170401,170402,170404,170406,170408,170410],{"class":145,"line":293},[143,170403,153761],{"class":149},[143,170405,160],{"class":755},[143,170407,148888],{"class":149},[143,170409,46252],{"class":6116},[143,170411,1055],{"class":149},[143,170413,170414],{"class":145,"line":306},[143,170415,3300],{"emptyLinePlaceholder":976},[143,170417,170418,170420],{"class":145,"line":319},[143,170419,31313],{"class":280},[143,170421,165719],{"class":149},[14,170423,170425],{"id":170424},"_811-csv文件","8.11 CSV文件",[63,170427,170428],{},"CSV 是逗号分隔值，常用于表格数据。",[63,170430,170431],{},"写入 CSV：",[133,170433,170435],{"className":31276,"code":170434,"language":31278,"meta":138,"style":138},"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",[140,170436,170437,170444,170448,170456,170474,170490,170506,170510,170514,170554,170568],{"__ignoreMap":138},[143,170438,170439,170441],{"class":145,"line":146},[143,170440,31290],{"class":755},[143,170442,170443],{"class":149}," csv\n",[143,170445,170446],{"class":145,"line":35},[143,170447,3300],{"emptyLinePlaceholder":976},[143,170449,170450,170452,170454],{"class":145,"line":46},[143,170451,160440],{"class":149},[143,170453,160],{"class":755},[143,170455,56330],{"class":149},[143,170457,170458,170461,170463,170465,170467,170469,170472],{"class":145,"line":293},[143,170459,170460],{"class":149},"    [",[143,170462,73978],{"class":163},[143,170464,13335],{"class":149},[143,170466,74011],{"class":163},[143,170468,13335],{"class":149},[143,170470,170471],{"class":163},"\"成绩\"",[143,170473,88714],{"class":149},[143,170475,170476,170478,170480,170482,170484,170486,170488],{"class":145,"line":306},[143,170477,170460],{"class":149},[143,170479,150612],{"class":163},[143,170481,13335],{"class":149},[143,170483,1691],{"class":280},[143,170485,13335],{"class":149},[143,170487,2027],{"class":280},[143,170489,88714],{"class":149},[143,170491,170492,170494,170496,170498,170500,170502,170504],{"class":145,"line":319},[143,170493,170460],{"class":149},[143,170495,151660],{"class":163},[143,170497,13335],{"class":149},[143,170499,1666],{"class":280},[143,170501,13335],{"class":149},[143,170503,1852],{"class":280},[143,170505,88714],{"class":149},[143,170507,170508],{"class":145,"line":332},[143,170509,34144],{"class":149},[143,170511,170512],{"class":145,"line":345},[143,170513,3300],{"emptyLinePlaceholder":976},[143,170515,170516,170518,170520,170522,170525,170527,170529,170531,170533,170535,170537,170539,170542,170544,170546,170548,170550,170552],{"class":145,"line":701},[143,170517,108708],{"class":755},[143,170519,147515],{"class":280},[143,170521,1049],{"class":149},[143,170523,170524],{"class":163},"\"students.csv\"",[143,170526,13335],{"class":149},[143,170528,152700],{"class":163},[143,170530,13335],{"class":149},[143,170532,147530],{"class":6116},[143,170534,160],{"class":755},[143,170536,147535],{"class":163},[143,170538,13335],{"class":149},[143,170540,170541],{"class":6116},"newline",[143,170543,160],{"class":755},[143,170545,8552],{"class":163},[143,170547,14614],{"class":149},[143,170549,32281],{"class":755},[143,170551,148877],{"class":6116},[143,170553,4639],{"class":149},[143,170555,170556,170559,170561,170564,170566],{"class":145,"line":707},[143,170557,170558],{"class":149},"    writer ",[143,170560,160],{"class":755},[143,170562,170563],{"class":149}," csv.writer(",[143,170565,46252],{"class":6116},[143,170567,1055],{"class":149},[143,170569,170570],{"class":145,"line":727},[143,170571,170572],{"class":149},"    writer.writerows(students)\n",[63,170574,170575],{},"读取 CSV：",[133,170577,170579],{"className":31276,"code":170578,"language":31278,"meta":138,"style":138},"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",[140,170580,170581,170587,170591,170621,170635,170647],{"__ignoreMap":138},[143,170582,170583,170585],{"class":145,"line":146},[143,170584,31290],{"class":755},[143,170586,170443],{"class":149},[143,170588,170589],{"class":145,"line":35},[143,170590,3300],{"emptyLinePlaceholder":976},[143,170592,170593,170595,170597,170599,170601,170603,170605,170607,170609,170611,170613,170615,170617,170619],{"class":145,"line":46},[143,170594,108708],{"class":755},[143,170596,147515],{"class":280},[143,170598,1049],{"class":149},[143,170600,170524],{"class":163},[143,170602,13335],{"class":149},[143,170604,147525],{"class":163},[143,170606,13335],{"class":149},[143,170608,147530],{"class":6116},[143,170610,160],{"class":755},[143,170612,147535],{"class":163},[143,170614,14614],{"class":149},[143,170616,32281],{"class":755},[143,170618,148877],{"class":6116},[143,170620,4639],{"class":149},[143,170622,170623,170626,170628,170631,170633],{"class":145,"line":293},[143,170624,170625],{"class":149},"    reader ",[143,170627,160],{"class":755},[143,170629,170630],{"class":149}," csv.reader(",[143,170632,46252],{"class":6116},[143,170634,1055],{"class":149},[143,170636,170637,170639,170642,170644],{"class":145,"line":306},[143,170638,4101],{"class":755},[143,170640,170641],{"class":149}," row ",[143,170643,26941],{"class":755},[143,170645,170646],{"class":149}," reader:\n",[143,170648,170649,170651],{"class":145,"line":319},[143,170650,33349],{"class":280},[143,170652,170653],{"class":149},"(row)\n",[63,170655,170656],{},"使用字典写入：",[133,170658,170660],{"className":31276,"code":170659,"language":31278,"meta":138,"style":138},"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",[140,170661,170662,170668,170672,170680,170708,170736,170740,170744,170782,170803,170824,170829],{"__ignoreMap":138},[143,170663,170664,170666],{"class":145,"line":146},[143,170665,31290],{"class":755},[143,170667,170443],{"class":149},[143,170669,170670],{"class":145,"line":35},[143,170671,3300],{"emptyLinePlaceholder":976},[143,170673,170674,170676,170678],{"class":145,"line":46},[143,170675,160440],{"class":149},[143,170677,160],{"class":755},[143,170679,56330],{"class":149},[143,170681,170682,170684,170686,170688,170690,170692,170694,170696,170698,170700,170702,170704,170706],{"class":145,"line":293},[143,170683,149109],{"class":149},[143,170685,63562],{"class":163},[143,170687,284],{"class":149},[143,170689,150612],{"class":163},[143,170691,13335],{"class":149},[143,170693,70005],{"class":163},[143,170695,284],{"class":149},[143,170697,1691],{"class":280},[143,170699,13335],{"class":149},[143,170701,152196],{"class":163},[143,170703,284],{"class":149},[143,170705,2027],{"class":280},[143,170707,5830],{"class":149},[143,170709,170710,170712,170714,170716,170718,170720,170722,170724,170726,170728,170730,170732,170734],{"class":145,"line":306},[143,170711,149109],{"class":149},[143,170713,63562],{"class":163},[143,170715,284],{"class":149},[143,170717,151660],{"class":163},[143,170719,13335],{"class":149},[143,170721,70005],{"class":163},[143,170723,284],{"class":149},[143,170725,1666],{"class":280},[143,170727,13335],{"class":149},[143,170729,152196],{"class":163},[143,170731,284],{"class":149},[143,170733,1852],{"class":280},[143,170735,5830],{"class":149},[143,170737,170738],{"class":145,"line":319},[143,170739,34144],{"class":149},[143,170741,170742],{"class":145,"line":332},[143,170743,3300],{"emptyLinePlaceholder":976},[143,170745,170746,170748,170750,170752,170754,170756,170758,170760,170762,170764,170766,170768,170770,170772,170774,170776,170778,170780],{"class":145,"line":345},[143,170747,108708],{"class":755},[143,170749,147515],{"class":280},[143,170751,1049],{"class":149},[143,170753,170524],{"class":163},[143,170755,13335],{"class":149},[143,170757,152700],{"class":163},[143,170759,13335],{"class":149},[143,170761,147530],{"class":6116},[143,170763,160],{"class":755},[143,170765,147535],{"class":163},[143,170767,13335],{"class":149},[143,170769,170541],{"class":6116},[143,170771,160],{"class":755},[143,170773,8552],{"class":163},[143,170775,14614],{"class":149},[143,170777,32281],{"class":755},[143,170779,148877],{"class":6116},[143,170781,4639],{"class":149},[143,170783,170784,170787,170789,170791,170793,170795,170797,170799,170801],{"class":145,"line":701},[143,170785,170786],{"class":149},"    fieldnames ",[143,170788,160],{"class":755},[143,170790,53113],{"class":149},[143,170792,63562],{"class":163},[143,170794,13335],{"class":149},[143,170796,70005],{"class":163},[143,170798,13335],{"class":149},[143,170800,152196],{"class":163},[143,170802,34144],{"class":149},[143,170804,170805,170807,170809,170812,170814,170816,170819,170821],{"class":145,"line":707},[143,170806,170558],{"class":149},[143,170808,160],{"class":755},[143,170810,170811],{"class":149}," csv.DictWriter(",[143,170813,46252],{"class":6116},[143,170815,13335],{"class":149},[143,170817,170818],{"class":6116},"fieldnames",[143,170820,160],{"class":755},[143,170822,170823],{"class":149},"fieldnames)\n",[143,170825,170826],{"class":145,"line":727},[143,170827,170828],{"class":149},"    writer.writeheader()\n",[143,170830,170831],{"class":145,"line":2518},[143,170832,170572],{"class":149},[14,170834,170836],{"id":170835},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[63,170838,124167],{},[19,170840,170841,170844,170847],{},[22,170842,170843],{},"读取文本文件。",[22,170845,170846],{},"统计每个单词出现次数。",[22,170848,170849],{},"输出出现次数最多的前 10 个单词。",[63,170851,10935],{},[133,170853,170855],{"className":31276,"code":170854,"language":31278,"meta":138,"style":138},"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",[140,170856,170857,170867,170871,170884,170900,170904,170914,170923,170927,170939,170959,170968,170972,170990,170994,171024,171028,171044],{"__ignoreMap":138},[143,170858,170859,170861,170863,170865],{"class":145,"line":146},[143,170860,31635],{"class":755},[143,170862,109186],{"class":149},[143,170864,31290],{"class":755},[143,170866,109191],{"class":149},[143,170868,170869],{"class":145,"line":35},[143,170870,3300],{"emptyLinePlaceholder":976},[143,170872,170873,170875,170877,170879,170882],{"class":145,"line":46},[143,170874,169035],{"class":149},[143,170876,160],{"class":755},[143,170878,109420],{"class":149},[143,170880,170881],{"class":163},"\"article.txt\"",[143,170883,1055],{"class":149},[143,170885,170886,170888,170890,170892,170894,170896,170898],{"class":145,"line":293},[143,170887,169218],{"class":149},[143,170889,160],{"class":755},[143,170891,170095],{"class":149},[143,170893,147530],{"class":6116},[143,170895,160],{"class":755},[143,170897,147535],{"class":163},[143,170899,1055],{"class":149},[143,170901,170902],{"class":145,"line":306},[143,170903,3300],{"emptyLinePlaceholder":976},[143,170905,170906,170909,170911],{"class":145,"line":319},[143,170907,170908],{"class":149},"words ",[143,170910,160],{"class":755},[143,170912,170913],{"class":149}," content.lower().split()\n",[143,170915,170916,170919,170921],{"class":145,"line":332},[143,170917,170918],{"class":149},"counter ",[143,170920,160],{"class":755},[143,170922,88746],{"class":149},[143,170924,170925],{"class":145,"line":345},[143,170926,3300],{"emptyLinePlaceholder":976},[143,170928,170929,170931,170934,170936],{"class":145,"line":701},[143,170930,3925],{"class":755},[143,170932,170933],{"class":149}," word ",[143,170935,26941],{"class":755},[143,170937,170938],{"class":149}," words:\n",[143,170940,170941,170944,170946,170949,170952,170954,170957],{"class":145,"line":707},[143,170942,170943],{"class":149},"    word ",[143,170945,160],{"class":755},[143,170947,170948],{"class":149}," word.strip(",[143,170950,170951],{"class":163},"\".,!?;:",[143,170953,157219],{"class":280},[143,170955,170956],{"class":163},"'()[]\"",[143,170958,1055],{"class":149},[143,170960,170961,170963,170965],{"class":145,"line":727},[143,170962,4001],{"class":755},[143,170964,39828],{"class":755},[143,170966,170967],{"class":149}," word:\n",[143,170969,170970],{"class":145,"line":2518},[143,170971,149236],{"class":755},[143,170973,170974,170977,170979,170982,170984,170986,170988],{"class":145,"line":2524},[143,170975,170976],{"class":149},"    counter[word] ",[143,170978,160],{"class":755},[143,170980,170981],{"class":149}," counter.get(word, ",[143,170983,1234],{"class":280},[143,170985,14614],{"class":149},[143,170987,1522],{"class":755},[143,170989,56582],{"class":280},[143,170991,170992],{"class":145,"line":2529},[143,170993,3300],{"emptyLinePlaceholder":976},[143,170995,170996,170999,171001,171003,171006,171008,171010,171012,171014,171016,171018,171020,171022],{"class":145,"line":2543},[143,170997,170998],{"class":149},"items ",[143,171000,160],{"class":755},[143,171002,164328],{"class":280},[143,171004,171005],{"class":149},"(counter.items(), ",[143,171007,154670],{"class":6116},[143,171009,154673],{"class":755},[143,171011,154676],{"class":149},[143,171013,771],{"class":280},[143,171015,113077],{"class":149},[143,171017,164252],{"class":6116},[143,171019,160],{"class":755},[143,171021,32374],{"class":280},[143,171023,1055],{"class":149},[143,171025,171026],{"class":145,"line":2548},[143,171027,3300],{"emptyLinePlaceholder":976},[143,171029,171030,171032,171035,171037,171040,171042],{"class":145,"line":2554},[143,171031,3925],{"class":755},[143,171033,171034],{"class":149}," word, count ",[143,171036,26941],{"class":755},[143,171038,171039],{"class":149}," items[:",[143,171041,1487],{"class":280},[143,171043,166479],{"class":149},[143,171045,171046,171048],{"class":145,"line":2575},[143,171047,32197],{"class":280},[143,171049,171050],{"class":149},"(word, count)\n",[14,171052,171054],{"id":171053},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[133,171056,171058],{"className":31276,"code":171057,"language":31278,"meta":138,"style":138},"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",[140,171059,171060,171066,171076,171080,171092,171096,171100,171108,171118,171124,171128,171158,171168,171172,171176,171184,171214,171238,171242,171246,171254,171283,171288],{"__ignoreMap":138},[143,171061,171062,171064],{"class":145,"line":146},[143,171063,31290],{"class":755},[143,171065,147815],{"class":149},[143,171067,171068,171070,171072,171074],{"class":145,"line":35},[143,171069,31635],{"class":755},[143,171071,109186],{"class":149},[143,171073,31290],{"class":755},[143,171075,109191],{"class":149},[143,171077,171078],{"class":145,"line":46},[143,171079,3300],{"emptyLinePlaceholder":976},[143,171081,171082,171084,171086,171088,171090],{"class":145,"line":293},[143,171083,152548],{"class":280},[143,171085,14464],{"class":755},[143,171087,109420],{"class":149},[143,171089,152555],{"class":163},[143,171091,1055],{"class":149},[143,171093,171094],{"class":145,"line":306},[143,171095,3300],{"emptyLinePlaceholder":976},[143,171097,171098],{"class":145,"line":319},[143,171099,3300],{"emptyLinePlaceholder":976},[143,171101,171102,171104,171106],{"class":145,"line":332},[143,171103,32845],{"class":755},[143,171105,152572],{"class":156},[143,171107,32851],{"class":149},[143,171109,171110,171112,171114,171116],{"class":145,"line":345},[143,171111,4001],{"class":755},[143,171113,39828],{"class":755},[143,171115,152583],{"class":280},[143,171117,152586],{"class":149},[143,171119,171120,171122],{"class":145,"line":701},[143,171121,15651],{"class":755},[143,171123,52726],{"class":149},[143,171125,171126],{"class":145,"line":707},[143,171127,3300],{"emptyLinePlaceholder":976},[143,171129,171130,171132,171134,171136,171138,171140,171142,171144,171146,171148,171150,171152,171154,171156],{"class":145,"line":727},[143,171131,35076],{"class":755},[143,171133,147515],{"class":280},[143,171135,1049],{"class":149},[143,171137,152548],{"class":280},[143,171139,13335],{"class":149},[143,171141,147525],{"class":163},[143,171143,13335],{"class":149},[143,171145,147530],{"class":6116},[143,171147,160],{"class":755},[143,171149,147535],{"class":163},[143,171151,14614],{"class":149},[143,171153,32281],{"class":755},[143,171155,148877],{"class":6116},[143,171157,4639],{"class":149},[143,171159,171160,171162,171164,171166],{"class":145,"line":2518},[143,171161,15651],{"class":755},[143,171163,148888],{"class":149},[143,171165,46252],{"class":6116},[143,171167,1055],{"class":149},[143,171169,171170],{"class":145,"line":2524},[143,171171,3300],{"emptyLinePlaceholder":976},[143,171173,171174],{"class":145,"line":2529},[143,171175,3300],{"emptyLinePlaceholder":976},[143,171177,171178,171180,171182],{"class":145,"line":2543},[143,171179,32845],{"class":755},[143,171181,152682],{"class":156},[143,171183,152685],{"class":149},[143,171185,171186,171188,171190,171192,171194,171196,171198,171200,171202,171204,171206,171208,171210,171212],{"class":145,"line":2548},[143,171187,35076],{"class":755},[143,171189,147515],{"class":280},[143,171191,1049],{"class":149},[143,171193,152548],{"class":280},[143,171195,13335],{"class":149},[143,171197,152700],{"class":163},[143,171199,13335],{"class":149},[143,171201,147530],{"class":6116},[143,171203,160],{"class":755},[143,171205,147535],{"class":163},[143,171207,14614],{"class":149},[143,171209,32281],{"class":755},[143,171211,148877],{"class":6116},[143,171213,4639],{"class":149},[143,171215,171216,171218,171220,171222,171224,171226,171228,171230,171232,171234,171236],{"class":145,"line":2554},[143,171217,152721],{"class":149},[143,171219,46252],{"class":6116},[143,171221,13335],{"class":149},[143,171223,147861],{"class":6116},[143,171225,160],{"class":755},[143,171227,34885],{"class":280},[143,171229,13335],{"class":149},[143,171231,152736],{"class":6116},[143,171233,160],{"class":755},[143,171235,1122],{"class":280},[143,171237,1055],{"class":149},[143,171239,171240],{"class":145,"line":2575},[143,171241,3300],{"emptyLinePlaceholder":976},[143,171243,171244],{"class":145,"line":2580},[143,171245,3300],{"emptyLinePlaceholder":976},[143,171247,171248,171250,171252],{"class":145,"line":2594},[143,171249,160440],{"class":149},[143,171251,160],{"class":755},[143,171253,153766],{"class":149},[143,171255,171256,171259,171261,171263,171265,171267,171269,171271,171273,171275,171277,171279,171281],{"class":145,"line":2599},[143,171257,171258],{"class":149},"students.append({",[143,171260,63562],{"class":163},[143,171262,284],{"class":149},[143,171264,150612],{"class":163},[143,171266,13335],{"class":149},[143,171268,70005],{"class":163},[143,171270,284],{"class":149},[143,171272,1691],{"class":280},[143,171274,13335],{"class":149},[143,171276,152196],{"class":163},[143,171278,284],{"class":149},[143,171280,2027],{"class":280},[143,171282,165876],{"class":149},[143,171284,171285],{"class":145,"line":2628},[143,171286,171287],{"class":149},"save_students(students)\n",[143,171289,171290,171292,171294,171297],{"class":145,"line":2633},[143,171291,31313],{"class":280},[143,171293,1049],{"class":149},[143,171295,171296],{"class":163},"\"保存成功\"",[143,171298,1055],{"class":149},[14,171300,171302],{"id":171301},"_814-易错点","8.14 易错点",[19,171304,171305,171309,171315,171320,171327,171334],{},[22,171306,171307,169568],{},[140,171308,1836],{},[22,171310,171311,171312,29283],{},"读写中文要指定 ",[140,171313,171314],{},"encoding=\"utf-8\"",[22,171316,171317,171318,29283],{},"打开文件后要关闭，推荐使用 ",[140,171319,108708],{},[22,171321,171322,171323,171326],{},"读取大文件不要直接 ",[140,171324,171325],{},"read()"," 全部内容。",[22,171328,171329,171330,171333],{},"Windows 写 CSV 时建议加 ",[140,171331,171332],{},"newline=\"\"","，避免空行。",[22,171335,171336],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171338,171340],{"id":171339},"_815-本章练习","8.15 本章练习",[19,171342,171343,171350,171355,171358,171361],{},[22,171344,171345,171346,171349],{},"写入一个 ",[140,171347,171348],{},"students.txt","，每行保存一个学生姓名。",[22,171351,105230,171352,171354],{},[140,171353,171348],{}," 并输出所有学生。",[22,171356,171357],{},"把学生列表保存为 JSON 文件。",[22,171359,171360],{},"从 JSON 文件读取学生数据，计算平均分。",[22,171362,171363,171364,171367,171368,171371],{},"写一个日志函数 ",[140,171365,171366],{},"write_log(message)","，每次调用向 ",[140,171369,171370],{},"app.log"," 追加一行。",[954,171373,171374],{},"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":138,"searchDepth":35,"depth":35,"links":171376},[171377,171378,171382,171383,171389,171390,171391,171392,171393,171394,171395,171396,171397,171398,171399],{"id":168888,"depth":35,"text":168889},{"id":168929,"depth":35,"text":168930,"children":171379},[171380,171381],{"id":168933,"depth":46,"text":168934},{"id":168967,"depth":46,"text":168968},{"id":169081,"depth":35,"text":169082},{"id":169174,"depth":35,"text":169175,"children":171384},[171385,171386,171387,171388],{"id":169178,"depth":46,"text":169179},{"id":169265,"depth":46,"text":169266},{"id":169335,"depth":46,"text":169336},{"id":169429,"depth":46,"text":169430},{"id":169499,"depth":35,"text":169500},{"id":169562,"depth":35,"text":169563},{"id":169723,"depth":35,"text":169724},{"id":169786,"depth":35,"text":169787},{"id":169902,"depth":35,"text":169903},{"id":170112,"depth":35,"text":170113},{"id":170424,"depth":35,"text":170425},{"id":170835,"depth":35,"text":170836},{"id":171053,"depth":35,"text":171054},{"id":171301,"depth":35,"text":171302},{"id":171339,"depth":35,"text":171340},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168880,"description":973},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171406,"title":171407,"body":171408,"description":973,"extension":974,"meta":173594,"navigation":976,"path":173595,"seo":173596,"stem":173597,"__hash__":173598},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171409,"toc":173561},[171410,171413,171417,171420,171423,171515,171517,171536,171541,171545,171548,171551,171580,171587,171590,171594,171597,171626,171628,171680,171686,171739,171743,171841,171844,171911,171915,171972,171974,171980,171984,171989,171995,172086,172091,172095,172098,172176,172179,172217,172221,172339,172342,172346,172349,172394,172397,172401,172406,172412,172462,172465,172496,172500,172504,172534,172538,172573,172577,172612,172652,172656,172672,172675,172679,172683,172762,172766,172807,172811,172866,172870,172904,172908,172938,172947,172954,172960,173017,173020,173028,173031,173035,173042,173045,173051,173054,173071,173076,173080,173086,173099,173102,173139,173142,173153,173156,173170,173173,173187,173191,173198,173231,173234,173236,173242,173245,173249,173251,173257,173262,173435,173439,173502,173506,173530,173534,173558],[10,171411,171407],{"id":171412},"_9-异常模块与包",[14,171414,171416],{"id":171415},"_91-什么是异常","9.1 什么是异常",[63,171418,171419],{},"异常是程序运行过程中出现的错误。",[63,171421,171422],{},"常见异常：",[1181,171424,171425,171434],{},[1184,171426,171427],{},[1187,171428,171429,171432],{},[1190,171430,171431],{},"异常",[1190,171433,26767],{},[1227,171435,171436,171446,171456,171465,171475,171485,171495,171505],{},[1187,171437,171438,171443],{},[1232,171439,171440],{},[140,171441,171442],{},"NameError",[1232,171444,171445],{},"使用了未定义变量",[1187,171447,171448,171453],{},[1232,171449,171450],{},[140,171451,171452],{},"TypeError",[1232,171454,171455],{},"类型不匹配",[1187,171457,171458,171462],{},[1232,171459,171460],{},[140,171461,155558],{},[1232,171463,171464],{},"值不合法",[1187,171466,171467,171472],{},[1232,171468,171469],{},[140,171470,171471],{},"IndexError",[1232,171473,171474],{},"列表索引越界",[1187,171476,171477,171482],{},[1232,171478,171479],{},[140,171480,171481],{},"KeyError",[1232,171483,171484],{},"字典 key 不存在",[1187,171486,171487,171492],{},[1232,171488,171489],{},[140,171490,171491],{},"FileNotFoundError",[1232,171493,171494],{},"文件不存在",[1187,171496,171497,171502],{},[1232,171498,171499],{},[140,171500,171501],{},"ZeroDivisionError",[1232,171503,171504],{},"除数为 0",[1187,171506,171507,171512],{},[1232,171508,171509],{},[140,171510,171511],{},"ImportError",[1232,171513,171514],{},"导入失败",[63,171516,16034],{},[133,171518,171520],{"className":31276,"code":171519,"language":31278,"meta":138,"style":138},"num = int(\"abc\")\n",[140,171521,171522],{"__ignoreMap":138},[143,171523,171524,171526,171528,171530,171532,171534],{"class":145,"line":146},[143,171525,156511],{"class":149},[143,171527,160],{"class":755},[143,171529,3282],{"class":280},[143,171531,1049],{"class":149},[143,171533,156604],{"class":163},[143,171535,1055],{"class":149},[63,171537,171538,171539,29283],{},"会触发 ",[140,171540,155558],{},[14,171542,171544],{"id":171543},"_92-为什么要处理异常","9.2 为什么要处理异常",[63,171546,171547],{},"如果不处理异常，程序会直接终止。",[63,171549,171550],{},"例如用户输入年龄：",[133,171552,171554],{"className":31276,"code":171553,"language":31278,"meta":138,"style":138},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[140,171555,171556,171574],{"__ignoreMap":138},[143,171557,171558,171560,171562,171564,171566,171568,171570,171572],{"class":145,"line":146},[143,171559,147270],{"class":149},[143,171561,160],{"class":755},[143,171563,3282],{"class":280},[143,171565,1049],{"class":149},[143,171567,746],{"class":280},[143,171569,1049],{"class":149},[143,171571,153118],{"class":163},[143,171573,31395],{"class":149},[143,171575,171576,171578],{"class":145,"line":35},[143,171577,31313],{"class":280},[143,171579,156485],{"class":149},[63,171581,171582,171583,171586],{},"用户输入 ",[140,171584,171585],{},"abc","，程序就会报错退出。",[63,171588,171589],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171591,171593],{"id":171592},"_93-try-except","9.3 try except",[63,171595,171596],{},"基础语法：",[133,171598,171600],{"className":31276,"code":171599,"language":31278,"meta":138,"style":138},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[140,171601,171602,171609,171614,171621],{"__ignoreMap":138},[143,171603,171604,171607],{"class":145,"line":146},[143,171605,171606],{"class":755},"try",[143,171608,4639],{"class":149},[143,171610,171611],{"class":145,"line":35},[143,171612,171613],{"class":149},"    可能出错的代码\n",[143,171615,171616,171619],{"class":145,"line":46},[143,171617,171618],{"class":755},"except",[143,171620,4639],{"class":149},[143,171622,171623],{"class":145,"line":293},[143,171624,171625],{"class":149},"    出错后的处理代码\n",[63,171627,16034],{},[133,171629,171631],{"className":31276,"code":171630,"language":31278,"meta":138,"style":138},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[140,171632,171633,171639,171657,171663,171669],{"__ignoreMap":138},[143,171634,171635,171637],{"class":145,"line":146},[143,171636,171606],{"class":755},[143,171638,4639],{"class":149},[143,171640,171641,171643,171645,171647,171649,171651,171653,171655],{"class":145,"line":35},[143,171642,153110],{"class":149},[143,171644,160],{"class":755},[143,171646,3282],{"class":280},[143,171648,1049],{"class":149},[143,171650,746],{"class":280},[143,171652,1049],{"class":149},[143,171654,153118],{"class":163},[143,171656,31395],{"class":149},[143,171658,171659,171661],{"class":145,"line":46},[143,171660,32197],{"class":280},[143,171662,156485],{"class":149},[143,171664,171665,171667],{"class":145,"line":293},[143,171666,171618],{"class":755},[143,171668,4639],{"class":149},[143,171670,171671,171673,171675,171678],{"class":145,"line":306},[143,171672,32197],{"class":280},[143,171674,1049],{"class":149},[143,171676,171677],{"class":163},"\"年龄必须是数字\"",[143,171679,1055],{"class":149},[63,171681,171682,171683,171685],{},"不建议裸写 ",[140,171684,171618],{},"，最好指定异常类型。",[133,171687,171689],{"className":31276,"code":171688,"language":31278,"meta":138,"style":138},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[140,171690,171691,171697,171715,171721,171729],{"__ignoreMap":138},[143,171692,171693,171695],{"class":145,"line":146},[143,171694,171606],{"class":755},[143,171696,4639],{"class":149},[143,171698,171699,171701,171703,171705,171707,171709,171711,171713],{"class":145,"line":35},[143,171700,153110],{"class":149},[143,171702,160],{"class":755},[143,171704,3282],{"class":280},[143,171706,1049],{"class":149},[143,171708,746],{"class":280},[143,171710,1049],{"class":149},[143,171712,153118],{"class":163},[143,171714,31395],{"class":149},[143,171716,171717,171719],{"class":145,"line":46},[143,171718,32197],{"class":280},[143,171720,156485],{"class":149},[143,171722,171723,171725,171727],{"class":145,"line":293},[143,171724,171618],{"class":755},[143,171726,152950],{"class":280},[143,171728,4639],{"class":149},[143,171730,171731,171733,171735,171737],{"class":145,"line":306},[143,171732,32197],{"class":280},[143,171734,1049],{"class":149},[143,171736,171677],{"class":163},[143,171738,1055],{"class":149},[14,171740,171742],{"id":171741},"_94-捕获多个异常","9.4 捕获多个异常",[133,171744,171746],{"className":31276,"code":171745,"language":31278,"meta":138,"style":138},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[140,171747,171748,171754,171775,171795,171802,171810,171821,171830],{"__ignoreMap":138},[143,171749,171750,171752],{"class":145,"line":146},[143,171751,171606],{"class":755},[143,171753,4639],{"class":149},[143,171755,171756,171759,171761,171763,171765,171767,171769,171771,171773],{"class":145,"line":35},[143,171757,171758],{"class":149},"    nums ",[143,171760,160],{"class":755},[143,171762,53113],{"class":149},[143,171764,771],{"class":280},[143,171766,13335],{"class":149},[143,171768,1122],{"class":280},[143,171770,13335],{"class":149},[143,171772,1116],{"class":280},[143,171774,34144],{"class":149},[143,171776,171777,171780,171782,171784,171786,171788,171790,171793],{"class":145,"line":46},[143,171778,171779],{"class":149},"    index ",[143,171781,160],{"class":755},[143,171783,3282],{"class":280},[143,171785,1049],{"class":149},[143,171787,746],{"class":280},[143,171789,1049],{"class":149},[143,171791,171792],{"class":163},"\"请输入索引:\"",[143,171794,31395],{"class":149},[143,171796,171797,171799],{"class":145,"line":293},[143,171798,32197],{"class":280},[143,171800,171801],{"class":149},"(nums[index])\n",[143,171803,171804,171806,171808],{"class":145,"line":306},[143,171805,171618],{"class":755},[143,171807,152950],{"class":280},[143,171809,4639],{"class":149},[143,171811,171812,171814,171816,171819],{"class":145,"line":319},[143,171813,32197],{"class":280},[143,171815,1049],{"class":149},[143,171817,171818],{"class":163},"\"索引必须是整数\"",[143,171820,1055],{"class":149},[143,171822,171823,171825,171828],{"class":145,"line":332},[143,171824,171618],{"class":755},[143,171826,171827],{"class":280}," IndexError",[143,171829,4639],{"class":149},[143,171831,171832,171834,171836,171839],{"class":145,"line":345},[143,171833,32197],{"class":280},[143,171835,1049],{"class":149},[143,171837,171838],{"class":163},"\"索引越界\"",[143,171840,1055],{"class":149},[63,171842,171843],{},"多个异常使用相同处理逻辑：",[133,171845,171847],{"className":31276,"code":171846,"language":31278,"meta":138,"style":138},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[140,171848,171849,171855,171873,171886,171900],{"__ignoreMap":138},[143,171850,171851,171853],{"class":145,"line":146},[143,171852,171606],{"class":755},[143,171854,4639],{"class":149},[143,171856,171857,171859,171861,171863,171865,171867,171869,171871],{"class":145,"line":35},[143,171858,46491],{"class":149},[143,171860,160],{"class":755},[143,171862,3282],{"class":280},[143,171864,1049],{"class":149},[143,171866,746],{"class":280},[143,171868,1049],{"class":149},[143,171870,156520],{"class":163},[143,171872,31395],{"class":149},[143,171874,171875,171877,171879,171881,171883],{"class":145,"line":46},[143,171876,32197],{"class":280},[143,171878,1049],{"class":149},[143,171880,1487],{"class":280},[143,171882,156770],{"class":755},[143,171884,171885],{"class":149}," num)\n",[143,171887,171888,171890,171892,171894,171896,171898],{"class":145,"line":293},[143,171889,171618],{"class":755},[143,171891,2559],{"class":149},[143,171893,155558],{"class":280},[143,171895,13335],{"class":149},[143,171897,171501],{"class":280},[143,171899,31684],{"class":149},[143,171901,171902,171904,171906,171909],{"class":145,"line":306},[143,171903,32197],{"class":280},[143,171905,1049],{"class":149},[143,171907,171908],{"class":163},"\"输入不合法\"",[143,171910,1055],{"class":149},[14,171912,171914],{"id":171913},"_95-获取异常信息","9.5 获取异常信息",[133,171916,171918],{"className":31276,"code":171917,"language":31278,"meta":138,"style":138},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[140,171919,171920,171926,171940,171951],{"__ignoreMap":138},[143,171921,171922,171924],{"class":145,"line":146},[143,171923,171606],{"class":755},[143,171925,4639],{"class":149},[143,171927,171928,171930,171932,171934,171936,171938],{"class":145,"line":35},[143,171929,46491],{"class":149},[143,171931,160],{"class":755},[143,171933,3282],{"class":280},[143,171935,1049],{"class":149},[143,171937,156604],{"class":163},[143,171939,1055],{"class":149},[143,171941,171942,171944,171946,171948],{"class":145,"line":46},[143,171943,171618],{"class":755},[143,171945,152950],{"class":280},[143,171947,65486],{"class":755},[143,171949,171950],{"class":149}," e:\n",[143,171952,171953,171955,171957,171959,171962,171964,171966,171968,171970],{"class":145,"line":293},[143,171954,32197],{"class":280},[143,171956,1049],{"class":149},[143,171958,1098],{"class":755},[143,171960,171961],{"class":163},"\"出错了:",[143,171963,1936],{"class":280},[143,171965,1119],{"class":149},[143,171967,366],{"class":280},[143,171969,1292],{"class":163},[143,171971,1055],{"class":149},[63,171973,147181],{},[133,171975,171978],{"className":171976,"code":171977,"language":6087,"meta":138},[6085],"出错了:invalid literal for int() with base 10: 'abc'\n",[140,171979,171977],{"__ignoreMap":138},[14,171981,171983],{"id":171982},"_96-else和finally","9.6 else和finally",[63,171985,171986,171988],{},[140,171987,2602],{},"：没有异常时执行。",[63,171990,171991,171994],{},[140,171992,171993],{},"finally","：无论是否异常都会执行。",[133,171996,171998],{"className":31276,"code":171997,"language":31278,"meta":138,"style":138},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[140,171999,172000,172006,172024,172032,172042,172048,172069,172075],{"__ignoreMap":138},[143,172001,172002,172004],{"class":145,"line":146},[143,172003,171606],{"class":755},[143,172005,4639],{"class":149},[143,172007,172008,172010,172012,172014,172016,172018,172020,172022],{"class":145,"line":35},[143,172009,46491],{"class":149},[143,172011,160],{"class":755},[143,172013,3282],{"class":280},[143,172015,1049],{"class":149},[143,172017,746],{"class":280},[143,172019,1049],{"class":149},[143,172021,156520],{"class":163},[143,172023,31395],{"class":149},[143,172025,172026,172028,172030],{"class":145,"line":46},[143,172027,171618],{"class":755},[143,172029,152950],{"class":280},[143,172031,4639],{"class":149},[143,172033,172034,172036,172038,172040],{"class":145,"line":293},[143,172035,32197],{"class":280},[143,172037,1049],{"class":149},[143,172039,153938],{"class":163},[143,172041,1055],{"class":149},[143,172043,172044,172046],{"class":145,"line":306},[143,172045,2602],{"class":755},[143,172047,4639],{"class":149},[143,172049,172050,172052,172054,172056,172059,172061,172063,172065,172067],{"class":145,"line":319},[143,172051,32197],{"class":280},[143,172053,1049],{"class":149},[143,172055,1098],{"class":755},[143,172057,172058],{"class":163},"\"输入正确:",[143,172060,1936],{"class":280},[143,172062,2566],{"class":149},[143,172064,366],{"class":280},[143,172066,1292],{"class":163},[143,172068,1055],{"class":149},[143,172070,172071,172073],{"class":145,"line":332},[143,172072,171993],{"class":755},[143,172074,4639],{"class":149},[143,172076,172077,172079,172081,172084],{"class":145,"line":345},[143,172078,32197],{"class":280},[143,172080,1049],{"class":149},[143,172082,172083],{"class":163},"\"程序结束\"",[143,172085,1055],{"class":149},[63,172087,172088,172090],{},[140,172089,171993],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172092,172094],{"id":172093},"_97-抛出异常","9.7 抛出异常",[63,172096,172097],{},"程序可以主动抛出异常。",[133,172099,172101],{"className":31276,"code":172100,"language":31278,"meta":138,"style":138},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[140,172102,172103,172112,172124,172137,172157,172161,172165],{"__ignoreMap":138},[143,172104,172105,172107,172110],{"class":145,"line":146},[143,172106,32845],{"class":755},[143,172108,172109],{"class":156}," set_age",[143,172111,162139],{"class":149},[143,172113,172114,172116,172118,172120,172122],{"class":145,"line":35},[143,172115,4001],{"class":755},[143,172117,16605],{"class":149},[143,172119,150],{"class":755},[143,172121,4993],{"class":280},[143,172123,4639],{"class":149},[143,172125,172126,172128,172130,172132,172135],{"class":145,"line":46},[143,172127,104307],{"class":755},[143,172129,152950],{"class":280},[143,172131,1049],{"class":149},[143,172133,172134],{"class":163},"\"年龄不能为负数\"",[143,172136,1055],{"class":149},[143,172138,172139,172141,172143,172145,172147,172149,172151,172153,172155],{"class":145,"line":293},[143,172140,32197],{"class":280},[143,172142,1049],{"class":149},[143,172144,1098],{"class":755},[143,172146,162707],{"class":163},[143,172148,1936],{"class":280},[143,172150,71102],{"class":149},[143,172152,366],{"class":280},[143,172154,1292],{"class":163},[143,172156,1055],{"class":149},[143,172158,172159],{"class":145,"line":306},[143,172160,3300],{"emptyLinePlaceholder":976},[143,172162,172163],{"class":145,"line":319},[143,172164,3300],{"emptyLinePlaceholder":976},[143,172166,172167,172170,172172,172174],{"class":145,"line":332},[143,172168,172169],{"class":149},"set_age(",[143,172171,1573],{"class":755},[143,172173,771],{"class":280},[143,172175,1055],{"class":149},[63,172177,172178],{},"调用者可以捕获：",[133,172180,172182],{"className":31276,"code":172181,"language":31278,"meta":138,"style":138},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[140,172183,172184,172190,172201,172211],{"__ignoreMap":138},[143,172185,172186,172188],{"class":145,"line":146},[143,172187,171606],{"class":755},[143,172189,4639],{"class":149},[143,172191,172192,172195,172197,172199],{"class":145,"line":35},[143,172193,172194],{"class":149},"    set_age(",[143,172196,1573],{"class":755},[143,172198,771],{"class":280},[143,172200,1055],{"class":149},[143,172202,172203,172205,172207,172209],{"class":145,"line":46},[143,172204,171618],{"class":755},[143,172206,152950],{"class":280},[143,172208,65486],{"class":755},[143,172210,171950],{"class":149},[143,172212,172213,172215],{"class":145,"line":293},[143,172214,32197],{"class":280},[143,172216,67881],{"class":149},[14,172218,172220],{"id":172219},"_98-自定义异常","9.8 自定义异常",[133,172222,172224],{"className":31276,"code":172223,"language":31278,"meta":138,"style":138},"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",[140,172225,172226,172240,172244,172248,172252,172260,172270,172281,172291,172295,172299,172305,172322,172333],{"__ignoreMap":138},[143,172227,172228,172230,172233,172235,172238],{"class":145,"line":146},[143,172229,15593],{"class":755},[143,172231,172232],{"class":156}," BalanceNotEnoughError",[143,172234,1049],{"class":149},[143,172236,172237],{"class":280},"Exception",[143,172239,31684],{"class":149},[143,172241,172242],{"class":145,"line":35},[143,172243,150261],{"class":755},[143,172245,172246],{"class":145,"line":46},[143,172247,3300],{"emptyLinePlaceholder":976},[143,172249,172250],{"class":145,"line":293},[143,172251,3300],{"emptyLinePlaceholder":976},[143,172253,172254,172256,172258],{"class":145,"line":306},[143,172255,32845],{"class":755},[143,172257,150910],{"class":156},[143,172259,163536],{"class":149},[143,172261,172262,172264,172266,172268],{"class":145,"line":319},[143,172263,4001],{"class":755},[143,172265,150866],{"class":149},[143,172267,1998],{"class":755},[143,172269,163313],{"class":149},[143,172271,172272,172274,172277,172279],{"class":145,"line":332},[143,172273,104307],{"class":755},[143,172275,172276],{"class":149}," BalanceNotEnoughError(",[143,172278,150961],{"class":163},[143,172280,1055],{"class":149},[143,172282,172283,172285,172287,172289],{"class":145,"line":345},[143,172284,4990],{"class":755},[143,172286,163543],{"class":149},[143,172288,1573],{"class":755},[143,172290,150899],{"class":149},[143,172292,172293],{"class":145,"line":701},[143,172294,3300],{"emptyLinePlaceholder":976},[143,172296,172297],{"class":145,"line":707},[143,172298,3300],{"emptyLinePlaceholder":976},[143,172300,172301,172303],{"class":145,"line":727},[143,172302,171606],{"class":755},[143,172304,4639],{"class":149},[143,172306,172307,172309,172311,172314,172316,172318,172320],{"class":145,"line":2518},[143,172308,163214],{"class":149},[143,172310,160],{"class":755},[143,172312,172313],{"class":149}," withdraw(",[143,172315,1352],{"class":280},[143,172317,13335],{"class":149},[143,172319,2623],{"class":280},[143,172321,1055],{"class":149},[143,172323,172324,172326,172329,172331],{"class":145,"line":2524},[143,172325,171618],{"class":755},[143,172327,172328],{"class":149}," BalanceNotEnoughError ",[143,172330,32281],{"class":755},[143,172332,171950],{"class":149},[143,172334,172335,172337],{"class":145,"line":2529},[143,172336,32197],{"class":280},[143,172338,67881],{"class":149},[63,172340,172341],{},"入门阶段大多数情况使用内置异常即可。",[14,172343,172345],{"id":172344},"_99-traceback","9.9 traceback",[63,172347,172348],{},"调试时可以输出完整异常堆栈。",[133,172350,172352],{"className":31276,"code":172351,"language":31278,"meta":138,"style":138},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[140,172353,172354,172361,172365,172371,172381,172389],{"__ignoreMap":138},[143,172355,172356,172358],{"class":145,"line":146},[143,172357,31290],{"class":755},[143,172359,172360],{"class":149}," traceback\n",[143,172362,172363],{"class":145,"line":35},[143,172364,3300],{"emptyLinePlaceholder":976},[143,172366,172367,172369],{"class":145,"line":46},[143,172368,171606],{"class":755},[143,172370,4639],{"class":149},[143,172372,172373,172375,172377,172379],{"class":145,"line":293},[143,172374,2885],{"class":280},[143,172376,1049],{"class":149},[143,172378,156604],{"class":163},[143,172380,1055],{"class":149},[143,172382,172383,172385,172387],{"class":145,"line":306},[143,172384,171618],{"class":755},[143,172386,152950],{"class":280},[143,172388,4639],{"class":149},[143,172390,172391],{"class":145,"line":319},[143,172392,172393],{"class":149},"    traceback.print_exc()\n",[63,172395,172396],{},"日志系统中常把异常堆栈记录到文件。",[14,172398,172400],{"id":172399},"_910-什么是模块","9.10 什么是模块",[63,172402,172403,172404,126858],{},"模块就是一个 ",[140,172405,147076],{},[63,172407,172408,172409,25516],{},"例如创建 ",[140,172410,172411],{},"my_math.py",[133,172413,172415],{"className":31276,"code":172414,"language":31278,"meta":138,"style":138},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[140,172416,172417,172425,172435,172439,172443,172452],{"__ignoreMap":138},[143,172418,172419,172421,172423],{"class":145,"line":146},[143,172420,32845],{"class":755},[143,172422,6109],{"class":156},[143,172424,151817],{"class":149},[143,172426,172427,172429,172431,172433],{"class":145,"line":35},[143,172428,4990],{"class":755},[143,172430,11769],{"class":149},[143,172432,1522],{"class":755},[143,172434,151828],{"class":149},[143,172436,172437],{"class":145,"line":46},[143,172438,3300],{"emptyLinePlaceholder":976},[143,172440,172441],{"class":145,"line":293},[143,172442,3300],{"emptyLinePlaceholder":976},[143,172444,172445,172447,172450],{"class":145,"line":306},[143,172446,32845],{"class":755},[143,172448,172449],{"class":156}," sub",[143,172451,151817],{"class":149},[143,172453,172454,172456,172458,172460],{"class":145,"line":319},[143,172455,4990],{"class":755},[143,172457,11769],{"class":149},[143,172459,1573],{"class":755},[143,172461,151828],{"class":149},[63,172463,172464],{},"在另一个文件中导入：",[133,172466,172468],{"className":31276,"code":172467,"language":31278,"meta":138,"style":138},"import my_math\n\nprint(my_math.add(1, 2))\n",[140,172469,172470,172477,172481],{"__ignoreMap":138},[143,172471,172472,172474],{"class":145,"line":146},[143,172473,31290],{"class":755},[143,172475,172476],{"class":149}," my_math\n",[143,172478,172479],{"class":145,"line":35},[143,172480,3300],{"emptyLinePlaceholder":976},[143,172482,172483,172485,172488,172490,172492,172494],{"class":145,"line":46},[143,172484,31313],{"class":280},[143,172486,172487],{"class":149},"(my_math.add(",[143,172489,771],{"class":280},[143,172491,13335],{"class":149},[143,172493,1122],{"class":280},[143,172495,31395],{"class":149},[14,172497,172499],{"id":172498},"_911-import导入","9.11 import导入",[58,172501,172503],{"id":172502},"_9111-导入模块","9.11.1 导入模块",[133,172505,172507],{"className":31276,"code":172506,"language":31278,"meta":138,"style":138},"import random\n\nprint(random.randint(1, 10))\n",[140,172508,172509,172515,172519],{"__ignoreMap":138},[143,172510,172511,172513],{"class":145,"line":146},[143,172512,31290],{"class":755},[143,172514,46226],{"class":149},[143,172516,172517],{"class":145,"line":35},[143,172518,3300],{"emptyLinePlaceholder":976},[143,172520,172521,172523,172526,172528,172530,172532],{"class":145,"line":46},[143,172522,31313],{"class":280},[143,172524,172525],{"class":149},"(random.randint(",[143,172527,771],{"class":280},[143,172529,13335],{"class":149},[143,172531,1487],{"class":280},[143,172533,31395],{"class":149},[58,172535,172537],{"id":172536},"_9112-导入指定内容","9.11.2 导入指定内容",[133,172539,172541],{"className":31276,"code":172540,"language":31278,"meta":138,"style":138},"from random import randint\n\nprint(randint(1, 10))\n",[140,172542,172543,172554,172558],{"__ignoreMap":138},[143,172544,172545,172547,172549,172551],{"class":145,"line":146},[143,172546,31635],{"class":755},[143,172548,58679],{"class":149},[143,172550,31290],{"class":755},[143,172552,172553],{"class":149}," randint\n",[143,172555,172556],{"class":145,"line":35},[143,172557,3300],{"emptyLinePlaceholder":976},[143,172559,172560,172562,172565,172567,172569,172571],{"class":145,"line":46},[143,172561,31313],{"class":280},[143,172563,172564],{"class":149},"(randint(",[143,172566,771],{"class":280},[143,172568,13335],{"class":149},[143,172570,1487],{"class":280},[143,172572,31395],{"class":149},[58,172574,172576],{"id":172575},"_9113-起别名","9.11.3 起别名",[133,172578,172580],{"className":31276,"code":172579,"language":31278,"meta":138,"style":138},"import random as rd\n\nprint(rd.randint(1, 10))\n",[140,172581,172582,172593,172597],{"__ignoreMap":138},[143,172583,172584,172586,172588,172590],{"class":145,"line":146},[143,172585,31290],{"class":755},[143,172587,58679],{"class":149},[143,172589,32281],{"class":755},[143,172591,172592],{"class":149}," rd\n",[143,172594,172595],{"class":145,"line":35},[143,172596,3300],{"emptyLinePlaceholder":976},[143,172598,172599,172601,172604,172606,172608,172610],{"class":145,"line":46},[143,172600,31313],{"class":280},[143,172602,172603],{"class":149},"(rd.randint(",[143,172605,771],{"class":280},[143,172607,13335],{"class":149},[143,172609,1487],{"class":280},[143,172611,31395],{"class":149},[133,172613,172615],{"className":31276,"code":172614,"language":31278,"meta":138,"style":138},"from random import randint as rint\n\nprint(rint(1, 10))\n",[140,172616,172617,172633,172637],{"__ignoreMap":138},[143,172618,172619,172621,172623,172625,172628,172630],{"class":145,"line":146},[143,172620,31635],{"class":755},[143,172622,58679],{"class":149},[143,172624,31290],{"class":755},[143,172626,172627],{"class":149}," randint ",[143,172629,32281],{"class":755},[143,172631,172632],{"class":149}," rint\n",[143,172634,172635],{"class":145,"line":35},[143,172636,3300],{"emptyLinePlaceholder":976},[143,172638,172639,172641,172644,172646,172648,172650],{"class":145,"line":46},[143,172640,31313],{"class":280},[143,172642,172643],{"class":149},"(rint(",[143,172645,771],{"class":280},[143,172647,13335],{"class":149},[143,172649,1487],{"class":280},[143,172651,31395],{"class":149},[58,172653,172655],{"id":172654},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[133,172657,172659],{"className":31276,"code":172658,"language":31278,"meta":138,"style":138},"from random import *\n",[140,172660,172661],{"__ignoreMap":138},[143,172662,172663,172665,172667,172669],{"class":145,"line":146},[143,172664,31635],{"class":755},[143,172666,58679],{"class":149},[143,172668,31290],{"class":755},[143,172670,172671],{"class":755}," *\n",[63,172673,172674],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172676,172678],{"id":172677},"_912-常用内置模块","9.12 常用内置模块",[58,172680,172682],{"id":172681},"_9121-random","9.12.1 random",[133,172684,172686],{"className":31276,"code":172685,"language":31278,"meta":138,"style":138},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[140,172687,172688,172694,172698,172712,172731],{"__ignoreMap":138},[143,172689,172690,172692],{"class":145,"line":146},[143,172691,31290],{"class":755},[143,172693,46226],{"class":149},[143,172695,172696],{"class":145,"line":35},[143,172697,3300],{"emptyLinePlaceholder":976},[143,172699,172700,172702,172704,172706,172708,172710],{"class":145,"line":46},[143,172701,31313],{"class":280},[143,172703,172525],{"class":149},[143,172705,771],{"class":280},[143,172707,13335],{"class":149},[143,172709,1487],{"class":280},[143,172711,31395],{"class":149},[143,172713,172714,172716,172719,172721,172723,172725,172727,172729],{"class":145,"line":293},[143,172715,31313],{"class":280},[143,172717,172718],{"class":149},"(random.choice([",[143,172720,150612],{"class":163},[143,172722,13335],{"class":149},[143,172724,151660],{"class":163},[143,172726,13335],{"class":149},[143,172728,160455],{"class":163},[143,172730,34041],{"class":149},[143,172732,172733,172735,172738,172740,172742,172744,172746,172748,172750,172752,172754,172756,172758,172760],{"class":145,"line":306},[143,172734,31313],{"class":280},[143,172736,172737],{"class":149},"(random.sample([",[143,172739,771],{"class":280},[143,172741,13335],{"class":149},[143,172743,1122],{"class":280},[143,172745,13335],{"class":149},[143,172747,1116],{"class":280},[143,172749,13335],{"class":149},[143,172751,1334],{"class":280},[143,172753,13335],{"class":149},[143,172755,1360],{"class":280},[143,172757,113077],{"class":149},[143,172759,1122],{"class":280},[143,172761,31395],{"class":149},[58,172763,172765],{"id":172764},"_9122-time","9.12.2 time",[133,172767,172769],{"className":31276,"code":172768,"language":31278,"meta":138,"style":138},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[140,172770,172771,172777,172781,172788,172796],{"__ignoreMap":138},[143,172772,172773,172775],{"class":145,"line":146},[143,172774,31290],{"class":755},[143,172776,32727],{"class":149},[143,172778,172779],{"class":145,"line":35},[143,172780,3300],{"emptyLinePlaceholder":976},[143,172782,172783,172785],{"class":145,"line":46},[143,172784,31313],{"class":280},[143,172786,172787],{"class":149},"(time.time())\n",[143,172789,172790,172792,172794],{"class":145,"line":293},[143,172791,95948],{"class":149},[143,172793,771],{"class":280},[143,172795,1055],{"class":149},[143,172797,172798,172800,172802,172805],{"class":145,"line":306},[143,172799,31313],{"class":280},[143,172801,1049],{"class":149},[143,172803,172804],{"class":163},"\"1秒后执行\"",[143,172806,1055],{"class":149},[58,172808,172810],{"id":172809},"_9123-datetime","9.12.3 datetime",[133,172812,172814],{"className":31276,"code":172813,"language":31278,"meta":138,"style":138},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[140,172815,172816,172828,172832,172842,172849],{"__ignoreMap":138},[143,172817,172818,172820,172823,172825],{"class":145,"line":146},[143,172819,31635],{"class":755},[143,172821,172822],{"class":149}," datetime ",[143,172824,31290],{"class":755},[143,172826,172827],{"class":149}," datetime\n",[143,172829,172830],{"class":145,"line":35},[143,172831,3300],{"emptyLinePlaceholder":976},[143,172833,172834,172837,172839],{"class":145,"line":46},[143,172835,172836],{"class":149},"now ",[143,172838,160],{"class":755},[143,172840,172841],{"class":149}," datetime.now()\n",[143,172843,172844,172846],{"class":145,"line":293},[143,172845,31313],{"class":280},[143,172847,172848],{"class":149},"(now)\n",[143,172850,172851,172853,172856,172859,172861,172864],{"class":145,"line":306},[143,172852,31313],{"class":280},[143,172854,172855],{"class":149},"(now.strftime(",[143,172857,172858],{"class":163},"\"%Y-%m-",[143,172860,157415],{"class":280},[143,172862,172863],{"class":163}," %H:%M:%S\"",[143,172865,31395],{"class":149},[58,172867,172869],{"id":172868},"_9124-os","9.12.4 os",[133,172871,172873],{"className":31276,"code":172872,"language":31278,"meta":138,"style":138},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[140,172874,172875,172881,172885,172892],{"__ignoreMap":138},[143,172876,172877,172879],{"class":145,"line":146},[143,172878,31290],{"class":755},[143,172880,46203],{"class":149},[143,172882,172883],{"class":145,"line":35},[143,172884,3300],{"emptyLinePlaceholder":976},[143,172886,172887,172889],{"class":145,"line":46},[143,172888,31313],{"class":280},[143,172890,172891],{"class":149},"(os.getcwd())\n",[143,172893,172894,172896,172899,172902],{"class":145,"line":293},[143,172895,31313],{"class":280},[143,172897,172898],{"class":149},"(os.listdir(",[143,172900,172901],{"class":163},"\".\"",[143,172903,31395],{"class":149},[58,172905,172907],{"id":172906},"_9125-sys","9.12.5 sys",[133,172909,172911],{"className":31276,"code":172910,"language":31278,"meta":138,"style":138},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[140,172912,172913,172920,172924,172931],{"__ignoreMap":138},[143,172914,172915,172917],{"class":145,"line":146},[143,172916,31290],{"class":755},[143,172918,172919],{"class":149}," sys\n",[143,172921,172922],{"class":145,"line":35},[143,172923,3300],{"emptyLinePlaceholder":976},[143,172925,172926,172928],{"class":145,"line":46},[143,172927,31313],{"class":280},[143,172929,172930],{"class":149},"(sys.version)\n",[143,172932,172933,172935],{"class":145,"line":293},[143,172934,31313],{"class":280},[143,172936,172937],{"class":149},"(sys.path)\n",[14,172939,172941,172942,172944,172945,1292],{"id":172940},"_913-if-name-main","9.13 if ",[25,172943,80688],{}," == \"",[25,172946,102934],{},[63,172948,172949,172950,172953],{},"模块被直接运行和被导入时，",[140,172951,172952],{},"__name__"," 的值不同。",[63,172955,172956,172957,25516],{},"创建 ",[140,172958,172959],{},"my_module.py",[133,172961,172963],{"className":31276,"code":172962,"language":31278,"meta":138,"style":138},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[140,172964,172965,172973,172983,172987,172991,173003],{"__ignoreMap":138},[143,172966,172967,172969,172971],{"class":145,"line":146},[143,172968,32845],{"class":755},[143,172970,6109],{"class":156},[143,172972,151817],{"class":149},[143,172974,172975,172977,172979,172981],{"class":145,"line":35},[143,172976,4990],{"class":755},[143,172978,11769],{"class":149},[143,172980,1522],{"class":755},[143,172982,151828],{"class":149},[143,172984,172985],{"class":145,"line":46},[143,172986,3300],{"emptyLinePlaceholder":976},[143,172988,172989],{"class":145,"line":293},[143,172990,3300],{"emptyLinePlaceholder":976},[143,172992,172993,172995,172997,172999,173001],{"class":145,"line":306},[143,172994,2434],{"class":755},[143,172996,32118],{"class":280},[143,172998,102435],{"class":755},[143,173000,102438],{"class":163},[143,173002,4639],{"class":149},[143,173004,173005,173007,173009,173011,173013,173015],{"class":145,"line":319},[143,173006,32197],{"class":280},[143,173008,167324],{"class":149},[143,173010,771],{"class":280},[143,173012,13335],{"class":149},[143,173014,1122],{"class":280},[143,173016,31395],{"class":149},[63,173018,173019],{},"作用：",[19,173021,173022,173025],{},[22,173023,173024],{},"直接运行该文件时，执行测试代码。",[22,173026,173027],{},"被其他文件导入时，不执行测试代码。",[63,173029,173030],{},"这是写模块时很常用的习惯。",[14,173032,173034],{"id":173033},"_914-包","9.14 包",[63,173036,173037,173038,173041],{},"包是包含 ",[140,173039,173040],{},"__init__.py"," 的目录，用于组织多个模块。",[63,173043,173044],{},"目录结构：",[133,173046,173049],{"className":173047,"code":173048,"language":6087,"meta":138},[6085],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[140,173050,173048],{"__ignoreMap":138},[63,173052,173053],{},"导入：",[133,173055,173057],{"className":31276,"code":173056,"language":31278,"meta":138,"style":138},"from utils.file_utils import read_file\n",[140,173058,173059],{"__ignoreMap":138},[143,173060,173061,173063,173066,173068],{"class":145,"line":146},[143,173062,31635],{"class":755},[143,173064,173065],{"class":149}," utils.file_utils ",[143,173067,31290],{"class":755},[143,173069,173070],{"class":149}," read_file\n",[63,173072,173073,173075],{},[140,173074,173040],{}," 可以为空，也可以写包初始化逻辑。",[14,173077,173079],{"id":173078},"_915-第三方包","9.15 第三方包",[63,173081,173082,173083,173085],{},"第三方包通过 ",[140,173084,24729],{}," 安装。",[133,173087,173089],{"className":24720,"code":173088,"language":24722,"meta":138,"style":138},"pip install requests\n",[140,173090,173091],{"__ignoreMap":138},[143,173092,173093,173095,173097],{"class":145,"line":146},[143,173094,24729],{"class":156},[143,173096,24732],{"class":163},[143,173098,146822],{"class":163},[63,173100,173101],{},"使用：",[133,173103,173105],{"className":31276,"code":173104,"language":31278,"meta":138,"style":138},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[140,173106,173107,173113,173117,173132],{"__ignoreMap":138},[143,173108,173109,173111],{"class":145,"line":146},[143,173110,31290],{"class":755},[143,173112,146822],{"class":149},[143,173114,173115],{"class":145,"line":35},[143,173116,3300],{"emptyLinePlaceholder":976},[143,173118,173119,173122,173124,173127,173130],{"class":145,"line":46},[143,173120,173121],{"class":149},"response ",[143,173123,160],{"class":755},[143,173125,173126],{"class":149}," requests.get(",[143,173128,173129],{"class":163},"\"https:\u002F\u002Fwww.example.com\"",[143,173131,1055],{"class":149},[143,173133,173134,173136],{"class":145,"line":293},[143,173135,31313],{"class":280},[143,173137,173138],{"class":149},"(response.status_code)\n",[63,173140,173141],{},"查看已安装包：",[133,173143,173145],{"className":24720,"code":173144,"language":24722,"meta":138,"style":138},"pip list\n",[140,173146,173147],{"__ignoreMap":138},[143,173148,173149,173151],{"class":145,"line":146},[143,173150,24729],{"class":156},[143,173152,119830],{"class":163},[63,173154,173155],{},"导出项目依赖：",[133,173157,173158],{"className":24720,"code":147017,"language":24722,"meta":138,"style":138},[140,173159,173160],{"__ignoreMap":138},[143,173161,173162,173164,173166,173168],{"class":145,"line":146},[143,173163,24729],{"class":156},[143,173165,147026],{"class":163},[143,173167,27120],{"class":755},[143,173169,147031],{"class":163},[63,173171,173172],{},"安装项目依赖：",[133,173174,173175],{"className":24720,"code":147037,"language":24722,"meta":138,"style":138},[140,173176,173177],{"__ignoreMap":138},[143,173178,173179,173181,173183,173185],{"class":145,"line":146},[143,173180,24729],{"class":156},[143,173182,24732],{"class":163},[143,173184,120514],{"class":280},[143,173186,147031],{"class":163},[14,173188,173190],{"id":173189},"_916-模块搜索路径","9.16 模块搜索路径",[63,173192,173193,173194,173197],{},"Python 导入模块时会在 ",[140,173195,173196],{},"sys.path"," 中查找。",[133,173199,173201],{"className":31276,"code":173200,"language":31278,"meta":138,"style":138},"import sys\n\nfor path in sys.path:\n    print(path)\n",[140,173202,173203,173209,173213,173225],{"__ignoreMap":138},[143,173204,173205,173207],{"class":145,"line":146},[143,173206,31290],{"class":755},[143,173208,172919],{"class":149},[143,173210,173211],{"class":145,"line":35},[143,173212,3300],{"emptyLinePlaceholder":976},[143,173214,173215,173217,173220,173222],{"class":145,"line":46},[143,173216,3925],{"class":755},[143,173218,173219],{"class":149}," path ",[143,173221,26941],{"class":755},[143,173223,173224],{"class":149}," sys.path:\n",[143,173226,173227,173229],{"class":145,"line":293},[143,173228,32197],{"class":280},[143,173230,169953],{"class":149},[63,173232,173233],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[63,173235,158347],{},[133,173237,173240],{"className":173238,"code":173239,"language":6087,"meta":138},[6085],"random.py\njson.py\ntime.py\n",[140,173241,173239],{"__ignoreMap":138},[63,173243,173244],{},"这些文件名可能导致导入异常。",[14,173246,173248],{"id":173247},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[63,173250,173044],{},[133,173252,173255],{"className":173253,"code":173254,"language":6087,"meta":138},[6085],"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",[140,173256,173254],{"__ignoreMap":138},[63,173258,173259,25516],{},[140,173260,173261],{},"utils\u002Ffile_utils.py",[133,173263,173265],{"className":31276,"code":173264,"language":31278,"meta":138,"style":138},"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",[140,173266,173267,173273,173283,173287,173291,173301,173311,173319,173325,173329,173356,173366,173370,173374,173384,173410],{"__ignoreMap":138},[143,173268,173269,173271],{"class":145,"line":146},[143,173270,31290],{"class":755},[143,173272,147815],{"class":149},[143,173274,173275,173277,173279,173281],{"class":145,"line":35},[143,173276,31635],{"class":755},[143,173278,109186],{"class":149},[143,173280,31290],{"class":755},[143,173282,109191],{"class":149},[143,173284,173285],{"class":145,"line":46},[143,173286,3300],{"emptyLinePlaceholder":976},[143,173288,173289],{"class":145,"line":293},[143,173290,3300],{"emptyLinePlaceholder":976},[143,173292,173293,173295,173298],{"class":145,"line":306},[143,173294,32845],{"class":755},[143,173296,173297],{"class":156}," read_json",[143,173299,173300],{"class":149},"(path):\n",[143,173302,173303,173306,173308],{"class":145,"line":319},[143,173304,173305],{"class":149},"    path ",[143,173307,160],{"class":755},[143,173309,173310],{"class":149}," Path(path)\n",[143,173312,173313,173315,173317],{"class":145,"line":332},[143,173314,4001],{"class":755},[143,173316,39828],{"class":755},[143,173318,170034],{"class":149},[143,173320,173321,173323],{"class":145,"line":345},[143,173322,15651],{"class":755},[143,173324,52726],{"class":149},[143,173326,173327],{"class":145,"line":701},[143,173328,3300],{"emptyLinePlaceholder":976},[143,173330,173331,173333,173335,173338,173340,173342,173344,173346,173348,173350,173352,173354],{"class":145,"line":707},[143,173332,35076],{"class":755},[143,173334,147515],{"class":280},[143,173336,173337],{"class":149},"(path, ",[143,173339,147525],{"class":163},[143,173341,13335],{"class":149},[143,173343,147530],{"class":6116},[143,173345,160],{"class":755},[143,173347,147535],{"class":163},[143,173349,14614],{"class":149},[143,173351,32281],{"class":755},[143,173353,148877],{"class":6116},[143,173355,4639],{"class":149},[143,173357,173358,173360,173362,173364],{"class":145,"line":727},[143,173359,15651],{"class":755},[143,173361,148888],{"class":149},[143,173363,46252],{"class":6116},[143,173365,1055],{"class":149},[143,173367,173368],{"class":145,"line":2518},[143,173369,3300],{"emptyLinePlaceholder":976},[143,173371,173372],{"class":145,"line":2524},[143,173373,3300],{"emptyLinePlaceholder":976},[143,173375,173376,173378,173381],{"class":145,"line":2529},[143,173377,32845],{"class":755},[143,173379,173380],{"class":156}," write_json",[143,173382,173383],{"class":149},"(path, data):\n",[143,173385,173386,173388,173390,173392,173394,173396,173398,173400,173402,173404,173406,173408],{"class":145,"line":2543},[143,173387,35076],{"class":755},[143,173389,147515],{"class":280},[143,173391,173337],{"class":149},[143,173393,152700],{"class":163},[143,173395,13335],{"class":149},[143,173397,147530],{"class":6116},[143,173399,160],{"class":755},[143,173401,147535],{"class":163},[143,173403,14614],{"class":149},[143,173405,32281],{"class":755},[143,173407,148877],{"class":6116},[143,173409,4639],{"class":149},[143,173411,173412,173415,173417,173419,173421,173423,173425,173427,173429,173431,173433],{"class":145,"line":2548},[143,173413,173414],{"class":149},"        json.dump(data, ",[143,173416,46252],{"class":6116},[143,173418,13335],{"class":149},[143,173420,147861],{"class":6116},[143,173422,160],{"class":755},[143,173424,34885],{"class":280},[143,173426,13335],{"class":149},[143,173428,152736],{"class":6116},[143,173430,160],{"class":755},[143,173432,1122],{"class":280},[143,173434,1055],{"class":149},[63,173436,173437,25516],{},[140,173438,155331],{},[133,173440,173442],{"className":31276,"code":173441,"language":31278,"meta":138,"style":138},"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",[140,173443,173444,173455,173459,173472,173492],{"__ignoreMap":138},[143,173445,173446,173448,173450,173452],{"class":145,"line":146},[143,173447,31635],{"class":755},[143,173449,173065],{"class":149},[143,173451,31290],{"class":755},[143,173453,173454],{"class":149}," read_json, write_json\n",[143,173456,173457],{"class":145,"line":35},[143,173458,3300],{"emptyLinePlaceholder":976},[143,173460,173461,173463,173465,173468,173470],{"class":145,"line":46},[143,173462,160440],{"class":149},[143,173464,160],{"class":755},[143,173466,173467],{"class":149}," read_json(",[143,173469,152555],{"class":163},[143,173471,1055],{"class":149},[143,173473,173474,173476,173478,173480,173482,173484,173486,173488,173490],{"class":145,"line":293},[143,173475,171258],{"class":149},[143,173477,63562],{"class":163},[143,173479,284],{"class":149},[143,173481,150612],{"class":163},[143,173483,13335],{"class":149},[143,173485,152196],{"class":163},[143,173487,284],{"class":149},[143,173489,2027],{"class":280},[143,173491,165876],{"class":149},[143,173493,173494,173497,173499],{"class":145,"line":306},[143,173495,173496],{"class":149},"write_json(",[143,173498,152555],{"class":163},[143,173500,173501],{"class":149},", students)\n",[14,173503,173505],{"id":173504},"_918-易错点","9.18 易错点",[19,173507,173508,173511,173516,173521,173524,173527],{},[22,173509,173510],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[22,173512,173513,173514,29283],{},"能指定异常类型就不要裸写 ",[140,173515,171618],{},[22,173517,173518,173520],{},[140,173519,171993],{}," 无论是否出错都会执行。",[22,173522,173523],{},"模块文件名不要和标准库重名。",[22,173525,173526],{},"导入自己写的模块时，要注意运行目录。",[22,173528,173529],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,173531,173533],{"id":173532},"_919-本章练习","9.19 本章练习",[19,173535,173536,173539,173542,173548,173555],{},[22,173537,173538],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[22,173540,173541],{},"写函数读取文件，如果文件不存在则返回空字符串。",[22,173543,172956,173544,173547],{},[140,173545,173546],{},"math_utils.py","，实现加减乘除函数并导入使用。",[22,173549,173550,173551,173554],{},"创建一个 ",[140,173552,173553],{},"utils"," 包，把 JSON 读写函数放进去。",[22,173556,173557],{},"写一个程序，捕获除零异常和输入格式异常。",[954,173559,173560],{},"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":138,"searchDepth":35,"depth":35,"links":173562},[173563,173564,173565,173566,173567,173568,173569,173570,173571,173572,173573,173579,173586,173588,173589,173590,173591,173592,173593],{"id":171415,"depth":35,"text":171416},{"id":171543,"depth":35,"text":171544},{"id":171592,"depth":35,"text":171593},{"id":171741,"depth":35,"text":171742},{"id":171913,"depth":35,"text":171914},{"id":171982,"depth":35,"text":171983},{"id":172093,"depth":35,"text":172094},{"id":172219,"depth":35,"text":172220},{"id":172344,"depth":35,"text":172345},{"id":172399,"depth":35,"text":172400},{"id":172498,"depth":35,"text":172499,"children":173574},[173575,173576,173577,173578],{"id":172502,"depth":46,"text":172503},{"id":172536,"depth":46,"text":172537},{"id":172575,"depth":46,"text":172576},{"id":172654,"depth":46,"text":172655},{"id":172677,"depth":35,"text":172678,"children":173580},[173581,173582,173583,173584,173585],{"id":172681,"depth":46,"text":172682},{"id":172764,"depth":46,"text":172765},{"id":172809,"depth":46,"text":172810},{"id":172868,"depth":46,"text":172869},{"id":172906,"depth":46,"text":172907},{"id":172940,"depth":35,"text":173587},"9.13 if name == \"main\"",{"id":173033,"depth":35,"text":173034},{"id":173078,"depth":35,"text":173079},{"id":173189,"depth":35,"text":173190},{"id":173247,"depth":35,"text":173248},{"id":173504,"depth":35,"text":173505},{"id":173532,"depth":35,"text":173533},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171407,"description":973},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173600,"title":173601,"body":173602,"description":173765,"extension":974,"meta":173766,"navigation":976,"path":173767,"seo":173768,"stem":173769,"__hash__":173770},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173603,"toc":173760},[173604,173607,173610,173613,173624,173626,173700,173703,173706,173709,173712,173715,173718,173721,173724,173727,173730],[10,173605,173601],{"id":173606},"python教程",[63,173608,173609],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[63,173611,173612],{},"建议学习环境：",[19,173614,173615,173618,173621],{},[22,173616,173617],{},"Python 版本：Python 3.10 及以上。",[22,173619,173620],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[22,173622,173623],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173625,117953],{"id":117953},[19,173627,173628,173634,173640,173646,173652,173658,173664,173670,173676,173682,173688,173694],{},[22,173629,173630],{},[67,173631,173633],{"href":173632},".\u002Fch1-Python","Python环境与第一个程序",[22,173635,173636],{},[67,173637,173639],{"href":173638},".\u002Fch2","基础语法、变量与字符串",[22,173641,173642],{},[67,173643,173645],{"href":173644},".\u002Fch3","判断语句",[22,173647,173648],{},[67,173649,173651],{"href":173650},".\u002Fch4","循环语句",[22,173653,173654],{},[67,173655,173657],{"href":173656},".\u002Fch5","函数基础",[22,173659,173660],{},[67,173661,173663],{"href":173662},".\u002Fch6","数据容器",[22,173665,173666],{},[67,173667,173669],{"href":173668},".\u002Fch7","函数进阶",[22,173671,173672],{},[67,173673,173675],{"href":173674},".\u002Fch8","文件操作",[22,173677,173678],{},[67,173679,173681],{"href":173680},".\u002Fch9","异常、模块与包",[22,173683,173684],{},[67,173685,173687],{"href":173686},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[22,173689,173690],{},[67,173691,173693],{"href":173692},".\u002Fch11","面向对象基础",[22,173695,173696],{},[67,173697,173699],{"href":173698},".\u002Fch12","综合案例与复习路线",[14,173701,173702],{"id":173702},"学习路线",[63,173704,173705],{},"第一阶段：能运行程序。",[63,173707,173708],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[63,173710,173711],{},"第二阶段：能组织数据。",[63,173713,173714],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[63,173716,173717],{},"第三阶段：能封装逻辑。",[63,173719,173720],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[63,173722,173723],{},"第四阶段：能做小项目。",[63,173725,173726],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173728,173729],{"id":173729},"参考资料",[19,173731,173732,173739,173746,173753],{},[22,173733,173734,173735],{},"黑马程序员 Python 入门教程推荐：",[67,173736,173737],{"href":173737,"rel":173738},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[71],[22,173740,173741,173742],{},"Python 官方中文教程：",[67,173743,173744],{"href":173744,"rel":173745},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[71],[22,173747,173748,173749],{},"Python 标准库文档：",[67,173750,173751],{"href":173751,"rel":173752},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[71],[22,173754,173755,173756],{},"pyecharts 文档：",[67,173757,173758],{"href":173758,"rel":173759},"https:\u002F\u002Fpyecharts.org\u002F",[71],{"title":138,"searchDepth":35,"depth":35,"links":173761},[173762,173763,173764],{"id":117953,"depth":35,"text":117953},{"id":173702,"depth":35,"text":173702},{"id":173729,"depth":35,"text":173729},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24276},"\u002Fwiki\u002F2024-10-10-python",{"title":173601,"description":173765},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331439000]