[{"data":1,"prerenderedAt":173808},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch18-2d-dong-hua-yu-3d-zhuan-huan":3,"wiki-doc-nav":1034},{"id":4,"title":5,"body":6,"description":1026,"extension":1027,"meta":1028,"navigation":1029,"path":1030,"seo":1031,"stem":1032,"__hash__":1033},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":8,"toc":1009},"minimark",[9,13,18,22,25,38,43,48,53,60,63,66,69,72,76,124,128,132,135,138,142,180,184,187,190,272,276,280,283,286,289,293,342,346,349,379,383,387,390,393,397,400,472,475,592,594,602,606,609,612,708,711,715,742,746,749,753,756,760,763,766,769,772,776,779,782,786,790,793,796,799,802,806,809,813,816,819,865,869,873,876,879,882,915,919,922,968,972,975,1005],[10,11,5],"h1",{"id":12},"_18-2d动画与3d转换",[14,15,17],"h2",{"id":16},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,20,21],"p",{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,23,24],{},"转换（transform）你可以简单理解为变形",[26,27,28,32,35],"ul",{},[29,30,31],"li",{},"移动：translate",[29,33,34],{},"旋转：rotate",[29,36,37],{},"缩放：scale",[39,40],"img",{"style":41,"src":42},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[44,45,47],"h3",{"id":46},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[49,50,52],"h4",{"id":51},"_18111-translate介绍","18.1.1.1 translate介绍",[19,54,55,56],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[57,58,59],"strong",{},"定位",[39,61],{"style":41,"src":62},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,64,65],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,67,68],{},"对于行内元素无效",[19,70,71],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[49,73,75],{"id":74},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[77,78,83],"pre",{"className":79,"code":80,"language":81,"meta":82,"style":82},"language-Css shiki shiki-themes github-light github-dark","div {\n  margin: 0 auto;\n}\n","Css","",[84,85,86,99,118],"code",{"__ignoreMap":82},[87,88,91,95],"span",{"class":89,"line":90},"line",1,[87,92,94],{"class":93},"s9eBZ","div",[87,96,98],{"class":97},"sVt8B"," {\n",[87,100,102,106,109,112,115],{"class":89,"line":101},2,[87,103,105],{"class":104},"sj4cs","  margin",[87,107,108],{"class":97},": ",[87,110,111],{"class":104},"0",[87,113,114],{"class":104}," auto",[87,116,117],{"class":97},";\n",[87,119,121],{"class":89,"line":120},3,[87,122,123],{"class":97},"}\n",[44,125,127],{"id":126},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[49,129,131],{"id":130},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,133,134],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[39,136],{"style":41,"src":137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[49,139,141],{"id":140},"_18122-旋转效果","18.1.2.2 旋转效果",[77,143,145],{"className":79,"code":144,"language":81,"meta":82,"style":82},"div {\n  transform: rotate(45deg);\n}\n",[84,146,147,153,176],{"__ignoreMap":82},[87,148,149,151],{"class":89,"line":90},[87,150,94],{"class":93},[87,152,98],{"class":97},[87,154,155,158,160,163,166,169,173],{"class":89,"line":101},[87,156,157],{"class":104},"  transform",[87,159,108],{"class":97},[87,161,162],{"class":104},"rotate",[87,164,165],{"class":97},"(",[87,167,168],{"class":104},"45",[87,170,172],{"class":171},"szBVR","deg",[87,174,175],{"class":97},");\n",[87,177,178],{"class":89,"line":120},[87,179,123],{"class":97},[49,181,183],{"id":182},"_18123-三角做法","18.1.2.3 三角做法",[19,185,186],{},"该下标当经过最外层大盒子时会实现向上反转",[39,188],{"style":41,"src":189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[77,191,193],{"className":79,"code":192,"language":81,"meta":82,"style":82},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[84,194,195,201,209,220,232,254,267],{"__ignoreMap":82},[87,196,197],{"class":89,"line":90},[87,198,200],{"class":199},"sJ8bj","\u002F* CSS 实现三角形 *\u002F\n",[87,202,203,207],{"class":89,"line":101},[87,204,206],{"class":205},"sScJk",".triangle",[87,208,98],{"class":97},[87,210,211,214,216,218],{"class":89,"line":120},[87,212,213],{"class":104},"  width",[87,215,108],{"class":97},[87,217,111],{"class":104},[87,219,117],{"class":97},[87,221,223,226,228,230],{"class":89,"line":222},4,[87,224,225],{"class":104},"  height",[87,227,108],{"class":97},[87,229,111],{"class":104},[87,231,117],{"class":97},[87,233,235,238,240,243,246,249,252],{"class":89,"line":234},5,[87,236,237],{"class":104},"  border",[87,239,108],{"class":97},[87,241,242],{"class":104},"10",[87,244,245],{"class":171},"px",[87,247,248],{"class":104}," solid",[87,250,251],{"class":104}," transparent",[87,253,117],{"class":97},[87,255,257,260,262,265],{"class":89,"line":256},6,[87,258,259],{"class":104},"  border-bottom-color",[87,261,108],{"class":97},[87,263,264],{"class":104},"#333",[87,266,117],{"class":97},[87,268,270],{"class":89,"line":269},7,[87,271,123],{"class":97},[44,273,275],{"id":274},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[49,277,279],{"id":278},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,281,282],{},"设置中心点",[39,284],{"style":41,"src":285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,287,288],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[49,290,292],{"id":291},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[77,294,296],{"className":79,"code":295,"language":81,"meta":82,"style":82},"\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",[84,297,298,303,309,328,333,338],{"__ignoreMap":82},[87,299,300],{"class":89,"line":90},[87,301,302],{"class":199},"\u002F* 转换中心点 *\u002F\n",[87,304,305,307],{"class":89,"line":101},[87,306,94],{"class":93},[87,308,98],{"class":97},[87,310,311,314,316,319,322,325],{"class":89,"line":120},[87,312,313],{"class":104},"  transform-origin",[87,315,108],{"class":97},[87,317,318],{"class":104},"center",[87,320,321],{"class":104}," center",[87,323,324],{"class":97},";  ",[87,326,327],{"class":199},"\u002F* 默认 *\u002F\n",[87,329,330],{"class":89,"line":222},[87,331,332],{"class":199},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[87,334,335],{"class":89,"line":234},[87,336,337],{"class":199},"  \u002F* transform-origin: left top; *\u002F\n",[87,339,340],{"class":89,"line":256},[87,341,123],{"class":97},[49,343,345],{"id":344},"_18133-旋转案例","18.1.3.3 旋转案例",[39,347],{"style":41,"src":348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[77,350,351],{"className":79,"code":144,"language":81,"meta":82,"style":82},[84,352,353,359,375],{"__ignoreMap":82},[87,354,355,357],{"class":89,"line":90},[87,356,94],{"class":93},[87,358,98],{"class":97},[87,360,361,363,365,367,369,371,373],{"class":89,"line":101},[87,362,157],{"class":104},[87,364,108],{"class":97},[87,366,162],{"class":104},[87,368,165],{"class":97},[87,370,168],{"class":104},[87,372,172],{"class":171},[87,374,175],{"class":97},[87,376,377],{"class":89,"line":120},[87,378,123],{"class":97},[44,380,382],{"id":381},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[49,384,386],{"id":385},"_18141-scale介绍","18.1.4.1 scale介绍",[19,388,389],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[39,391],{"style":41,"src":392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[49,394,396],{"id":395},"_18142-分页按钮","18.1.4.2 分页按钮",[39,398],{"style":41,"src":399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[77,401,403],{"className":79,"code":402,"language":81,"meta":82,"style":82},"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",[84,404,405,411,427,431,436,441,447,461,467],{"__ignoreMap":82},[87,406,407,409],{"class":89,"line":90},[87,408,94],{"class":93},[87,410,98],{"class":97},[87,412,413,415,417,420,422,425],{"class":89,"line":101},[87,414,157],{"class":104},[87,416,108],{"class":97},[87,418,419],{"class":104},"scale",[87,421,165],{"class":97},[87,423,424],{"class":104},"1.2",[87,426,175],{"class":97},[87,428,429],{"class":89,"line":120},[87,430,123],{"class":97},[87,432,433],{"class":89,"line":222},[87,434,435],{"class":97},"```Css\n",[87,437,438],{"class":89,"line":234},[87,439,440],{"class":199},"\u002F* 2D 缩放 *\u002F\n",[87,442,443,445],{"class":89,"line":256},[87,444,94],{"class":93},[87,446,98],{"class":97},[87,448,449,451,453,455,457,459],{"class":89,"line":269},[87,450,157],{"class":104},[87,452,108],{"class":97},[87,454,419],{"class":104},[87,456,165],{"class":97},[87,458,424],{"class":104},[87,460,175],{"class":97},[87,462,464],{"class":89,"line":463},8,[87,465,466],{"class":199},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[87,468,470],{"class":89,"line":469},9,[87,471,123],{"class":97},[19,473,474],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[77,476,478],{"className":79,"code":477,"language":81,"meta":82,"style":82},"\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",[84,479,480,485,496,519,541,545,550,556,588],{"__ignoreMap":82},[87,481,482],{"class":89,"line":90},[87,483,484],{"class":199},"\u002F* 定义动画 *\u002F\n",[87,486,487,490,494],{"class":89,"line":101},[87,488,489],{"class":171},"@keyframes",[87,491,493],{"class":492},"s4XuR"," move",[87,495,98],{"class":97},[87,497,498,501,504,507,509,512,514,516],{"class":89,"line":120},[87,499,500],{"class":205},"  0%",[87,502,503],{"class":97}," { ",[87,505,506],{"class":104},"transform",[87,508,108],{"class":97},[87,510,511],{"class":104},"translateX",[87,513,165],{"class":97},[87,515,111],{"class":104},[87,517,518],{"class":97},"); }\n",[87,520,521,524,526,528,530,532,534,537,539],{"class":89,"line":222},[87,522,523],{"class":205},"  100%",[87,525,503],{"class":97},[87,527,506],{"class":104},[87,529,108],{"class":97},[87,531,511],{"class":104},[87,533,165],{"class":97},[87,535,536],{"class":104},"100",[87,538,245],{"class":171},[87,540,518],{"class":97},[87,542,543],{"class":89,"line":234},[87,544,123],{"class":97},[87,546,547],{"class":89,"line":256},[87,548,549],{"class":199},"\u002F* 调用动画 *\u002F\n",[87,551,552,554],{"class":89,"line":269},[87,553,94],{"class":93},[87,555,98],{"class":97},[87,557,558,561,563,566,569,572,575,578,580,583,586],{"class":89,"line":463},[87,559,560],{"class":104},"  animation",[87,562,108],{"class":97},[87,564,565],{"class":104},"move",[87,567,568],{"class":104}," 1",[87,570,571],{"class":171},"s",[87,573,574],{"class":104}," ease",[87,576,577],{"class":104}," 0",[87,579,571],{"class":171},[87,581,582],{"class":104}," infinite",[87,584,585],{"class":104}," alternate",[87,587,117],{"class":97},[87,589,590],{"class":89,"line":469},[87,591,123],{"class":97},[19,593,474],{},[77,595,600],{"className":596,"code":598,"language":599},[597],"language-text","\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","text",[84,601,598],{"__ignoreMap":82},[49,603,605],{"id":604},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,607,608],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[39,610],{"style":41,"src":611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[77,613,614],{"className":79,"code":477,"language":81,"meta":82,"style":82},[84,615,616,620,628,646,666,670,674,680,704],{"__ignoreMap":82},[87,617,618],{"class":89,"line":90},[87,619,484],{"class":199},[87,621,622,624,626],{"class":89,"line":101},[87,623,489],{"class":171},[87,625,493],{"class":492},[87,627,98],{"class":97},[87,629,630,632,634,636,638,640,642,644],{"class":89,"line":120},[87,631,500],{"class":205},[87,633,503],{"class":97},[87,635,506],{"class":104},[87,637,108],{"class":97},[87,639,511],{"class":104},[87,641,165],{"class":97},[87,643,111],{"class":104},[87,645,518],{"class":97},[87,647,648,650,652,654,656,658,660,662,664],{"class":89,"line":222},[87,649,523],{"class":205},[87,651,503],{"class":97},[87,653,506],{"class":104},[87,655,108],{"class":97},[87,657,511],{"class":104},[87,659,165],{"class":97},[87,661,536],{"class":104},[87,663,245],{"class":171},[87,665,518],{"class":97},[87,667,668],{"class":89,"line":234},[87,669,123],{"class":97},[87,671,672],{"class":89,"line":256},[87,673,549],{"class":199},[87,675,676,678],{"class":89,"line":269},[87,677,94],{"class":93},[87,679,98],{"class":97},[87,681,682,684,686,688,690,692,694,696,698,700,702],{"class":89,"line":463},[87,683,560],{"class":104},[87,685,108],{"class":97},[87,687,565],{"class":104},[87,689,568],{"class":104},[87,691,571],{"class":171},[87,693,574],{"class":104},[87,695,577],{"class":104},[87,697,571],{"class":171},[87,699,582],{"class":104},[87,701,585],{"class":104},[87,703,117],{"class":97},[87,705,706],{"class":89,"line":469},[87,707,123],{"class":97},[19,709,710],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[44,712,714],{"id":713},"_1823-知识点回顾","18.2.3 知识点回顾",[77,716,718],{"className":79,"code":717,"language":81,"meta":82,"style":82},"div {\n  background-repeat: no-repeat;\n}\n",[84,719,720,726,738],{"__ignoreMap":82},[87,721,722,724],{"class":89,"line":90},[87,723,94],{"class":93},[87,725,98],{"class":97},[87,727,728,731,733,736],{"class":89,"line":101},[87,729,730],{"class":104},"  background-repeat",[87,732,108],{"class":97},[87,734,735],{"class":104},"no-repeat",[87,737,117],{"class":97},[87,739,740],{"class":89,"line":120},[87,741,123],{"class":97},[14,743,745],{"id":744},"_183-3d-转换","18.3 3D 转换",[19,747,748],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[44,750,752],{"id":751},"_1831-坐标轴认识","18.3.1 坐标轴认识",[39,754],{"style":41,"src":755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[44,757,759],{"id":758},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[39,761],{"style":41,"src":762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,764,765],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,767,768],{},"translate3d的效果需要搭配透视perspective来使用",[39,770],{"style":41,"src":771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[44,773,775],{"id":774},"_1833-透视-perspective","18.3.3 透视 perspective",[39,777],{"style":41,"src":778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,780,781],{},"透视写在父盒子上，单位为像素",[44,783,785],{"id":784},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[49,787,789],{"id":788},"_18341-分开解释","18.3.4.1 分开解释",[39,791],{"style":41,"src":792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[39,794],{"style":41,"src":795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[39,797],{"style":41,"src":798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,800,801],{},"总结来说就是左手原则",[49,803,805],{"id":804},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[39,807],{"style":41,"src":808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[44,810,812],{"id":811},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[39,814],{"style":41,"src":815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[39,817],{"style":41,"src":818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[77,820,822],{"className":79,"code":821,"language":81,"meta":82,"style":82},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[84,823,824,830,844,861],{"__ignoreMap":82},[87,825,826,828],{"class":89,"line":90},[87,827,94],{"class":93},[87,829,98],{"class":97},[87,831,832,835,837,840,842],{"class":89,"line":101},[87,833,834],{"class":104},"  perspective",[87,836,108],{"class":97},[87,838,839],{"class":104},"500",[87,841,245],{"class":171},[87,843,117],{"class":97},[87,845,846,848,850,853,855,857,859],{"class":89,"line":120},[87,847,157],{"class":104},[87,849,108],{"class":97},[87,851,852],{"class":104},"rotateX",[87,854,165],{"class":97},[87,856,168],{"class":104},[87,858,172],{"class":171},[87,860,175],{"class":97},[87,862,863],{"class":89,"line":222},[87,864,123],{"class":97},[44,866,868],{"id":867},"_1836-案例","18.3.6 案例",[49,870,872],{"id":871},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[39,874],{"style":41,"src":875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[39,877],{"style":41,"src":878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[39,880],{"style":41,"src":881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[77,883,885],{"className":79,"code":884,"language":81,"meta":82,"style":82},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[84,886,887,892,899,911],{"__ignoreMap":82},[87,888,889],{"class":89,"line":90},[87,890,891],{"class":199},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[87,893,894,897],{"class":89,"line":101},[87,895,896],{"class":205},".father",[87,898,98],{"class":97},[87,900,901,903,905,907,909],{"class":89,"line":120},[87,902,834],{"class":104},[87,904,108],{"class":97},[87,906,839],{"class":104},[87,908,245],{"class":171},[87,910,117],{"class":97},[87,912,913],{"class":89,"line":222},[87,914,123],{"class":97},[49,916,918],{"id":917},"_18362-3d导航栏","18.3.6.2 3D导航栏",[39,920],{"style":41,"src":921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[77,923,927],{"className":924,"code":925,"language":926,"meta":82,"style":82},"language-Html shiki shiki-themes github-light github-dark","\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n","Html",[84,928,929,934,954,959],{"__ignoreMap":82},[87,930,931],{"class":89,"line":90},[87,932,933],{"class":199},"\u003C!-- HTML 代码示例 -->\n",[87,935,936,939,941,944,947,951],{"class":89,"line":101},[87,937,938],{"class":97},"\u003C",[87,940,94],{"class":93},[87,942,943],{"class":205}," class",[87,945,946],{"class":97},"=",[87,948,950],{"class":949},"sZZnC","\"example\"",[87,952,953],{"class":97},">\n",[87,955,956],{"class":89,"line":120},[87,957,958],{"class":97},"  示例内容\n",[87,960,961,964,966],{"class":89,"line":222},[87,962,963],{"class":97},"\u003C\u002F",[87,965,94],{"class":93},[87,967,953],{"class":97},[49,969,971],{"id":970},"_18363-旋转木马","18.3.6.3 旋转木马",[39,973],{"style":41,"src":974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[77,976,977],{"className":79,"code":144,"language":81,"meta":82,"style":82},[84,978,979,985,1001],{"__ignoreMap":82},[87,980,981,983],{"class":89,"line":90},[87,982,94],{"class":93},[87,984,98],{"class":97},[87,986,987,989,991,993,995,997,999],{"class":89,"line":101},[87,988,157],{"class":104},[87,990,108],{"class":97},[87,992,162],{"class":104},[87,994,165],{"class":97},[87,996,168],{"class":104},[87,998,172],{"class":171},[87,1000,175],{"class":97},[87,1002,1003],{"class":89,"line":120},[87,1004,123],{"class":97},[1006,1007,1008],"style",{},"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":82,"searchDepth":101,"depth":101,"links":1010},[1011,1018],{"id":16,"depth":101,"text":17,"children":1012},[1013,1014,1015,1016,1017],{"id":46,"depth":120,"text":47},{"id":126,"depth":120,"text":127},{"id":274,"depth":120,"text":275},{"id":381,"depth":120,"text":382},{"id":713,"depth":120,"text":714},{"id":744,"depth":101,"text":745,"children":1019},[1020,1021,1022,1023,1024,1025],{"id":751,"depth":120,"text":752},{"id":758,"depth":120,"text":759},{"id":774,"depth":120,"text":775},{"id":784,"depth":120,"text":785},{"id":811,"depth":120,"text":812},{"id":867,"depth":120,"text":868},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":5,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",[1035,6115,7220,8640,11629,12980,14469,15558,24318,24330,24929,24955,25079,25320,25385,25403,25416,25463,25587,25756,25955,26134,26339,26475,26570,26607,26620,26930,27671,28379,28400,29420,31051,31202,31215,31227,31528,51339,51354,51371,51404,54267,77606,93749,93770,93883,94004,94774,95437,95798,95836,95942,96042,96085,96111,96172,97826,97927,97952,98443,98943,100023,100306,101048,101550,101562,103578,105242,106745,108443,110360,112279,114301,117771,118203,118666,119415,122359,122707,122729,123085,126392,126404,126807,126830,126977,127144,127348,127647,128204,128859,130788,132381,133030,134522,135953,137181,138874,140625,143035,143151,143944,144155,145040,146275,146503,146516,147671,150083,152451,155772,158249,159893,161670,163683,166735,168915,171442,173636],{"id":1036,"title":1037,"body":1038,"description":82,"extension":1027,"meta":6110,"navigation":1029,"path":6111,"seo":6112,"stem":6113,"__hash__":6114},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1039,"toc":6082},[1040,1043,1047,1050,1054,1066,1070,1074,1077,1080,1083,1086,1089,1116,1120,1123,1126,1129,1132,1182,1186,1204,1206,1220,1223,1231,1234,2090,2097,2113,2117,2203,2207,2213,2299,2303,2341,2345,2409,2413,2417,2423,2434,2438,2443,2447,2452,2456,2461,2465,2469,2474,2743,2748,2886,2891,3147,3150,3158,3162,3167,3270,3273,3579,3588,3688,3691,3694,3697,3700,3960,3965,4105,4108,4287,4290,4418,4421,4573,4577,4582,4585,4596,4604,4607,4714,4718,4722,4727,4777,4782,4787,4811,4816,4869,4872,4877,5053,5058,5343,5348,5745,5749,5754,5811,5816,5824,5827,5967,5970,6079],[10,1041,1037],{"id":1042},"_1基础入门",[14,1044,1046],{"id":1045},"_11注释","1.1注释",[19,1048,1049],{},"\u002F\u002F或者\u002F* *\u002F",[14,1051,1053],{"id":1052},"_12命名","1.2命名",[1055,1056,1057,1060,1063],"ol",{},[29,1058,1059],{},"字母数字下划线",[29,1061,1062],{},"开头必须是字母或_",[29,1064,1065],{},"不能使用关键词",[14,1067,1069],{"id":1068},"_13数据类型","1.3数据类型",[44,1071,1073],{"id":1072},"_131整形","1.3.1整形",[19,1075,1076],{},"short 短整形 2",[19,1078,1079],{},"int 整形 4",[19,1081,1082],{},"long 长整形 win4 linux32位4 linux64位8",[19,1084,1085],{},"long long 长长整形 8",[19,1087,1088],{},"利用sizeof可以求数据类型占用的内存空间大小",[77,1090,1094],{"className":1091,"code":1092,"language":1093,"meta":82,"style":82},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[84,1095,1096,1109],{"__ignoreMap":82},[87,1097,1098,1101,1103,1106],{"class":89,"line":90},[87,1099,1100],{"class":171},"sizeof",[87,1102,165],{"class":97},[87,1104,1105],{"class":171},"int",[87,1107,1108],{"class":97},")\n",[87,1110,1111,1113],{"class":89,"line":101},[87,1112,1100],{"class":171},[87,1114,1115],{"class":97},"(num)\n",[44,1117,1119],{"id":1118},"_132浮点型","1.3.2浮点型",[19,1121,1122],{},"float 单精度 4节 7位有效数字",[19,1124,1125],{},"double 双精度 8节 15-16有效数字",[19,1127,1128],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,1130,1131],{},"注意点：",[77,1133,1135],{"className":1091,"code":1134,"language":1093,"meta":82,"style":82},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[84,1136,1137,1159],{"__ignoreMap":82},[87,1138,1139,1142,1145,1147,1150,1153,1156],{"class":89,"line":90},[87,1140,1141],{"class":171},"float",[87,1143,1144],{"class":97}," f1",[87,1146,946],{"class":171},[87,1148,1149],{"class":104},"3.14",[87,1151,1152],{"class":171},"f",[87,1154,1155],{"class":97},";",[87,1157,1158],{"class":199}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[87,1160,1161,1163,1166,1168,1171,1174,1177,1179],{"class":89,"line":101},[87,1162,1141],{"class":171},[87,1164,1165],{"class":97}," f2",[87,1167,946],{"class":171},[87,1169,1170],{"class":104},"3",[87,1172,1173],{"class":171},"e",[87,1175,1176],{"class":104},"2",[87,1178,1155],{"class":97},[87,1180,1181],{"class":199}," \u002F\u002F科学记数法\n",[44,1183,1185],{"id":1184},"_133字符型","1.3.3字符型",[77,1187,1189],{"className":1091,"code":1188,"language":1093,"meta":82,"style":82},"char ch='a'\n",[84,1190,1191],{"__ignoreMap":82},[87,1192,1193,1196,1199,1201],{"class":89,"line":90},[87,1194,1195],{"class":171},"char",[87,1197,1198],{"class":97}," ch",[87,1200,946],{"class":171},[87,1202,1203],{"class":949},"'a'\n",[19,1205,1131],{},[1055,1207,1208,1211,1214,1217],{},[29,1209,1210],{},"在显示字符型变量时，只能单引号，双引号x",[29,1212,1213],{},"单引号内只能一个字符，不能字符串",[29,1215,1216],{},"c和c++字符型变量只占用一个字符",[29,1218,1219],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,1221,1222],{},"ASCII码大致由以下两部分组成：",[1055,1224,1225,1228],{},[29,1226,1227],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[29,1229,1230],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,1232,1233],{},"ASCII码表格：",[1235,1236,1237,1280],"table",{},[1238,1239,1240],"thead",{},[1241,1242,1243,1250,1255,1259,1264,1268,1272,1276],"tr",{},[1244,1245,1246,1249],"th",{},[57,1247,1248],{},"ASCII","值",[1244,1251,1252],{},[57,1253,1254],{},"控制字符",[1244,1256,1257,1249],{},[57,1258,1248],{},[1244,1260,1261],{},[57,1262,1263],{},"字符",[1244,1265,1266,1249],{},[57,1267,1248],{},[1244,1269,1270],{},[57,1271,1263],{},[1244,1273,1274,1249],{},[57,1275,1248],{},[1244,1277,1278],{},[57,1279,1263],{},[1281,1282,1283,1309,1335,1360,1385,1410,1435,1460,1486,1511,1537,1562,1588,1613,1638,1664,1690,1714,1739,1764,1788,1813,1838,1863,1888,1913,1938,1964,1989,2013,2038,2064],"tbody",{},[1241,1284,1285,1288,1291,1294,1297,1300,1303,1306],{},[1286,1287,111],"td",{},[1286,1289,1290],{},"NUT",[1286,1292,1293],{},"32",[1286,1295,1296],{},"(space)",[1286,1298,1299],{},"64",[1286,1301,1302],{},"@",[1286,1304,1305],{},"96",[1286,1307,1308],{},"、",[1241,1310,1311,1314,1317,1320,1323,1326,1329,1332],{},[1286,1312,1313],{},"1",[1286,1315,1316],{},"SOH",[1286,1318,1319],{},"33",[1286,1321,1322],{},"!",[1286,1324,1325],{},"65",[1286,1327,1328],{},"A",[1286,1330,1331],{},"97",[1286,1333,1334],{},"a",[1241,1336,1337,1339,1342,1345,1348,1351,1354,1357],{},[1286,1338,1176],{},[1286,1340,1341],{},"STX",[1286,1343,1344],{},"34",[1286,1346,1347],{},"\"",[1286,1349,1350],{},"66",[1286,1352,1353],{},"B",[1286,1355,1356],{},"98",[1286,1358,1359],{},"b",[1241,1361,1362,1364,1367,1370,1373,1376,1379,1382],{},[1286,1363,1170],{},[1286,1365,1366],{},"ETX",[1286,1368,1369],{},"35",[1286,1371,1372],{},"#",[1286,1374,1375],{},"67",[1286,1377,1378],{},"C",[1286,1380,1381],{},"99",[1286,1383,1384],{},"c",[1241,1386,1387,1390,1393,1396,1399,1402,1405,1407],{},[1286,1388,1389],{},"4",[1286,1391,1392],{},"EOT",[1286,1394,1395],{},"36",[1286,1397,1398],{},"$",[1286,1400,1401],{},"68",[1286,1403,1404],{},"D",[1286,1406,536],{},[1286,1408,1409],{},"d",[1241,1411,1412,1415,1418,1421,1424,1427,1430,1433],{},[1286,1413,1414],{},"5",[1286,1416,1417],{},"ENQ",[1286,1419,1420],{},"37",[1286,1422,1423],{},"%",[1286,1425,1426],{},"69",[1286,1428,1429],{},"E",[1286,1431,1432],{},"101",[1286,1434,1173],{},[1241,1436,1437,1440,1443,1446,1449,1452,1455,1458],{},[1286,1438,1439],{},"6",[1286,1441,1442],{},"ACK",[1286,1444,1445],{},"38",[1286,1447,1448],{},"&",[1286,1450,1451],{},"70",[1286,1453,1454],{},"F",[1286,1456,1457],{},"102",[1286,1459,1152],{},[1241,1461,1462,1465,1468,1471,1474,1477,1480,1483],{},[1286,1463,1464],{},"7",[1286,1466,1467],{},"BEL",[1286,1469,1470],{},"39",[1286,1472,1473],{},",",[1286,1475,1476],{},"71",[1286,1478,1479],{},"G",[1286,1481,1482],{},"103",[1286,1484,1485],{},"g",[1241,1487,1488,1491,1494,1497,1499,1502,1505,1508],{},[1286,1489,1490],{},"8",[1286,1492,1493],{},"BS",[1286,1495,1496],{},"40",[1286,1498,165],{},[1286,1500,1501],{},"72",[1286,1503,1504],{},"H",[1286,1506,1507],{},"104",[1286,1509,1510],{},"h",[1241,1512,1513,1516,1519,1522,1525,1528,1531,1534],{},[1286,1514,1515],{},"9",[1286,1517,1518],{},"HT",[1286,1520,1521],{},"41",[1286,1523,1524],{},")",[1286,1526,1527],{},"73",[1286,1529,1530],{},"I",[1286,1532,1533],{},"105",[1286,1535,1536],{},"i",[1241,1538,1539,1541,1544,1547,1550,1553,1556,1559],{},[1286,1540,242],{},[1286,1542,1543],{},"LF",[1286,1545,1546],{},"42",[1286,1548,1549],{},"*",[1286,1551,1552],{},"74",[1286,1554,1555],{},"J",[1286,1557,1558],{},"106",[1286,1560,1561],{},"j",[1241,1563,1564,1567,1570,1573,1576,1579,1582,1585],{},[1286,1565,1566],{},"11",[1286,1568,1569],{},"VT",[1286,1571,1572],{},"43",[1286,1574,1575],{},"+",[1286,1577,1578],{},"75",[1286,1580,1581],{},"K",[1286,1583,1584],{},"107",[1286,1586,1587],{},"k",[1241,1589,1590,1593,1596,1599,1601,1604,1607,1610],{},[1286,1591,1592],{},"12",[1286,1594,1595],{},"FF",[1286,1597,1598],{},"44",[1286,1600,1473],{},[1286,1602,1603],{},"76",[1286,1605,1606],{},"L",[1286,1608,1609],{},"108",[1286,1611,1612],{},"l",[1241,1614,1615,1618,1621,1623,1626,1629,1632,1635],{},[1286,1616,1617],{},"13",[1286,1619,1620],{},"CR",[1286,1622,168],{},[1286,1624,1625],{},"-",[1286,1627,1628],{},"77",[1286,1630,1631],{},"M",[1286,1633,1634],{},"109",[1286,1636,1637],{},"m",[1241,1639,1640,1643,1646,1649,1652,1655,1658,1661],{},[1286,1641,1642],{},"14",[1286,1644,1645],{},"SO",[1286,1647,1648],{},"46",[1286,1650,1651],{},".",[1286,1653,1654],{},"78",[1286,1656,1657],{},"N",[1286,1659,1660],{},"110",[1286,1662,1663],{},"n",[1241,1665,1666,1669,1672,1675,1678,1681,1684,1687],{},[1286,1667,1668],{},"15",[1286,1670,1671],{},"SI",[1286,1673,1674],{},"47",[1286,1676,1677],{},"\u002F",[1286,1679,1680],{},"79",[1286,1682,1683],{},"O",[1286,1685,1686],{},"111",[1286,1688,1689],{},"o",[1241,1691,1692,1695,1698,1701,1703,1706,1709,1712],{},[1286,1693,1694],{},"16",[1286,1696,1697],{},"DLE",[1286,1699,1700],{},"48",[1286,1702,111],{},[1286,1704,1705],{},"80",[1286,1707,1708],{},"P",[1286,1710,1711],{},"112",[1286,1713,19],{},[1241,1715,1716,1719,1722,1725,1727,1730,1733,1736],{},[1286,1717,1718],{},"17",[1286,1720,1721],{},"DCI",[1286,1723,1724],{},"49",[1286,1726,1313],{},[1286,1728,1729],{},"81",[1286,1731,1732],{},"Q",[1286,1734,1735],{},"113",[1286,1737,1738],{},"q",[1241,1740,1741,1744,1747,1750,1752,1755,1758,1761],{},[1286,1742,1743],{},"18",[1286,1745,1746],{},"DC2",[1286,1748,1749],{},"50",[1286,1751,1176],{},[1286,1753,1754],{},"82",[1286,1756,1757],{},"R",[1286,1759,1760],{},"114",[1286,1762,1763],{},"r",[1241,1765,1766,1769,1772,1775,1777,1780,1783,1786],{},[1286,1767,1768],{},"19",[1286,1770,1771],{},"DC3",[1286,1773,1774],{},"51",[1286,1776,1170],{},[1286,1778,1779],{},"83",[1286,1781,1782],{},"S",[1286,1784,1785],{},"115",[1286,1787,571],{},[1241,1789,1790,1793,1796,1799,1801,1804,1807,1810],{},[1286,1791,1792],{},"20",[1286,1794,1795],{},"DC4",[1286,1797,1798],{},"52",[1286,1800,1389],{},[1286,1802,1803],{},"84",[1286,1805,1806],{},"T",[1286,1808,1809],{},"116",[1286,1811,1812],{},"t",[1241,1814,1815,1818,1821,1824,1826,1829,1832,1835],{},[1286,1816,1817],{},"21",[1286,1819,1820],{},"NAK",[1286,1822,1823],{},"53",[1286,1825,1414],{},[1286,1827,1828],{},"85",[1286,1830,1831],{},"U",[1286,1833,1834],{},"117",[1286,1836,1837],{},"u",[1241,1839,1840,1843,1846,1849,1851,1854,1857,1860],{},[1286,1841,1842],{},"22",[1286,1844,1845],{},"SYN",[1286,1847,1848],{},"54",[1286,1850,1439],{},[1286,1852,1853],{},"86",[1286,1855,1856],{},"V",[1286,1858,1859],{},"118",[1286,1861,1862],{},"v",[1241,1864,1865,1868,1871,1874,1876,1879,1882,1885],{},[1286,1866,1867],{},"23",[1286,1869,1870],{},"TB",[1286,1872,1873],{},"55",[1286,1875,1464],{},[1286,1877,1878],{},"87",[1286,1880,1881],{},"W",[1286,1883,1884],{},"119",[1286,1886,1887],{},"w",[1241,1889,1890,1893,1896,1899,1901,1904,1907,1910],{},[1286,1891,1892],{},"24",[1286,1894,1895],{},"CAN",[1286,1897,1898],{},"56",[1286,1900,1490],{},[1286,1902,1903],{},"88",[1286,1905,1906],{},"X",[1286,1908,1909],{},"120",[1286,1911,1912],{},"x",[1241,1914,1915,1918,1921,1924,1926,1929,1932,1935],{},[1286,1916,1917],{},"25",[1286,1919,1920],{},"EM",[1286,1922,1923],{},"57",[1286,1925,1515],{},[1286,1927,1928],{},"89",[1286,1930,1931],{},"Y",[1286,1933,1934],{},"121",[1286,1936,1937],{},"y",[1241,1939,1940,1943,1946,1949,1952,1955,1958,1961],{},[1286,1941,1942],{},"26",[1286,1944,1945],{},"SUB",[1286,1947,1948],{},"58",[1286,1950,1951],{},":",[1286,1953,1954],{},"90",[1286,1956,1957],{},"Z",[1286,1959,1960],{},"122",[1286,1962,1963],{},"z",[1241,1965,1966,1969,1972,1975,1977,1980,1983,1986],{},[1286,1967,1968],{},"27",[1286,1970,1971],{},"ESC",[1286,1973,1974],{},"59",[1286,1976,1155],{},[1286,1978,1979],{},"91",[1286,1981,1982],{},"[",[1286,1984,1985],{},"123",[1286,1987,1988],{},"{",[1241,1990,1991,1994,1997,2000,2002,2005,2007,2010],{},[1286,1992,1993],{},"28",[1286,1995,1996],{},"FS",[1286,1998,1999],{},"60",[1286,2001,938],{},[1286,2003,2004],{},"92",[1286,2006,1677],{},[1286,2008,2009],{},"124",[1286,2011,2012],{},"|",[1241,2014,2015,2018,2021,2024,2026,2029,2032,2035],{},[1286,2016,2017],{},"29",[1286,2019,2020],{},"GS",[1286,2022,2023],{},"61",[1286,2025,946],{},[1286,2027,2028],{},"93",[1286,2030,2031],{},"]",[1286,2033,2034],{},"125",[1286,2036,2037],{},"}",[1241,2039,2040,2043,2046,2049,2052,2055,2058,2061],{},[1286,2041,2042],{},"30",[1286,2044,2045],{},"RS",[1286,2047,2048],{},"62",[1286,2050,2051],{},">",[1286,2053,2054],{},"94",[1286,2056,2057],{},"^",[1286,2059,2060],{},"126",[1286,2062,2063],{},"`",[1241,2065,2066,2069,2072,2075,2078,2081,2084,2087],{},[1286,2067,2068],{},"31",[1286,2070,2071],{},"US",[1286,2073,2074],{},"63",[1286,2076,2077],{},"?",[1286,2079,2080],{},"95",[1286,2082,2083],{},"_",[1286,2085,2086],{},"127",[1286,2088,2089],{},"DEL",[19,2091,2092,2093,2096],{},"ASCII 码大致由以下",[57,2094,2095],{},"两部分组","成：",[26,2098,2099,2106],{},[29,2100,2101,2102,2105],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[57,2103,2104],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[29,2107,2108,2109,2112],{},"ASCII 打印字符：数字 ",[57,2110,2111],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[44,2114,2116],{"id":2115},"_134转义字符","1.3.4转义字符",[77,2118,2120],{"className":1091,"code":2119,"language":1093,"meta":82,"style":82},"\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",[84,2121,2122,2127,2143,2157,2162,2175,2180],{"__ignoreMap":82},[87,2123,2124],{"class":89,"line":90},[87,2125,2126],{"class":199},"\u002F\u002F换行符\n",[87,2128,2129,2132,2135,2138,2140],{"class":89,"line":101},[87,2130,2131],{"class":97},"cout ",[87,2133,2134],{"class":171},"\u003C\u003C",[87,2136,2137],{"class":949},"\"hello world\u002Fn\"",[87,2139,1155],{"class":97},[87,2141,2142],{"class":199}," \u002F\u002F就等同于如下：\n",[87,2144,2145,2147,2149,2152,2154],{"class":89,"line":120},[87,2146,2131],{"class":97},[87,2148,2134],{"class":171},[87,2150,2151],{"class":949},"\"hello world\"",[87,2153,2134],{"class":171},[87,2155,2156],{"class":97},"endl;\n",[87,2158,2159],{"class":89,"line":222},[87,2160,2161],{"class":199},"\u002F\u002F反斜杠\n",[87,2163,2164,2166,2168,2171,2173],{"class":89,"line":234},[87,2165,2131],{"class":97},[87,2167,2134],{"class":171},[87,2169,2170],{"class":949},"\"\u002F\u002F\"",[87,2172,2134],{"class":171},[87,2174,2156],{"class":97},[87,2176,2177],{"class":89,"line":256},[87,2178,2179],{"class":199},"\u002F\u002F水平制表符\n",[87,2181,2182,2184,2186,2189,2192,2195,2197,2200],{"class":89,"line":269},[87,2183,2131],{"class":97},[87,2185,2134],{"class":171},[87,2187,2188],{"class":949},"\"aaaa",[87,2190,2191],{"class":104},"\\t",[87,2193,2194],{"class":949},"helloworld\"",[87,2196,2134],{"class":171},[87,2198,2199],{"class":97},"endl;",[87,2201,2202],{"class":199}," \u002F\u002F输出窗口时有对齐效果\n",[44,2204,2206],{"id":2205},"_135字符串型","1.3.5字符串型",[19,2208,2209,2210,2212],{},"char 变量名",[87,2211],{},"=\"字符串值\"",[77,2214,2216],{"className":1091,"code":2215,"language":1093,"meta":82,"style":82},"\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",[84,2217,2218,2223,2228,2233,2238,2251,2264,2269,2274,2285],{"__ignoreMap":82},[87,2219,2220],{"class":89,"line":90},[87,2221,2222],{"class":199},"\u002F\u002Fc风格字符串\n",[87,2224,2225],{"class":89,"line":101},[87,2226,2227],{"class":199},"\u002F\u002F注意事项：\n",[87,2229,2230],{"class":89,"line":120},[87,2231,2232],{"class":199},"\u002F\u002F1.char字符串名[]\n",[87,2234,2235],{"class":89,"line":222},[87,2236,2237],{"class":199},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[87,2239,2240,2242,2245,2247,2249],{"class":89,"line":234},[87,2241,1195],{"class":171},[87,2243,2244],{"class":97}," str[]",[87,2246,946],{"class":171},[87,2248,2151],{"class":949},[87,2250,117],{"class":97},[87,2252,2253,2255,2257,2260,2262],{"class":89,"line":256},[87,2254,2131],{"class":97},[87,2256,2134],{"class":171},[87,2258,2259],{"class":97},"str",[87,2261,2134],{"class":171},[87,2263,2156],{"class":97},[87,2265,2266],{"class":89,"line":269},[87,2267,2268],{"class":199},"\u002F\u002Fc++风格字符串\n",[87,2270,2271],{"class":89,"line":463},[87,2272,2273],{"class":199},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[87,2275,2276,2279,2281,2283],{"class":89,"line":469},[87,2277,2278],{"class":97},"string str2",[87,2280,946],{"class":171},[87,2282,2151],{"class":949},[87,2284,117],{"class":97},[87,2286,2288,2290,2292,2295,2297],{"class":89,"line":2287},10,[87,2289,2131],{"class":97},[87,2291,2134],{"class":171},[87,2293,2294],{"class":97},"str2",[87,2296,2134],{"class":171},[87,2298,2156],{"class":97},[44,2300,2302],{"id":2301},"_136布尔类型bool","1.3.6布尔类型bool",[77,2304,2306],{"className":1091,"code":2305,"language":1093,"meta":82,"style":82},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[84,2307,2308,2323],{"__ignoreMap":82},[87,2309,2310,2313,2316,2318,2321],{"class":89,"line":90},[87,2311,2312],{"class":171},"bool",[87,2314,2315],{"class":97}," flag",[87,2317,946],{"class":171},[87,2319,2320],{"class":104},"true",[87,2322,117],{"class":97},[87,2324,2325,2328,2331,2334,2336,2338],{"class":89,"line":101},[87,2326,2327],{"class":97},"cout",[87,2329,2330],{"class":171},"\u003C\u003Csizeof",[87,2332,2333],{"class":97},"(flag)",[87,2335,2134],{"class":171},[87,2337,2199],{"class":97},[87,2339,2340],{"class":199}," \u002F\u002F查看布尔占内存空间\n",[14,2342,2344],{"id":2343},"_14键盘输入cin","1.4键盘输入cin",[77,2346,2348],{"className":1091,"code":2347,"language":1093,"meta":82,"style":82},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[84,2349,2350,2363,2380,2391],{"__ignoreMap":82},[87,2351,2352,2354,2357,2359,2361],{"class":89,"line":90},[87,2353,1105],{"class":171},[87,2355,2356],{"class":97}," a",[87,2358,946],{"class":171},[87,2360,111],{"class":104},[87,2362,117],{"class":97},[87,2364,2365,2367,2369,2372,2374,2376,2378],{"class":89,"line":101},[87,2366,2327],{"class":97},[87,2368,2134],{"class":171},[87,2370,2371],{"class":949},"\"请给整型变量a赋值\"",[87,2373,2134],{"class":171},[87,2375,1334],{"class":97},[87,2377,2134],{"class":171},[87,2379,2156],{"class":97},[87,2381,2382,2385,2388],{"class":89,"line":120},[87,2383,2384],{"class":97},"cin ",[87,2386,2387],{"class":171},">>",[87,2389,2390],{"class":97}," a;\n",[87,2392,2393,2395,2397,2400,2403,2405,2407],{"class":89,"line":222},[87,2394,2131],{"class":97},[87,2396,2134],{"class":171},[87,2398,2399],{"class":949}," \"整型变量a=\"",[87,2401,2402],{"class":171}," \u003C\u003C",[87,2404,1334],{"class":97},[87,2406,2134],{"class":171},[87,2408,2156],{"class":97},[14,2410,2412],{"id":2411},"_15运算符","1.5运算符",[44,2414,2416],{"id":2415},"_151算术运算符","1.5.1算术运算符",[19,2418,2419,2422],{},[39,2420],{"alt":82,"src":2421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[1055,2424,2425,2428,2431],{},[29,2426,2427],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[29,2429,2430],{},"两个小数不可以做取模运算",[29,2432,2433],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[44,2435,2437],{"id":2436},"_152赋值运算符","1.5.2赋值运算符",[19,2439,2440],{},[39,2441],{"alt":82,"src":2442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[44,2444,2446],{"id":2445},"_153比较运算符","1.5.3比较运算符",[19,2448,2449],{},[39,2450],{"alt":82,"src":2451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[44,2453,2455],{"id":2454},"_154逻辑运算符","1.5.4逻辑运算符",[19,2457,2458],{},[39,2459],{"alt":82,"src":2460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,2462,2464],{"id":2463},"_16程序流程结构","1.6程序流程结构",[44,2466,2468],{"id":2467},"_161选择结构","1.6.1选择结构",[1055,2470,2471],{},[29,2472,2473],{},"if语句\n单行、多行、多条件if语句",[77,2475,2477],{"className":1091,"code":2476,"language":1093,"meta":82,"style":82},"\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",[84,2478,2479,2484,2499,2504,2518,2522,2527,2536,2549,2553,2566,2571,2577,2582,2596,2601,2607,2628,2633,2647,2652,2681,2686,2703,2708,2713,2718,2732,2737],{"__ignoreMap":82},[87,2480,2481],{"class":89,"line":90},[87,2482,2483],{"class":199},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[87,2485,2486,2489,2492,2494,2497],{"class":89,"line":101},[87,2487,2488],{"class":171},"if",[87,2490,2491],{"class":97},"(score",[87,2493,2051],{"class":171},[87,2495,2496],{"class":104},"600",[87,2498,1108],{"class":97},[87,2500,2501],{"class":89,"line":120},[87,2502,2503],{"class":97},"{\n",[87,2505,2506,2509,2511,2514,2516],{"class":89,"line":222},[87,2507,2508],{"class":97},"    cout",[87,2510,2134],{"class":171},[87,2512,2513],{"class":949},"'这是单行if语句'",[87,2515,2134],{"class":171},[87,2517,2156],{"class":97},[87,2519,2520],{"class":89,"line":234},[87,2521,123],{"class":97},[87,2523,2524],{"class":89,"line":256},[87,2525,2526],{"class":199},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[87,2528,2529,2531,2533],{"class":89,"line":269},[87,2530,2384],{"class":97},[87,2532,2387],{"class":171},[87,2534,2535],{"class":97}," score\n",[87,2537,2538,2540,2542,2545,2547],{"class":89,"line":463},[87,2539,2488],{"class":171},[87,2541,2491],{"class":97},[87,2543,2544],{"class":171},"\u003C=",[87,2546,2496],{"class":104},[87,2548,1108],{"class":97},[87,2550,2551],{"class":89,"line":469},[87,2552,2503],{"class":97},[87,2554,2555,2557,2559,2562,2564],{"class":89,"line":2287},[87,2556,2508],{"class":97},[87,2558,2387],{"class":171},[87,2560,2561],{"class":949},"\"小于等于600\"",[87,2563,2134],{"class":171},[87,2565,2156],{"class":97},[87,2567,2569],{"class":89,"line":2568},11,[87,2570,123],{"class":97},[87,2572,2574],{"class":89,"line":2573},12,[87,2575,2576],{"class":171},"else\n",[87,2578,2580],{"class":89,"line":2579},13,[87,2581,2503],{"class":97},[87,2583,2585,2587,2589,2592,2594],{"class":89,"line":2584},14,[87,2586,2508],{"class":97},[87,2588,2387],{"class":171},[87,2590,2591],{"class":949},"\"大于600\"",[87,2593,2387],{"class":171},[87,2595,2156],{"class":97},[87,2597,2599],{"class":89,"line":2598},15,[87,2600,123],{"class":97},[87,2602,2604],{"class":89,"line":2603},16,[87,2605,2606],{"class":199},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[87,2608,2610,2612,2615,2617,2619,2622,2624,2626],{"class":89,"line":2609},17,[87,2611,2488],{"class":171},[87,2613,2614],{"class":97}," (",[87,2616,111],{"class":104},[87,2618,938],{"class":171},[87,2620,2621],{"class":97},"num",[87,2623,938],{"class":171},[87,2625,536],{"class":104},[87,2627,1108],{"class":97},[87,2629,2631],{"class":89,"line":2630},18,[87,2632,2503],{"class":97},[87,2634,2636,2638,2640,2643,2645],{"class":89,"line":2635},19,[87,2637,2508],{"class":97},[87,2639,2134],{"class":171},[87,2641,2642],{"class":949},"\"小于100\"",[87,2644,2134],{"class":171},[87,2646,2156],{"class":97},[87,2648,2650],{"class":89,"line":2649},20,[87,2651,123],{"class":97},[87,2653,2655,2658,2661,2664,2667,2669,2672,2674,2676,2679],{"class":89,"line":2654},21,[87,2656,2657],{"class":171},"else",[87,2659,2660],{"class":171}," if",[87,2662,2663],{"class":97}," (nmu",[87,2665,2666],{"class":171},">=",[87,2668,536],{"class":104},[87,2670,2671],{"class":171},"&&",[87,2673,2621],{"class":97},[87,2675,938],{"class":171},[87,2677,2678],{"class":104},"200",[87,2680,1108],{"class":97},[87,2682,2684],{"class":89,"line":2683},22,[87,2685,2503],{"class":97},[87,2687,2689,2691,2693,2696,2698,2700],{"class":89,"line":2688},23,[87,2690,2508],{"class":97},[87,2692,2134],{"class":171},[87,2694,2695],{"class":949},"\"不小于100且小于200\"",[87,2697,2134],{"class":171},[87,2699,2199],{"class":97},[87,2701,2702],{"class":199}," \u002F\u002F可以无限else if,python中是elif：\n",[87,2704,2706],{"class":89,"line":2705},24,[87,2707,123],{"class":97},[87,2709,2711],{"class":89,"line":2710},25,[87,2712,2576],{"class":171},[87,2714,2716],{"class":89,"line":2715},26,[87,2717,2503],{"class":97},[87,2719,2721,2723,2725,2728,2730],{"class":89,"line":2720},27,[87,2722,2508],{"class":97},[87,2724,2134],{"class":171},[87,2726,2727],{"class":949},"\"不小于200\"",[87,2729,2134],{"class":171},[87,2731,2156],{"class":97},[87,2733,2735],{"class":89,"line":2734},28,[87,2736,123],{"class":97},[87,2738,2740],{"class":89,"line":2739},29,[87,2741,2742],{"class":199},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[1055,2744,2745],{"start":101},[29,2746,2747],{},"三目运算符",[77,2749,2751],{"className":1091,"code":2750,"language":1093,"meta":82,"style":82},"\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",[84,2752,2753,2758,2763,2789,2811,2828,2833,2856,2871],{"__ignoreMap":82},[87,2754,2755],{"class":89,"line":90},[87,2756,2757],{"class":199},"\u002F\u002F创建三个变量a,b,c\n",[87,2759,2760],{"class":89,"line":101},[87,2761,2762],{"class":199},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[87,2764,2765,2767,2769,2771,2773,2776,2778,2780,2783,2785,2787],{"class":89,"line":120},[87,2766,1105],{"class":171},[87,2768,2356],{"class":97},[87,2770,946],{"class":171},[87,2772,1792],{"class":104},[87,2774,2775],{"class":97},",b",[87,2777,946],{"class":171},[87,2779,242],{"class":104},[87,2781,2782],{"class":97},",c",[87,2784,946],{"class":171},[87,2786,111],{"class":104},[87,2788,117],{"class":97},[87,2790,2791,2793,2795,2798,2800,2802,2804,2806,2808],{"class":89,"line":222},[87,2792,1384],{"class":97},[87,2794,946],{"class":171},[87,2796,2797],{"class":97},"(a",[87,2799,2051],{"class":171},[87,2801,1359],{"class":97},[87,2803,2077],{"class":171},[87,2805,1334],{"class":97},[87,2807,1951],{"class":171},[87,2809,2810],{"class":97},"b)\n",[87,2812,2813,2815,2817,2820,2822,2824,2826],{"class":89,"line":234},[87,2814,2327],{"class":97},[87,2816,2134],{"class":171},[87,2818,2819],{"class":949},"\"c=\"",[87,2821,2134],{"class":171},[87,2823,1384],{"class":97},[87,2825,2134],{"class":171},[87,2827,2156],{"class":97},[87,2829,2830],{"class":89,"line":256},[87,2831,2832],{"class":199},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[87,2834,2835,2837,2839,2841,2843,2845,2847,2850,2852,2854],{"class":89,"line":269},[87,2836,2797],{"class":97},[87,2838,2051],{"class":171},[87,2840,1359],{"class":97},[87,2842,2077],{"class":171},[87,2844,1334],{"class":97},[87,2846,1951],{"class":171},[87,2848,2849],{"class":97},"b)",[87,2851,946],{"class":171},[87,2853,536],{"class":104},[87,2855,117],{"class":97},[87,2857,2858,2860,2862,2864,2866,2868],{"class":89,"line":463},[87,2859,2327],{"class":97},[87,2861,2134],{"class":171},[87,2863,1334],{"class":97},[87,2865,2134],{"class":171},[87,2867,2199],{"class":97},[87,2869,2870],{"class":199}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[87,2872,2873,2875,2877,2879,2881,2883],{"class":89,"line":469},[87,2874,2327],{"class":97},[87,2876,2134],{"class":171},[87,2878,1359],{"class":97},[87,2880,2134],{"class":171},[87,2882,2199],{"class":97},[87,2884,2885],{"class":199}," \u002F\u002F10   a>b,b还是原值\n",[1055,2887,2888],{"start":120},[29,2889,2890],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[77,2892,2894],{"className":1091,"code":2893,"language":1093,"meta":82,"style":82},"\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",[84,2895,2896,2901,2909,2922,2932,2936,2950,2963,2973,2981,2986,3011,3032,3054,3075,3097,3118,3138,3143],{"__ignoreMap":82},[87,2897,2898],{"class":89,"line":90},[87,2899,2900],{"class":199},"\u002F\u002F案例-电影打分\n",[87,2902,2903,2906],{"class":89,"line":101},[87,2904,2905],{"class":171},"#include",[87,2907,2908],{"class":949},"\u003Ciostream>\n",[87,2910,2911,2914,2917,2920],{"class":89,"line":120},[87,2912,2913],{"class":171},"using",[87,2915,2916],{"class":171}," namespace",[87,2918,2919],{"class":205}," std",[87,2921,117],{"class":97},[87,2923,2924,2926,2929],{"class":89,"line":222},[87,2925,1105],{"class":171},[87,2927,2928],{"class":205}," main",[87,2930,2931],{"class":97},"()\n",[87,2933,2934],{"class":89,"line":234},[87,2935,2503],{"class":97},[87,2937,2938,2941,2944,2946,2948],{"class":89,"line":256},[87,2939,2940],{"class":171},"    int",[87,2942,2943],{"class":97}," score",[87,2945,946],{"class":171},[87,2947,111],{"class":104},[87,2949,117],{"class":97},[87,2951,2952,2954,2956,2959,2961],{"class":89,"line":269},[87,2953,2508],{"class":97},[87,2955,2134],{"class":171},[87,2957,2958],{"class":949},"\"电影打分：\"",[87,2960,2134],{"class":171},[87,2962,2156],{"class":97},[87,2964,2965,2968,2970],{"class":89,"line":463},[87,2966,2967],{"class":97},"    cin",[87,2969,2387],{"class":171},[87,2971,2972],{"class":97},"score;\n",[87,2974,2975,2978],{"class":89,"line":469},[87,2976,2977],{"class":171},"    switch",[87,2979,2980],{"class":97},"(score)\n",[87,2982,2983],{"class":89,"line":2287},[87,2984,2985],{"class":97},"    {\n",[87,2987,2988,2991,2994,2997,2999,3002,3004,3006,3009],{"class":89,"line":2568},[87,2989,2990],{"class":171},"        case",[87,2992,2993],{"class":104}," 10",[87,2995,2996],{"class":97},":cout",[87,2998,2134],{"class":171},[87,3000,3001],{"class":949},"\"经典\"",[87,3003,2134],{"class":171},[87,3005,2199],{"class":97},[87,3007,3008],{"class":171},"break",[87,3010,117],{"class":97},[87,3012,3013,3015,3018,3020,3022,3024,3026,3028,3030],{"class":89,"line":2573},[87,3014,2990],{"class":171},[87,3016,3017],{"class":104}," 9",[87,3019,2996],{"class":97},[87,3021,2134],{"class":171},[87,3023,3001],{"class":949},[87,3025,2134],{"class":171},[87,3027,2199],{"class":97},[87,3029,3008],{"class":171},[87,3031,117],{"class":97},[87,3033,3034,3036,3039,3041,3043,3046,3048,3050,3052],{"class":89,"line":2579},[87,3035,2990],{"class":171},[87,3037,3038],{"class":104}," 8",[87,3040,2996],{"class":97},[87,3042,2134],{"class":171},[87,3044,3045],{"class":949},"\"非常好\"",[87,3047,2134],{"class":171},[87,3049,2199],{"class":97},[87,3051,3008],{"class":171},[87,3053,117],{"class":97},[87,3055,3056,3058,3061,3063,3065,3067,3069,3071,3073],{"class":89,"line":2584},[87,3057,2990],{"class":171},[87,3059,3060],{"class":104}," 7",[87,3062,2996],{"class":97},[87,3064,2134],{"class":171},[87,3066,3045],{"class":949},[87,3068,2134],{"class":171},[87,3070,2199],{"class":97},[87,3072,3008],{"class":171},[87,3074,117],{"class":97},[87,3076,3077,3079,3082,3084,3086,3089,3091,3093,3095],{"class":89,"line":2598},[87,3078,2990],{"class":171},[87,3080,3081],{"class":104}," 6",[87,3083,2996],{"class":97},[87,3085,2134],{"class":171},[87,3087,3088],{"class":949},"\"一般\"",[87,3090,2134],{"class":171},[87,3092,2199],{"class":97},[87,3094,3008],{"class":171},[87,3096,117],{"class":97},[87,3098,3099,3101,3104,3106,3108,3110,3112,3114,3116],{"class":89,"line":2603},[87,3100,2990],{"class":171},[87,3102,3103],{"class":104}," 5",[87,3105,2996],{"class":97},[87,3107,2134],{"class":171},[87,3109,3088],{"class":949},[87,3111,2134],{"class":171},[87,3113,2199],{"class":97},[87,3115,3008],{"class":171},[87,3117,117],{"class":97},[87,3119,3120,3123,3125,3127,3130,3132,3134,3136],{"class":89,"line":2609},[87,3121,3122],{"class":171},"        default",[87,3124,2996],{"class":97},[87,3126,2134],{"class":171},[87,3128,3129],{"class":949},"\"烂片\"",[87,3131,2134],{"class":171},[87,3133,2199],{"class":97},[87,3135,3008],{"class":171},[87,3137,117],{"class":97},[87,3139,3140],{"class":89,"line":2630},[87,3141,3142],{"class":97},"    }\n",[87,3144,3145],{"class":89,"line":2635},[87,3146,123],{"class":97},[19,3148,3149],{},"if和switch区别：",[26,3151,3152,3155],{},[29,3153,3154],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[29,3156,3157],{},"switch优点：结构清晰，执行效率高",[44,3159,3161],{"id":3160},"_162循环结构","1.6.2循环结构",[1055,3163,3164],{},[29,3165,3166],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[77,3168,3170],{"className":1091,"code":3169,"language":1093,"meta":82,"style":82},"\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",[84,3171,3172,3177,3185,3189,3202,3216,3220,3240,3250,3254,3266],{"__ignoreMap":82},[87,3173,3174],{"class":89,"line":90},[87,3175,3176],{"class":199},"\u002F\u002F打印0-9数字\n",[87,3178,3179,3181,3183],{"class":89,"line":101},[87,3180,1105],{"class":171},[87,3182,2928],{"class":205},[87,3184,2931],{"class":97},[87,3186,3187],{"class":89,"line":120},[87,3188,2503],{"class":97},[87,3190,3191,3193,3196,3198,3200],{"class":89,"line":222},[87,3192,2940],{"class":171},[87,3194,3195],{"class":97}," num",[87,3197,946],{"class":171},[87,3199,111],{"class":104},[87,3201,117],{"class":97},[87,3203,3204,3207,3210,3212,3214],{"class":89,"line":234},[87,3205,3206],{"class":171},"    while",[87,3208,3209],{"class":97},"(num",[87,3211,938],{"class":171},[87,3213,242],{"class":104},[87,3215,1108],{"class":97},[87,3217,3218],{"class":89,"line":256},[87,3219,2985],{"class":97},[87,3221,3222,3225,3228,3230,3232,3234,3237],{"class":89,"line":269},[87,3223,3224],{"class":205},"       std",[87,3226,3227],{"class":97},"::cout",[87,3229,2134],{"class":171},[87,3231,2621],{"class":97},[87,3233,2134],{"class":171},[87,3235,3236],{"class":205},"std",[87,3238,3239],{"class":97},"::endl;\n",[87,3241,3242,3245,3248],{"class":89,"line":463},[87,3243,3244],{"class":97},"        num",[87,3246,3247],{"class":171},"++",[87,3249,117],{"class":97},[87,3251,3252],{"class":89,"line":469},[87,3253,3142],{"class":97},[87,3255,3256,3259,3261,3264],{"class":89,"line":2287},[87,3257,3258],{"class":205},"    system",[87,3260,165],{"class":97},[87,3262,3263],{"class":949},"\"pause\"",[87,3265,1108],{"class":97},[87,3267,3268],{"class":89,"line":2568},[87,3269,123],{"class":97},[19,3271,3272],{},"注意：写好循环条件，避免死循环情况",[77,3274,3276],{"className":1091,"code":3275,"language":1093,"meta":82,"style":82},"\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",[84,3277,3278,3283,3290,3297,3307,3315,3319,3324,3351,3356,3361,3369,3396,3401,3406,3419,3429,3433,3443,3448,3461,3466,3480,3485,3500,3504,3517,3521,3526,3530,3544,3552,3557,3563,3569,3574],{"__ignoreMap":82},[87,3279,3280],{"class":89,"line":90},[87,3281,3282],{"class":199},"\u002F\u002F循环结构-猜数字\n",[87,3284,3285,3287],{"class":89,"line":101},[87,3286,2905],{"class":171},[87,3288,3289],{"class":949}," \u003Ciostream>\n",[87,3291,3292,3294],{"class":89,"line":120},[87,3293,2905],{"class":171},[87,3295,3296],{"class":949}," \u003Cctime>\n",[87,3298,3299,3301,3303,3305],{"class":89,"line":222},[87,3300,2913],{"class":171},[87,3302,2916],{"class":171},[87,3304,2919],{"class":205},[87,3306,117],{"class":97},[87,3308,3309,3311,3313],{"class":89,"line":234},[87,3310,1105],{"class":171},[87,3312,2928],{"class":205},[87,3314,2931],{"class":97},[87,3316,3317],{"class":89,"line":256},[87,3318,2503],{"class":97},[87,3320,3321],{"class":89,"line":269},[87,3322,3323],{"class":199},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[87,3325,3326,3329,3332,3335,3338,3340,3343,3345,3348],{"class":89,"line":463},[87,3327,3328],{"class":205},"    srand",[87,3330,3331],{"class":97},"((",[87,3333,3334],{"class":171},"unsigned",[87,3336,3337],{"class":171}," int",[87,3339,1524],{"class":97},[87,3341,3342],{"class":205},"time",[87,3344,165],{"class":97},[87,3346,3347],{"class":104},"NULL",[87,3349,3350],{"class":97},"));\n",[87,3352,3353],{"class":89,"line":469},[87,3354,3355],{"emptyLinePlaceholder":1029},"\n",[87,3357,3358],{"class":89,"line":2287},[87,3359,3360],{"class":199},"    \u002F\u002F1.系统生成随机数\n",[87,3362,3363,3366],{"class":89,"line":2568},[87,3364,3365],{"class":199},"    \u002F\u002Frand()%100",[87,3367,3368],{"class":199}," \u002F\u002F生成0-99的随机数\n",[87,3370,3371,3373,3375,3377,3380,3383,3385,3387,3389,3391,3393],{"class":89,"line":2573},[87,3372,2940],{"class":171},[87,3374,3195],{"class":97},[87,3376,946],{"class":171},[87,3378,3379],{"class":205},"rand",[87,3381,3382],{"class":97},"()",[87,3384,1423],{"class":171},[87,3386,536],{"class":104},[87,3388,1575],{"class":171},[87,3390,1313],{"class":104},[87,3392,1155],{"class":97},[87,3394,3395],{"class":199}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[87,3397,3398],{"class":89,"line":2579},[87,3399,3400],{"class":199},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[87,3402,3403],{"class":89,"line":2584},[87,3404,3405],{"class":199},"    \u002F\u002F2.玩家猜测\n",[87,3407,3408,3410,3413,3415,3417],{"class":89,"line":2598},[87,3409,2940],{"class":171},[87,3411,3412],{"class":97}," val",[87,3414,946],{"class":171},[87,3416,111],{"class":104},[87,3418,117],{"class":97},[87,3420,3421,3423,3425,3427],{"class":89,"line":2603},[87,3422,3206],{"class":171},[87,3424,2614],{"class":97},[87,3426,1313],{"class":104},[87,3428,1108],{"class":97},[87,3430,3431],{"class":89,"line":2609},[87,3432,2985],{"class":97},[87,3434,3435,3438,3440],{"class":89,"line":2630},[87,3436,3437],{"class":97},"        cin",[87,3439,2387],{"class":171},[87,3441,3442],{"class":97},"val;\n",[87,3444,3445],{"class":89,"line":2635},[87,3446,3447],{"class":199},"        \u002F\u002F3.判断玩家猜测\n",[87,3449,3450,3453,3456,3458],{"class":89,"line":2649},[87,3451,3452],{"class":171},"        if",[87,3454,3455],{"class":97},"(val",[87,3457,938],{"class":171},[87,3459,3460],{"class":97},"num) \n",[87,3462,3463],{"class":89,"line":2654},[87,3464,3465],{"class":97},"        {\n",[87,3467,3468,3471,3473,3476,3478],{"class":89,"line":2683},[87,3469,3470],{"class":97},"            cout",[87,3472,2134],{"class":171},[87,3474,3475],{"class":949},"\"猜小了！\"",[87,3477,2134],{"class":171},[87,3479,2156],{"class":97},[87,3481,3482],{"class":89,"line":2688},[87,3483,3484],{"class":97},"        }\n",[87,3486,3487,3490,3492,3495,3497],{"class":89,"line":2705},[87,3488,3489],{"class":171},"        else",[87,3491,2660],{"class":171},[87,3493,3494],{"class":97}," (val",[87,3496,2051],{"class":171},[87,3498,3499],{"class":97},"num)\n",[87,3501,3502],{"class":89,"line":2710},[87,3503,3465],{"class":97},[87,3505,3506,3508,3510,3513,3515],{"class":89,"line":2715},[87,3507,3470],{"class":97},[87,3509,2134],{"class":171},[87,3511,3512],{"class":949},"\"猜大了！\"",[87,3514,2134],{"class":171},[87,3516,2156],{"class":97},[87,3518,3519],{"class":89,"line":2720},[87,3520,3484],{"class":97},[87,3522,3523],{"class":89,"line":2734},[87,3524,3525],{"class":171},"        else\n",[87,3527,3528],{"class":89,"line":2739},[87,3529,3465],{"class":97},[87,3531,3533,3535,3537,3540,3542],{"class":89,"line":3532},30,[87,3534,3470],{"class":97},[87,3536,2134],{"class":171},[87,3538,3539],{"class":949},"\"猜对了！\"",[87,3541,2134],{"class":171},[87,3543,2156],{"class":97},[87,3545,3547,3550],{"class":89,"line":3546},31,[87,3548,3549],{"class":171},"            break",[87,3551,117],{"class":97},[87,3553,3555],{"class":89,"line":3554},32,[87,3556,3484],{"class":97},[87,3558,3560],{"class":89,"line":3559},33,[87,3561,3562],{"class":199},"        \u002F\u002F猜对 退出游戏\n",[87,3564,3566],{"class":89,"line":3565},34,[87,3567,3568],{"class":199},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[87,3570,3572],{"class":89,"line":3571},35,[87,3573,3142],{"class":97},[87,3575,3577],{"class":89,"line":3576},36,[87,3578,123],{"class":97},[1055,3580,3581],{"start":101},[29,3582,3583,3584,3587],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[57,3585,3586],{},"do...while会先执行一次循环语句","，在判断循环语句",[77,3589,3591],{"className":1091,"code":3590,"language":1093,"meta":82,"style":82},"\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",[84,3592,3593,3598,3606,3610,3622,3630,3634,3651,3658,3662,3674,3684],{"__ignoreMap":82},[87,3594,3595],{"class":89,"line":90},[87,3596,3597],{"class":199},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[87,3599,3600,3602,3604],{"class":89,"line":101},[87,3601,1105],{"class":171},[87,3603,2928],{"class":205},[87,3605,2931],{"class":97},[87,3607,3608],{"class":89,"line":120},[87,3609,2503],{"class":97},[87,3611,3612,3614,3616,3618,3620],{"class":89,"line":222},[87,3613,2940],{"class":171},[87,3615,3195],{"class":97},[87,3617,946],{"class":171},[87,3619,111],{"class":104},[87,3621,117],{"class":97},[87,3623,3624,3627],{"class":89,"line":234},[87,3625,3626],{"class":171},"    do",[87,3628,3629],{"class":97}," \n",[87,3631,3632],{"class":89,"line":256},[87,3633,2985],{"class":97},[87,3635,3636,3639,3641,3643,3645,3647,3649],{"class":89,"line":269},[87,3637,3638],{"class":205},"        std",[87,3640,3227],{"class":97},[87,3642,2134],{"class":171},[87,3644,2621],{"class":97},[87,3646,2134],{"class":171},[87,3648,3236],{"class":205},[87,3650,3239],{"class":97},[87,3652,3653,3655],{"class":89,"line":463},[87,3654,3244],{"class":97},[87,3656,3657],{"class":171},"++\n",[87,3659,3660],{"class":89,"line":469},[87,3661,3142],{"class":97},[87,3663,3664,3666,3668,3670,3672],{"class":89,"line":2287},[87,3665,3206],{"class":171},[87,3667,3209],{"class":97},[87,3669,938],{"class":171},[87,3671,242],{"class":104},[87,3673,175],{"class":97},[87,3675,3676,3678,3680,3682],{"class":89,"line":2568},[87,3677,3258],{"class":205},[87,3679,165],{"class":97},[87,3681,3263],{"class":949},[87,3683,175],{"class":97},[87,3685,3686],{"class":89,"line":2573},[87,3687,123],{"class":97},[19,3689,3690],{},"案例-水仙花数",[19,3692,3693],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,3695,3696],{},"例如：1^3+5^3+3^3=153",[19,3698,3699],{},"请用do...while语句，求出所有3位数的水仙花数",[77,3701,3703],{"className":1091,"code":3702,"language":1093,"meta":82,"style":82},"#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",[84,3704,3705,3711,3721,3729,3733,3738,3750,3756,3760,3765,3781,3797,3813,3828,3847,3862,3910,3914,3926,3930,3938,3942,3956],{"__ignoreMap":82},[87,3706,3707,3709],{"class":89,"line":90},[87,3708,2905],{"class":171},[87,3710,3289],{"class":949},[87,3712,3713,3715,3717,3719],{"class":89,"line":101},[87,3714,2913],{"class":171},[87,3716,2916],{"class":171},[87,3718,2919],{"class":205},[87,3720,117],{"class":97},[87,3722,3723,3725,3727],{"class":89,"line":120},[87,3724,1105],{"class":171},[87,3726,2928],{"class":205},[87,3728,2931],{"class":97},[87,3730,3731],{"class":89,"line":222},[87,3732,2503],{"class":97},[87,3734,3735],{"class":89,"line":234},[87,3736,3737],{"class":199},"    \u002F\u002F1.先打印所有三位数字\n",[87,3739,3740,3742,3744,3746,3748],{"class":89,"line":256},[87,3741,2940],{"class":171},[87,3743,3195],{"class":97},[87,3745,946],{"class":171},[87,3747,536],{"class":104},[87,3749,117],{"class":97},[87,3751,3752,3754],{"class":89,"line":269},[87,3753,3626],{"class":171},[87,3755,3629],{"class":97},[87,3757,3758],{"class":89,"line":463},[87,3759,2985],{"class":97},[87,3761,3762],{"class":89,"line":469},[87,3763,3764],{"class":199},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[87,3766,3767,3770,3772,3774,3776,3778],{"class":89,"line":2287},[87,3768,3769],{"class":171},"        int",[87,3771,2356],{"class":97},[87,3773,946],{"class":171},[87,3775,111],{"class":104},[87,3777,1155],{"class":97},[87,3779,3780],{"class":199}," \u002F\u002F个位\n",[87,3782,3783,3785,3788,3790,3792,3794],{"class":89,"line":2568},[87,3784,3769],{"class":171},[87,3786,3787],{"class":97}," b",[87,3789,946],{"class":171},[87,3791,111],{"class":104},[87,3793,1155],{"class":97},[87,3795,3796],{"class":199}," \u002F\u002F十位\n",[87,3798,3799,3801,3804,3806,3808,3810],{"class":89,"line":2573},[87,3800,3769],{"class":171},[87,3802,3803],{"class":97}," c",[87,3805,946],{"class":171},[87,3807,111],{"class":104},[87,3809,1155],{"class":97},[87,3811,3812],{"class":199}," \u002F\u002F百位\n",[87,3814,3815,3818,3820,3822,3824,3826],{"class":89,"line":2579},[87,3816,3817],{"class":97},"        a",[87,3819,946],{"class":171},[87,3821,2621],{"class":97},[87,3823,1423],{"class":171},[87,3825,242],{"class":104},[87,3827,117],{"class":97},[87,3829,3830,3833,3835,3837,3839,3841,3843,3845],{"class":89,"line":2584},[87,3831,3832],{"class":97},"        b",[87,3834,946],{"class":171},[87,3836,2621],{"class":97},[87,3838,1677],{"class":171},[87,3840,242],{"class":104},[87,3842,1423],{"class":171},[87,3844,242],{"class":104},[87,3846,117],{"class":97},[87,3848,3849,3852,3854,3856,3858,3860],{"class":89,"line":2598},[87,3850,3851],{"class":97},"        c",[87,3853,946],{"class":171},[87,3855,2621],{"class":97},[87,3857,1677],{"class":171},[87,3859,536],{"class":104},[87,3861,117],{"class":97},[87,3863,3864,3866,3868,3870,3872,3874,3876,3878,3880,3882,3884,3886,3888,3890,3892,3894,3896,3898,3901,3904,3907],{"class":89,"line":2603},[87,3865,3452],{"class":171},[87,3867,2797],{"class":97},[87,3869,1549],{"class":171},[87,3871,1334],{"class":97},[87,3873,1549],{"class":171},[87,3875,1334],{"class":97},[87,3877,1575],{"class":171},[87,3879,1359],{"class":97},[87,3881,1549],{"class":171},[87,3883,1359],{"class":97},[87,3885,1549],{"class":171},[87,3887,1359],{"class":97},[87,3889,1575],{"class":171},[87,3891,1384],{"class":97},[87,3893,1549],{"class":171},[87,3895,1384],{"class":97},[87,3897,1549],{"class":171},[87,3899,3900],{"class":97},"c ",[87,3902,3903],{"class":171},"==",[87,3905,3906],{"class":97}," num)",[87,3908,3909],{"class":199}," \u002F\u002F如果是水仙花数，才打印\n",[87,3911,3912],{"class":89,"line":2609},[87,3913,3465],{"class":97},[87,3915,3916,3918,3920,3922,3924],{"class":89,"line":2630},[87,3917,3470],{"class":97},[87,3919,2134],{"class":171},[87,3921,2621],{"class":97},[87,3923,2134],{"class":171},[87,3925,2156],{"class":97},[87,3927,3928],{"class":89,"line":2635},[87,3929,3484],{"class":97},[87,3931,3932,3934,3936],{"class":89,"line":2649},[87,3933,3244],{"class":97},[87,3935,3247],{"class":171},[87,3937,117],{"class":97},[87,3939,3940],{"class":89,"line":2654},[87,3941,3142],{"class":97},[87,3943,3944,3946,3949,3951,3954],{"class":89,"line":2683},[87,3945,3206],{"class":171},[87,3947,3948],{"class":97}," (num ",[87,3950,938],{"class":171},[87,3952,3953],{"class":104}," 1000",[87,3955,175],{"class":97},[87,3957,3958],{"class":89,"line":2688},[87,3959,123],{"class":97},[1055,3961,3962],{"start":120},[29,3963,3964],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[77,3966,3968],{"className":1091,"code":3967,"language":1093,"meta":82,"style":82},"\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",[84,3969,3970,3975,4004,4008,4020,4024,4029,4040,4047,4051,4065,4069,4076,4080,4092,4101],{"__ignoreMap":82},[87,3971,3972],{"class":89,"line":90},[87,3973,3974],{"class":199},"\u002F\u002F从数字0-9打印\n",[87,3976,3977,3980,3982,3984,3987,3989,3991,3994,3996,3998,4000,4002],{"class":89,"line":101},[87,3978,3979],{"class":171},"for",[87,3981,165],{"class":97},[87,3983,1105],{"class":171},[87,3985,3986],{"class":97}," i",[87,3988,946],{"class":171},[87,3990,111],{"class":104},[87,3992,3993],{"class":97},";i",[87,3995,938],{"class":171},[87,3997,242],{"class":104},[87,3999,3993],{"class":97},[87,4001,3247],{"class":171},[87,4003,1108],{"class":97},[87,4005,4006],{"class":89,"line":120},[87,4007,2503],{"class":97},[87,4009,4010,4012,4014,4016,4018],{"class":89,"line":222},[87,4011,2508],{"class":97},[87,4013,2134],{"class":171},[87,4015,1536],{"class":97},[87,4017,2134],{"class":171},[87,4019,2156],{"class":97},[87,4021,4022],{"class":89,"line":234},[87,4023,123],{"class":97},[87,4025,4026],{"class":89,"line":256},[87,4027,4028],{"class":199},"\u002F\u002F上式可以进行拆分\n",[87,4030,4031,4033,4035,4037],{"class":89,"line":269},[87,4032,1105],{"class":171},[87,4034,3986],{"class":97},[87,4036,946],{"class":171},[87,4038,4039],{"class":104},"0\n",[87,4041,4042,4044],{"class":89,"line":463},[87,4043,3979],{"class":171},[87,4045,4046],{"class":97},"(;;;)\n",[87,4048,4049],{"class":89,"line":469},[87,4050,2503],{"class":97},[87,4052,4053,4056,4059,4061,4063],{"class":89,"line":2287},[87,4054,4055],{"class":171},"    if",[87,4057,4058],{"class":97},"(i",[87,4060,2666],{"class":171},[87,4062,242],{"class":104},[87,4064,1108],{"class":97},[87,4066,4067],{"class":89,"line":2568},[87,4068,2985],{"class":97},[87,4070,4071,4074],{"class":89,"line":2573},[87,4072,4073],{"class":171},"        break",[87,4075,117],{"class":97},[87,4077,4078],{"class":89,"line":2579},[87,4079,3142],{"class":97},[87,4081,4082,4084,4086,4088,4090],{"class":89,"line":2584},[87,4083,2508],{"class":97},[87,4085,2134],{"class":171},[87,4087,1536],{"class":97},[87,4089,2134],{"class":171},[87,4091,2156],{"class":97},[87,4093,4094,4097,4099],{"class":89,"line":2598},[87,4095,4096],{"class":97},"    i",[87,4098,3247],{"class":171},[87,4100,117],{"class":97},[87,4102,4103],{"class":89,"line":2603},[87,4104,123],{"class":97},[19,4106,4107],{},"小练习",[77,4109,4111],{"className":1091,"code":4110,"language":1093,"meta":82,"style":82},"#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",[84,4112,4113,4119,4129,4137,4141,4146,4151,4179,4183,4188,4193,4234,4238,4251,4255,4259,4263,4275,4279,4283],{"__ignoreMap":82},[87,4114,4115,4117],{"class":89,"line":90},[87,4116,2905],{"class":171},[87,4118,2908],{"class":949},[87,4120,4121,4123,4125,4127],{"class":89,"line":101},[87,4122,2913],{"class":171},[87,4124,2916],{"class":171},[87,4126,2919],{"class":205},[87,4128,117],{"class":97},[87,4130,4131,4133,4135],{"class":89,"line":120},[87,4132,1105],{"class":171},[87,4134,2928],{"class":205},[87,4136,2931],{"class":97},[87,4138,4139],{"class":89,"line":222},[87,4140,2503],{"class":97},[87,4142,4143],{"class":89,"line":234},[87,4144,4145],{"class":199},"    \u002F\u002F敲桌子案例\n",[87,4147,4148],{"class":89,"line":256},[87,4149,4150],{"class":199},"    \u002F\u002F1.先输出1-100的数字\n",[87,4152,4153,4156,4158,4160,4162,4164,4166,4169,4171,4173,4175,4177],{"class":89,"line":269},[87,4154,4155],{"class":171},"    for",[87,4157,165],{"class":97},[87,4159,1105],{"class":171},[87,4161,3986],{"class":97},[87,4163,946],{"class":171},[87,4165,1313],{"class":104},[87,4167,4168],{"class":97},"; i",[87,4170,2544],{"class":171},[87,4172,536],{"class":104},[87,4174,4168],{"class":97},[87,4176,3247],{"class":171},[87,4178,1108],{"class":97},[87,4180,4181],{"class":89,"line":463},[87,4182,2985],{"class":97},[87,4184,4185],{"class":89,"line":469},[87,4186,4187],{"class":199},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[87,4189,4190],{"class":89,"line":2287},[87,4191,4192],{"class":199},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[87,4194,4195,4197,4199,4201,4203,4205,4207,4210,4212,4214,4216,4218,4220,4222,4224,4226,4228,4230,4232],{"class":89,"line":2568},[87,4196,3452],{"class":171},[87,4198,4058],{"class":97},[87,4200,1423],{"class":171},[87,4202,1464],{"class":104},[87,4204,3903],{"class":171},[87,4206,111],{"class":104},[87,4208,4209],{"class":171}," ||",[87,4211,3986],{"class":97},[87,4213,1423],{"class":171},[87,4215,242],{"class":104},[87,4217,3903],{"class":171},[87,4219,1464],{"class":104},[87,4221,4209],{"class":171},[87,4223,3986],{"class":97},[87,4225,1677],{"class":171},[87,4227,242],{"class":104},[87,4229,3903],{"class":171},[87,4231,1464],{"class":104},[87,4233,1108],{"class":97},[87,4235,4236],{"class":89,"line":2573},[87,4237,3465],{"class":97},[87,4239,4240,4242,4244,4247,4249],{"class":89,"line":2579},[87,4241,3470],{"class":97},[87,4243,2134],{"class":171},[87,4245,4246],{"class":949},"\"敲桌子\"",[87,4248,2134],{"class":171},[87,4250,2156],{"class":97},[87,4252,4253],{"class":89,"line":2584},[87,4254,3484],{"class":97},[87,4256,4257],{"class":89,"line":2598},[87,4258,3525],{"class":171},[87,4260,4261],{"class":89,"line":2603},[87,4262,3465],{"class":97},[87,4264,4265,4267,4269,4271,4273],{"class":89,"line":2609},[87,4266,3470],{"class":97},[87,4268,2134],{"class":171},[87,4270,1536],{"class":97},[87,4272,2134],{"class":171},[87,4274,2156],{"class":97},[87,4276,4277],{"class":89,"line":2630},[87,4278,3484],{"class":97},[87,4280,4281],{"class":89,"line":2635},[87,4282,3142],{"class":97},[87,4284,4285],{"class":89,"line":2649},[87,4286,123],{"class":97},[19,4288,4289],{},"嵌套实现星图",[77,4291,4293],{"className":1091,"code":4292,"language":1093,"meta":82,"style":82},"#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",[84,4294,4295,4301,4311,4319,4323,4349,4353,4382,4386,4397,4401,4410,4414],{"__ignoreMap":82},[87,4296,4297,4299],{"class":89,"line":90},[87,4298,2905],{"class":171},[87,4300,2908],{"class":949},[87,4302,4303,4305,4307,4309],{"class":89,"line":101},[87,4304,2913],{"class":171},[87,4306,2916],{"class":171},[87,4308,2919],{"class":205},[87,4310,117],{"class":97},[87,4312,4313,4315,4317],{"class":89,"line":120},[87,4314,1105],{"class":171},[87,4316,2928],{"class":205},[87,4318,2931],{"class":97},[87,4320,4321],{"class":89,"line":222},[87,4322,2503],{"class":97},[87,4324,4325,4327,4329,4331,4333,4335,4337,4339,4341,4343,4345,4347],{"class":89,"line":234},[87,4326,4155],{"class":171},[87,4328,2614],{"class":97},[87,4330,1105],{"class":171},[87,4332,3986],{"class":97},[87,4334,946],{"class":171},[87,4336,111],{"class":104},[87,4338,3993],{"class":97},[87,4340,938],{"class":171},[87,4342,242],{"class":104},[87,4344,3993],{"class":97},[87,4346,3247],{"class":171},[87,4348,1108],{"class":97},[87,4350,4351],{"class":89,"line":256},[87,4352,2985],{"class":97},[87,4354,4355,4358,4360,4362,4365,4367,4369,4372,4374,4376,4378,4380],{"class":89,"line":269},[87,4356,4357],{"class":171},"        for",[87,4359,2614],{"class":97},[87,4361,1105],{"class":171},[87,4363,4364],{"class":97}," j",[87,4366,946],{"class":171},[87,4368,111],{"class":104},[87,4370,4371],{"class":97},";j",[87,4373,938],{"class":171},[87,4375,242],{"class":104},[87,4377,4371],{"class":97},[87,4379,3247],{"class":171},[87,4381,1108],{"class":97},[87,4383,4384],{"class":89,"line":463},[87,4385,3465],{"class":97},[87,4387,4388,4390,4392,4395],{"class":89,"line":469},[87,4389,3470],{"class":97},[87,4391,2134],{"class":171},[87,4393,4394],{"class":949},"\"*\"",[87,4396,117],{"class":97},[87,4398,4399],{"class":89,"line":2287},[87,4400,3484],{"class":97},[87,4402,4403,4406,4408],{"class":89,"line":2568},[87,4404,4405],{"class":97},"        cout",[87,4407,2134],{"class":171},[87,4409,2156],{"class":97},[87,4411,4412],{"class":89,"line":2573},[87,4413,3142],{"class":97},[87,4415,4416],{"class":89,"line":2579},[87,4417,123],{"class":97},[19,4419,4420],{},"乘法口诀表",[77,4422,4424],{"className":1091,"code":4423,"language":1093,"meta":82,"style":82},"#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",[84,4425,4426,4432,4442,4450,4454,4480,4484,4509,4513,4553,4557,4565,4569],{"__ignoreMap":82},[87,4427,4428,4430],{"class":89,"line":90},[87,4429,2905],{"class":171},[87,4431,3289],{"class":949},[87,4433,4434,4436,4438,4440],{"class":89,"line":101},[87,4435,2913],{"class":171},[87,4437,2916],{"class":171},[87,4439,2919],{"class":205},[87,4441,117],{"class":97},[87,4443,4444,4446,4448],{"class":89,"line":120},[87,4445,1105],{"class":171},[87,4447,2928],{"class":205},[87,4449,2931],{"class":97},[87,4451,4452],{"class":89,"line":222},[87,4453,2503],{"class":97},[87,4455,4456,4458,4460,4462,4464,4466,4468,4470,4472,4474,4476,4478],{"class":89,"line":234},[87,4457,4155],{"class":171},[87,4459,165],{"class":97},[87,4461,1105],{"class":171},[87,4463,3986],{"class":97},[87,4465,946],{"class":171},[87,4467,1313],{"class":104},[87,4469,3993],{"class":97},[87,4471,938],{"class":171},[87,4473,242],{"class":104},[87,4475,3993],{"class":97},[87,4477,3247],{"class":171},[87,4479,1108],{"class":97},[87,4481,4482],{"class":89,"line":256},[87,4483,2985],{"class":97},[87,4485,4486,4488,4490,4492,4494,4496,4498,4500,4502,4505,4507],{"class":89,"line":269},[87,4487,4357],{"class":171},[87,4489,165],{"class":97},[87,4491,1105],{"class":171},[87,4493,4364],{"class":97},[87,4495,946],{"class":171},[87,4497,1313],{"class":104},[87,4499,4371],{"class":97},[87,4501,2544],{"class":171},[87,4503,4504],{"class":97},"i;j",[87,4506,3247],{"class":171},[87,4508,1108],{"class":97},[87,4510,4511],{"class":89,"line":463},[87,4512,3465],{"class":97},[87,4514,4515,4517,4519,4521,4523,4525,4527,4529,4531,4534,4536,4538,4540,4542,4544,4547,4549,4551],{"class":89,"line":469},[87,4516,3470],{"class":97},[87,4518,2134],{"class":171},[87,4520,1561],{"class":97},[87,4522,2134],{"class":171},[87,4524,4394],{"class":949},[87,4526,2134],{"class":171},[87,4528,1536],{"class":97},[87,4530,2134],{"class":171},[87,4532,4533],{"class":949},"\"=\"",[87,4535,2134],{"class":171},[87,4537,1536],{"class":97},[87,4539,1549],{"class":171},[87,4541,1561],{"class":97},[87,4543,2134],{"class":171},[87,4545,4546],{"class":949},"'",[87,4548,2191],{"class":104},[87,4550,4546],{"class":949},[87,4552,117],{"class":97},[87,4554,4555],{"class":89,"line":2287},[87,4556,3484],{"class":97},[87,4558,4559,4561,4563],{"class":89,"line":2568},[87,4560,4405],{"class":97},[87,4562,2134],{"class":171},[87,4564,2156],{"class":97},[87,4566,4567],{"class":89,"line":2573},[87,4568,3142],{"class":97},[87,4570,4571],{"class":89,"line":2579},[87,4572,123],{"class":97},[44,4574,4576],{"id":4575},"_163跳出语句","1.6.3跳出语句",[1055,4578,4579],{},[29,4580,4581],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,4583,4584],{},"break使用时机：",[26,4586,4587,4590,4593],{},[29,4588,4589],{},"出现在switch条件语句中，作用是终止case并跳出switch",[29,4591,4592],{},"出现在循环结构中，作用是跳出当前的循环结构",[29,4594,4595],{},"出现在嵌套循环中，跳出最近的内层循环语句",[1055,4597,4598,4601],{"start":101},[29,4599,4600],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[29,4602,4603],{},"goto语句\n语法：goto 标记;",[19,4605,4606],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[77,4608,4610],{"className":1091,"code":4609,"language":1093,"meta":82,"style":82},"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",[84,4611,4612,4620,4624,4637,4647,4660,4673,4686,4694,4710],{"__ignoreMap":82},[87,4613,4614,4616,4618],{"class":89,"line":90},[87,4615,1105],{"class":171},[87,4617,2928],{"class":205},[87,4619,2931],{"class":97},[87,4621,4622],{"class":89,"line":101},[87,4623,2503],{"class":97},[87,4625,4626,4628,4630,4633,4635],{"class":89,"line":120},[87,4627,2508],{"class":97},[87,4629,2134],{"class":171},[87,4631,4632],{"class":949},"\"1\"",[87,4634,2134],{"class":171},[87,4636,2156],{"class":97},[87,4638,4639,4642,4645],{"class":89,"line":222},[87,4640,4641],{"class":171},"    goto",[87,4643,4644],{"class":205}," FLAG",[87,4646,117],{"class":97},[87,4648,4649,4651,4653,4656,4658],{"class":89,"line":234},[87,4650,2508],{"class":97},[87,4652,2134],{"class":171},[87,4654,4655],{"class":949},"\"2\"",[87,4657,2134],{"class":171},[87,4659,2156],{"class":97},[87,4661,4662,4664,4666,4669,4671],{"class":89,"line":256},[87,4663,2508],{"class":97},[87,4665,2134],{"class":171},[87,4667,4668],{"class":949},"\"3\"",[87,4670,2134],{"class":171},[87,4672,2156],{"class":97},[87,4674,4675,4677,4679,4682,4684],{"class":89,"line":269},[87,4676,2508],{"class":97},[87,4678,2134],{"class":171},[87,4680,4681],{"class":949},"\"4\"",[87,4683,2134],{"class":171},[87,4685,2156],{"class":97},[87,4687,4688,4691],{"class":89,"line":463},[87,4689,4690],{"class":205},"    FLAG",[87,4692,4693],{"class":97},":\n",[87,4695,4696,4698,4700,4703,4705,4707],{"class":89,"line":469},[87,4697,2508],{"class":97},[87,4699,2134],{"class":171},[87,4701,4702],{"class":949},"\"5\"",[87,4704,2134],{"class":171},[87,4706,2199],{"class":97},[87,4708,4709],{"class":199},"\u002F\u002F跳过了2,3,4,直接到5\n",[87,4711,4712],{"class":89,"line":2287},[87,4713,123],{"class":97},[14,4715,4717],{"id":4716},"_17数组","1.7数组",[44,4719,4721],{"id":4720},"_171一维数组","1.7.1一维数组",[1055,4723,4724],{},[29,4725,4726],{},"一维数组定义方式",[1235,4728,4729,4739],{},[1238,4730,4731],{},[1241,4732,4733,4736],{},[1244,4734,4735],{},"方式",[1244,4737,4738],{},"注意事项",[1281,4740,4741,4755,4765],{},[1241,4742,4743,4749],{},[1286,4744,4745,4746,1155],{},"数据类型 数组名",[87,4747,4748],{},"数组长度",[1286,4750,4751,4752,4754],{},"这种方式是先定义再arr",[87,4753,1536],{},"赋值",[1241,4756,4757,4762],{},[1286,4758,4745,4759,4761],{},[87,4760,4748],{},"={值1,值2....};",[1286,4763,4764],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[1241,4766,4767,4771],{},[1286,4768,4745,4769,4761],{},[87,4770],{},[1286,4772,4773,4774,4776],{},"int arr",[87,4775],{},";这是不正确的，按照这样的方式定义必须有初始长度",[1055,4778,4779],{"start":101},[29,4780,4781],{},"一维数组数组名\n用途：",[26,4783,4784],{},[29,4785,4786],{},"1.可以统计整个数组在内存中的长度：",[77,4788,4790],{"className":1091,"code":4789,"language":1093,"meta":82,"style":82},"sizeof(arr);\nsizeof(arr[0]);\n",[84,4791,4792,4799],{"__ignoreMap":82},[87,4793,4794,4796],{"class":89,"line":90},[87,4795,1100],{"class":171},[87,4797,4798],{"class":97},"(arr);\n",[87,4800,4801,4803,4806,4808],{"class":89,"line":101},[87,4802,1100],{"class":171},[87,4804,4805],{"class":97},"(arr[",[87,4807,111],{"class":104},[87,4809,4810],{"class":97},"]);\n",[26,4812,4813],{},[29,4814,4815],{},"2.可以获取数组在内存中的首地址:",[77,4817,4819],{"className":1091,"code":4818,"language":1093,"meta":82,"style":82},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[84,4820,4821,4826,4839,4844],{"__ignoreMap":82},[87,4822,4823],{"class":89,"line":90},[87,4824,4825],{"class":199},"\u002F\u002F查看16进制的首地址\n",[87,4827,4828,4830,4832,4835,4837],{"class":89,"line":101},[87,4829,2327],{"class":97},[87,4831,2134],{"class":171},[87,4833,4834],{"class":97},"arr",[87,4836,2134],{"class":171},[87,4838,2156],{"class":97},[87,4840,4841],{"class":89,"line":120},[87,4842,4843],{"class":199},"\u002F\u002F看10进制数\n",[87,4845,4846,4848,4850,4852,4854,4856,4858,4861,4863,4865,4867],{"class":89,"line":222},[87,4847,2327],{"class":97},[87,4849,2134],{"class":171},[87,4851,165],{"class":97},[87,4853,1105],{"class":171},[87,4855,1524],{"class":97},[87,4857,1448],{"class":171},[87,4859,4860],{"class":97},"arr[",[87,4862,111],{"class":104},[87,4864,2031],{"class":97},[87,4866,2134],{"class":171},[87,4868,2156],{"class":97},[19,4870,4871],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[26,4873,4874],{},[29,4875,4876],{},"1️⃣五只小猪称体重",[77,4878,4880],{"className":1091,"code":4879,"language":1093,"meta":82,"style":82},"#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",[84,4881,4882,4888,4898,4906,4910,4950,4963,4989,4993,5005,5009,5019,5023,5027,5040,5049],{"__ignoreMap":82},[87,4883,4884,4886],{"class":89,"line":90},[87,4885,2905],{"class":171},[87,4887,2908],{"class":949},[87,4889,4890,4892,4894,4896],{"class":89,"line":101},[87,4891,2913],{"class":171},[87,4893,2916],{"class":171},[87,4895,2919],{"class":205},[87,4897,117],{"class":97},[87,4899,4900,4902,4904],{"class":89,"line":120},[87,4901,1105],{"class":171},[87,4903,2928],{"class":205},[87,4905,2931],{"class":97},[87,4907,4908],{"class":89,"line":222},[87,4909,2503],{"class":97},[87,4911,4912,4914,4917,4919,4921,4923,4925,4928,4930,4933,4935,4937,4939,4942,4944,4947],{"class":89,"line":234},[87,4913,2940],{"class":171},[87,4915,4916],{"class":97}," arr[",[87,4918,1414],{"class":104},[87,4920,2031],{"class":97},[87,4922,946],{"class":171},[87,4924,1988],{"class":97},[87,4926,4927],{"class":104},"300",[87,4929,1473],{"class":97},[87,4931,4932],{"class":104},"350",[87,4934,1473],{"class":97},[87,4936,2678],{"class":104},[87,4938,1473],{"class":97},[87,4940,4941],{"class":104},"400",[87,4943,1473],{"class":97},[87,4945,4946],{"class":104},"250",[87,4948,4949],{"class":97},"};\n",[87,4951,4952,4954,4957,4959,4961],{"class":89,"line":256},[87,4953,2940],{"class":171},[87,4955,4956],{"class":97}," tmp",[87,4958,946],{"class":171},[87,4960,111],{"class":104},[87,4962,117],{"class":97},[87,4964,4965,4967,4969,4971,4973,4975,4977,4979,4981,4983,4985,4987],{"class":89,"line":269},[87,4966,4155],{"class":171},[87,4968,2614],{"class":97},[87,4970,1105],{"class":171},[87,4972,3986],{"class":97},[87,4974,946],{"class":171},[87,4976,111],{"class":104},[87,4978,3993],{"class":97},[87,4980,938],{"class":171},[87,4982,1414],{"class":104},[87,4984,3993],{"class":97},[87,4986,3247],{"class":171},[87,4988,1108],{"class":97},[87,4990,4991],{"class":89,"line":463},[87,4992,2985],{"class":97},[87,4994,4995,4997,5000,5002],{"class":89,"line":469},[87,4996,3452],{"class":171},[87,4998,4999],{"class":97},"(tmp",[87,5001,938],{"class":171},[87,5003,5004],{"class":97},"arr[i])\n",[87,5006,5007],{"class":89,"line":2287},[87,5008,3465],{"class":97},[87,5010,5011,5014,5016],{"class":89,"line":2568},[87,5012,5013],{"class":97},"            tmp",[87,5015,946],{"class":171},[87,5017,5018],{"class":97},"arr[i];\n",[87,5020,5021],{"class":89,"line":2573},[87,5022,3484],{"class":97},[87,5024,5025],{"class":89,"line":2579},[87,5026,3142],{"class":97},[87,5028,5029,5031,5033,5036,5038],{"class":89,"line":2584},[87,5030,2508],{"class":97},[87,5032,2134],{"class":171},[87,5034,5035],{"class":97},"tmp",[87,5037,2134],{"class":171},[87,5039,2156],{"class":97},[87,5041,5042,5045,5047],{"class":89,"line":2598},[87,5043,5044],{"class":171},"    return",[87,5046,577],{"class":104},[87,5048,117],{"class":97},[87,5050,5051],{"class":89,"line":2603},[87,5052,123],{"class":97},[26,5054,5055],{},[29,5056,5057],{},"2️⃣数组元素逆置",[77,5059,5061],{"className":1091,"code":5060,"language":1093,"meta":82,"style":82},"\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",[84,5062,5063,5068,5074,5084,5092,5096,5131,5147,5179,5192,5197,5202,5214,5224,5234,5239,5248,5258,5263,5268,5295,5299,5315,5319,5330,5339],{"__ignoreMap":82},[87,5064,5065],{"class":89,"line":90},[87,5066,5067],{"class":199},"\u002F\u002F元素逆置\n",[87,5069,5070,5072],{"class":89,"line":101},[87,5071,2905],{"class":171},[87,5073,2908],{"class":949},[87,5075,5076,5078,5080,5082],{"class":89,"line":120},[87,5077,2913],{"class":171},[87,5079,2916],{"class":171},[87,5081,2919],{"class":205},[87,5083,117],{"class":97},[87,5085,5086,5088,5090],{"class":89,"line":222},[87,5087,1105],{"class":171},[87,5089,2928],{"class":205},[87,5091,2931],{"class":97},[87,5093,5094],{"class":89,"line":234},[87,5095,2503],{"class":97},[87,5097,5098,5101,5103,5105,5107,5109,5111,5113,5115,5117,5119,5121,5123,5125,5127,5129],{"class":89,"line":256},[87,5099,5100],{"class":171},"   int",[87,5102,4916],{"class":97},[87,5104,1414],{"class":104},[87,5106,2031],{"class":97},[87,5108,946],{"class":171},[87,5110,1988],{"class":97},[87,5112,1313],{"class":104},[87,5114,1473],{"class":97},[87,5116,1176],{"class":104},[87,5118,1473],{"class":97},[87,5120,1170],{"class":104},[87,5122,1473],{"class":97},[87,5124,1389],{"class":104},[87,5126,1473],{"class":97},[87,5128,1414],{"class":104},[87,5130,4949],{"class":97},[87,5132,5133,5135,5138,5140,5142,5144],{"class":89,"line":269},[87,5134,5100],{"class":171},[87,5136,5137],{"class":97}," start",[87,5139,946],{"class":171},[87,5141,111],{"class":104},[87,5143,1155],{"class":97},[87,5145,5146],{"class":199},"\u002F\u002F起始下标\n",[87,5148,5149,5151,5154,5157,5160,5163,5165,5167,5170,5172,5174,5176],{"class":89,"line":463},[87,5150,5100],{"class":171},[87,5152,5153],{"class":97}," end",[87,5155,5156],{"class":171},"=sizeof",[87,5158,5159],{"class":97},"(arr)",[87,5161,5162],{"class":171},"\u002Fsizeof",[87,5164,4805],{"class":97},[87,5166,111],{"class":104},[87,5168,5169],{"class":97},"])",[87,5171,1625],{"class":171},[87,5173,1313],{"class":104},[87,5175,1155],{"class":97},[87,5177,5178],{"class":199},"\u002F\u002F结束下标\n",[87,5180,5181,5184,5187,5189],{"class":89,"line":469},[87,5182,5183],{"class":171},"   while",[87,5185,5186],{"class":97}," (start",[87,5188,938],{"class":171},[87,5190,5191],{"class":97},"end)\n",[87,5193,5194],{"class":89,"line":2287},[87,5195,5196],{"class":97},"   {\n",[87,5198,5199],{"class":89,"line":2568},[87,5200,5201],{"class":199},"    \u002F\u002F实现元素互换代码\n",[87,5203,5204,5206,5209,5211],{"class":89,"line":2573},[87,5205,2940],{"class":171},[87,5207,5208],{"class":97}," temp",[87,5210,946],{"class":171},[87,5212,5213],{"class":97},"arr[start];\n",[87,5215,5216,5219,5221],{"class":89,"line":2579},[87,5217,5218],{"class":97},"    arr[start]",[87,5220,946],{"class":171},[87,5222,5223],{"class":97},"arr[end];\n",[87,5225,5226,5229,5231],{"class":89,"line":2584},[87,5227,5228],{"class":97},"    arr[end]",[87,5230,946],{"class":171},[87,5232,5233],{"class":97},"temp;\n",[87,5235,5236],{"class":89,"line":2598},[87,5237,5238],{"class":199},"    \u002F\u002F下标更新\n",[87,5240,5241,5244,5246],{"class":89,"line":2603},[87,5242,5243],{"class":97},"    start",[87,5245,3247],{"class":171},[87,5247,117],{"class":97},[87,5249,5250,5253,5256],{"class":89,"line":2609},[87,5251,5252],{"class":97},"    end",[87,5254,5255],{"class":171},"--",[87,5257,117],{"class":97},[87,5259,5260],{"class":89,"line":2630},[87,5261,5262],{"class":97},"   }\n",[87,5264,5265],{"class":89,"line":2635},[87,5266,5267],{"class":199},"   \u002F\u002F输出逆置后的数组\n",[87,5269,5270,5273,5275,5277,5279,5281,5283,5285,5287,5289,5291,5293],{"class":89,"line":2649},[87,5271,5272],{"class":171},"   for",[87,5274,2614],{"class":97},[87,5276,1105],{"class":171},[87,5278,3986],{"class":97},[87,5280,946],{"class":171},[87,5282,111],{"class":104},[87,5284,3993],{"class":97},[87,5286,938],{"class":171},[87,5288,1414],{"class":104},[87,5290,3993],{"class":97},[87,5292,3247],{"class":171},[87,5294,1108],{"class":97},[87,5296,5297],{"class":89,"line":2654},[87,5298,5196],{"class":97},[87,5300,5301,5303,5305,5308,5310,5313],{"class":89,"line":2683},[87,5302,2508],{"class":97},[87,5304,2134],{"class":171},[87,5306,5307],{"class":97},"arr[i]",[87,5309,2134],{"class":171},[87,5311,5312],{"class":949},"\" \"",[87,5314,117],{"class":97},[87,5316,5317],{"class":89,"line":2688},[87,5318,5262],{"class":97},[87,5320,5321,5324,5326,5328],{"class":89,"line":2705},[87,5322,5323],{"class":205},"   system",[87,5325,165],{"class":97},[87,5327,3263],{"class":949},[87,5329,175],{"class":97},[87,5331,5332,5335,5337],{"class":89,"line":2710},[87,5333,5334],{"class":171},"   return",[87,5336,577],{"class":104},[87,5338,117],{"class":97},[87,5340,5341],{"class":89,"line":2715},[87,5342,123],{"class":97},[26,5344,5345],{},[29,5346,5347],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[77,5349,5351],{"className":1091,"code":5350,"language":1093,"meta":82,"style":82},"\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",[84,5352,5353,5358,5364,5374,5382,5386,5438,5451,5477,5481,5495,5499,5504,5509,5539,5543,5548,5582,5586,5591,5611,5616,5628,5644,5659,5664,5668,5672,5685,5711,5715,5729,5733,5741],{"__ignoreMap":82},[87,5354,5355],{"class":89,"line":90},[87,5356,5357],{"class":199},"\u002F\u002F冒泡排序,升序\n",[87,5359,5360,5362],{"class":89,"line":101},[87,5361,2905],{"class":171},[87,5363,2908],{"class":949},[87,5365,5366,5368,5370,5372],{"class":89,"line":120},[87,5367,2913],{"class":171},[87,5369,2916],{"class":171},[87,5371,2919],{"class":205},[87,5373,117],{"class":97},[87,5375,5376,5378,5380],{"class":89,"line":222},[87,5377,1105],{"class":171},[87,5379,2928],{"class":205},[87,5381,2931],{"class":97},[87,5383,5384],{"class":89,"line":234},[87,5385,2503],{"class":97},[87,5387,5388,5390,5392,5394,5397,5399,5402,5404,5406,5408,5410,5412,5414,5416,5418,5420,5422,5424,5426,5428,5430,5432,5434,5436],{"class":89,"line":256},[87,5389,2940],{"class":171},[87,5391,4916],{"class":97},[87,5393,1515],{"class":104},[87,5395,5396],{"class":97},"] ",[87,5398,946],{"class":171},[87,5400,5401],{"class":97}," {",[87,5403,1389],{"class":104},[87,5405,1473],{"class":97},[87,5407,1176],{"class":104},[87,5409,1473],{"class":97},[87,5411,1490],{"class":104},[87,5413,1473],{"class":97},[87,5415,111],{"class":104},[87,5417,1473],{"class":97},[87,5419,1414],{"class":104},[87,5421,1473],{"class":97},[87,5423,1464],{"class":104},[87,5425,1473],{"class":97},[87,5427,1313],{"class":104},[87,5429,1473],{"class":97},[87,5431,1170],{"class":104},[87,5433,1473],{"class":97},[87,5435,1515],{"class":104},[87,5437,4949],{"class":97},[87,5439,5440,5442,5444,5447,5449],{"class":89,"line":269},[87,5441,2508],{"class":97},[87,5443,2134],{"class":171},[87,5445,5446],{"class":949},"\"排序前：\"",[87,5448,2134],{"class":171},[87,5450,2156],{"class":97},[87,5452,5453,5455,5457,5459,5461,5463,5465,5467,5469,5471,5473,5475],{"class":89,"line":463},[87,5454,4155],{"class":171},[87,5456,2614],{"class":97},[87,5458,1105],{"class":171},[87,5460,3986],{"class":97},[87,5462,946],{"class":171},[87,5464,111],{"class":104},[87,5466,3993],{"class":97},[87,5468,938],{"class":171},[87,5470,1515],{"class":104},[87,5472,3993],{"class":97},[87,5474,3247],{"class":171},[87,5476,1108],{"class":97},[87,5478,5479],{"class":89,"line":469},[87,5480,2985],{"class":97},[87,5482,5483,5485,5487,5489,5491,5493],{"class":89,"line":2287},[87,5484,4405],{"class":97},[87,5486,2134],{"class":171},[87,5488,5307],{"class":97},[87,5490,2134],{"class":171},[87,5492,5312],{"class":949},[87,5494,117],{"class":97},[87,5496,5497],{"class":89,"line":2568},[87,5498,3142],{"class":97},[87,5500,5501],{"class":89,"line":2573},[87,5502,5503],{"class":199},"    \u002F\u002F开始冒泡排序\n",[87,5505,5506],{"class":89,"line":2579},[87,5507,5508],{"class":199},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[87,5510,5511,5513,5515,5517,5519,5521,5523,5525,5527,5529,5531,5533,5535,5537],{"class":89,"line":2584},[87,5512,4155],{"class":171},[87,5514,2614],{"class":97},[87,5516,1105],{"class":171},[87,5518,3986],{"class":97},[87,5520,946],{"class":171},[87,5522,111],{"class":104},[87,5524,3993],{"class":97},[87,5526,938],{"class":171},[87,5528,1515],{"class":104},[87,5530,1625],{"class":171},[87,5532,1313],{"class":104},[87,5534,3993],{"class":97},[87,5536,3247],{"class":171},[87,5538,1108],{"class":97},[87,5540,5541],{"class":89,"line":2598},[87,5542,2985],{"class":97},[87,5544,5545],{"class":89,"line":2603},[87,5546,5547],{"class":199},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[87,5549,5550,5552,5554,5556,5558,5560,5562,5564,5566,5568,5570,5572,5574,5576,5578,5580],{"class":89,"line":2609},[87,5551,4357],{"class":171},[87,5553,2614],{"class":97},[87,5555,1105],{"class":171},[87,5557,4364],{"class":97},[87,5559,946],{"class":171},[87,5561,111],{"class":104},[87,5563,4371],{"class":97},[87,5565,938],{"class":171},[87,5567,1515],{"class":104},[87,5569,1625],{"class":171},[87,5571,1536],{"class":97},[87,5573,1625],{"class":171},[87,5575,1313],{"class":104},[87,5577,4371],{"class":97},[87,5579,3247],{"class":171},[87,5581,1108],{"class":97},[87,5583,5584],{"class":89,"line":2630},[87,5585,3465],{"class":97},[87,5587,5588],{"class":89,"line":2635},[87,5589,5590],{"class":199},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[87,5592,5593,5596,5599,5601,5604,5606,5608],{"class":89,"line":2649},[87,5594,5595],{"class":171},"            if",[87,5597,5598],{"class":97},"(arr[j]",[87,5600,2051],{"class":171},[87,5602,5603],{"class":97},"arr[j",[87,5605,1575],{"class":171},[87,5607,1313],{"class":104},[87,5609,5610],{"class":97},"])\n",[87,5612,5613],{"class":89,"line":2654},[87,5614,5615],{"class":97},"            {\n",[87,5617,5618,5621,5623,5625],{"class":89,"line":2683},[87,5619,5620],{"class":171},"                int",[87,5622,5208],{"class":97},[87,5624,946],{"class":171},[87,5626,5627],{"class":97},"arr[j];\n",[87,5629,5630,5633,5635,5637,5639,5641],{"class":89,"line":2688},[87,5631,5632],{"class":97},"                arr[j]",[87,5634,946],{"class":171},[87,5636,5603],{"class":97},[87,5638,1575],{"class":171},[87,5640,1313],{"class":104},[87,5642,5643],{"class":97},"];\n",[87,5645,5646,5649,5651,5653,5655,5657],{"class":89,"line":2705},[87,5647,5648],{"class":97},"                arr[j",[87,5650,1575],{"class":171},[87,5652,1313],{"class":104},[87,5654,2031],{"class":97},[87,5656,946],{"class":171},[87,5658,5233],{"class":97},[87,5660,5661],{"class":89,"line":2710},[87,5662,5663],{"class":97},"            }\n",[87,5665,5666],{"class":89,"line":2715},[87,5667,3484],{"class":97},[87,5669,5670],{"class":89,"line":2720},[87,5671,3142],{"class":97},[87,5673,5674,5676,5678,5681,5683],{"class":89,"line":2734},[87,5675,2508],{"class":97},[87,5677,2134],{"class":171},[87,5679,5680],{"class":949},"\"排序后：\"",[87,5682,2134],{"class":171},[87,5684,2156],{"class":97},[87,5686,5687,5689,5691,5693,5695,5697,5699,5701,5703,5705,5707,5709],{"class":89,"line":2739},[87,5688,4155],{"class":171},[87,5690,2614],{"class":97},[87,5692,1105],{"class":171},[87,5694,3986],{"class":97},[87,5696,946],{"class":171},[87,5698,111],{"class":104},[87,5700,3993],{"class":97},[87,5702,938],{"class":171},[87,5704,1515],{"class":104},[87,5706,3993],{"class":97},[87,5708,3247],{"class":171},[87,5710,1108],{"class":97},[87,5712,5713],{"class":89,"line":3532},[87,5714,2985],{"class":97},[87,5716,5717,5719,5721,5723,5725,5727],{"class":89,"line":3546},[87,5718,4405],{"class":97},[87,5720,2134],{"class":171},[87,5722,5307],{"class":97},[87,5724,2134],{"class":171},[87,5726,5312],{"class":949},[87,5728,117],{"class":97},[87,5730,5731],{"class":89,"line":3554},[87,5732,3142],{"class":97},[87,5734,5735,5737,5739],{"class":89,"line":3559},[87,5736,5044],{"class":171},[87,5738,577],{"class":104},[87,5740,117],{"class":97},[87,5742,5743],{"class":89,"line":3565},[87,5744,123],{"class":97},[44,5746,5748],{"id":5747},"_172二维数组","1.7.2二维数组",[1055,5750,5751],{},[29,5752,5753],{},"二维数组的四种定义方式",[1235,5755,5756,5765],{},[1238,5757,5758],{},[1241,5759,5760,5763],{},[1244,5761,5762],{},"序号",[1244,5764,4735],{},[1281,5766,5767,5777,5786,5795,5804],{},[1241,5768,5769,5771],{},[1286,5770,1313],{},[1286,5772,5773,5774,1155],{},"数据类型 数组名[行数]",[87,5775,5776],{},"列数",[1241,5778,5779,5781],{},[1286,5780,1176],{},[1286,5782,5773,5783,5785],{},[87,5784,5776],{},"={ {数据1,数据2}，{数据3，数据4}... }",[1241,5787,5788,5790],{},[1286,5789,1170],{},[1286,5791,5773,5792,5794],{},[87,5793,5776],{},"={数据1,数据2,数据3...}",[1241,5796,5797,5799],{},[1286,5798,1389],{},[1286,5800,5801,5802,5794],{},"数据类型 数组名[]",[87,5803,5776],{},[1241,5805,5806,5809],{},[1286,5807,5808],{},"注意：不能只省略列数",[1286,5810],{},[1055,5812,5813],{"start":101},[29,5814,5815],{},"二维数组数组名",[26,5817,5818,5821],{},[29,5819,5820],{},"1.查看二维数组所占内存空间",[29,5822,5823],{},"2.获取二维数组首地址",[19,5825,5826],{},"已知二维数组，求二维数组的行数与列数",[77,5828,5830],{"className":1091,"code":5829,"language":1093,"meta":82,"style":82},"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",[84,5831,5832,5840,5844,5862,5866,5884,5900,5905,5930,5963],{"__ignoreMap":82},[87,5833,5834,5836,5838],{"class":89,"line":90},[87,5835,1105],{"class":171},[87,5837,2928],{"class":205},[87,5839,2931],{"class":97},[87,5841,5842],{"class":89,"line":101},[87,5843,2503],{"class":97},[87,5845,5846,5848,5850,5852,5855,5857,5859],{"class":89,"line":120},[87,5847,2940],{"class":171},[87,5849,4916],{"class":97},[87,5851,1176],{"class":104},[87,5853,5854],{"class":97},"][",[87,5856,1170],{"class":104},[87,5858,2031],{"class":97},[87,5860,5861],{"class":171},"=\n",[87,5863,5864],{"class":89,"line":222},[87,5865,2985],{"class":97},[87,5867,5868,5871,5873,5875,5877,5879,5881],{"class":89,"line":234},[87,5869,5870],{"class":97},"        {",[87,5872,1313],{"class":104},[87,5874,1473],{"class":97},[87,5876,1176],{"class":104},[87,5878,1473],{"class":97},[87,5880,1170],{"class":104},[87,5882,5883],{"class":97},"},\n",[87,5885,5886,5888,5890,5892,5894,5896,5898],{"class":89,"line":256},[87,5887,5870],{"class":97},[87,5889,1389],{"class":104},[87,5891,1473],{"class":97},[87,5893,1414],{"class":104},[87,5895,1473],{"class":97},[87,5897,1439],{"class":104},[87,5899,123],{"class":97},[87,5901,5902],{"class":89,"line":269},[87,5903,5904],{"class":97},"    };\n",[87,5906,5907,5909,5911,5914,5916,5918,5920,5922,5924,5926,5928],{"class":89,"line":463},[87,5908,2508],{"class":97},[87,5910,2134],{"class":171},[87,5912,5913],{"class":949},"\"二维数组的行数\"",[87,5915,2330],{"class":171},[87,5917,5159],{"class":97},[87,5919,5162],{"class":171},[87,5921,4805],{"class":97},[87,5923,111],{"class":104},[87,5925,5169],{"class":97},[87,5927,2134],{"class":171},[87,5929,2156],{"class":97},[87,5931,5932,5934,5936,5939,5941,5943,5945,5947,5949,5951,5953,5955,5957,5959,5961],{"class":89,"line":469},[87,5933,2508],{"class":97},[87,5935,2134],{"class":171},[87,5937,5938],{"class":949},"\"二维数组的列数\"",[87,5940,2330],{"class":171},[87,5942,4805],{"class":97},[87,5944,111],{"class":104},[87,5946,5169],{"class":97},[87,5948,5162],{"class":171},[87,5950,4805],{"class":97},[87,5952,111],{"class":104},[87,5954,5854],{"class":97},[87,5956,111],{"class":104},[87,5958,5169],{"class":97},[87,5960,2134],{"class":171},[87,5962,2156],{"class":97},[87,5964,5965],{"class":89,"line":2287},[87,5966,123],{"class":97},[19,5968,5969],{},"查看二维数组首地址",[77,5971,5973],{"className":1091,"code":5972,"language":1093,"meta":82,"style":82},"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",[84,5974,5975,5992,6018,6043],{"__ignoreMap":82},[87,5976,5977,5979,5981,5984,5986,5988,5990],{"class":89,"line":90},[87,5978,2327],{"class":97},[87,5980,2134],{"class":171},[87,5982,5983],{"class":949},"\"二维数组首地址：\"",[87,5985,2134],{"class":171},[87,5987,4834],{"class":97},[87,5989,2134],{"class":171},[87,5991,2156],{"class":97},[87,5993,5994,5996,5998,6001,6003,6005,6007,6010,6012,6014,6016],{"class":89,"line":101},[87,5995,2327],{"class":97},[87,5997,2134],{"class":171},[87,5999,6000],{"class":949},"\"二维数组第一行的首地址：\"",[87,6002,2134],{"class":171},[87,6004,165],{"class":97},[87,6006,1105],{"class":171},[87,6008,6009],{"class":97},")arr[",[87,6011,111],{"class":104},[87,6013,2031],{"class":97},[87,6015,2134],{"class":171},[87,6017,2156],{"class":97},[87,6019,6020,6022,6024,6027,6029,6031,6033,6035,6037,6039,6041],{"class":89,"line":120},[87,6021,2327],{"class":97},[87,6023,2134],{"class":171},[87,6025,6026],{"class":949},"\"二维数组第二行的首地址：\"",[87,6028,2134],{"class":171},[87,6030,165],{"class":97},[87,6032,1105],{"class":171},[87,6034,6009],{"class":97},[87,6036,1313],{"class":104},[87,6038,2031],{"class":97},[87,6040,2134],{"class":171},[87,6042,2156],{"class":97},[87,6044,6045,6047,6049,6052,6054,6056,6058,6060,6062,6064,6066,6068,6070,6072,6074,6076],{"class":89,"line":222},[87,6046,2327],{"class":97},[87,6048,2134],{"class":171},[87,6050,6051],{"class":949},"\"二维数组第一个元素的首地址:\"",[87,6053,2134],{"class":171},[87,6055,165],{"class":97},[87,6057,1105],{"class":171},[87,6059,1524],{"class":97},[87,6061,1448],{"class":171},[87,6063,4860],{"class":97},[87,6065,111],{"class":104},[87,6067,5854],{"class":97},[87,6069,111],{"class":104},[87,6071,2031],{"class":97},[87,6073,2134],{"class":171},[87,6075,2199],{"class":97},[87,6077,6078],{"class":199},"\u002F\u002F对于数，要加取址符\n",[1006,6080,6081],{},"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":82,"searchDepth":101,"depth":101,"links":6083},[6084,6085,6086,6094,6095,6101,6106],{"id":1045,"depth":101,"text":1046},{"id":1052,"depth":101,"text":1053},{"id":1068,"depth":101,"text":1069,"children":6087},[6088,6089,6090,6091,6092,6093],{"id":1072,"depth":120,"text":1073},{"id":1118,"depth":120,"text":1119},{"id":1184,"depth":120,"text":1185},{"id":2115,"depth":120,"text":2116},{"id":2205,"depth":120,"text":2206},{"id":2301,"depth":120,"text":2302},{"id":2343,"depth":101,"text":2344},{"id":2411,"depth":101,"text":2412,"children":6096},[6097,6098,6099,6100],{"id":2415,"depth":120,"text":2416},{"id":2436,"depth":120,"text":2437},{"id":2445,"depth":120,"text":2446},{"id":2454,"depth":120,"text":2455},{"id":2463,"depth":101,"text":2464,"children":6102},[6103,6104,6105],{"id":2467,"depth":120,"text":2468},{"id":3160,"depth":120,"text":3161},{"id":4575,"depth":120,"text":4576},{"id":4716,"depth":101,"text":4717,"children":6107},[6108,6109],{"id":4720,"depth":120,"text":4721},{"id":5747,"depth":120,"text":5748},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1037,"description":82},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6116,"title":6117,"body":6118,"description":82,"extension":1027,"meta":7215,"navigation":1029,"path":7216,"seo":7217,"stem":7218,"__hash__":7219},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6119,"toc":7207},[6120,6123,6127,6135,6141,6144,6209,6213,6216,6292,6296,6299,6302,6305,6518,6522,6527,6591,6596,6663,6668,6759,6762,6867,6871,6874,6880,7024,7028,7031,7045,7048,7093,7096,7204],[10,6121,6117],{"id":6122},"_2函数",[14,6124,6126],{"id":6125},"_21函数概述","2.1函数概述",[1055,6128,6129,6132],{},[29,6130,6131],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[29,6133,6134],{},"语法：",[77,6136,6139],{"className":6137,"code":6138,"language":599,"meta":82},[597],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[84,6140,6138],{"__ignoreMap":82},[19,6142,6143],{},"小案例",[77,6145,6147],{"className":1091,"code":6146,"language":1093,"meta":82,"style":82},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[84,6148,6149,6154,6177,6181,6198,6205],{"__ignoreMap":82},[87,6150,6151],{"class":89,"line":90},[87,6152,6153],{"class":199},"\u002F\u002Fnum1,num2形参\n",[87,6155,6156,6158,6161,6163,6165,6168,6170,6172,6175],{"class":89,"line":101},[87,6157,1105],{"class":171},[87,6159,6160],{"class":205}," add",[87,6162,165],{"class":97},[87,6164,1105],{"class":171},[87,6166,6167],{"class":492}," num1",[87,6169,1473],{"class":97},[87,6171,1105],{"class":171},[87,6173,6174],{"class":492}," num2",[87,6176,1108],{"class":97},[87,6178,6179],{"class":89,"line":120},[87,6180,2503],{"class":97},[87,6182,6183,6185,6188,6190,6193,6195],{"class":89,"line":222},[87,6184,2940],{"class":171},[87,6186,6187],{"class":97}," sum",[87,6189,946],{"class":171},[87,6191,6192],{"class":97},"num1",[87,6194,1575],{"class":171},[87,6196,6197],{"class":97},"num2;\n",[87,6199,6200,6202],{"class":89,"line":234},[87,6201,5044],{"class":171},[87,6203,6204],{"class":97}," sum;\n",[87,6206,6207],{"class":89,"line":256},[87,6208,123],{"class":97},[14,6210,6212],{"id":6211},"_22函数调用","2.2函数调用",[19,6214,6215],{},"调用刚刚写的求和函数",[77,6217,6219],{"className":1091,"code":6218,"language":1093,"meta":82,"style":82},"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",[84,6220,6221,6229,6233,6238,6250,6262,6271,6276,6288],{"__ignoreMap":82},[87,6222,6223,6225,6227],{"class":89,"line":90},[87,6224,1105],{"class":171},[87,6226,2928],{"class":205},[87,6228,2931],{"class":97},[87,6230,6231],{"class":89,"line":101},[87,6232,2503],{"class":97},[87,6234,6235],{"class":89,"line":120},[87,6236,6237],{"class":199},"    \u002F\u002Fa,b实参\n",[87,6239,6240,6242,6244,6246,6248],{"class":89,"line":222},[87,6241,2940],{"class":171},[87,6243,2356],{"class":97},[87,6245,946],{"class":171},[87,6247,111],{"class":104},[87,6249,117],{"class":97},[87,6251,6252,6254,6256,6258,6260],{"class":89,"line":234},[87,6253,2940],{"class":171},[87,6255,3787],{"class":97},[87,6257,946],{"class":171},[87,6259,111],{"class":104},[87,6261,117],{"class":97},[87,6263,6264,6266,6268],{"class":89,"line":256},[87,6265,2967],{"class":97},[87,6267,2387],{"class":171},[87,6269,6270],{"class":97},"a,b;\n",[87,6272,6273],{"class":89,"line":269},[87,6274,6275],{"class":199},"    \u002F\u002F调用函数时，实参值传给了形参\n",[87,6277,6278,6280,6282,6285],{"class":89,"line":463},[87,6279,2508],{"class":97},[87,6281,2134],{"class":171},[87,6283,6284],{"class":205},"add",[87,6286,6287],{"class":97},"(a,b);\n",[87,6289,6290],{"class":89,"line":469},[87,6291,123],{"class":97},[14,6293,6295],{"id":6294},"_23值传递","2.3值传递",[19,6297,6298],{},"值传递就是函数调用时实参将数值传给形参",[19,6300,6301],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,6303,6304],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[77,6306,6308],{"className":1091,"code":6307,"language":1093,"meta":82,"style":82},"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",[84,6309,6310,6332,6336,6349,6366,6384,6395,6404,6413,6426,6442,6458,6467,6471,6479,6483,6495,6507,6514],{"__ignoreMap":82},[87,6311,6312,6315,6318,6320,6322,6324,6326,6328,6330],{"class":89,"line":90},[87,6313,6314],{"class":171},"void",[87,6316,6317],{"class":205}," swap",[87,6319,165],{"class":97},[87,6321,1105],{"class":171},[87,6323,6167],{"class":492},[87,6325,1473],{"class":97},[87,6327,1105],{"class":171},[87,6329,6174],{"class":492},[87,6331,1108],{"class":97},[87,6333,6334],{"class":89,"line":101},[87,6335,2503],{"class":97},[87,6337,6338,6340,6342,6345,6347],{"class":89,"line":120},[87,6339,2508],{"class":97},[87,6341,2134],{"class":171},[87,6343,6344],{"class":949},"\"交换前：\"",[87,6346,2134],{"class":171},[87,6348,2156],{"class":97},[87,6350,6351,6353,6355,6358,6360,6362,6364],{"class":89,"line":222},[87,6352,2508],{"class":97},[87,6354,2134],{"class":171},[87,6356,6357],{"class":949},"\"num1=\"",[87,6359,2134],{"class":171},[87,6361,6192],{"class":97},[87,6363,2134],{"class":171},[87,6365,2156],{"class":97},[87,6367,6368,6370,6372,6375,6377,6380,6382],{"class":89,"line":234},[87,6369,2508],{"class":97},[87,6371,2134],{"class":171},[87,6373,6374],{"class":949},"\"num2=\"",[87,6376,2134],{"class":171},[87,6378,6379],{"class":97},"num2",[87,6381,2134],{"class":171},[87,6383,2156],{"class":97},[87,6385,6386,6388,6390,6392],{"class":89,"line":256},[87,6387,2940],{"class":171},[87,6389,5208],{"class":97},[87,6391,946],{"class":171},[87,6393,6394],{"class":97},"num1;\n",[87,6396,6397,6400,6402],{"class":89,"line":269},[87,6398,6399],{"class":97},"    num1",[87,6401,946],{"class":171},[87,6403,6197],{"class":97},[87,6405,6406,6409,6411],{"class":89,"line":463},[87,6407,6408],{"class":97},"    num2",[87,6410,946],{"class":171},[87,6412,5233],{"class":97},[87,6414,6415,6417,6419,6422,6424],{"class":89,"line":469},[87,6416,2508],{"class":97},[87,6418,2134],{"class":171},[87,6420,6421],{"class":949},"\"交换后：\"",[87,6423,2134],{"class":171},[87,6425,2156],{"class":97},[87,6427,6428,6430,6432,6434,6436,6438,6440],{"class":89,"line":2287},[87,6429,2508],{"class":97},[87,6431,2134],{"class":171},[87,6433,6357],{"class":949},[87,6435,2134],{"class":171},[87,6437,6192],{"class":97},[87,6439,2134],{"class":171},[87,6441,2156],{"class":97},[87,6443,6444,6446,6448,6450,6452,6454,6456],{"class":89,"line":2568},[87,6445,2508],{"class":97},[87,6447,2134],{"class":171},[87,6449,6374],{"class":949},[87,6451,2134],{"class":171},[87,6453,6379],{"class":97},[87,6455,2134],{"class":171},[87,6457,2156],{"class":97},[87,6459,6460,6462,6464],{"class":89,"line":2573},[87,6461,5044],{"class":171},[87,6463,1155],{"class":97},[87,6465,6466],{"class":199},"\u002F\u002F或者不写\n",[87,6468,6469],{"class":89,"line":2579},[87,6470,123],{"class":97},[87,6472,6473,6475,6477],{"class":89,"line":2584},[87,6474,1105],{"class":171},[87,6476,2928],{"class":205},[87,6478,2931],{"class":97},[87,6480,6481],{"class":89,"line":2598},[87,6482,2503],{"class":97},[87,6484,6485,6487,6489,6491,6493],{"class":89,"line":2603},[87,6486,2940],{"class":171},[87,6488,2356],{"class":97},[87,6490,946],{"class":171},[87,6492,242],{"class":104},[87,6494,117],{"class":97},[87,6496,6497,6499,6501,6503,6505],{"class":89,"line":2609},[87,6498,2940],{"class":171},[87,6500,3787],{"class":97},[87,6502,946],{"class":171},[87,6504,1792],{"class":104},[87,6506,117],{"class":97},[87,6508,6509,6512],{"class":89,"line":2630},[87,6510,6511],{"class":205},"    swap",[87,6513,6287],{"class":97},[87,6515,6516],{"class":89,"line":2635},[87,6517,123],{"class":97},[14,6519,6521],{"id":6520},"_24函数的常见形式","2.4函数的常见形式",[1055,6523,6524],{},[29,6525,6526],{},"无参无返",[77,6528,6530],{"className":1091,"code":6529,"language":1093,"meta":82,"style":82},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[84,6531,6532,6541,6545,6558,6562,6570,6574,6579,6587],{"__ignoreMap":82},[87,6533,6534,6536,6539],{"class":89,"line":90},[87,6535,6314],{"class":171},[87,6537,6538],{"class":205}," test01",[87,6540,2931],{"class":97},[87,6542,6543],{"class":89,"line":101},[87,6544,2503],{"class":97},[87,6546,6547,6549,6551,6554,6556],{"class":89,"line":120},[87,6548,2508],{"class":97},[87,6550,2134],{"class":171},[87,6552,6553],{"class":949},"\"你好\"",[87,6555,2134],{"class":171},[87,6557,2156],{"class":97},[87,6559,6560],{"class":89,"line":222},[87,6561,123],{"class":97},[87,6563,6564,6566,6568],{"class":89,"line":234},[87,6565,1105],{"class":171},[87,6567,2928],{"class":205},[87,6569,2931],{"class":97},[87,6571,6572],{"class":89,"line":256},[87,6573,2503],{"class":97},[87,6575,6576],{"class":89,"line":269},[87,6577,6578],{"class":199},"    \u002F\u002F函数调用\n",[87,6580,6581,6584],{"class":89,"line":463},[87,6582,6583],{"class":205},"    test01",[87,6585,6586],{"class":97},"();\n",[87,6588,6589],{"class":89,"line":469},[87,6590,123],{"class":97},[1055,6592,6593],{"start":101},[29,6594,6595],{},"有参无返",[77,6597,6599],{"className":1091,"code":6598,"language":1093,"meta":82,"style":82},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[84,6600,6601,6616,6620,6632,6636,6644,6648,6659],{"__ignoreMap":82},[87,6602,6603,6605,6608,6610,6612,6614],{"class":89,"line":90},[87,6604,6314],{"class":171},[87,6606,6607],{"class":205}," test02",[87,6609,165],{"class":97},[87,6611,1105],{"class":171},[87,6613,2356],{"class":492},[87,6615,1108],{"class":97},[87,6617,6618],{"class":89,"line":101},[87,6619,2503],{"class":97},[87,6621,6622,6624,6626,6628,6630],{"class":89,"line":120},[87,6623,2508],{"class":97},[87,6625,2134],{"class":171},[87,6627,6553],{"class":949},[87,6629,2134],{"class":171},[87,6631,2156],{"class":97},[87,6633,6634],{"class":89,"line":222},[87,6635,123],{"class":97},[87,6637,6638,6640,6642],{"class":89,"line":234},[87,6639,1105],{"class":171},[87,6641,2928],{"class":205},[87,6643,2931],{"class":97},[87,6645,6646],{"class":89,"line":256},[87,6647,2503],{"class":97},[87,6649,6650,6653,6655,6657],{"class":89,"line":269},[87,6651,6652],{"class":205},"    test02",[87,6654,165],{"class":97},[87,6656,536],{"class":104},[87,6658,175],{"class":97},[87,6660,6661],{"class":89,"line":463},[87,6662,123],{"class":97},[1055,6664,6665],{"start":120},[29,6666,6667],{},"无参有返",[77,6669,6671],{"className":1091,"code":6670,"language":1093,"meta":82,"style":82},"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",[84,6672,6673,6682,6686,6698,6707,6711,6719,6723,6736,6755],{"__ignoreMap":82},[87,6674,6675,6677,6680],{"class":89,"line":90},[87,6676,1105],{"class":171},[87,6678,6679],{"class":205}," test03",[87,6681,2931],{"class":97},[87,6683,6684],{"class":89,"line":101},[87,6685,2503],{"class":97},[87,6687,6688,6690,6692,6694,6696],{"class":89,"line":120},[87,6689,2508],{"class":97},[87,6691,2134],{"class":171},[87,6693,6553],{"class":949},[87,6695,2134],{"class":171},[87,6697,2156],{"class":97},[87,6699,6700,6702,6705],{"class":89,"line":222},[87,6701,5044],{"class":171},[87,6703,6704],{"class":104}," 100",[87,6706,117],{"class":97},[87,6708,6709],{"class":89,"line":234},[87,6710,123],{"class":97},[87,6712,6713,6715,6717],{"class":89,"line":256},[87,6714,1105],{"class":171},[87,6716,2928],{"class":205},[87,6718,2931],{"class":97},[87,6720,6721],{"class":89,"line":269},[87,6722,2503],{"class":97},[87,6724,6725,6727,6729,6731,6734],{"class":89,"line":463},[87,6726,2940],{"class":171},[87,6728,6167],{"class":97},[87,6730,946],{"class":171},[87,6732,6733],{"class":205},"test03",[87,6735,6586],{"class":97},[87,6737,6738,6740,6742,6744,6746,6748,6750,6752],{"class":89,"line":469},[87,6739,2508],{"class":97},[87,6741,2134],{"class":171},[87,6743,6357],{"class":949},[87,6745,2134],{"class":171},[87,6747,6192],{"class":97},[87,6749,2134],{"class":171},[87,6751,2199],{"class":97},[87,6753,6754],{"class":199}," \u002F\u002F100\n",[87,6756,6757],{"class":89,"line":2287},[87,6758,123],{"class":97},[19,6760,6761],{},"4.有参有返",[77,6763,6765],{"className":1091,"code":6764,"language":1093,"meta":82,"style":82},"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",[84,6766,6767,6782,6786,6799,6805,6809,6818,6822,6834,6848,6863],{"__ignoreMap":82},[87,6768,6769,6771,6774,6776,6778,6780],{"class":89,"line":90},[87,6770,1105],{"class":171},[87,6772,6773],{"class":205}," test04",[87,6775,165],{"class":97},[87,6777,1105],{"class":171},[87,6779,2356],{"class":492},[87,6781,1108],{"class":97},[87,6783,6784],{"class":89,"line":101},[87,6785,2503],{"class":97},[87,6787,6788,6790,6792,6795,6797],{"class":89,"line":120},[87,6789,2508],{"class":97},[87,6791,2134],{"class":171},[87,6793,6794],{"class":949},"\"hello\"",[87,6796,2134],{"class":171},[87,6798,2156],{"class":97},[87,6800,6801,6803],{"class":89,"line":222},[87,6802,5044],{"class":171},[87,6804,2390],{"class":97},[87,6806,6807],{"class":89,"line":234},[87,6808,123],{"class":97},[87,6810,6811,6813,6816],{"class":89,"line":256},[87,6812,1105],{"class":171},[87,6814,6815],{"class":205}," mian",[87,6817,2931],{"class":97},[87,6819,6820],{"class":89,"line":269},[87,6821,2503],{"class":97},[87,6823,6824,6826,6828,6830,6832],{"class":89,"line":463},[87,6825,2940],{"class":171},[87,6827,3787],{"class":97},[87,6829,946],{"class":171},[87,6831,1313],{"class":104},[87,6833,117],{"class":97},[87,6835,6836,6838,6840,6842,6845],{"class":89,"line":469},[87,6837,2940],{"class":171},[87,6839,3803],{"class":97},[87,6841,946],{"class":171},[87,6843,6844],{"class":205},"test04",[87,6846,6847],{"class":97},"(b);\n",[87,6849,6850,6852,6854,6856,6858,6860],{"class":89,"line":2287},[87,6851,2508],{"class":97},[87,6853,2134],{"class":171},[87,6855,1384],{"class":97},[87,6857,2134],{"class":171},[87,6859,2199],{"class":97},[87,6861,6862],{"class":199}," \u002F\u002F1\n",[87,6864,6865],{"class":89,"line":2568},[87,6866,123],{"class":97},[14,6868,6870],{"id":6869},"_25函数的声明","2.5函数的声明",[19,6872,6873],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6875,6876,6877],{},"函数的",[57,6878,6879],{},"声明可以多次，但是函数的定义只能有一次",[77,6881,6883],{"className":1091,"code":6882,"language":1093,"meta":82,"style":82},"\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",[84,6884,6885,6890,6895,6920,6929,6933,6945,6957,6973,6977,6997,7001,7020],{"__ignoreMap":82},[87,6886,6887],{"class":89,"line":90},[87,6888,6889],{"class":199},"\u002F\u002F函数声明\n",[87,6891,6892],{"class":89,"line":101},[87,6893,6894],{"class":199},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[87,6896,6897,6899,6902,6904,6906,6908,6910,6912,6914,6917],{"class":89,"line":120},[87,6898,1105],{"class":171},[87,6900,6901],{"class":205}," max",[87,6903,165],{"class":97},[87,6905,1105],{"class":171},[87,6907,2356],{"class":492},[87,6909,1473],{"class":97},[87,6911,1105],{"class":171},[87,6913,3787],{"class":492},[87,6915,6916],{"class":97},");",[87,6918,6919],{"class":199},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[87,6921,6922,6924,6926],{"class":89,"line":222},[87,6923,1105],{"class":171},[87,6925,2928],{"class":205},[87,6927,6928],{"class":97},"() \n",[87,6930,6931],{"class":89,"line":234},[87,6932,2503],{"class":97},[87,6934,6935,6937,6939,6941,6943],{"class":89,"line":256},[87,6936,2940],{"class":171},[87,6938,2356],{"class":97},[87,6940,946],{"class":171},[87,6942,242],{"class":104},[87,6944,117],{"class":97},[87,6946,6947,6949,6951,6953,6955],{"class":89,"line":269},[87,6948,2940],{"class":171},[87,6950,3787],{"class":97},[87,6952,946],{"class":171},[87,6954,1792],{"class":104},[87,6956,117],{"class":97},[87,6958,6959,6961,6963,6966,6969,6971],{"class":89,"line":463},[87,6960,2508],{"class":97},[87,6962,2134],{"class":171},[87,6964,6965],{"class":205},"max",[87,6967,6968],{"class":97},"(a,b)",[87,6970,2134],{"class":171},[87,6972,2156],{"class":97},[87,6974,6975],{"class":89,"line":469},[87,6976,123],{"class":97},[87,6978,6979,6981,6983,6985,6987,6989,6991,6993,6995],{"class":89,"line":2287},[87,6980,1105],{"class":171},[87,6982,6901],{"class":205},[87,6984,165],{"class":97},[87,6986,1105],{"class":171},[87,6988,2356],{"class":492},[87,6990,1473],{"class":97},[87,6992,1105],{"class":171},[87,6994,3787],{"class":492},[87,6996,1108],{"class":97},[87,6998,6999],{"class":89,"line":2568},[87,7000,2503],{"class":97},[87,7002,7003,7005,7007,7009,7011,7013,7015,7017],{"class":89,"line":2573},[87,7004,5044],{"class":171},[87,7006,2356],{"class":97},[87,7008,2051],{"class":171},[87,7010,1359],{"class":97},[87,7012,2077],{"class":171},[87,7014,1334],{"class":97},[87,7016,1951],{"class":171},[87,7018,7019],{"class":97},"b;\n",[87,7021,7022],{"class":89,"line":2579},[87,7023,123],{"class":97},[14,7025,7027],{"id":7026},"_26函数的分文件编写","2.6函数的分文件编写",[19,7029,7030],{},"4个步骤：",[26,7032,7033,7036,7039,7042],{},[29,7034,7035],{},"1.创建后缀名为.h的头文件",[29,7037,7038],{},"2.创建后缀名为.cpp的源文件",[29,7040,7041],{},"3.在头文件中写函数的定义",[29,7043,7044],{},"4.在源文件中写函数的定义\n示例：",[19,7046,7047],{},"头文件：swap.h",[77,7049,7051],{"className":1091,"code":7050,"language":1093,"meta":82,"style":82},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[84,7052,7053,7059,7069,7073],{"__ignoreMap":82},[87,7054,7055,7057],{"class":89,"line":90},[87,7056,2905],{"class":171},[87,7058,2908],{"class":949},[87,7060,7061,7063,7065,7067],{"class":89,"line":101},[87,7062,2913],{"class":171},[87,7064,2916],{"class":171},[87,7066,2919],{"class":205},[87,7068,117],{"class":97},[87,7070,7071],{"class":89,"line":120},[87,7072,6889],{"class":199},[87,7074,7075,7077,7079,7081,7083,7085,7087,7089,7091],{"class":89,"line":222},[87,7076,6314],{"class":171},[87,7078,6317],{"class":205},[87,7080,165],{"class":97},[87,7082,1105],{"class":171},[87,7084,2356],{"class":492},[87,7086,1473],{"class":97},[87,7088,1105],{"class":171},[87,7090,3787],{"class":492},[87,7092,175],{"class":97},[19,7094,7095],{},"源文件：swap.cpp",[77,7097,7099],{"className":1091,"code":7098,"language":1093,"meta":82,"style":82},"#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",[84,7100,7101,7108,7113,7133,7137,7148,7157,7166,7183,7200],{"__ignoreMap":82},[87,7102,7103,7105],{"class":89,"line":90},[87,7104,2905],{"class":171},[87,7106,7107],{"class":949}," \"swap.h\"\n",[87,7109,7110],{"class":89,"line":101},[87,7111,7112],{"class":199},"\u002F\u002F函数的定义\n",[87,7114,7115,7117,7119,7121,7123,7125,7127,7129,7131],{"class":89,"line":120},[87,7116,6314],{"class":171},[87,7118,6317],{"class":205},[87,7120,165],{"class":97},[87,7122,1105],{"class":171},[87,7124,2356],{"class":492},[87,7126,1473],{"class":97},[87,7128,1105],{"class":171},[87,7130,3787],{"class":492},[87,7132,1108],{"class":97},[87,7134,7135],{"class":89,"line":222},[87,7136,2503],{"class":97},[87,7138,7139,7141,7143,7145],{"class":89,"line":234},[87,7140,2940],{"class":171},[87,7142,5208],{"class":97},[87,7144,946],{"class":171},[87,7146,7147],{"class":97},"a;\n",[87,7149,7150,7153,7155],{"class":89,"line":256},[87,7151,7152],{"class":97},"    a",[87,7154,946],{"class":171},[87,7156,7019],{"class":97},[87,7158,7159,7162,7164],{"class":89,"line":269},[87,7160,7161],{"class":97},"    b",[87,7163,946],{"class":171},[87,7165,5233],{"class":97},[87,7167,7168,7170,7172,7175,7177,7179,7181],{"class":89,"line":463},[87,7169,2508],{"class":97},[87,7171,2134],{"class":171},[87,7173,7174],{"class":949},"\"a=\"",[87,7176,2134],{"class":171},[87,7178,1334],{"class":97},[87,7180,2134],{"class":171},[87,7182,2156],{"class":97},[87,7184,7185,7187,7189,7192,7194,7196,7198],{"class":89,"line":469},[87,7186,2508],{"class":97},[87,7188,2134],{"class":171},[87,7190,7191],{"class":949},"\"b=\"",[87,7193,2134],{"class":171},[87,7195,1359],{"class":97},[87,7197,2134],{"class":171},[87,7199,2156],{"class":97},[87,7201,7202],{"class":89,"line":2287},[87,7203,123],{"class":97},[1006,7205,7206],{},"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":82,"searchDepth":101,"depth":101,"links":7208},[7209,7210,7211,7212,7213,7214],{"id":6125,"depth":101,"text":6126},{"id":6211,"depth":101,"text":6212},{"id":6294,"depth":101,"text":6295},{"id":6520,"depth":101,"text":6521},{"id":6869,"depth":101,"text":6870},{"id":7026,"depth":101,"text":7027},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6117,"description":82},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7221,"title":7222,"body":7223,"description":7230,"extension":1027,"meta":8635,"navigation":1029,"path":8636,"seo":8637,"stem":8638,"__hash__":8639},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7224,"toc":8625},[7225,7228,7231,7235,7397,7401,7404,7407,7410,7413,7553,7557,7560,7563,7566,7631,7635,7640,7707,7710,7714,7717,7728,7733,7753,7756,7761,7780,7783,7787,7806,7809,7813,8048,8052,8055,8058,8061,8223,8226,8230,8233,8239,8622],[10,7226,7222],{"id":7227},"_3指针",[19,7229,7230],{},"通过指针保存一个地址，指针就是个地址",[14,7232,7234],{"id":7233},"_31定义指针","3.1定义指针",[77,7236,7238],{"className":1091,"code":7237,"language":1093,"meta":82,"style":82},"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",[84,7239,7240,7248,7252,7257,7269,7274,7282,7292,7310,7330,7334,7339,7344,7349,7363,7379,7393],{"__ignoreMap":82},[87,7241,7242,7244,7246],{"class":89,"line":90},[87,7243,1105],{"class":171},[87,7245,2928],{"class":205},[87,7247,2931],{"class":97},[87,7249,7250],{"class":89,"line":101},[87,7251,2503],{"class":97},[87,7253,7254],{"class":89,"line":120},[87,7255,7256],{"class":199},"    \u002F\u002F1.定义指针\n",[87,7258,7259,7261,7263,7265,7267],{"class":89,"line":222},[87,7260,2940],{"class":171},[87,7262,2356],{"class":97},[87,7264,946],{"class":171},[87,7266,242],{"class":104},[87,7268,117],{"class":97},[87,7270,7271],{"class":89,"line":234},[87,7272,7273],{"class":199},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[87,7275,7276,7279],{"class":89,"line":256},[87,7277,7278],{"class":171},"    int*",[87,7280,7281],{"class":97},"p;\n",[87,7283,7284,7287,7290],{"class":89,"line":269},[87,7285,7286],{"class":97},"    p",[87,7288,7289],{"class":171},"=&",[87,7291,7147],{"class":97},[87,7293,7294,7296,7298,7301,7304,7306,7308],{"class":89,"line":463},[87,7295,2508],{"class":97},[87,7297,2134],{"class":171},[87,7299,7300],{"class":949},"\"a的地址为：\"",[87,7302,7303],{"class":171},"\u003C\u003C&",[87,7305,1334],{"class":97},[87,7307,2134],{"class":171},[87,7309,2156],{"class":97},[87,7311,7312,7314,7316,7319,7321,7323,7325,7327],{"class":89,"line":469},[87,7313,2508],{"class":97},[87,7315,2134],{"class":171},[87,7317,7318],{"class":949},"\"指针p为：\"",[87,7320,2134],{"class":171},[87,7322,19],{"class":97},[87,7324,2134],{"class":171},[87,7326,2199],{"class":97},[87,7328,7329],{"class":199},"\u002F\u002F指针p表示的就是a的地址\n",[87,7331,7332],{"class":89,"line":2287},[87,7333,3355],{"emptyLinePlaceholder":1029},[87,7335,7336],{"class":89,"line":2568},[87,7337,7338],{"class":199},"    \u002F\u002F2.使用指针\n",[87,7340,7341],{"class":89,"line":2573},[87,7342,7343],{"class":199},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[87,7345,7346],{"class":89,"line":2579},[87,7347,7348],{"class":199},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[87,7350,7351,7354,7356,7358,7361],{"class":89,"line":2584},[87,7352,7353],{"class":171},"    *",[87,7355,19],{"class":97},[87,7357,946],{"class":171},[87,7359,7360],{"class":104},"1000",[87,7362,117],{"class":97},[87,7364,7365,7367,7370,7372,7374,7376],{"class":89,"line":2598},[87,7366,2508],{"class":97},[87,7368,7369],{"class":171},"\u003C\u003C*",[87,7371,19],{"class":97},[87,7373,2134],{"class":171},[87,7375,2199],{"class":97},[87,7377,7378],{"class":199},"\u002F\u002F1000\n",[87,7380,7381,7383,7385,7387,7389,7391],{"class":89,"line":2603},[87,7382,2508],{"class":97},[87,7384,2134],{"class":171},[87,7386,1334],{"class":97},[87,7388,2134],{"class":171},[87,7390,2199],{"class":97},[87,7392,7378],{"class":199},[87,7394,7395],{"class":89,"line":2609},[87,7396,123],{"class":97},[14,7398,7400],{"id":7399},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,7402,7403],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,7405,7406],{},"在32位操作系统下：占用4个字节空间",[19,7408,7409],{},"在64位操作系统下：占用8个字节空间",[19,7411,7412],{},"上方是不管啥数据类型的",[77,7414,7416],{"className":1091,"code":7415,"language":1093,"meta":82,"style":82},"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",[84,7417,7418,7426,7430,7435,7447,7452,7457,7462,7475,7497,7523,7549],{"__ignoreMap":82},[87,7419,7420,7422,7424],{"class":89,"line":90},[87,7421,1105],{"class":171},[87,7423,2928],{"class":205},[87,7425,2931],{"class":97},[87,7427,7428],{"class":89,"line":101},[87,7429,2503],{"class":97},[87,7431,7432],{"class":89,"line":120},[87,7433,7434],{"class":199},"    \u002F\u002F指针所占内存空间\n",[87,7436,7437,7439,7441,7443,7445],{"class":89,"line":222},[87,7438,2940],{"class":171},[87,7440,2356],{"class":97},[87,7442,946],{"class":171},[87,7444,242],{"class":104},[87,7446,117],{"class":97},[87,7448,7449],{"class":89,"line":234},[87,7450,7451],{"class":199},"    \u002F\u002Fint *p;\n",[87,7453,7454],{"class":89,"line":256},[87,7455,7456],{"class":199},"    \u002F\u002Fp=&a;\n",[87,7458,7459],{"class":89,"line":269},[87,7460,7461],{"class":199},"    \u002F\u002F上述可以写为以下：\n",[87,7463,7464,7466,7469,7471,7473],{"class":89,"line":463},[87,7465,2940],{"class":171},[87,7467,7468],{"class":171}," *",[87,7470,19],{"class":97},[87,7472,7289],{"class":171},[87,7474,7147],{"class":97},[87,7476,7477,7480,7482,7485,7487,7490,7492,7494],{"class":89,"line":469},[87,7478,7479],{"class":97},"    cout ",[87,7481,2134],{"class":171},[87,7483,7484],{"class":949},"\"sizeof(int *)\"",[87,7486,2330],{"class":171},[87,7488,7489],{"class":97},"(p)",[87,7491,2134],{"class":171},[87,7493,2199],{"class":97},[87,7495,7496],{"class":199},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[87,7498,7499,7501,7503,7505,7507,7509,7511,7513,7515,7517,7520],{"class":89,"line":2287},[87,7500,7479],{"class":97},[87,7502,2134],{"class":171},[87,7504,7484],{"class":949},[87,7506,2330],{"class":171},[87,7508,165],{"class":97},[87,7510,1105],{"class":171},[87,7512,7468],{"class":171},[87,7514,1524],{"class":97},[87,7516,2134],{"class":171},[87,7518,7519],{"class":97},"endl",[87,7521,7522],{"class":199},"  \u002F\u002F4字节(32位的话)\n",[87,7524,7525,7527,7529,7532,7534,7536,7538,7540,7542,7544,7546],{"class":89,"line":2568},[87,7526,7479],{"class":97},[87,7528,2134],{"class":171},[87,7530,7531],{"class":949},"\"sizeof(char *)\"",[87,7533,2330],{"class":171},[87,7535,165],{"class":97},[87,7537,1195],{"class":171},[87,7539,7468],{"class":171},[87,7541,1524],{"class":97},[87,7543,2134],{"class":171},[87,7545,2199],{"class":97},[87,7547,7548],{"class":199}," \u002F\u002F4字节(32位的话)\n",[87,7550,7551],{"class":89,"line":2573},[87,7552,123],{"class":97},[14,7554,7556],{"id":7555},"_33空指针","3.3空指针",[19,7558,7559],{},"空指针：指针变量指向内存中编号为0的空间",[19,7561,7562],{},"用途：初始化指针变量",[19,7564,7565],{},"注意：空指针指向的内存是不可以访问的",[77,7567,7569],{"className":1091,"code":7568,"language":1093,"meta":82,"style":82},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[84,7570,7571,7579,7583,7588,7602,7607,7622,7627],{"__ignoreMap":82},[87,7572,7573,7575,7577],{"class":89,"line":90},[87,7574,1105],{"class":171},[87,7576,2928],{"class":205},[87,7578,2931],{"class":97},[87,7580,7581],{"class":89,"line":101},[87,7582,2503],{"class":97},[87,7584,7585],{"class":89,"line":120},[87,7586,7587],{"class":199},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[87,7589,7590,7592,7594,7596,7598,7600],{"class":89,"line":222},[87,7591,2940],{"class":171},[87,7593,7468],{"class":171},[87,7595,19],{"class":97},[87,7597,946],{"class":171},[87,7599,3347],{"class":104},[87,7601,117],{"class":97},[87,7603,7604],{"class":89,"line":234},[87,7605,7606],{"class":199},"    \u002F\u002F2.空指针不能进行访问\n",[87,7608,7609,7611,7613,7615,7617,7619],{"class":89,"line":256},[87,7610,7353],{"class":171},[87,7612,19],{"class":97},[87,7614,946],{"class":171},[87,7616,536],{"class":104},[87,7618,1155],{"class":97},[87,7620,7621],{"class":199},"\u002F\u002F直接报错，压根不能访问\n",[87,7623,7624],{"class":89,"line":269},[87,7625,7626],{"class":199},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[87,7628,7629],{"class":89,"line":463},[87,7630,123],{"class":97},[14,7632,7634],{"id":7633},"_34野指针","3.4野指针",[19,7636,7637],{},[57,7638,7639],{},"指针变量指向非法的内存空间",[77,7641,7643],{"className":1091,"code":7642,"language":1093,"meta":82,"style":82},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[84,7644,7645,7653,7657,7686,7691,7703],{"__ignoreMap":82},[87,7646,7647,7649,7651],{"class":89,"line":90},[87,7648,1105],{"class":171},[87,7650,2928],{"class":205},[87,7652,2931],{"class":97},[87,7654,7655],{"class":89,"line":101},[87,7656,2503],{"class":97},[87,7658,7659,7661,7663,7665,7667,7669,7671,7673,7675,7678,7681,7683],{"class":89,"line":120},[87,7660,2940],{"class":171},[87,7662,7468],{"class":171},[87,7664,19],{"class":97},[87,7666,946],{"class":171},[87,7668,165],{"class":97},[87,7670,1105],{"class":171},[87,7672,7468],{"class":171},[87,7674,1524],{"class":97},[87,7676,7677],{"class":171},"0x",[87,7679,7680],{"class":104},"1100",[87,7682,1155],{"class":97},[87,7684,7685],{"class":199}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[87,7687,7688],{"class":89,"line":222},[87,7689,7690],{"class":199},"    \u002F\u002F访问野指针报错\n",[87,7692,7693,7695,7697,7699,7701],{"class":89,"line":234},[87,7694,2508],{"class":97},[87,7696,7369],{"class":171},[87,7698,19],{"class":97},[87,7700,2134],{"class":171},[87,7702,2156],{"class":97},[87,7704,7705],{"class":89,"line":256},[87,7706,123],{"class":97},[19,7708,7709],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,7711,7713],{"id":7712},"_35const修饰指针","3.5const修饰指针",[19,7715,7716],{},"三种情况：",[26,7718,7719,7722,7725],{},[29,7720,7721],{},"const修饰指针 常量指针",[29,7723,7724],{},"const修饰常量 指针常量",[29,7726,7727],{},"const即修饰指针，又修饰常量",[1055,7729,7730],{},[29,7731,7732],{},"常量指针",[77,7734,7736],{"className":1091,"code":7735,"language":1093,"meta":82,"style":82},"const int *p=&a;\n",[84,7737,7738],{"__ignoreMap":82},[87,7739,7740,7743,7745,7747,7749,7751],{"class":89,"line":90},[87,7741,7742],{"class":171},"const",[87,7744,3337],{"class":171},[87,7746,7468],{"class":171},[87,7748,19],{"class":97},[87,7750,7289],{"class":171},[87,7752,7147],{"class":97},[19,7754,7755],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[1055,7757,7758],{"start":101},[29,7759,7760],{},"指针常量",[77,7762,7764],{"className":1091,"code":7763,"language":1093,"meta":82,"style":82},"int *const p=&a;\n",[84,7765,7766],{"__ignoreMap":82},[87,7767,7768,7770,7773,7776,7778],{"class":89,"line":90},[87,7769,1105],{"class":171},[87,7771,7772],{"class":171}," *const",[87,7774,7775],{"class":97}," p",[87,7777,7289],{"class":171},[87,7779,7147],{"class":97},[19,7781,7782],{},"指针的指向不可以改，指针指向的值可以改",[1055,7784,7785],{"start":120},[29,7786,7727],{},[77,7788,7790],{"className":1091,"code":7789,"language":1093,"meta":82,"style":82},"const int *const p=&a;\n",[84,7791,7792],{"__ignoreMap":82},[87,7793,7794,7796,7798,7800,7802,7804],{"class":89,"line":90},[87,7795,7742],{"class":171},[87,7797,3337],{"class":171},[87,7799,7772],{"class":171},[87,7801,7775],{"class":97},[87,7803,7289],{"class":171},[87,7805,7147],{"class":97},[19,7807,7808],{},"指针的指向和指针指向的值都不可以改变",[14,7810,7812],{"id":7811},"_36指针和数组","3.6指针和数组",[77,7814,7816],{"className":1091,"code":7815,"language":1093,"meta":82,"style":82},"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",[84,7817,7818,7826,7830,7835,7889,7910,7926,7942,7953,7970,7975,7989,8015,8019,8031,8040,8044],{"__ignoreMap":82},[87,7819,7820,7822,7824],{"class":89,"line":90},[87,7821,1105],{"class":171},[87,7823,2928],{"class":205},[87,7825,2931],{"class":97},[87,7827,7828],{"class":89,"line":101},[87,7829,2503],{"class":97},[87,7831,7832],{"class":89,"line":120},[87,7833,7834],{"class":199},"    \u002F\u002F利用指针访问数组中的元素\n",[87,7836,7837,7839,7841,7843,7845,7847,7849,7851,7853,7855,7857,7859,7861,7863,7865,7867,7869,7871,7873,7875,7877,7879,7881,7883,7885,7887],{"class":89,"line":222},[87,7838,2940],{"class":171},[87,7840,4916],{"class":97},[87,7842,242],{"class":104},[87,7844,2031],{"class":97},[87,7846,946],{"class":171},[87,7848,1988],{"class":97},[87,7850,1313],{"class":104},[87,7852,1473],{"class":97},[87,7854,1176],{"class":104},[87,7856,1473],{"class":97},[87,7858,1170],{"class":104},[87,7860,1473],{"class":97},[87,7862,1389],{"class":104},[87,7864,1473],{"class":97},[87,7866,1414],{"class":104},[87,7868,1473],{"class":97},[87,7870,1439],{"class":104},[87,7872,1473],{"class":97},[87,7874,1464],{"class":104},[87,7876,1473],{"class":97},[87,7878,1490],{"class":104},[87,7880,1473],{"class":97},[87,7882,1515],{"class":104},[87,7884,1473],{"class":97},[87,7886,242],{"class":104},[87,7888,4949],{"class":97},[87,7890,7891,7893,7895,7898,7900,7902,7904,7906,7908],{"class":89,"line":234},[87,7892,2508],{"class":97},[87,7894,2134],{"class":171},[87,7896,7897],{"class":949},"\"数组的第一个元素为：\"",[87,7899,2134],{"class":171},[87,7901,4860],{"class":97},[87,7903,111],{"class":104},[87,7905,2031],{"class":97},[87,7907,2134],{"class":171},[87,7909,2156],{"class":97},[87,7911,7912,7914,7916,7918,7920,7923],{"class":89,"line":256},[87,7913,2940],{"class":171},[87,7915,7468],{"class":171},[87,7917,19],{"class":97},[87,7919,946],{"class":171},[87,7921,7922],{"class":97},"arr;",[87,7924,7925],{"class":199},"\u002F\u002F注意数才要加取地址符号&\n",[87,7927,7928,7930,7932,7934,7936,7938,7940],{"class":89,"line":269},[87,7929,2508],{"class":97},[87,7931,2134],{"class":171},[87,7933,7897],{"class":949},[87,7935,7369],{"class":171},[87,7937,19],{"class":97},[87,7939,2134],{"class":171},[87,7941,2156],{"class":97},[87,7943,7944,7946,7948,7950],{"class":89,"line":463},[87,7945,7286],{"class":97},[87,7947,3247],{"class":171},[87,7949,1155],{"class":97},[87,7951,7952],{"class":199}," \u002F\u002F让指针向后偏移4个字节\n",[87,7954,7955,7957,7959,7962,7964,7966,7968],{"class":89,"line":469},[87,7956,2508],{"class":97},[87,7958,2134],{"class":171},[87,7960,7961],{"class":949},"\"数组的第二个元素为：\"",[87,7963,7369],{"class":171},[87,7965,19],{"class":97},[87,7967,2134],{"class":171},[87,7969,2156],{"class":97},[87,7971,7972],{"class":89,"line":2287},[87,7973,7974],{"class":199},"    \u002F\u002F利用指针遍历数组\n",[87,7976,7977,7979,7981,7984,7986],{"class":89,"line":2568},[87,7978,2940],{"class":171},[87,7980,7468],{"class":171},[87,7982,7983],{"class":97},"p2",[87,7985,946],{"class":171},[87,7987,7988],{"class":97},"arr;\n",[87,7990,7991,7993,7995,7997,7999,8001,8003,8005,8007,8009,8011,8013],{"class":89,"line":2573},[87,7992,4155],{"class":171},[87,7994,2614],{"class":97},[87,7996,1105],{"class":171},[87,7998,3986],{"class":97},[87,8000,946],{"class":171},[87,8002,111],{"class":104},[87,8004,3993],{"class":97},[87,8006,938],{"class":171},[87,8008,242],{"class":104},[87,8010,3993],{"class":97},[87,8012,3247],{"class":171},[87,8014,1108],{"class":97},[87,8016,8017],{"class":89,"line":2579},[87,8018,2985],{"class":97},[87,8020,8021,8023,8025,8027,8029],{"class":89,"line":2584},[87,8022,4405],{"class":97},[87,8024,7369],{"class":171},[87,8026,7983],{"class":97},[87,8028,2134],{"class":171},[87,8030,2156],{"class":97},[87,8032,8033,8036,8038],{"class":89,"line":2598},[87,8034,8035],{"class":97},"        p2",[87,8037,3247],{"class":171},[87,8039,117],{"class":97},[87,8041,8042],{"class":89,"line":2603},[87,8043,3142],{"class":97},[87,8045,8046],{"class":89,"line":2609},[87,8047,123],{"class":97},[14,8049,8051],{"id":8050},"_37指针和函数","3.7指针和函数",[19,8053,8054],{},"利用指针做函数参数，可以修改实参的值",[19,8056,8057],{},"值传递：只改变形参，不改变实参",[19,8059,8060],{},"地址传递：",[77,8062,8064],{"className":1091,"code":8063,"language":1093,"meta":82,"style":82},"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",[84,8065,8066,8091,8095,8107,8118,8128,8132,8140,8144,8156,8168,8173,8189,8204,8219],{"__ignoreMap":82},[87,8067,8068,8070,8072,8074,8076,8078,8081,8083,8085,8087,8089],{"class":89,"line":90},[87,8069,6314],{"class":171},[87,8071,6317],{"class":205},[87,8073,165],{"class":97},[87,8075,1105],{"class":171},[87,8077,7468],{"class":171},[87,8079,8080],{"class":492},"p1",[87,8082,1473],{"class":97},[87,8084,1105],{"class":171},[87,8086,7468],{"class":171},[87,8088,7983],{"class":492},[87,8090,1108],{"class":97},[87,8092,8093],{"class":89,"line":101},[87,8094,2503],{"class":97},[87,8096,8097,8099,8101,8104],{"class":89,"line":120},[87,8098,2940],{"class":171},[87,8100,5208],{"class":97},[87,8102,8103],{"class":171},"=*",[87,8105,8106],{"class":97},"p1;\n",[87,8108,8109,8111,8113,8115],{"class":89,"line":222},[87,8110,7353],{"class":171},[87,8112,8080],{"class":97},[87,8114,8103],{"class":171},[87,8116,8117],{"class":97},"p2;\n",[87,8119,8120,8122,8124,8126],{"class":89,"line":234},[87,8121,7353],{"class":171},[87,8123,7983],{"class":97},[87,8125,946],{"class":171},[87,8127,5233],{"class":97},[87,8129,8130],{"class":89,"line":256},[87,8131,123],{"class":97},[87,8133,8134,8136,8138],{"class":89,"line":269},[87,8135,1105],{"class":171},[87,8137,2928],{"class":205},[87,8139,2931],{"class":97},[87,8141,8142],{"class":89,"line":463},[87,8143,2503],{"class":97},[87,8145,8146,8148,8150,8152,8154],{"class":89,"line":469},[87,8147,2940],{"class":171},[87,8149,2356],{"class":97},[87,8151,946],{"class":171},[87,8153,242],{"class":104},[87,8155,117],{"class":97},[87,8157,8158,8160,8162,8164,8166],{"class":89,"line":2287},[87,8159,2940],{"class":171},[87,8161,3787],{"class":97},[87,8163,946],{"class":171},[87,8165,1792],{"class":104},[87,8167,117],{"class":97},[87,8169,8170],{"class":89,"line":2568},[87,8171,8172],{"class":199},"    \u002F\u002F地址传递\n",[87,8174,8175,8177,8179,8181,8184,8186],{"class":89,"line":2573},[87,8176,6511],{"class":205},[87,8178,165],{"class":97},[87,8180,1448],{"class":171},[87,8182,8183],{"class":97},"a,",[87,8185,1448],{"class":171},[87,8187,8188],{"class":97},"b);\n",[87,8190,8191,8193,8195,8197,8199,8201],{"class":89,"line":2579},[87,8192,2508],{"class":97},[87,8194,2134],{"class":171},[87,8196,1334],{"class":97},[87,8198,2134],{"class":171},[87,8200,2199],{"class":97},[87,8202,8203],{"class":199},"\u002F\u002F20\n",[87,8205,8206,8208,8210,8212,8214,8216],{"class":89,"line":2584},[87,8207,2508],{"class":97},[87,8209,2134],{"class":171},[87,8211,1359],{"class":97},[87,8213,2134],{"class":171},[87,8215,2199],{"class":97},[87,8217,8218],{"class":199},"\u002F\u002F10\n",[87,8220,8221],{"class":89,"line":2598},[87,8222,123],{"class":97},[19,8224,8225],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8227,8229],{"id":8228},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,8231,8232],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,8234,8235,8236,8238],{},"例如数组：int arr",[87,8237,242],{},"={4,3,6,9,1,2,10,8,7,5}",[77,8240,8242],{"className":1091,"code":8241,"language":1093,"meta":82,"style":82},"#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",[84,8243,8244,8250,8260,8284,8288,8319,8323,8357,8361,8379,8383,8394,8409,8424,8428,8432,8436,8440,8444,8452,8456,8461,8515,8527,8539,8544,8552,8556,8561,8586,8590,8605,8614,8618],{"__ignoreMap":82},[87,8245,8246,8248],{"class":89,"line":90},[87,8247,2905],{"class":171},[87,8249,2908],{"class":949},[87,8251,8252,8254,8256,8258],{"class":89,"line":101},[87,8253,2913],{"class":171},[87,8255,2916],{"class":171},[87,8257,2919],{"class":205},[87,8259,117],{"class":97},[87,8261,8262,8264,8267,8269,8271,8273,8275,8277,8279,8282],{"class":89,"line":120},[87,8263,6314],{"class":171},[87,8265,8266],{"class":205}," bubbleSort",[87,8268,165],{"class":97},[87,8270,1105],{"class":171},[87,8272,7468],{"class":171},[87,8274,19],{"class":492},[87,8276,1473],{"class":97},[87,8278,1105],{"class":171},[87,8280,8281],{"class":492}," len",[87,8283,1108],{"class":97},[87,8285,8286],{"class":89,"line":222},[87,8287,2503],{"class":97},[87,8289,8290,8292,8294,8296,8298,8300,8302,8304,8306,8309,8311,8313,8315,8317],{"class":89,"line":234},[87,8291,4155],{"class":171},[87,8293,165],{"class":97},[87,8295,1105],{"class":171},[87,8297,3986],{"class":97},[87,8299,946],{"class":171},[87,8301,111],{"class":104},[87,8303,3993],{"class":97},[87,8305,938],{"class":171},[87,8307,8308],{"class":97},"len",[87,8310,1625],{"class":171},[87,8312,1313],{"class":104},[87,8314,3993],{"class":97},[87,8316,3247],{"class":171},[87,8318,1108],{"class":97},[87,8320,8321],{"class":89,"line":256},[87,8322,2985],{"class":97},[87,8324,8325,8327,8329,8331,8333,8335,8337,8339,8341,8343,8345,8347,8349,8351,8353,8355],{"class":89,"line":269},[87,8326,4357],{"class":171},[87,8328,165],{"class":97},[87,8330,1105],{"class":171},[87,8332,4364],{"class":97},[87,8334,946],{"class":171},[87,8336,111],{"class":104},[87,8338,4371],{"class":97},[87,8340,938],{"class":171},[87,8342,8308],{"class":97},[87,8344,1625],{"class":171},[87,8346,1536],{"class":97},[87,8348,1625],{"class":171},[87,8350,1313],{"class":104},[87,8352,4371],{"class":97},[87,8354,3247],{"class":171},[87,8356,1108],{"class":97},[87,8358,8359],{"class":89,"line":463},[87,8360,3465],{"class":97},[87,8362,8363,8365,8368,8370,8373,8375,8377],{"class":89,"line":469},[87,8364,5595],{"class":171},[87,8366,8367],{"class":97},"(p[j]",[87,8369,2051],{"class":171},[87,8371,8372],{"class":97},"p[j",[87,8374,1575],{"class":171},[87,8376,1313],{"class":104},[87,8378,5610],{"class":97},[87,8380,8381],{"class":89,"line":2287},[87,8382,5615],{"class":97},[87,8384,8385,8387,8389,8391],{"class":89,"line":2568},[87,8386,5620],{"class":171},[87,8388,5208],{"class":97},[87,8390,946],{"class":171},[87,8392,8393],{"class":97},"p[j];\n",[87,8395,8396,8399,8401,8403,8405,8407],{"class":89,"line":2573},[87,8397,8398],{"class":97},"                p[j]",[87,8400,946],{"class":171},[87,8402,8372],{"class":97},[87,8404,1575],{"class":171},[87,8406,1313],{"class":104},[87,8408,5643],{"class":97},[87,8410,8411,8414,8416,8418,8420,8422],{"class":89,"line":2579},[87,8412,8413],{"class":97},"                p[j",[87,8415,1575],{"class":171},[87,8417,1313],{"class":104},[87,8419,2031],{"class":97},[87,8421,946],{"class":171},[87,8423,5233],{"class":97},[87,8425,8426],{"class":89,"line":2584},[87,8427,5663],{"class":97},[87,8429,8430],{"class":89,"line":2598},[87,8431,3484],{"class":97},[87,8433,8434],{"class":89,"line":2603},[87,8435,3142],{"class":97},[87,8437,8438],{"class":89,"line":2609},[87,8439,123],{"class":97},[87,8441,8442],{"class":89,"line":2630},[87,8443,3355],{"emptyLinePlaceholder":1029},[87,8445,8446,8448,8450],{"class":89,"line":2635},[87,8447,1105],{"class":171},[87,8449,2928],{"class":205},[87,8451,2931],{"class":97},[87,8453,8454],{"class":89,"line":2649},[87,8455,2503],{"class":97},[87,8457,8458],{"class":89,"line":2654},[87,8459,8460],{"class":199},"    \u002F\u002F 1.创建数组\n",[87,8462,8463,8465,8467,8469,8471,8473,8475,8477,8479,8481,8483,8485,8487,8489,8491,8493,8495,8497,8499,8501,8503,8505,8507,8509,8511,8513],{"class":89,"line":2683},[87,8464,2940],{"class":171},[87,8466,4916],{"class":97},[87,8468,242],{"class":104},[87,8470,2031],{"class":97},[87,8472,946],{"class":171},[87,8474,1988],{"class":97},[87,8476,1389],{"class":104},[87,8478,1473],{"class":97},[87,8480,1170],{"class":104},[87,8482,1473],{"class":97},[87,8484,1439],{"class":104},[87,8486,1473],{"class":97},[87,8488,1515],{"class":104},[87,8490,1473],{"class":97},[87,8492,1313],{"class":104},[87,8494,1473],{"class":97},[87,8496,1176],{"class":104},[87,8498,1473],{"class":97},[87,8500,242],{"class":104},[87,8502,1473],{"class":97},[87,8504,1490],{"class":104},[87,8506,1473],{"class":97},[87,8508,1464],{"class":104},[87,8510,1473],{"class":97},[87,8512,1414],{"class":104},[87,8514,4949],{"class":97},[87,8516,8517,8519,8521,8523,8525],{"class":89,"line":2688},[87,8518,2940],{"class":171},[87,8520,8281],{"class":97},[87,8522,946],{"class":171},[87,8524,242],{"class":104},[87,8526,117],{"class":97},[87,8528,8529,8531,8533,8535,8537],{"class":89,"line":2705},[87,8530,2940],{"class":171},[87,8532,7468],{"class":171},[87,8534,19],{"class":97},[87,8536,946],{"class":171},[87,8538,7988],{"class":97},[87,8540,8541],{"class":89,"line":2710},[87,8542,8543],{"class":199},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[87,8545,8546,8549],{"class":89,"line":2715},[87,8547,8548],{"class":205},"    bubbleSort",[87,8550,8551],{"class":97},"(p,len);\n",[87,8553,8554],{"class":89,"line":2720},[87,8555,3355],{"emptyLinePlaceholder":1029},[87,8557,8558],{"class":89,"line":2734},[87,8559,8560],{"class":199},"    \u002F\u002F 3.打印排序后的数组\n",[87,8562,8563,8565,8567,8569,8571,8573,8575,8577,8579,8582,8584],{"class":89,"line":2739},[87,8564,4155],{"class":171},[87,8566,2614],{"class":97},[87,8568,1105],{"class":171},[87,8570,3986],{"class":97},[87,8572,946],{"class":171},[87,8574,111],{"class":104},[87,8576,4168],{"class":97},[87,8578,938],{"class":171},[87,8580,8581],{"class":97},"len; i",[87,8583,3247],{"class":171},[87,8585,1108],{"class":97},[87,8587,8588],{"class":89,"line":3532},[87,8589,2985],{"class":97},[87,8591,8592,8594,8596,8598,8600,8603],{"class":89,"line":3546},[87,8593,4405],{"class":97},[87,8595,7369],{"class":171},[87,8597,19],{"class":97},[87,8599,2134],{"class":171},[87,8601,8602],{"class":949},"\"\"",[87,8604,117],{"class":97},[87,8606,8607,8610,8612],{"class":89,"line":3554},[87,8608,8609],{"class":97},"        p",[87,8611,3247],{"class":171},[87,8613,117],{"class":97},[87,8615,8616],{"class":89,"line":3559},[87,8617,3142],{"class":97},[87,8619,8620],{"class":89,"line":3565},[87,8621,123],{"class":97},[1006,8623,8624],{},"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":82,"searchDepth":101,"depth":101,"links":8626},[8627,8628,8629,8630,8631,8632,8633,8634],{"id":7233,"depth":101,"text":7234},{"id":7399,"depth":101,"text":7400},{"id":7555,"depth":101,"text":7556},{"id":7633,"depth":101,"text":7634},{"id":7712,"depth":101,"text":7713},{"id":7811,"depth":101,"text":7812},{"id":8050,"depth":101,"text":8051},{"id":8228,"depth":101,"text":8229},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7222,"description":7230},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8641,"title":8642,"body":8643,"description":8650,"extension":1027,"meta":11624,"navigation":1029,"path":11625,"seo":11626,"stem":11627,"__hash__":11628},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8644,"toc":11615},[8645,8648,8651,8655,8658,8661,8672,9010,9013,9017,9020,9027,9282,9286,9289,9292,9447,9451,9454,9457,9663,9667,9670,9973,9976,9984,9988,9991,10142,10144,10155,10212,10216,10221,10878,10886,10889,10983,10986,11606,11612],[10,8646,8642],{"id":8647},"_4结构体",[19,8649,8650],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,8652,8654],{"id":8653},"_41结构体定义与使用","4.1结构体定义与使用",[19,8656,8657],{},"语法：struct 结构体名 {结构体成员列表}；",[19,8659,8660],{},"通过结构体创建变量的方式：",[26,8662,8663,8666,8669],{},[29,8664,8665],{},"struct 结构体名 变量名",[29,8667,8668],{},"struct 结构体名 变量名={成员1值，成员2值...}",[29,8670,8671],{},"定义结构体时顺便创建变量",[77,8673,8675],{"className":1091,"code":8674,"language":1093,"meta":82,"style":82},"#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",[84,8676,8677,8683,8693,8700,8705,8713,8717,8722,8726,8731,8736,8741,8748,8753,8760,8764,8771,8775,8779,8783,8787,8791,8795,8801,8805,8811,8819,8827,8831,8836,8841,8852,8857,8869,8880,8891,8896,8920,8925,8931,8958,8963,8969,8981,8993,9005],{"__ignoreMap":82},[87,8678,8679,8681],{"class":89,"line":90},[87,8680,2905],{"class":171},[87,8682,2908],{"class":949},[87,8684,8685,8687,8689,8691],{"class":89,"line":101},[87,8686,2913],{"class":171},[87,8688,2916],{"class":171},[87,8690,2919],{"class":205},[87,8692,117],{"class":97},[87,8694,8695,8697],{"class":89,"line":120},[87,8696,2905],{"class":171},[87,8698,8699],{"class":949},"\u003Cstring>\n",[87,8701,8702],{"class":89,"line":222},[87,8703,8704],{"class":199},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[87,8706,8707,8710],{"class":89,"line":234},[87,8708,8709],{"class":171},"struct",[87,8711,8712],{"class":205}," Student\n",[87,8714,8715],{"class":89,"line":256},[87,8716,2503],{"class":97},[87,8718,8719],{"class":89,"line":269},[87,8720,8721],{"class":199},"    \u002F\u002F成员列表\n",[87,8723,8724],{"class":89,"line":463},[87,8725,3355],{"emptyLinePlaceholder":1029},[87,8727,8728],{"class":89,"line":469},[87,8729,8730],{"class":199},"    \u002F\u002F姓名\n",[87,8732,8733],{"class":89,"line":2287},[87,8734,8735],{"class":97},"    string name;\n",[87,8737,8738],{"class":89,"line":2568},[87,8739,8740],{"class":199},"    \u002F\u002F年龄\n",[87,8742,8743,8745],{"class":89,"line":2573},[87,8744,2940],{"class":171},[87,8746,8747],{"class":97}," age;\n",[87,8749,8750],{"class":89,"line":2579},[87,8751,8752],{"class":199},"    \u002F\u002F分数\n",[87,8754,8755,8757],{"class":89,"line":2584},[87,8756,2940],{"class":171},[87,8758,8759],{"class":97}," score;\n",[87,8761,8762],{"class":89,"line":2598},[87,8763,4949],{"class":97},[87,8765,8766,8768],{"class":89,"line":2603},[87,8767,8709],{"class":171},[87,8769,8770],{"class":205}," School\n",[87,8772,8773],{"class":89,"line":2609},[87,8774,2503],{"class":97},[87,8776,8777],{"class":89,"line":2630},[87,8778,8721],{"class":199},[87,8780,8781],{"class":89,"line":2635},[87,8782,3355],{"emptyLinePlaceholder":1029},[87,8784,8785],{"class":89,"line":2649},[87,8786,8730],{"class":199},[87,8788,8789],{"class":89,"line":2654},[87,8790,8735],{"class":97},[87,8792,8793],{"class":89,"line":2683},[87,8794,8740],{"class":199},[87,8796,8797,8799],{"class":89,"line":2688},[87,8798,2940],{"class":171},[87,8800,8747],{"class":97},[87,8802,8803],{"class":89,"line":2705},[87,8804,8752],{"class":199},[87,8806,8807,8809],{"class":89,"line":2710},[87,8808,2940],{"class":171},[87,8810,8759],{"class":97},[87,8812,8813,8816],{"class":89,"line":2715},[87,8814,8815],{"class":97},"} s3;",[87,8817,8818],{"class":199}," \u002F\u002F创建结构体时就创建了变量\n",[87,8820,8821,8823,8825],{"class":89,"line":2720},[87,8822,1105],{"class":171},[87,8824,2928],{"class":205},[87,8826,2931],{"class":97},[87,8828,8829],{"class":89,"line":2734},[87,8830,2503],{"class":97},[87,8832,8833],{"class":89,"line":2739},[87,8834,8835],{"class":199},"    \u002F\u002F2.通过学生类型创建具体学生\n",[87,8837,8838],{"class":89,"line":3532},[87,8839,8840],{"class":199},"    \u002F\u002F2.1 struct Student s1;\n",[87,8842,8843,8846,8849],{"class":89,"line":3546},[87,8844,8845],{"class":171},"    struct",[87,8847,8848],{"class":205}," Student",[87,8850,8851],{"class":97}," s1;\n",[87,8853,8854],{"class":89,"line":3554},[87,8855,8856],{"class":199},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[87,8858,8859,8862,8864,8867],{"class":89,"line":3559},[87,8860,8861],{"class":97},"    s1.name",[87,8863,946],{"class":171},[87,8865,8866],{"class":949},"\"张三\"",[87,8868,117],{"class":97},[87,8870,8871,8874,8876,8878],{"class":89,"line":3565},[87,8872,8873],{"class":97},"    s1.age",[87,8875,946],{"class":171},[87,8877,1743],{"class":104},[87,8879,117],{"class":97},[87,8881,8882,8885,8887,8889],{"class":89,"line":3571},[87,8883,8884],{"class":97},"    s1.score",[87,8886,946],{"class":171},[87,8888,1350],{"class":104},[87,8890,117],{"class":97},[87,8892,8893],{"class":89,"line":3576},[87,8894,8895],{"class":199},"    \u002F\u002F输出结果\n",[87,8897,8899,8901,8903,8906,8908,8911,8913,8916,8918],{"class":89,"line":8898},37,[87,8900,2508],{"class":97},[87,8902,2134],{"class":171},[87,8904,8905],{"class":97},"s1.name",[87,8907,2134],{"class":171},[87,8909,8910],{"class":97},"s1.age",[87,8912,2134],{"class":171},[87,8914,8915],{"class":97},"s1.score",[87,8917,2134],{"class":171},[87,8919,2156],{"class":97},[87,8921,8923],{"class":89,"line":8922},38,[87,8924,3355],{"emptyLinePlaceholder":1029},[87,8926,8928],{"class":89,"line":8927},39,[87,8929,8930],{"class":199},"    \u002F\u002F2.2 struct Student s2={...}\n",[87,8932,8934,8936,8938,8941,8943,8945,8948,8950,8952,8954,8956],{"class":89,"line":8933},40,[87,8935,8845],{"class":171},[87,8937,8848],{"class":205},[87,8939,8940],{"class":97}," s2",[87,8942,946],{"class":171},[87,8944,1988],{"class":97},[87,8946,8947],{"class":949},"\"王五\"",[87,8949,1473],{"class":97},[87,8951,1743],{"class":104},[87,8953,1473],{"class":97},[87,8955,1350],{"class":104},[87,8957,4949],{"class":97},[87,8959,8961],{"class":89,"line":8960},41,[87,8962,3355],{"emptyLinePlaceholder":1029},[87,8964,8966],{"class":89,"line":8965},42,[87,8967,8968],{"class":199},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[87,8970,8972,8975,8977,8979],{"class":89,"line":8971},43,[87,8973,8974],{"class":97},"    s3.name",[87,8976,946],{"class":171},[87,8978,4632],{"class":949},[87,8980,117],{"class":97},[87,8982,8984,8987,8989,8991],{"class":89,"line":8983},44,[87,8985,8986],{"class":97},"    s3.age",[87,8988,946],{"class":171},[87,8990,1743],{"class":104},[87,8992,117],{"class":97},[87,8994,8996,8999,9001,9003],{"class":89,"line":8995},45,[87,8997,8998],{"class":97},"    s3.score",[87,9000,946],{"class":171},[87,9002,1792],{"class":104},[87,9004,117],{"class":97},[87,9006,9008],{"class":89,"line":9007},46,[87,9009,123],{"class":97},[19,9011,9012],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9014,9016],{"id":9015},"_42结构体数组","4.2结构体数组",[19,9018,9019],{},"将自定义的结构体放入到数组中方便维护",[19,9021,9022,9023,9026],{},"语法：struct 结构体名 数组名",[87,9024,9025],{},"元素个数","={ {}，{},...{} };",[77,9028,9030],{"className":1091,"code":9029,"language":1093,"meta":82,"style":82},"#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",[84,9031,9032,9038,9048,9054,9059,9065,9069,9073,9079,9085,9089,9093,9101,9105,9110,9125,9129,9145,9161,9165,9170,9186,9201,9216,9221,9247,9251,9274,9278],{"__ignoreMap":82},[87,9033,9034,9036],{"class":89,"line":90},[87,9035,2905],{"class":171},[87,9037,2908],{"class":949},[87,9039,9040,9042,9044,9046],{"class":89,"line":101},[87,9041,2913],{"class":171},[87,9043,2916],{"class":171},[87,9045,2919],{"class":205},[87,9047,117],{"class":97},[87,9049,9050,9052],{"class":89,"line":120},[87,9051,2905],{"class":171},[87,9053,8699],{"class":949},[87,9055,9056],{"class":89,"line":222},[87,9057,9058],{"class":199},"\u002F\u002F1.定义结构体\n",[87,9060,9061,9063],{"class":89,"line":234},[87,9062,8709],{"class":171},[87,9064,8712],{"class":205},[87,9066,9067],{"class":89,"line":256},[87,9068,2503],{"class":97},[87,9070,9071],{"class":89,"line":269},[87,9072,8735],{"class":97},[87,9074,9075,9077],{"class":89,"line":463},[87,9076,2940],{"class":171},[87,9078,8747],{"class":97},[87,9080,9081,9083],{"class":89,"line":469},[87,9082,2940],{"class":171},[87,9084,8759],{"class":97},[87,9086,9087],{"class":89,"line":2287},[87,9088,3355],{"emptyLinePlaceholder":1029},[87,9090,9091],{"class":89,"line":2568},[87,9092,4949],{"class":97},[87,9094,9095,9097,9099],{"class":89,"line":2573},[87,9096,1105],{"class":171},[87,9098,2928],{"class":205},[87,9100,2931],{"class":97},[87,9102,9103],{"class":89,"line":2579},[87,9104,2503],{"class":97},[87,9106,9107],{"class":89,"line":2584},[87,9108,9109],{"class":199},"    \u002F\u002F2.创建结构体数组\n",[87,9111,9112,9114,9116,9119,9121,9123],{"class":89,"line":2598},[87,9113,8845],{"class":171},[87,9115,8848],{"class":205},[87,9117,9118],{"class":97}," stuArray[",[87,9120,1176],{"class":104},[87,9122,2031],{"class":97},[87,9124,5861],{"class":171},[87,9126,9127],{"class":89,"line":2603},[87,9128,2985],{"class":97},[87,9130,9131,9133,9135,9137,9139,9141,9143],{"class":89,"line":2609},[87,9132,5870],{"class":97},[87,9134,8866],{"class":949},[87,9136,1473],{"class":97},[87,9138,1743],{"class":104},[87,9140,1473],{"class":97},[87,9142,536],{"class":104},[87,9144,5883],{"class":97},[87,9146,9147,9149,9151,9153,9155,9157,9159],{"class":89,"line":2630},[87,9148,5870],{"class":97},[87,9150,4632],{"class":949},[87,9152,1473],{"class":97},[87,9154,1668],{"class":104},[87,9156,1473],{"class":97},[87,9158,1668],{"class":104},[87,9160,123],{"class":97},[87,9162,9163],{"class":89,"line":2635},[87,9164,3142],{"class":97},[87,9166,9167],{"class":89,"line":2649},[87,9168,9169],{"class":199},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[87,9171,9172,9175,9177,9180,9182,9184],{"class":89,"line":2654},[87,9173,9174],{"class":97},"    stuArray[",[87,9176,1313],{"class":104},[87,9178,9179],{"class":97},"].name",[87,9181,946],{"class":171},[87,9183,4655],{"class":949},[87,9185,117],{"class":97},[87,9187,9188,9190,9192,9195,9197,9199],{"class":89,"line":2683},[87,9189,9174],{"class":97},[87,9191,1313],{"class":104},[87,9193,9194],{"class":97},"].age",[87,9196,946],{"class":171},[87,9198,1176],{"class":104},[87,9200,117],{"class":97},[87,9202,9203,9205,9207,9210,9212,9214],{"class":89,"line":2688},[87,9204,9174],{"class":97},[87,9206,1313],{"class":104},[87,9208,9209],{"class":97},"].score",[87,9211,946],{"class":171},[87,9213,1176],{"class":104},[87,9215,117],{"class":97},[87,9217,9218],{"class":89,"line":2705},[87,9219,9220],{"class":199},"    \u002F\u002F4.遍历结构体数组\n",[87,9222,9223,9225,9227,9229,9231,9233,9235,9237,9239,9241,9243,9245],{"class":89,"line":2710},[87,9224,4155],{"class":171},[87,9226,2614],{"class":97},[87,9228,1105],{"class":171},[87,9230,3986],{"class":97},[87,9232,946],{"class":171},[87,9234,111],{"class":104},[87,9236,3993],{"class":97},[87,9238,938],{"class":171},[87,9240,1176],{"class":104},[87,9242,3993],{"class":97},[87,9244,3247],{"class":171},[87,9246,1108],{"class":97},[87,9248,9249],{"class":89,"line":2715},[87,9250,2985],{"class":97},[87,9252,9253,9255,9257,9260,9262,9265,9267,9270,9272],{"class":89,"line":2720},[87,9254,4405],{"class":97},[87,9256,2134],{"class":171},[87,9258,9259],{"class":97},"stuArray[i].name",[87,9261,2134],{"class":171},[87,9263,9264],{"class":97},"stuArray[i].age",[87,9266,2134],{"class":171},[87,9268,9269],{"class":97},"stuArray[i].score",[87,9271,2134],{"class":171},[87,9273,2156],{"class":97},[87,9275,9276],{"class":89,"line":2734},[87,9277,3142],{"class":97},[87,9279,9280],{"class":89,"line":2739},[87,9281,123],{"class":97},[14,9283,9285],{"id":9284},"_43结构体指针","4.3结构体指针",[19,9287,9288],{},"作用：通过指针访问结构体中的成员",[19,9290,9291],{},"利用操作符->可以通过结构体指针访问结构体属性",[77,9293,9295],{"className":1091,"code":9294,"language":1093,"meta":82,"style":82},"#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",[84,9296,9297,9303,9313,9319,9323,9329,9333,9337,9343,9349,9353,9361,9365,9370,9395,9400,9415,9420,9443],{"__ignoreMap":82},[87,9298,9299,9301],{"class":89,"line":90},[87,9300,2905],{"class":171},[87,9302,2908],{"class":949},[87,9304,9305,9307,9309,9311],{"class":89,"line":101},[87,9306,2913],{"class":171},[87,9308,2916],{"class":171},[87,9310,2919],{"class":205},[87,9312,117],{"class":97},[87,9314,9315,9317],{"class":89,"line":120},[87,9316,2905],{"class":171},[87,9318,8699],{"class":949},[87,9320,9321],{"class":89,"line":222},[87,9322,9058],{"class":199},[87,9324,9325,9327],{"class":89,"line":234},[87,9326,8709],{"class":171},[87,9328,8712],{"class":205},[87,9330,9331],{"class":89,"line":256},[87,9332,2503],{"class":97},[87,9334,9335],{"class":89,"line":269},[87,9336,8735],{"class":97},[87,9338,9339,9341],{"class":89,"line":463},[87,9340,2940],{"class":171},[87,9342,8747],{"class":97},[87,9344,9345,9347],{"class":89,"line":469},[87,9346,2940],{"class":171},[87,9348,8759],{"class":97},[87,9350,9351],{"class":89,"line":2287},[87,9352,4949],{"class":97},[87,9354,9355,9357,9359],{"class":89,"line":2568},[87,9356,1105],{"class":171},[87,9358,2928],{"class":205},[87,9360,2931],{"class":97},[87,9362,9363],{"class":89,"line":2573},[87,9364,2503],{"class":97},[87,9366,9367],{"class":89,"line":2579},[87,9368,9369],{"class":199},"    \u002F\u002F创建学生结构体变量\n",[87,9371,9372,9374,9376,9379,9381,9383,9385,9387,9389,9391,9393],{"class":89,"line":2584},[87,9373,8845],{"class":171},[87,9375,8848],{"class":205},[87,9377,9378],{"class":97}," s",[87,9380,946],{"class":171},[87,9382,1988],{"class":97},[87,9384,8866],{"class":949},[87,9386,1473],{"class":97},[87,9388,1743],{"class":104},[87,9390,1473],{"class":97},[87,9392,2678],{"class":104},[87,9394,4949],{"class":97},[87,9396,9397],{"class":89,"line":2598},[87,9398,9399],{"class":199},"    \u002F\u002F通过指针指向结构体变量\n",[87,9401,9402,9404,9406,9408,9410,9412],{"class":89,"line":2603},[87,9403,8845],{"class":171},[87,9405,8848],{"class":205},[87,9407,7468],{"class":171},[87,9409,19],{"class":97},[87,9411,7289],{"class":171},[87,9413,9414],{"class":97},"s\n",[87,9416,9417],{"class":89,"line":2609},[87,9418,9419],{"class":199},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[87,9421,9422,9424,9426,9429,9431,9434,9436,9439,9441],{"class":89,"line":2630},[87,9423,2508],{"class":97},[87,9425,2134],{"class":171},[87,9427,9428],{"class":97},"p->name",[87,9430,2134],{"class":171},[87,9432,9433],{"class":97},"p->age",[87,9435,2134],{"class":171},[87,9437,9438],{"class":97},"p->score",[87,9440,2134],{"class":171},[87,9442,2156],{"class":97},[87,9444,9445],{"class":89,"line":2635},[87,9446,123],{"class":97},[14,9448,9450],{"id":9449},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,9452,9453],{},"作用：结构体中的成员可以是另一个结构体",[19,9455,9456],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[77,9458,9460],{"className":1091,"code":9459,"language":1093,"meta":82,"style":82},"#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",[84,9461,9462,9468,9478,9484,9489,9497,9501,9505,9511,9517,9521,9526,9533,9537,9544,9548,9554,9559,9563,9571,9575,9580,9585,9590,9601,9613,9624,9637,9648,9659],{"__ignoreMap":82},[87,9463,9464,9466],{"class":89,"line":90},[87,9465,2905],{"class":171},[87,9467,2908],{"class":949},[87,9469,9470,9472,9474,9476],{"class":89,"line":101},[87,9471,2913],{"class":171},[87,9473,2916],{"class":171},[87,9475,2919],{"class":205},[87,9477,117],{"class":97},[87,9479,9480,9482],{"class":89,"line":120},[87,9481,2905],{"class":171},[87,9483,8699],{"class":949},[87,9485,9486],{"class":89,"line":222},[87,9487,9488],{"class":199},"\u002F\u002F定义学生结构体\n",[87,9490,9491,9493,9495],{"class":89,"line":234},[87,9492,8709],{"class":171},[87,9494,8848],{"class":205},[87,9496,3629],{"class":97},[87,9498,9499],{"class":89,"line":256},[87,9500,2503],{"class":97},[87,9502,9503],{"class":89,"line":269},[87,9504,8735],{"class":97},[87,9506,9507,9509],{"class":89,"line":463},[87,9508,2940],{"class":171},[87,9510,8747],{"class":97},[87,9512,9513,9515],{"class":89,"line":469},[87,9514,2940],{"class":171},[87,9516,8759],{"class":97},[87,9518,9519],{"class":89,"line":2287},[87,9520,123],{"class":97},[87,9522,9523],{"class":89,"line":2568},[87,9524,9525],{"class":199},"\u002F\u002F定义老师结构体\n",[87,9527,9528,9530],{"class":89,"line":2573},[87,9529,8709],{"class":171},[87,9531,9532],{"class":205}," Teacher\n",[87,9534,9535],{"class":89,"line":2579},[87,9536,2503],{"class":97},[87,9538,9539,9541],{"class":89,"line":2584},[87,9540,2940],{"class":171},[87,9542,9543],{"class":97}," id;\n",[87,9545,9546],{"class":89,"line":2598},[87,9547,8735],{"class":97},[87,9549,9550,9552],{"class":89,"line":2603},[87,9551,2940],{"class":171},[87,9553,8747],{"class":97},[87,9555,9556],{"class":89,"line":2609},[87,9557,9558],{"class":97},"    Student stu;\n",[87,9560,9561],{"class":89,"line":2630},[87,9562,123],{"class":97},[87,9564,9565,9567,9569],{"class":89,"line":2635},[87,9566,1105],{"class":171},[87,9568,2928],{"class":205},[87,9570,6928],{"class":97},[87,9572,9573],{"class":89,"line":2649},[87,9574,2503],{"class":97},[87,9576,9577],{"class":89,"line":2654},[87,9578,9579],{"class":199},"    \u002F\u002F结构体嵌套结构体\n",[87,9581,9582],{"class":89,"line":2683},[87,9583,9584],{"class":199},"    \u002F\u002F创建老师\n",[87,9586,9587],{"class":89,"line":2688},[87,9588,9589],{"class":97},"    Teacher t;\n",[87,9591,9592,9595,9597,9599],{"class":89,"line":2705},[87,9593,9594],{"class":97},"    t.id",[87,9596,946],{"class":171},[87,9598,536],{"class":104},[87,9600,117],{"class":97},[87,9602,9603,9606,9608,9611],{"class":89,"line":2710},[87,9604,9605],{"class":97},"    t.name",[87,9607,946],{"class":171},[87,9609,9610],{"class":949},"\"老王\"",[87,9612,117],{"class":97},[87,9614,9615,9618,9620,9622],{"class":89,"line":2715},[87,9616,9617],{"class":97},"    t.age",[87,9619,946],{"class":171},[87,9621,1743],{"class":104},[87,9623,117],{"class":97},[87,9625,9626,9629,9631,9634],{"class":89,"line":2720},[87,9627,9628],{"class":97},"    t.stu.name",[87,9630,946],{"class":171},[87,9632,9633],{"class":949},"\"小王\"",[87,9635,9636],{"class":97},"；\n",[87,9638,9639,9642,9644,9646],{"class":89,"line":2734},[87,9640,9641],{"class":97},"    t.stu.age",[87,9643,946],{"class":171},[87,9645,1792],{"class":104},[87,9647,117],{"class":97},[87,9649,9650,9653,9655,9657],{"class":89,"line":2739},[87,9651,9652],{"class":97},"    t.stu.score",[87,9654,946],{"class":171},[87,9656,1439],{"class":104},[87,9658,117],{"class":97},[87,9660,9661],{"class":89,"line":3532},[87,9662,123],{"class":97},[14,9664,9666],{"id":9665},"_45结构体做函数参数","4.5结构体做函数参数",[19,9668,9669],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[77,9671,9673],{"className":1091,"code":9672,"language":1093,"meta":82,"style":82},"#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",[84,9674,9675,9681,9691,9697,9703,9707,9711,9717,9723,9727,9732,9737,9754,9758,9791,9795,9800,9819,9823,9854,9858,9866,9870,9879,9891,9903,9915,9928,9936,9949,9961,9969],{"__ignoreMap":82},[87,9676,9677,9679],{"class":89,"line":90},[87,9678,2905],{"class":171},[87,9680,2908],{"class":949},[87,9682,9683,9685,9687,9689],{"class":89,"line":101},[87,9684,2913],{"class":171},[87,9686,2916],{"class":171},[87,9688,2919],{"class":205},[87,9690,117],{"class":97},[87,9692,9693,9695],{"class":89,"line":120},[87,9694,2905],{"class":171},[87,9696,8699],{"class":949},[87,9698,9699,9701],{"class":89,"line":222},[87,9700,8709],{"class":171},[87,9702,8712],{"class":205},[87,9704,9705],{"class":89,"line":234},[87,9706,2503],{"class":97},[87,9708,9709],{"class":89,"line":256},[87,9710,8735],{"class":97},[87,9712,9713,9715],{"class":89,"line":269},[87,9714,2940],{"class":171},[87,9716,8747],{"class":97},[87,9718,9719,9721],{"class":89,"line":463},[87,9720,2940],{"class":171},[87,9722,8759],{"class":97},[87,9724,9725],{"class":89,"line":469},[87,9726,4949],{"class":97},[87,9728,9729],{"class":89,"line":2287},[87,9730,9731],{"class":199},"\u002F\u002F打印学生信息的函数\n",[87,9733,9734],{"class":89,"line":2568},[87,9735,9736],{"class":199},"\u002F\u002F值传递\n",[87,9738,9739,9741,9744,9746,9748,9750,9752],{"class":89,"line":2573},[87,9740,6314],{"class":171},[87,9742,9743],{"class":205}," printStudent1",[87,9745,165],{"class":97},[87,9747,8709],{"class":171},[87,9749,8848],{"class":205},[87,9751,9378],{"class":492},[87,9753,1108],{"class":97},[87,9755,9756],{"class":89,"line":2579},[87,9757,2503],{"class":97},[87,9759,9760,9762,9764,9767,9769,9772,9774,9777,9779,9781,9783,9786,9788],{"class":89,"line":2584},[87,9761,7479],{"class":97},[87,9763,2134],{"class":171},[87,9765,9766],{"class":97}," s.name ",[87,9768,2134],{"class":171},[87,9770,9771],{"class":949}," \" \"",[87,9773,2402],{"class":171},[87,9775,9776],{"class":97}," s.age ",[87,9778,2134],{"class":171},[87,9780,9771],{"class":949},[87,9782,2402],{"class":171},[87,9784,9785],{"class":97}," s.score ",[87,9787,2134],{"class":171},[87,9789,9790],{"class":97}," endl;\n",[87,9792,9793],{"class":89,"line":2598},[87,9794,123],{"class":97},[87,9796,9797],{"class":89,"line":2603},[87,9798,9799],{"class":199},"\u002F\u002F地址传递\n",[87,9801,9802,9804,9807,9809,9811,9813,9815,9817],{"class":89,"line":2609},[87,9803,6314],{"class":171},[87,9805,9806],{"class":205}," printStudent2",[87,9808,165],{"class":97},[87,9810,8709],{"class":171},[87,9812,8848],{"class":205},[87,9814,7468],{"class":171},[87,9816,571],{"class":492},[87,9818,1108],{"class":97},[87,9820,9821],{"class":89,"line":2630},[87,9822,2503],{"class":97},[87,9824,9825,9827,9829,9832,9834,9836,9838,9841,9843,9845,9847,9850,9852],{"class":89,"line":2635},[87,9826,7479],{"class":97},[87,9828,2134],{"class":171},[87,9830,9831],{"class":97}," s->name ",[87,9833,2134],{"class":171},[87,9835,9771],{"class":949},[87,9837,2402],{"class":171},[87,9839,9840],{"class":97}," s->age ",[87,9842,2134],{"class":171},[87,9844,9771],{"class":949},[87,9846,2402],{"class":171},[87,9848,9849],{"class":97}," s->score ",[87,9851,2134],{"class":171},[87,9853,9790],{"class":97},[87,9855,9856],{"class":89,"line":2649},[87,9857,123],{"class":97},[87,9859,9860,9862,9864],{"class":89,"line":2654},[87,9861,1105],{"class":171},[87,9863,2928],{"class":205},[87,9865,2931],{"class":97},[87,9867,9868],{"class":89,"line":2683},[87,9869,2503],{"class":97},[87,9871,9872,9874,9876],{"class":89,"line":2688},[87,9873,8845],{"class":171},[87,9875,8848],{"class":205},[87,9877,9878],{"class":97}," s;\n",[87,9880,9881,9884,9886,9889],{"class":89,"line":2705},[87,9882,9883],{"class":97},"    s.name ",[87,9885,946],{"class":171},[87,9887,9888],{"class":949}," \"张三\"",[87,9890,117],{"class":97},[87,9892,9893,9896,9898,9901],{"class":89,"line":2710},[87,9894,9895],{"class":97},"    s.age ",[87,9897,946],{"class":171},[87,9899,9900],{"class":104}," 20",[87,9902,117],{"class":97},[87,9904,9905,9908,9910,9913],{"class":89,"line":2715},[87,9906,9907],{"class":97},"    s.score ",[87,9909,946],{"class":171},[87,9911,9912],{"class":104}," 85",[87,9914,117],{"class":97},[87,9916,9917,9919,9921,9924,9926],{"class":89,"line":2720},[87,9918,2508],{"class":97},[87,9920,2134],{"class":171},[87,9922,9923],{"class":949},"\"值传递:\"",[87,9925,2134],{"class":171},[87,9927,2156],{"class":97},[87,9929,9930,9933],{"class":89,"line":2734},[87,9931,9932],{"class":205},"    printStudent1",[87,9934,9935],{"class":97},"(s);\n",[87,9937,9938,9940,9942,9945,9947],{"class":89,"line":2739},[87,9939,2508],{"class":97},[87,9941,2134],{"class":171},[87,9943,9944],{"class":949},"\"地址传递:\"",[87,9946,2134],{"class":171},[87,9948,2156],{"class":97},[87,9950,9951,9954,9956,9958],{"class":89,"line":3532},[87,9952,9953],{"class":205},"    printStudent2",[87,9955,165],{"class":97},[87,9957,1448],{"class":171},[87,9959,9960],{"class":97},"s); \n",[87,9962,9963,9965,9967],{"class":89,"line":3546},[87,9964,5044],{"class":171},[87,9966,577],{"class":104},[87,9968,117],{"class":97},[87,9970,9971],{"class":89,"line":3554},[87,9972,123],{"class":97},[19,9974,9975],{},"注意：",[26,9977,9978,9981],{},[29,9979,9980],{},"1.先定义结构体，不要在函数中写结构体的定义",[29,9982,9983],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9985,9987],{"id":9986},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9989,9990],{},"用const防止误操作",[77,9992,9994],{"className":1091,"code":9993,"language":1093,"meta":82,"style":82},"#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",[84,9995,9996,10002,10012,10018,10023,10027,10031,10037,10043,10047,10063,10067,10090,10094,10102,10106,10127,10134,10138],{"__ignoreMap":82},[87,9997,9998,10000],{"class":89,"line":90},[87,9999,2905],{"class":171},[87,10001,2908],{"class":949},[87,10003,10004,10006,10008,10010],{"class":89,"line":101},[87,10005,2913],{"class":171},[87,10007,2916],{"class":171},[87,10009,2919],{"class":205},[87,10011,117],{"class":97},[87,10013,10014,10016],{"class":89,"line":120},[87,10015,2905],{"class":171},[87,10017,8699],{"class":949},[87,10019,10020],{"class":89,"line":222},[87,10021,10022],{"class":97},"sctuct Student\n",[87,10024,10025],{"class":89,"line":234},[87,10026,2503],{"class":97},[87,10028,10029],{"class":89,"line":256},[87,10030,8735],{"class":97},[87,10032,10033,10035],{"class":89,"line":269},[87,10034,2940],{"class":171},[87,10036,8747],{"class":97},[87,10038,10039,10041],{"class":89,"line":463},[87,10040,2940],{"class":171},[87,10042,8759],{"class":97},[87,10044,10045],{"class":89,"line":469},[87,10046,4949],{"class":97},[87,10048,10049,10051,10054,10056,10059,10061],{"class":89,"line":2287},[87,10050,6314],{"class":171},[87,10052,10053],{"class":205}," printStudents",[87,10055,165],{"class":97},[87,10057,10058],{"class":205},"student",[87,10060,9378],{"class":492},[87,10062,1108],{"class":97},[87,10064,10065],{"class":89,"line":2568},[87,10066,2503],{"class":97},[87,10068,10069,10071,10073,10076,10078,10081,10083,10086,10088],{"class":89,"line":2573},[87,10070,2508],{"class":97},[87,10072,2134],{"class":171},[87,10074,10075],{"class":97},"s.name",[87,10077,2134],{"class":171},[87,10079,10080],{"class":97},"s.age",[87,10082,2134],{"class":171},[87,10084,10085],{"class":97},"s.score",[87,10087,2134],{"class":171},[87,10089,2156],{"class":97},[87,10091,10092],{"class":89,"line":2579},[87,10093,123],{"class":97},[87,10095,10096,10098,10100],{"class":89,"line":2584},[87,10097,1105],{"class":171},[87,10099,2928],{"class":205},[87,10101,6928],{"class":97},[87,10103,10104],{"class":89,"line":2598},[87,10105,2503],{"class":97},[87,10107,10108,10111,10113,10115,10117,10119,10121,10123,10125],{"class":89,"line":2603},[87,10109,10110],{"class":97},"    Student s",[87,10112,946],{"class":171},[87,10114,1988],{"class":97},[87,10116,8866],{"class":949},[87,10118,1473],{"class":97},[87,10120,1743],{"class":104},[87,10122,1473],{"class":97},[87,10124,1743],{"class":104},[87,10126,4949],{"class":97},[87,10128,10129,10132],{"class":89,"line":2609},[87,10130,10131],{"class":205},"    printStudent",[87,10133,9935],{"class":97},[87,10135,10136],{"class":89,"line":2630},[87,10137,3355],{"emptyLinePlaceholder":1029},[87,10139,10140],{"class":89,"line":2635},[87,10141,123],{"class":97},[19,10143,9975],{},[26,10145,10146,10149,10152],{},[29,10147,10148],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[29,10150,10151],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[29,10153,10154],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[77,10156,10158],{"className":1091,"code":10157,"language":1093,"meta":82,"style":82},"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",[84,10159,10160,10179,10183,10188,10208],{"__ignoreMap":82},[87,10161,10162,10164,10166,10168,10170,10173,10175,10177],{"class":89,"line":90},[87,10163,6314],{"class":171},[87,10165,10053],{"class":205},[87,10167,165],{"class":97},[87,10169,7742],{"class":171},[87,10171,10172],{"class":205}," student",[87,10174,7468],{"class":171},[87,10176,571],{"class":492},[87,10178,1108],{"class":97},[87,10180,10181],{"class":89,"line":101},[87,10182,2503],{"class":97},[87,10184,10185],{"class":89,"line":120},[87,10186,10187],{"class":199},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[87,10189,10190,10192,10194,10196,10198,10200,10202,10204,10206],{"class":89,"line":222},[87,10191,2508],{"class":97},[87,10193,2134],{"class":171},[87,10195,10075],{"class":97},[87,10197,2134],{"class":171},[87,10199,10080],{"class":97},[87,10201,2134],{"class":171},[87,10203,10085],{"class":97},[87,10205,2134],{"class":171},[87,10207,2156],{"class":97},[87,10209,10210],{"class":89,"line":234},[87,10211,123],{"class":97},[14,10213,10215],{"id":10214},"_47案例","4.7案例",[1055,10217,10218],{},[29,10219,10220],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[77,10222,10224],{"className":1091,"code":10223,"language":1093,"meta":82,"style":82},"#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",[84,10225,10226,10232,10242,10248,10255,10259,10265,10269,10274,10280,10286,10290,10294,10300,10304,10309,10314,10327,10331,10336,10362,10366,10378,10405,10409,10421,10431,10435,10440,10469,10473,10485,10494,10521,10532,10542,10546,10550,10554,10559,10583,10587,10611,10615,10634,10660,10664,10689,10712,10736,10741,10746,10751,10760,10765,10771,10792,10798,10812,10818,10845,10854,10860,10868,10873],{"__ignoreMap":82},[87,10227,10228,10230],{"class":89,"line":90},[87,10229,2905],{"class":171},[87,10231,2908],{"class":949},[87,10233,10234,10236,10238,10240],{"class":89,"line":101},[87,10235,2913],{"class":171},[87,10237,2916],{"class":171},[87,10239,2919],{"class":205},[87,10241,117],{"class":97},[87,10243,10244,10246],{"class":89,"line":120},[87,10245,2905],{"class":171},[87,10247,8699],{"class":949},[87,10249,10250,10252],{"class":89,"line":222},[87,10251,2905],{"class":171},[87,10253,10254],{"class":949},"\u003Cctime>\n",[87,10256,10257],{"class":89,"line":234},[87,10258,9488],{"class":199},[87,10260,10261,10263],{"class":89,"line":256},[87,10262,8709],{"class":171},[87,10264,8712],{"class":205},[87,10266,10267],{"class":89,"line":269},[87,10268,2503],{"class":97},[87,10270,10271],{"class":89,"line":463},[87,10272,10273],{"class":97},"    string sName;\n",[87,10275,10276,10278],{"class":89,"line":469},[87,10277,2940],{"class":171},[87,10279,8747],{"class":97},[87,10281,10282,10284],{"class":89,"line":2287},[87,10283,2940],{"class":171},[87,10285,8759],{"class":97},[87,10287,10288],{"class":89,"line":2568},[87,10289,4949],{"class":97},[87,10291,10292],{"class":89,"line":2573},[87,10293,9525],{"class":199},[87,10295,10296,10298],{"class":89,"line":2579},[87,10297,8709],{"class":171},[87,10299,9532],{"class":205},[87,10301,10302],{"class":89,"line":2584},[87,10303,2503],{"class":97},[87,10305,10306],{"class":89,"line":2598},[87,10307,10308],{"class":97},"    string tName;\n",[87,10310,10311],{"class":89,"line":2603},[87,10312,10313],{"class":199},"    \u002F\u002F学生数组\n",[87,10315,10316,10318,10320,10323,10325],{"class":89,"line":2609},[87,10317,8845],{"class":171},[87,10319,8848],{"class":205},[87,10321,10322],{"class":97}," sArray[",[87,10324,1414],{"class":104},[87,10326,5643],{"class":97},[87,10328,10329],{"class":89,"line":2630},[87,10330,4949],{"class":97},[87,10332,10333],{"class":89,"line":2635},[87,10334,10335],{"class":199},"\u002F\u002F给老师和学生赋值的函数\n",[87,10337,10338,10340,10343,10345,10347,10350,10353,10356,10358,10360],{"class":89,"line":2649},[87,10339,6314],{"class":171},[87,10341,10342],{"class":205}," allocateSpace",[87,10344,165],{"class":97},[87,10346,8709],{"class":171},[87,10348,10349],{"class":205}," Teacher",[87,10351,10352],{"class":492}," tArray",[87,10354,10355],{"class":97},"[],",[87,10357,1105],{"class":171},[87,10359,8281],{"class":492},[87,10361,1108],{"class":97},[87,10363,10364],{"class":89,"line":2654},[87,10365,2503],{"class":97},[87,10367,10368,10371,10373,10376],{"class":89,"line":2683},[87,10369,10370],{"class":97},"    string nameSeed",[87,10372,946],{"class":171},[87,10374,10375],{"class":949},"\"ABCDE\"",[87,10377,117],{"class":97},[87,10379,10380,10382,10384,10386,10389,10391,10393,10396,10398,10401,10403],{"class":89,"line":2688},[87,10381,4155],{"class":171},[87,10383,2614],{"class":97},[87,10385,1105],{"class":171},[87,10387,10388],{"class":97}," i ",[87,10390,946],{"class":171},[87,10392,577],{"class":104},[87,10394,10395],{"class":97},"; i ",[87,10397,938],{"class":171},[87,10399,10400],{"class":97}," len; i",[87,10402,3247],{"class":171},[87,10404,1108],{"class":97},[87,10406,10407],{"class":89,"line":2705},[87,10408,2985],{"class":97},[87,10410,10411,10414,10416,10419],{"class":89,"line":2710},[87,10412,10413],{"class":97},"        tArray[i].tName ",[87,10415,946],{"class":171},[87,10417,10418],{"class":949}," \"Teacher_\"",[87,10420,117],{"class":97},[87,10422,10423,10425,10428],{"class":89,"line":2715},[87,10424,10413],{"class":97},[87,10426,10427],{"class":171},"+=",[87,10429,10430],{"class":97},"nameSeed[i];\n",[87,10432,10433],{"class":89,"line":2720},[87,10434,3355],{"emptyLinePlaceholder":1029},[87,10436,10437],{"class":89,"line":2734},[87,10438,10439],{"class":199},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[87,10441,10442,10444,10446,10448,10451,10453,10455,10458,10460,10462,10465,10467],{"class":89,"line":2739},[87,10443,4357],{"class":171},[87,10445,2614],{"class":97},[87,10447,1105],{"class":171},[87,10449,10450],{"class":97}," j ",[87,10452,946],{"class":171},[87,10454,577],{"class":104},[87,10456,10457],{"class":97},"; j ",[87,10459,938],{"class":171},[87,10461,3103],{"class":104},[87,10463,10464],{"class":97},"; j",[87,10466,3247],{"class":171},[87,10468,1108],{"class":97},[87,10470,10471],{"class":89,"line":3532},[87,10472,3465],{"class":97},[87,10474,10475,10478,10480,10483],{"class":89,"line":3546},[87,10476,10477],{"class":97},"            tArray[i].sArray[j].sName ",[87,10479,946],{"class":171},[87,10481,10482],{"class":949}," \"Student_\"",[87,10484,117],{"class":97},[87,10486,10487,10489,10491],{"class":89,"line":3554},[87,10488,10477],{"class":97},[87,10490,10427],{"class":171},[87,10492,10493],{"class":97}," nameSeed[j];\n",[87,10495,10496,10499,10502,10504,10506,10508,10510,10512,10514,10516,10518],{"class":89,"line":3559},[87,10497,10498],{"class":171},"            int",[87,10500,10501],{"class":97}," random",[87,10503,946],{"class":171},[87,10505,3379],{"class":205},[87,10507,3382],{"class":97},[87,10509,1423],{"class":171},[87,10511,1999],{"class":104},[87,10513,1575],{"class":171},[87,10515,1496],{"class":104},[87,10517,1155],{"class":97},[87,10519,10520],{"class":199},"\u002F\u002F40~99\n",[87,10522,10523,10526,10528,10530],{"class":89,"line":3565},[87,10524,10525],{"class":97},"            tArray[i].sArray[j].age ",[87,10527,946],{"class":171},[87,10529,9900],{"class":104},[87,10531,117],{"class":97},[87,10533,10534,10537,10539],{"class":89,"line":3571},[87,10535,10536],{"class":97},"            tArray[i].sArray[j].score ",[87,10538,946],{"class":171},[87,10540,10541],{"class":97}," random;\n",[87,10543,10544],{"class":89,"line":3576},[87,10545,3484],{"class":97},[87,10547,10548],{"class":89,"line":8898},[87,10549,3142],{"class":97},[87,10551,10552],{"class":89,"line":8922},[87,10553,123],{"class":97},[87,10555,10556],{"class":89,"line":8927},[87,10557,10558],{"class":199},"\u002F\u002F打印所有信息的函数\n",[87,10560,10561,10563,10566,10568,10570,10572,10574,10577,10579,10581],{"class":89,"line":8933},[87,10562,6314],{"class":171},[87,10564,10565],{"class":205}," printInfo",[87,10567,165],{"class":97},[87,10569,8709],{"class":171},[87,10571,10349],{"class":205},[87,10573,10352],{"class":492},[87,10575,10576],{"class":97},"[], ",[87,10578,1105],{"class":171},[87,10580,8281],{"class":492},[87,10582,1108],{"class":97},[87,10584,10585],{"class":89,"line":8960},[87,10586,2503],{"class":97},[87,10588,10589,10591,10593,10595,10597,10599,10601,10603,10605,10607,10609],{"class":89,"line":8965},[87,10590,4155],{"class":171},[87,10592,2614],{"class":97},[87,10594,1105],{"class":171},[87,10596,10388],{"class":97},[87,10598,946],{"class":171},[87,10600,577],{"class":104},[87,10602,10395],{"class":97},[87,10604,938],{"class":171},[87,10606,10400],{"class":97},[87,10608,3247],{"class":171},[87,10610,1108],{"class":97},[87,10612,10613],{"class":89,"line":8971},[87,10614,2985],{"class":97},[87,10616,10617,10620,10622,10625,10627,10630,10632],{"class":89,"line":8983},[87,10618,10619],{"class":97},"        cout ",[87,10621,2134],{"class":171},[87,10623,10624],{"class":949}," \"Teacher: \"",[87,10626,2402],{"class":171},[87,10628,10629],{"class":97}," tArray[i].tName ",[87,10631,2134],{"class":171},[87,10633,9790],{"class":97},[87,10635,10636,10638,10640,10642,10644,10646,10648,10650,10652,10654,10656,10658],{"class":89,"line":8995},[87,10637,4357],{"class":171},[87,10639,2614],{"class":97},[87,10641,1105],{"class":171},[87,10643,10450],{"class":97},[87,10645,946],{"class":171},[87,10647,577],{"class":104},[87,10649,10457],{"class":97},[87,10651,938],{"class":171},[87,10653,3103],{"class":104},[87,10655,10464],{"class":97},[87,10657,3247],{"class":171},[87,10659,1108],{"class":97},[87,10661,10662],{"class":89,"line":9007},[87,10663,3465],{"class":97},[87,10665,10667,10670,10672,10675,10677,10680,10682,10685,10687],{"class":89,"line":10666},47,[87,10668,10669],{"class":97},"            cout ",[87,10671,2134],{"class":171},[87,10673,10674],{"class":949}," \"",[87,10676,2191],{"class":104},[87,10678,10679],{"class":949},"Student: \"",[87,10681,2402],{"class":171},[87,10683,10684],{"class":97}," tArray[i].sArray[j].sName",[87,10686,2134],{"class":171},[87,10688,2156],{"class":97},[87,10690,10692,10694,10696,10698,10700,10703,10705,10708,10710],{"class":89,"line":10691},48,[87,10693,10669],{"class":97},[87,10695,2134],{"class":171},[87,10697,10674],{"class":949},[87,10699,2191],{"class":104},[87,10701,10702],{"class":949},"Age: \"",[87,10704,2402],{"class":171},[87,10706,10707],{"class":97}," tArray[i].sArray[j].age ",[87,10709,2134],{"class":171},[87,10711,9790],{"class":97},[87,10713,10715,10717,10719,10721,10723,10726,10728,10731,10733],{"class":89,"line":10714},49,[87,10716,10669],{"class":97},[87,10718,2134],{"class":171},[87,10720,10674],{"class":949},[87,10722,2191],{"class":104},[87,10724,10725],{"class":949},"Score: \"",[87,10727,2402],{"class":171},[87,10729,10730],{"class":97}," tArray[i].sArray[j].score ",[87,10732,2134],{"class":171},[87,10734,10735],{"class":97}," endl;   \n",[87,10737,10739],{"class":89,"line":10738},50,[87,10740,3484],{"class":97},[87,10742,10744],{"class":89,"line":10743},51,[87,10745,3142],{"class":97},[87,10747,10749],{"class":89,"line":10748},52,[87,10750,123],{"class":97},[87,10752,10754,10756,10758],{"class":89,"line":10753},53,[87,10755,1105],{"class":171},[87,10757,2928],{"class":205},[87,10759,2931],{"class":97},[87,10761,10763],{"class":89,"line":10762},54,[87,10764,2503],{"class":97},[87,10766,10768],{"class":89,"line":10767},55,[87,10769,10770],{"class":199},"    \u002F\u002F随机数种子\n",[87,10772,10774,10776,10778,10780,10782,10784,10786,10788,10790],{"class":89,"line":10773},56,[87,10775,3328],{"class":205},[87,10777,3331],{"class":97},[87,10779,3334],{"class":171},[87,10781,3337],{"class":171},[87,10783,1524],{"class":97},[87,10785,3342],{"class":205},[87,10787,165],{"class":97},[87,10789,3347],{"class":104},[87,10791,3350],{"class":97},[87,10793,10795],{"class":89,"line":10794},57,[87,10796,10797],{"class":199},"    \u002F\u002F1.创建3名老师的数组\n",[87,10799,10801,10803,10805,10808,10810],{"class":89,"line":10800},58,[87,10802,8845],{"class":171},[87,10804,10349],{"class":205},[87,10806,10807],{"class":97}," tArray[",[87,10809,1170],{"class":104},[87,10811,5643],{"class":97},[87,10813,10815],{"class":89,"line":10814},59,[87,10816,10817],{"class":199},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[87,10819,10821,10823,10826,10828,10831,10834,10836,10838,10841,10843],{"class":89,"line":10820},60,[87,10822,2940],{"class":171},[87,10824,10825],{"class":97}," len ",[87,10827,946],{"class":171},[87,10829,10830],{"class":171}," sizeof",[87,10832,10833],{"class":97},"(tArray) ",[87,10835,1677],{"class":171},[87,10837,10830],{"class":171},[87,10839,10840],{"class":97},"(tArray[",[87,10842,111],{"class":104},[87,10844,4810],{"class":97},[87,10846,10848,10851],{"class":89,"line":10847},61,[87,10849,10850],{"class":205},"    allocateSpace",[87,10852,10853],{"class":97},"(tArray, len);\n",[87,10855,10857],{"class":89,"line":10856},62,[87,10858,10859],{"class":199},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[87,10861,10863,10866],{"class":89,"line":10862},63,[87,10864,10865],{"class":205},"    printInfo",[87,10867,10853],{"class":97},[87,10869,10871],{"class":89,"line":10870},64,[87,10872,3355],{"emptyLinePlaceholder":1029},[87,10874,10876],{"class":89,"line":10875},65,[87,10877,123],{"class":97},[1055,10879,10880],{"start":101},[29,10881,10882,10885],{},[57,10883,10884],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10887,10888],{},"五名英雄信息如下：",[77,10890,10894],{"className":10891,"code":10892,"language":10893,"meta":82,"style":82},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[84,10895,10896,10914,10931,10948,10965],{"__ignoreMap":82},[87,10897,10898,10900,10903,10905,10907,10909,10912],{"class":89,"line":90},[87,10899,5870],{"class":97},[87,10901,10902],{"class":949},"\"刘备\"",[87,10904,1473],{"class":97},[87,10906,1867],{"class":104},[87,10908,1473],{"class":97},[87,10910,10911],{"class":949},"\"男\"",[87,10913,5883],{"class":97},[87,10915,10916,10918,10921,10923,10925,10927,10929],{"class":89,"line":101},[87,10917,5870],{"class":97},[87,10919,10920],{"class":949},"\"关羽\"",[87,10922,1473],{"class":97},[87,10924,1842],{"class":104},[87,10926,1473],{"class":97},[87,10928,10911],{"class":949},[87,10930,5883],{"class":97},[87,10932,10933,10935,10938,10940,10942,10944,10946],{"class":89,"line":120},[87,10934,5870],{"class":97},[87,10936,10937],{"class":949},"\"张飞\"",[87,10939,1473],{"class":97},[87,10941,1792],{"class":104},[87,10943,1473],{"class":97},[87,10945,10911],{"class":949},[87,10947,5883],{"class":97},[87,10949,10950,10952,10955,10957,10959,10961,10963],{"class":89,"line":222},[87,10951,5870],{"class":97},[87,10953,10954],{"class":949},"\"赵云\"",[87,10956,1473],{"class":97},[87,10958,1817],{"class":104},[87,10960,1473],{"class":97},[87,10962,10911],{"class":949},[87,10964,5883],{"class":97},[87,10966,10967,10969,10972,10974,10976,10978,10981],{"class":89,"line":234},[87,10968,5870],{"class":97},[87,10970,10971],{"class":949},"\"貂蝉\"",[87,10973,1473],{"class":97},[87,10975,1768],{"class":104},[87,10977,1473],{"class":97},[87,10979,10980],{"class":949},"\"女\"",[87,10982,5883],{"class":97},[19,10984,10985],{},"代码：",[77,10987,10989],{"className":1091,"code":10988,"language":1093,"meta":82,"style":82},"#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",[84,10990,10991,10997,11007,11013,11020,11024,11028,11034,11039,11043,11048,11071,11075,11100,11104,11137,11142,11171,11176,11191,11217,11237,11242,11247,11251,11255,11260,11282,11286,11310,11314,11376,11380,11384,11392,11396,11401,11412,11416,11432,11448,11464,11480,11496,11500,11520,11542,11547,11560,11567,11572,11578,11583,11596,11602],{"__ignoreMap":82},[87,10992,10993,10995],{"class":89,"line":90},[87,10994,2905],{"class":171},[87,10996,2908],{"class":949},[87,10998,10999,11001,11003,11005],{"class":89,"line":101},[87,11000,2913],{"class":171},[87,11002,2916],{"class":171},[87,11004,2919],{"class":205},[87,11006,117],{"class":97},[87,11008,11009,11011],{"class":89,"line":120},[87,11010,2905],{"class":171},[87,11012,8699],{"class":949},[87,11014,11015,11017],{"class":89,"line":222},[87,11016,8709],{"class":171},[87,11018,11019],{"class":205}," Sanguo\n",[87,11021,11022],{"class":89,"line":234},[87,11023,2503],{"class":97},[87,11025,11026],{"class":89,"line":256},[87,11027,8735],{"class":97},[87,11029,11030,11032],{"class":89,"line":269},[87,11031,2940],{"class":171},[87,11033,8747],{"class":97},[87,11035,11036],{"class":89,"line":463},[87,11037,11038],{"class":97},"    string gender;\n",[87,11040,11041],{"class":89,"line":469},[87,11042,4949],{"class":97},[87,11044,11045],{"class":89,"line":2287},[87,11046,11047],{"class":199},"\u002F\u002F定义排序函数\n",[87,11049,11050,11052,11054,11056,11059,11061,11063,11065,11067,11069],{"class":89,"line":2568},[87,11051,6314],{"class":171},[87,11053,8266],{"class":205},[87,11055,165],{"class":97},[87,11057,11058],{"class":205},"Sanguo",[87,11060,7468],{"class":171},[87,11062,571],{"class":492},[87,11064,1473],{"class":97},[87,11066,1105],{"class":171},[87,11068,8281],{"class":492},[87,11070,1108],{"class":97},[87,11072,11073],{"class":89,"line":2573},[87,11074,2503],{"class":97},[87,11076,11077,11079,11081,11083,11085,11087,11089,11091,11093,11096,11098],{"class":89,"line":2579},[87,11078,4155],{"class":171},[87,11080,165],{"class":97},[87,11082,1105],{"class":171},[87,11084,3986],{"class":97},[87,11086,946],{"class":171},[87,11088,111],{"class":104},[87,11090,3993],{"class":97},[87,11092,938],{"class":171},[87,11094,11095],{"class":97},"len;i",[87,11097,3247],{"class":171},[87,11099,1108],{"class":97},[87,11101,11102],{"class":89,"line":2584},[87,11103,2985],{"class":97},[87,11105,11106,11109,11111,11113,11115,11117,11119,11121,11123,11125,11127,11129,11131,11133,11135],{"class":89,"line":2598},[87,11107,11108],{"class":171},"     for",[87,11110,2614],{"class":97},[87,11112,1105],{"class":171},[87,11114,4364],{"class":97},[87,11116,946],{"class":171},[87,11118,111],{"class":104},[87,11120,4371],{"class":97},[87,11122,938],{"class":171},[87,11124,8308],{"class":97},[87,11126,1625],{"class":171},[87,11128,1313],{"class":104},[87,11130,1625],{"class":171},[87,11132,4504],{"class":97},[87,11134,3247],{"class":171},[87,11136,1108],{"class":97},[87,11138,11139],{"class":89,"line":2603},[87,11140,11141],{"class":97},"     {\n",[87,11143,11144,11147,11150,11152,11155,11157,11160,11162,11164,11166,11168],{"class":89,"line":2609},[87,11145,11146],{"class":171},"         if",[87,11148,11149],{"class":97}," ((s",[87,11151,1575],{"class":171},[87,11153,11154],{"class":97},"j)->age ",[87,11156,2051],{"class":171},[87,11158,11159],{"class":97}," (s",[87,11161,1575],{"class":171},[87,11163,1561],{"class":97},[87,11165,1575],{"class":171},[87,11167,1313],{"class":104},[87,11169,11170],{"class":97},")->age)\n",[87,11172,11173],{"class":89,"line":2630},[87,11174,11175],{"class":97},"         {\n",[87,11177,11178,11181,11183,11186,11188],{"class":89,"line":2635},[87,11179,11180],{"class":97},"             Sanguo temp",[87,11182,8103],{"class":171},[87,11184,11185],{"class":97},"(s",[87,11187,1575],{"class":171},[87,11189,11190],{"class":97},"j);\n",[87,11192,11193,11196,11198,11200,11203,11205,11207,11209,11211,11213,11215],{"class":89,"line":2649},[87,11194,11195],{"class":171},"             *",[87,11197,11185],{"class":97},[87,11199,1575],{"class":171},[87,11201,11202],{"class":97},"j)",[87,11204,8103],{"class":171},[87,11206,11185],{"class":97},[87,11208,1575],{"class":171},[87,11210,1561],{"class":97},[87,11212,1575],{"class":171},[87,11214,1313],{"class":104},[87,11216,175],{"class":97},[87,11218,11219,11221,11223,11225,11227,11229,11231,11233,11235],{"class":89,"line":2654},[87,11220,11195],{"class":171},[87,11222,11185],{"class":97},[87,11224,1575],{"class":171},[87,11226,1561],{"class":97},[87,11228,1575],{"class":171},[87,11230,1313],{"class":104},[87,11232,1524],{"class":97},[87,11234,946],{"class":171},[87,11236,5233],{"class":97},[87,11238,11239],{"class":89,"line":2683},[87,11240,11241],{"class":97},"         }\n",[87,11243,11244],{"class":89,"line":2688},[87,11245,11246],{"class":97},"     }\n",[87,11248,11249],{"class":89,"line":2705},[87,11250,3142],{"class":97},[87,11252,11253],{"class":89,"line":2710},[87,11254,123],{"class":97},[87,11256,11257],{"class":89,"line":2715},[87,11258,11259],{"class":199},"\u002F\u002F定义打印函数\n",[87,11261,11262,11264,11266,11268,11270,11272,11274,11276,11278,11280],{"class":89,"line":2720},[87,11263,6314],{"class":171},[87,11265,10565],{"class":205},[87,11267,165],{"class":97},[87,11269,11058],{"class":205},[87,11271,7468],{"class":171},[87,11273,571],{"class":492},[87,11275,1473],{"class":97},[87,11277,1105],{"class":171},[87,11279,8281],{"class":492},[87,11281,1108],{"class":97},[87,11283,11284],{"class":89,"line":2734},[87,11285,2503],{"class":97},[87,11287,11288,11290,11292,11294,11296,11298,11300,11302,11304,11306,11308],{"class":89,"line":2739},[87,11289,4155],{"class":171},[87,11291,2614],{"class":97},[87,11293,1105],{"class":171},[87,11295,3986],{"class":97},[87,11297,946],{"class":171},[87,11299,111],{"class":104},[87,11301,3993],{"class":97},[87,11303,938],{"class":171},[87,11305,11095],{"class":97},[87,11307,3247],{"class":171},[87,11309,1108],{"class":97},[87,11311,11312],{"class":89,"line":3532},[87,11313,2985],{"class":97},[87,11315,11316,11318,11320,11322,11324,11327,11329,11331,11333,11336,11338,11340,11342,11345,11347,11349,11351,11354,11356,11358,11360,11363,11365,11367,11369,11372,11374],{"class":89,"line":3546},[87,11317,4405],{"class":97},[87,11319,2134],{"class":171},[87,11321,1347],{"class":949},[87,11323,2191],{"class":104},[87,11325,11326],{"class":949},"姓名：\"",[87,11328,2134],{"class":171},[87,11330,11185],{"class":97},[87,11332,1575],{"class":171},[87,11334,11335],{"class":97},"i)->name",[87,11337,2134],{"class":171},[87,11339,1347],{"class":949},[87,11341,2191],{"class":104},[87,11343,11344],{"class":949},"年龄：\"",[87,11346,2134],{"class":171},[87,11348,11185],{"class":97},[87,11350,1575],{"class":171},[87,11352,11353],{"class":97},"i)->age",[87,11355,2134],{"class":171},[87,11357,1347],{"class":949},[87,11359,2191],{"class":104},[87,11361,11362],{"class":949},"性别：\"",[87,11364,2134],{"class":171},[87,11366,11185],{"class":97},[87,11368,1575],{"class":171},[87,11370,11371],{"class":97},"i)->gender",[87,11373,2134],{"class":171},[87,11375,2156],{"class":97},[87,11377,11378],{"class":89,"line":3554},[87,11379,3142],{"class":97},[87,11381,11382],{"class":89,"line":3559},[87,11383,123],{"class":97},[87,11385,11386,11388,11390],{"class":89,"line":3565},[87,11387,1105],{"class":171},[87,11389,2928],{"class":205},[87,11391,2931],{"class":97},[87,11393,11394],{"class":89,"line":3571},[87,11395,2503],{"class":97},[87,11397,11398],{"class":89,"line":3576},[87,11399,11400],{"class":199},"    \u002F\u002F定义结构体变量\n",[87,11402,11403,11406,11408,11410],{"class":89,"line":8898},[87,11404,11405],{"class":97},"    Sanguo s1[",[87,11407,1414],{"class":104},[87,11409,2031],{"class":97},[87,11411,5861],{"class":171},[87,11413,11414],{"class":89,"line":8922},[87,11415,2985],{"class":97},[87,11417,11418,11420,11422,11424,11426,11428,11430],{"class":89,"line":8927},[87,11419,5870],{"class":97},[87,11421,10902],{"class":949},[87,11423,1473],{"class":97},[87,11425,1867],{"class":104},[87,11427,1473],{"class":97},[87,11429,10911],{"class":949},[87,11431,5883],{"class":97},[87,11433,11434,11436,11438,11440,11442,11444,11446],{"class":89,"line":8933},[87,11435,5870],{"class":97},[87,11437,10920],{"class":949},[87,11439,1473],{"class":97},[87,11441,1842],{"class":104},[87,11443,1473],{"class":97},[87,11445,10911],{"class":949},[87,11447,5883],{"class":97},[87,11449,11450,11452,11454,11456,11458,11460,11462],{"class":89,"line":8960},[87,11451,5870],{"class":97},[87,11453,10937],{"class":949},[87,11455,1473],{"class":97},[87,11457,1792],{"class":104},[87,11459,1473],{"class":97},[87,11461,10911],{"class":949},[87,11463,5883],{"class":97},[87,11465,11466,11468,11470,11472,11474,11476,11478],{"class":89,"line":8965},[87,11467,5870],{"class":97},[87,11469,10954],{"class":949},[87,11471,1473],{"class":97},[87,11473,1817],{"class":104},[87,11475,1473],{"class":97},[87,11477,10911],{"class":949},[87,11479,5883],{"class":97},[87,11481,11482,11484,11486,11488,11490,11492,11494],{"class":89,"line":8971},[87,11483,5870],{"class":97},[87,11485,10971],{"class":949},[87,11487,1473],{"class":97},[87,11489,1768],{"class":104},[87,11491,1473],{"class":97},[87,11493,10980],{"class":949},[87,11495,5883],{"class":97},[87,11497,11498],{"class":89,"line":8983},[87,11499,5904],{"class":97},[87,11501,11502,11504,11506,11508,11511,11513,11516,11518],{"class":89,"line":8995},[87,11503,2940],{"class":171},[87,11505,8281],{"class":97},[87,11507,5156],{"class":171},[87,11509,11510],{"class":97},"(s1)",[87,11512,5162],{"class":171},[87,11514,11515],{"class":97},"(s1[",[87,11517,111],{"class":104},[87,11519,4810],{"class":97},[87,11521,11522,11525,11527,11530,11532,11535,11538,11540],{"class":89,"line":9007},[87,11523,11524],{"class":97},"    Sanguo ",[87,11526,1549],{"class":171},[87,11528,11529],{"class":97},"s ",[87,11531,946],{"class":171},[87,11533,11534],{"class":171}," &",[87,11536,11537],{"class":97},"s1[",[87,11539,111],{"class":104},[87,11541,5643],{"class":97},[87,11543,11544],{"class":89,"line":10666},[87,11545,11546],{"class":199},"    \u002F\u002F排序前：\n",[87,11548,11549,11551,11553,11556,11558],{"class":89,"line":10691},[87,11550,7479],{"class":97},[87,11552,2134],{"class":171},[87,11554,11555],{"class":949}," \"排序前：\"",[87,11557,2402],{"class":171},[87,11559,9790],{"class":97},[87,11561,11562,11564],{"class":89,"line":10714},[87,11563,10865],{"class":205},[87,11565,11566],{"class":97},"(s,len);\n",[87,11568,11569],{"class":89,"line":10738},[87,11570,11571],{"class":199},"    \u002F\u002F调用排序函数\n",[87,11573,11574,11576],{"class":89,"line":10743},[87,11575,8548],{"class":205},[87,11577,11566],{"class":97},[87,11579,11580],{"class":89,"line":10748},[87,11581,11582],{"class":199},"    \u002F\u002F排序后\n",[87,11584,11585,11587,11589,11592,11594],{"class":89,"line":10753},[87,11586,7479],{"class":97},[87,11588,2134],{"class":171},[87,11590,11591],{"class":949}," \"排序后：\"",[87,11593,2402],{"class":171},[87,11595,9790],{"class":97},[87,11597,11598,11600],{"class":89,"line":10762},[87,11599,10865],{"class":205},[87,11601,11566],{"class":97},[87,11603,11604],{"class":89,"line":10767},[87,11605,123],{"class":97},[19,11607,11608,11609,11611],{},"注意：使用指针时直接用传首地址**&s",[87,11610,111],{},"**",[1006,11613,11614],{},"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":82,"searchDepth":101,"depth":101,"links":11616},[11617,11618,11619,11620,11621,11622,11623],{"id":8653,"depth":101,"text":8654},{"id":9015,"depth":101,"text":9016},{"id":9284,"depth":101,"text":9285},{"id":9449,"depth":101,"text":9450},{"id":9665,"depth":101,"text":9666},{"id":9986,"depth":101,"text":9987},{"id":10214,"depth":101,"text":10215},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8642,"description":8650},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11630,"title":11631,"body":11632,"description":82,"extension":1027,"meta":12975,"navigation":1029,"path":12976,"seo":12977,"stem":12978,"__hash__":12979},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11633,"toc":12969},[11634,11637,11641,11647,11661,11666,11669,11673,11680,11686,11689,11696,11702,11707,11710,11713,11716,12280,12283,12297,12301,12306,12322,12462,12465,12471,12474,12479,12487,12595,12598,12603,12606,12611,12614,12620,12623,12966],[10,11635,11631],{"id":11636},"_5程序内存模型",[14,11638,11640],{"id":11639},"_51内存分区模型","5.1内存分区模型",[19,11642,11643,11644],{},"C++程序在执行时，将内存大方向划分为",[57,11645,11646],{},"4个区域",[26,11648,11649,11652,11655,11658],{},[29,11650,11651],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[29,11653,11654],{},"全局区：存放全局变量和静态变量以及常量",[29,11656,11657],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[29,11659,11660],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,11662,11663],{},[57,11664,11665],{},"内存四区意义：",[19,11667,11668],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[44,11670,11672],{"id":11671},"_511程序运行前","5.1.1程序运行前",[19,11674,11675,11676,11679],{},"​\t在程序编译后，生成了exe可执行程序，",[57,11677,11678],{},"未执行该程序前","分为两个区域",[19,11681,11682,11683],{},"​\t",[57,11684,11685],{},"代码区：",[19,11687,11688],{},"​\t\t存放 CPU 执行的机器指令",[19,11690,11691,11692,11695],{},"​\t\t代码区是",[57,11693,11694],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,11697,11691,11698,11701],{},[57,11699,11700],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,11703,11682,11704],{},[57,11705,11706],{},"全局区：",[19,11708,11709],{},"​\t\t全局变量和静态变量存放在此.",[19,11711,11712],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,11714,11715],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[77,11717,11719],{"className":1091,"code":11718,"language":1093,"meta":82,"style":82},"\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",[84,11720,11721,11726,11739,11752,11756,11761,11776,11791,11795,11804,11808,11813,11826,11839,11843,11848,11874,11900,11904,11931,11957,11961,11966,11982,11997,12001,12027,12053,12057,12082,12107,12111,12137,12163,12167,12183,12198,12224,12250,12254,12264,12268,12276],{"__ignoreMap":82},[87,11722,11723],{"class":89,"line":90},[87,11724,11725],{"class":199},"\u002F\u002F全局变量\n",[87,11727,11728,11730,11733,11735,11737],{"class":89,"line":101},[87,11729,1105],{"class":171},[87,11731,11732],{"class":97}," g_a ",[87,11734,946],{"class":171},[87,11736,2993],{"class":104},[87,11738,117],{"class":97},[87,11740,11741,11743,11746,11748,11750],{"class":89,"line":120},[87,11742,1105],{"class":171},[87,11744,11745],{"class":97}," g_b ",[87,11747,946],{"class":171},[87,11749,2993],{"class":104},[87,11751,117],{"class":97},[87,11753,11754],{"class":89,"line":222},[87,11755,3355],{"emptyLinePlaceholder":1029},[87,11757,11758],{"class":89,"line":234},[87,11759,11760],{"class":199},"\u002F\u002F全局常量\n",[87,11762,11763,11765,11767,11770,11772,11774],{"class":89,"line":256},[87,11764,7742],{"class":171},[87,11766,3337],{"class":171},[87,11768,11769],{"class":97}," c_g_a ",[87,11771,946],{"class":171},[87,11773,2993],{"class":104},[87,11775,117],{"class":97},[87,11777,11778,11780,11782,11785,11787,11789],{"class":89,"line":269},[87,11779,7742],{"class":171},[87,11781,3337],{"class":171},[87,11783,11784],{"class":97}," c_g_b ",[87,11786,946],{"class":171},[87,11788,2993],{"class":104},[87,11790,117],{"class":97},[87,11792,11793],{"class":89,"line":463},[87,11794,3355],{"emptyLinePlaceholder":1029},[87,11796,11797,11799,11801],{"class":89,"line":469},[87,11798,1105],{"class":171},[87,11800,2928],{"class":205},[87,11802,11803],{"class":97},"() {\n",[87,11805,11806],{"class":89,"line":2287},[87,11807,3355],{"emptyLinePlaceholder":1029},[87,11809,11810],{"class":89,"line":2568},[87,11811,11812],{"class":199},"    \u002F\u002F局部变量\n",[87,11814,11815,11817,11820,11822,11824],{"class":89,"line":2573},[87,11816,2940],{"class":171},[87,11818,11819],{"class":97}," a ",[87,11821,946],{"class":171},[87,11823,2993],{"class":104},[87,11825,117],{"class":97},[87,11827,11828,11830,11833,11835,11837],{"class":89,"line":2579},[87,11829,2940],{"class":171},[87,11831,11832],{"class":97}," b ",[87,11834,946],{"class":171},[87,11836,2993],{"class":104},[87,11838,117],{"class":97},[87,11840,11841],{"class":89,"line":2584},[87,11842,3355],{"emptyLinePlaceholder":1029},[87,11844,11845],{"class":89,"line":2598},[87,11846,11847],{"class":199},"    \u002F\u002F打印地址\n",[87,11849,11850,11852,11854,11857,11859,11861,11863,11865,11867,11870,11872],{"class":89,"line":2603},[87,11851,7479],{"class":97},[87,11853,2134],{"class":171},[87,11855,11856],{"class":949}," \"局部变量a地址为： \"",[87,11858,2402],{"class":171},[87,11860,2614],{"class":97},[87,11862,1105],{"class":171},[87,11864,1524],{"class":97},[87,11866,1448],{"class":171},[87,11868,11869],{"class":97},"a ",[87,11871,2134],{"class":171},[87,11873,9790],{"class":97},[87,11875,11876,11878,11880,11883,11885,11887,11889,11891,11893,11896,11898],{"class":89,"line":2609},[87,11877,7479],{"class":97},[87,11879,2134],{"class":171},[87,11881,11882],{"class":949}," \"局部变量b地址为： \"",[87,11884,2402],{"class":171},[87,11886,2614],{"class":97},[87,11888,1105],{"class":171},[87,11890,1524],{"class":97},[87,11892,1448],{"class":171},[87,11894,11895],{"class":97},"b ",[87,11897,2134],{"class":171},[87,11899,9790],{"class":97},[87,11901,11902],{"class":89,"line":2630},[87,11903,3355],{"emptyLinePlaceholder":1029},[87,11905,11906,11908,11910,11913,11915,11918,11920,11922,11924,11927,11929],{"class":89,"line":2635},[87,11907,7479],{"class":97},[87,11909,2134],{"class":171},[87,11911,11912],{"class":949}," \"全局变量g_a地址为： \"",[87,11914,2402],{"class":171},[87,11916,11917],{"class":97},"  (",[87,11919,1105],{"class":171},[87,11921,1524],{"class":97},[87,11923,1448],{"class":171},[87,11925,11926],{"class":97},"g_a ",[87,11928,2134],{"class":171},[87,11930,9790],{"class":97},[87,11932,11933,11935,11937,11940,11942,11944,11946,11948,11950,11953,11955],{"class":89,"line":2649},[87,11934,7479],{"class":97},[87,11936,2134],{"class":171},[87,11938,11939],{"class":949}," \"全局变量g_b地址为： \"",[87,11941,2402],{"class":171},[87,11943,11917],{"class":97},[87,11945,1105],{"class":171},[87,11947,1524],{"class":97},[87,11949,1448],{"class":171},[87,11951,11952],{"class":97},"g_b ",[87,11954,2134],{"class":171},[87,11956,9790],{"class":97},[87,11958,11959],{"class":89,"line":2654},[87,11960,3355],{"emptyLinePlaceholder":1029},[87,11962,11963],{"class":89,"line":2683},[87,11964,11965],{"class":199},"    \u002F\u002F静态变量\n",[87,11967,11968,11971,11973,11976,11978,11980],{"class":89,"line":2688},[87,11969,11970],{"class":171},"    static",[87,11972,3337],{"class":171},[87,11974,11975],{"class":97}," s_a ",[87,11977,946],{"class":171},[87,11979,2993],{"class":104},[87,11981,117],{"class":97},[87,11983,11984,11986,11988,11991,11993,11995],{"class":89,"line":2705},[87,11985,11970],{"class":171},[87,11987,3337],{"class":171},[87,11989,11990],{"class":97}," s_b ",[87,11992,946],{"class":171},[87,11994,2993],{"class":104},[87,11996,117],{"class":97},[87,11998,11999],{"class":89,"line":2710},[87,12000,3355],{"emptyLinePlaceholder":1029},[87,12002,12003,12005,12007,12010,12012,12014,12016,12018,12020,12023,12025],{"class":89,"line":2715},[87,12004,7479],{"class":97},[87,12006,2134],{"class":171},[87,12008,12009],{"class":949}," \"静态变量s_a地址为： \"",[87,12011,2402],{"class":171},[87,12013,2614],{"class":97},[87,12015,1105],{"class":171},[87,12017,1524],{"class":97},[87,12019,1448],{"class":171},[87,12021,12022],{"class":97},"s_a ",[87,12024,2134],{"class":171},[87,12026,9790],{"class":97},[87,12028,12029,12031,12033,12036,12038,12040,12042,12044,12046,12049,12051],{"class":89,"line":2720},[87,12030,7479],{"class":97},[87,12032,2134],{"class":171},[87,12034,12035],{"class":949}," \"静态变量s_b地址为： \"",[87,12037,2402],{"class":171},[87,12039,2614],{"class":97},[87,12041,1105],{"class":171},[87,12043,1524],{"class":97},[87,12045,1448],{"class":171},[87,12047,12048],{"class":97},"s_b ",[87,12050,2134],{"class":171},[87,12052,9790],{"class":97},[87,12054,12055],{"class":89,"line":2734},[87,12056,3355],{"emptyLinePlaceholder":1029},[87,12058,12059,12061,12063,12066,12068,12070,12072,12074,12076,12078,12080],{"class":89,"line":2739},[87,12060,7479],{"class":97},[87,12062,2134],{"class":171},[87,12064,12065],{"class":949}," \"字符串常量地址为： \"",[87,12067,2402],{"class":171},[87,12069,2614],{"class":97},[87,12071,1105],{"class":171},[87,12073,1524],{"class":97},[87,12075,1448],{"class":171},[87,12077,2151],{"class":949},[87,12079,2402],{"class":171},[87,12081,9790],{"class":97},[87,12083,12084,12086,12088,12090,12092,12094,12096,12098,12100,12103,12105],{"class":89,"line":3532},[87,12085,7479],{"class":97},[87,12087,2134],{"class":171},[87,12089,12065],{"class":949},[87,12091,2402],{"class":171},[87,12093,2614],{"class":97},[87,12095,1105],{"class":171},[87,12097,1524],{"class":97},[87,12099,1448],{"class":171},[87,12101,12102],{"class":949},"\"hello world1\"",[87,12104,2402],{"class":171},[87,12106,9790],{"class":97},[87,12108,12109],{"class":89,"line":3546},[87,12110,3355],{"emptyLinePlaceholder":1029},[87,12112,12113,12115,12117,12120,12122,12124,12126,12128,12130,12133,12135],{"class":89,"line":3554},[87,12114,7479],{"class":97},[87,12116,2134],{"class":171},[87,12118,12119],{"class":949}," \"全局常量c_g_a地址为： \"",[87,12121,2402],{"class":171},[87,12123,2614],{"class":97},[87,12125,1105],{"class":171},[87,12127,1524],{"class":97},[87,12129,1448],{"class":171},[87,12131,12132],{"class":97},"c_g_a ",[87,12134,2134],{"class":171},[87,12136,9790],{"class":97},[87,12138,12139,12141,12143,12146,12148,12150,12152,12154,12156,12159,12161],{"class":89,"line":3559},[87,12140,7479],{"class":97},[87,12142,2134],{"class":171},[87,12144,12145],{"class":949}," \"全局常量c_g_b地址为： \"",[87,12147,2402],{"class":171},[87,12149,2614],{"class":97},[87,12151,1105],{"class":171},[87,12153,1524],{"class":97},[87,12155,1448],{"class":171},[87,12157,12158],{"class":97},"c_g_b ",[87,12160,2134],{"class":171},[87,12162,9790],{"class":97},[87,12164,12165],{"class":89,"line":3565},[87,12166,3355],{"emptyLinePlaceholder":1029},[87,12168,12169,12172,12174,12177,12179,12181],{"class":89,"line":3571},[87,12170,12171],{"class":171},"    const",[87,12173,3337],{"class":171},[87,12175,12176],{"class":97}," c_l_a ",[87,12178,946],{"class":171},[87,12180,2993],{"class":104},[87,12182,117],{"class":97},[87,12184,12185,12187,12189,12192,12194,12196],{"class":89,"line":3576},[87,12186,12171],{"class":171},[87,12188,3337],{"class":171},[87,12190,12191],{"class":97}," c_l_b ",[87,12193,946],{"class":171},[87,12195,2993],{"class":104},[87,12197,117],{"class":97},[87,12199,12200,12202,12204,12207,12209,12211,12213,12215,12217,12220,12222],{"class":89,"line":8898},[87,12201,7479],{"class":97},[87,12203,2134],{"class":171},[87,12205,12206],{"class":949}," \"局部常量c_l_a地址为： \"",[87,12208,2402],{"class":171},[87,12210,2614],{"class":97},[87,12212,1105],{"class":171},[87,12214,1524],{"class":97},[87,12216,1448],{"class":171},[87,12218,12219],{"class":97},"c_l_a ",[87,12221,2134],{"class":171},[87,12223,9790],{"class":97},[87,12225,12226,12228,12230,12233,12235,12237,12239,12241,12243,12246,12248],{"class":89,"line":8922},[87,12227,7479],{"class":97},[87,12229,2134],{"class":171},[87,12231,12232],{"class":949}," \"局部常量c_l_b地址为： \"",[87,12234,2402],{"class":171},[87,12236,2614],{"class":97},[87,12238,1105],{"class":171},[87,12240,1524],{"class":97},[87,12242,1448],{"class":171},[87,12244,12245],{"class":97},"c_l_b ",[87,12247,2134],{"class":171},[87,12249,9790],{"class":97},[87,12251,12252],{"class":89,"line":8927},[87,12253,3355],{"emptyLinePlaceholder":1029},[87,12255,12256,12258,12260,12262],{"class":89,"line":8933},[87,12257,3258],{"class":205},[87,12259,165],{"class":97},[87,12261,3263],{"class":949},[87,12263,175],{"class":97},[87,12265,12266],{"class":89,"line":8960},[87,12267,3355],{"emptyLinePlaceholder":1029},[87,12269,12270,12272,12274],{"class":89,"line":8965},[87,12271,5044],{"class":171},[87,12273,577],{"class":104},[87,12275,117],{"class":97},[87,12277,12278],{"class":89,"line":8971},[87,12279,123],{"class":97},[19,12281,12282],{},"总结：",[26,12284,12285,12288,12291,12294],{},[29,12286,12287],{},"c++中程序运行前分为全局区和代码区",[29,12289,12290],{},"代码区特点是共享和只读",[29,12292,12293],{},"全局区中存放全局变量、静态变量、常量",[29,12295,12296],{},"常量区中存放const修饰的全局常量和字符串常量",[44,12298,12300],{"id":12299},"_512程序运行后","5.1.2程序运行后",[1055,12302,12303],{},[29,12304,12305],{},"栈区：",[26,12307,12308,12315],{},[29,12309,12310,12311,12314],{},"由编译器自动分配释放, 存放",[57,12312,12313],{},"函数的参数值,局部变量","等",[29,12316,12317,12318,12321],{},"注意事项：",[57,12319,12320],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[77,12323,12325],{"className":1091,"code":12324,"language":1093,"meta":82,"style":82},"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",[84,12326,12327,12338,12342,12357,12369,12373,12377,12385,12390,12405,12423,12440,12450,12458],{"__ignoreMap":82},[87,12328,12329,12331,12333,12336],{"class":89,"line":90},[87,12330,1105],{"class":171},[87,12332,7468],{"class":171},[87,12334,12335],{"class":205}," func",[87,12337,2931],{"class":97},[87,12339,12340],{"class":89,"line":101},[87,12341,2503],{"class":97},[87,12343,12344,12346,12348,12350,12352,12354],{"class":89,"line":120},[87,12345,2940],{"class":171},[87,12347,11819],{"class":97},[87,12349,946],{"class":171},[87,12351,2993],{"class":104},[87,12353,1155],{"class":97},[87,12355,12356],{"class":199}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[87,12358,12359,12361,12363,12366],{"class":89,"line":222},[87,12360,5044],{"class":171},[87,12362,11534],{"class":171},[87,12364,12365],{"class":97},"a;",[87,12367,12368],{"class":199}," \u002F\u002F放回局部变量的地址\n",[87,12370,12371],{"class":89,"line":234},[87,12372,123],{"class":97},[87,12374,12375],{"class":89,"line":256},[87,12376,3355],{"emptyLinePlaceholder":1029},[87,12378,12379,12381,12383],{"class":89,"line":269},[87,12380,1105],{"class":171},[87,12382,2928],{"class":205},[87,12384,11803],{"class":97},[87,12386,12387],{"class":89,"line":463},[87,12388,12389],{"class":199},"    \u002F\u002F接受func的返回值\n",[87,12391,12392,12394,12396,12399,12401,12403],{"class":89,"line":469},[87,12393,2940],{"class":171},[87,12395,7468],{"class":171},[87,12397,12398],{"class":97},"p ",[87,12400,946],{"class":171},[87,12402,12335],{"class":205},[87,12404,6586],{"class":97},[87,12406,12407,12409,12411,12413,12415,12417,12420],{"class":89,"line":2287},[87,12408,7479],{"class":97},[87,12410,2134],{"class":171},[87,12412,7468],{"class":171},[87,12414,12398],{"class":97},[87,12416,2134],{"class":171},[87,12418,12419],{"class":97}," endl;",[87,12421,12422],{"class":199}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[87,12424,12425,12427,12429,12431,12433,12435,12437],{"class":89,"line":2568},[87,12426,7479],{"class":97},[87,12428,2134],{"class":171},[87,12430,7468],{"class":171},[87,12432,12398],{"class":97},[87,12434,2134],{"class":171},[87,12436,12419],{"class":97},[87,12438,12439],{"class":199}," \u002F\u002F第二次这个数据不再保留\n",[87,12441,12442,12444,12446,12448],{"class":89,"line":2573},[87,12443,3258],{"class":205},[87,12445,165],{"class":97},[87,12447,3263],{"class":949},[87,12449,175],{"class":97},[87,12451,12452,12454,12456],{"class":89,"line":2579},[87,12453,5044],{"class":171},[87,12455,577],{"class":104},[87,12457,117],{"class":97},[87,12459,12460],{"class":89,"line":2584},[87,12461,123],{"class":97},[19,12463,12464],{},"输出结果：",[19,12466,12467],{},[39,12468],{"alt":12469,"src":12470},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,12472,12473],{},"总结：不要返回局部变量的地址",[1055,12475,12476],{"start":101},[29,12477,12478],{},"堆区",[26,12480,12481,12484],{},[29,12482,12483],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[29,12485,12486],{},"在c++中主要利用new在堆区开辟内存",[77,12488,12490],{"className":1091,"code":12489,"language":1093,"meta":82,"style":82},"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",[84,12491,12492,12507,12511,12516,12537,12544,12548,12556,12560,12565,12579,12591],{"__ignoreMap":82},[87,12493,12494,12496,12499,12502,12504],{"class":89,"line":90},[87,12495,1105],{"class":171},[87,12497,12498],{"class":171},"  *",[87,12500,12501],{"class":205},"func",[87,12503,3382],{"class":97},[87,12505,12506],{"class":199},"  \u002F\u002F函数返回指针\n",[87,12508,12509],{"class":89,"line":101},[87,12510,2503],{"class":97},[87,12512,12513],{"class":89,"line":120},[87,12514,12515],{"class":199},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[87,12517,12518,12520,12522,12524,12526,12529,12531,12533,12535],{"class":89,"line":222},[87,12519,5100],{"class":171},[87,12521,7468],{"class":171},[87,12523,19],{"class":97},[87,12525,946],{"class":171},[87,12527,12528],{"class":171}," new",[87,12530,3337],{"class":171},[87,12532,165],{"class":97},[87,12534,242],{"class":104},[87,12536,175],{"class":97},[87,12538,12539,12541],{"class":89,"line":234},[87,12540,5334],{"class":171},[87,12542,12543],{"class":97}," p;\n",[87,12545,12546],{"class":89,"line":256},[87,12547,123],{"class":97},[87,12549,12550,12552,12554],{"class":89,"line":269},[87,12551,1105],{"class":171},[87,12553,2928],{"class":205},[87,12555,2931],{"class":97},[87,12557,12558],{"class":89,"line":463},[87,12559,2503],{"class":97},[87,12561,12562],{"class":89,"line":469},[87,12563,12564],{"class":199},"    \u002F\u002F在堆区开辟数据\n",[87,12566,12567,12569,12571,12573,12575,12577],{"class":89,"line":2287},[87,12568,2940],{"class":171},[87,12570,7468],{"class":171},[87,12572,19],{"class":97},[87,12574,946],{"class":171},[87,12576,12501],{"class":205},[87,12578,6586],{"class":97},[87,12580,12581,12583,12585,12587,12589],{"class":89,"line":2568},[87,12582,2508],{"class":97},[87,12584,7369],{"class":171},[87,12586,19],{"class":97},[87,12588,2134],{"class":171},[87,12590,2156],{"class":97},[87,12592,12593],{"class":89,"line":2573},[87,12594,123],{"class":97},[19,12596,12597],{},"图片展示：",[19,12599,12600],{},[39,12601],{"alt":12469,"src":12602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,12604,12605],{},"堆区内存由程序员管生死！！！",[1055,12607,12608],{"start":120},[29,12609,12610],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,12612,12613],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,12615,12616,12617],{},"​语法：",[84,12618,12619],{}," new 数据类型",[19,12621,12622],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[77,12624,12626],{"className":1091,"code":12625,"language":1093,"meta":82,"style":82},"\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",[84,12627,12628,12633,12643,12647,12652,12657,12679,12683,12691,12695,12709,12721,12733,12745,12750,12755,12766,12770,12775,12783,12787,12792,12814,12840,12844,12862,12866,12892,12896,12908,12912,12917,12922,12930,12934,12938,12946,12950,12956,12962],{"__ignoreMap":82},[87,12629,12630],{"class":89,"line":90},[87,12631,12632],{"class":199},"\u002F\u002F1.new的基本语法\n",[87,12634,12635,12637,12639,12641],{"class":89,"line":101},[87,12636,1105],{"class":171},[87,12638,7468],{"class":171},[87,12640,12501],{"class":205},[87,12642,2931],{"class":97},[87,12644,12645],{"class":89,"line":120},[87,12646,2503],{"class":97},[87,12648,12649],{"class":89,"line":222},[87,12650,12651],{"class":199},"    \u002F\u002F在堆区创建整型数据\n",[87,12653,12654],{"class":89,"line":234},[87,12655,12656],{"class":199},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[87,12658,12659,12661,12663,12665,12668,12670,12672,12674,12676],{"class":89,"line":256},[87,12660,2940],{"class":171},[87,12662,7468],{"class":171},[87,12664,19],{"class":97},[87,12666,12667],{"class":171},"=new",[87,12669,3337],{"class":171},[87,12671,165],{"class":97},[87,12673,242],{"class":104},[87,12675,6916],{"class":97},[87,12677,12678],{"class":199},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[87,12680,12681],{"class":89,"line":269},[87,12682,123],{"class":97},[87,12684,12685,12687,12689],{"class":89,"line":463},[87,12686,6314],{"class":171},[87,12688,6538],{"class":205},[87,12690,2931],{"class":97},[87,12692,12693],{"class":89,"line":469},[87,12694,2503],{"class":97},[87,12696,12697,12699,12701,12703,12705,12707],{"class":89,"line":2287},[87,12698,2940],{"class":171},[87,12700,7468],{"class":171},[87,12702,19],{"class":97},[87,12704,946],{"class":171},[87,12706,12501],{"class":205},[87,12708,6586],{"class":97},[87,12710,12711,12713,12715,12717,12719],{"class":89,"line":2568},[87,12712,2508],{"class":97},[87,12714,7369],{"class":171},[87,12716,19],{"class":97},[87,12718,2134],{"class":171},[87,12720,2156],{"class":97},[87,12722,12723,12725,12727,12729,12731],{"class":89,"line":2573},[87,12724,2508],{"class":97},[87,12726,7369],{"class":171},[87,12728,19],{"class":97},[87,12730,2134],{"class":171},[87,12732,2156],{"class":97},[87,12734,12735,12737,12739,12741,12743],{"class":89,"line":2579},[87,12736,2508],{"class":97},[87,12738,7369],{"class":171},[87,12740,19],{"class":97},[87,12742,2134],{"class":171},[87,12744,2156],{"class":97},[87,12746,12747],{"class":89,"line":2584},[87,12748,12749],{"class":199},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[87,12751,12752],{"class":89,"line":2598},[87,12753,12754],{"class":199},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[87,12756,12757,12760,12763],{"class":89,"line":2603},[87,12758,12759],{"class":171},"    delete",[87,12761,12762],{"class":97}," p;",[87,12764,12765],{"class":199},"\u002F\u002F删除这块地址\n",[87,12767,12768],{"class":89,"line":2609},[87,12769,123],{"class":97},[87,12771,12772],{"class":89,"line":2630},[87,12773,12774],{"class":199},"\u002F\u002F2.在堆区利用new开辟数组\n",[87,12776,12777,12779,12781],{"class":89,"line":2635},[87,12778,6314],{"class":171},[87,12780,6607],{"class":205},[87,12782,2931],{"class":97},[87,12784,12785],{"class":89,"line":2649},[87,12786,2503],{"class":97},[87,12788,12789],{"class":89,"line":2654},[87,12790,12791],{"class":199},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[87,12793,12794,12796,12798,12800,12802,12804,12806,12808,12811],{"class":89,"line":2683},[87,12795,2940],{"class":171},[87,12797,7468],{"class":171},[87,12799,4834],{"class":97},[87,12801,12667],{"class":171},[87,12803,3337],{"class":171},[87,12805,1982],{"class":97},[87,12807,242],{"class":104},[87,12809,12810],{"class":97},"];",[87,12812,12813],{"class":199},"\u002F\u002F10代表数组有10个元素\n",[87,12815,12816,12818,12820,12822,12824,12826,12828,12830,12832,12834,12836,12838],{"class":89,"line":2688},[87,12817,4155],{"class":171},[87,12819,2614],{"class":97},[87,12821,1105],{"class":171},[87,12823,3986],{"class":97},[87,12825,946],{"class":171},[87,12827,111],{"class":104},[87,12829,3993],{"class":97},[87,12831,938],{"class":171},[87,12833,242],{"class":104},[87,12835,3993],{"class":97},[87,12837,3247],{"class":171},[87,12839,1108],{"class":97},[87,12841,12842],{"class":89,"line":2705},[87,12843,2985],{"class":97},[87,12845,12846,12849,12851,12853,12855,12857,12859],{"class":89,"line":2710},[87,12847,12848],{"class":97},"        arr[i]",[87,12850,946],{"class":171},[87,12852,1536],{"class":97},[87,12854,1575],{"class":171},[87,12856,536],{"class":104},[87,12858,1155],{"class":97},[87,12860,12861],{"class":199},"\u002F\u002F给10个元素赋值100～109\n",[87,12863,12864],{"class":89,"line":2715},[87,12865,3142],{"class":97},[87,12867,12868,12870,12872,12874,12876,12878,12880,12882,12884,12886,12888,12890],{"class":89,"line":2720},[87,12869,4155],{"class":171},[87,12871,2614],{"class":97},[87,12873,1105],{"class":171},[87,12875,3986],{"class":97},[87,12877,946],{"class":171},[87,12879,111],{"class":104},[87,12881,3993],{"class":97},[87,12883,938],{"class":171},[87,12885,242],{"class":104},[87,12887,3993],{"class":97},[87,12889,3247],{"class":171},[87,12891,1108],{"class":97},[87,12893,12894],{"class":89,"line":2734},[87,12895,2985],{"class":97},[87,12897,12898,12900,12902,12904,12906],{"class":89,"line":2739},[87,12899,4405],{"class":97},[87,12901,2134],{"class":171},[87,12903,5307],{"class":97},[87,12905,2134],{"class":171},[87,12907,2156],{"class":97},[87,12909,12910],{"class":89,"line":3532},[87,12911,3142],{"class":97},[87,12913,12914],{"class":89,"line":3546},[87,12915,12916],{"class":199},"    \u002F\u002F释放堆区数组\n",[87,12918,12919],{"class":89,"line":3554},[87,12920,12921],{"class":199},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[87,12923,12924,12927],{"class":89,"line":3559},[87,12925,12926],{"class":171},"    delete[]",[87,12928,12929],{"class":97}," arr;\n",[87,12931,12932],{"class":89,"line":3565},[87,12933,123],{"class":97},[87,12935,12936],{"class":89,"line":3571},[87,12937,3355],{"emptyLinePlaceholder":1029},[87,12939,12940,12942,12944],{"class":89,"line":3576},[87,12941,1105],{"class":171},[87,12943,2928],{"class":205},[87,12945,2931],{"class":97},[87,12947,12948],{"class":89,"line":8898},[87,12949,2503],{"class":97},[87,12951,12952,12954],{"class":89,"line":8922},[87,12953,6583],{"class":205},[87,12955,6586],{"class":97},[87,12957,12958,12960],{"class":89,"line":8927},[87,12959,6652],{"class":205},[87,12961,6586],{"class":97},[87,12963,12964],{"class":89,"line":8933},[87,12965,123],{"class":97},[1006,12967,12968],{},"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":82,"searchDepth":101,"depth":101,"links":12970},[12971],{"id":11639,"depth":101,"text":11640,"children":12972},[12973,12974],{"id":11671,"depth":120,"text":11672},{"id":12299,"depth":120,"text":12300},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11631,"description":82},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12981,"title":12982,"body":12983,"description":82,"extension":1027,"meta":14464,"navigation":1029,"path":14465,"seo":14466,"stem":14467,"__hash__":14468},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12984,"toc":14456},[12985,12988,12992,12995,12998,13167,13171,13176,13193,13198,13350,13354,13357,13360,13754,13758,13761,13766,13769,14081,14085,14091,14251,14253,14261,14265,14268,14275,14453],[10,12986,12982],{"id":12987},"_6引用",[14,12989,12991],{"id":12990},"_61引用基本用法","6.1引用基本用法",[19,12993,12994],{},"引用的本质：给变量起别名",[19,12996,12997],{},"语法：数据类型 &别名=原名",[77,12999,13001],{"className":1091,"code":13000,"language":1093,"meta":82,"style":82},"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",[84,13002,13003,13011,13015,13027,13039,13043,13062,13081,13085,13096,13100,13119,13137,13141,13151,13155,13163],{"__ignoreMap":82},[87,13004,13005,13007,13009],{"class":89,"line":90},[87,13006,1105],{"class":171},[87,13008,2928],{"class":205},[87,13010,11803],{"class":97},[87,13012,13013],{"class":89,"line":101},[87,13014,3355],{"emptyLinePlaceholder":1029},[87,13016,13017,13019,13021,13023,13025],{"class":89,"line":120},[87,13018,2940],{"class":171},[87,13020,11819],{"class":97},[87,13022,946],{"class":171},[87,13024,2993],{"class":104},[87,13026,117],{"class":97},[87,13028,13029,13031,13033,13035,13037],{"class":89,"line":222},[87,13030,2940],{"class":171},[87,13032,11534],{"class":171},[87,13034,11895],{"class":97},[87,13036,946],{"class":171},[87,13038,2390],{"class":97},[87,13040,13041],{"class":89,"line":234},[87,13042,3355],{"emptyLinePlaceholder":1029},[87,13044,13045,13047,13049,13052,13054,13056,13058,13060],{"class":89,"line":256},[87,13046,7479],{"class":97},[87,13048,2134],{"class":171},[87,13050,13051],{"class":949}," \"a = \"",[87,13053,2402],{"class":171},[87,13055,11819],{"class":97},[87,13057,2134],{"class":171},[87,13059,12419],{"class":97},[87,13061,8218],{"class":199},[87,13063,13064,13066,13068,13071,13073,13075,13077,13079],{"class":89,"line":269},[87,13065,7479],{"class":97},[87,13067,2134],{"class":171},[87,13069,13070],{"class":949}," \"b = \"",[87,13072,2402],{"class":171},[87,13074,11832],{"class":97},[87,13076,2134],{"class":171},[87,13078,12419],{"class":97},[87,13080,8218],{"class":199},[87,13082,13083],{"class":89,"line":463},[87,13084,3355],{"emptyLinePlaceholder":1029},[87,13086,13087,13090,13092,13094],{"class":89,"line":469},[87,13088,13089],{"class":97},"    b ",[87,13091,946],{"class":171},[87,13093,6704],{"class":104},[87,13095,117],{"class":97},[87,13097,13098],{"class":89,"line":2287},[87,13099,3355],{"emptyLinePlaceholder":1029},[87,13101,13102,13104,13106,13108,13110,13112,13114,13116],{"class":89,"line":2568},[87,13103,7479],{"class":97},[87,13105,2134],{"class":171},[87,13107,13051],{"class":949},[87,13109,2402],{"class":171},[87,13111,11819],{"class":97},[87,13113,2134],{"class":171},[87,13115,12419],{"class":97},[87,13117,13118],{"class":199},"\u002F\u002F100\n",[87,13120,13121,13123,13125,13127,13129,13131,13133,13135],{"class":89,"line":2573},[87,13122,7479],{"class":97},[87,13124,2134],{"class":171},[87,13126,13070],{"class":949},[87,13128,2402],{"class":171},[87,13130,11832],{"class":97},[87,13132,2134],{"class":171},[87,13134,12419],{"class":97},[87,13136,13118],{"class":199},[87,13138,13139],{"class":89,"line":2579},[87,13140,3355],{"emptyLinePlaceholder":1029},[87,13142,13143,13145,13147,13149],{"class":89,"line":2584},[87,13144,3258],{"class":205},[87,13146,165],{"class":97},[87,13148,3263],{"class":949},[87,13150,175],{"class":97},[87,13152,13153],{"class":89,"line":2598},[87,13154,3355],{"emptyLinePlaceholder":1029},[87,13156,13157,13159,13161],{"class":89,"line":2603},[87,13158,5044],{"class":171},[87,13160,577],{"class":104},[87,13162,117],{"class":97},[87,13164,13165],{"class":89,"line":2609},[87,13166,123],{"class":97},[14,13168,13170],{"id":13169},"_62引用的注意事项","6.2引用的注意事项",[1055,13172,13173],{},[29,13174,13175],{},"引用必须要初始化",[77,13177,13179],{"className":1091,"code":13178,"language":1093,"meta":82,"style":82},"int &b;\u002F\u002F非常错误！\n",[84,13180,13181],{"__ignoreMap":82},[87,13182,13183,13185,13187,13190],{"class":89,"line":90},[87,13184,1105],{"class":171},[87,13186,11534],{"class":171},[87,13188,13189],{"class":97},"b;",[87,13191,13192],{"class":199},"\u002F\u002F非常错误！\n",[1055,13194,13195],{"start":101},[29,13196,13197],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[77,13199,13201],{"className":1091,"code":13200,"language":1093,"meta":82,"style":82},"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",[84,13202,13203,13211,13223,13235,13243,13259,13272,13290,13308,13328,13338,13346],{"__ignoreMap":82},[87,13204,13205,13207,13209],{"class":89,"line":90},[87,13206,1105],{"class":171},[87,13208,2928],{"class":205},[87,13210,11803],{"class":97},[87,13212,13213,13215,13217,13219,13221],{"class":89,"line":101},[87,13214,2940],{"class":171},[87,13216,11819],{"class":97},[87,13218,946],{"class":171},[87,13220,2993],{"class":104},[87,13222,117],{"class":97},[87,13224,13225,13227,13229,13231,13233],{"class":89,"line":120},[87,13226,2940],{"class":171},[87,13228,11832],{"class":97},[87,13230,946],{"class":171},[87,13232,9900],{"class":104},[87,13234,117],{"class":97},[87,13236,13237,13240],{"class":89,"line":222},[87,13238,13239],{"class":199},"    \u002F\u002Fint &c;",[87,13241,13242],{"class":199}," \u002F\u002F错误，引用必须初始化\n",[87,13244,13245,13247,13249,13251,13253,13256],{"class":89,"line":234},[87,13246,2940],{"class":171},[87,13248,11534],{"class":171},[87,13250,3900],{"class":97},[87,13252,946],{"class":171},[87,13254,13255],{"class":97}," a;",[87,13257,13258],{"class":199}," \u002F\u002F一旦初始化后，就不可以更改\n",[87,13260,13261,13264,13266,13269],{"class":89,"line":256},[87,13262,13263],{"class":97},"    c ",[87,13265,946],{"class":171},[87,13267,13268],{"class":97}," b;",[87,13270,13271],{"class":199}," \u002F\u002F这是赋值操作，不是更改引用\n",[87,13273,13274,13276,13278,13280,13282,13284,13286,13288],{"class":89,"line":269},[87,13275,7479],{"class":97},[87,13277,2134],{"class":171},[87,13279,13051],{"class":949},[87,13281,2402],{"class":171},[87,13283,11819],{"class":97},[87,13285,2134],{"class":171},[87,13287,12419],{"class":97},[87,13289,8203],{"class":199},[87,13291,13292,13294,13296,13298,13300,13302,13304,13306],{"class":89,"line":463},[87,13293,7479],{"class":97},[87,13295,2134],{"class":171},[87,13297,13070],{"class":949},[87,13299,2402],{"class":171},[87,13301,11832],{"class":97},[87,13303,2134],{"class":171},[87,13305,12419],{"class":97},[87,13307,8203],{"class":199},[87,13309,13310,13312,13314,13317,13319,13322,13324,13326],{"class":89,"line":469},[87,13311,7479],{"class":97},[87,13313,2134],{"class":171},[87,13315,13316],{"class":949}," \"c = \"",[87,13318,2402],{"class":171},[87,13320,13321],{"class":97}," c ",[87,13323,2134],{"class":171},[87,13325,12419],{"class":97},[87,13327,8203],{"class":199},[87,13329,13330,13332,13334,13336],{"class":89,"line":2287},[87,13331,3258],{"class":205},[87,13333,165],{"class":97},[87,13335,3263],{"class":949},[87,13337,175],{"class":97},[87,13339,13340,13342,13344],{"class":89,"line":2568},[87,13341,5044],{"class":171},[87,13343,577],{"class":104},[87,13345,117],{"class":97},[87,13347,13348],{"class":89,"line":2573},[87,13349,123],{"class":97},[14,13351,13353],{"id":13352},"_63引用做函数参数","6.3引用做函数参数",[19,13355,13356],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,13358,13359],{},"优点：可以简化指针修改实参",[77,13361,13363],{"className":1091,"code":13362,"language":1093,"meta":82,"style":82},"\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",[84,13364,13365,13370,13393,13404,13414,13423,13427,13431,13436,13458,13470,13482,13492,13496,13500,13505,13527,13537,13545,13553,13557,13561,13569,13573,13585,13597,13601,13612,13638,13642,13662,13686,13690,13700,13724,13728,13738,13742,13750],{"__ignoreMap":82},[87,13366,13367],{"class":89,"line":90},[87,13368,13369],{"class":199},"\u002F\u002F1. 值传递\n",[87,13371,13372,13374,13377,13379,13381,13383,13386,13388,13390],{"class":89,"line":101},[87,13373,6314],{"class":171},[87,13375,13376],{"class":205}," mySwap01",[87,13378,165],{"class":97},[87,13380,1105],{"class":171},[87,13382,2356],{"class":492},[87,13384,13385],{"class":97},", ",[87,13387,1105],{"class":171},[87,13389,3787],{"class":492},[87,13391,13392],{"class":97},") {\n",[87,13394,13395,13397,13400,13402],{"class":89,"line":120},[87,13396,2940],{"class":171},[87,13398,13399],{"class":97}," temp ",[87,13401,946],{"class":171},[87,13403,2390],{"class":97},[87,13405,13406,13409,13411],{"class":89,"line":222},[87,13407,13408],{"class":97},"    a ",[87,13410,946],{"class":171},[87,13412,13413],{"class":97}," b;\n",[87,13415,13416,13418,13420],{"class":89,"line":234},[87,13417,13089],{"class":97},[87,13419,946],{"class":171},[87,13421,13422],{"class":97}," temp;\n",[87,13424,13425],{"class":89,"line":256},[87,13426,123],{"class":97},[87,13428,13429],{"class":89,"line":269},[87,13430,3355],{"emptyLinePlaceholder":1029},[87,13432,13433],{"class":89,"line":463},[87,13434,13435],{"class":199},"\u002F\u002F2. 地址传递\n",[87,13437,13438,13440,13443,13445,13448,13450,13452,13454,13456],{"class":89,"line":469},[87,13439,6314],{"class":171},[87,13441,13442],{"class":205}," mySwap02",[87,13444,165],{"class":97},[87,13446,13447],{"class":171},"int*",[87,13449,2356],{"class":492},[87,13451,13385],{"class":97},[87,13453,13447],{"class":171},[87,13455,3787],{"class":492},[87,13457,13392],{"class":97},[87,13459,13460,13462,13464,13466,13468],{"class":89,"line":2287},[87,13461,2940],{"class":171},[87,13463,13399],{"class":97},[87,13465,946],{"class":171},[87,13467,7468],{"class":171},[87,13469,7147],{"class":97},[87,13471,13472,13474,13476,13478,13480],{"class":89,"line":2568},[87,13473,7353],{"class":171},[87,13475,11869],{"class":97},[87,13477,946],{"class":171},[87,13479,7468],{"class":171},[87,13481,7019],{"class":97},[87,13483,13484,13486,13488,13490],{"class":89,"line":2573},[87,13485,7353],{"class":171},[87,13487,11895],{"class":97},[87,13489,946],{"class":171},[87,13491,13422],{"class":97},[87,13493,13494],{"class":89,"line":2579},[87,13495,123],{"class":97},[87,13497,13498],{"class":89,"line":2584},[87,13499,3355],{"emptyLinePlaceholder":1029},[87,13501,13502],{"class":89,"line":2598},[87,13503,13504],{"class":199},"\u002F\u002F3. 引用传递\n",[87,13506,13507,13509,13512,13514,13517,13519,13521,13523,13525],{"class":89,"line":2603},[87,13508,6314],{"class":171},[87,13510,13511],{"class":205}," mySwap03",[87,13513,165],{"class":97},[87,13515,13516],{"class":171},"int&",[87,13518,2356],{"class":492},[87,13520,13385],{"class":97},[87,13522,13516],{"class":171},[87,13524,3787],{"class":492},[87,13526,13392],{"class":97},[87,13528,13529,13531,13533,13535],{"class":89,"line":2609},[87,13530,2940],{"class":171},[87,13532,13399],{"class":97},[87,13534,946],{"class":171},[87,13536,2390],{"class":97},[87,13538,13539,13541,13543],{"class":89,"line":2630},[87,13540,13408],{"class":97},[87,13542,946],{"class":171},[87,13544,13413],{"class":97},[87,13546,13547,13549,13551],{"class":89,"line":2635},[87,13548,13089],{"class":97},[87,13550,946],{"class":171},[87,13552,13422],{"class":97},[87,13554,13555],{"class":89,"line":2649},[87,13556,123],{"class":97},[87,13558,13559],{"class":89,"line":2654},[87,13560,3355],{"emptyLinePlaceholder":1029},[87,13562,13563,13565,13567],{"class":89,"line":2683},[87,13564,1105],{"class":171},[87,13566,2928],{"class":205},[87,13568,11803],{"class":97},[87,13570,13571],{"class":89,"line":2688},[87,13572,3355],{"emptyLinePlaceholder":1029},[87,13574,13575,13577,13579,13581,13583],{"class":89,"line":2705},[87,13576,2940],{"class":171},[87,13578,11819],{"class":97},[87,13580,946],{"class":171},[87,13582,2993],{"class":104},[87,13584,117],{"class":97},[87,13586,13587,13589,13591,13593,13595],{"class":89,"line":2710},[87,13588,2940],{"class":171},[87,13590,11832],{"class":97},[87,13592,946],{"class":171},[87,13594,9900],{"class":104},[87,13596,117],{"class":97},[87,13598,13599],{"class":89,"line":2715},[87,13600,3355],{"emptyLinePlaceholder":1029},[87,13602,13603,13606,13609],{"class":89,"line":2720},[87,13604,13605],{"class":205},"    mySwap01",[87,13607,13608],{"class":97},"(a, b);",[87,13610,13611],{"class":199},"\u002F\u002F值传递，形参不会修饰实参\n",[87,13613,13614,13616,13618,13621,13623,13625,13627,13630,13632,13634,13636],{"class":89,"line":2734},[87,13615,7479],{"class":97},[87,13617,2134],{"class":171},[87,13619,13620],{"class":949}," \"a:\"",[87,13622,2402],{"class":171},[87,13624,11819],{"class":97},[87,13626,2134],{"class":171},[87,13628,13629],{"class":949}," \" b:\"",[87,13631,2402],{"class":171},[87,13633,11832],{"class":97},[87,13635,2134],{"class":171},[87,13637,9790],{"class":97},[87,13639,13640],{"class":89,"line":2739},[87,13641,3355],{"emptyLinePlaceholder":1029},[87,13643,13644,13647,13649,13651,13654,13656,13659],{"class":89,"line":3532},[87,13645,13646],{"class":205},"    mySwap02",[87,13648,165],{"class":97},[87,13650,1448],{"class":171},[87,13652,13653],{"class":97},"a, ",[87,13655,1448],{"class":171},[87,13657,13658],{"class":97},"b);",[87,13660,13661],{"class":199},"\u002F\u002F地址传递，形参会修饰实参\n",[87,13663,13664,13666,13668,13670,13672,13674,13676,13678,13680,13682,13684],{"class":89,"line":3546},[87,13665,7479],{"class":97},[87,13667,2134],{"class":171},[87,13669,13620],{"class":949},[87,13671,2402],{"class":171},[87,13673,11819],{"class":97},[87,13675,2134],{"class":171},[87,13677,13629],{"class":949},[87,13679,2402],{"class":171},[87,13681,11832],{"class":97},[87,13683,2134],{"class":171},[87,13685,9790],{"class":97},[87,13687,13688],{"class":89,"line":3554},[87,13689,3355],{"emptyLinePlaceholder":1029},[87,13691,13692,13695,13697],{"class":89,"line":3559},[87,13693,13694],{"class":205},"    mySwap03",[87,13696,13608],{"class":97},[87,13698,13699],{"class":199},"\u002F\u002F引用传递，形参会修饰实参\n",[87,13701,13702,13704,13706,13708,13710,13712,13714,13716,13718,13720,13722],{"class":89,"line":3565},[87,13703,7479],{"class":97},[87,13705,2134],{"class":171},[87,13707,13620],{"class":949},[87,13709,2402],{"class":171},[87,13711,11819],{"class":97},[87,13713,2134],{"class":171},[87,13715,13629],{"class":949},[87,13717,2402],{"class":171},[87,13719,11832],{"class":97},[87,13721,2134],{"class":171},[87,13723,9790],{"class":97},[87,13725,13726],{"class":89,"line":3571},[87,13727,3355],{"emptyLinePlaceholder":1029},[87,13729,13730,13732,13734,13736],{"class":89,"line":3576},[87,13731,3258],{"class":205},[87,13733,165],{"class":97},[87,13735,3263],{"class":949},[87,13737,175],{"class":97},[87,13739,13740],{"class":89,"line":8898},[87,13741,3355],{"emptyLinePlaceholder":1029},[87,13743,13744,13746,13748],{"class":89,"line":8922},[87,13745,5044],{"class":171},[87,13747,577],{"class":104},[87,13749,117],{"class":97},[87,13751,13752],{"class":89,"line":8927},[87,13753,123],{"class":97},[14,13755,13757],{"id":13756},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,13759,13760],{},"作用：引用是可以作为函数的返回值存在的",[19,13762,9975,13763],{},[57,13764,13765],{},"不要返回局部变量引用",[19,13767,13768],{},"用法：函数调用作为左值",[77,13770,13772],{"className":10891,"code":13771,"language":10893,"meta":82,"style":82},"\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",[84,13773,13774,13779,13787,13802,13808,13812,13816,13821,13829,13846,13852,13856,13860,13868,13872,13877,13891,13911,13930,13934,13939,13952,13972,13990,13994,14010,14014,14033,14051,14055,14065,14069,14077],{"__ignoreMap":82},[87,13775,13776],{"class":89,"line":90},[87,13777,13778],{"class":199},"\u002F\u002F返回局部变量引用\n",[87,13780,13781,13783,13785],{"class":89,"line":101},[87,13782,13516],{"class":171},[87,13784,6538],{"class":205},[87,13786,11803],{"class":97},[87,13788,13789,13791,13793,13795,13797,13799],{"class":89,"line":120},[87,13790,2940],{"class":171},[87,13792,11819],{"class":97},[87,13794,946],{"class":171},[87,13796,2993],{"class":104},[87,13798,1155],{"class":97},[87,13800,13801],{"class":199}," \u002F\u002F局部变量\n",[87,13803,13804,13806],{"class":89,"line":222},[87,13805,5044],{"class":171},[87,13807,2390],{"class":97},[87,13809,13810],{"class":89,"line":234},[87,13811,123],{"class":97},[87,13813,13814],{"class":89,"line":256},[87,13815,3355],{"emptyLinePlaceholder":1029},[87,13817,13818],{"class":89,"line":269},[87,13819,13820],{"class":199},"\u002F\u002F返回静态变量引用\n",[87,13822,13823,13825,13827],{"class":89,"line":463},[87,13824,13516],{"class":171},[87,13826,6607],{"class":205},[87,13828,11803],{"class":97},[87,13830,13831,13833,13835,13837,13839,13841,13843],{"class":89,"line":469},[87,13832,11970],{"class":171},[87,13834,3337],{"class":171},[87,13836,11819],{"class":97},[87,13838,946],{"class":171},[87,13840,9900],{"class":104},[87,13842,1155],{"class":97},[87,13844,13845],{"class":199},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[87,13847,13848,13850],{"class":89,"line":2287},[87,13849,5044],{"class":171},[87,13851,2390],{"class":97},[87,13853,13854],{"class":89,"line":2568},[87,13855,123],{"class":97},[87,13857,13858],{"class":89,"line":2573},[87,13859,3355],{"emptyLinePlaceholder":1029},[87,13861,13862,13864,13866],{"class":89,"line":2579},[87,13863,1105],{"class":171},[87,13865,2928],{"class":205},[87,13867,11803],{"class":97},[87,13869,13870],{"class":89,"line":2584},[87,13871,3355],{"emptyLinePlaceholder":1029},[87,13873,13874],{"class":89,"line":2598},[87,13875,13876],{"class":199},"    \u002F\u002F不能返回局部变量的引用\n",[87,13878,13879,13882,13885,13887,13889],{"class":89,"line":2603},[87,13880,13881],{"class":171},"    int&",[87,13883,13884],{"class":97}," ref ",[87,13886,946],{"class":171},[87,13888,6538],{"class":205},[87,13890,6586],{"class":97},[87,13892,13893,13895,13897,13900,13902,13904,13906,13908],{"class":89,"line":2609},[87,13894,7479],{"class":97},[87,13896,2134],{"class":171},[87,13898,13899],{"class":949}," \"ref = \"",[87,13901,2402],{"class":171},[87,13903,13884],{"class":97},[87,13905,2134],{"class":171},[87,13907,12419],{"class":97},[87,13909,13910],{"class":199},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[87,13912,13913,13915,13917,13919,13921,13923,13925,13927],{"class":89,"line":2630},[87,13914,7479],{"class":97},[87,13916,2134],{"class":171},[87,13918,13899],{"class":949},[87,13920,2402],{"class":171},[87,13922,13884],{"class":97},[87,13924,2134],{"class":171},[87,13926,12419],{"class":97},[87,13928,13929],{"class":199},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[87,13931,13932],{"class":89,"line":2635},[87,13933,3355],{"emptyLinePlaceholder":1029},[87,13935,13936],{"class":89,"line":2649},[87,13937,13938],{"class":199},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[87,13940,13941,13943,13946,13948,13950],{"class":89,"line":2654},[87,13942,13881],{"class":171},[87,13944,13945],{"class":97}," ref2 ",[87,13947,946],{"class":171},[87,13949,6607],{"class":205},[87,13951,6586],{"class":97},[87,13953,13954,13956,13958,13961,13963,13965,13967,13969],{"class":89,"line":2683},[87,13955,7479],{"class":97},[87,13957,2134],{"class":171},[87,13959,13960],{"class":949}," \"ref2 = \"",[87,13962,2402],{"class":171},[87,13964,13945],{"class":97},[87,13966,2134],{"class":171},[87,13968,12419],{"class":97},[87,13970,13971],{"class":199}," \u002F\u002F20\n",[87,13973,13974,13976,13978,13980,13982,13984,13986,13988],{"class":89,"line":2688},[87,13975,7479],{"class":97},[87,13977,2134],{"class":171},[87,13979,13960],{"class":949},[87,13981,2402],{"class":171},[87,13983,13945],{"class":97},[87,13985,2134],{"class":171},[87,13987,12419],{"class":97},[87,13989,13971],{"class":199},[87,13991,13992],{"class":89,"line":2705},[87,13993,3355],{"emptyLinePlaceholder":1029},[87,13995,13996,13998,14001,14003,14005,14007],{"class":89,"line":2710},[87,13997,6652],{"class":205},[87,13999,14000],{"class":97},"() ",[87,14002,946],{"class":171},[87,14004,3953],{"class":104},[87,14006,1155],{"class":97},[87,14008,14009],{"class":199},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[87,14011,14012],{"class":89,"line":2715},[87,14013,3355],{"emptyLinePlaceholder":1029},[87,14015,14016,14018,14020,14022,14024,14026,14028,14030],{"class":89,"line":2720},[87,14017,7479],{"class":97},[87,14019,2134],{"class":171},[87,14021,13960],{"class":949},[87,14023,2402],{"class":171},[87,14025,13945],{"class":97},[87,14027,2134],{"class":171},[87,14029,12419],{"class":97},[87,14031,14032],{"class":199}," \u002F\u002F1000\n",[87,14034,14035,14037,14039,14041,14043,14045,14047,14049],{"class":89,"line":2734},[87,14036,7479],{"class":97},[87,14038,2134],{"class":171},[87,14040,13960],{"class":949},[87,14042,2402],{"class":171},[87,14044,13945],{"class":97},[87,14046,2134],{"class":171},[87,14048,12419],{"class":97},[87,14050,14032],{"class":199},[87,14052,14053],{"class":89,"line":2739},[87,14054,3355],{"emptyLinePlaceholder":1029},[87,14056,14057,14059,14061,14063],{"class":89,"line":3532},[87,14058,3258],{"class":205},[87,14060,165],{"class":97},[87,14062,3263],{"class":949},[87,14064,175],{"class":97},[87,14066,14067],{"class":89,"line":3546},[87,14068,3355],{"emptyLinePlaceholder":1029},[87,14070,14071,14073,14075],{"class":89,"line":3554},[87,14072,5044],{"class":171},[87,14074,577],{"class":104},[87,14076,117],{"class":97},[87,14078,14079],{"class":89,"line":3559},[87,14080,123],{"class":97},[14,14082,14084],{"id":14083},"_65引用的本质","6.5引用的本质",[19,14086,14087,14088],{},"本质：",[57,14089,14090],{},"引用的本质在c++内部实现是一个指针常量.",[77,14092,14094],{"className":1091,"code":14093,"language":1093,"meta":82,"style":82},"\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",[84,14095,14096,14101,14117,14131,14135,14144,14156,14161,14166,14177,14190,14194,14210,14227,14231,14239,14247],{"__ignoreMap":82},[87,14097,14098],{"class":89,"line":90},[87,14099,14100],{"class":199},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[87,14102,14103,14105,14107,14109,14111,14114],{"class":89,"line":101},[87,14104,6314],{"class":171},[87,14106,12335],{"class":205},[87,14108,165],{"class":97},[87,14110,13516],{"class":171},[87,14112,14113],{"class":492}," ref",[87,14115,14116],{"class":97},"){\n",[87,14118,14119,14122,14124,14126,14128],{"class":89,"line":120},[87,14120,14121],{"class":97},"    ref ",[87,14123,946],{"class":171},[87,14125,6704],{"class":104},[87,14127,1155],{"class":97},[87,14129,14130],{"class":199}," \u002F\u002F ref是引用，转换为*ref = 100\n",[87,14132,14133],{"class":89,"line":222},[87,14134,123],{"class":97},[87,14136,14137,14139,14141],{"class":89,"line":234},[87,14138,1105],{"class":171},[87,14140,2928],{"class":205},[87,14142,14143],{"class":97},"(){\n",[87,14145,14146,14148,14150,14152,14154],{"class":89,"line":256},[87,14147,2940],{"class":171},[87,14149,11819],{"class":97},[87,14151,946],{"class":171},[87,14153,2993],{"class":104},[87,14155,117],{"class":97},[87,14157,14158],{"class":89,"line":269},[87,14159,14160],{"class":97},"    \n",[87,14162,14163],{"class":89,"line":463},[87,14164,14165],{"class":199},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[87,14167,14168,14170,14172,14174],{"class":89,"line":469},[87,14169,13881],{"class":171},[87,14171,13884],{"class":97},[87,14173,946],{"class":171},[87,14175,14176],{"class":97}," a; \n",[87,14178,14179,14181,14183,14185,14187],{"class":89,"line":2287},[87,14180,14121],{"class":97},[87,14182,946],{"class":171},[87,14184,9900],{"class":104},[87,14186,1155],{"class":97},[87,14188,14189],{"class":199}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[87,14191,14192],{"class":89,"line":2568},[87,14193,14160],{"class":97},[87,14195,14196,14198,14200,14202,14204,14206,14208],{"class":89,"line":2573},[87,14197,7479],{"class":97},[87,14199,2134],{"class":171},[87,14201,13620],{"class":949},[87,14203,2402],{"class":171},[87,14205,11819],{"class":97},[87,14207,2134],{"class":171},[87,14209,9790],{"class":97},[87,14211,14212,14214,14216,14219,14221,14223,14225],{"class":89,"line":2579},[87,14213,7479],{"class":97},[87,14215,2134],{"class":171},[87,14217,14218],{"class":949}," \"ref:\"",[87,14220,2402],{"class":171},[87,14222,13884],{"class":97},[87,14224,2134],{"class":171},[87,14226,9790],{"class":97},[87,14228,14229],{"class":89,"line":2584},[87,14230,14160],{"class":97},[87,14232,14233,14236],{"class":89,"line":2598},[87,14234,14235],{"class":205},"    func",[87,14237,14238],{"class":97},"(a);\n",[87,14240,14241,14243,14245],{"class":89,"line":2603},[87,14242,5044],{"class":171},[87,14244,577],{"class":104},[87,14246,117],{"class":97},[87,14248,14249],{"class":89,"line":2609},[87,14250,123],{"class":97},[19,14252,12282],{},[1055,14254,14255,14258],{},[29,14256,14257],{},"引用的本质，就是一个指针常量",[29,14259,14260],{},"引用一旦初始化，就不可以发生改变",[14,14262,14264],{"id":14263},"_66常量引用","6.6常量引用",[19,14266,14267],{},"作用：常量引用主要用来修饰形参",[19,14269,14270,14271,14274],{},"在函数形参列表中，可以加",[57,14272,14273],{},"const修饰形参","，防止形参改变实参",[77,14276,14278],{"className":1091,"code":14277,"language":1093,"meta":82,"style":82},"\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",[84,14279,14280,14285,14290,14309,14314,14327,14331,14335,14343,14347,14352,14357,14371,14375,14383,14395,14399,14404,14416,14423,14427,14437,14441,14449],{"__ignoreMap":82},[87,14281,14282],{"class":89,"line":90},[87,14283,14284],{"class":199},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[87,14286,14287],{"class":89,"line":101},[87,14288,14289],{"class":199},"\u002F\u002F加上const就不能修改实参的\n",[87,14291,14292,14294,14297,14299,14301,14304,14307],{"class":89,"line":120},[87,14293,6314],{"class":171},[87,14295,14296],{"class":205}," showValue",[87,14298,165],{"class":97},[87,14300,7742],{"class":171},[87,14302,14303],{"class":171}," int&",[87,14305,14306],{"class":492}," v",[87,14308,13392],{"class":97},[87,14310,14311],{"class":89,"line":222},[87,14312,14313],{"class":199},"    \u002F\u002Fv += 100;\n",[87,14315,14316,14318,14320,14323,14325],{"class":89,"line":234},[87,14317,7479],{"class":97},[87,14319,2134],{"class":171},[87,14321,14322],{"class":97}," v ",[87,14324,2134],{"class":171},[87,14326,9790],{"class":97},[87,14328,14329],{"class":89,"line":256},[87,14330,123],{"class":97},[87,14332,14333],{"class":89,"line":269},[87,14334,3355],{"emptyLinePlaceholder":1029},[87,14336,14337,14339,14341],{"class":89,"line":463},[87,14338,1105],{"class":171},[87,14340,2928],{"class":205},[87,14342,11803],{"class":97},[87,14344,14345],{"class":89,"line":469},[87,14346,3355],{"emptyLinePlaceholder":1029},[87,14348,14349],{"class":89,"line":2287},[87,14350,14351],{"class":199},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[87,14353,14354],{"class":89,"line":2568},[87,14355,14356],{"class":199},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[87,14358,14359,14361,14363,14365,14367,14369],{"class":89,"line":2573},[87,14360,12171],{"class":171},[87,14362,14303],{"class":171},[87,14364,13884],{"class":97},[87,14366,946],{"class":171},[87,14368,2993],{"class":104},[87,14370,117],{"class":97},[87,14372,14373],{"class":89,"line":2579},[87,14374,3355],{"emptyLinePlaceholder":1029},[87,14376,14377,14380],{"class":89,"line":2584},[87,14378,14379],{"class":199},"    \u002F\u002Fref = 100;",[87,14381,14382],{"class":199},"  \u002F\u002F加入const后不可以修改变量\n",[87,14384,14385,14387,14389,14391,14393],{"class":89,"line":2598},[87,14386,7479],{"class":97},[87,14388,2134],{"class":171},[87,14390,13884],{"class":97},[87,14392,2134],{"class":171},[87,14394,9790],{"class":97},[87,14396,14397],{"class":89,"line":2603},[87,14398,3355],{"emptyLinePlaceholder":1029},[87,14400,14401],{"class":89,"line":2609},[87,14402,14403],{"class":199},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[87,14405,14406,14408,14410,14412,14414],{"class":89,"line":2630},[87,14407,2940],{"class":171},[87,14409,11819],{"class":97},[87,14411,946],{"class":171},[87,14413,2993],{"class":104},[87,14415,117],{"class":97},[87,14417,14418,14421],{"class":89,"line":2635},[87,14419,14420],{"class":205},"    showValue",[87,14422,14238],{"class":97},[87,14424,14425],{"class":89,"line":2649},[87,14426,3355],{"emptyLinePlaceholder":1029},[87,14428,14429,14431,14433,14435],{"class":89,"line":2654},[87,14430,3258],{"class":205},[87,14432,165],{"class":97},[87,14434,3263],{"class":949},[87,14436,175],{"class":97},[87,14438,14439],{"class":89,"line":2683},[87,14440,3355],{"emptyLinePlaceholder":1029},[87,14442,14443,14445,14447],{"class":89,"line":2688},[87,14444,5044],{"class":171},[87,14446,577],{"class":104},[87,14448,117],{"class":97},[87,14450,14451],{"class":89,"line":2705},[87,14452,123],{"class":97},[1006,14454,14455],{},"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":82,"searchDepth":101,"depth":101,"links":14457},[14458,14459,14460,14461,14462,14463],{"id":12990,"depth":101,"text":12991},{"id":13169,"depth":101,"text":13170},{"id":13352,"depth":101,"text":13353},{"id":13756,"depth":101,"text":13757},{"id":14083,"depth":101,"text":14084},{"id":14263,"depth":101,"text":14264},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12982,"description":82},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14470,"title":14471,"body":14472,"description":82,"extension":1027,"meta":15553,"navigation":1029,"path":15554,"seo":15555,"stem":15556,"__hash__":15557},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14473,"toc":15545},[14474,14477,14481,14484,14489,14721,14723,14734,14738,14741,14749,14853,14856,14860,14863,14867,14870,14875,14897,14903,15230,15233,15237,15245,15542],[10,14475,14471],{"id":14476},"_7函数高级部分",[14,14478,14480],{"id":14479},"_71函数默认参数","7.1函数默认参数",[19,14482,14483],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,14485,6134,14486],{},[84,14487,14488],{}," 返回值类型  函数名 （参数= 默认值）{}",[77,14490,14492],{"className":1091,"code":14491,"language":1093,"meta":82,"style":82},"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",[84,14493,14494,14529,14544,14548,14552,14557,14562,14591,14611,14621,14625,14629,14637,14641,14669,14691,14695,14705,14709,14717],{"__ignoreMap":82},[87,14495,14496,14498,14500,14502,14504,14506,14508,14510,14512,14515,14517,14519,14521,14523,14525,14527],{"class":89,"line":90},[87,14497,1105],{"class":171},[87,14499,12335],{"class":205},[87,14501,165],{"class":97},[87,14503,1105],{"class":171},[87,14505,2356],{"class":492},[87,14507,13385],{"class":97},[87,14509,1105],{"class":171},[87,14511,3787],{"class":492},[87,14513,14514],{"class":171}," =",[87,14516,2993],{"class":104},[87,14518,13385],{"class":97},[87,14520,1105],{"class":171},[87,14522,3803],{"class":492},[87,14524,14514],{"class":171},[87,14526,2993],{"class":104},[87,14528,13392],{"class":97},[87,14530,14531,14533,14535,14537,14539,14541],{"class":89,"line":101},[87,14532,5044],{"class":171},[87,14534,11819],{"class":97},[87,14536,1575],{"class":171},[87,14538,11832],{"class":97},[87,14540,1575],{"class":171},[87,14542,14543],{"class":97}," c;\n",[87,14545,14546],{"class":89,"line":120},[87,14547,123],{"class":97},[87,14549,14550],{"class":89,"line":222},[87,14551,3355],{"emptyLinePlaceholder":1029},[87,14553,14554],{"class":89,"line":234},[87,14555,14556],{"class":199},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[87,14558,14559],{"class":89,"line":256},[87,14560,14561],{"class":199},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[87,14563,14564,14566,14569,14571,14573,14575,14577,14579,14581,14583,14585,14587,14589],{"class":89,"line":269},[87,14565,1105],{"class":171},[87,14567,14568],{"class":205}," func2",[87,14570,165],{"class":97},[87,14572,1105],{"class":171},[87,14574,2356],{"class":492},[87,14576,14514],{"class":171},[87,14578,2993],{"class":104},[87,14580,13385],{"class":97},[87,14582,1105],{"class":171},[87,14584,3787],{"class":492},[87,14586,14514],{"class":171},[87,14588,2993],{"class":104},[87,14590,175],{"class":97},[87,14592,14593,14595,14597,14599,14601,14603,14605,14607,14609],{"class":89,"line":463},[87,14594,1105],{"class":171},[87,14596,14568],{"class":205},[87,14598,165],{"class":97},[87,14600,1105],{"class":171},[87,14602,2356],{"class":492},[87,14604,13385],{"class":97},[87,14606,1105],{"class":171},[87,14608,3787],{"class":492},[87,14610,13392],{"class":97},[87,14612,14613,14615,14617,14619],{"class":89,"line":469},[87,14614,5044],{"class":171},[87,14616,11819],{"class":97},[87,14618,1575],{"class":171},[87,14620,13413],{"class":97},[87,14622,14623],{"class":89,"line":2287},[87,14624,123],{"class":97},[87,14626,14627],{"class":89,"line":2568},[87,14628,3355],{"emptyLinePlaceholder":1029},[87,14630,14631,14633,14635],{"class":89,"line":2573},[87,14632,1105],{"class":171},[87,14634,2928],{"class":205},[87,14636,11803],{"class":97},[87,14638,14639],{"class":89,"line":2579},[87,14640,3355],{"emptyLinePlaceholder":1029},[87,14642,14643,14645,14647,14650,14652,14654,14656,14658,14660,14662,14665,14667],{"class":89,"line":2584},[87,14644,7479],{"class":97},[87,14646,2134],{"class":171},[87,14648,14649],{"class":949}," \"ret = \"",[87,14651,2402],{"class":171},[87,14653,12335],{"class":205},[87,14655,165],{"class":97},[87,14657,1792],{"class":104},[87,14659,13385],{"class":97},[87,14661,1792],{"class":104},[87,14663,14664],{"class":97},") ",[87,14666,2134],{"class":171},[87,14668,9790],{"class":97},[87,14670,14671,14673,14675,14677,14679,14681,14683,14685,14687,14689],{"class":89,"line":2598},[87,14672,7479],{"class":97},[87,14674,2134],{"class":171},[87,14676,14649],{"class":949},[87,14678,2402],{"class":171},[87,14680,12335],{"class":205},[87,14682,165],{"class":97},[87,14684,536],{"class":104},[87,14686,14664],{"class":97},[87,14688,2134],{"class":171},[87,14690,9790],{"class":97},[87,14692,14693],{"class":89,"line":2603},[87,14694,3355],{"emptyLinePlaceholder":1029},[87,14696,14697,14699,14701,14703],{"class":89,"line":2609},[87,14698,3258],{"class":205},[87,14700,165],{"class":97},[87,14702,3263],{"class":949},[87,14704,175],{"class":97},[87,14706,14707],{"class":89,"line":2630},[87,14708,3355],{"emptyLinePlaceholder":1029},[87,14710,14711,14713,14715],{"class":89,"line":2635},[87,14712,5044],{"class":171},[87,14714,577],{"class":104},[87,14716,117],{"class":97},[87,14718,14719],{"class":89,"line":2649},[87,14720,123],{"class":97},[19,14722,12282],{},[1055,14724,14725,14728,14731],{},[29,14726,14727],{},"我传就用我；没传就用你",[29,14729,14730],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[29,14732,14733],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,14735,14737],{"id":14736},"_72函数的占位参数","7.2函数的占位参数",[19,14739,14740],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,14742,14743,14745,14746],{},[57,14744,6134],{}," ",[84,14747,14748],{},"返回值类型 函数名 (数据类型){}",[77,14750,14752],{"className":1091,"code":14751,"language":1093,"meta":82,"style":82},"\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",[84,14753,14754,14759,14777,14790,14794,14802,14806,14823,14827,14837,14841,14849],{"__ignoreMap":82},[87,14755,14756],{"class":89,"line":90},[87,14757,14758],{"class":199},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[87,14760,14761,14763,14765,14767,14769,14771,14773,14775],{"class":89,"line":101},[87,14762,6314],{"class":171},[87,14764,12335],{"class":205},[87,14766,165],{"class":97},[87,14768,1105],{"class":171},[87,14770,2356],{"class":492},[87,14772,13385],{"class":97},[87,14774,1105],{"class":171},[87,14776,13392],{"class":97},[87,14778,14779,14781,14783,14786,14788],{"class":89,"line":120},[87,14780,7479],{"class":97},[87,14782,2134],{"class":171},[87,14784,14785],{"class":949}," \"this is func\"",[87,14787,2402],{"class":171},[87,14789,9790],{"class":97},[87,14791,14792],{"class":89,"line":222},[87,14793,123],{"class":97},[87,14795,14796,14798,14800],{"class":89,"line":234},[87,14797,1105],{"class":171},[87,14799,2928],{"class":205},[87,14801,11803],{"class":97},[87,14803,14804],{"class":89,"line":256},[87,14805,3355],{"emptyLinePlaceholder":1029},[87,14807,14808,14810,14812,14814,14816,14818,14820],{"class":89,"line":269},[87,14809,14235],{"class":205},[87,14811,165],{"class":97},[87,14813,242],{"class":104},[87,14815,1473],{"class":97},[87,14817,242],{"class":104},[87,14819,6916],{"class":97},[87,14821,14822],{"class":199}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[87,14824,14825],{"class":89,"line":463},[87,14826,3355],{"emptyLinePlaceholder":1029},[87,14828,14829,14831,14833,14835],{"class":89,"line":469},[87,14830,3258],{"class":205},[87,14832,165],{"class":97},[87,14834,3263],{"class":949},[87,14836,175],{"class":97},[87,14838,14839],{"class":89,"line":2287},[87,14840,3355],{"emptyLinePlaceholder":1029},[87,14842,14843,14845,14847],{"class":89,"line":2568},[87,14844,5044],{"class":171},[87,14846,577],{"class":104},[87,14848,117],{"class":97},[87,14850,14851],{"class":89,"line":2573},[87,14852,123],{"class":97},[19,14854,14855],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14857,14859],{"id":14858},"_73函数重载","7.3函数重载",[19,14861,14862],{},"意思是函数名是可以相同的",[44,14864,14866],{"id":14865},"_731基本语法","7.3.1基本语法",[19,14868,14869],{},"作用：函数名可以相同，提高复用性",[19,14871,14872],{},[57,14873,14874],{},"函数重载满足条件：",[26,14876,14877,14880,14883],{},[29,14878,14879],{},"同一个作用域下",[29,14881,14882],{},"函数名称相同",[29,14884,14885,14886,14889,14890,14893,14894],{},"函数参数",[57,14887,14888],{},"类型不同","  或者 ",[57,14891,14892],{},"个数不同"," 或者 ",[57,14895,14896],{},"顺序不同",[19,14898,14899,14902],{},[57,14900,14901],{},"注意:","  函数的返回值不可以作为函数重载的条件",[77,14904,14906],{"className":10891,"code":14905,"language":10893,"meta":82,"style":82},"\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",[84,14907,14908,14913,14921,14925,14938,14942,14956,14960,14973,14977,14992,14996,15009,15013,15034,15038,15051,15055,15075,15079,15092,15096,15100,15105,15110,15115,15120,15125,15129,15133,15141,15145,15151,15161,15171,15185,15200,15204,15214,15218,15226],{"__ignoreMap":82},[87,14909,14910],{"class":89,"line":90},[87,14911,14912],{"class":199},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[87,14914,14915,14917,14919],{"class":89,"line":101},[87,14916,6314],{"class":171},[87,14918,12335],{"class":205},[87,14920,2931],{"class":97},[87,14922,14923],{"class":89,"line":120},[87,14924,2503],{"class":97},[87,14926,14927,14929,14931,14934,14936],{"class":89,"line":222},[87,14928,7479],{"class":97},[87,14930,2134],{"class":171},[87,14932,14933],{"class":949}," \"func 的调用！\"",[87,14935,2402],{"class":171},[87,14937,9790],{"class":97},[87,14939,14940],{"class":89,"line":234},[87,14941,123],{"class":97},[87,14943,14944,14946,14948,14950,14952,14954],{"class":89,"line":256},[87,14945,6314],{"class":171},[87,14947,12335],{"class":205},[87,14949,165],{"class":97},[87,14951,1105],{"class":171},[87,14953,2356],{"class":492},[87,14955,1108],{"class":97},[87,14957,14958],{"class":89,"line":269},[87,14959,2503],{"class":97},[87,14961,14962,14964,14966,14969,14971],{"class":89,"line":463},[87,14963,7479],{"class":97},[87,14965,2134],{"class":171},[87,14967,14968],{"class":949}," \"func (int a) 的调用！\"",[87,14970,2402],{"class":171},[87,14972,9790],{"class":97},[87,14974,14975],{"class":89,"line":469},[87,14976,123],{"class":97},[87,14978,14979,14981,14983,14985,14988,14990],{"class":89,"line":2287},[87,14980,6314],{"class":171},[87,14982,12335],{"class":205},[87,14984,165],{"class":97},[87,14986,14987],{"class":171},"double",[87,14989,2356],{"class":492},[87,14991,1108],{"class":97},[87,14993,14994],{"class":89,"line":2568},[87,14995,2503],{"class":97},[87,14997,14998,15000,15002,15005,15007],{"class":89,"line":2573},[87,14999,7479],{"class":97},[87,15001,2134],{"class":171},[87,15003,15004],{"class":949}," \"func (double a)的调用！\"",[87,15006,2402],{"class":171},[87,15008,9790],{"class":97},[87,15010,15011],{"class":89,"line":2579},[87,15012,123],{"class":97},[87,15014,15015,15017,15019,15021,15023,15025,15028,15030,15032],{"class":89,"line":2584},[87,15016,6314],{"class":171},[87,15018,12335],{"class":205},[87,15020,165],{"class":97},[87,15022,1105],{"class":171},[87,15024,2356],{"class":492},[87,15026,15027],{"class":97}," ,",[87,15029,14987],{"class":171},[87,15031,3787],{"class":492},[87,15033,1108],{"class":97},[87,15035,15036],{"class":89,"line":2598},[87,15037,2503],{"class":97},[87,15039,15040,15042,15044,15047,15049],{"class":89,"line":2603},[87,15041,7479],{"class":97},[87,15043,2134],{"class":171},[87,15045,15046],{"class":949}," \"func (int a ,double b) 的调用！\"",[87,15048,2402],{"class":171},[87,15050,9790],{"class":97},[87,15052,15053],{"class":89,"line":2609},[87,15054,123],{"class":97},[87,15056,15057,15059,15061,15063,15065,15067,15069,15071,15073],{"class":89,"line":2630},[87,15058,6314],{"class":171},[87,15060,12335],{"class":205},[87,15062,165],{"class":97},[87,15064,14987],{"class":171},[87,15066,2356],{"class":492},[87,15068,15027],{"class":97},[87,15070,1105],{"class":171},[87,15072,3787],{"class":492},[87,15074,1108],{"class":97},[87,15076,15077],{"class":89,"line":2635},[87,15078,2503],{"class":97},[87,15080,15081,15083,15085,15088,15090],{"class":89,"line":2649},[87,15082,7479],{"class":97},[87,15084,2134],{"class":171},[87,15086,15087],{"class":949}," \"func (double a ,int b)的调用！\"",[87,15089,2402],{"class":171},[87,15091,9790],{"class":97},[87,15093,15094],{"class":89,"line":2654},[87,15095,123],{"class":97},[87,15097,15098],{"class":89,"line":2683},[87,15099,3355],{"emptyLinePlaceholder":1029},[87,15101,15102],{"class":89,"line":2688},[87,15103,15104],{"class":199},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[87,15106,15107],{"class":89,"line":2705},[87,15108,15109],{"class":199},"\u002F\u002Fint func(double a, int b)\n",[87,15111,15112],{"class":89,"line":2710},[87,15113,15114],{"class":199},"\u002F\u002F{\n",[87,15116,15117],{"class":89,"line":2715},[87,15118,15119],{"class":199},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[87,15121,15122],{"class":89,"line":2720},[87,15123,15124],{"class":199},"\u002F\u002F}\n",[87,15126,15127],{"class":89,"line":2734},[87,15128,3355],{"emptyLinePlaceholder":1029},[87,15130,15131],{"class":89,"line":2739},[87,15132,3355],{"emptyLinePlaceholder":1029},[87,15134,15135,15137,15139],{"class":89,"line":3532},[87,15136,1105],{"class":171},[87,15138,2928],{"class":205},[87,15140,11803],{"class":97},[87,15142,15143],{"class":89,"line":3546},[87,15144,3355],{"emptyLinePlaceholder":1029},[87,15146,15147,15149],{"class":89,"line":3554},[87,15148,14235],{"class":205},[87,15150,6586],{"class":97},[87,15152,15153,15155,15157,15159],{"class":89,"line":3559},[87,15154,14235],{"class":205},[87,15156,165],{"class":97},[87,15158,242],{"class":104},[87,15160,175],{"class":97},[87,15162,15163,15165,15167,15169],{"class":89,"line":3565},[87,15164,14235],{"class":205},[87,15166,165],{"class":97},[87,15168,1149],{"class":104},[87,15170,175],{"class":97},[87,15172,15173,15175,15177,15179,15181,15183],{"class":89,"line":3571},[87,15174,14235],{"class":205},[87,15176,165],{"class":97},[87,15178,242],{"class":104},[87,15180,1473],{"class":97},[87,15182,1149],{"class":104},[87,15184,175],{"class":97},[87,15186,15187,15189,15191,15193,15196,15198],{"class":89,"line":3576},[87,15188,14235],{"class":205},[87,15190,165],{"class":97},[87,15192,1149],{"class":104},[87,15194,15195],{"class":97}," , ",[87,15197,242],{"class":104},[87,15199,175],{"class":97},[87,15201,15202],{"class":89,"line":8898},[87,15203,14160],{"class":97},[87,15205,15206,15208,15210,15212],{"class":89,"line":8922},[87,15207,3258],{"class":205},[87,15209,165],{"class":97},[87,15211,3263],{"class":949},[87,15213,175],{"class":97},[87,15215,15216],{"class":89,"line":8927},[87,15217,3355],{"emptyLinePlaceholder":1029},[87,15219,15220,15222,15224],{"class":89,"line":8933},[87,15221,5044],{"class":171},[87,15223,577],{"class":104},[87,15225,117],{"class":97},[87,15227,15228],{"class":89,"line":8960},[87,15229,123],{"class":97},[19,15231,15232],{},"重点：函数返回值不可以作为函数重载条件！",[44,15234,15236],{"id":15235},"_732注意事项","7.3.2注意事项",[26,15238,15239,15242],{},[29,15240,15241],{},"引用作为重载条件!!!",[29,15243,15244],{},"函数重载碰到函数默认参数",[77,15246,15248],{"className":1091,"code":15247,"language":1093,"meta":82,"style":82},"\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",[84,15249,15250,15255,15260,15264,15280,15284,15297,15301,15305,15323,15327,15340,15344,15348,15352,15357,15361,15385,15389,15402,15406,15410,15424,15428,15441,15445,15449,15457,15461,15473,15483,15496,15500,15504,15512,15516,15526,15530,15538],{"__ignoreMap":82},[87,15251,15252],{"class":89,"line":90},[87,15253,15254],{"class":199},"\u002F\u002F函数重载注意事项\n",[87,15256,15257],{"class":89,"line":101},[87,15258,15259],{"class":199},"\u002F\u002F1、引用作为重载条件\n",[87,15261,15262],{"class":89,"line":120},[87,15263,3355],{"emptyLinePlaceholder":1029},[87,15265,15266,15268,15270,15272,15274,15276,15278],{"class":89,"line":222},[87,15267,6314],{"class":171},[87,15269,12335],{"class":205},[87,15271,165],{"class":97},[87,15273,1105],{"class":171},[87,15275,11534],{"class":171},[87,15277,1334],{"class":492},[87,15279,1108],{"class":97},[87,15281,15282],{"class":89,"line":234},[87,15283,2503],{"class":97},[87,15285,15286,15288,15290,15293,15295],{"class":89,"line":256},[87,15287,7479],{"class":97},[87,15289,2134],{"class":171},[87,15291,15292],{"class":949}," \"func (int &a) 调用 \"",[87,15294,2402],{"class":171},[87,15296,9790],{"class":97},[87,15298,15299],{"class":89,"line":269},[87,15300,123],{"class":97},[87,15302,15303],{"class":89,"line":463},[87,15304,3355],{"emptyLinePlaceholder":1029},[87,15306,15307,15309,15311,15313,15315,15317,15319,15321],{"class":89,"line":469},[87,15308,6314],{"class":171},[87,15310,12335],{"class":205},[87,15312,165],{"class":97},[87,15314,7742],{"class":171},[87,15316,3337],{"class":171},[87,15318,11534],{"class":171},[87,15320,1334],{"class":492},[87,15322,1108],{"class":97},[87,15324,15325],{"class":89,"line":2287},[87,15326,2503],{"class":97},[87,15328,15329,15331,15333,15336,15338],{"class":89,"line":2568},[87,15330,7479],{"class":97},[87,15332,2134],{"class":171},[87,15334,15335],{"class":949}," \"func (const int &a) 调用 \"",[87,15337,2402],{"class":171},[87,15339,9790],{"class":97},[87,15341,15342],{"class":89,"line":2573},[87,15343,123],{"class":97},[87,15345,15346],{"class":89,"line":2579},[87,15347,3355],{"emptyLinePlaceholder":1029},[87,15349,15350],{"class":89,"line":2584},[87,15351,3355],{"emptyLinePlaceholder":1029},[87,15353,15354],{"class":89,"line":2598},[87,15355,15356],{"class":199},"\u002F\u002F2、函数重载碰到函数默认参数\n",[87,15358,15359],{"class":89,"line":2603},[87,15360,3355],{"emptyLinePlaceholder":1029},[87,15362,15363,15365,15367,15369,15371,15373,15375,15377,15379,15381,15383],{"class":89,"line":2609},[87,15364,6314],{"class":171},[87,15366,14568],{"class":205},[87,15368,165],{"class":97},[87,15370,1105],{"class":171},[87,15372,2356],{"class":492},[87,15374,13385],{"class":97},[87,15376,1105],{"class":171},[87,15378,3787],{"class":492},[87,15380,14514],{"class":171},[87,15382,2993],{"class":104},[87,15384,1108],{"class":97},[87,15386,15387],{"class":89,"line":2630},[87,15388,2503],{"class":97},[87,15390,15391,15393,15395,15398,15400],{"class":89,"line":2635},[87,15392,7479],{"class":97},[87,15394,2134],{"class":171},[87,15396,15397],{"class":949}," \"func2(int a, int b = 10) 调用\"",[87,15399,2402],{"class":171},[87,15401,9790],{"class":97},[87,15403,15404],{"class":89,"line":2649},[87,15405,123],{"class":97},[87,15407,15408],{"class":89,"line":2654},[87,15409,3355],{"emptyLinePlaceholder":1029},[87,15411,15412,15414,15416,15418,15420,15422],{"class":89,"line":2683},[87,15413,6314],{"class":171},[87,15415,14568],{"class":205},[87,15417,165],{"class":97},[87,15419,1105],{"class":171},[87,15421,2356],{"class":492},[87,15423,1108],{"class":97},[87,15425,15426],{"class":89,"line":2688},[87,15427,2503],{"class":97},[87,15429,15430,15432,15434,15437,15439],{"class":89,"line":2705},[87,15431,7479],{"class":97},[87,15433,2134],{"class":171},[87,15435,15436],{"class":949}," \"func2(int a) 调用\"",[87,15438,2402],{"class":171},[87,15440,9790],{"class":97},[87,15442,15443],{"class":89,"line":2710},[87,15444,123],{"class":97},[87,15446,15447],{"class":89,"line":2715},[87,15448,3355],{"emptyLinePlaceholder":1029},[87,15450,15451,15453,15455],{"class":89,"line":2720},[87,15452,1105],{"class":171},[87,15454,2928],{"class":205},[87,15456,11803],{"class":97},[87,15458,15459],{"class":89,"line":2734},[87,15460,14160],{"class":97},[87,15462,15463,15465,15467,15469,15471],{"class":89,"line":2739},[87,15464,2940],{"class":171},[87,15466,11819],{"class":97},[87,15468,946],{"class":171},[87,15470,2993],{"class":104},[87,15472,117],{"class":97},[87,15474,15475,15477,15480],{"class":89,"line":3532},[87,15476,14235],{"class":205},[87,15478,15479],{"class":97},"(a);",[87,15481,15482],{"class":199}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[87,15484,15485,15487,15489,15491,15493],{"class":89,"line":3546},[87,15486,14235],{"class":205},[87,15488,165],{"class":97},[87,15490,242],{"class":104},[87,15492,6916],{"class":97},[87,15494,15495],{"class":199},"\u002F\u002F调用有const   10是个常量\n",[87,15497,15498],{"class":89,"line":3554},[87,15499,3355],{"emptyLinePlaceholder":1029},[87,15501,15502],{"class":89,"line":3559},[87,15503,3355],{"emptyLinePlaceholder":1029},[87,15505,15506,15509],{"class":89,"line":3565},[87,15507,15508],{"class":199},"    \u002F\u002Ffunc2(10);",[87,15510,15511],{"class":199}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[87,15513,15514],{"class":89,"line":3571},[87,15515,3355],{"emptyLinePlaceholder":1029},[87,15517,15518,15520,15522,15524],{"class":89,"line":3576},[87,15519,3258],{"class":205},[87,15521,165],{"class":97},[87,15523,3263],{"class":949},[87,15525,175],{"class":97},[87,15527,15528],{"class":89,"line":8898},[87,15529,3355],{"emptyLinePlaceholder":1029},[87,15531,15532,15534,15536],{"class":89,"line":8922},[87,15533,5044],{"class":171},[87,15535,577],{"class":104},[87,15537,117],{"class":97},[87,15539,15540],{"class":89,"line":8927},[87,15541,123],{"class":97},[1006,15543,15544],{},"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":82,"searchDepth":101,"depth":101,"links":15546},[15547,15548,15549],{"id":14479,"depth":101,"text":14480},{"id":14736,"depth":101,"text":14737},{"id":14858,"depth":101,"text":14859,"children":15550},[15551,15552],{"id":14865,"depth":120,"text":14866},{"id":15235,"depth":120,"text":15236},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14471,"description":82},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15559,"title":15560,"body":15561,"description":24312,"extension":1027,"meta":24313,"navigation":1029,"path":24314,"seo":24315,"stem":24316,"__hash__":24317},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15562,"toc":24293},[15563,15566,15572,15579,15584,15587,15590,15593,15597,15601,15604,15607,15615,15620,15623,15630,15635,15794,15797,16050,16053,16056,16059,16064,16067,16070,16081,16086,16322,16326,16336,16339,16347,16494,16498,16501,16504,16508,16952,16956,16964,16972,17884,17891,17896,18523,18526,18529,18532,18651,18654,18741,18744,18870,18873,18967,18970,19323,19327,19335,19339,19346,19349,19352,19363,19369,19374,19386,19394,19414,19422,19439,19625,19628,19632,19635,19638,19641,19644,19647,19650,19653,20113,20119,20123,20126,20137,20724,20727,21216,21220,21223,21226,21229,21232,21235,21243,21639,21643,21646,21649,22096,22099,22102,22107,22110,22115,22118,22122,22125,22127,22133,22136,22442,22452,22493,22497,22500,22502,22535,22538,22845,22847,22862,22865,22888,22897,22903,22906,22910,22913,22916,22921,22932,22937,22945,22949,23079,23082,23085,23260,23265,23477,23481,23484,23598,23603,23842,23846,23850,23853,23856,23861,23966,23969,23972,23975,23979,24090,24093,24096,24101,24153,24156,24159,24164,24210,24213,24218,24286,24288,24291],[10,15564,15560],{"id":15565},"_8类和对象",[19,15567,15568,15569],{},"C++面向对象的三大特性为",[57,15570,15571],{},"封装、继承、多态",[19,15573,15574,15575,15578],{},"C++认为",[57,15576,15577],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,15580,15581],{},[57,15582,15583],{},"例如：",[19,15585,15586],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,15588,15589],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,15591,15592],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,15594,15596],{"id":15595},"_81封装","8.1封装",[44,15598,15600],{"id":15599},"_811封装的意义","8.1.1封装的意义",[19,15602,15603],{},"封装是C++面向对象三大特性之一",[19,15605,15606],{},"封装的意义：",[26,15608,15609,15612],{},[29,15610,15611],{},"将属性和行为作为一个整体，表现生活中的事物",[29,15613,15614],{},"将属性和行为加以权限控制",[19,15616,15617],{},[57,15618,15619],{},"封装意义一：",[19,15621,15622],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,15624,15625,14745,15627],{},[57,15626,6134],{},[84,15628,15629],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[1055,15631,15632],{},[29,15633,15634],{},"**示例1：**设计一个圆类，求圆的周长",[77,15636,15638],{"className":1091,"code":15637,"language":1093,"meta":82,"style":82},"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",[84,15639,15640,15648,15652,15657,15662,15667,15672,15679,15684,15694,15698,15716,15720,15724,15732,15736,15741,15746,15751,15756,15767,15790],{"__ignoreMap":82},[87,15641,15642,15645],{"class":89,"line":90},[87,15643,15644],{"class":171},"class",[87,15646,15647],{"class":205}," Circle\n",[87,15649,15650],{"class":89,"line":101},[87,15651,2503],{"class":97},[87,15653,15654],{"class":89,"line":120},[87,15655,15656],{"class":199},"    \u002F\u002F访问权限\n",[87,15658,15659],{"class":89,"line":222},[87,15660,15661],{"class":199},"    \u002F\u002F公共权限\n",[87,15663,15664],{"class":89,"line":234},[87,15665,15666],{"class":171},"public:\n",[87,15668,15669],{"class":89,"line":256},[87,15670,15671],{"class":199},"    \u002F\u002F属性\n",[87,15673,15674,15676],{"class":89,"line":269},[87,15675,2940],{"class":171},[87,15677,15678],{"class":97}," m_r;\n",[87,15680,15681],{"class":89,"line":463},[87,15682,15683],{"class":199},"    \u002F\u002F行为\n",[87,15685,15686,15689,15692],{"class":89,"line":469},[87,15687,15688],{"class":171},"    double",[87,15690,15691],{"class":205}," calculateZC",[87,15693,2931],{"class":97},[87,15695,15696],{"class":89,"line":2287},[87,15697,2985],{"class":97},[87,15699,15700,15703,15706,15708,15711,15713],{"class":89,"line":2568},[87,15701,15702],{"class":171},"        return",[87,15704,15705],{"class":104}," 2",[87,15707,1549],{"class":171},[87,15709,15710],{"class":97},"PI",[87,15712,1549],{"class":171},[87,15714,15715],{"class":97},"m_r;\n",[87,15717,15718],{"class":89,"line":2573},[87,15719,3142],{"class":97},[87,15721,15722],{"class":89,"line":2579},[87,15723,4949],{"class":97},[87,15725,15726,15728,15730],{"class":89,"line":2584},[87,15727,1105],{"class":171},[87,15729,2928],{"class":205},[87,15731,2931],{"class":97},[87,15733,15734],{"class":89,"line":2598},[87,15735,2503],{"class":97},[87,15737,15738],{"class":89,"line":2603},[87,15739,15740],{"class":199},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[87,15742,15743],{"class":89,"line":2609},[87,15744,15745],{"class":199},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[87,15747,15748],{"class":89,"line":2630},[87,15749,15750],{"class":97},"    Circle c1;\n",[87,15752,15753],{"class":89,"line":2635},[87,15754,15755],{"class":199},"    \u002F\u002F给圆对象 的属性进行赋值\n",[87,15757,15758,15761,15763,15765],{"class":89,"line":2649},[87,15759,15760],{"class":97},"    c1.m_r",[87,15762,946],{"class":171},[87,15764,242],{"class":104},[87,15766,117],{"class":97},[87,15768,15769,15771,15773,15776,15778,15781,15784,15786,15788],{"class":89,"line":2654},[87,15770,2508],{"class":97},[87,15772,2134],{"class":171},[87,15774,15775],{"class":949},"\"圆的周长\"",[87,15777,2134],{"class":171},[87,15779,15780],{"class":97},"c1.",[87,15782,15783],{"class":205},"calculateZC",[87,15785,3382],{"class":97},[87,15787,2134],{"class":171},[87,15789,2156],{"class":97},[87,15791,15792],{"class":89,"line":2683},[87,15793,123],{"class":97},[19,15795,15796],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[77,15798,15800],{"className":1091,"code":15799,"language":1093,"meta":82,"style":82},"#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",[84,15801,15802,15808,15818,15824,15830,15834,15838,15843,15850,15855,15873,15877,15887,15891,15896,15912,15916,15926,15930,15935,15943,15947,15979,15983,15987,15995,15999,16004,16009,16023,16037,16046],{"__ignoreMap":82},[87,15803,15804,15806],{"class":89,"line":90},[87,15805,2905],{"class":171},[87,15807,2908],{"class":949},[87,15809,15810,15812,15814,15816],{"class":89,"line":101},[87,15811,2913],{"class":171},[87,15813,2916],{"class":171},[87,15815,2919],{"class":205},[87,15817,117],{"class":97},[87,15819,15820,15822],{"class":89,"line":120},[87,15821,2905],{"class":171},[87,15823,8699],{"class":949},[87,15825,15826,15828],{"class":89,"line":222},[87,15827,15644],{"class":171},[87,15829,8712],{"class":205},[87,15831,15832],{"class":89,"line":234},[87,15833,2503],{"class":97},[87,15835,15836],{"class":89,"line":256},[87,15837,15666],{"class":171},[87,15839,15840],{"class":89,"line":269},[87,15841,15842],{"class":97},"    string m_name;\n",[87,15844,15845,15847],{"class":89,"line":463},[87,15846,2940],{"class":171},[87,15848,15849],{"class":97}," m_id;\n",[87,15851,15852],{"class":89,"line":469},[87,15853,15854],{"class":199},"    \u002F\u002F赋值姓名\n",[87,15856,15857,15860,15863,15865,15868,15871],{"class":89,"line":2287},[87,15858,15859],{"class":171},"    void",[87,15861,15862],{"class":205}," setName",[87,15864,165],{"class":97},[87,15866,15867],{"class":205},"string",[87,15869,15870],{"class":492}," name",[87,15872,1108],{"class":97},[87,15874,15875],{"class":89,"line":2568},[87,15876,2985],{"class":97},[87,15878,15879,15882,15884],{"class":89,"line":2573},[87,15880,15881],{"class":97},"        m_name",[87,15883,946],{"class":171},[87,15885,15886],{"class":97},"name;\n",[87,15888,15889],{"class":89,"line":2579},[87,15890,3142],{"class":97},[87,15892,15893],{"class":89,"line":2584},[87,15894,15895],{"class":199},"    \u002F\u002F赋值学号\n",[87,15897,15898,15900,15903,15905,15907,15910],{"class":89,"line":2598},[87,15899,15859],{"class":171},[87,15901,15902],{"class":205}," setId",[87,15904,165],{"class":97},[87,15906,1105],{"class":171},[87,15908,15909],{"class":492}," id",[87,15911,1108],{"class":97},[87,15913,15914],{"class":89,"line":2603},[87,15915,2985],{"class":97},[87,15917,15918,15921,15923],{"class":89,"line":2609},[87,15919,15920],{"class":97},"        m_id",[87,15922,946],{"class":171},[87,15924,15925],{"class":97},"id;\n",[87,15927,15928],{"class":89,"line":2630},[87,15929,3142],{"class":97},[87,15931,15932],{"class":89,"line":2635},[87,15933,15934],{"class":199},"    \u002F\u002F打印学生信息\n",[87,15936,15937,15939,15941],{"class":89,"line":2649},[87,15938,15859],{"class":171},[87,15940,10565],{"class":205},[87,15942,2931],{"class":97},[87,15944,15945],{"class":89,"line":2654},[87,15946,2985],{"class":97},[87,15948,15949,15951,15953,15956,15958,15961,15963,15965,15967,15970,15972,15975,15977],{"class":89,"line":2683},[87,15950,4405],{"class":97},[87,15952,2134],{"class":171},[87,15954,15955],{"class":949},"\"姓名：\"",[87,15957,2134],{"class":171},[87,15959,15960],{"class":97},"m_name",[87,15962,2134],{"class":171},[87,15964,5312],{"class":949},[87,15966,2134],{"class":171},[87,15968,15969],{"class":949},"\"学号：\"",[87,15971,2134],{"class":171},[87,15973,15974],{"class":97},"m_id",[87,15976,2134],{"class":171},[87,15978,2156],{"class":97},[87,15980,15981],{"class":89,"line":2688},[87,15982,3142],{"class":97},[87,15984,15985],{"class":89,"line":2705},[87,15986,4949],{"class":97},[87,15988,15989,15991,15993],{"class":89,"line":2710},[87,15990,1105],{"class":171},[87,15992,2928],{"class":205},[87,15994,2931],{"class":97},[87,15996,15997],{"class":89,"line":2715},[87,15998,2503],{"class":97},[87,16000,16001],{"class":89,"line":2720},[87,16002,16003],{"class":199},"    \u002F\u002F实例化\n",[87,16005,16006],{"class":89,"line":2734},[87,16007,16008],{"class":97},"    Student s1;\n",[87,16010,16011,16014,16017,16019,16021],{"class":89,"line":2739},[87,16012,16013],{"class":97},"    s1.",[87,16015,16016],{"class":205},"setName",[87,16018,165],{"class":97},[87,16020,8866],{"class":949},[87,16022,175],{"class":97},[87,16024,16025,16027,16030,16032,16035],{"class":89,"line":3532},[87,16026,16013],{"class":97},[87,16028,16029],{"class":205},"setId",[87,16031,165],{"class":97},[87,16033,16034],{"class":104},"123456",[87,16036,175],{"class":97},[87,16038,16039,16041,16044],{"class":89,"line":3546},[87,16040,16013],{"class":97},[87,16042,16043],{"class":205},"printInfo",[87,16045,6586],{"class":97},[87,16047,16048],{"class":89,"line":3554},[87,16049,123],{"class":97},[19,16051,16052],{},"类中的属性和行为统称为成员",[19,16054,16055],{},"属性：成员属性(成员变量)",[19,16057,16058],{},"方法：成员函数(成员方法)",[19,16060,16061],{},[57,16062,16063],{},"封装意义二：",[19,16065,16066],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,16068,16069],{},"访问权限有三种：",[1055,16071,16072,16075,16078],{},[29,16073,16074],{},"public        公共权限",[29,16076,16077],{},"protected 保护权限",[29,16079,16080],{},"private      私有权限",[19,16082,16083],{},[57,16084,16085],{},"示例：",[77,16087,16089],{"className":10891,"code":16088,"language":10893,"meta":82,"style":82},"\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",[84,16090,16091,16096,16101,16106,16111,16115,16122,16126,16131,16135,16140,16144,16149,16154,16159,16163,16168,16173,16180,16184,16188,16196,16200,16211,16223,16235,16239,16243,16247,16255,16259,16264,16276,16284,16292,16296,16306,16310,16318],{"__ignoreMap":82},[87,16092,16093],{"class":89,"line":90},[87,16094,16095],{"class":199},"\u002F\u002F三种权限\n",[87,16097,16098],{"class":89,"line":101},[87,16099,16100],{"class":199},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[87,16102,16103],{"class":89,"line":120},[87,16104,16105],{"class":199},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[87,16107,16108],{"class":89,"line":222},[87,16109,16110],{"class":199},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[87,16112,16113],{"class":89,"line":234},[87,16114,3355],{"emptyLinePlaceholder":1029},[87,16116,16117,16119],{"class":89,"line":256},[87,16118,15644],{"class":171},[87,16120,16121],{"class":205}," Person\n",[87,16123,16124],{"class":89,"line":269},[87,16125,2503],{"class":97},[87,16127,16128],{"class":89,"line":463},[87,16129,16130],{"class":199},"    \u002F\u002F姓名  公共权限\n",[87,16132,16133],{"class":89,"line":469},[87,16134,15666],{"class":171},[87,16136,16137],{"class":89,"line":2287},[87,16138,16139],{"class":97},"    string m_Name;\n",[87,16141,16142],{"class":89,"line":2568},[87,16143,3355],{"emptyLinePlaceholder":1029},[87,16145,16146],{"class":89,"line":2573},[87,16147,16148],{"class":199},"    \u002F\u002F汽车  保护权限\n",[87,16150,16151],{"class":89,"line":2579},[87,16152,16153],{"class":171},"protected:\n",[87,16155,16156],{"class":89,"line":2584},[87,16157,16158],{"class":97},"    string m_Car;\n",[87,16160,16161],{"class":89,"line":2598},[87,16162,3355],{"emptyLinePlaceholder":1029},[87,16164,16165],{"class":89,"line":2603},[87,16166,16167],{"class":199},"    \u002F\u002F银行卡密码  私有权限\n",[87,16169,16170],{"class":89,"line":2609},[87,16171,16172],{"class":171},"private:\n",[87,16174,16175,16177],{"class":89,"line":2630},[87,16176,2940],{"class":171},[87,16178,16179],{"class":97}," m_Password;\n",[87,16181,16182],{"class":89,"line":2635},[87,16183,3355],{"emptyLinePlaceholder":1029},[87,16185,16186],{"class":89,"line":2649},[87,16187,15666],{"class":171},[87,16189,16190,16192,16194],{"class":89,"line":2654},[87,16191,15859],{"class":171},[87,16193,12335],{"class":205},[87,16195,2931],{"class":97},[87,16197,16198],{"class":89,"line":2683},[87,16199,2985],{"class":97},[87,16201,16202,16205,16207,16209],{"class":89,"line":2688},[87,16203,16204],{"class":97},"        m_Name ",[87,16206,946],{"class":171},[87,16208,9888],{"class":949},[87,16210,117],{"class":97},[87,16212,16213,16216,16218,16221],{"class":89,"line":2705},[87,16214,16215],{"class":97},"        m_Car ",[87,16217,946],{"class":171},[87,16219,16220],{"class":949}," \"拖拉机\"",[87,16222,117],{"class":97},[87,16224,16225,16228,16230,16233],{"class":89,"line":2710},[87,16226,16227],{"class":97},"        m_Password ",[87,16229,946],{"class":171},[87,16231,16232],{"class":104}," 123456",[87,16234,117],{"class":97},[87,16236,16237],{"class":89,"line":2715},[87,16238,3142],{"class":97},[87,16240,16241],{"class":89,"line":2720},[87,16242,4949],{"class":97},[87,16244,16245],{"class":89,"line":2734},[87,16246,3355],{"emptyLinePlaceholder":1029},[87,16248,16249,16251,16253],{"class":89,"line":2739},[87,16250,1105],{"class":171},[87,16252,2928],{"class":205},[87,16254,11803],{"class":97},[87,16256,16257],{"class":89,"line":3532},[87,16258,3355],{"emptyLinePlaceholder":1029},[87,16260,16261],{"class":89,"line":3546},[87,16262,16263],{"class":97},"    Person p;\n",[87,16265,16266,16269,16271,16274],{"class":89,"line":3554},[87,16267,16268],{"class":97},"    p.m_Name ",[87,16270,946],{"class":171},[87,16272,16273],{"class":949}," \"李四\"",[87,16275,117],{"class":97},[87,16277,16278,16281],{"class":89,"line":3559},[87,16279,16280],{"class":199},"    \u002F\u002Fp.m_Car = \"奔驰\";",[87,16282,16283],{"class":199},"  \u002F\u002F保护权限类外访问不到\n",[87,16285,16286,16289],{"class":89,"line":3565},[87,16287,16288],{"class":199},"    \u002F\u002Fp.m_Password = 123;",[87,16290,16291],{"class":199}," \u002F\u002F私有权限类外访问不到\n",[87,16293,16294],{"class":89,"line":3571},[87,16295,3355],{"emptyLinePlaceholder":1029},[87,16297,16298,16300,16302,16304],{"class":89,"line":3576},[87,16299,3258],{"class":205},[87,16301,165],{"class":97},[87,16303,3263],{"class":949},[87,16305,175],{"class":97},[87,16307,16308],{"class":89,"line":8898},[87,16309,3355],{"emptyLinePlaceholder":1029},[87,16311,16312,16314,16316],{"class":89,"line":8922},[87,16313,5044],{"class":171},[87,16315,577],{"class":104},[87,16317,117],{"class":97},[87,16319,16320],{"class":89,"line":8927},[87,16321,123],{"class":97},[44,16323,16325],{"id":16324},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,16327,16328,16329,16332,16333],{},"在C++中 struct和class唯一的",[57,16330,16331],{},"区别","就在于 ",[57,16334,16335],{},"默认的访问权限不同",[19,16337,16338],{},"区别：",[26,16340,16341,16344],{},[29,16342,16343],{},"struct 默认权限为公共",[29,16345,16346],{},"class   默认权限为私有",[77,16348,16350],{"className":10891,"code":16349,"language":10893,"meta":82,"style":82},"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",[84,16351,16352,16359,16363,16373,16377,16381,16388,16392,16402,16406,16410,16418,16422,16427,16441,16445,16450,16464,16468,16478,16482,16490],{"__ignoreMap":82},[87,16353,16354,16356],{"class":89,"line":90},[87,16355,15644],{"class":171},[87,16357,16358],{"class":205}," C1\n",[87,16360,16361],{"class":89,"line":101},[87,16362,2503],{"class":97},[87,16364,16365,16367,16370],{"class":89,"line":120},[87,16366,2940],{"class":171},[87,16368,16369],{"class":97},"  m_A;",[87,16371,16372],{"class":199}," \u002F\u002F默认是私有权限\n",[87,16374,16375],{"class":89,"line":222},[87,16376,4949],{"class":97},[87,16378,16379],{"class":89,"line":234},[87,16380,3355],{"emptyLinePlaceholder":1029},[87,16382,16383,16385],{"class":89,"line":256},[87,16384,8709],{"class":171},[87,16386,16387],{"class":205}," C2\n",[87,16389,16390],{"class":89,"line":269},[87,16391,2503],{"class":97},[87,16393,16394,16396,16399],{"class":89,"line":463},[87,16395,2940],{"class":171},[87,16397,16398],{"class":97}," m_A;",[87,16400,16401],{"class":199},"  \u002F\u002F默认是公共权限\n",[87,16403,16404],{"class":89,"line":469},[87,16405,4949],{"class":97},[87,16407,16408],{"class":89,"line":2287},[87,16409,3355],{"emptyLinePlaceholder":1029},[87,16411,16412,16414,16416],{"class":89,"line":2568},[87,16413,1105],{"class":171},[87,16415,2928],{"class":205},[87,16417,11803],{"class":97},[87,16419,16420],{"class":89,"line":2573},[87,16421,3355],{"emptyLinePlaceholder":1029},[87,16423,16424],{"class":89,"line":2579},[87,16425,16426],{"class":97},"    C1 c1;\n",[87,16428,16429,16432,16434,16436,16438],{"class":89,"line":2584},[87,16430,16431],{"class":97},"    c1.m_A ",[87,16433,946],{"class":171},[87,16435,2993],{"class":104},[87,16437,1155],{"class":97},[87,16439,16440],{"class":199}," \u002F\u002F错误，访问权限是私有\n",[87,16442,16443],{"class":89,"line":2598},[87,16444,3355],{"emptyLinePlaceholder":1029},[87,16446,16447],{"class":89,"line":2603},[87,16448,16449],{"class":97},"    C2 c2;\n",[87,16451,16452,16455,16457,16459,16461],{"class":89,"line":2609},[87,16453,16454],{"class":97},"    c2.m_A ",[87,16456,946],{"class":171},[87,16458,2993],{"class":104},[87,16460,1155],{"class":97},[87,16462,16463],{"class":199}," \u002F\u002F正确，访问权限是公共\n",[87,16465,16466],{"class":89,"line":2630},[87,16467,3355],{"emptyLinePlaceholder":1029},[87,16469,16470,16472,16474,16476],{"class":89,"line":2635},[87,16471,3258],{"class":205},[87,16473,165],{"class":97},[87,16475,3263],{"class":949},[87,16477,175],{"class":97},[87,16479,16480],{"class":89,"line":2649},[87,16481,3355],{"emptyLinePlaceholder":1029},[87,16483,16484,16486,16488],{"class":89,"line":2654},[87,16485,5044],{"class":171},[87,16487,577],{"class":104},[87,16489,117],{"class":97},[87,16491,16492],{"class":89,"line":2683},[87,16493,123],{"class":97},[44,16495,16497],{"id":16496},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,16499,16500],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,16502,16503],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,16505,16506],{},[57,16507,16085],{},[77,16509,16511],{"className":10891,"code":16510,"language":10893,"meta":82,"style":82},"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",[84,16512,16513,16522,16526,16530,16535,16549,16558,16562,16572,16576,16583,16587,16591,16595,16600,16609,16616,16620,16625,16641,16664,16677,16684,16688,16697,16701,16705,16710,16726,16736,16740,16744,16748,16756,16760,16770,16774,16782,16786,16790,16798,16802,16806,16811,16824,16847,16851,16856,16869,16891,16895,16900,16914,16922,16926,16936,16940,16948],{"__ignoreMap":82},[87,16514,16515,16517,16520],{"class":89,"line":90},[87,16516,15644],{"class":171},[87,16518,16519],{"class":205}," Person",[87,16521,98],{"class":97},[87,16523,16524],{"class":89,"line":101},[87,16525,15666],{"class":171},[87,16527,16528],{"class":89,"line":120},[87,16529,3355],{"emptyLinePlaceholder":1029},[87,16531,16532],{"class":89,"line":222},[87,16533,16534],{"class":199},"    \u002F\u002F姓名设置可读可写\n",[87,16536,16537,16539,16541,16543,16545,16547],{"class":89,"line":234},[87,16538,15859],{"class":171},[87,16540,15862],{"class":205},[87,16542,165],{"class":97},[87,16544,15867],{"class":205},[87,16546,15870],{"class":492},[87,16548,13392],{"class":97},[87,16550,16551,16553,16555],{"class":89,"line":256},[87,16552,16204],{"class":97},[87,16554,946],{"class":171},[87,16556,16557],{"class":97}," name;\n",[87,16559,16560],{"class":89,"line":269},[87,16561,3142],{"class":97},[87,16563,16564,16567,16570],{"class":89,"line":463},[87,16565,16566],{"class":205},"    string",[87,16568,16569],{"class":205}," getName",[87,16571,2931],{"class":97},[87,16573,16574],{"class":89,"line":469},[87,16575,2985],{"class":97},[87,16577,16578,16580],{"class":89,"line":2287},[87,16579,15702],{"class":171},[87,16581,16582],{"class":97}," m_Name;\n",[87,16584,16585],{"class":89,"line":2568},[87,16586,3142],{"class":97},[87,16588,16589],{"class":89,"line":2573},[87,16590,3355],{"emptyLinePlaceholder":1029},[87,16592,16593],{"class":89,"line":2579},[87,16594,3355],{"emptyLinePlaceholder":1029},[87,16596,16597],{"class":89,"line":2584},[87,16598,16599],{"class":199},"    \u002F\u002F获取年龄 \n",[87,16601,16602,16604,16607],{"class":89,"line":2598},[87,16603,2940],{"class":171},[87,16605,16606],{"class":205}," getAge",[87,16608,11803],{"class":97},[87,16610,16611,16613],{"class":89,"line":2603},[87,16612,15702],{"class":171},[87,16614,16615],{"class":97}," m_Age;\n",[87,16617,16618],{"class":89,"line":2609},[87,16619,3142],{"class":97},[87,16621,16622],{"class":89,"line":2630},[87,16623,16624],{"class":199},"    \u002F\u002F设置年龄\n",[87,16626,16627,16629,16632,16634,16636,16639],{"class":89,"line":2635},[87,16628,15859],{"class":171},[87,16630,16631],{"class":205}," setAge",[87,16633,165],{"class":97},[87,16635,1105],{"class":171},[87,16637,16638],{"class":492}," age",[87,16640,13392],{"class":97},[87,16642,16643,16645,16648,16650,16652,16654,16657,16659,16662],{"class":89,"line":2649},[87,16644,3452],{"class":171},[87,16646,16647],{"class":97}," (age ",[87,16649,938],{"class":171},[87,16651,577],{"class":104},[87,16653,4209],{"class":171},[87,16655,16656],{"class":97}," age ",[87,16658,2051],{"class":171},[87,16660,16661],{"class":104}," 150",[87,16663,13392],{"class":97},[87,16665,16666,16668,16670,16673,16675],{"class":89,"line":2654},[87,16667,10669],{"class":97},[87,16669,2134],{"class":171},[87,16671,16672],{"class":949}," \"你个老妖精!\"",[87,16674,2402],{"class":171},[87,16676,9790],{"class":97},[87,16678,16679,16682],{"class":89,"line":2683},[87,16680,16681],{"class":171},"            return",[87,16683,117],{"class":97},[87,16685,16686],{"class":89,"line":2688},[87,16687,3484],{"class":97},[87,16689,16690,16693,16695],{"class":89,"line":2705},[87,16691,16692],{"class":97},"        m_Age ",[87,16694,946],{"class":171},[87,16696,8747],{"class":97},[87,16698,16699],{"class":89,"line":2710},[87,16700,3142],{"class":97},[87,16702,16703],{"class":89,"line":2715},[87,16704,3355],{"emptyLinePlaceholder":1029},[87,16706,16707],{"class":89,"line":2720},[87,16708,16709],{"class":199},"    \u002F\u002F情人设置为只写\n",[87,16711,16712,16714,16717,16719,16721,16724],{"class":89,"line":2734},[87,16713,15859],{"class":171},[87,16715,16716],{"class":205}," setLover",[87,16718,165],{"class":97},[87,16720,15867],{"class":205},[87,16722,16723],{"class":492}," lover",[87,16725,13392],{"class":97},[87,16727,16728,16731,16733],{"class":89,"line":2739},[87,16729,16730],{"class":97},"        m_Lover ",[87,16732,946],{"class":171},[87,16734,16735],{"class":97}," lover;\n",[87,16737,16738],{"class":89,"line":3532},[87,16739,3142],{"class":97},[87,16741,16742],{"class":89,"line":3546},[87,16743,3355],{"emptyLinePlaceholder":1029},[87,16745,16746],{"class":89,"line":3554},[87,16747,16172],{"class":171},[87,16749,16750,16753],{"class":89,"line":3559},[87,16751,16752],{"class":97},"    string m_Name;",[87,16754,16755],{"class":199}," \u002F\u002F可读可写  姓名\n",[87,16757,16758],{"class":89,"line":3565},[87,16759,14160],{"class":97},[87,16761,16762,16764,16767],{"class":89,"line":3571},[87,16763,2940],{"class":171},[87,16765,16766],{"class":97}," m_Age;",[87,16768,16769],{"class":199}," \u002F\u002F只读  年龄\n",[87,16771,16772],{"class":89,"line":3576},[87,16773,3355],{"emptyLinePlaceholder":1029},[87,16775,16776,16779],{"class":89,"line":8898},[87,16777,16778],{"class":97},"    string m_Lover;",[87,16780,16781],{"class":199}," \u002F\u002F只写  情人\n",[87,16783,16784],{"class":89,"line":8922},[87,16785,4949],{"class":97},[87,16787,16788],{"class":89,"line":8927},[87,16789,3355],{"emptyLinePlaceholder":1029},[87,16791,16792,16794,16796],{"class":89,"line":8933},[87,16793,1105],{"class":171},[87,16795,2928],{"class":205},[87,16797,11803],{"class":97},[87,16799,16800],{"class":89,"line":8960},[87,16801,3355],{"emptyLinePlaceholder":1029},[87,16803,16804],{"class":89,"line":8965},[87,16805,16263],{"class":97},[87,16807,16808],{"class":89,"line":8971},[87,16809,16810],{"class":199},"    \u002F\u002F姓名设置\n",[87,16812,16813,16816,16818,16820,16822],{"class":89,"line":8983},[87,16814,16815],{"class":97},"    p.",[87,16817,16016],{"class":205},[87,16819,165],{"class":97},[87,16821,8866],{"class":949},[87,16823,175],{"class":97},[87,16825,16826,16828,16830,16833,16835,16838,16841,16843,16845],{"class":89,"line":8995},[87,16827,7479],{"class":97},[87,16829,2134],{"class":171},[87,16831,16832],{"class":949}," \"姓名： \"",[87,16834,2402],{"class":171},[87,16836,16837],{"class":97}," p.",[87,16839,16840],{"class":205},"getName",[87,16842,14000],{"class":97},[87,16844,2134],{"class":171},[87,16846,9790],{"class":97},[87,16848,16849],{"class":89,"line":9007},[87,16850,3355],{"emptyLinePlaceholder":1029},[87,16852,16853],{"class":89,"line":10666},[87,16854,16855],{"class":199},"    \u002F\u002F年龄设置\n",[87,16857,16858,16860,16863,16865,16867],{"class":89,"line":10691},[87,16859,16815],{"class":97},[87,16861,16862],{"class":205},"setAge",[87,16864,165],{"class":97},[87,16866,1749],{"class":104},[87,16868,175],{"class":97},[87,16870,16871,16873,16875,16878,16880,16882,16885,16887,16889],{"class":89,"line":10714},[87,16872,7479],{"class":97},[87,16874,2134],{"class":171},[87,16876,16877],{"class":949}," \"年龄： \"",[87,16879,2402],{"class":171},[87,16881,16837],{"class":97},[87,16883,16884],{"class":205},"getAge",[87,16886,14000],{"class":97},[87,16888,2134],{"class":171},[87,16890,9790],{"class":97},[87,16892,16893],{"class":89,"line":10738},[87,16894,3355],{"emptyLinePlaceholder":1029},[87,16896,16897],{"class":89,"line":10743},[87,16898,16899],{"class":199},"    \u002F\u002F情人设置\n",[87,16901,16902,16904,16907,16909,16912],{"class":89,"line":10748},[87,16903,16815],{"class":97},[87,16905,16906],{"class":205},"setLover",[87,16908,165],{"class":97},[87,16910,16911],{"class":949},"\"苍井\"",[87,16913,175],{"class":97},[87,16915,16916,16919],{"class":89,"line":10753},[87,16917,16918],{"class":199},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[87,16920,16921],{"class":199},"  \u002F\u002F只写属性，不可以读取\n",[87,16923,16924],{"class":89,"line":10762},[87,16925,3355],{"emptyLinePlaceholder":1029},[87,16927,16928,16930,16932,16934],{"class":89,"line":10767},[87,16929,3258],{"class":205},[87,16931,165],{"class":97},[87,16933,3263],{"class":949},[87,16935,175],{"class":97},[87,16937,16938],{"class":89,"line":10773},[87,16939,3355],{"emptyLinePlaceholder":1029},[87,16941,16942,16944,16946],{"class":89,"line":10794},[87,16943,5044],{"class":171},[87,16945,577],{"class":104},[87,16947,117],{"class":97},[87,16949,16950],{"class":89,"line":10800},[87,16951,123],{"class":97},[44,16953,16955],{"id":16954},"_814封装案例","8.1.4封装案例",[1055,16957,16958],{},[29,16959,16960,16963],{},[57,16961,16962],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[26,16965,16966,16969],{},[29,16967,16968],{},"求出立方体的面积和体积",[29,16970,16971],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[77,16973,16975],{"className":1091,"code":16974,"language":1093,"meta":82,"style":82},"#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",[84,16976,16977,16983,16993,17000,17004,17008,17013,17043,17047,17057,17067,17077,17081,17090,17094,17130,17134,17143,17147,17163,17167,17172,17181,17185,17192,17196,17205,17209,17216,17220,17229,17233,17240,17244,17249,17266,17270,17316,17320,17329,17333,17337,17341,17350,17354,17358,17363,17367,17373,17379,17385,17389,17393,17398,17420,17424,17478,17482,17490,17494,17499,17504,17517,17524,17540,17551,17557,17580,17586,17609,17623,17643,17649,17660,17683,17705,17710,17716,17730,17743,17748,17762,17767,17773,17778,17792,17797,17802,17816,17828,17833,17846,17851,17856,17861,17874,17879],{"__ignoreMap":82},[87,16978,16979,16981],{"class":89,"line":90},[87,16980,2905],{"class":171},[87,16982,2908],{"class":949},[87,16984,16985,16987,16989,16991],{"class":89,"line":101},[87,16986,2913],{"class":171},[87,16988,2916],{"class":171},[87,16990,2919],{"class":205},[87,16992,117],{"class":97},[87,16994,16995,16997],{"class":89,"line":120},[87,16996,15644],{"class":171},[87,16998,16999],{"class":205}," Cube\n",[87,17001,17002],{"class":89,"line":222},[87,17003,2503],{"class":97},[87,17005,17006],{"class":89,"line":234},[87,17007,15666],{"class":171},[87,17009,17010],{"class":89,"line":256},[87,17011,17012],{"class":199},"    \u002F\u002F输入长宽高\n",[87,17014,17015,17017,17020,17022,17024,17027,17029,17031,17034,17036,17038,17041],{"class":89,"line":269},[87,17016,15859],{"class":171},[87,17018,17019],{"class":205}," setLwh",[87,17021,165],{"class":97},[87,17023,1105],{"class":171},[87,17025,17026],{"class":492}," l",[87,17028,1473],{"class":97},[87,17030,1105],{"class":171},[87,17032,17033],{"class":492}," w",[87,17035,1473],{"class":97},[87,17037,1105],{"class":171},[87,17039,17040],{"class":492}," h",[87,17042,1108],{"class":97},[87,17044,17045],{"class":89,"line":463},[87,17046,2985],{"class":97},[87,17048,17049,17052,17054],{"class":89,"line":469},[87,17050,17051],{"class":97},"        m_L",[87,17053,946],{"class":171},[87,17055,17056],{"class":97},"l;\n",[87,17058,17059,17062,17064],{"class":89,"line":2287},[87,17060,17061],{"class":97},"        m_W",[87,17063,946],{"class":171},[87,17065,17066],{"class":97},"w;\n",[87,17068,17069,17072,17074],{"class":89,"line":2568},[87,17070,17071],{"class":97},"        m_H",[87,17073,946],{"class":171},[87,17075,17076],{"class":97},"h;\n",[87,17078,17079],{"class":89,"line":2573},[87,17080,3142],{"class":97},[87,17082,17083,17085,17088],{"class":89,"line":2579},[87,17084,2940],{"class":171},[87,17086,17087],{"class":205}," mianji",[87,17089,2931],{"class":97},[87,17091,17092],{"class":89,"line":2584},[87,17093,2985],{"class":97},[87,17095,17096,17098,17100,17102,17105,17107,17110,17112,17115,17117,17120,17122,17125,17127],{"class":89,"line":2598},[87,17097,15702],{"class":171},[87,17099,15705],{"class":104},[87,17101,1549],{"class":171},[87,17103,17104],{"class":97},"(m_L",[87,17106,1549],{"class":171},[87,17108,17109],{"class":97},"m_W ",[87,17111,1575],{"class":171},[87,17113,17114],{"class":97}," m_L",[87,17116,1549],{"class":171},[87,17118,17119],{"class":97},"m_H ",[87,17121,1575],{"class":171},[87,17123,17124],{"class":97}," m_W",[87,17126,1549],{"class":171},[87,17128,17129],{"class":97},"m_H);\n",[87,17131,17132],{"class":89,"line":2603},[87,17133,3142],{"class":97},[87,17135,17136,17138,17141],{"class":89,"line":2609},[87,17137,2940],{"class":171},[87,17139,17140],{"class":205}," tiji",[87,17142,2931],{"class":97},[87,17144,17145],{"class":89,"line":2630},[87,17146,2985],{"class":97},[87,17148,17149,17151,17153,17155,17158,17160],{"class":89,"line":2635},[87,17150,15702],{"class":171},[87,17152,17114],{"class":97},[87,17154,1549],{"class":171},[87,17156,17157],{"class":97},"m_W",[87,17159,1549],{"class":171},[87,17161,17162],{"class":97},"m_H;\n",[87,17164,17165],{"class":89,"line":2649},[87,17166,3142],{"class":97},[87,17168,17169],{"class":89,"line":2654},[87,17170,17171],{"class":199},"    \u002F\u002F获取长宽高\n",[87,17173,17174,17176,17179],{"class":89,"line":2683},[87,17175,2940],{"class":171},[87,17177,17178],{"class":205}," getLength",[87,17180,2931],{"class":97},[87,17182,17183],{"class":89,"line":2688},[87,17184,2985],{"class":97},[87,17186,17187,17189],{"class":89,"line":2705},[87,17188,15702],{"class":171},[87,17190,17191],{"class":97}," m_L;\n",[87,17193,17194],{"class":89,"line":2710},[87,17195,3142],{"class":97},[87,17197,17198,17200,17203],{"class":89,"line":2715},[87,17199,2940],{"class":171},[87,17201,17202],{"class":205}," getWidth",[87,17204,2931],{"class":97},[87,17206,17207],{"class":89,"line":2720},[87,17208,2985],{"class":97},[87,17210,17211,17213],{"class":89,"line":2734},[87,17212,15702],{"class":171},[87,17214,17215],{"class":97}," m_W;\n",[87,17217,17218],{"class":89,"line":2739},[87,17219,3142],{"class":97},[87,17221,17222,17224,17227],{"class":89,"line":3532},[87,17223,2940],{"class":171},[87,17225,17226],{"class":205}," getHeight",[87,17228,2931],{"class":97},[87,17230,17231],{"class":89,"line":3546},[87,17232,2985],{"class":97},[87,17234,17235,17237],{"class":89,"line":3554},[87,17236,15702],{"class":171},[87,17238,17239],{"class":97}," m_H;\n",[87,17241,17242],{"class":89,"line":3559},[87,17243,3142],{"class":97},[87,17245,17246],{"class":89,"line":3565},[87,17247,17248],{"class":199},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[87,17250,17251,17254,17257,17259,17262,17264],{"class":89,"line":3571},[87,17252,17253],{"class":171},"    bool",[87,17255,17256],{"class":205}," isEqual",[87,17258,165],{"class":97},[87,17260,17261],{"class":205},"Cube",[87,17263,3803],{"class":492},[87,17265,1108],{"class":97},[87,17267,17268],{"class":89,"line":3576},[87,17269,2985],{"class":97},[87,17271,17272,17274,17277,17280,17282,17284,17287,17289,17292,17295,17297,17299,17302,17304,17306,17309,17311,17313],{"class":89,"line":8898},[87,17273,3452],{"class":171},[87,17275,17276],{"class":97}," (c.",[87,17278,17279],{"class":205},"getLength",[87,17281,14000],{"class":97},[87,17283,3903],{"class":171},[87,17285,17286],{"class":97}," m_L ",[87,17288,2671],{"class":171},[87,17290,17291],{"class":97}," c.",[87,17293,17294],{"class":205},"getWidth",[87,17296,14000],{"class":97},[87,17298,3903],{"class":171},[87,17300,17301],{"class":97}," m_W ",[87,17303,2671],{"class":171},[87,17305,17291],{"class":97},[87,17307,17308],{"class":205},"getHeight",[87,17310,14000],{"class":97},[87,17312,3903],{"class":171},[87,17314,17315],{"class":97}," m_H)\n",[87,17317,17318],{"class":89,"line":8922},[87,17319,3465],{"class":97},[87,17321,17322,17324,17327],{"class":89,"line":8927},[87,17323,16681],{"class":171},[87,17325,17326],{"class":104}," true",[87,17328,117],{"class":97},[87,17330,17331],{"class":89,"line":8933},[87,17332,3484],{"class":97},[87,17334,17335],{"class":89,"line":8960},[87,17336,3525],{"class":171},[87,17338,17339],{"class":89,"line":8965},[87,17340,3465],{"class":97},[87,17342,17343,17345,17348],{"class":89,"line":8971},[87,17344,16681],{"class":171},[87,17346,17347],{"class":104}," false",[87,17349,117],{"class":97},[87,17351,17352],{"class":89,"line":8983},[87,17353,3484],{"class":97},[87,17355,17356],{"class":89,"line":8995},[87,17357,3142],{"class":97},[87,17359,17360],{"class":89,"line":9007},[87,17361,17362],{"class":199},"    \u002F\u002F私有属性\n",[87,17364,17365],{"class":89,"line":10666},[87,17366,16172],{"class":171},[87,17368,17369,17371],{"class":89,"line":10691},[87,17370,2940],{"class":171},[87,17372,17191],{"class":97},[87,17374,17375,17377],{"class":89,"line":10714},[87,17376,2940],{"class":171},[87,17378,17215],{"class":97},[87,17380,17381,17383],{"class":89,"line":10738},[87,17382,2940],{"class":171},[87,17384,17239],{"class":97},[87,17386,17387],{"class":89,"line":10743},[87,17388,3355],{"emptyLinePlaceholder":1029},[87,17390,17391],{"class":89,"line":10748},[87,17392,4949],{"class":97},[87,17394,17395],{"class":89,"line":10753},[87,17396,17397],{"class":199},"\u002F\u002F全局函数判断两个立方体是否相等\n",[87,17399,17400,17402,17404,17406,17408,17411,17413,17415,17418],{"class":89,"line":10762},[87,17401,2312],{"class":171},[87,17403,17256],{"class":205},[87,17405,165],{"class":97},[87,17407,17261],{"class":205},[87,17409,17410],{"class":492}," c1",[87,17412,1473],{"class":97},[87,17414,17261],{"class":205},[87,17416,17417],{"class":492}," c2",[87,17419,1108],{"class":97},[87,17421,17422],{"class":89,"line":10767},[87,17423,2503],{"class":97},[87,17425,17426,17428,17431,17433,17435,17437,17440,17442,17445,17447,17449,17451,17453,17455,17457,17459,17461,17463,17465,17467,17469,17471,17473,17475],{"class":89,"line":10773},[87,17427,5044],{"class":171},[87,17429,17430],{"class":97}," (c1.",[87,17432,17279],{"class":205},[87,17434,14000],{"class":97},[87,17436,3903],{"class":171},[87,17438,17439],{"class":97}," c2.",[87,17441,17279],{"class":205},[87,17443,17444],{"class":97},"()) ",[87,17446,2671],{"class":171},[87,17448,17430],{"class":97},[87,17450,17294],{"class":205},[87,17452,14000],{"class":97},[87,17454,3903],{"class":171},[87,17456,17439],{"class":97},[87,17458,17294],{"class":205},[87,17460,17444],{"class":97},[87,17462,2671],{"class":171},[87,17464,17430],{"class":97},[87,17466,17308],{"class":205},[87,17468,14000],{"class":97},[87,17470,3903],{"class":171},[87,17472,17439],{"class":97},[87,17474,17308],{"class":205},[87,17476,17477],{"class":97},"());\n",[87,17479,17480],{"class":89,"line":10794},[87,17481,123],{"class":97},[87,17483,17484,17486,17488],{"class":89,"line":10800},[87,17485,1105],{"class":171},[87,17487,2928],{"class":205},[87,17489,2931],{"class":97},[87,17491,17492],{"class":89,"line":10814},[87,17493,2503],{"class":97},[87,17495,17496],{"class":89,"line":10820},[87,17497,17498],{"class":97},"    Cube c1;\n",[87,17500,17501],{"class":89,"line":10847},[87,17502,17503],{"class":199},"    \u002F\u002F输入立方体的长宽高\n",[87,17505,17506,17508,17510,17513,17515],{"class":89,"line":10856},[87,17507,2508],{"class":97},[87,17509,2134],{"class":171},[87,17511,17512],{"class":949},"\"请输入第一个立方体的长、宽、高：\"",[87,17514,2134],{"class":171},[87,17516,2156],{"class":97},[87,17518,17519,17521],{"class":89,"line":10862},[87,17520,2940],{"class":171},[87,17522,17523],{"class":97}," l,w,h,l1,w1,h1;\n",[87,17525,17526,17528,17530,17532,17534,17536,17538],{"class":89,"line":10870},[87,17527,2967],{"class":97},[87,17529,2387],{"class":171},[87,17531,1612],{"class":97},[87,17533,2387],{"class":171},[87,17535,1887],{"class":97},[87,17537,2387],{"class":171},[87,17539,17076],{"class":97},[87,17541,17542,17545,17548],{"class":89,"line":10875},[87,17543,17544],{"class":97},"    c1.",[87,17546,17547],{"class":205},"setLwh",[87,17549,17550],{"class":97},"(l,w,h);\n",[87,17552,17554],{"class":89,"line":17553},66,[87,17555,17556],{"class":199},"    \u002F\u002F面积\n",[87,17558,17560,17562,17564,17567,17569,17571,17574,17576,17578],{"class":89,"line":17559},67,[87,17561,2508],{"class":97},[87,17563,2134],{"class":171},[87,17565,17566],{"class":949},"\"立方体的表面积为：\"",[87,17568,2134],{"class":171},[87,17570,15780],{"class":97},[87,17572,17573],{"class":205},"mianji",[87,17575,3382],{"class":97},[87,17577,2134],{"class":171},[87,17579,2156],{"class":97},[87,17581,17583],{"class":89,"line":17582},68,[87,17584,17585],{"class":199},"    \u002F\u002F体积\n",[87,17587,17589,17591,17593,17596,17598,17600,17603,17605,17607],{"class":89,"line":17588},69,[87,17590,2508],{"class":97},[87,17592,2134],{"class":171},[87,17594,17595],{"class":949},"\"立方体的体积为：\"",[87,17597,2134],{"class":171},[87,17599,15780],{"class":97},[87,17601,17602],{"class":205},"tiji",[87,17604,3382],{"class":97},[87,17606,2134],{"class":171},[87,17608,2156],{"class":97},[87,17610,17612,17614,17616,17619,17621],{"class":89,"line":17611},70,[87,17613,2508],{"class":97},[87,17615,2134],{"class":171},[87,17617,17618],{"class":949},"\"请输入第二个立方体的长、宽、高：\"",[87,17620,2134],{"class":171},[87,17622,2156],{"class":97},[87,17624,17626,17628,17630,17633,17635,17638,17640],{"class":89,"line":17625},71,[87,17627,2967],{"class":97},[87,17629,2387],{"class":171},[87,17631,17632],{"class":97},"l1",[87,17634,2387],{"class":171},[87,17636,17637],{"class":97},"w1",[87,17639,2387],{"class":171},[87,17641,17642],{"class":97},"h1;\n",[87,17644,17646],{"class":89,"line":17645},72,[87,17647,17648],{"class":97},"    Cube c2;\n",[87,17650,17652,17655,17657],{"class":89,"line":17651},73,[87,17653,17654],{"class":97},"    c2.",[87,17656,17547],{"class":205},[87,17658,17659],{"class":97},"(l1,w1,h1);\n",[87,17661,17663,17665,17667,17670,17672,17675,17677,17679,17681],{"class":89,"line":17662},74,[87,17664,2508],{"class":97},[87,17666,2134],{"class":171},[87,17668,17669],{"class":949},"\"第二个立方体的表面积为：\"",[87,17671,2134],{"class":171},[87,17673,17674],{"class":97},"c2.",[87,17676,17573],{"class":205},[87,17678,3382],{"class":97},[87,17680,2134],{"class":171},[87,17682,2156],{"class":97},[87,17684,17686,17688,17690,17693,17695,17697,17699,17701,17703],{"class":89,"line":17685},75,[87,17687,2508],{"class":97},[87,17689,2134],{"class":171},[87,17691,17692],{"class":949},"\"第二个立方体的体积为：\"",[87,17694,2134],{"class":171},[87,17696,17674],{"class":97},[87,17698,17602],{"class":205},[87,17700,3382],{"class":97},[87,17702,2134],{"class":171},[87,17704,2156],{"class":97},[87,17706,17708],{"class":89,"line":17707},76,[87,17709,3355],{"emptyLinePlaceholder":1029},[87,17711,17713],{"class":89,"line":17712},77,[87,17714,17715],{"class":199},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[87,17717,17719,17721,17723,17726,17728],{"class":89,"line":17718},78,[87,17720,2508],{"class":97},[87,17722,2134],{"class":171},[87,17724,17725],{"class":949},"\"内部函数判断结果：\"",[87,17727,2134],{"class":171},[87,17729,2156],{"class":97},[87,17731,17733,17735,17737,17740],{"class":89,"line":17732},79,[87,17734,4055],{"class":171},[87,17736,17430],{"class":97},[87,17738,17739],{"class":205},"isEqual",[87,17741,17742],{"class":97},"(c2))\n",[87,17744,17746],{"class":89,"line":17745},80,[87,17747,2985],{"class":97},[87,17749,17751,17753,17755,17758,17760],{"class":89,"line":17750},81,[87,17752,4405],{"class":97},[87,17754,2134],{"class":171},[87,17756,17757],{"class":949},"\"两个立方体相等\"",[87,17759,2134],{"class":171},[87,17761,2156],{"class":97},[87,17763,17765],{"class":89,"line":17764},82,[87,17766,3142],{"class":97},[87,17768,17770],{"class":89,"line":17769},83,[87,17771,17772],{"class":171},"    else\n",[87,17774,17776],{"class":89,"line":17775},84,[87,17777,2985],{"class":97},[87,17779,17781,17783,17785,17788,17790],{"class":89,"line":17780},85,[87,17782,4405],{"class":97},[87,17784,2134],{"class":171},[87,17786,17787],{"class":949},"\"两个立方体不相等\"",[87,17789,2134],{"class":171},[87,17791,2156],{"class":97},[87,17793,17795],{"class":89,"line":17794},86,[87,17796,3142],{"class":97},[87,17798,17800],{"class":89,"line":17799},87,[87,17801,3355],{"emptyLinePlaceholder":1029},[87,17803,17805,17807,17809,17812,17814],{"class":89,"line":17804},88,[87,17806,2508],{"class":97},[87,17808,2134],{"class":171},[87,17810,17811],{"class":949},"\"全局函数判断结果：\"",[87,17813,2134],{"class":171},[87,17815,2156],{"class":97},[87,17817,17819,17821,17823,17825],{"class":89,"line":17818},89,[87,17820,4055],{"class":171},[87,17822,2614],{"class":97},[87,17824,17739],{"class":205},[87,17826,17827],{"class":97},"(c1, c2))\n",[87,17829,17831],{"class":89,"line":17830},90,[87,17832,2985],{"class":97},[87,17834,17836,17838,17840,17842,17844],{"class":89,"line":17835},91,[87,17837,4405],{"class":97},[87,17839,2134],{"class":171},[87,17841,17757],{"class":949},[87,17843,2134],{"class":171},[87,17845,2156],{"class":97},[87,17847,17849],{"class":89,"line":17848},92,[87,17850,3142],{"class":97},[87,17852,17854],{"class":89,"line":17853},93,[87,17855,17772],{"class":171},[87,17857,17859],{"class":89,"line":17858},94,[87,17860,2985],{"class":97},[87,17862,17864,17866,17868,17870,17872],{"class":89,"line":17863},95,[87,17865,4405],{"class":97},[87,17867,2134],{"class":171},[87,17869,17787],{"class":949},[87,17871,2134],{"class":171},[87,17873,2156],{"class":97},[87,17875,17877],{"class":89,"line":17876},96,[87,17878,3142],{"class":97},[87,17880,17882],{"class":89,"line":17881},97,[87,17883,123],{"class":97},[1055,17885,17886],{"start":101},[29,17887,17888],{},[57,17889,17890],{},"练习案例2：点和圆的关系",[26,17892,17893],{},[29,17894,17895],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[77,17897,17899],{"className":1091,"code":17898,"language":1093,"meta":82,"style":82},"#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",[84,17900,17901,17907,17917,17924,17931,17935,17939,17944,17978,17983,17999,18013,18017,18021,18028,18035,18039,18045,18049,18053,18057,18079,18101,18106,18120,18135,18139,18143,18149,18154,18159,18163,18189,18193,18223,18251,18279,18296,18300,18313,18317,18321,18325,18338,18342,18346,18354,18358,18362,18366,18371,18375,18386,18393,18402,18412,18423,18430,18443,18454,18464,18475,18482,18496,18501,18511,18519],{"__ignoreMap":82},[87,17902,17903,17905],{"class":89,"line":90},[87,17904,2905],{"class":171},[87,17906,2908],{"class":949},[87,17908,17909,17911,17913,17915],{"class":89,"line":101},[87,17910,2913],{"class":171},[87,17912,2916],{"class":171},[87,17914,2919],{"class":205},[87,17916,117],{"class":97},[87,17918,17919,17921],{"class":89,"line":120},[87,17920,2905],{"class":171},[87,17922,17923],{"class":949},"\u003Ccmath>\n",[87,17925,17926,17928],{"class":89,"line":222},[87,17927,15644],{"class":171},[87,17929,17930],{"class":205}," Point\n",[87,17932,17933],{"class":89,"line":234},[87,17934,2503],{"class":97},[87,17936,17937],{"class":89,"line":256},[87,17938,15666],{"class":171},[87,17940,17941],{"class":89,"line":269},[87,17942,17943],{"class":199},"    \u002F\u002F赋值\n",[87,17945,17946,17948,17951,17953,17955,17958,17960,17962,17965,17968,17970,17973,17975],{"class":89,"line":463},[87,17947,15859],{"class":171},[87,17949,17950],{"class":205}," setPoint",[87,17952,165],{"class":97},[87,17954,14987],{"class":171},[87,17956,17957],{"class":492}," x",[87,17959,13385],{"class":97},[87,17961,14987],{"class":171},[87,17963,17964],{"class":492}," y",[87,17966,17967],{"class":97},") { m_x ",[87,17969,946],{"class":171},[87,17971,17972],{"class":97}," x; m_y ",[87,17974,946],{"class":171},[87,17976,17977],{"class":97}," y; }\n",[87,17979,17980],{"class":89,"line":469},[87,17981,17982],{"class":199},"    \u002F\u002F获取坐标\n",[87,17984,17985,17987,17990,17993,17996],{"class":89,"line":2287},[87,17986,15688],{"class":171},[87,17988,17989],{"class":205}," getX",[87,17991,17992],{"class":97},"() { ",[87,17994,17995],{"class":171},"return",[87,17997,17998],{"class":97}," m_x; }\n",[87,18000,18001,18003,18006,18008,18010],{"class":89,"line":2568},[87,18002,15688],{"class":171},[87,18004,18005],{"class":205}," getY",[87,18007,17992],{"class":97},[87,18009,17995],{"class":171},[87,18011,18012],{"class":97}," m_y; }\n",[87,18014,18015],{"class":89,"line":2573},[87,18016,3355],{"emptyLinePlaceholder":1029},[87,18018,18019],{"class":89,"line":2579},[87,18020,16172],{"class":171},[87,18022,18023,18025],{"class":89,"line":2584},[87,18024,15688],{"class":171},[87,18026,18027],{"class":97}," m_x;\n",[87,18029,18030,18032],{"class":89,"line":2598},[87,18031,15688],{"class":171},[87,18033,18034],{"class":97}," m_y;\n",[87,18036,18037],{"class":89,"line":2603},[87,18038,4949],{"class":97},[87,18040,18041,18043],{"class":89,"line":2609},[87,18042,15644],{"class":171},[87,18044,15647],{"class":205},[87,18046,18047],{"class":89,"line":2630},[87,18048,2503],{"class":97},[87,18050,18051],{"class":89,"line":2635},[87,18052,15666],{"class":171},[87,18054,18055],{"class":89,"line":2649},[87,18056,17943],{"class":199},[87,18058,18059,18061,18064,18066,18068,18071,18074,18076],{"class":89,"line":2654},[87,18060,15859],{"class":171},[87,18062,18063],{"class":205}," setRadius",[87,18065,165],{"class":97},[87,18067,14987],{"class":171},[87,18069,18070],{"class":492}," r",[87,18072,18073],{"class":97},") { m_r ",[87,18075,946],{"class":171},[87,18077,18078],{"class":97}," r; }\n",[87,18080,18081,18083,18086,18088,18091,18093,18096,18098],{"class":89,"line":2683},[87,18082,15859],{"class":171},[87,18084,18085],{"class":205}," setCenter",[87,18087,165],{"class":97},[87,18089,18090],{"class":205},"Point",[87,18092,321],{"class":492},[87,18094,18095],{"class":97},") { m_center ",[87,18097,946],{"class":171},[87,18099,18100],{"class":97}," center; }\n",[87,18102,18103],{"class":89,"line":2688},[87,18104,18105],{"class":199},"    \u002F\u002F获取属性\n",[87,18107,18108,18110,18113,18115,18117],{"class":89,"line":2705},[87,18109,15688],{"class":171},[87,18111,18112],{"class":205}," getRadius",[87,18114,17992],{"class":97},[87,18116,17995],{"class":171},[87,18118,18119],{"class":97}," m_r; }\n",[87,18121,18122,18125,18128,18130,18132],{"class":89,"line":2710},[87,18123,18124],{"class":205},"    Point",[87,18126,18127],{"class":205}," getCenter",[87,18129,17992],{"class":97},[87,18131,17995],{"class":171},[87,18133,18134],{"class":97}," m_center; }\n",[87,18136,18137],{"class":89,"line":2715},[87,18138,3355],{"emptyLinePlaceholder":1029},[87,18140,18141],{"class":89,"line":2720},[87,18142,16172],{"class":171},[87,18144,18145,18147],{"class":89,"line":2734},[87,18146,15688],{"class":171},[87,18148,15678],{"class":97},[87,18150,18151],{"class":89,"line":2739},[87,18152,18153],{"class":199},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[87,18155,18156],{"class":89,"line":3532},[87,18157,18158],{"class":97},"    Point m_center;\n",[87,18160,18161],{"class":89,"line":3546},[87,18162,4949],{"class":97},[87,18164,18165,18167,18170,18172,18175,18177,18179,18181,18183,18185,18187],{"class":89,"line":3554},[87,18166,6314],{"class":171},[87,18168,18169],{"class":205}," isInCircle",[87,18171,165],{"class":97},[87,18173,18174],{"class":205},"Circle",[87,18176,11534],{"class":171},[87,18178,1384],{"class":492},[87,18180,1473],{"class":97},[87,18182,18090],{"class":205},[87,18184,11534],{"class":171},[87,18186,19],{"class":492},[87,18188,1108],{"class":97},[87,18190,18191],{"class":89,"line":3559},[87,18192,2503],{"class":97},[87,18194,18195,18197,18200,18202,18204,18207,18210,18213,18215,18217,18219,18221],{"class":89,"line":3565},[87,18196,15688],{"class":171},[87,18198,18199],{"class":97}," dx ",[87,18201,946],{"class":171},[87,18203,17291],{"class":97},[87,18205,18206],{"class":205},"getCenter",[87,18208,18209],{"class":97},"().",[87,18211,18212],{"class":205},"getX",[87,18214,14000],{"class":97},[87,18216,1625],{"class":171},[87,18218,16837],{"class":97},[87,18220,18212],{"class":205},[87,18222,6586],{"class":97},[87,18224,18225,18227,18230,18232,18234,18236,18238,18241,18243,18245,18247,18249],{"class":89,"line":3571},[87,18226,15688],{"class":171},[87,18228,18229],{"class":97}," dy ",[87,18231,946],{"class":171},[87,18233,17291],{"class":97},[87,18235,18206],{"class":205},[87,18237,18209],{"class":97},[87,18239,18240],{"class":205},"getY",[87,18242,14000],{"class":97},[87,18244,1625],{"class":171},[87,18246,16837],{"class":97},[87,18248,18240],{"class":205},[87,18250,6586],{"class":97},[87,18252,18253,18255,18258,18260,18263,18266,18268,18270,18272,18274,18276],{"class":89,"line":3576},[87,18254,15688],{"class":171},[87,18256,18257],{"class":97}," distance ",[87,18259,946],{"class":171},[87,18261,18262],{"class":205}," sqrt",[87,18264,18265],{"class":97},"(dx ",[87,18267,1549],{"class":171},[87,18269,18199],{"class":97},[87,18271,1575],{"class":171},[87,18273,18229],{"class":97},[87,18275,1549],{"class":171},[87,18277,18278],{"class":97}," dy);\n",[87,18280,18281,18283,18286,18288,18290,18293],{"class":89,"line":8898},[87,18282,4055],{"class":171},[87,18284,18285],{"class":97}," (distance ",[87,18287,938],{"class":171},[87,18289,17291],{"class":97},[87,18291,18292],{"class":205},"getRadius",[87,18294,18295],{"class":97},"())\n",[87,18297,18298],{"class":89,"line":8922},[87,18299,2985],{"class":97},[87,18301,18302,18304,18306,18309,18311],{"class":89,"line":8927},[87,18303,10619],{"class":97},[87,18305,2134],{"class":171},[87,18307,18308],{"class":949}," \"点在圆内\"",[87,18310,2402],{"class":171},[87,18312,9790],{"class":97},[87,18314,18315],{"class":89,"line":8933},[87,18316,3142],{"class":97},[87,18318,18319],{"class":89,"line":8960},[87,18320,17772],{"class":171},[87,18322,18323],{"class":89,"line":8965},[87,18324,2985],{"class":97},[87,18326,18327,18329,18331,18334,18336],{"class":89,"line":8971},[87,18328,10619],{"class":97},[87,18330,2134],{"class":171},[87,18332,18333],{"class":949}," \"点在圆外\"",[87,18335,2402],{"class":171},[87,18337,9790],{"class":97},[87,18339,18340],{"class":89,"line":8983},[87,18341,3142],{"class":97},[87,18343,18344],{"class":89,"line":8995},[87,18345,123],{"class":97},[87,18347,18348,18350,18352],{"class":89,"line":9007},[87,18349,1105],{"class":171},[87,18351,2928],{"class":205},[87,18353,2931],{"class":97},[87,18355,18356],{"class":89,"line":10666},[87,18357,2503],{"class":97},[87,18359,18360],{"class":89,"line":10691},[87,18361,16003],{"class":199},[87,18363,18364],{"class":89,"line":10714},[87,18365,15750],{"class":97},[87,18367,18368],{"class":89,"line":10738},[87,18369,18370],{"class":97},"    Point p1;\n",[87,18372,18373],{"class":89,"line":10743},[87,18374,17943],{"class":199},[87,18376,18377,18379,18381,18384],{"class":89,"line":10748},[87,18378,2508],{"class":97},[87,18380,2134],{"class":171},[87,18382,18383],{"class":949},"\"请输入圆的半径：\"",[87,18385,117],{"class":97},[87,18387,18388,18390],{"class":89,"line":10753},[87,18389,15688],{"class":171},[87,18391,18392],{"class":97}," r;\n",[87,18394,18395,18397,18399],{"class":89,"line":10762},[87,18396,2967],{"class":97},[87,18398,2387],{"class":171},[87,18400,18401],{"class":97},"r;\n",[87,18403,18404,18406,18409],{"class":89,"line":10767},[87,18405,17544],{"class":97},[87,18407,18408],{"class":205},"setRadius",[87,18410,18411],{"class":97},"(r);\n",[87,18413,18414,18416,18418,18421],{"class":89,"line":10773},[87,18415,2508],{"class":97},[87,18417,2134],{"class":171},[87,18419,18420],{"class":949},"\"请输入圆心坐标：\"",[87,18422,117],{"class":97},[87,18424,18425,18427],{"class":89,"line":10794},[87,18426,15688],{"class":171},[87,18428,18429],{"class":97}," x, y;\n",[87,18431,18432,18434,18436,18438,18440],{"class":89,"line":10800},[87,18433,2967],{"class":97},[87,18435,2387],{"class":171},[87,18437,1912],{"class":97},[87,18439,2387],{"class":171},[87,18441,18442],{"class":97},"y;\n",[87,18444,18445,18448,18451],{"class":89,"line":10814},[87,18446,18447],{"class":97},"    p1.",[87,18449,18450],{"class":205},"setPoint",[87,18452,18453],{"class":97},"(x, y);\n",[87,18455,18456,18458,18461],{"class":89,"line":10820},[87,18457,17544],{"class":97},[87,18459,18460],{"class":205},"setCenter",[87,18462,18463],{"class":97},"(p1);\n",[87,18465,18466,18468,18470,18473],{"class":89,"line":10847},[87,18467,2508],{"class":97},[87,18469,2134],{"class":171},[87,18471,18472],{"class":949},"\"请输入测试点坐标：\"",[87,18474,117],{"class":97},[87,18476,18477,18479],{"class":89,"line":10856},[87,18478,15688],{"class":171},[87,18480,18481],{"class":97}," x1, y1;\n",[87,18483,18484,18486,18488,18491,18493],{"class":89,"line":10862},[87,18485,2967],{"class":97},[87,18487,2387],{"class":171},[87,18489,18490],{"class":97},"x1",[87,18492,2387],{"class":171},[87,18494,18495],{"class":97},"y1;\n",[87,18497,18498],{"class":89,"line":10870},[87,18499,18500],{"class":97},"    Point p2;\n",[87,18502,18503,18506,18508],{"class":89,"line":10875},[87,18504,18505],{"class":97},"    p2.",[87,18507,18450],{"class":205},[87,18509,18510],{"class":97},"(x1, y1);\n",[87,18512,18513,18516],{"class":89,"line":17553},[87,18514,18515],{"class":205},"    isInCircle",[87,18517,18518],{"class":97},"(c1, p2);\n",[87,18520,18521],{"class":89,"line":17559},[87,18522,123],{"class":97},[19,18524,18525],{},"在类中可以让另一个类作为本来的成员",[19,18527,18528],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,18530,18531],{},"创建point.h",[77,18533,18535],{"className":1091,"code":18534,"language":1093,"meta":82,"style":82},"#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",[84,18536,18537,18548,18554,18564,18570,18574,18579,18583,18587,18607,18611,18619,18627,18631,18635,18641,18647],{"__ignoreMap":82},[87,18538,18539,18542,18545],{"class":89,"line":90},[87,18540,18541],{"class":171},"#pragma",[87,18543,18544],{"class":205}," once",[87,18546,18547],{"class":199}," \u002F\u002F防止头文件重复包含\n",[87,18549,18550,18552],{"class":89,"line":101},[87,18551,2905],{"class":171},[87,18553,2908],{"class":949},[87,18555,18556,18558,18560,18562],{"class":89,"line":120},[87,18557,2913],{"class":171},[87,18559,2916],{"class":171},[87,18561,2919],{"class":205},[87,18563,117],{"class":97},[87,18565,18566,18568],{"class":89,"line":222},[87,18567,15644],{"class":171},[87,18569,17930],{"class":205},[87,18571,18572],{"class":89,"line":234},[87,18573,2503],{"class":97},[87,18575,18576],{"class":89,"line":256},[87,18577,18578],{"class":199},"\u002F\u002F做好声明与变量定义就可以\n",[87,18580,18581],{"class":89,"line":269},[87,18582,15666],{"class":171},[87,18584,18585],{"class":89,"line":463},[87,18586,17943],{"class":199},[87,18588,18589,18591,18593,18595,18597,18599,18601,18603,18605],{"class":89,"line":469},[87,18590,15859],{"class":171},[87,18592,17950],{"class":205},[87,18594,165],{"class":97},[87,18596,14987],{"class":171},[87,18598,17957],{"class":492},[87,18600,13385],{"class":97},[87,18602,14987],{"class":171},[87,18604,17964],{"class":492},[87,18606,175],{"class":97},[87,18608,18609],{"class":89,"line":2287},[87,18610,17982],{"class":199},[87,18612,18613,18615,18617],{"class":89,"line":2568},[87,18614,15688],{"class":171},[87,18616,17989],{"class":205},[87,18618,6586],{"class":97},[87,18620,18621,18623,18625],{"class":89,"line":2573},[87,18622,15688],{"class":171},[87,18624,18005],{"class":205},[87,18626,6586],{"class":97},[87,18628,18629],{"class":89,"line":2579},[87,18630,3355],{"emptyLinePlaceholder":1029},[87,18632,18633],{"class":89,"line":2584},[87,18634,16172],{"class":171},[87,18636,18637,18639],{"class":89,"line":2598},[87,18638,15688],{"class":171},[87,18640,18027],{"class":97},[87,18642,18643,18645],{"class":89,"line":2603},[87,18644,15688],{"class":171},[87,18646,18034],{"class":97},[87,18648,18649],{"class":89,"line":2609},[87,18650,4949],{"class":97},[19,18652,18653],{},"创建point.cpp",[77,18655,18657],{"className":1091,"code":18656,"language":1093,"meta":82,"style":82},"#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",[84,18658,18659,18666,18671,18705,18709,18725],{"__ignoreMap":82},[87,18660,18661,18663],{"class":89,"line":90},[87,18662,2905],{"class":171},[87,18664,18665],{"class":949},"\u003Cpoint.h>\n",[87,18667,18668],{"class":89,"line":101},[87,18669,18670],{"class":199},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[87,18672,18673,18675,18678,18681,18683,18685,18687,18689,18691,18693,18695,18697,18699,18701,18703],{"class":89,"line":120},[87,18674,15859],{"class":171},[87,18676,18677],{"class":205}," Point",[87,18679,18680],{"class":97},"::",[87,18682,18450],{"class":205},[87,18684,165],{"class":97},[87,18686,14987],{"class":171},[87,18688,17957],{"class":492},[87,18690,13385],{"class":97},[87,18692,14987],{"class":171},[87,18694,17964],{"class":492},[87,18696,17967],{"class":97},[87,18698,946],{"class":171},[87,18700,17972],{"class":97},[87,18702,946],{"class":171},[87,18704,17977],{"class":97},[87,18706,18707],{"class":89,"line":222},[87,18708,17982],{"class":199},[87,18710,18711,18713,18715,18717,18719,18721,18723],{"class":89,"line":234},[87,18712,15688],{"class":171},[87,18714,18677],{"class":205},[87,18716,18680],{"class":97},[87,18718,18212],{"class":205},[87,18720,17992],{"class":97},[87,18722,17995],{"class":171},[87,18724,17998],{"class":97},[87,18726,18727,18729,18731,18733,18735,18737,18739],{"class":89,"line":256},[87,18728,15688],{"class":171},[87,18730,18677],{"class":205},[87,18732,18680],{"class":97},[87,18734,18240],{"class":205},[87,18736,17992],{"class":97},[87,18738,17995],{"class":171},[87,18740,18012],{"class":97},[19,18742,18743],{},"创建circle.h",[77,18745,18747],{"className":1091,"code":18746,"language":1093,"meta":82,"style":82},"#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",[84,18748,18749,18756,18762,18772,18778,18784,18788,18792,18796,18810,18824,18828,18836,18844,18848,18852,18858,18862,18866],{"__ignoreMap":82},[87,18750,18751,18753],{"class":89,"line":90},[87,18752,18541],{"class":171},[87,18754,18755],{"class":205}," once\n",[87,18757,18758,18760],{"class":89,"line":101},[87,18759,2905],{"class":171},[87,18761,2908],{"class":949},[87,18763,18764,18766,18768,18770],{"class":89,"line":120},[87,18765,2913],{"class":171},[87,18767,2916],{"class":171},[87,18769,2919],{"class":205},[87,18771,117],{"class":97},[87,18773,18774,18776],{"class":89,"line":222},[87,18775,2905],{"class":171},[87,18777,18665],{"class":949},[87,18779,18780,18782],{"class":89,"line":234},[87,18781,15644],{"class":171},[87,18783,15647],{"class":205},[87,18785,18786],{"class":89,"line":256},[87,18787,2503],{"class":97},[87,18789,18790],{"class":89,"line":269},[87,18791,15666],{"class":171},[87,18793,18794],{"class":89,"line":463},[87,18795,17943],{"class":199},[87,18797,18798,18800,18802,18804,18806,18808],{"class":89,"line":469},[87,18799,15859],{"class":171},[87,18801,18063],{"class":205},[87,18803,165],{"class":97},[87,18805,14987],{"class":171},[87,18807,18070],{"class":492},[87,18809,175],{"class":97},[87,18811,18812,18814,18816,18818,18820,18822],{"class":89,"line":2287},[87,18813,15859],{"class":171},[87,18815,18085],{"class":205},[87,18817,165],{"class":97},[87,18819,18090],{"class":205},[87,18821,321],{"class":492},[87,18823,175],{"class":97},[87,18825,18826],{"class":89,"line":2568},[87,18827,18105],{"class":199},[87,18829,18830,18832,18834],{"class":89,"line":2573},[87,18831,15688],{"class":171},[87,18833,18112],{"class":205},[87,18835,6586],{"class":97},[87,18837,18838,18840,18842],{"class":89,"line":2579},[87,18839,18124],{"class":205},[87,18841,18127],{"class":205},[87,18843,6586],{"class":97},[87,18845,18846],{"class":89,"line":2584},[87,18847,3355],{"emptyLinePlaceholder":1029},[87,18849,18850],{"class":89,"line":2598},[87,18851,16172],{"class":171},[87,18853,18854,18856],{"class":89,"line":2603},[87,18855,15688],{"class":171},[87,18857,15678],{"class":97},[87,18859,18860],{"class":89,"line":2609},[87,18861,18153],{"class":199},[87,18863,18864],{"class":89,"line":2630},[87,18865,18158],{"class":97},[87,18867,18868],{"class":89,"line":2635},[87,18869,4949],{"class":97},[19,18871,18872],{},"创建circle.cpp",[77,18874,18876],{"className":1091,"code":18875,"language":1093,"meta":82,"style":82},"#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",[84,18877,18878,18885,18908,18930,18935,18951],{"__ignoreMap":82},[87,18879,18880,18882],{"class":89,"line":90},[87,18881,2905],{"class":171},[87,18883,18884],{"class":949},"\u003Ccircle.h>\n",[87,18886,18887,18889,18892,18894,18896,18898,18900,18902,18904,18906],{"class":89,"line":101},[87,18888,6314],{"class":171},[87,18890,18891],{"class":205}," Circle",[87,18893,18680],{"class":97},[87,18895,18408],{"class":205},[87,18897,165],{"class":97},[87,18899,14987],{"class":171},[87,18901,18070],{"class":492},[87,18903,18073],{"class":97},[87,18905,946],{"class":171},[87,18907,18078],{"class":97},[87,18909,18910,18912,18914,18916,18918,18920,18922,18924,18926,18928],{"class":89,"line":120},[87,18911,6314],{"class":171},[87,18913,18891],{"class":205},[87,18915,18680],{"class":97},[87,18917,18460],{"class":205},[87,18919,165],{"class":97},[87,18921,18090],{"class":205},[87,18923,321],{"class":492},[87,18925,18095],{"class":97},[87,18927,946],{"class":171},[87,18929,18100],{"class":97},[87,18931,18932],{"class":89,"line":222},[87,18933,18934],{"class":199},"\u002F\u002F获取属性\n",[87,18936,18937,18939,18941,18943,18945,18947,18949],{"class":89,"line":234},[87,18938,14987],{"class":171},[87,18940,18891],{"class":205},[87,18942,18680],{"class":97},[87,18944,18292],{"class":205},[87,18946,17992],{"class":97},[87,18948,17995],{"class":171},[87,18950,18119],{"class":97},[87,18952,18953,18955,18957,18959,18961,18963,18965],{"class":89,"line":256},[87,18954,18090],{"class":205},[87,18956,18891],{"class":205},[87,18958,18680],{"class":97},[87,18960,18206],{"class":205},[87,18962,17992],{"class":97},[87,18964,17995],{"class":171},[87,18966,18134],{"class":97},[19,18968,18969],{},"使用封装的类",[77,18971,18973],{"className":1091,"code":18972,"language":1093,"meta":82,"style":82},"#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",[84,18974,18975,18981,18991,18997,19003,19027,19031,19057,19083,19107,19121,19125,19137,19141,19145,19149,19161,19165,19169,19177,19181,19185,19189,19193,19197,19207,19213,19221,19229,19239,19245,19257,19265,19273,19283,19289,19301,19305,19313,19319],{"__ignoreMap":82},[87,18976,18977,18979],{"class":89,"line":90},[87,18978,2905],{"class":171},[87,18980,2908],{"class":949},[87,18982,18983,18985,18987,18989],{"class":89,"line":101},[87,18984,2913],{"class":171},[87,18986,2916],{"class":171},[87,18988,2919],{"class":205},[87,18990,117],{"class":97},[87,18992,18993,18995],{"class":89,"line":120},[87,18994,2905],{"class":171},[87,18996,18884],{"class":949},[87,18998,18999,19001],{"class":89,"line":222},[87,19000,2905],{"class":171},[87,19002,18665],{"class":949},[87,19004,19005,19007,19009,19011,19013,19015,19017,19019,19021,19023,19025],{"class":89,"line":234},[87,19006,6314],{"class":171},[87,19008,18169],{"class":205},[87,19010,165],{"class":97},[87,19012,18174],{"class":205},[87,19014,11534],{"class":171},[87,19016,1384],{"class":492},[87,19018,1473],{"class":97},[87,19020,18090],{"class":205},[87,19022,11534],{"class":171},[87,19024,19],{"class":492},[87,19026,1108],{"class":97},[87,19028,19029],{"class":89,"line":256},[87,19030,2503],{"class":97},[87,19032,19033,19035,19037,19039,19041,19043,19045,19047,19049,19051,19053,19055],{"class":89,"line":269},[87,19034,15688],{"class":171},[87,19036,18199],{"class":97},[87,19038,946],{"class":171},[87,19040,17291],{"class":97},[87,19042,18206],{"class":205},[87,19044,18209],{"class":97},[87,19046,18212],{"class":205},[87,19048,14000],{"class":97},[87,19050,1625],{"class":171},[87,19052,16837],{"class":97},[87,19054,18212],{"class":205},[87,19056,6586],{"class":97},[87,19058,19059,19061,19063,19065,19067,19069,19071,19073,19075,19077,19079,19081],{"class":89,"line":463},[87,19060,15688],{"class":171},[87,19062,18229],{"class":97},[87,19064,946],{"class":171},[87,19066,17291],{"class":97},[87,19068,18206],{"class":205},[87,19070,18209],{"class":97},[87,19072,18240],{"class":205},[87,19074,14000],{"class":97},[87,19076,1625],{"class":171},[87,19078,16837],{"class":97},[87,19080,18240],{"class":205},[87,19082,6586],{"class":97},[87,19084,19085,19087,19089,19091,19093,19095,19097,19099,19101,19103,19105],{"class":89,"line":469},[87,19086,15688],{"class":171},[87,19088,18257],{"class":97},[87,19090,946],{"class":171},[87,19092,18262],{"class":205},[87,19094,18265],{"class":97},[87,19096,1549],{"class":171},[87,19098,18199],{"class":97},[87,19100,1575],{"class":171},[87,19102,18229],{"class":97},[87,19104,1549],{"class":171},[87,19106,18278],{"class":97},[87,19108,19109,19111,19113,19115,19117,19119],{"class":89,"line":2287},[87,19110,4055],{"class":171},[87,19112,18285],{"class":97},[87,19114,938],{"class":171},[87,19116,17291],{"class":97},[87,19118,18292],{"class":205},[87,19120,18295],{"class":97},[87,19122,19123],{"class":89,"line":2568},[87,19124,2985],{"class":97},[87,19126,19127,19129,19131,19133,19135],{"class":89,"line":2573},[87,19128,10619],{"class":97},[87,19130,2134],{"class":171},[87,19132,18308],{"class":949},[87,19134,2402],{"class":171},[87,19136,9790],{"class":97},[87,19138,19139],{"class":89,"line":2579},[87,19140,3142],{"class":97},[87,19142,19143],{"class":89,"line":2584},[87,19144,17772],{"class":171},[87,19146,19147],{"class":89,"line":2598},[87,19148,2985],{"class":97},[87,19150,19151,19153,19155,19157,19159],{"class":89,"line":2603},[87,19152,10619],{"class":97},[87,19154,2134],{"class":171},[87,19156,18333],{"class":949},[87,19158,2402],{"class":171},[87,19160,9790],{"class":97},[87,19162,19163],{"class":89,"line":2609},[87,19164,3142],{"class":97},[87,19166,19167],{"class":89,"line":2630},[87,19168,123],{"class":97},[87,19170,19171,19173,19175],{"class":89,"line":2635},[87,19172,1105],{"class":171},[87,19174,2928],{"class":205},[87,19176,2931],{"class":97},[87,19178,19179],{"class":89,"line":2649},[87,19180,2503],{"class":97},[87,19182,19183],{"class":89,"line":2654},[87,19184,16003],{"class":199},[87,19186,19187],{"class":89,"line":2683},[87,19188,15750],{"class":97},[87,19190,19191],{"class":89,"line":2688},[87,19192,18370],{"class":97},[87,19194,19195],{"class":89,"line":2705},[87,19196,17943],{"class":199},[87,19198,19199,19201,19203,19205],{"class":89,"line":2710},[87,19200,2508],{"class":97},[87,19202,2134],{"class":171},[87,19204,18383],{"class":949},[87,19206,117],{"class":97},[87,19208,19209,19211],{"class":89,"line":2715},[87,19210,15688],{"class":171},[87,19212,18392],{"class":97},[87,19214,19215,19217,19219],{"class":89,"line":2720},[87,19216,2967],{"class":97},[87,19218,2387],{"class":171},[87,19220,18401],{"class":97},[87,19222,19223,19225,19227],{"class":89,"line":2734},[87,19224,17544],{"class":97},[87,19226,18408],{"class":205},[87,19228,18411],{"class":97},[87,19230,19231,19233,19235,19237],{"class":89,"line":2739},[87,19232,2508],{"class":97},[87,19234,2134],{"class":171},[87,19236,18420],{"class":949},[87,19238,117],{"class":97},[87,19240,19241,19243],{"class":89,"line":3532},[87,19242,15688],{"class":171},[87,19244,18429],{"class":97},[87,19246,19247,19249,19251,19253,19255],{"class":89,"line":3546},[87,19248,2967],{"class":97},[87,19250,2387],{"class":171},[87,19252,1912],{"class":97},[87,19254,2387],{"class":171},[87,19256,18442],{"class":97},[87,19258,19259,19261,19263],{"class":89,"line":3554},[87,19260,18447],{"class":97},[87,19262,18450],{"class":205},[87,19264,18453],{"class":97},[87,19266,19267,19269,19271],{"class":89,"line":3559},[87,19268,17544],{"class":97},[87,19270,18460],{"class":205},[87,19272,18463],{"class":97},[87,19274,19275,19277,19279,19281],{"class":89,"line":3565},[87,19276,2508],{"class":97},[87,19278,2134],{"class":171},[87,19280,18472],{"class":949},[87,19282,117],{"class":97},[87,19284,19285,19287],{"class":89,"line":3571},[87,19286,15688],{"class":171},[87,19288,18481],{"class":97},[87,19290,19291,19293,19295,19297,19299],{"class":89,"line":3576},[87,19292,2967],{"class":97},[87,19294,2387],{"class":171},[87,19296,18490],{"class":97},[87,19298,2387],{"class":171},[87,19300,18495],{"class":97},[87,19302,19303],{"class":89,"line":8898},[87,19304,18500],{"class":97},[87,19306,19307,19309,19311],{"class":89,"line":8922},[87,19308,18505],{"class":97},[87,19310,18450],{"class":205},[87,19312,18510],{"class":97},[87,19314,19315,19317],{"class":89,"line":8927},[87,19316,18515],{"class":205},[87,19318,18518],{"class":97},[87,19320,19321],{"class":89,"line":8933},[87,19322,123],{"class":97},[14,19324,19326],{"id":19325},"_82对象的初始化清理","8.2对象的初始化清理",[26,19328,19329,19332],{},[29,19330,19331],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[29,19333,19334],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[44,19336,19338],{"id":19337},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,19340,19341,19342,19345],{},"对象的",[57,19343,19344],{},"初始化和清理","也是两个非常重要的安全问题",[19,19347,19348],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,19350,19351],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,19353,19354,19355,19358,19359,19362],{},"c++利用了",[57,19356,19357],{},"构造函数","和",[57,19360,19361],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,19364,19365,19366],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[57,19367,19368],{},"我们不提供构造和析构，编译器会提供",[19,19370,19371],{},[57,19372,19373],{},"编译器提供的构造函数和析构函数是空实现。",[26,19375,19376,19379],{},[29,19377,19378],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[29,19380,19381,19382,19385],{},"析构函数：主要作用在于对象",[57,19383,19384],{},"销毁前","系统自动调用，执行一些清理工作。",[19,19387,19388,19391],{},[57,19389,19390],{},"构造函数语法：",[84,19392,19393],{},"类名(){}",[1055,19395,19396,19399,19402,19405,19408],{},[29,19397,19398],{},"构造函数，没有返回值也不写void",[29,19400,19401],{},"函数名称与类名相同",[29,19403,19404],{},"构造函数可以有参数，因此可以发生重载",[29,19406,19407],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[29,19409,19410,19411,1524],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[84,19412,19413],{},"Person(){}",[19,19415,19416,14745,19419],{},[57,19417,19418],{},"析构函数语法：",[84,19420,19421],{},"~类名(){}",[1055,19423,19424,19427,19430,19436],{},[29,19425,19426],{},"析构函数，没有返回值也不写void",[29,19428,19429],{},"函数名称与类名相同,在名称前加上符号  ~",[29,19431,19432,19433],{},"析构函数不可以有参数，因此",[57,19434,19435],{},"不可以发生重载",[29,19437,19438],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[77,19440,19442],{"className":1091,"code":19441,"language":1093,"meta":82,"style":82},"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",[84,19443,19444,19450,19454,19458,19463,19470,19474,19487,19491,19496,19503,19507,19520,19524,19528,19532,19536,19544,19548,19556,19560,19564,19572,19576,19581,19585,19592,19596,19609,19613,19621],{"__ignoreMap":82},[87,19445,19446,19448],{"class":89,"line":90},[87,19447,15644],{"class":171},[87,19449,16121],{"class":205},[87,19451,19452],{"class":89,"line":101},[87,19453,2503],{"class":97},[87,19455,19456],{"class":89,"line":120},[87,19457,15666],{"class":171},[87,19459,19460],{"class":89,"line":222},[87,19461,19462],{"class":199},"    \u002F\u002F构造函数\n",[87,19464,19465,19468],{"class":89,"line":234},[87,19466,19467],{"class":205},"    Person",[87,19469,2931],{"class":97},[87,19471,19472],{"class":89,"line":256},[87,19473,2985],{"class":97},[87,19475,19476,19478,19480,19483,19485],{"class":89,"line":269},[87,19477,10619],{"class":97},[87,19479,2134],{"class":171},[87,19481,19482],{"class":949}," \"Person的构造函数调用\"",[87,19484,2402],{"class":171},[87,19486,9790],{"class":97},[87,19488,19489],{"class":89,"line":463},[87,19490,3142],{"class":97},[87,19492,19493],{"class":89,"line":469},[87,19494,19495],{"class":199},"    \u002F\u002F析构函数\n",[87,19497,19498,19501],{"class":89,"line":2287},[87,19499,19500],{"class":205},"    ~Person",[87,19502,2931],{"class":97},[87,19504,19505],{"class":89,"line":2568},[87,19506,2985],{"class":97},[87,19508,19509,19511,19513,19516,19518],{"class":89,"line":2573},[87,19510,10619],{"class":97},[87,19512,2134],{"class":171},[87,19514,19515],{"class":949}," \"Person的析构函数调用\"",[87,19517,2402],{"class":171},[87,19519,9790],{"class":97},[87,19521,19522],{"class":89,"line":2579},[87,19523,3142],{"class":97},[87,19525,19526],{"class":89,"line":2584},[87,19527,3355],{"emptyLinePlaceholder":1029},[87,19529,19530],{"class":89,"line":2598},[87,19531,4949],{"class":97},[87,19533,19534],{"class":89,"line":2603},[87,19535,3355],{"emptyLinePlaceholder":1029},[87,19537,19538,19540,19542],{"class":89,"line":2609},[87,19539,6314],{"class":171},[87,19541,6538],{"class":205},[87,19543,2931],{"class":97},[87,19545,19546],{"class":89,"line":2630},[87,19547,2503],{"class":97},[87,19549,19550,19553],{"class":89,"line":2635},[87,19551,19552],{"class":97},"    Person p;",[87,19554,19555],{"class":199},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[87,19557,19558],{"class":89,"line":2649},[87,19559,123],{"class":97},[87,19561,19562],{"class":89,"line":2654},[87,19563,3355],{"emptyLinePlaceholder":1029},[87,19565,19566,19568,19570],{"class":89,"line":2683},[87,19567,1105],{"class":171},[87,19569,2928],{"class":205},[87,19571,11803],{"class":97},[87,19573,19574],{"class":89,"line":2688},[87,19575,14160],{"class":97},[87,19577,19578],{"class":89,"line":2705},[87,19579,19580],{"class":199},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[87,19582,19583],{"class":89,"line":2710},[87,19584,3355],{"emptyLinePlaceholder":1029},[87,19586,19587,19589],{"class":89,"line":2715},[87,19588,19552],{"class":97},[87,19590,19591],{"class":199},"\u002F\u002F只有构造函数\n",[87,19593,19594],{"class":89,"line":2720},[87,19595,3355],{"emptyLinePlaceholder":1029},[87,19597,19598,19600,19602,19604,19606],{"class":89,"line":2734},[87,19599,3258],{"class":205},[87,19601,165],{"class":97},[87,19603,3263],{"class":949},[87,19605,6916],{"class":97},[87,19607,19608],{"class":199},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[87,19610,19611],{"class":89,"line":2739},[87,19612,3355],{"emptyLinePlaceholder":1029},[87,19614,19615,19617,19619],{"class":89,"line":3532},[87,19616,5044],{"class":171},[87,19618,577],{"class":104},[87,19620,117],{"class":97},[87,19622,19623],{"class":89,"line":3546},[87,19624,123],{"class":97},[19,19626,19627],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[44,19629,19631],{"id":19630},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,19633,19634],{},"两种分类方式：",[19,19636,19637],{},"​\t按参数分为： 有参构造和无参构造",[19,19639,19640],{},"​\t按类型分为： 普通构造和拷贝构造",[19,19642,19643],{},"三种调用方式：",[19,19645,19646],{},"​\t括号法",[19,19648,19649],{},"​\t显示法",[19,19651,19652],{},"​\t隐式转换法",[77,19654,19656],{"className":1091,"code":19655,"language":1093,"meta":82,"style":82},"#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",[84,19657,19658,19664,19674,19679,19684,19689,19694,19698,19706,19710,19714,19718,19724,19728,19741,19745,19757,19761,19770,19783,19787,19791,19797,19801,19814,19818,19823,19839,19843,19848,19857,19870,19874,19880,19884,19889,19897,19901,19906,19910,19918,19922,19927,19932,19937,19942,19947,19951,19956,19961,19966,19971,19975,19980,19985,20001,20013,20018,20022,20027,20032,20037,20041,20046,20060,20073,20077,20085,20089,20095,20101,20109],{"__ignoreMap":82},[87,19659,19660,19662],{"class":89,"line":90},[87,19661,2905],{"class":171},[87,19663,2908],{"class":949},[87,19665,19666,19668,19670,19672],{"class":89,"line":101},[87,19667,2913],{"class":171},[87,19669,2916],{"class":171},[87,19671,2919],{"class":205},[87,19673,117],{"class":97},[87,19675,19676],{"class":89,"line":120},[87,19677,19678],{"class":199},"\u002F\u002F1.构造函数的分类及调用\n",[87,19680,19681],{"class":89,"line":222},[87,19682,19683],{"class":199},"\u002F\u002F分类\n",[87,19685,19686],{"class":89,"line":234},[87,19687,19688],{"class":199},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[87,19690,19691],{"class":89,"line":256},[87,19692,19693],{"class":199},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[87,19695,19696],{"class":89,"line":269},[87,19697,3355],{"emptyLinePlaceholder":1029},[87,19699,19700,19702,19704],{"class":89,"line":463},[87,19701,15644],{"class":171},[87,19703,16519],{"class":205},[87,19705,3629],{"class":97},[87,19707,19708],{"class":89,"line":469},[87,19709,2503],{"class":97},[87,19711,19712],{"class":89,"line":2287},[87,19713,15666],{"class":171},[87,19715,19716],{"class":89,"line":2568},[87,19717,19462],{"class":199},[87,19719,19720,19722],{"class":89,"line":2573},[87,19721,19467],{"class":205},[87,19723,2931],{"class":97},[87,19725,19726],{"class":89,"line":2579},[87,19727,2985],{"class":97},[87,19729,19730,19732,19734,19737,19739],{"class":89,"line":2584},[87,19731,4405],{"class":97},[87,19733,2134],{"class":171},[87,19735,19736],{"class":949},"\"Person构造函数无参构造\"",[87,19738,2134],{"class":171},[87,19740,2156],{"class":97},[87,19742,19743],{"class":89,"line":2598},[87,19744,3142],{"class":97},[87,19746,19747,19749,19751,19753,19755],{"class":89,"line":2603},[87,19748,19467],{"class":205},[87,19750,165],{"class":97},[87,19752,1105],{"class":171},[87,19754,2356],{"class":492},[87,19756,1108],{"class":97},[87,19758,19759],{"class":89,"line":2609},[87,19760,2985],{"class":97},[87,19762,19763,19766,19768],{"class":89,"line":2630},[87,19764,19765],{"class":97},"        age",[87,19767,946],{"class":171},[87,19769,7147],{"class":97},[87,19771,19772,19774,19776,19779,19781],{"class":89,"line":2635},[87,19773,4405],{"class":97},[87,19775,2134],{"class":171},[87,19777,19778],{"class":949},"\"Person构造函数有参构造\"",[87,19780,2134],{"class":171},[87,19782,2156],{"class":97},[87,19784,19785],{"class":89,"line":2649},[87,19786,3142],{"class":97},[87,19788,19789],{"class":89,"line":2654},[87,19790,19495],{"class":199},[87,19792,19793,19795],{"class":89,"line":2683},[87,19794,19500],{"class":205},[87,19796,2931],{"class":97},[87,19798,19799],{"class":89,"line":2688},[87,19800,2985],{"class":97},[87,19802,19803,19805,19807,19810,19812],{"class":89,"line":2705},[87,19804,4405],{"class":97},[87,19806,2134],{"class":171},[87,19808,19809],{"class":949},"\"Person析构函数被调用\"",[87,19811,2134],{"class":171},[87,19813,2156],{"class":97},[87,19815,19816],{"class":89,"line":2710},[87,19817,3142],{"class":97},[87,19819,19820],{"class":89,"line":2715},[87,19821,19822],{"class":199},"    \u002F\u002F拷贝构造函数\n",[87,19824,19825,19827,19829,19831,19833,19835,19837],{"class":89,"line":2720},[87,19826,19467],{"class":205},[87,19828,165],{"class":97},[87,19830,7742],{"class":171},[87,19832,16519],{"class":205},[87,19834,11534],{"class":171},[87,19836,19],{"class":492},[87,19838,1108],{"class":97},[87,19840,19841],{"class":89,"line":2734},[87,19842,2985],{"class":97},[87,19844,19845],{"class":89,"line":2739},[87,19846,19847],{"class":199},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[87,19849,19850,19852,19854],{"class":89,"line":3532},[87,19851,19765],{"class":97},[87,19853,946],{"class":171},[87,19855,19856],{"class":97},"p.age;\n",[87,19858,19859,19861,19863,19866,19868],{"class":89,"line":3546},[87,19860,4405],{"class":97},[87,19862,2134],{"class":171},[87,19864,19865],{"class":949},"\"Person拷贝构造函数被调用\"",[87,19867,2134],{"class":171},[87,19869,2156],{"class":97},[87,19871,19872],{"class":89,"line":3554},[87,19873,3142],{"class":97},[87,19875,19876,19878],{"class":89,"line":3559},[87,19877,2940],{"class":171},[87,19879,8747],{"class":97},[87,19881,19882],{"class":89,"line":3565},[87,19883,4949],{"class":97},[87,19885,19886],{"class":89,"line":3571},[87,19887,19888],{"class":199},"\u002F\u002F调用\n",[87,19890,19891,19893,19895],{"class":89,"line":3576},[87,19892,6314],{"class":171},[87,19894,6538],{"class":205},[87,19896,2931],{"class":97},[87,19898,19899],{"class":89,"line":8898},[87,19900,2503],{"class":97},[87,19902,19903],{"class":89,"line":8922},[87,19904,19905],{"class":199},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[87,19907,19908],{"class":89,"line":8927},[87,19909,123],{"class":97},[87,19911,19912,19914,19916],{"class":89,"line":8933},[87,19913,6314],{"class":171},[87,19915,6607],{"class":205},[87,19917,2931],{"class":97},[87,19919,19920],{"class":89,"line":8960},[87,19921,2503],{"class":97},[87,19923,19924],{"class":89,"line":8965},[87,19925,19926],{"class":199},"    \u002F\u002F1.括号法\n",[87,19928,19929],{"class":89,"line":8971},[87,19930,19931],{"class":199},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[87,19933,19934],{"class":89,"line":8983},[87,19935,19936],{"class":199},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[87,19938,19939],{"class":89,"line":8995},[87,19940,19941],{"class":199},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[87,19943,19944],{"class":89,"line":9007},[87,19945,19946],{"class":199},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[87,19948,19949],{"class":89,"line":10666},[87,19950,3355],{"emptyLinePlaceholder":1029},[87,19952,19953],{"class":89,"line":10691},[87,19954,19955],{"class":199},"    \u002F\u002F注意事项\n",[87,19957,19958],{"class":89,"line":10714},[87,19959,19960],{"class":199},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[87,19962,19963],{"class":89,"line":10738},[87,19964,19965],{"class":199},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[87,19967,19968],{"class":89,"line":10743},[87,19969,19970],{"class":199},"    \u002F\u002F Person p4();\n",[87,19972,19973],{"class":89,"line":10748},[87,19974,3355],{"emptyLinePlaceholder":1029},[87,19976,19977],{"class":89,"line":10753},[87,19978,19979],{"class":199},"    \u002F\u002F2.显示法\n",[87,19981,19982],{"class":89,"line":10762},[87,19983,19984],{"class":97},"    Person p1;\n",[87,19986,19987,19990,19992,19995,19997,19999],{"class":89,"line":10767},[87,19988,19989],{"class":97},"    Person p2",[87,19991,946],{"class":171},[87,19993,19994],{"class":205},"Person",[87,19996,165],{"class":97},[87,19998,242],{"class":104},[87,20000,175],{"class":97},[87,20002,20003,20006,20008,20010],{"class":89,"line":10773},[87,20004,20005],{"class":97},"    Person p3",[87,20007,946],{"class":171},[87,20009,19994],{"class":205},[87,20011,20012],{"class":97},"(p2);\n",[87,20014,20015],{"class":89,"line":10794},[87,20016,20017],{"class":199},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[87,20019,20020],{"class":89,"line":10800},[87,20021,3355],{"emptyLinePlaceholder":1029},[87,20023,20024],{"class":89,"line":10814},[87,20025,20026],{"class":199},"    \u002F\u002F 注意事项2\n",[87,20028,20029],{"class":89,"line":10820},[87,20030,20031],{"class":199},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[87,20033,20034],{"class":89,"line":10847},[87,20035,20036],{"class":199},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[87,20038,20039],{"class":89,"line":10856},[87,20040,3355],{"emptyLinePlaceholder":1029},[87,20042,20043],{"class":89,"line":10862},[87,20044,20045],{"class":199},"    \u002F\u002F3.隐士转换法\n",[87,20047,20048,20051,20053,20055,20057],{"class":89,"line":10870},[87,20049,20050],{"class":97},"    Person p4",[87,20052,946],{"class":171},[87,20054,242],{"class":104},[87,20056,1155],{"class":97},[87,20058,20059],{"class":199},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[87,20061,20062,20065,20067,20070],{"class":89,"line":10875},[87,20063,20064],{"class":97},"    Person p5",[87,20066,946],{"class":171},[87,20068,20069],{"class":97},"p4;",[87,20071,20072],{"class":199}," \u002F\u002F 这里会调用拷贝构造函数\n",[87,20074,20075],{"class":89,"line":17553},[87,20076,123],{"class":97},[87,20078,20079,20081,20083],{"class":89,"line":17559},[87,20080,1105],{"class":171},[87,20082,2928],{"class":205},[87,20084,2931],{"class":97},[87,20086,20087],{"class":89,"line":17582},[87,20088,2503],{"class":97},[87,20090,20091,20093],{"class":89,"line":17588},[87,20092,6583],{"class":205},[87,20094,6586],{"class":97},[87,20096,20097,20099],{"class":89,"line":17611},[87,20098,6652],{"class":205},[87,20100,6586],{"class":97},[87,20102,20103,20105,20107],{"class":89,"line":17625},[87,20104,5044],{"class":171},[87,20106,577],{"class":104},[87,20108,117],{"class":97},[87,20110,20111],{"class":89,"line":17645},[87,20112,123],{"class":97},[19,20114,20115,20118],{},[57,20116,20117],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[44,20120,20122],{"id":20121},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,20124,20125],{},"C++中拷贝构造函数调用时机通常有三种情况",[26,20127,20128,20131,20134],{},[29,20129,20130],{},"使用一个已经创建完毕的对象来初始化一个新对象",[29,20132,20133],{},"值传递的方式给函数参数传值",[29,20135,20136],{},"以值方式返回局部对象",[77,20138,20140],{"className":1091,"code":20139,"language":1093,"meta":82,"style":82},"#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",[84,20141,20142,20148,20158,20162,20167,20171,20176,20181,20186,20192,20196,20200,20206,20210,20223,20227,20232,20244,20248,20256,20269,20273,20277,20293,20297,20306,20319,20323,20329,20333,20345,20349,20355,20359,20363,20371,20375,20388,20396,20414,20418,20423,20428,20443,20447,20460,20464,20472,20476,20480,20488,20492,20497,20506,20510,20514,20539,20549,20553,20561,20565,20576,20601,20605,20609,20613,20621,20625,20630,20635,20642,20647,20652,20657,20662,20666,20671,20675,20680,20684,20689,20694,20698,20702,20707,20712,20720],{"__ignoreMap":82},[87,20143,20144,20146],{"class":89,"line":90},[87,20145,2905],{"class":171},[87,20147,2908],{"class":949},[87,20149,20150,20152,20154,20156],{"class":89,"line":101},[87,20151,2913],{"class":171},[87,20153,2916],{"class":171},[87,20155,2919],{"class":205},[87,20157,117],{"class":97},[87,20159,20160],{"class":89,"line":120},[87,20161,3355],{"emptyLinePlaceholder":1029},[87,20163,20164],{"class":89,"line":222},[87,20165,20166],{"class":199},"\u002F\u002F拷贝构造函数调用时机\n",[87,20168,20169],{"class":89,"line":234},[87,20170,3355],{"emptyLinePlaceholder":1029},[87,20172,20173],{"class":89,"line":256},[87,20174,20175],{"class":199},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[87,20177,20178],{"class":89,"line":269},[87,20179,20180],{"class":199},"\u002F\u002F2.值传递的方式给函数参数传值\n",[87,20182,20183],{"class":89,"line":463},[87,20184,20185],{"class":199},"\u002F\u002F3.以值方式返回局部对象\n",[87,20187,20188,20190],{"class":89,"line":469},[87,20189,15644],{"class":171},[87,20191,16121],{"class":205},[87,20193,20194],{"class":89,"line":2287},[87,20195,2503],{"class":97},[87,20197,20198],{"class":89,"line":2568},[87,20199,15666],{"class":171},[87,20201,20202,20204],{"class":89,"line":2573},[87,20203,19467],{"class":205},[87,20205,2931],{"class":97},[87,20207,20208],{"class":89,"line":2579},[87,20209,2985],{"class":97},[87,20211,20212,20214,20216,20219,20221],{"class":89,"line":2584},[87,20213,10619],{"class":97},[87,20215,2134],{"class":171},[87,20217,20218],{"class":949}," \"Person的默认构造函数调用\"",[87,20220,2402],{"class":171},[87,20222,9790],{"class":97},[87,20224,20225],{"class":89,"line":2598},[87,20226,3142],{"class":97},[87,20228,20229],{"class":89,"line":2603},[87,20230,20231],{"class":199},"    \u002F\u002F有参构造\n",[87,20233,20234,20236,20238,20240,20242],{"class":89,"line":2609},[87,20235,19467],{"class":205},[87,20237,165],{"class":97},[87,20239,1105],{"class":171},[87,20241,16638],{"class":492},[87,20243,1108],{"class":97},[87,20245,20246],{"class":89,"line":2630},[87,20247,2985],{"class":97},[87,20249,20250,20252,20254],{"class":89,"line":2635},[87,20251,16692],{"class":97},[87,20253,946],{"class":171},[87,20255,8747],{"class":97},[87,20257,20258,20260,20262,20265,20267],{"class":89,"line":2649},[87,20259,10619],{"class":97},[87,20261,2134],{"class":171},[87,20263,20264],{"class":949}," \"Person的有参构造函数调用\"",[87,20266,2402],{"class":171},[87,20268,9790],{"class":97},[87,20270,20271],{"class":89,"line":2654},[87,20272,3142],{"class":97},[87,20274,20275],{"class":89,"line":2683},[87,20276,19822],{"class":199},[87,20278,20279,20281,20283,20285,20287,20289,20291],{"class":89,"line":2688},[87,20280,19467],{"class":205},[87,20282,165],{"class":97},[87,20284,7742],{"class":171},[87,20286,16519],{"class":205},[87,20288,11534],{"class":171},[87,20290,19],{"class":492},[87,20292,1108],{"class":97},[87,20294,20295],{"class":89,"line":2705},[87,20296,2985],{"class":97},[87,20298,20299,20301,20303],{"class":89,"line":2710},[87,20300,16692],{"class":97},[87,20302,946],{"class":171},[87,20304,20305],{"class":97}," p.m_Age;\n",[87,20307,20308,20310,20312,20315,20317],{"class":89,"line":2715},[87,20309,10619],{"class":97},[87,20311,2134],{"class":171},[87,20313,20314],{"class":949}," \"Person的拷贝构造函数调用\"",[87,20316,2402],{"class":171},[87,20318,9790],{"class":97},[87,20320,20321],{"class":89,"line":2720},[87,20322,3142],{"class":97},[87,20324,20325,20327],{"class":89,"line":2734},[87,20326,19500],{"class":205},[87,20328,2931],{"class":97},[87,20330,20331],{"class":89,"line":2739},[87,20332,2985],{"class":97},[87,20334,20335,20337,20339,20341,20343],{"class":89,"line":3532},[87,20336,10619],{"class":97},[87,20338,2134],{"class":171},[87,20340,19515],{"class":949},[87,20342,2402],{"class":171},[87,20344,9790],{"class":97},[87,20346,20347],{"class":89,"line":3546},[87,20348,3142],{"class":97},[87,20350,20351,20353],{"class":89,"line":3554},[87,20352,2940],{"class":171},[87,20354,16615],{"class":97},[87,20356,20357],{"class":89,"line":3559},[87,20358,4949],{"class":97},[87,20360,20361],{"class":89,"line":3565},[87,20362,20175],{"class":199},[87,20364,20365,20367,20369],{"class":89,"line":3571},[87,20366,6314],{"class":171},[87,20368,6538],{"class":205},[87,20370,2931],{"class":97},[87,20372,20373],{"class":89,"line":3576},[87,20374,2503],{"class":97},[87,20376,20377,20380,20382,20384,20386],{"class":89,"line":8898},[87,20378,20379],{"class":97},"    Person ",[87,20381,8080],{"class":205},[87,20383,165],{"class":97},[87,20385,1792],{"class":104},[87,20387,175],{"class":97},[87,20389,20390,20392,20394],{"class":89,"line":8922},[87,20391,20379],{"class":97},[87,20393,7983],{"class":205},[87,20395,18463],{"class":97},[87,20397,20398,20400,20402,20405,20407,20410,20412],{"class":89,"line":8927},[87,20399,2508],{"class":97},[87,20401,2134],{"class":171},[87,20403,20404],{"class":949},"\"P2的年龄为：\"",[87,20406,2134],{"class":171},[87,20408,20409],{"class":97},"p2.m_Age",[87,20411,2134],{"class":171},[87,20413,2156],{"class":97},[87,20415,20416],{"class":89,"line":8933},[87,20417,123],{"class":97},[87,20419,20420],{"class":89,"line":8960},[87,20421,20422],{"class":199},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[87,20424,20425],{"class":89,"line":8965},[87,20426,20427],{"class":199},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[87,20429,20430,20432,20435,20437,20439,20441],{"class":89,"line":8971},[87,20431,6314],{"class":171},[87,20433,20434],{"class":205}," doWork",[87,20436,165],{"class":97},[87,20438,19994],{"class":205},[87,20440,7775],{"class":492},[87,20442,1108],{"class":97},[87,20444,20445],{"class":89,"line":8983},[87,20446,2503],{"class":97},[87,20448,20449,20451,20453,20456,20458],{"class":89,"line":8995},[87,20450,7479],{"class":97},[87,20452,2134],{"class":171},[87,20454,20455],{"class":949}," \"doWork函数调用\"",[87,20457,2402],{"class":171},[87,20459,9790],{"class":97},[87,20461,20462],{"class":89,"line":9007},[87,20463,123],{"class":97},[87,20465,20466,20468,20470],{"class":89,"line":10666},[87,20467,6314],{"class":171},[87,20469,6607],{"class":205},[87,20471,2931],{"class":97},[87,20473,20474],{"class":89,"line":10691},[87,20475,2503],{"class":97},[87,20477,20478],{"class":89,"line":10714},[87,20479,16263],{"class":97},[87,20481,20482,20485],{"class":89,"line":10738},[87,20483,20484],{"class":205},"    doWork",[87,20486,20487],{"class":97},"(p);\n",[87,20489,20490],{"class":89,"line":10743},[87,20491,123],{"class":97},[87,20493,20494],{"class":89,"line":10748},[87,20495,20496],{"class":199},"\u002F\u002F 3.以值方式返回局部对象\n",[87,20498,20499,20501,20504],{"class":89,"line":10753},[87,20500,19994],{"class":205},[87,20502,20503],{"class":205}," doWork2",[87,20505,2931],{"class":97},[87,20507,20508],{"class":89,"line":10762},[87,20509,2503],{"class":97},[87,20511,20512],{"class":89,"line":10767},[87,20513,19984],{"class":97},[87,20515,20516,20518,20520,20522,20524,20526,20528,20530,20532,20534,20536],{"class":89,"line":10773},[87,20517,2508],{"class":97},[87,20519,2134],{"class":171},[87,20521,165],{"class":97},[87,20523,1105],{"class":171},[87,20525,7468],{"class":171},[87,20527,1524],{"class":97},[87,20529,1448],{"class":171},[87,20531,8080],{"class":97},[87,20533,2134],{"class":171},[87,20535,2199],{"class":97},[87,20537,20538],{"class":199},"\u002F\u002F打印p1的地址\n",[87,20540,20541,20543,20546],{"class":89,"line":10794},[87,20542,5044],{"class":171},[87,20544,20545],{"class":97}," p1;",[87,20547,20548],{"class":199},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[87,20550,20551],{"class":89,"line":10800},[87,20552,123],{"class":97},[87,20554,20555,20557,20559],{"class":89,"line":10814},[87,20556,6314],{"class":171},[87,20558,6679],{"class":205},[87,20560,2931],{"class":97},[87,20562,20563],{"class":89,"line":10820},[87,20564,2503],{"class":97},[87,20566,20567,20570,20572,20574],{"class":89,"line":10847},[87,20568,20569],{"class":97},"    Person p ",[87,20571,946],{"class":171},[87,20573,20503],{"class":205},[87,20575,6586],{"class":97},[87,20577,20578,20580,20582,20584,20586,20588,20590,20592,20594,20596,20598],{"class":89,"line":10856},[87,20579,2508],{"class":97},[87,20581,2134],{"class":171},[87,20583,165],{"class":97},[87,20585,1105],{"class":171},[87,20587,7468],{"class":171},[87,20589,1524],{"class":97},[87,20591,1448],{"class":171},[87,20593,19],{"class":97},[87,20595,2134],{"class":171},[87,20597,2199],{"class":97},[87,20599,20600],{"class":199},"\u002F\u002F打印p的地址\n",[87,20602,20603],{"class":89,"line":10862},[87,20604,123],{"class":97},[87,20606,20607],{"class":89,"line":10870},[87,20608,3355],{"emptyLinePlaceholder":1029},[87,20610,20611],{"class":89,"line":10875},[87,20612,3355],{"emptyLinePlaceholder":1029},[87,20614,20615,20617,20619],{"class":89,"line":17553},[87,20616,1105],{"class":171},[87,20618,2928],{"class":205},[87,20620,2931],{"class":97},[87,20622,20623],{"class":89,"line":17559},[87,20624,2503],{"class":97},[87,20626,20627],{"class":89,"line":17582},[87,20628,20629],{"class":199},"    \u002F\u002F test01();\n",[87,20631,20632],{"class":89,"line":17588},[87,20633,20634],{"class":199},"    \u002F\u002F test02();\n",[87,20636,20637,20640],{"class":89,"line":17611},[87,20638,20639],{"class":205},"    test03",[87,20641,6586],{"class":97},[87,20643,20644],{"class":89,"line":17625},[87,20645,20646],{"class":199},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[87,20648,20649],{"class":89,"line":17645},[87,20650,20651],{"class":199},"\u002F\u002F 输出结果如下：\n",[87,20653,20654],{"class":89,"line":17651},[87,20655,20656],{"class":199},"\u002F\u002F Person的默认构造函数调用\n",[87,20658,20659],{"class":89,"line":17662},[87,20660,20661],{"class":199},"\u002F\u002F 0x7fffffffceec\n",[87,20663,20664],{"class":89,"line":17685},[87,20665,20661],{"class":199},[87,20667,20668],{"class":89,"line":17707},[87,20669,20670],{"class":199},"\u002F\u002F Person的析构函数调用\n",[87,20672,20673],{"class":89,"line":17712},[87,20674,3355],{"emptyLinePlaceholder":1029},[87,20676,20677],{"class":89,"line":17718},[87,20678,20679],{"class":199},"\u002F\u002F 之前的输出结果如下：\n",[87,20681,20682],{"class":89,"line":17732},[87,20683,20656],{"class":199},[87,20685,20686],{"class":89,"line":17745},[87,20687,20688],{"class":199},"\u002F\u002F 地址\n",[87,20690,20691],{"class":89,"line":17750},[87,20692,20693],{"class":199},"\u002F\u002F Person的拷贝构造函数调用\n",[87,20695,20696],{"class":89,"line":17764},[87,20697,20670],{"class":199},[87,20699,20700],{"class":89,"line":17769},[87,20701,20688],{"class":199},[87,20703,20704],{"class":89,"line":17775},[87,20705,20706],{"class":199},"\u002F\u002F (这两次输出的地址也是不同的) \n",[87,20708,20709],{"class":89,"line":17780},[87,20710,20711],{"class":199},"\u002F\u002F Person的析构函数调用     \n",[87,20713,20714,20716,20718],{"class":89,"line":17794},[87,20715,5044],{"class":171},[87,20717,577],{"class":104},[87,20719,117],{"class":97},[87,20721,20722],{"class":89,"line":17799},[87,20723,123],{"class":97},[19,20725,20726],{},"简化版理解",[77,20728,20730],{"className":1091,"code":20729,"language":1093,"meta":82,"style":82},"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",[84,20731,20732,20740,20744,20750,20763,20774,20778,20790,20803,20811,20815,20831,20844,20853,20857,20862,20868,20881,20885,20889,20896,20900,20904,20909,20917,20921,20937,20950,20963,20967,20972,20980,20984,20988,20993,20998,21014,21022,21029,21035,21039,21043,21048,21056,21060,21064,21087,21094,21098,21102,21110,21114,21124,21146,21150,21154,21158,21166,21170,21175,21180,21186,21190,21200,21204,21212],{"__ignoreMap":82},[87,20733,20734,20736,20738],{"class":89,"line":90},[87,20735,15644],{"class":171},[87,20737,16519],{"class":205},[87,20739,98],{"class":97},[87,20741,20742],{"class":89,"line":101},[87,20743,15666],{"class":171},[87,20745,20746,20748],{"class":89,"line":120},[87,20747,19467],{"class":205},[87,20749,11803],{"class":97},[87,20751,20752,20754,20756,20759,20761],{"class":89,"line":222},[87,20753,10619],{"class":97},[87,20755,2134],{"class":171},[87,20757,20758],{"class":949}," \"无参构造函数!\"",[87,20760,2402],{"class":171},[87,20762,9790],{"class":97},[87,20764,20765,20768,20770,20772],{"class":89,"line":234},[87,20766,20767],{"class":97},"        mAge ",[87,20769,946],{"class":171},[87,20771,577],{"class":104},[87,20773,117],{"class":97},[87,20775,20776],{"class":89,"line":256},[87,20777,3142],{"class":97},[87,20779,20780,20782,20784,20786,20788],{"class":89,"line":269},[87,20781,19467],{"class":205},[87,20783,165],{"class":97},[87,20785,1105],{"class":171},[87,20787,16638],{"class":492},[87,20789,13392],{"class":97},[87,20791,20792,20794,20796,20799,20801],{"class":89,"line":463},[87,20793,10619],{"class":97},[87,20795,2134],{"class":171},[87,20797,20798],{"class":949}," \"有参构造函数!\"",[87,20800,2402],{"class":171},[87,20802,9790],{"class":97},[87,20804,20805,20807,20809],{"class":89,"line":469},[87,20806,20767],{"class":97},[87,20808,946],{"class":171},[87,20810,8747],{"class":97},[87,20812,20813],{"class":89,"line":2287},[87,20814,3142],{"class":97},[87,20816,20817,20819,20821,20823,20825,20827,20829],{"class":89,"line":2568},[87,20818,19467],{"class":205},[87,20820,165],{"class":97},[87,20822,7742],{"class":171},[87,20824,16519],{"class":205},[87,20826,1448],{"class":171},[87,20828,7775],{"class":492},[87,20830,13392],{"class":97},[87,20832,20833,20835,20837,20840,20842],{"class":89,"line":2573},[87,20834,10619],{"class":97},[87,20836,2134],{"class":171},[87,20838,20839],{"class":949}," \"拷贝构造函数!\"",[87,20841,2402],{"class":171},[87,20843,9790],{"class":97},[87,20845,20846,20848,20850],{"class":89,"line":2579},[87,20847,20767],{"class":97},[87,20849,946],{"class":171},[87,20851,20852],{"class":97}," p.mAge;\n",[87,20854,20855],{"class":89,"line":2584},[87,20856,3142],{"class":97},[87,20858,20859],{"class":89,"line":2598},[87,20860,20861],{"class":199},"    \u002F\u002F析构函数在释放内存之前调用\n",[87,20863,20864,20866],{"class":89,"line":2603},[87,20865,19500],{"class":205},[87,20867,11803],{"class":97},[87,20869,20870,20872,20874,20877,20879],{"class":89,"line":2609},[87,20871,10619],{"class":97},[87,20873,2134],{"class":171},[87,20875,20876],{"class":949}," \"析构函数!\"",[87,20878,2402],{"class":171},[87,20880,9790],{"class":97},[87,20882,20883],{"class":89,"line":2630},[87,20884,3142],{"class":97},[87,20886,20887],{"class":89,"line":2635},[87,20888,15666],{"class":171},[87,20890,20891,20893],{"class":89,"line":2649},[87,20892,2940],{"class":171},[87,20894,20895],{"class":97}," mAge;\n",[87,20897,20898],{"class":89,"line":2654},[87,20899,4949],{"class":97},[87,20901,20902],{"class":89,"line":2683},[87,20903,3355],{"emptyLinePlaceholder":1029},[87,20905,20906],{"class":89,"line":2688},[87,20907,20908],{"class":199},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[87,20910,20911,20913,20915],{"class":89,"line":2705},[87,20912,6314],{"class":171},[87,20914,6538],{"class":205},[87,20916,11803],{"class":97},[87,20918,20919],{"class":89,"line":2710},[87,20920,3355],{"emptyLinePlaceholder":1029},[87,20922,20923,20925,20928,20930,20932,20934],{"class":89,"line":2715},[87,20924,20379],{"class":97},[87,20926,20927],{"class":205},"man",[87,20929,165],{"class":97},[87,20931,536],{"class":104},[87,20933,6916],{"class":97},[87,20935,20936],{"class":199}," \u002F\u002Fp对象已经创建完毕\n",[87,20938,20939,20941,20944,20947],{"class":89,"line":2720},[87,20940,20379],{"class":97},[87,20942,20943],{"class":205},"newman",[87,20945,20946],{"class":97},"(man);",[87,20948,20949],{"class":199}," \u002F\u002F调用拷贝构造函数\n",[87,20951,20952,20955,20957,20960],{"class":89,"line":2734},[87,20953,20954],{"class":97},"    Person newman2 ",[87,20956,946],{"class":171},[87,20958,20959],{"class":97}," man;",[87,20961,20962],{"class":199}," \u002F\u002F拷贝构造\n",[87,20964,20965],{"class":89,"line":2739},[87,20966,3355],{"emptyLinePlaceholder":1029},[87,20968,20969],{"class":89,"line":3532},[87,20970,20971],{"class":199},"    \u002F\u002FPerson newman3;\n",[87,20973,20974,20977],{"class":89,"line":3546},[87,20975,20976],{"class":199},"    \u002F\u002Fnewman3 = man;",[87,20978,20979],{"class":199}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[87,20981,20982],{"class":89,"line":3554},[87,20983,123],{"class":97},[87,20985,20986],{"class":89,"line":3559},[87,20987,3355],{"emptyLinePlaceholder":1029},[87,20989,20990],{"class":89,"line":3565},[87,20991,20992],{"class":199},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[87,20994,20995],{"class":89,"line":3571},[87,20996,20997],{"class":199},"\u002F\u002F相当于Person p1 = p;\n",[87,20999,21000,21002,21004,21006,21008,21011],{"class":89,"line":3576},[87,21001,6314],{"class":171},[87,21003,20434],{"class":205},[87,21005,165],{"class":97},[87,21007,19994],{"class":205},[87,21009,21010],{"class":492}," p1",[87,21012,21013],{"class":97},") {}\n",[87,21015,21016,21018,21020],{"class":89,"line":8898},[87,21017,6314],{"class":171},[87,21019,6607],{"class":205},[87,21021,11803],{"class":97},[87,21023,21024,21026],{"class":89,"line":8922},[87,21025,19552],{"class":97},[87,21027,21028],{"class":199}," \u002F\u002F无参构造函数\n",[87,21030,21031,21033],{"class":89,"line":8927},[87,21032,20484],{"class":205},[87,21034,20487],{"class":97},[87,21036,21037],{"class":89,"line":8933},[87,21038,123],{"class":97},[87,21040,21041],{"class":89,"line":8960},[87,21042,3355],{"emptyLinePlaceholder":1029},[87,21044,21045],{"class":89,"line":8965},[87,21046,21047],{"class":199},"\u002F\u002F3. 以值方式返回局部对象\n",[87,21049,21050,21052,21054],{"class":89,"line":8971},[87,21051,19994],{"class":205},[87,21053,20503],{"class":205},[87,21055,2931],{"class":97},[87,21057,21058],{"class":89,"line":8983},[87,21059,2503],{"class":97},[87,21061,21062],{"class":89,"line":8995},[87,21063,19984],{"class":97},[87,21065,21066,21068,21070,21072,21074,21076,21078,21080,21083,21085],{"class":89,"line":9007},[87,21067,7479],{"class":97},[87,21069,2134],{"class":171},[87,21071,2614],{"class":97},[87,21073,1105],{"class":171},[87,21075,7468],{"class":171},[87,21077,1524],{"class":97},[87,21079,1448],{"class":171},[87,21081,21082],{"class":97},"p1 ",[87,21084,2134],{"class":171},[87,21086,9790],{"class":97},[87,21088,21089,21091],{"class":89,"line":10666},[87,21090,5044],{"class":171},[87,21092,21093],{"class":97}," p1;\n",[87,21095,21096],{"class":89,"line":10691},[87,21097,123],{"class":97},[87,21099,21100],{"class":89,"line":10714},[87,21101,3355],{"emptyLinePlaceholder":1029},[87,21103,21104,21106,21108],{"class":89,"line":10738},[87,21105,6314],{"class":171},[87,21107,6679],{"class":205},[87,21109,2931],{"class":97},[87,21111,21112],{"class":89,"line":10743},[87,21113,2503],{"class":97},[87,21115,21116,21118,21120,21122],{"class":89,"line":10748},[87,21117,20569],{"class":97},[87,21119,946],{"class":171},[87,21121,20503],{"class":205},[87,21123,6586],{"class":97},[87,21125,21126,21128,21130,21132,21134,21136,21138,21140,21142,21144],{"class":89,"line":10753},[87,21127,7479],{"class":97},[87,21129,2134],{"class":171},[87,21131,2614],{"class":97},[87,21133,1105],{"class":171},[87,21135,7468],{"class":171},[87,21137,1524],{"class":97},[87,21139,1448],{"class":171},[87,21141,12398],{"class":97},[87,21143,2134],{"class":171},[87,21145,9790],{"class":97},[87,21147,21148],{"class":89,"line":10762},[87,21149,123],{"class":97},[87,21151,21152],{"class":89,"line":10767},[87,21153,3355],{"emptyLinePlaceholder":1029},[87,21155,21156],{"class":89,"line":10773},[87,21157,3355],{"emptyLinePlaceholder":1029},[87,21159,21160,21162,21164],{"class":89,"line":10794},[87,21161,1105],{"class":171},[87,21163,2928],{"class":205},[87,21165,11803],{"class":97},[87,21167,21168],{"class":89,"line":10800},[87,21169,3355],{"emptyLinePlaceholder":1029},[87,21171,21172],{"class":89,"line":10814},[87,21173,21174],{"class":199},"    \u002F\u002Ftest01();\n",[87,21176,21177],{"class":89,"line":10820},[87,21178,21179],{"class":199},"    \u002F\u002Ftest02();\n",[87,21181,21182,21184],{"class":89,"line":10847},[87,21183,20639],{"class":205},[87,21185,6586],{"class":97},[87,21187,21188],{"class":89,"line":10856},[87,21189,3355],{"emptyLinePlaceholder":1029},[87,21191,21192,21194,21196,21198],{"class":89,"line":10862},[87,21193,3258],{"class":205},[87,21195,165],{"class":97},[87,21197,3263],{"class":949},[87,21199,175],{"class":97},[87,21201,21202],{"class":89,"line":10870},[87,21203,3355],{"emptyLinePlaceholder":1029},[87,21205,21206,21208,21210],{"class":89,"line":10875},[87,21207,5044],{"class":171},[87,21209,577],{"class":104},[87,21211,117],{"class":97},[87,21213,21214],{"class":89,"line":17553},[87,21215,123],{"class":97},[44,21217,21219],{"id":21218},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,21221,21222],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,21224,21225],{},"1．默认构造函数(无参，函数体为空)",[19,21227,21228],{},"2．默认析构函数(无参，函数体为空)",[19,21230,21231],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,21233,21234],{},"构造函数调用规则如下：",[26,21236,21237,21240],{},[29,21238,21239],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[29,21241,21242],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[77,21244,21246],{"className":1091,"code":21245,"language":1093,"meta":82,"style":82},"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",[84,21247,21248,21256,21260,21265,21271,21283,21287,21292,21304,21313,21325,21329,21333,21349,21358,21370,21374,21378,21384,21396,21400,21404,21410,21414,21418,21426,21430,21442,21447,21455,21459,21477,21481,21485,21493,21497,21502,21510,21525,21538,21542,21547,21554,21570,21583,21587,21591,21599,21603,21609,21613,21623,21627,21635],{"__ignoreMap":82},[87,21249,21250,21252,21254],{"class":89,"line":90},[87,21251,15644],{"class":171},[87,21253,16519],{"class":205},[87,21255,98],{"class":97},[87,21257,21258],{"class":89,"line":101},[87,21259,15666],{"class":171},[87,21261,21262],{"class":89,"line":120},[87,21263,21264],{"class":199},"    \u002F\u002F无参（默认）构造函数\n",[87,21266,21267,21269],{"class":89,"line":222},[87,21268,19467],{"class":205},[87,21270,11803],{"class":97},[87,21272,21273,21275,21277,21279,21281],{"class":89,"line":234},[87,21274,10619],{"class":97},[87,21276,2134],{"class":171},[87,21278,20758],{"class":949},[87,21280,2402],{"class":171},[87,21282,9790],{"class":97},[87,21284,21285],{"class":89,"line":256},[87,21286,3142],{"class":97},[87,21288,21289],{"class":89,"line":269},[87,21290,21291],{"class":199},"    \u002F\u002F有参构造函数\n",[87,21293,21294,21296,21298,21300,21302],{"class":89,"line":463},[87,21295,19467],{"class":205},[87,21297,165],{"class":97},[87,21299,1105],{"class":171},[87,21301,2356],{"class":492},[87,21303,13392],{"class":97},[87,21305,21306,21309,21311],{"class":89,"line":469},[87,21307,21308],{"class":97},"        age ",[87,21310,946],{"class":171},[87,21312,2390],{"class":97},[87,21314,21315,21317,21319,21321,21323],{"class":89,"line":2287},[87,21316,10619],{"class":97},[87,21318,2134],{"class":171},[87,21320,20798],{"class":949},[87,21322,2402],{"class":171},[87,21324,9790],{"class":97},[87,21326,21327],{"class":89,"line":2568},[87,21328,3142],{"class":97},[87,21330,21331],{"class":89,"line":2573},[87,21332,19822],{"class":199},[87,21334,21335,21337,21339,21341,21343,21345,21347],{"class":89,"line":2579},[87,21336,19467],{"class":205},[87,21338,165],{"class":97},[87,21340,7742],{"class":171},[87,21342,16519],{"class":205},[87,21344,1448],{"class":171},[87,21346,7775],{"class":492},[87,21348,13392],{"class":97},[87,21350,21351,21353,21355],{"class":89,"line":2584},[87,21352,21308],{"class":97},[87,21354,946],{"class":171},[87,21356,21357],{"class":97}," p.age;\n",[87,21359,21360,21362,21364,21366,21368],{"class":89,"line":2598},[87,21361,10619],{"class":97},[87,21363,2134],{"class":171},[87,21365,20839],{"class":949},[87,21367,2402],{"class":171},[87,21369,9790],{"class":97},[87,21371,21372],{"class":89,"line":2603},[87,21373,3142],{"class":97},[87,21375,21376],{"class":89,"line":2609},[87,21377,19495],{"class":199},[87,21379,21380,21382],{"class":89,"line":2630},[87,21381,19500],{"class":205},[87,21383,11803],{"class":97},[87,21385,21386,21388,21390,21392,21394],{"class":89,"line":2635},[87,21387,10619],{"class":97},[87,21389,2134],{"class":171},[87,21391,20876],{"class":949},[87,21393,2402],{"class":171},[87,21395,9790],{"class":97},[87,21397,21398],{"class":89,"line":2649},[87,21399,3142],{"class":97},[87,21401,21402],{"class":89,"line":2654},[87,21403,15666],{"class":171},[87,21405,21406,21408],{"class":89,"line":2683},[87,21407,2940],{"class":171},[87,21409,8747],{"class":97},[87,21411,21412],{"class":89,"line":2688},[87,21413,4949],{"class":97},[87,21415,21416],{"class":89,"line":2705},[87,21417,3355],{"emptyLinePlaceholder":1029},[87,21419,21420,21422,21424],{"class":89,"line":2710},[87,21421,6314],{"class":171},[87,21423,6538],{"class":205},[87,21425,2931],{"class":97},[87,21427,21428],{"class":89,"line":2715},[87,21429,2503],{"class":97},[87,21431,21432,21434,21436,21438,21440],{"class":89,"line":2720},[87,21433,20379],{"class":97},[87,21435,8080],{"class":205},[87,21437,165],{"class":97},[87,21439,1743],{"class":104},[87,21441,175],{"class":97},[87,21443,21444],{"class":89,"line":2734},[87,21445,21446],{"class":199},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[87,21448,21449,21451,21453],{"class":89,"line":2739},[87,21450,20379],{"class":97},[87,21452,7983],{"class":205},[87,21454,18463],{"class":97},[87,21456,21457],{"class":89,"line":3532},[87,21458,3355],{"emptyLinePlaceholder":1029},[87,21460,21461,21463,21465,21468,21470,21473,21475],{"class":89,"line":3546},[87,21462,7479],{"class":97},[87,21464,2134],{"class":171},[87,21466,21467],{"class":949}," \"p2的年龄为： \"",[87,21469,2402],{"class":171},[87,21471,21472],{"class":97}," p2.age ",[87,21474,2134],{"class":171},[87,21476,9790],{"class":97},[87,21478,21479],{"class":89,"line":3554},[87,21480,123],{"class":97},[87,21482,21483],{"class":89,"line":3559},[87,21484,3355],{"emptyLinePlaceholder":1029},[87,21486,21487,21489,21491],{"class":89,"line":3565},[87,21488,6314],{"class":171},[87,21490,6607],{"class":205},[87,21492,2931],{"class":97},[87,21494,21495],{"class":89,"line":3571},[87,21496,2503],{"class":97},[87,21498,21499],{"class":89,"line":3576},[87,21500,21501],{"class":199},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[87,21503,21504,21507],{"class":89,"line":8898},[87,21505,21506],{"class":97},"    Person p1;",[87,21508,21509],{"class":199}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[87,21511,21512,21514,21516,21518,21520,21522],{"class":89,"line":8922},[87,21513,20379],{"class":97},[87,21515,7983],{"class":205},[87,21517,165],{"class":97},[87,21519,242],{"class":104},[87,21521,6916],{"class":97},[87,21523,21524],{"class":199}," \u002F\u002F用户提供的有参\n",[87,21526,21527,21529,21532,21535],{"class":89,"line":8927},[87,21528,20379],{"class":97},[87,21530,21531],{"class":205},"p3",[87,21533,21534],{"class":97},"(p2);",[87,21536,21537],{"class":199}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[87,21539,21540],{"class":89,"line":8933},[87,21541,3355],{"emptyLinePlaceholder":1029},[87,21543,21544],{"class":89,"line":8960},[87,21545,21546],{"class":199},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[87,21548,21549,21552],{"class":89,"line":8965},[87,21550,21551],{"class":97},"    Person p4;",[87,21553,21509],{"class":199},[87,21555,21556,21558,21561,21563,21565,21567],{"class":89,"line":8971},[87,21557,20379],{"class":97},[87,21559,21560],{"class":205},"p5",[87,21562,165],{"class":97},[87,21564,242],{"class":104},[87,21566,6916],{"class":97},[87,21568,21569],{"class":199}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[87,21571,21572,21574,21577,21580],{"class":89,"line":8983},[87,21573,20379],{"class":97},[87,21575,21576],{"class":205},"p6",[87,21578,21579],{"class":97},"(p5);",[87,21581,21582],{"class":199}," \u002F\u002F用户自己提供拷贝构造\n",[87,21584,21585],{"class":89,"line":8995},[87,21586,123],{"class":97},[87,21588,21589],{"class":89,"line":9007},[87,21590,3355],{"emptyLinePlaceholder":1029},[87,21592,21593,21595,21597],{"class":89,"line":10666},[87,21594,1105],{"class":171},[87,21596,2928],{"class":205},[87,21598,11803],{"class":97},[87,21600,21601],{"class":89,"line":10691},[87,21602,3355],{"emptyLinePlaceholder":1029},[87,21604,21605,21607],{"class":89,"line":10714},[87,21606,6583],{"class":205},[87,21608,6586],{"class":97},[87,21610,21611],{"class":89,"line":10738},[87,21612,3355],{"emptyLinePlaceholder":1029},[87,21614,21615,21617,21619,21621],{"class":89,"line":10743},[87,21616,3258],{"class":205},[87,21618,165],{"class":97},[87,21620,3263],{"class":949},[87,21622,175],{"class":97},[87,21624,21625],{"class":89,"line":10748},[87,21626,3355],{"emptyLinePlaceholder":1029},[87,21628,21629,21631,21633],{"class":89,"line":10753},[87,21630,5044],{"class":171},[87,21632,577],{"class":104},[87,21634,117],{"class":97},[87,21636,21637],{"class":89,"line":10762},[87,21638,123],{"class":97},[44,21640,21642],{"id":21641},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,21644,21645],{},"浅拷贝：简单的赋值拷贝操作",[19,21647,21648],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[77,21650,21652],{"className":1091,"code":21651,"language":1093,"meta":82,"style":82},"#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",[84,21653,21654,21660,21670,21676,21680,21684,21689,21695,21699,21712,21716,21720,21727,21731,21741,21756,21769,21773,21778,21783,21799,21803,21816,21821,21826,21831,21840,21845,21860,21864,21868,21872,21878,21882,21887,21902,21906,21917,21931,21935,21944,21948,21954,21966,21970,21978,21982,21999,22030,22038,22066,22070,22074,22082,22086,22092],{"__ignoreMap":82},[87,21655,21656,21658],{"class":89,"line":90},[87,21657,2905],{"class":171},[87,21659,2908],{"class":949},[87,21661,21662,21664,21666,21668],{"class":89,"line":101},[87,21663,2913],{"class":171},[87,21665,2916],{"class":171},[87,21667,2919],{"class":205},[87,21669,117],{"class":97},[87,21671,21672,21674],{"class":89,"line":120},[87,21673,15644],{"class":171},[87,21675,16121],{"class":205},[87,21677,21678],{"class":89,"line":222},[87,21679,2503],{"class":97},[87,21681,21682],{"class":89,"line":234},[87,21683,15666],{"class":171},[87,21685,21686],{"class":89,"line":256},[87,21687,21688],{"class":199},"    \u002F\u002F默认构造函数\n",[87,21690,21691,21693],{"class":89,"line":269},[87,21692,19467],{"class":205},[87,21694,2931],{"class":97},[87,21696,21697],{"class":89,"line":463},[87,21698,2985],{"class":97},[87,21700,21701,21703,21705,21708,21710],{"class":89,"line":469},[87,21702,4405],{"class":97},[87,21704,2134],{"class":171},[87,21706,21707],{"class":949},"\"默认构造函数\"",[87,21709,2134],{"class":171},[87,21711,2156],{"class":97},[87,21713,21714],{"class":89,"line":2287},[87,21715,3142],{"class":97},[87,21717,21718],{"class":89,"line":2568},[87,21719,21291],{"class":199},[87,21721,21722,21724],{"class":89,"line":2573},[87,21723,19500],{"class":205},[87,21725,21726],{"class":97},"(int age,int height)\n",[87,21728,21729],{"class":89,"line":2579},[87,21730,2985],{"class":97},[87,21732,21733,21736,21738],{"class":89,"line":2584},[87,21734,21735],{"class":97},"        m_Age",[87,21737,946],{"class":171},[87,21739,21740],{"class":97},"age;\n",[87,21742,21743,21746,21748,21750,21753],{"class":89,"line":2598},[87,21744,21745],{"class":97},"        m_Height",[87,21747,12667],{"class":171},[87,21749,3337],{"class":171},[87,21751,21752],{"class":97},"(height);",[87,21754,21755],{"class":199},"\u002F\u002F放到堆区\n",[87,21757,21758,21760,21762,21765,21767],{"class":89,"line":2603},[87,21759,4405],{"class":97},[87,21761,2134],{"class":171},[87,21763,21764],{"class":949},"\"有参构造函数\"",[87,21766,2134],{"class":171},[87,21768,2156],{"class":97},[87,21770,21771],{"class":89,"line":2609},[87,21772,3142],{"class":97},[87,21774,21775],{"class":89,"line":2630},[87,21776,21777],{"class":199},"    \u002F\u002F深拷贝解决上述问题\n",[87,21779,21780],{"class":89,"line":2635},[87,21781,21782],{"class":199},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[87,21784,21785,21787,21789,21791,21793,21795,21797],{"class":89,"line":2649},[87,21786,19467],{"class":205},[87,21788,165],{"class":97},[87,21790,7742],{"class":171},[87,21792,16519],{"class":205},[87,21794,11534],{"class":171},[87,21796,19],{"class":492},[87,21798,1108],{"class":97},[87,21800,21801],{"class":89,"line":2654},[87,21802,2985],{"class":97},[87,21804,21805,21807,21809,21812,21814],{"class":89,"line":2683},[87,21806,4405],{"class":97},[87,21808,2134],{"class":171},[87,21810,21811],{"class":949},"\"拷贝构造函数\"",[87,21813,2134],{"class":171},[87,21815,2156],{"class":97},[87,21817,21818],{"class":89,"line":2688},[87,21819,21820],{"class":199},"        \u002F\u002F编译器默认的写如下注释部分\n",[87,21822,21823],{"class":89,"line":2705},[87,21824,21825],{"class":199},"        \u002F\u002Fm_Age=p.m_Age;\n",[87,21827,21828],{"class":89,"line":2710},[87,21829,21830],{"class":199},"        \u002F\u002Fm_Height=p.m_Height;\n",[87,21832,21833,21835,21837],{"class":89,"line":2715},[87,21834,21735],{"class":97},[87,21836,946],{"class":171},[87,21838,21839],{"class":97},"p.m_Age;\n",[87,21841,21842],{"class":89,"line":2720},[87,21843,21844],{"class":199},"        \u002F\u002F深拷贝操作\n",[87,21846,21847,21849,21851,21853,21855,21857],{"class":89,"line":2734},[87,21848,21745],{"class":97},[87,21850,12667],{"class":171},[87,21852,3337],{"class":171},[87,21854,165],{"class":97},[87,21856,1549],{"class":171},[87,21858,21859],{"class":97},"p.m_Height);\n",[87,21861,21862],{"class":89,"line":2739},[87,21863,3142],{"class":97},[87,21865,21866],{"class":89,"line":3532},[87,21867,3355],{"emptyLinePlaceholder":1029},[87,21869,21870],{"class":89,"line":3546},[87,21871,19495],{"class":199},[87,21873,21874,21876],{"class":89,"line":3554},[87,21875,19500],{"class":205},[87,21877,2931],{"class":97},[87,21879,21880],{"class":89,"line":3559},[87,21881,2985],{"class":97},[87,21883,21884],{"class":89,"line":3565},[87,21885,21886],{"class":199},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[87,21888,21889,21891,21894,21897,21900],{"class":89,"line":3571},[87,21890,3452],{"class":171},[87,21892,21893],{"class":97},"(m_Height ",[87,21895,21896],{"class":171},"!=",[87,21898,21899],{"class":104}," NULL",[87,21901,1108],{"class":97},[87,21903,21904],{"class":89,"line":3576},[87,21905,3465],{"class":97},[87,21907,21908,21911,21914],{"class":89,"line":8898},[87,21909,21910],{"class":171},"            delete",[87,21912,21913],{"class":97}," m_Height;",[87,21915,21916],{"class":199}," \u002F\u002F释放堆区内存\n",[87,21918,21919,21922,21924,21926,21928],{"class":89,"line":8922},[87,21920,21921],{"class":97},"            m_Height",[87,21923,946],{"class":171},[87,21925,3347],{"class":104},[87,21927,1155],{"class":97},[87,21929,21930],{"class":199}," \u002F\u002F防止野指针\n",[87,21932,21933],{"class":89,"line":8927},[87,21934,3484],{"class":97},[87,21936,21937,21939,21941],{"class":89,"line":8933},[87,21938,4405],{"class":97},[87,21940,2134],{"class":171},[87,21942,21943],{"class":949},"\"Person的析构函数调用\"\n",[87,21945,21946],{"class":89,"line":8960},[87,21947,3142],{"class":97},[87,21949,21950,21952],{"class":89,"line":8965},[87,21951,2940],{"class":171},[87,21953,16615],{"class":97},[87,21955,21956,21958,21960,21963],{"class":89,"line":8971},[87,21957,2940],{"class":171},[87,21959,7468],{"class":171},[87,21961,21962],{"class":97},"m_Height;",[87,21964,21965],{"class":199}," \u002F\u002F定义一个指针，指向身高\n",[87,21967,21968],{"class":89,"line":8983},[87,21969,4949],{"class":97},[87,21971,21972,21974,21976],{"class":89,"line":8995},[87,21973,6314],{"class":171},[87,21975,6538],{"class":205},[87,21977,2931],{"class":97},[87,21979,21980],{"class":89,"line":9007},[87,21981,2503],{"class":97},[87,21983,21984,21986,21988,21990,21992,21994,21997],{"class":89,"line":10666},[87,21985,20379],{"class":97},[87,21987,8080],{"class":205},[87,21989,165],{"class":97},[87,21991,1743],{"class":104},[87,21993,1473],{"class":97},[87,21995,21996],{"class":104},"160",[87,21998,175],{"class":97},[87,22000,22001,22003,22005,22008,22010,22013,22015,22018,22020,22023,22025,22027],{"class":89,"line":10691},[87,22002,2508],{"class":97},[87,22004,2134],{"class":171},[87,22006,22007],{"class":949},"\"p1的年龄为:\"",[87,22009,2134],{"class":171},[87,22011,22012],{"class":97},"p1.m_Age",[87,22014,2134],{"class":171},[87,22016,22017],{"class":949},"\"身高为：\"",[87,22019,7369],{"class":171},[87,22021,22022],{"class":97},"p1.m_Height",[87,22024,2134],{"class":171},[87,22026,2199],{"class":97},[87,22028,22029],{"class":199},"  \u002F\u002F18\n",[87,22031,22032,22034,22036],{"class":89,"line":10714},[87,22033,20379],{"class":97},[87,22035,7983],{"class":205},[87,22037,18463],{"class":97},[87,22039,22040,22042,22044,22047,22049,22051,22053,22055,22057,22060,22062,22064],{"class":89,"line":10738},[87,22041,2508],{"class":97},[87,22043,2134],{"class":171},[87,22045,22046],{"class":949},"\"p2的年龄为：\"",[87,22048,2134],{"class":171},[87,22050,20409],{"class":97},[87,22052,2134],{"class":171},[87,22054,22017],{"class":949},[87,22056,7369],{"class":171},[87,22058,22059],{"class":97},"p2.m_Height",[87,22061,2134],{"class":171},[87,22063,2199],{"class":97},[87,22065,22029],{"class":199},[87,22067,22068],{"class":89,"line":10743},[87,22069,14160],{"class":97},[87,22071,22072],{"class":89,"line":10748},[87,22073,123],{"class":97},[87,22075,22076,22078,22080],{"class":89,"line":10753},[87,22077,1105],{"class":171},[87,22079,2928],{"class":205},[87,22081,2931],{"class":97},[87,22083,22084],{"class":89,"line":10762},[87,22085,2503],{"class":97},[87,22087,22088,22090],{"class":89,"line":10767},[87,22089,6583],{"class":205},[87,22091,6586],{"class":97},[87,22093,22094],{"class":89,"line":10773},[87,22095,123],{"class":97},[19,22097,22098],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,22100,22101],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,22103,22104],{},[39,22105],{"alt":82,"src":22106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,22108,22109],{},"浅拷贝问题要使用深拷贝来解决",[19,22111,22112],{},[39,22113],{"alt":82,"src":22114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,22116,22117],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[44,22119,22121],{"id":22120},"_826初始化列表","8.2.6初始化列表",[19,22123,22124],{},"作用：初始化属性",[19,22126,6134],{},[77,22128,22131],{"className":22129,"code":22130,"language":599},[597],"构造函数():属性1(值1),属性2(值2).....{}\n",[84,22132,22130],{"__ignoreMap":82},[19,22134,22135],{},"例子",[77,22137,22139],{"className":1091,"code":22138,"language":1093,"meta":82,"style":82},"#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",[84,22140,22141,22147,22157,22163,22167,22172,22176,22181,22186,22191,22196,22201,22206,22210,22215,22220,22263,22272,22290,22308,22326,22330,22334,22341,22348,22355,22359,22363,22371,22375,22379,22399,22408,22412,22416,22426,22430,22438],{"__ignoreMap":82},[87,22142,22143,22145],{"class":89,"line":90},[87,22144,2905],{"class":171},[87,22146,2908],{"class":949},[87,22148,22149,22151,22153,22155],{"class":89,"line":101},[87,22150,2913],{"class":171},[87,22152,2916],{"class":171},[87,22154,2919],{"class":205},[87,22156,117],{"class":97},[87,22158,22159,22161],{"class":89,"line":120},[87,22160,15644],{"class":171},[87,22162,16121],{"class":205},[87,22164,22165],{"class":89,"line":222},[87,22166,2503],{"class":97},[87,22168,22169],{"class":89,"line":234},[87,22170,22171],{"class":171},"    public:\n",[87,22173,22174],{"class":89,"line":256},[87,22175,3355],{"emptyLinePlaceholder":1029},[87,22177,22178],{"class":89,"line":269},[87,22179,22180],{"class":199},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[87,22182,22183],{"class":89,"line":463},[87,22184,22185],{"class":199},"    \u002F\u002FPerson(int a, int b, int c) {\n",[87,22187,22188],{"class":89,"line":469},[87,22189,22190],{"class":199},"    \u002F\u002F  m_A = a;\n",[87,22192,22193],{"class":89,"line":2287},[87,22194,22195],{"class":199},"    \u002F\u002F  m_B = b;\n",[87,22197,22198],{"class":89,"line":2568},[87,22199,22200],{"class":199},"    \u002F\u002F  m_C = c;\n",[87,22202,22203],{"class":89,"line":2573},[87,22204,22205],{"class":199},"    \u002F\u002F}\n",[87,22207,22208],{"class":89,"line":2579},[87,22209,3355],{"emptyLinePlaceholder":1029},[87,22211,22212],{"class":89,"line":2584},[87,22213,22214],{"class":199},"    \u002F\u002F初始化列表方式初始化\n",[87,22216,22217],{"class":89,"line":2598},[87,22218,22219],{"class":199},"    \u002F\u002F使用有参构造函数\n",[87,22221,22222,22224,22226,22228,22230,22232,22234,22236,22238,22240,22242,22245,22248,22251,22254,22257,22260],{"class":89,"line":2603},[87,22223,19467],{"class":205},[87,22225,165],{"class":97},[87,22227,1105],{"class":171},[87,22229,2356],{"class":492},[87,22231,13385],{"class":97},[87,22233,1105],{"class":171},[87,22235,3787],{"class":492},[87,22237,13385],{"class":97},[87,22239,1105],{"class":171},[87,22241,3803],{"class":492},[87,22243,22244],{"class":97},") :",[87,22246,22247],{"class":205},"m_A",[87,22249,22250],{"class":97},"(a), ",[87,22252,22253],{"class":205},"m_B",[87,22255,22256],{"class":97},"(b), ",[87,22258,22259],{"class":205},"m_C",[87,22261,22262],{"class":97},"(c) {}\n",[87,22264,22265,22267,22270],{"class":89,"line":2609},[87,22266,15859],{"class":171},[87,22268,22269],{"class":205}," PrintPerson",[87,22271,11803],{"class":97},[87,22273,22274,22276,22278,22281,22283,22286,22288],{"class":89,"line":2630},[87,22275,10619],{"class":97},[87,22277,2134],{"class":171},[87,22279,22280],{"class":949}," \"mA:\"",[87,22282,2402],{"class":171},[87,22284,22285],{"class":97}," m_A ",[87,22287,2134],{"class":171},[87,22289,9790],{"class":97},[87,22291,22292,22294,22296,22299,22301,22304,22306],{"class":89,"line":2635},[87,22293,10619],{"class":97},[87,22295,2134],{"class":171},[87,22297,22298],{"class":949}," \"mB:\"",[87,22300,2402],{"class":171},[87,22302,22303],{"class":97}," m_B ",[87,22305,2134],{"class":171},[87,22307,9790],{"class":97},[87,22309,22310,22312,22314,22317,22319,22322,22324],{"class":89,"line":2649},[87,22311,10619],{"class":97},[87,22313,2134],{"class":171},[87,22315,22316],{"class":949}," \"mC:\"",[87,22318,2402],{"class":171},[87,22320,22321],{"class":97}," m_C ",[87,22323,2134],{"class":171},[87,22325,9790],{"class":97},[87,22327,22328],{"class":89,"line":2654},[87,22329,3142],{"class":97},[87,22331,22332],{"class":89,"line":2683},[87,22333,16172],{"class":171},[87,22335,22336,22338],{"class":89,"line":2688},[87,22337,2940],{"class":171},[87,22339,22340],{"class":97}," m_A;\n",[87,22342,22343,22345],{"class":89,"line":2705},[87,22344,2940],{"class":171},[87,22346,22347],{"class":97}," m_B;\n",[87,22349,22350,22352],{"class":89,"line":2710},[87,22351,2940],{"class":171},[87,22353,22354],{"class":97}," m_C;\n",[87,22356,22357],{"class":89,"line":2715},[87,22358,4949],{"class":97},[87,22360,22361],{"class":89,"line":2720},[87,22362,3355],{"emptyLinePlaceholder":1029},[87,22364,22365,22367,22369],{"class":89,"line":2734},[87,22366,1105],{"class":171},[87,22368,2928],{"class":205},[87,22370,6928],{"class":97},[87,22372,22373],{"class":89,"line":2739},[87,22374,2503],{"class":97},[87,22376,22377],{"class":89,"line":3532},[87,22378,3355],{"emptyLinePlaceholder":1029},[87,22380,22381,22383,22385,22387,22389,22391,22393,22395,22397],{"class":89,"line":3546},[87,22382,20379],{"class":97},[87,22384,19],{"class":205},[87,22386,165],{"class":97},[87,22388,1313],{"class":104},[87,22390,13385],{"class":97},[87,22392,1176],{"class":104},[87,22394,13385],{"class":97},[87,22396,1170],{"class":104},[87,22398,175],{"class":97},[87,22400,22401,22403,22406],{"class":89,"line":3554},[87,22402,16815],{"class":97},[87,22404,22405],{"class":205},"PrintPerson",[87,22407,6586],{"class":97},[87,22409,22410],{"class":89,"line":3559},[87,22411,3355],{"emptyLinePlaceholder":1029},[87,22413,22414],{"class":89,"line":3565},[87,22415,3355],{"emptyLinePlaceholder":1029},[87,22417,22418,22420,22422,22424],{"class":89,"line":3571},[87,22419,3258],{"class":205},[87,22421,165],{"class":97},[87,22423,3263],{"class":949},[87,22425,175],{"class":97},[87,22427,22428],{"class":89,"line":3576},[87,22429,3355],{"emptyLinePlaceholder":1029},[87,22431,22432,22434,22436],{"class":89,"line":8898},[87,22433,5044],{"class":171},[87,22435,577],{"class":104},[87,22437,117],{"class":97},[87,22439,22440],{"class":89,"line":8922},[87,22441,123],{"class":97},[19,22443,22444,22445,22448,22449],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[57,22446,22447],{},"参数名就是定义的对象属性","，",[57,22450,22451],{},"属性后面的值为有参构造函数的形参",[77,22453,22455],{"className":1091,"code":22454,"language":1093,"meta":82,"style":82},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[84,22456,22457],{"__ignoreMap":82},[87,22458,22459,22461,22463,22465,22468,22470,22473,22475,22478,22480,22483,22485,22488,22490],{"class":89,"line":90},[87,22460,19994],{"class":205},[87,22462,165],{"class":97},[87,22464,1105],{"class":171},[87,22466,22467],{"class":97}," a.",[87,22469,1105],{"class":171},[87,22471,22472],{"class":97}," b,",[87,22474,1105],{"class":171},[87,22476,22477],{"class":97}," b):",[87,22479,22247],{"class":205},[87,22481,22482],{"class":97},"(a),",[87,22484,22253],{"class":205},[87,22486,22487],{"class":97},"(c),",[87,22489,22259],{"class":205},[87,22491,22492],{"class":97},"(b) {}\n",[44,22494,22496],{"id":22495},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,22498,22499],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,22501,15583],{},[77,22503,22505],{"className":1091,"code":22504,"language":1093,"meta":82,"style":82},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[84,22506,22507,22512,22517,22521,22526,22530],{"__ignoreMap":82},[87,22508,22509],{"class":89,"line":90},[87,22510,22511],{"class":97},"A{};\n",[87,22513,22514],{"class":89,"line":101},[87,22515,22516],{"class":97},"B\n",[87,22518,22519],{"class":89,"line":120},[87,22520,2503],{"class":97},[87,22522,22523],{"class":89,"line":222},[87,22524,22525],{"class":97},"    A a;\n",[87,22527,22528],{"class":89,"line":234},[87,22529,123],{"class":97},[87,22531,22532],{"class":89,"line":256},[87,22533,22534],{"class":199},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,22536,22537],{},"案例",[77,22539,22541],{"className":1091,"code":22540,"language":1093,"meta":82,"style":82},"\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",[84,22542,22543,22548,22555,22559,22564,22569,22583,22587,22597,22608,22612,22619,22623,22636,22640,22645,22650,22654,22660,22664,22668,22672,22703,22707,22718,22722,22728,22732,22745,22749,22753,22757,22762,22767,22771,22779,22783,22800,22819,22823,22831,22835,22841],{"__ignoreMap":82},[87,22544,22545],{"class":89,"line":90},[87,22546,22547],{"class":199},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[87,22549,22550,22552],{"class":89,"line":101},[87,22551,15644],{"class":171},[87,22553,22554],{"class":205}," Phone\n",[87,22556,22557],{"class":89,"line":120},[87,22558,2503],{"class":97},[87,22560,22561],{"class":89,"line":222},[87,22562,22563],{"class":97},"public：\n",[87,22565,22566],{"class":89,"line":234},[87,22567,22568],{"class":199},"    \u002F\u002F 赋值(构造函数)\n",[87,22570,22571,22574,22576,22578,22581],{"class":89,"line":256},[87,22572,22573],{"class":205},"    Phone",[87,22575,165],{"class":97},[87,22577,15867],{"class":205},[87,22579,22580],{"class":492}," pName",[87,22582,1108],{"class":97},[87,22584,22585],{"class":89,"line":269},[87,22586,2985],{"class":97},[87,22588,22589,22592,22594],{"class":89,"line":463},[87,22590,22591],{"class":97},"        m_pName",[87,22593,946],{"class":171},[87,22595,22596],{"class":97},"pName;\n",[87,22598,22599,22601,22603,22606],{"class":89,"line":469},[87,22600,4405],{"class":97},[87,22602,2134],{"class":171},[87,22604,22605],{"class":949},"\"Phone的构造函数调用\"",[87,22607,117],{"class":97},[87,22609,22610],{"class":89,"line":2287},[87,22611,3142],{"class":97},[87,22613,22614,22617],{"class":89,"line":2568},[87,22615,22616],{"class":205},"    ~Phone",[87,22618,2931],{"class":97},[87,22620,22621],{"class":89,"line":2573},[87,22622,2985],{"class":97},[87,22624,22625,22627,22629,22632,22634],{"class":89,"line":2579},[87,22626,4405],{"class":97},[87,22628,2134],{"class":171},[87,22630,22631],{"class":949},"\"Phone析构函数调用\"",[87,22633,2134],{"class":171},[87,22635,2156],{"class":97},[87,22637,22638],{"class":89,"line":2584},[87,22639,3142],{"class":97},[87,22641,22642],{"class":89,"line":2598},[87,22643,22644],{"class":199},"    \u002F\u002F\n",[87,22646,22647],{"class":89,"line":2603},[87,22648,22649],{"class":97},"    string m_PName;\n",[87,22651,22652],{"class":89,"line":2609},[87,22653,4949],{"class":97},[87,22655,22656,22658],{"class":89,"line":2630},[87,22657,15644],{"class":171},[87,22659,16121],{"class":205},[87,22661,22662],{"class":89,"line":2635},[87,22663,2503],{"class":97},[87,22665,22666],{"class":89,"line":2649},[87,22667,15666],{"class":171},[87,22669,22670],{"class":89,"line":2654},[87,22671,17943],{"class":199},[87,22673,22674,22676,22678,22680,22682,22684,22686,22689,22692,22694,22697,22700],{"class":89,"line":2683},[87,22675,19467],{"class":205},[87,22677,165],{"class":97},[87,22679,15867],{"class":205},[87,22681,15870],{"class":492},[87,22683,1473],{"class":97},[87,22685,15867],{"class":205},[87,22687,22688],{"class":492}," pname",[87,22690,22691],{"class":97},"):",[87,22693,15960],{"class":205},[87,22695,22696],{"class":97},"(name),m_phone.",[87,22698,22699],{"class":205},"m_PName",[87,22701,22702],{"class":97},"(pname) \n",[87,22704,22705],{"class":89,"line":2688},[87,22706,2985],{"class":97},[87,22708,22709,22711,22713,22716],{"class":89,"line":2705},[87,22710,4405],{"class":97},[87,22712,2134],{"class":171},[87,22714,22715],{"class":949},"\"Person的构造函数调用\"",[87,22717,117],{"class":97},[87,22719,22720],{"class":89,"line":2710},[87,22721,3142],{"class":97},[87,22723,22724,22726],{"class":89,"line":2715},[87,22725,19500],{"class":205},[87,22727,2931],{"class":97},[87,22729,22730],{"class":89,"line":2720},[87,22731,2985],{"class":97},[87,22733,22734,22736,22738,22741,22743],{"class":89,"line":2734},[87,22735,4405],{"class":97},[87,22737,2134],{"class":171},[87,22739,22740],{"class":949},"\"Person析构函数调用\"",[87,22742,2134],{"class":171},[87,22744,2156],{"class":97},[87,22746,22747],{"class":89,"line":2739},[87,22748,3142],{"class":97},[87,22750,22751],{"class":89,"line":3532},[87,22752,8730],{"class":199},[87,22754,22755],{"class":89,"line":3546},[87,22756,15842],{"class":97},[87,22758,22759],{"class":89,"line":3554},[87,22760,22761],{"class":199},"    \u002F\u002F手机\n",[87,22763,22764],{"class":89,"line":3559},[87,22765,22766],{"class":97},"    Phone m_Phone;\n",[87,22768,22769],{"class":89,"line":3565},[87,22770,4949],{"class":97},[87,22772,22773,22775,22777],{"class":89,"line":3571},[87,22774,6314],{"class":171},[87,22776,6538],{"class":205},[87,22778,2931],{"class":97},[87,22780,22781],{"class":89,"line":3576},[87,22782,2503],{"class":97},[87,22784,22785,22787,22789,22791,22793,22795,22798],{"class":89,"line":8898},[87,22786,20379],{"class":97},[87,22788,19],{"class":205},[87,22790,165],{"class":97},[87,22792,8866],{"class":949},[87,22794,1473],{"class":97},[87,22796,22797],{"class":949},"\"安卓\"",[87,22799,175],{"class":97},[87,22801,22802,22804,22806,22809,22811,22814,22816],{"class":89,"line":8922},[87,22803,2508],{"class":97},[87,22805,2134],{"class":171},[87,22807,22808],{"class":97},"p.Name",[87,22810,2134],{"class":171},[87,22812,22813],{"class":949},"\"拿着：\"",[87,22815,2134],{"class":171},[87,22817,22818],{"class":97},"p.m_phone.m_PName;\n",[87,22820,22821],{"class":89,"line":8927},[87,22822,123],{"class":97},[87,22824,22825,22827,22829],{"class":89,"line":8933},[87,22826,1105],{"class":171},[87,22828,2928],{"class":205},[87,22830,2931],{"class":97},[87,22832,22833],{"class":89,"line":8960},[87,22834,2503],{"class":97},[87,22836,22837,22839],{"class":89,"line":8965},[87,22838,6583],{"class":205},[87,22840,6586],{"class":97},[87,22842,22843],{"class":89,"line":8971},[87,22844,123],{"class":97},[19,22846,9975],{},[77,22848,22850],{"className":1091,"code":22849,"language":1093,"meta":82,"style":82},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[84,22851,22852,22857],{"__ignoreMap":82},[87,22853,22854],{"class":89,"line":90},[87,22855,22856],{"class":199},"    \u002F\u002F不需要写这个：\n",[87,22858,22859],{"class":89,"line":101},[87,22860,22861],{"class":199},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22863,22864],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[77,22866,22868],{"className":1091,"code":22867,"language":1093,"meta":82,"style":82},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[84,22869,22870],{"__ignoreMap":82},[87,22871,22872,22874,22877,22879,22882,22885],{"class":89,"line":90},[87,22873,19994],{"class":205},[87,22875,22876],{"class":97},"(string name.string pname):",[87,22878,15960],{"class":205},[87,22880,22881],{"class":97},"(name),",[87,22883,22884],{"class":205},"m_phone",[87,22886,22887],{"class":97},"(pname) {}\n",[19,22889,22890,22891,946,22894],{},"采用的是隐式转换法，实际为如下：\n",[84,22892,22893],{},"m_phone(pname)",[84,22895,22896],{},"Phone m_phone=pname",[19,22898,22899,22902],{},[57,22900,22901],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22904,22905],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[44,22907,22909],{"id":22908},"_828静态对象","8.2.8静态对象",[19,22911,22912],{},"静态对象在成员对象前static，称为静态对象",[19,22914,22915],{},"静态对象分为两类：",[1055,22917,22918],{},[29,22919,22920],{},"静态成员变量",[26,22922,22923,22926,22929],{},[29,22924,22925],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[29,22927,22928],{},"②在编译阶段分配内存",[29,22930,22931],{},"③类内声明，类外初始化",[1055,22933,22934],{"start":101},[29,22935,22936],{},"静态成员函数",[26,22938,22939,22942],{},[29,22940,22941],{},"①所有对象共享同一个函数",[29,22943,22944],{},"②静态成员函数只能访问静态成员变量",[49,22946,22948],{"id":22947},"_8281静态成员变量","8.2.8.1静态成员变量",[77,22950,22952],{"className":1091,"code":22951,"language":1093,"meta":82,"style":82},"#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",[84,22953,22954,22960,22970,22976,22980,22984,22989,22994,22999,23007,23011,23015,23019,23027,23031,23035,23040,23053,23057,23065,23069,23075],{"__ignoreMap":82},[87,22955,22956,22958],{"class":89,"line":90},[87,22957,2905],{"class":171},[87,22959,2908],{"class":949},[87,22961,22962,22964,22966,22968],{"class":89,"line":101},[87,22963,2913],{"class":171},[87,22965,2916],{"class":171},[87,22967,2919],{"class":205},[87,22969,117],{"class":97},[87,22971,22972,22974],{"class":89,"line":120},[87,22973,15644],{"class":171},[87,22975,16121],{"class":205},[87,22977,22978],{"class":89,"line":222},[87,22979,2503],{"class":97},[87,22981,22982],{"class":89,"line":234},[87,22983,15666],{"class":171},[87,22985,22986],{"class":89,"line":256},[87,22987,22988],{"class":199},"    \u002F\u002F非静态成员变量\n",[87,22990,22991],{"class":89,"line":269},[87,22992,22993],{"class":199},"    \u002F\u002F int m_A;\n",[87,22995,22996],{"class":89,"line":463},[87,22997,22998],{"class":199},"    \u002F\u002F定义静态成员变量\n",[87,23000,23001,23003,23005],{"class":89,"line":469},[87,23002,11970],{"class":171},[87,23004,3337],{"class":171},[87,23006,22340],{"class":97},[87,23008,23009],{"class":89,"line":2287},[87,23010,3355],{"emptyLinePlaceholder":1029},[87,23012,23013],{"class":89,"line":2568},[87,23014,3355],{"emptyLinePlaceholder":1029},[87,23016,23017],{"class":89,"line":2573},[87,23018,4949],{"class":97},[87,23020,23021,23023,23025],{"class":89,"line":2579},[87,23022,6314],{"class":171},[87,23024,6538],{"class":205},[87,23026,2931],{"class":97},[87,23028,23029],{"class":89,"line":2584},[87,23030,2503],{"class":97},[87,23032,23033],{"class":89,"line":2598},[87,23034,16263],{"class":97},[87,23036,23037],{"class":89,"line":2603},[87,23038,23039],{"class":199},"    \u002F\u002F输出类成员变量这块内存\n",[87,23041,23042,23044,23046,23049,23051],{"class":89,"line":2609},[87,23043,2508],{"class":97},[87,23045,2134],{"class":171},[87,23047,23048],{"class":97},"p.m_A",[87,23050,2134],{"class":171},[87,23052,2156],{"class":97},[87,23054,23055],{"class":89,"line":2630},[87,23056,123],{"class":97},[87,23058,23059,23061,23063],{"class":89,"line":2635},[87,23060,1105],{"class":171},[87,23062,2928],{"class":205},[87,23064,2931],{"class":97},[87,23066,23067],{"class":89,"line":2649},[87,23068,2503],{"class":97},[87,23070,23071,23073],{"class":89,"line":2654},[87,23072,6583],{"class":205},[87,23074,2931],{"class":97},[87,23076,23077],{"class":89,"line":2683},[87,23078,123],{"class":97},[19,23080,23081],{},"此时输出是报错的：无法解析外部命令",[19,23083,23084],{},"解决这一问题：必须用到类内声明，类外初始化操作",[77,23086,23088],{"className":1091,"code":23087,"language":1093,"meta":82,"style":82},"#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",[84,23089,23090,23096,23106,23112,23116,23120,23125,23133,23137,23142,23157,23165,23169,23173,23178,23183,23195,23200,23211,23216,23221,23234,23238,23246,23250,23256],{"__ignoreMap":82},[87,23091,23092,23094],{"class":89,"line":90},[87,23093,2905],{"class":171},[87,23095,2908],{"class":949},[87,23097,23098,23100,23102,23104],{"class":89,"line":101},[87,23099,2913],{"class":171},[87,23101,2916],{"class":171},[87,23103,2919],{"class":205},[87,23105,117],{"class":97},[87,23107,23108,23110],{"class":89,"line":120},[87,23109,15644],{"class":171},[87,23111,16121],{"class":205},[87,23113,23114],{"class":89,"line":222},[87,23115,2503],{"class":97},[87,23117,23118],{"class":89,"line":234},[87,23119,15666],{"class":171},[87,23121,23122],{"class":89,"line":256},[87,23123,23124],{"class":199},"    \u002F\u002F类内声明\n",[87,23126,23127,23129,23131],{"class":89,"line":269},[87,23128,11970],{"class":171},[87,23130,3337],{"class":171},[87,23132,22340],{"class":97},[87,23134,23135],{"class":89,"line":463},[87,23136,4949],{"class":97},[87,23138,23139],{"class":89,"line":469},[87,23140,23141],{"class":199},"\u002F\u002F类外初始化\n",[87,23143,23144,23146,23148,23151,23153,23155],{"class":89,"line":2287},[87,23145,1105],{"class":171},[87,23147,16519],{"class":205},[87,23149,23150],{"class":97},"::m_A",[87,23152,946],{"class":171},[87,23154,242],{"class":104},[87,23156,117],{"class":97},[87,23158,23159,23161,23163],{"class":89,"line":2568},[87,23160,6314],{"class":171},[87,23162,6538],{"class":205},[87,23164,2931],{"class":97},[87,23166,23167],{"class":89,"line":2573},[87,23168,2503],{"class":97},[87,23170,23171],{"class":89,"line":2579},[87,23172,16263],{"class":97},[87,23174,23175],{"class":89,"line":2584},[87,23176,23177],{"class":199},"    \u002F\u002F访问变量的原内存空间\n",[87,23179,23180],{"class":89,"line":2598},[87,23181,23182],{"class":199},"    \u002F\u002F100\n",[87,23184,23185,23187,23189,23191,23193],{"class":89,"line":2603},[87,23186,2508],{"class":97},[87,23188,2134],{"class":171},[87,23190,23048],{"class":97},[87,23192,2134],{"class":171},[87,23194,2156],{"class":97},[87,23196,23197],{"class":89,"line":2609},[87,23198,23199],{"class":97},"    Person p2;\n",[87,23201,23202,23205,23207,23209],{"class":89,"line":2630},[87,23203,23204],{"class":97},"    p2.m_A",[87,23206,946],{"class":171},[87,23208,2678],{"class":104},[87,23210,117],{"class":97},[87,23212,23213],{"class":89,"line":2635},[87,23214,23215],{"class":199},"    \u002F\u002F继续访问这片空间\n",[87,23217,23218],{"class":89,"line":2649},[87,23219,23220],{"class":199},"    \u002F\u002F200\n",[87,23222,23223,23225,23227,23230,23232],{"class":89,"line":2654},[87,23224,2508],{"class":97},[87,23226,2134],{"class":171},[87,23228,23229],{"class":97},"p2.m_A",[87,23231,2134],{"class":171},[87,23233,2156],{"class":97},[87,23235,23236],{"class":89,"line":2683},[87,23237,123],{"class":97},[87,23239,23240,23242,23244],{"class":89,"line":2688},[87,23241,1105],{"class":171},[87,23243,2928],{"class":205},[87,23245,2931],{"class":97},[87,23247,23248],{"class":89,"line":2705},[87,23249,2503],{"class":97},[87,23251,23252,23254],{"class":89,"line":2710},[87,23253,6583],{"class":205},[87,23255,6586],{"class":97},[87,23257,23258],{"class":89,"line":2715},[87,23259,123],{"class":97},[19,23261,23262],{},[57,23263,23264],{},"静态变量的访问",[77,23266,23268],{"className":1091,"code":23267,"language":1093,"meta":82,"style":82},"#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",[84,23269,23270,23276,23286,23292,23296,23300,23304,23312,23316,23321,23329,23333,23337,23351,23366,23374,23378,23383,23388,23393,23398,23410,23415,23420,23434,23451,23455,23463,23467,23473],{"__ignoreMap":82},[87,23271,23272,23274],{"class":89,"line":90},[87,23273,2905],{"class":171},[87,23275,2908],{"class":949},[87,23277,23278,23280,23282,23284],{"class":89,"line":101},[87,23279,2913],{"class":171},[87,23281,2916],{"class":171},[87,23283,2919],{"class":205},[87,23285,117],{"class":97},[87,23287,23288,23290],{"class":89,"line":120},[87,23289,15644],{"class":171},[87,23291,16121],{"class":205},[87,23293,23294],{"class":89,"line":222},[87,23295,2503],{"class":97},[87,23297,23298],{"class":89,"line":234},[87,23299,15666],{"class":171},[87,23301,23302],{"class":89,"line":256},[87,23303,23124],{"class":199},[87,23305,23306,23308,23310],{"class":89,"line":269},[87,23307,11970],{"class":171},[87,23309,3337],{"class":171},[87,23311,22340],{"class":97},[87,23313,23314],{"class":89,"line":463},[87,23315,16172],{"class":171},[87,23317,23318],{"class":89,"line":469},[87,23319,23320],{"class":199},"    \u002F\u002F静态成员变量也是有访问权限的\n",[87,23322,23323,23325,23327],{"class":89,"line":2287},[87,23324,11970],{"class":171},[87,23326,3337],{"class":171},[87,23328,22347],{"class":97},[87,23330,23331],{"class":89,"line":2568},[87,23332,4949],{"class":97},[87,23334,23335],{"class":89,"line":2573},[87,23336,23141],{"class":199},[87,23338,23339,23341,23343,23345,23347,23349],{"class":89,"line":2579},[87,23340,1105],{"class":171},[87,23342,16519],{"class":205},[87,23344,23150],{"class":97},[87,23346,946],{"class":171},[87,23348,242],{"class":104},[87,23350,117],{"class":97},[87,23352,23353,23355,23357,23360,23362,23364],{"class":89,"line":2584},[87,23354,1105],{"class":171},[87,23356,16519],{"class":205},[87,23358,23359],{"class":97},"::m_B",[87,23361,946],{"class":171},[87,23363,1792],{"class":104},[87,23365,117],{"class":97},[87,23367,23368,23370,23372],{"class":89,"line":2598},[87,23369,6314],{"class":171},[87,23371,6607],{"class":205},[87,23373,2931],{"class":97},[87,23375,23376],{"class":89,"line":2603},[87,23377,2503],{"class":97},[87,23379,23380],{"class":89,"line":2609},[87,23381,23382],{"class":199},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[87,23384,23385],{"class":89,"line":2630},[87,23386,23387],{"class":199},"    \u002F\u002F静态成员变量有两种访问方式：\n",[87,23389,23390],{"class":89,"line":2635},[87,23391,23392],{"class":199},"    \u002F\u002F1.通过对象进行访问\n",[87,23394,23395],{"class":89,"line":2649},[87,23396,23397],{"class":97},"    Person p;  \n",[87,23399,23400,23402,23404,23406,23408],{"class":89,"line":2654},[87,23401,2508],{"class":97},[87,23403,2134],{"class":171},[87,23405,23048],{"class":97},[87,23407,2134],{"class":171},[87,23409,2156],{"class":97},[87,23411,23412],{"class":89,"line":2683},[87,23413,23414],{"class":199},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[87,23416,23417],{"class":89,"line":2688},[87,23418,23419],{"class":199},"    \u002F\u002F2.通过类名进行访问\n",[87,23421,23422,23424,23426,23428,23430,23432],{"class":89,"line":2705},[87,23423,2508],{"class":97},[87,23425,2134],{"class":171},[87,23427,19994],{"class":205},[87,23429,23150],{"class":97},[87,23431,2134],{"class":171},[87,23433,2156],{"class":97},[87,23435,23436,23438,23440,23442,23444,23446,23448],{"class":89,"line":2710},[87,23437,2508],{"class":97},[87,23439,2134],{"class":171},[87,23441,19994],{"class":205},[87,23443,23359],{"class":97},[87,23445,2134],{"class":171},[87,23447,2199],{"class":97},[87,23449,23450],{"class":199}," \u002F\u002F没有访问权限，报错\n",[87,23452,23453],{"class":89,"line":2715},[87,23454,123],{"class":97},[87,23456,23457,23459,23461],{"class":89,"line":2720},[87,23458,1105],{"class":171},[87,23460,2928],{"class":205},[87,23462,2931],{"class":97},[87,23464,23465],{"class":89,"line":2734},[87,23466,2503],{"class":97},[87,23468,23469,23471],{"class":89,"line":2739},[87,23470,6652],{"class":205},[87,23472,6586],{"class":97},[87,23474,23475],{"class":89,"line":3532},[87,23476,123],{"class":97},[49,23478,23480],{"id":23479},"_8282静态成员函数","8.2.8.2静态成员函数",[19,23482,23483],{},"1.静态成员函数定义与访问",[77,23485,23487],{"className":1091,"code":23486,"language":1093,"meta":82,"style":82},"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",[84,23488,23489,23495,23499,23503,23508,23519,23523,23537,23541,23545,23553,23557,23562,23567,23571,23579,23584,23594],{"__ignoreMap":82},[87,23490,23491,23493],{"class":89,"line":90},[87,23492,15644],{"class":171},[87,23494,16121],{"class":205},[87,23496,23497],{"class":89,"line":101},[87,23498,2503],{"class":97},[87,23500,23501],{"class":89,"line":120},[87,23502,15666],{"class":171},[87,23504,23505],{"class":89,"line":222},[87,23506,23507],{"class":199},"    \u002F\u002F在公共权限下定义静态成员函数\n",[87,23509,23510,23512,23515,23517],{"class":89,"line":234},[87,23511,11970],{"class":171},[87,23513,23514],{"class":171}," void",[87,23516,12335],{"class":205},[87,23518,2931],{"class":97},[87,23520,23521],{"class":89,"line":256},[87,23522,2985],{"class":97},[87,23524,23525,23528,23530,23533,23535],{"class":89,"line":269},[87,23526,23527],{"class":97},"        coout",[87,23529,2134],{"class":171},[87,23531,23532],{"class":949},"\"静态成员函数的调用\"",[87,23534,2134],{"class":171},[87,23536,2156],{"class":97},[87,23538,23539],{"class":89,"line":463},[87,23540,3142],{"class":97},[87,23542,23543],{"class":89,"line":469},[87,23544,4949],{"class":97},[87,23546,23547,23549,23551],{"class":89,"line":2287},[87,23548,6314],{"class":171},[87,23550,6538],{"class":205},[87,23552,2931],{"class":97},[87,23554,23555],{"class":89,"line":2568},[87,23556,2503],{"class":97},[87,23558,23559],{"class":89,"line":2573},[87,23560,23561],{"class":199},"    \u002F\u002F静态成员函数的调用方式:\n",[87,23563,23564],{"class":89,"line":2579},[87,23565,23566],{"class":199},"    \u002F\u002F1.通过对象访问\n",[87,23568,23569],{"class":89,"line":2584},[87,23570,16263],{"class":97},[87,23572,23573,23575,23577],{"class":89,"line":2598},[87,23574,16815],{"class":97},[87,23576,12501],{"class":205},[87,23578,6586],{"class":97},[87,23580,23581],{"class":89,"line":2603},[87,23582,23583],{"class":199},"    \u002F\u002F2.通过类名访问\n",[87,23585,23586,23588,23590,23592],{"class":89,"line":2609},[87,23587,19467],{"class":205},[87,23589,18680],{"class":97},[87,23591,12501],{"class":205},[87,23593,6586],{"class":97},[87,23595,23596],{"class":89,"line":2630},[87,23597,123],{"class":97},[1055,23599,23600],{"start":101},[29,23601,23602],{},"静态成员函数只能访问静态成员变量",[77,23604,23606],{"className":1091,"code":23605,"language":1093,"meta":82,"style":82},"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",[84,23607,23608,23614,23618,23622,23626,23636,23640,23654,23659,23671,23675,23686,23696,23700,23704,23708,23718,23722,23735,23739,23743,23747,23751,23765,23773,23777,23781,23785,23789,23797,23801,23811,23816,23820,23828,23832,23838],{"__ignoreMap":82},[87,23609,23610,23612],{"class":89,"line":90},[87,23611,15644],{"class":171},[87,23613,16121],{"class":205},[87,23615,23616],{"class":89,"line":101},[87,23617,2503],{"class":97},[87,23619,23620],{"class":89,"line":120},[87,23621,15666],{"class":171},[87,23623,23624],{"class":89,"line":222},[87,23625,23507],{"class":199},[87,23627,23628,23630,23632,23634],{"class":89,"line":234},[87,23629,11970],{"class":171},[87,23631,23514],{"class":171},[87,23633,12335],{"class":205},[87,23635,2931],{"class":97},[87,23637,23638],{"class":89,"line":256},[87,23639,2985],{"class":97},[87,23641,23642,23645,23647,23649,23651],{"class":89,"line":269},[87,23643,23644],{"class":97},"        m_A",[87,23646,946],{"class":171},[87,23648,536],{"class":104},[87,23650,1155],{"class":97},[87,23652,23653],{"class":199}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[87,23655,23656],{"class":89,"line":463},[87,23657,23658],{"class":199},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[87,23660,23661,23663,23665,23667,23669],{"class":89,"line":469},[87,23662,23527],{"class":97},[87,23664,2134],{"class":171},[87,23666,23532],{"class":949},[87,23668,2134],{"class":171},[87,23670,2156],{"class":97},[87,23672,23673],{"class":89,"line":2287},[87,23674,3142],{"class":97},[87,23676,23677,23679,23681,23683],{"class":89,"line":2568},[87,23678,11970],{"class":171},[87,23680,3337],{"class":171},[87,23682,16398],{"class":97},[87,23684,23685],{"class":199}," \u002F\u002F静态成员变量\n",[87,23687,23688,23690,23693],{"class":89,"line":2573},[87,23689,2940],{"class":171},[87,23691,23692],{"class":97}," m_B;",[87,23694,23695],{"class":199}," \u002F\u002F非静态成员变量\n",[87,23697,23698],{"class":89,"line":2579},[87,23699,3355],{"emptyLinePlaceholder":1029},[87,23701,23702],{"class":89,"line":2584},[87,23703,16172],{"class":171},[87,23705,23706],{"class":89,"line":2598},[87,23707,23320],{"class":199},[87,23709,23710,23712,23714,23716],{"class":89,"line":2603},[87,23711,11970],{"class":171},[87,23713,23514],{"class":171},[87,23715,14568],{"class":205},[87,23717,2931],{"class":97},[87,23719,23720],{"class":89,"line":2609},[87,23721,2985],{"class":97},[87,23723,23724,23726,23728,23731,23733],{"class":89,"line":2630},[87,23725,4405],{"class":97},[87,23727,2134],{"class":171},[87,23729,23730],{"class":949},"\"这是私有权限下的静态函数调用\"",[87,23732,2134],{"class":171},[87,23734,2156],{"class":97},[87,23736,23737],{"class":89,"line":2635},[87,23738,3142],{"class":97},[87,23740,23741],{"class":89,"line":2649},[87,23742,3355],{"emptyLinePlaceholder":1029},[87,23744,23745],{"class":89,"line":2654},[87,23746,3355],{"emptyLinePlaceholder":1029},[87,23748,23749],{"class":89,"line":2683},[87,23750,4949],{"class":97},[87,23752,23753,23755,23757,23759,23761,23763],{"class":89,"line":2688},[87,23754,1105],{"class":171},[87,23756,16519],{"class":205},[87,23758,23150],{"class":97},[87,23760,946],{"class":171},[87,23762,111],{"class":104},[87,23764,117],{"class":97},[87,23766,23767,23769,23771],{"class":89,"line":2705},[87,23768,6314],{"class":171},[87,23770,6538],{"class":205},[87,23772,2931],{"class":97},[87,23774,23775],{"class":89,"line":2710},[87,23776,2503],{"class":97},[87,23778,23779],{"class":89,"line":2715},[87,23780,23561],{"class":199},[87,23782,23783],{"class":89,"line":2720},[87,23784,23566],{"class":199},[87,23786,23787],{"class":89,"line":2734},[87,23788,16263],{"class":97},[87,23790,23791,23793,23795],{"class":89,"line":2739},[87,23792,16815],{"class":97},[87,23794,12501],{"class":205},[87,23796,6586],{"class":97},[87,23798,23799],{"class":89,"line":3532},[87,23800,23583],{"class":199},[87,23802,23803,23805,23807,23809],{"class":89,"line":3546},[87,23804,19467],{"class":205},[87,23806,18680],{"class":97},[87,23808,12501],{"class":205},[87,23810,6586],{"class":97},[87,23812,23813],{"class":89,"line":3554},[87,23814,23815],{"class":199},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[87,23817,23818],{"class":89,"line":3559},[87,23819,123],{"class":97},[87,23821,23822,23824,23826],{"class":89,"line":3565},[87,23823,1105],{"class":171},[87,23825,2928],{"class":205},[87,23827,2931],{"class":97},[87,23829,23830],{"class":89,"line":3571},[87,23831,2503],{"class":97},[87,23833,23834,23836],{"class":89,"line":3576},[87,23835,6583],{"class":205},[87,23837,6586],{"class":97},[87,23839,23840],{"class":89,"line":8898},[87,23841,123],{"class":97},[44,23843,23845],{"id":23844},"_83c对象模型和this指针","8.3C++对象模型和this指针",[49,23847,23849],{"id":23848},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,23851,23852],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23854,23855],{},"只有非静态成员变量才属于类的对象上",[23857,23858,23860],"h5",{"id":23859},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[77,23862,23864],{"className":1091,"code":23863,"language":1093,"meta":82,"style":82},"#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",[84,23865,23866,23873,23883,23889,23893,23897,23901,23909,23913,23917,23940,23944,23952,23956,23962],{"__ignoreMap":82},[87,23867,23868,23870],{"class":89,"line":90},[87,23869,2905],{"class":171},[87,23871,23872],{"class":949},"\u003Ciostraem>\n",[87,23874,23875,23877,23879,23881],{"class":89,"line":101},[87,23876,2913],{"class":171},[87,23878,2916],{"class":171},[87,23880,2919],{"class":205},[87,23882,117],{"class":97},[87,23884,23885,23887],{"class":89,"line":120},[87,23886,15644],{"class":171},[87,23888,16121],{"class":205},[87,23890,23891],{"class":89,"line":222},[87,23892,2503],{"class":97},[87,23894,23895],{"class":89,"line":234},[87,23896,3355],{"emptyLinePlaceholder":1029},[87,23898,23899],{"class":89,"line":256},[87,23900,4949],{"class":97},[87,23902,23903,23905,23907],{"class":89,"line":269},[87,23904,6314],{"class":171},[87,23906,6538],{"class":205},[87,23908,2931],{"class":97},[87,23910,23911],{"class":89,"line":463},[87,23912,2503],{"class":97},[87,23914,23915],{"class":89,"line":469},[87,23916,16263],{"class":97},[87,23918,23919,23921,23923,23926,23928,23931,23933,23935,23937],{"class":89,"line":2287},[87,23920,2508],{"class":97},[87,23922,2134],{"class":171},[87,23924,23925],{"class":949},"\"size of p=\"",[87,23927,2134],{"class":171},[87,23929,23930],{"class":205},"sizeoif",[87,23932,7489],{"class":97},[87,23934,2134],{"class":171},[87,23936,2199],{"class":97},[87,23938,23939],{"class":199}," \u002F\u002F查看这个空类的占用的内存空间\n",[87,23941,23942],{"class":89,"line":2568},[87,23943,123],{"class":97},[87,23945,23946,23948,23950],{"class":89,"line":2573},[87,23947,1105],{"class":171},[87,23949,2928],{"class":205},[87,23951,2931],{"class":97},[87,23953,23954],{"class":89,"line":2579},[87,23955,2503],{"class":97},[87,23957,23958,23960],{"class":89,"line":2584},[87,23959,6583],{"class":205},[87,23961,6586],{"class":97},[87,23963,23964],{"class":89,"line":2598},[87,23965,123],{"class":97},[19,23967,23968],{},"输出结果为：size of p=1",[19,23970,23971],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23973,23974],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23857,23976,23978],{"id":23977},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[77,23980,23982],{"className":1091,"code":23981,"language":1093,"meta":82,"style":82},"#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",[84,23983,23984,23990,24000,24008,24012,24021,24025,24033,24037,24041,24060,24064,24068,24076,24080,24086],{"__ignoreMap":82},[87,23985,23986,23988],{"class":89,"line":90},[87,23987,2905],{"class":171},[87,23989,2908],{"class":949},[87,23991,23992,23994,23996,23998],{"class":89,"line":101},[87,23993,2913],{"class":171},[87,23995,2916],{"class":171},[87,23997,2919],{"class":205},[87,23999,117],{"class":97},[87,24001,24002,24004,24006],{"class":89,"line":120},[87,24003,15644],{"class":171},[87,24005,16519],{"class":205},[87,24007,3629],{"class":97},[87,24009,24010],{"class":89,"line":222},[87,24011,2503],{"class":97},[87,24013,24014,24016,24018],{"class":89,"line":234},[87,24015,2940],{"class":171},[87,24017,16398],{"class":97},[87,24019,24020],{"class":199},"\u002F\u002F非静态成员变量\n",[87,24022,24023],{"class":89,"line":256},[87,24024,4949],{"class":97},[87,24026,24027,24029,24031],{"class":89,"line":269},[87,24028,6314],{"class":171},[87,24030,6538],{"class":205},[87,24032,2931],{"class":97},[87,24034,24035],{"class":89,"line":463},[87,24036,2503],{"class":97},[87,24038,24039],{"class":89,"line":469},[87,24040,16263],{"class":97},[87,24042,24043,24045,24047,24049,24051,24053,24055,24057],{"class":89,"line":2287},[87,24044,2508],{"class":97},[87,24046,2134],{"class":171},[87,24048,23925],{"class":949},[87,24050,2330],{"class":171},[87,24052,7489],{"class":97},[87,24054,2134],{"class":171},[87,24056,2199],{"class":97},[87,24058,24059],{"class":199}," \u002F\u002F查看不是空对象时占用多少内存\n",[87,24061,24062],{"class":89,"line":2568},[87,24063,3355],{"emptyLinePlaceholder":1029},[87,24065,24066],{"class":89,"line":2573},[87,24067,123],{"class":97},[87,24069,24070,24072,24074],{"class":89,"line":2579},[87,24071,1105],{"class":171},[87,24073,2928],{"class":205},[87,24075,2931],{"class":97},[87,24077,24078],{"class":89,"line":2584},[87,24079,2503],{"class":97},[87,24081,24082,24084],{"class":89,"line":2598},[87,24083,6583],{"class":205},[87,24085,6586],{"class":97},[87,24087,24088],{"class":89,"line":2603},[87,24089,123],{"class":97},[19,24091,24092],{},"输出结果：size of p=4",[19,24094,24095],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[1055,24097,24098],{},[29,24099,24100],{},"如果加上非静态成员变量，Person类修改如下",[77,24102,24104],{"className":1091,"code":24103,"language":1093,"meta":82,"style":82},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[84,24105,24106,24112,24116,24122,24130,24134,24139],{"__ignoreMap":82},[87,24107,24108,24110],{"class":89,"line":90},[87,24109,15644],{"class":171},[87,24111,16121],{"class":205},[87,24113,24114],{"class":89,"line":101},[87,24115,2503],{"class":97},[87,24117,24118,24120],{"class":89,"line":120},[87,24119,2940],{"class":171},[87,24121,22340],{"class":97},[87,24123,24124,24126,24128],{"class":89,"line":222},[87,24125,11970],{"class":171},[87,24127,3337],{"class":171},[87,24129,22347],{"class":97},[87,24131,24132],{"class":89,"line":234},[87,24133,4949],{"class":97},[87,24135,24136],{"class":89,"line":256},[87,24137,24138],{"class":199},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[87,24140,24141,24143,24145,24147,24149,24151],{"class":89,"line":269},[87,24142,1105],{"class":171},[87,24144,16519],{"class":205},[87,24146,23359],{"class":97},[87,24148,946],{"class":171},[87,24150,111],{"class":104},[87,24152,117],{"class":97},[19,24154,24155],{},"输出结果：4",[19,24157,24158],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[1055,24160,24161],{"start":101},[29,24162,24163],{},"加上非静态成员函数",[77,24165,24167],{"className":1091,"code":24166,"language":1093,"meta":82,"style":82},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[84,24168,24169,24176,24180,24186,24194,24198,24202,24206],{"__ignoreMap":82},[87,24170,24171,24173],{"class":89,"line":90},[87,24172,15644],{"class":171},[87,24174,24175],{"class":205},"  Person\n",[87,24177,24178],{"class":89,"line":101},[87,24179,2503],{"class":97},[87,24181,24182,24184],{"class":89,"line":120},[87,24183,2940],{"class":171},[87,24185,22340],{"class":97},[87,24187,24188,24190,24192],{"class":89,"line":222},[87,24189,15859],{"class":171},[87,24191,12335],{"class":205},[87,24193,2931],{"class":97},[87,24195,24196],{"class":89,"line":234},[87,24197,2985],{"class":97},[87,24199,24200],{"class":89,"line":256},[87,24201,3355],{"emptyLinePlaceholder":1029},[87,24203,24204],{"class":89,"line":269},[87,24205,3142],{"class":97},[87,24207,24208],{"class":89,"line":463},[87,24209,4949],{"class":97},[19,24211,24212],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[1055,24214,24215],{"start":120},[29,24216,24217],{},"加上静态成员函数",[77,24219,24221],{"className":1091,"code":24220,"language":1093,"meta":82,"style":82},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[84,24222,24223,24229,24233,24239,24247,24251,24255,24259,24270,24274,24278,24282],{"__ignoreMap":82},[87,24224,24225,24227],{"class":89,"line":90},[87,24226,15644],{"class":171},[87,24228,24175],{"class":205},[87,24230,24231],{"class":89,"line":101},[87,24232,2503],{"class":97},[87,24234,24235,24237],{"class":89,"line":120},[87,24236,2940],{"class":171},[87,24238,22340],{"class":97},[87,24240,24241,24243,24245],{"class":89,"line":222},[87,24242,15859],{"class":171},[87,24244,12335],{"class":205},[87,24246,2931],{"class":97},[87,24248,24249],{"class":89,"line":234},[87,24250,2985],{"class":97},[87,24252,24253],{"class":89,"line":256},[87,24254,3355],{"emptyLinePlaceholder":1029},[87,24256,24257],{"class":89,"line":269},[87,24258,3142],{"class":97},[87,24260,24261,24263,24265,24268],{"class":89,"line":463},[87,24262,11970],{"class":171},[87,24264,23514],{"class":171},[87,24266,24267],{"class":205}," func1",[87,24269,2931],{"class":97},[87,24271,24272],{"class":89,"line":469},[87,24273,2985],{"class":97},[87,24275,24276],{"class":89,"line":2287},[87,24277,3355],{"emptyLinePlaceholder":1029},[87,24279,24280],{"class":89,"line":2568},[87,24281,3142],{"class":97},[87,24283,24284],{"class":89,"line":2573},[87,24285,4949],{"class":97},[19,24287,24155],{},[19,24289,24290],{},"解释：静态成员函数也不属于类上",[1006,24292,8624],{},{"title":82,"searchDepth":101,"depth":101,"links":24294},[24295,24301],{"id":15595,"depth":101,"text":15596,"children":24296},[24297,24298,24299,24300],{"id":15599,"depth":120,"text":15600},{"id":16324,"depth":120,"text":16325},{"id":16496,"depth":120,"text":16497},{"id":16954,"depth":120,"text":16955},{"id":19325,"depth":101,"text":19326,"children":24302},[24303,24304,24305,24306,24307,24308,24309,24310,24311],{"id":19337,"depth":120,"text":19338},{"id":19630,"depth":120,"text":19631},{"id":20121,"depth":120,"text":20122},{"id":21218,"depth":120,"text":21219},{"id":21641,"depth":120,"text":21642},{"id":22120,"depth":120,"text":22121},{"id":22495,"depth":120,"text":22496},{"id":22908,"depth":120,"text":22909},{"id":23844,"depth":120,"text":23845},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15560,"description":24312},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24319,"title":1093,"body":24320,"description":1026,"extension":1027,"meta":24324,"navigation":1029,"path":24326,"seo":24327,"stem":24328,"__hash__":24329},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24321,"toc":24322},[],{"title":82,"searchDepth":101,"depth":101,"links":24323},[],{"category":24325},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1093,"description":1026},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24331,"title":24332,"body":24333,"description":82,"extension":1027,"meta":24924,"navigation":1029,"path":24925,"seo":24926,"stem":24927,"__hash__":24928},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24334,"toc":24906},[24335,24338,24342,24345,24348,24351,24369,24374,24377,24380,24383,24386,24391,24394,24399,24402,24405,24409,24412,24415,24421,24424,24442,24446,24450,24453,24458,24461,24465,24468,24481,24484,24488,24491,24494,24497,24522,24525,24534,24545,24560,24592,24596,24603,24611,24615,24618,24621,24626,24630,24633,24636,24641,24644,24648,24651,24654,24659,24662,24666,24671,24675,24742,24746,24749,24752,24755,24758,24761,24767,24788,24791,24805,24814,24818,24821,24824,24829,24832,24837,24842,24845,24848,24853,24858,24861,24866,24871,24874,24879,24884,24887,24890,24895,24898,24903],[10,24336,24332],{"id":24337},"_1强化学习基本认识",[14,24339,24341],{"id":24340},"_11什么是强化学习","1.1.什么是强化学习",[19,24343,24344],{},"强化学习有两部分组成：智能体和环境；",[19,24346,24347],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,24349,24350],{},"强化学习与监督学习的区别:",[1055,24352,24353,24356,24359,24362],{},[29,24354,24355],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[29,24357,24358],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[29,24360,24361],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[29,24363,24364,24365,24368],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[57,24366,24367],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,24370,24371],{},[39,24372],{"alt":82,"src":24373},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,24375,24376],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,24378,24379],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,24381,24382],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,24384,24385],{},"获取奖励",[19,24387,24388],{},[39,24389],{"alt":82,"src":24390},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,24392,24393],{},"强化学习可以分成标准强化学习和深度强化学习",[19,24395,24396],{},[39,24397],{"alt":82,"src":24398},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,24400,24401],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,24403,24404],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,24406,24408],{"id":24407},"_12强化学习应用场景","1.2.强化学习应用场景",[19,24410,24411],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,24413,24414],{},"具身智能中的应用",[19,24416,24417,24420],{},[57,24418,24419],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,24422,24423],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,24425,24426,24427,24430,24431,24434,24435,24438,24439],{},"机器人是",[57,24428,24429],{},"躯体","，深度学习是",[57,24432,24433],{},"神经元****网络","，VLA是",[57,24436,24437],{},"通用的行为逻辑","，而强化学习是",[57,24440,24441],{},"教练",[14,24443,24445],{"id":24444},"_13序列决策","1.3.序列决策",[44,24447,24449],{"id":24448},"_131智能体与环境","1.3.1.智能体与环境",[19,24451,24452],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,24454,24455],{},[39,24456],{"alt":82,"src":24457},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,24459,24460],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[44,24462,24464],{"id":24463},"_132奖励","1.3.2.奖励",[19,24466,24467],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,24469,24470,24471,24480],{},"取某个策略的表现如何。强化学习的目的就是",[57,24472,24473,24474,24479],{},"最大化",[57,24475,24476],{},[57,24477,24478],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,24482,24483],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[44,24485,24487],{"id":24486},"_133序列决策","1.3.3.序列决策",[19,24489,24490],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,24492,24493],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,24495,24496],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,24498,24499,24503,24504,24506,24507,24509,24510,24512,24513,14745,24516,14745,24519],{},[24500,24501,24502],"em",{},"Ht"," = ",[24500,24505,1689],{},"1*, a",[24500,24508,1313],{},", r",[24500,24511,1313],{},", . . . ,* ",[24500,24514,24515],{},"ot",[24500,24517,24518],{},", at ,",[24500,24520,24521],{},"rt",[19,24523,24524],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,24526,24527,24503,24530,2614,24532,1524],{},[24500,24528,24529],{},"st",[24500,24531,1152],{},[24500,24533,24502],{},[19,24535,24536,24537,24540,24541,24544],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[57,24538,24539],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[57,24542,24543],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,24546,24547,24548,24551,24552,24555,24556,24559],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[57,24549,24550],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[57,24553,24554],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24500,24557,24558],{},"S, A, T, R, Ω, O, γ",")。",[19,24561,24562,24563,24565,24566,24568,24569,165,24571,24574,24575,24577,24578,165,24581,24584,24585,24587,24588,24591],{},"其中 ",[24500,24564,1782],{}," 表示状态空间，为隐变量，",[24500,24567,1328],{}," 为动作空间，",[24500,24570,1806],{},[24500,24572,24573],{},"s ′ |s, a",") 为状态转移概率，",[24500,24576,1757],{}," 为奖励函数，",[24500,24579,24580],{},"Ω",[24500,24582,24583],{},"o|s, a",") 为观测概率，",[24500,24586,1683],{}," 为观测空间，",[24500,24589,24590],{},"γ"," 为折扣因子。",[14,24593,24595],{"id":24594},"_14动作空间","1.4.动作空间",[19,24597,24598,24599,24602],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[57,24600,24601],{},"动作空间"," ，动作空间分为:",[1055,24604,24605,24608],{},[29,24606,24607],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[29,24609,24610],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,24612,24614],{"id":24613},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,24616,24617],{},"由策略、价值函数、模型三部分组成",[19,24619,24620],{},"这三者组成马尔可夫决策过程",[19,24622,24623],{},[39,24624],{"alt":82,"src":24625},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[44,24627,24629],{"id":24628},"_151策略","1.5.1.策略",[19,24631,24632],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,24634,24635],{},"策略可分为两种：",[19,24637,24638],{},[39,24639],{"alt":82,"src":24640},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,24642,24643],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[44,24645,24647],{"id":24646},"_152价值函数","1.5.2.价值函数",[19,24649,24650],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,24652,24653],{},"价值函数中有一个折扣因子，类似于存款利息",[19,24655,24656],{},[39,24657],{"alt":82,"src":24658},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,24660,24661],{},"进入某个状态采取的最优动作可以通过Q函数得到",[44,24663,24665],{"id":24664},"_153模型","1.5.3.模型",[19,24667,24668],{},[39,24669],{"alt":82,"src":24670},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,24672,24674],{"id":24673},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[1235,24676,24677,24688],{},[1238,24678,24679],{},[1241,24680,24681,24685],{},[1244,24682,24684],{"align":24683},"left","类型",[1244,24686,24687],{"align":24683},"特点",[1281,24689,24690,24700,24710,24720,24732],{},[1241,24691,24692,24697],{},[1286,24693,24694],{"align":24683},[57,24695,24696],{},"基于价值的智能体",[1286,24698,24699],{"align":24683},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[1241,24701,24702,24707],{},[1286,24703,24704],{"align":24683},[57,24705,24706],{},"基于策略的智能体",[1286,24708,24709],{"align":24683},"直接学习策略，没有学习价值函数",[1241,24711,24712,24717],{},[1286,24713,24714],{"align":24683},[57,24715,24716],{},"演员-评论员智能体",[1286,24718,24719],{"align":24683},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[1241,24721,24722,24727],{},[1286,24723,24724],{"align":24683},[57,24725,24726],{},"有模型强化学习智能体",[1286,24728,24729],{"align":24683},[39,24730],{"alt":82,"src":24731},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[1241,24733,24734,24739],{},[1286,24735,24736],{"align":24683},[57,24737,24738],{},"免模型强化学习智能体",[1286,24740,24741],{"align":24683},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,24743,24745],{"id":24744},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,24747,24748],{},"学习和规划是序列决策的两个基本问题",[19,24750,24751],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,24753,24754],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,24756,24757],{},"强化学习用到的库：Gym",[19,24759,24760],{},"Gym可以检验强化学习算法的优劣",[19,24762,24763,24766],{},[57,24764,24765],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[77,24768,24772],{"className":24769,"code":24770,"language":24771,"meta":82,"style":82},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[84,24773,24774],{"__ignoreMap":82},[87,24775,24776,24779,24782,24785],{"class":89,"line":90},[87,24777,24778],{"class":205},"pip",[87,24780,24781],{"class":949}," install",[87,24783,24784],{"class":949}," gym==",[87,24786,24787],{"class":104},"0.25.2\n",[19,24789,24790],{},"显示图形界面需要",[77,24792,24794],{"className":24769,"code":24793,"language":24771,"meta":82,"style":82},"pip install pygame\n",[84,24795,24796],{"__ignoreMap":82},[87,24797,24798,24800,24802],{"class":89,"line":90},[87,24799,24778],{"class":205},[87,24801,24781],{"class":949},[87,24803,24804],{"class":949}," pygame\n",[19,24806,24807,24808],{},"有关Gym库的相关文档介绍：",[1334,24809,24813],{"href":24810,"rel":24811},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24812],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24815,24817],{"id":24816},"_18一些补充基础概念","1.8.一些补充基础概念",[19,24819,24820],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,24822,24823],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,24825,24826],{},[39,24827],{"alt":82,"src":24828},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,24830,24831],{},"折扣率需要自己来设定",[19,24833,24834],{},[39,24835],{"alt":82,"src":24836},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[1055,24838,24839],{},[29,24840,24841],{},"状态转移函数：",[19,24843,24844],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,24846,24847],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,24849,24850],{},[39,24851],{"alt":82,"src":24852},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[1055,24854,24855],{"start":101},[29,24856,24857],{},"动作价值函数：",[19,24859,24860],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24862,24863],{},[39,24864],{"alt":82,"src":24865},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[1055,24867,24868],{"start":120},[29,24869,24870],{},"最优动作价值函数：",[19,24872,24873],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[19,24875,24876],{},[39,24877],{"alt":82,"src":24878},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[1055,24880,24881],{"start":222},[29,24882,24883],{},"状态价值函数:",[19,24885,24886],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24888,24889],{},"它衡量的是“一个具体动作”的长期价值",[19,24891,24892],{},[39,24893],{"alt":82,"src":24894},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24896,24897],{},"几个价值函数之间的比较：",[19,24899,24900],{},[39,24901],{"alt":82,"src":24902},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1006,24904,24905],{},"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":82,"searchDepth":101,"depth":101,"links":24907},[24908,24909,24910,24915,24916,24921,24922,24923],{"id":24340,"depth":101,"text":24341},{"id":24407,"depth":101,"text":24408},{"id":24444,"depth":101,"text":24445,"children":24911},[24912,24913,24914],{"id":24448,"depth":120,"text":24449},{"id":24463,"depth":120,"text":24464},{"id":24486,"depth":120,"text":24487},{"id":24594,"depth":101,"text":24595},{"id":24613,"depth":101,"text":24614,"children":24917},[24918,24919,24920],{"id":24628,"depth":120,"text":24629},{"id":24646,"depth":120,"text":24647},{"id":24664,"depth":120,"text":24665},{"id":24673,"depth":101,"text":24674},{"id":24744,"depth":101,"text":24745},{"id":24816,"depth":101,"text":24817},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24332,"description":82},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24930,"title":24931,"body":24932,"description":24939,"extension":1027,"meta":24950,"navigation":1029,"path":24951,"seo":24952,"stem":24953,"__hash__":24954},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24933,"toc":24948},[24934,24937,24940,24945],[10,24935,24931],{"id":24936},"_2马尔可夫决策过程",[19,24938,24939],{},"这是强化学习的基本框架",[19,24941,24942],{},[39,24943],{"alt":82,"src":24944},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24946,24947],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":82,"searchDepth":101,"depth":101,"links":24949},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24931,"description":24939},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24956,"title":24957,"body":24958,"description":82,"extension":1027,"meta":25074,"navigation":1029,"path":25075,"seo":25076,"stem":25077,"__hash__":25078},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24959,"toc":25069},[24960,24963,24967,24970,24975,24980,24983,24988,24991,24996,24999,25003,25008,25011,25016,25021,25026,25029,25033,25038,25041,25046,25051,25056,25061,25064],[10,24961,24957],{"id":24962},"_3动作价值函数",[14,24964,24966],{"id":24965},"_31dqn","3.1.DQN",[19,24968,24969],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24971,24972],{},[39,24973],{"alt":82,"src":24974},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,24976,24977],{},[39,24978],{"alt":82,"src":24979},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,24981,24982],{},"DQN算法的描述：",[19,24984,24985],{},[39,24986],{"alt":82,"src":24987},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,24989,24990],{},"这里的Dense指的是全连接层",[19,24992,24993],{},[39,24994],{"alt":82,"src":24995},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,24997,24998],{},"当前观测的状态为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,25000,25002],{"id":25001},"_32dqn的举例","3.2.DQN的举例",[19,25004,25005],{},[39,25006],{"alt":82,"src":25007},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,25009,25010],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,25012,25013],{},[39,25014],{"alt":82,"src":25015},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,25017,25018],{},[39,25019],{"alt":82,"src":25020},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,25022,25023],{},[39,25024],{"alt":82,"src":25025},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,25027,25028],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25030,25032],{"id":25031},"_33td算法","3.3.TD算法",[19,25034,25035],{},[39,25036],{"alt":82,"src":25037},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,25039,25040],{},"强化学习TD算法公式的粗略解释：",[19,25042,25043],{},[39,25044],{"alt":82,"src":25045},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,25047,25048],{},[39,25049],{"alt":82,"src":25050},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,25052,25053],{},[39,25054],{"alt":82,"src":25055},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,25057,25058],{},[39,25059],{"alt":82,"src":25060},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,25062,25063],{},"TD算法总结：",[19,25065,25066],{},[39,25067],{"alt":82,"src":25068},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":82,"searchDepth":101,"depth":101,"links":25070},[25071,25072,25073],{"id":24965,"depth":101,"text":24966},{"id":25001,"depth":101,"text":25002},{"id":25031,"depth":101,"text":25032},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24957,"description":82},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25080,"title":25081,"body":25082,"description":82,"extension":1027,"meta":25315,"navigation":1029,"path":25316,"seo":25317,"stem":25318,"__hash__":25319},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25083,"toc":25311},[25084,25087,25091,25094,25097,25102,25107,25110,25115,25120,25123,25128,25131,25136,25139,25144,25147,25152,25155,25160,25165,25168,25173,25176,25179,25184,25187,25192,25197,25201,25204,25207,25212,25217,25220,25225,25230,25233,25238,25241,25244,25249,25252,25257,25260,25265,25270,25273,25278,25283,25286,25291,25294,25299,25302],[10,25085,25081],{"id":25086},"_4策略学习",[14,25088,25090],{"id":25089},"_41概念描述","4.1.概念描述",[19,25092,25093],{},"用神经网络（策略网络）近似策略函数",[19,25095,25096],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,25098,25099],{},[39,25100],{"alt":82,"src":25101},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,25103,25104],{},[39,25105],{"alt":82,"src":25106},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,25108,25109],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,25111,25112],{},[39,25113],{"alt":82,"src":25114},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,25116,25117],{},[39,25118],{"alt":82,"src":25119},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,25121,25122],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,25124,25125],{},[39,25126],{"alt":82,"src":25127},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,25129,25130],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,25132,25133],{},[39,25134],{"alt":82,"src":25135},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,25137,25138],{},"改进theta要用到策略梯度算法",[19,25140,25141],{},[39,25142],{"alt":82,"src":25143},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,25145,25146],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,25148,25149],{},[39,25150],{"alt":82,"src":25151},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,25153,25154],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,25156,25157],{},[39,25158],{"alt":82,"src":25159},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,25161,25162],{},[39,25163],{"alt":82,"src":25164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,25166,25167],{},"梯度公式总结：",[19,25169,25170],{},[39,25171],{"alt":82,"src":25172},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,25174,25175],{},"两个公式的分别应用场景：",[19,25177,25178],{},"对于离散的动作：",[19,25180,25181],{},[39,25182],{"alt":82,"src":25183},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,25185,25186],{},"对于连续的动作：",[19,25188,25189],{},[39,25190],{"alt":82,"src":25191},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,25193,25194],{},[39,25195],{"alt":82,"src":25196},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,25198,25200],{"id":25199},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,25202,25203],{},"使用蒙特卡洛来近似计算策略梯度",[19,25205,25206],{},"蒙特卡洛法的解释如下：",[19,25208,25209],{},[39,25210],{"alt":82,"src":25211},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,25213,25214],{},[39,25215],{"alt":82,"src":25216},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,25218,25219],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[1055,25221,25222],{},[29,25223,25224],{},"方法一：reinforce算法",[19,25226,25227],{},[39,25228],{"alt":82,"src":25229},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,25231,25232],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[1055,25234,25235],{"start":101},[29,25236,25237],{},"方法二：actor-critic算法",[19,25239,25240],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,25242,25243],{},"两个网络的构建：",[19,25245,25246],{},[39,25247],{"alt":82,"src":25248},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,25250,25251],{},"actor网路：",[19,25253,25254],{},[39,25255],{"alt":82,"src":25256},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,25258,25259],{},"critic网络",[19,25261,25262],{},[39,25263],{"alt":82,"src":25264},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[1055,25266,25267],{"start":120},[29,25268,25269],{},"网络的训练",[19,25271,25272],{},"网络描述",[19,25274,25275],{},[39,25276],{"alt":82,"src":25277},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,25279,25280],{},[39,25281],{"alt":82,"src":25282},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,25284,25285],{},"TD算法更新梯度：",[19,25287,25288],{},[39,25289],{"alt":82,"src":25290},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,25292,25293],{},"策略网络更新梯度：",[19,25295,25296],{},[39,25297],{"alt":82,"src":25298},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,25300,25301],{},"训练整个流程的具体描述：",[19,25303,25304,25307,25308],{},[39,25305],{"alt":82,"src":25306},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[39,25309],{"alt":82,"src":25310},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":82,"searchDepth":101,"depth":101,"links":25312},[25313,25314],{"id":25089,"depth":101,"text":25090},{"id":25199,"depth":101,"text":25200},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25081,"description":82},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25321,"title":25322,"body":25323,"description":25330,"extension":1027,"meta":25380,"navigation":1029,"path":25381,"seo":25382,"stem":25383,"__hash__":25384},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25324,"toc":25376},[25325,25328,25331,25335,25338,25343,25347,25350,25355,25358,25363,25368,25371],[10,25326,25322],{"id":25327},"_5alphago算法",[19,25329,25330],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25332,25334],{"id":25333},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,25336,25337],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,25339,25340],{},[39,25341],{"alt":82,"src":25342},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25344,25346],{"id":25345},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,25348,25349],{},"采用强化学习的方式训练策略网络",[19,25351,25352],{},[39,25353],{"alt":82,"src":25354},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,25356,25357],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,25359,25360],{},[39,25361],{"alt":82,"src":25362},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,25364,25365],{},[39,25366],{"alt":82,"src":25367},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,25369,25370],{},"强化学习训练策略网络的总结：",[19,25372,25373],{},[39,25374],{"alt":82,"src":25375},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":82,"searchDepth":101,"depth":101,"links":25377},[25378,25379],{"id":25333,"depth":101,"text":25334},{"id":25345,"depth":101,"text":25346},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25322,"description":25330},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25386,"title":25387,"body":25388,"description":25395,"extension":1027,"meta":25398,"navigation":1029,"path":25399,"seo":25400,"stem":25401,"__hash__":25402},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25389,"toc":25396},[25390,25393],[10,25391,25387],{"id":25392},"_6价值网络",[19,25394,25395],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":82,"searchDepth":101,"depth":101,"links":25397},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25387,"description":25395},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25404,"title":25405,"body":25406,"description":25410,"extension":1027,"meta":25411,"navigation":1029,"path":25412,"seo":25413,"stem":25414,"__hash__":25415},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25407,"toc":25408},[],{"title":82,"searchDepth":101,"depth":101,"links":25409},[],"记录自己的强化学习笔记。",{"category":24325},"\u002Fwiki\u002F2025-12-04",{"title":25405,"description":25410},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25417,"title":25418,"body":25419,"description":1026,"extension":1027,"meta":25458,"navigation":1029,"path":25459,"seo":25460,"stem":25461,"__hash__":25462},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25420,"toc":25456},[25421,25424,25427,25433,25436,25442,25445,25450,25453],[10,25422,25418],{"id":25423},"_1-项目概览与官方资源",[19,25425,25426],{},"官方文档：",[19,25428,25429],{},[1334,25430,25431],{"href":25431,"rel":25432},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24812],[19,25434,25435],{},"官方代码仓库：",[19,25437,25438],{},[1334,25439,25440],{"href":25440,"rel":25441},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24812],[19,25443,25444],{},"复现大体流程：",[19,25446,25447],{},[39,25448],{"alt":82,"src":25449},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,25451,25452],{},"本教程的目标是打通这条链路：",[19,25454,25455],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":82,"searchDepth":101,"depth":101,"links":25457},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25418,"description":1026},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25464,"title":25465,"body":25466,"description":1026,"extension":1027,"meta":25582,"navigation":1029,"path":25583,"seo":25584,"stem":25585,"__hash__":25586},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25467,"toc":25577},[25468,25471,25475,25478,25485,25489,25492,25501,25511,25515,25545,25548,25574],[10,25469,25465],{"id":25470},"_2-环境准备与设备连接",[14,25472,25474],{"id":25473},"_21-系统与环境","2.1 系统与环境",[19,25476,25477],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,25479,25480,25481,25484],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[84,25482,25483],{},"lerobot"," 依赖。",[14,25486,25488],{"id":25487},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,25490,25491],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[77,25493,25495],{"className":24769,"code":25494,"language":24771,"meta":82,"style":82},"lerobot-find-out\n",[84,25496,25497],{"__ignoreMap":82},[87,25498,25499],{"class":89,"line":90},[87,25500,25494],{"class":205},[19,25502,25503,25504,1308,25507,25510],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[84,25505,25506],{},"\u002Fdev\u002FttyACM0",[84,25508,25509],{},"\u002Fdev\u002FttyACM1","）。",[14,25512,25514],{"id":25513},"_23-串口授权","2.3 串口授权",[77,25516,25518],{"className":24769,"code":25517,"language":24771,"meta":82,"style":82},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[84,25519,25520,25534],{"__ignoreMap":82},[87,25521,25522,25525,25528,25531],{"class":89,"line":90},[87,25523,25524],{"class":205},"sudo",[87,25526,25527],{"class":949}," chmod",[87,25529,25530],{"class":104}," 666",[87,25532,25533],{"class":949}," \u002Fdev\u002FttyACM0\n",[87,25535,25536,25538,25540,25542],{"class":89,"line":101},[87,25537,25524],{"class":205},[87,25539,25527],{"class":949},[87,25541,25530],{"class":104},[87,25543,25544],{"class":949}," \u002Fdev\u002FttyACM1\n",[19,25546,25547],{},"说明：",[26,25549,25550,25555,25561,25571],{},[29,25551,25552,25554],{},[84,25553,25524],{},"：以 root 权限执行命令。",[29,25556,25557,25560],{},[84,25558,25559],{},"chmod","：修改设备节点权限。",[29,25562,25563,25566,25567,25570],{},[84,25564,25565],{},"666","：",[84,25568,25569],{},"rw-rw-rw-","，所有用户可读写。",[29,25572,25573],{},"串口号必须替换为你机器上的真实端口。",[1006,25575,25576],{},"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":82,"searchDepth":101,"depth":101,"links":25578},[25579,25580,25581],{"id":25473,"depth":101,"text":25474},{"id":25487,"depth":101,"text":25488},{"id":25513,"depth":101,"text":25514},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25465,"description":1026},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25588,"title":25589,"body":25590,"description":1026,"extension":1027,"meta":25751,"navigation":1029,"path":25752,"seo":25753,"stem":25754,"__hash__":25755},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25591,"toc":25747},[25592,25596,25600,25606,25609,25666,25669,25673,25676,25744],[10,25593,25595],{"id":25594},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,25597,25599],{"id":25598},"_31-配置电机-id","3.1 配置电机 ID",[19,25601,25602,25603,25605],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[84,25604,1313],{},"，需要改成机械臂链路里不冲突的编号。",[19,25607,25608],{},"方式一：用 LeRobot 命令逐步写入。",[77,25610,25612],{"className":24769,"code":25611,"language":24771,"meta":82,"style":82},"# 主臂舵机配置 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",[84,25613,25614,25619,25627,25634,25639,25643,25648,25654,25661],{"__ignoreMap":82},[87,25615,25616],{"class":89,"line":90},[87,25617,25618],{"class":199},"# 主臂舵机配置 ID\n",[87,25620,25621,25624],{"class":89,"line":101},[87,25622,25623],{"class":205},"lerobot-setup-motors",[87,25625,25626],{"class":104}," \\\n",[87,25628,25629,25632],{"class":89,"line":120},[87,25630,25631],{"class":104},"  --teleop.type=so101_leader",[87,25633,25626],{"class":104},[87,25635,25636],{"class":89,"line":222},[87,25637,25638],{"class":104},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[87,25640,25641],{"class":89,"line":234},[87,25642,3355],{"emptyLinePlaceholder":1029},[87,25644,25645],{"class":89,"line":256},[87,25646,25647],{"class":199},"# 从臂舵机配置 ID\n",[87,25649,25650,25652],{"class":89,"line":269},[87,25651,25623],{"class":205},[87,25653,25626],{"class":104},[87,25655,25656,25659],{"class":89,"line":463},[87,25657,25658],{"class":104},"  --robot.type=so101_follower",[87,25660,25626],{"class":104},[87,25662,25663],{"class":89,"line":469},[87,25664,25665],{"class":104},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,25667,25668],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,25670,25672],{"id":25671},"_32-机械臂校准","3.2 机械臂校准",[19,25674,25675],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[77,25677,25679],{"className":24769,"code":25678,"language":24771,"meta":82,"style":82},"# 主臂校准\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",[84,25680,25681,25686,25693,25699,25706,25711,25715,25720,25726,25732,25739],{"__ignoreMap":82},[87,25682,25683],{"class":89,"line":90},[87,25684,25685],{"class":199},"# 主臂校准\n",[87,25687,25688,25691],{"class":89,"line":101},[87,25689,25690],{"class":205},"lerobot-calibrate",[87,25692,25626],{"class":104},[87,25694,25695,25697],{"class":89,"line":120},[87,25696,25631],{"class":104},[87,25698,25626],{"class":104},[87,25700,25701,25704],{"class":89,"line":222},[87,25702,25703],{"class":104},"  --teleop.port=\u002Fdev\u002FttyACM0",[87,25705,25626],{"class":104},[87,25707,25708],{"class":89,"line":234},[87,25709,25710],{"class":104},"  --teleop.id=my_awesome_leader_arm\n",[87,25712,25713],{"class":89,"line":256},[87,25714,3355],{"emptyLinePlaceholder":1029},[87,25716,25717],{"class":89,"line":269},[87,25718,25719],{"class":199},"# 从臂校准\n",[87,25721,25722,25724],{"class":89,"line":463},[87,25723,25690],{"class":205},[87,25725,25626],{"class":104},[87,25727,25728,25730],{"class":89,"line":469},[87,25729,25658],{"class":104},[87,25731,25626],{"class":104},[87,25733,25734,25737],{"class":89,"line":2287},[87,25735,25736],{"class":104},"  --robot.port=\u002Fdev\u002FttyACM1",[87,25738,25626],{"class":104},[87,25740,25741],{"class":89,"line":2568},[87,25742,25743],{"class":104},"  --robot.id=my_awesome_follower_arm\n",[1006,25745,25746],{},"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":82,"searchDepth":101,"depth":101,"links":25748},[25749,25750],{"id":25598,"depth":101,"text":25599},{"id":25671,"depth":101,"text":25672},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25589,"description":1026},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25757,"title":25758,"body":25759,"description":1026,"extension":1027,"meta":25950,"navigation":1029,"path":25951,"seo":25952,"stem":25953,"__hash__":25954},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25760,"toc":25946},[25761,25764,25768,25815,25819,25832,25895,25898,25943],[10,25762,25758],{"id":25763},"_4-遥操与相机接入",[14,25765,25767],{"id":25766},"_41-不带相机遥操","4.1 不带相机遥操",[77,25769,25771],{"className":24769,"code":25770,"language":24771,"meta":82,"style":82},"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",[84,25772,25773,25780,25786,25792,25799,25805,25811],{"__ignoreMap":82},[87,25774,25775,25778],{"class":89,"line":90},[87,25776,25777],{"class":205},"lerobot-teleoperate",[87,25779,25626],{"class":104},[87,25781,25782,25784],{"class":89,"line":101},[87,25783,25658],{"class":104},[87,25785,25626],{"class":104},[87,25787,25788,25790],{"class":89,"line":120},[87,25789,25736],{"class":104},[87,25791,25626],{"class":104},[87,25793,25794,25797],{"class":89,"line":222},[87,25795,25796],{"class":104},"  --robot.id=my_awesome_follower_arm",[87,25798,25626],{"class":104},[87,25800,25801,25803],{"class":89,"line":234},[87,25802,25631],{"class":104},[87,25804,25626],{"class":104},[87,25806,25807,25809],{"class":89,"line":256},[87,25808,25703],{"class":104},[87,25810,25626],{"class":104},[87,25812,25813],{"class":89,"line":269},[87,25814,25710],{"class":104},[14,25816,25818],{"id":25817},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[77,25820,25822],{"className":24769,"code":25821,"language":24771,"meta":82,"style":82},"lerobot-find-cameras opencv\n",[84,25823,25824],{"__ignoreMap":82},[87,25825,25826,25829],{"class":89,"line":90},[87,25827,25828],{"class":205},"lerobot-find-cameras",[87,25830,25831],{"class":949}," opencv\n",[77,25833,25835],{"className":24769,"code":25834,"language":24771,"meta":82,"style":82},"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",[84,25836,25837,25843,25849,25855,25861,25871,25877,25883,25890],{"__ignoreMap":82},[87,25838,25839,25841],{"class":89,"line":90},[87,25840,25777],{"class":205},[87,25842,25626],{"class":104},[87,25844,25845,25847],{"class":89,"line":101},[87,25846,25658],{"class":104},[87,25848,25626],{"class":104},[87,25850,25851,25853],{"class":89,"line":120},[87,25852,25736],{"class":104},[87,25854,25626],{"class":104},[87,25856,25857,25859],{"class":89,"line":222},[87,25858,25796],{"class":104},[87,25860,25626],{"class":104},[87,25862,25863,25866,25869],{"class":89,"line":234},[87,25864,25865],{"class":104},"  --robot.cameras=",[87,25867,25868],{"class":949},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[87,25870,25626],{"class":104},[87,25872,25873,25875],{"class":89,"line":256},[87,25874,25631],{"class":104},[87,25876,25626],{"class":104},[87,25878,25879,25881],{"class":89,"line":269},[87,25880,25703],{"class":104},[87,25882,25626],{"class":104},[87,25884,25885,25888],{"class":89,"line":463},[87,25886,25887],{"class":104},"  --teleop.id=my_awesome_leader_arm",[87,25889,25626],{"class":104},[87,25891,25892],{"class":89,"line":469},[87,25893,25894],{"class":104},"  --display_data=true\n",[19,25896,25897],{},"相机参数说明：",[26,25899,25900,25906,25912,25921,25931,25937],{},[29,25901,25902,25905],{},[84,25903,25904],{},"front","：相机名称。",[29,25907,25908,25911],{},[84,25909,25910],{},"type: opencv","：相机驱动类型。",[29,25913,25914,25917,25918,25510],{},[84,25915,25916],{},"index_or_path","：设备编号或设备路径（如 ",[84,25919,25920],{},"\u002Fdev\u002Fvideo4",[29,25922,25923,25926,25927,25930],{},[84,25924,25925],{},"width"," \u002F ",[84,25928,25929],{},"height","：图像分辨率。",[29,25932,25933,25936],{},[84,25934,25935],{},"fps","：采样帧率。",[29,25938,25939,25942],{},[84,25940,25941],{},"--display_data=true","：启用实时可视化。",[1006,25944,25945],{},"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":82,"searchDepth":101,"depth":101,"links":25947},[25948,25949],{"id":25766,"depth":101,"text":25767},{"id":25817,"depth":101,"text":25818},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25758,"description":1026},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25956,"title":25957,"body":25958,"description":1026,"extension":1027,"meta":26129,"navigation":1029,"path":26130,"seo":26131,"stem":26132,"__hash__":26133},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25959,"toc":26124},[25960,25964,25968,25973,25978,25981,26023,26029,26033,26081,26086,26090,26093,26101,26106,26111,26116,26121],[10,25961,25963],{"id":25962},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25965,25967],{"id":25966},"_51-生成访问令牌","5.1 生成访问令牌",[19,25969,25970],{},[39,25971],{"alt":82,"src":25972},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25974,25975],{},[39,25976],{"alt":82,"src":25977},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25979,25980],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[77,25982,25984],{"className":24769,"code":25983,"language":24771,"meta":82,"style":82},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[84,25985,25986,25999],{"__ignoreMap":82},[87,25987,25988,25991,25994,25996],{"class":89,"line":90},[87,25989,25990],{"class":171},"export",[87,25992,25993],{"class":97}," HF_TOKEN",[87,25995,946],{"class":171},[87,25997,25998],{"class":949},"\"your_huggingface_token\"\n",[87,26000,26001,26004,26007,26010,26013,26015,26018,26020],{"class":89,"line":101},[87,26002,26003],{"class":205},"hf",[87,26005,26006],{"class":949}," auth",[87,26008,26009],{"class":949}," login",[87,26011,26012],{"class":104}," --token",[87,26014,10674],{"class":949},[87,26016,26017],{"class":97},"$HF_TOKEN",[87,26019,1347],{"class":949},[87,26021,26022],{"class":104}," --add-to-git-credential\n",[19,26024,26025,26028],{},[84,26026,26027],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26030,26032],{"id":26031},"_52-验证登录","5.2 验证登录",[77,26034,26036],{"className":24769,"code":26035,"language":24771,"meta":82,"style":82},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[84,26037,26038,26068],{"__ignoreMap":82},[87,26039,26040,26043,26045,26048,26050,26052,26055,26058,26061,26064,26066],{"class":89,"line":90},[87,26041,26042],{"class":97},"HF_USER",[87,26044,946],{"class":171},[87,26046,26047],{"class":97},"$(",[87,26049,26003],{"class":205},[87,26051,26006],{"class":949},[87,26053,26054],{"class":949}," whoami",[87,26056,26057],{"class":171}," |",[87,26059,26060],{"class":205}," head",[87,26062,26063],{"class":104}," -n",[87,26065,568],{"class":104},[87,26067,1108],{"class":97},[87,26069,26070,26073,26075,26078],{"class":89,"line":101},[87,26071,26072],{"class":104},"echo",[87,26074,10674],{"class":949},[87,26076,26077],{"class":97},"$HF_USER",[87,26079,26080],{"class":949},"\"\n",[19,26082,26083],{},[39,26084],{"alt":82,"src":26085},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26087,26089],{"id":26088},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,26091,26092],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[26,26094,26095,26098],{},[29,26096,26097],{},"Dataset Repo（用于上传演示数据）",[29,26099,26100],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,26102,26103],{},[39,26104],{"alt":82,"src":26105},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,26107,26108],{},[39,26109],{"alt":82,"src":26110},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,26112,26113],{},[39,26114],{"alt":82,"src":26115},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,26117,26118],{},[39,26119],{"alt":82,"src":26120},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1006,26122,26123],{},"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":82,"searchDepth":101,"depth":101,"links":26125},[26126,26127,26128],{"id":25966,"depth":101,"text":25967},{"id":26031,"depth":101,"text":26032},{"id":26088,"depth":101,"text":26089},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25957,"description":1026},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26135,"title":26136,"body":26137,"description":1026,"extension":1027,"meta":26334,"navigation":1029,"path":26335,"seo":26336,"stem":26337,"__hash__":26338},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26138,"toc":26329},[26139,26143,26147,26243,26251,26256,26260,26276,26279,26283,26326],[10,26140,26142],{"id":26141},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26144,26146],{"id":26145},"_61-录制示教数据","6.1 录制示教数据",[77,26148,26150],{"className":24769,"code":26149,"language":24771,"meta":82,"style":82},"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",[84,26151,26152,26159,26165,26171,26177,26186,26192,26198,26204,26211,26221,26228,26238],{"__ignoreMap":82},[87,26153,26154,26157],{"class":89,"line":90},[87,26155,26156],{"class":205},"lerobot-record",[87,26158,25626],{"class":104},[87,26160,26161,26163],{"class":89,"line":101},[87,26162,25658],{"class":104},[87,26164,25626],{"class":104},[87,26166,26167,26169],{"class":89,"line":120},[87,26168,25736],{"class":104},[87,26170,25626],{"class":104},[87,26172,26173,26175],{"class":89,"line":222},[87,26174,25796],{"class":104},[87,26176,25626],{"class":104},[87,26178,26179,26181,26184],{"class":89,"line":234},[87,26180,25865],{"class":104},[87,26182,26183],{"class":949},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[87,26185,25626],{"class":104},[87,26187,26188,26190],{"class":89,"line":256},[87,26189,25631],{"class":104},[87,26191,25626],{"class":104},[87,26193,26194,26196],{"class":89,"line":269},[87,26195,25703],{"class":104},[87,26197,25626],{"class":104},[87,26199,26200,26202],{"class":89,"line":463},[87,26201,25887],{"class":104},[87,26203,25626],{"class":104},[87,26205,26206,26209],{"class":89,"line":469},[87,26207,26208],{"class":104},"  --display_data=true",[87,26210,25626],{"class":104},[87,26212,26213,26216,26219],{"class":89,"line":2287},[87,26214,26215],{"class":104},"  --dataset.repo_id=",[87,26217,26218],{"class":949},"\"Embodied-AI-6\u002Fso101_test\"",[87,26220,25626],{"class":104},[87,26222,26223,26226],{"class":89,"line":2568},[87,26224,26225],{"class":104},"  --dataset.num_episodes=10",[87,26227,25626],{"class":104},[87,26229,26230,26233,26236],{"class":89,"line":2573},[87,26231,26232],{"class":104},"  --dataset.single_task=",[87,26234,26235],{"class":949},"\"Grab the green cube\"",[87,26237,25626],{"class":104},[87,26239,26240],{"class":89,"line":2579},[87,26241,26242],{"class":104},"  --resume=true\n",[26,26244,26245],{},[29,26246,26247,26250],{},[84,26248,26249],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,26252,26253],{},[39,26254],{"alt":82,"src":26255},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,26257,26259],{"id":26258},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[77,26261,26263],{"className":24769,"code":26262,"language":24771,"meta":82,"style":82},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[84,26264,26265],{"__ignoreMap":82},[87,26266,26267,26270,26273],{"class":89,"line":90},[87,26268,26269],{"class":205},"rm",[87,26271,26272],{"class":104}," -rf",[87,26274,26275],{"class":949}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,26277,26278],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,26280,26282],{"id":26281},"_63-回放指定-episode","6.3 回放指定 episode",[77,26284,26286],{"className":24769,"code":26285,"language":24771,"meta":82,"style":82},"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",[84,26287,26288,26295,26301,26307,26313,26321],{"__ignoreMap":82},[87,26289,26290,26293],{"class":89,"line":90},[87,26291,26292],{"class":205},"lerobot-replay",[87,26294,25626],{"class":104},[87,26296,26297,26299],{"class":89,"line":101},[87,26298,25658],{"class":104},[87,26300,25626],{"class":104},[87,26302,26303,26305],{"class":89,"line":120},[87,26304,25736],{"class":104},[87,26306,25626],{"class":104},[87,26308,26309,26311],{"class":89,"line":222},[87,26310,25796],{"class":104},[87,26312,25626],{"class":104},[87,26314,26315,26317,26319],{"class":89,"line":234},[87,26316,26215],{"class":104},[87,26318,26218],{"class":949},[87,26320,25626],{"class":104},[87,26322,26323],{"class":89,"line":256},[87,26324,26325],{"class":104},"  --dataset.episode=0\n",[1006,26327,26328],{},"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":82,"searchDepth":101,"depth":101,"links":26330},[26331,26332,26333],{"id":26145,"depth":101,"text":26146},{"id":26258,"depth":101,"text":26259},{"id":26281,"depth":101,"text":26282},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26136,"description":1026},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26340,"title":26341,"body":26342,"description":1026,"extension":1027,"meta":26470,"navigation":1029,"path":26471,"seo":26472,"stem":26473,"__hash__":26474},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26343,"toc":26468},[26344,26348,26411,26414,26461,26466],[10,26345,26347],{"id":26346},"_7-act-模型训练","7. ACT 模型训练",[77,26349,26351],{"className":24769,"code":26350,"language":24771,"meta":82,"style":82},"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",[84,26352,26353,26360,26368,26375,26382,26389,26396,26403],{"__ignoreMap":82},[87,26354,26355,26358],{"class":89,"line":90},[87,26356,26357],{"class":205},"lerobot-train",[87,26359,25626],{"class":104},[87,26361,26362,26364,26366],{"class":89,"line":101},[87,26363,26215],{"class":104},[87,26365,26218],{"class":949},[87,26367,25626],{"class":104},[87,26369,26370,26373],{"class":89,"line":120},[87,26371,26372],{"class":104},"  --policy.type=act",[87,26374,25626],{"class":104},[87,26376,26377,26380],{"class":89,"line":222},[87,26378,26379],{"class":104},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[87,26381,25626],{"class":104},[87,26383,26384,26387],{"class":89,"line":234},[87,26385,26386],{"class":104},"  --job_name=act_so101_test",[87,26388,25626],{"class":104},[87,26390,26391,26394],{"class":89,"line":256},[87,26392,26393],{"class":104},"  --policy.device=cuda",[87,26395,25626],{"class":104},[87,26397,26398,26401],{"class":89,"line":269},[87,26399,26400],{"class":104},"  --wandb.enable=false",[87,26402,25626],{"class":104},[87,26404,26405,26408],{"class":89,"line":463},[87,26406,26407],{"class":104},"  --policy.repo_id=",[87,26409,26410],{"class":949},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,26412,26413],{},"参数说明：",[26,26415,26416,26422,26428,26434,26440,26449,26455],{},[29,26417,26418,26421],{},[84,26419,26420],{},"--dataset.repo_id","：训练数据集仓库。",[29,26423,26424,26427],{},[84,26425,26426],{},"--policy.type=act","：策略模型类型为 ACT。",[29,26429,26430,26433],{},[84,26431,26432],{},"--output_dir","：本地训练输出目录。",[29,26435,26436,26439],{},[84,26437,26438],{},"--job_name","：训练任务名称。",[29,26441,26442,26445,26446,25510],{},[84,26443,26444],{},"--policy.device","：训练设备（如 ",[84,26447,26448],{},"cuda",[29,26450,26451,26454],{},[84,26452,26453],{},"--wandb.enable","：是否启用 WandB 可视化。",[29,26456,26457,26460],{},[84,26458,26459],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,26462,26463],{},[39,26464],{"alt":82,"src":26465},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1006,26467,26328],{},{"title":82,"searchDepth":101,"depth":101,"links":26469},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26341,"description":1026},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26476,"title":26477,"body":26478,"description":1026,"extension":1027,"meta":26565,"navigation":1029,"path":26566,"seo":26567,"stem":26568,"__hash__":26569},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26479,"toc":26563},[26480,26483,26486,26553,26561],[10,26481,26477],{"id":26482},"_8-策略部署与自动采集",[19,26484,26485],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[77,26487,26489],{"className":24769,"code":26488,"language":24771,"meta":82,"style":82},"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",[84,26490,26491,26497,26503,26509,26517,26523,26530,26538,26546],{"__ignoreMap":82},[87,26492,26493,26495],{"class":89,"line":90},[87,26494,26156],{"class":205},[87,26496,25626],{"class":104},[87,26498,26499,26501],{"class":89,"line":101},[87,26500,25658],{"class":104},[87,26502,25626],{"class":104},[87,26504,26505,26507],{"class":89,"line":120},[87,26506,25736],{"class":104},[87,26508,25626],{"class":104},[87,26510,26511,26513,26515],{"class":89,"line":222},[87,26512,25865],{"class":104},[87,26514,26183],{"class":949},[87,26516,25626],{"class":104},[87,26518,26519,26521],{"class":89,"line":234},[87,26520,25796],{"class":104},[87,26522,25626],{"class":104},[87,26524,26525,26528],{"class":89,"line":256},[87,26526,26527],{"class":104},"  --display_data=false",[87,26529,25626],{"class":104},[87,26531,26532,26534,26536],{"class":89,"line":269},[87,26533,26215],{"class":104},[87,26535,26218],{"class":949},[87,26537,25626],{"class":104},[87,26539,26540,26542,26544],{"class":89,"line":463},[87,26541,26232],{"class":104},[87,26543,26235],{"class":949},[87,26545,25626],{"class":104},[87,26547,26548,26551],{"class":89,"line":469},[87,26549,26550],{"class":104},"  --policy.path=",[87,26552,26410],{"class":949},[26,26554,26555],{},[29,26556,26557,26560],{},[84,26558,26559],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1006,26562,26328],{},{"title":82,"searchDepth":101,"depth":101,"links":26564},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26477,"description":1026},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26571,"title":26572,"body":26573,"description":1026,"extension":1027,"meta":26602,"navigation":1029,"path":26603,"seo":26604,"stem":26605,"__hash__":26606},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26574,"toc":26600},[26575,26579,26582,26588,26591,26597],[10,26576,26578],{"id":26577},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,26580,26581],{},"项目地址：",[19,26583,26584],{},[1334,26585,26586],{"href":26586,"rel":26587},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24812],[19,26589,26590],{},"参考教程：",[19,26592,26593],{},[1334,26594,26595],{"href":26595,"rel":26596},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24812],[19,26598,26599],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":82,"searchDepth":101,"depth":101,"links":26601},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26572,"description":1026},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26608,"title":26609,"body":26610,"description":26614,"extension":1027,"meta":26615,"navigation":1029,"path":26616,"seo":26617,"stem":26618,"__hash__":26619},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26611,"toc":26612},[],{"title":82,"searchDepth":101,"depth":101,"links":26613},[],"act复现",{"category":24325},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26609,"description":26614},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26621,"title":26622,"body":26623,"description":82,"extension":1027,"meta":26925,"navigation":1029,"path":26926,"seo":26927,"stem":26928,"__hash__":26929},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26624,"toc":26917},[26625,26628,26632,26642,26649,26656,26659,26666,26669,26672,26676,26688,26692,26738,26741,26744,26747,26750,26753,26757,26795,26801,26805,26859,26864,26867,26870,26875,26878,26883,26886,26889,26893,26896,26899,26903],[10,26626,26622],{"id":26627},"_1简介",[44,26629,26631],{"id":26630},"_11什么是-docker","1.1什么是 Docker？",[19,26633,26634,26635,26638,26639],{},"Docker 是一个开源的 ",[57,26636,26637],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[57,26640,26641],{},"一次构建，到处运行。",[19,26643,26644,26645,26648],{},"“ ",[57,26646,26647],{},"一次构建，到处运行"," ”也就是说：",[1055,26650,26651],{},[29,26652,26653],{},[57,26654,26655],{},"之前：",[19,26657,26658],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[1055,26660,26661],{},[29,26662,26663],{},[57,26664,26665],{},"使用docker后：",[19,26667,26668],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,26670,26671],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[44,26673,26675],{"id":26674},"_12它是怎么工作的","1.2.它是怎么工作的？",[26,26677,26678,26681],{},[29,26679,26680],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[29,26682,26683,26684,26687],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[57,26685,26686],{},"无论在哪运行都一样稳定"," 。",[44,26689,26691],{"id":26690},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[1235,26693,26694,26704],{},[1238,26695,26696],{},[1241,26697,26698,26701],{},[1244,26699,26700],{"align":24683},"概念",[1244,26702,26703],{"align":24683},"解释",[1281,26705,26706,26714,26722,26730],{},[1241,26707,26708,26711],{},[1286,26709,26710],{"align":24683},"镜像",[1286,26712,26713],{"align":24683},"Image，运行容器的模板，像是一个应用快照",[1241,26715,26716,26719],{},[1286,26717,26718],{"align":24683},"容器",[1286,26720,26721],{"align":24683},"Container，运行中的镜像实例，有自己的文件系统、网络等",[1241,26723,26724,26727],{},[1286,26725,26726],{"align":24683},"Dockerfile",[1286,26728,26729],{"align":24683},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[1241,26731,26732,26735],{},[1286,26733,26734],{"align":24683},"仓库",[1286,26736,26737],{"align":24683},"Registry，存放镜像的地方，比如 Docker Hub",[19,26739,26740],{},"抽象化理解:",[19,26742,26743],{},"Docker镜像≈C++类",[19,26745,26746],{},"Docker容器≈C++类实例(即对象)",[19,26748,26749],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,26751,26752],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[44,26754,26756],{"id":26755},"_14类比理解","1.4.类比理解",[1235,26758,26759,26769],{},[1238,26760,26761],{},[1241,26762,26763,26766],{},[1244,26764,26765],{"align":24683},"传统部署",[1244,26767,26768],{"align":24683},"Docker部署",[1281,26770,26771,26779,26787],{},[1241,26772,26773,26776],{},[1286,26774,26775],{"align":24683},"手动安装依赖、调试版本不一致问题",[1286,26777,26778],{"align":24683},"一次打包环境和代码",[1241,26780,26781,26784],{},[1286,26782,26783],{"align":24683},"程序“裸奔”跑在系统上",[1286,26785,26786],{"align":24683},"程序“穿着容器”隔离运行",[1241,26788,26789,26792],{},[1286,26790,26791],{"align":24683},"容易“在我电脑上能跑”",[1286,26793,26794],{"align":24683},"保证“无论在哪都能跑”",[19,26796,26797,26798],{},"就像快递包裹： ",[57,26799,26800],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[44,26802,26804],{"id":26803},"_15docker-的核心优势","1.5.Docker 的核心优势",[1235,26806,26807,26817],{},[1238,26808,26809],{},[1241,26810,26811,26814],{},[1244,26812,26813],{"align":24683},"优势",[1244,26815,26816],{"align":24683},"说明",[1281,26818,26819,26827,26835,26843,26851],{},[1241,26820,26821,26824],{},[1286,26822,26823],{"align":24683},"轻量级",[1286,26825,26826],{"align":24683},"基于系统内核共享，启动速度快，占资源少",[1241,26828,26829,26832],{},[1286,26830,26831],{"align":24683},"跨平台",[1286,26833,26834],{"align":24683},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[1241,26836,26837,26840],{},[1286,26838,26839],{"align":24683},"易于迁移部署",[1286,26841,26842],{"align":24683},"应用和环境一起封装，不怕依赖不一致",[1241,26844,26845,26848],{},[1286,26846,26847],{"align":24683},"易于版本控制",[1286,26849,26850],{"align":24683},"镜像版本可控，支持回滚",[1241,26852,26853,26856],{},[1286,26854,26855],{"align":24683},"生态丰富",[1286,26857,26858],{"align":24683},"Docker Hub 上有成千上万的现成镜像可用",[1055,26860,26861],{},[29,26862,26863],{},"在Linux上可以几乎实现无性能损失。",[19,26865,26866],{},"docker里的发行版和本机共用Linux内核。",[19,26868,26869],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[1055,26871,26872],{},[29,26873,26874],{},"可以快速部署在绝大多数Linux发行版",[19,26876,26877],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[1055,26879,26880],{},[29,26881,26882],{},"配置环境简单",[19,26884,26885],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,26887,26888],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[1055,26890,26891],{},[29,26892,26855],{},[19,26894,26895],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26897,26898],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[44,26900,26902],{"id":26901},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[26,26904,26905,26908,26911,26914],{},[29,26906,26907],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[29,26909,26910],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[29,26912,26913],{},"微服务架构：每个服务一个容器，灵活组合",[29,26915,26916],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":82,"searchDepth":101,"depth":101,"links":26918},[26919,26920,26921,26922,26923,26924],{"id":26630,"depth":120,"text":26631},{"id":26674,"depth":120,"text":26675},{"id":26690,"depth":120,"text":26691},{"id":26755,"depth":120,"text":26756},{"id":26803,"depth":120,"text":26804},{"id":26901,"depth":120,"text":26902},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26622,"description":82},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26931,"title":26932,"body":26933,"description":82,"extension":1027,"meta":27666,"navigation":1029,"path":27667,"seo":27668,"stem":27669,"__hash__":27670},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26934,"toc":27661},[26935,26938,26942,26945,26948,26954,26960,26964,26973,26976,27033,27036,27087,27090,27173,27176,27213,27217,27228,27241,27248,27251,27331,27334,27384,27387,27410,27414,27421,27424,27440,27446,27449,27465,27471,27474,27490,27504,27510,27530,27536,27539,27551,27557,27560,27574,27580,27583,27603,27608,27611,27614,27618,27621,27624,27627,27634,27637,27640,27643,27648,27653,27658],[10,26936,26932],{"id":26937},"_2安装docker",[44,26939,26941],{"id":26940},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26943,26944],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26946,26947],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26949,26950],{},[1334,26951,26952],{"href":26952,"rel":26953},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24812],[19,26955,26956],{},[1334,26957,26958],{"href":26958,"rel":26959},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24812],[49,26961,26963],{"id":26962},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26965,26966,26967,26972],{},"以下内容根据 ",[1334,26968,26971],{"href":26969,"rel":26970},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24812],"官方文档"," 修改而来。",[19,26974,26975],{},"如果你过去安装过 docker，先删掉：",[77,26977,26979],{"className":24769,"code":26978,"language":24771,"meta":82,"style":82},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[84,26980,26981],{"__ignoreMap":82},[87,26982,26983,26985,26988,26991,26994,26997,27000,27003,27006,27009,27012,27015,27018,27021,27024,27027,27030],{"class":89,"line":90},[87,26984,3979],{"class":171},[87,26986,26987],{"class":97}," pkg ",[87,26989,26990],{"class":171},"in",[87,26992,26993],{"class":949}," docker.io",[87,26995,26996],{"class":949}," docker-doc",[87,26998,26999],{"class":949}," docker-compose",[87,27001,27002],{"class":949}," docker-compose-v2",[87,27004,27005],{"class":949}," podman-docker",[87,27007,27008],{"class":949}," containerd",[87,27010,27011],{"class":949}," runc",[87,27013,27014],{"class":97},"; ",[87,27016,27017],{"class":171},"do",[87,27019,27020],{"class":205}," sudo",[87,27022,27023],{"class":949}," apt-get",[87,27025,27026],{"class":949}," remove",[87,27028,27029],{"class":97}," $pkg; ",[87,27031,27032],{"class":171},"done\n",[19,27034,27035],{},"首先安装依赖和GPG：",[77,27037,27041],{"className":27038,"code":27039,"language":27040,"meta":82,"style":82},"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",[84,27042,27043,27048,27053,27058,27063,27068,27073,27077,27082],{"__ignoreMap":82},[87,27044,27045],{"class":89,"line":90},[87,27046,27047],{},"# Add Docker's official GPG key:\n",[87,27049,27050],{"class":89,"line":101},[87,27051,27052],{},"sudo apt-get update\n",[87,27054,27055],{"class":89,"line":120},[87,27056,27057],{},"sudo apt-get install ca-certificates curl\n",[87,27059,27060],{"class":89,"line":222},[87,27061,27062],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[87,27064,27065],{"class":89,"line":234},[87,27066,27067],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[87,27069,27070],{"class":89,"line":256},[87,27071,27072],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[87,27074,27075],{"class":89,"line":269},[87,27076,3355],{"emptyLinePlaceholder":1029},[87,27078,27079],{"class":89,"line":463},[87,27080,27081],{},"# 如果上面这行报错就弄下面这行\n",[87,27083,27084],{"class":89,"line":469},[87,27085,27086],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,27088,27089],{},"信任 Docker 的 GPG 公钥并添加仓库：",[77,27091,27093],{"className":24769,"code":27092,"language":24771,"meta":82,"style":82},"# 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",[84,27094,27095,27100,27106,27123,27156],{"__ignoreMap":82},[87,27096,27097],{"class":89,"line":90},[87,27098,27099],{"class":199},"# Add the repository to Apt sources:\n",[87,27101,27102,27104],{"class":89,"line":101},[87,27103,26072],{"class":104},[87,27105,25626],{"class":104},[87,27107,27108,27111,27114,27117,27120],{"class":89,"line":120},[87,27109,27110],{"class":949},"  \"deb [arch=$(",[87,27112,27113],{"class":205},"dpkg",[87,27115,27116],{"class":104}," --print-architecture",[87,27118,27119],{"class":949},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[87,27121,27122],{"class":104},"\\\n",[87,27124,27125,27128,27130,27132,27135,27138,27140,27142,27145,27147,27149,27152,27154],{"class":89,"line":222},[87,27126,27127],{"class":949},"  \"",[87,27129,26047],{"class":97},[87,27131,1651],{"class":104},[87,27133,27134],{"class":949}," \u002Fetc\u002Fos-release",[87,27136,27137],{"class":97}," && ",[87,27139,26072],{"class":104},[87,27141,10674],{"class":949},[87,27143,27144],{"class":97},"$VERSION_CODENAME",[87,27146,1347],{"class":949},[87,27148,1524],{"class":97},[87,27150,27151],{"class":949},"\" stable\"",[87,27153,26057],{"class":171},[87,27155,25626],{"class":104},[87,27157,27158,27161,27164,27167,27170],{"class":89,"line":234},[87,27159,27160],{"class":205},"  sudo",[87,27162,27163],{"class":949}," tee",[87,27165,27166],{"class":949}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[87,27168,27169],{"class":171}," >",[87,27171,27172],{"class":949}," \u002Fdev\u002Fnull\n",[19,27174,27175],{},"最后安装",[77,27177,27179],{"className":24769,"code":27178,"language":24771,"meta":82,"style":82},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[84,27180,27181,27190],{"__ignoreMap":82},[87,27182,27183,27185,27187],{"class":89,"line":90},[87,27184,25524],{"class":205},[87,27186,27023],{"class":949},[87,27188,27189],{"class":949}," update\n",[87,27191,27192,27194,27196,27198,27201,27204,27207,27210],{"class":89,"line":101},[87,27193,25524],{"class":205},[87,27195,27023],{"class":949},[87,27197,24781],{"class":949},[87,27199,27200],{"class":949}," docker-ce",[87,27202,27203],{"class":949}," docker-ce-cli",[87,27205,27206],{"class":949}," containerd.io",[87,27208,27209],{"class":949}," docker-buildx-plugin",[87,27211,27212],{"class":949}," docker-compose-plugin\n",[49,27214,27216],{"id":27215},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,27218,27219,27220,27223,27224,27227],{},"查看自己自己包管理工具版本（dnf是 ",[57,27221,27222],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[57,27225,27226],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[77,27229,27231],{"className":24769,"code":27230,"language":24771,"meta":82,"style":82},"dnf --version\n",[84,27232,27233],{"__ignoreMap":82},[87,27234,27235,27238],{"class":89,"line":90},[87,27236,27237],{"class":205},"dnf",[87,27239,27240],{"class":104}," --version\n",[19,27242,26966,27243,27247],{},[1334,27244,26971],{"href":27245,"rel":27246},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24812]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,27249,27250],{},"如果你之前安装过 docker，请先删掉",[77,27252,27254],{"className":24769,"code":27253,"language":24771,"meta":82,"style":82},"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",[84,27255,27256,27270,27277,27284,27291,27298,27305,27312,27319,27326],{"__ignoreMap":82},[87,27257,27258,27260,27263,27265,27268],{"class":89,"line":90},[87,27259,25524],{"class":205},[87,27261,27262],{"class":949}," dnf",[87,27264,27026],{"class":949},[87,27266,27267],{"class":949}," docker",[87,27269,25626],{"class":104},[87,27271,27272,27275],{"class":89,"line":101},[87,27273,27274],{"class":949},"                  docker-client",[87,27276,25626],{"class":104},[87,27278,27279,27282],{"class":89,"line":120},[87,27280,27281],{"class":949},"                  docker-client-latest",[87,27283,25626],{"class":104},[87,27285,27286,27289],{"class":89,"line":222},[87,27287,27288],{"class":949},"                  docker-common",[87,27290,25626],{"class":104},[87,27292,27293,27296],{"class":89,"line":234},[87,27294,27295],{"class":949},"                  docker-latest",[87,27297,25626],{"class":104},[87,27299,27300,27303],{"class":89,"line":256},[87,27301,27302],{"class":949},"                  docker-latest-logrotate",[87,27304,25626],{"class":104},[87,27306,27307,27310],{"class":89,"line":269},[87,27308,27309],{"class":949},"                  docker-logrotate",[87,27311,25626],{"class":104},[87,27313,27314,27317],{"class":89,"line":463},[87,27315,27316],{"class":949},"                  docker-selinux",[87,27318,25626],{"class":104},[87,27320,27321,27324],{"class":89,"line":469},[87,27322,27323],{"class":949},"                  docker-engine-selinux",[87,27325,25626],{"class":104},[87,27327,27328],{"class":89,"line":2287},[87,27329,27330],{"class":949},"                  docker-engine\n",[19,27332,27333],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[77,27335,27337],{"className":24769,"code":27336,"language":24771,"meta":82,"style":82},"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",[84,27338,27339,27353,27368],{"__ignoreMap":82},[87,27340,27341,27343,27345,27348,27350],{"class":89,"line":90},[87,27342,25524],{"class":205},[87,27344,27262],{"class":949},[87,27346,27347],{"class":104}," -y",[87,27349,24781],{"class":949},[87,27351,27352],{"class":949}," dnf-plugins-core\n",[87,27354,27355,27357,27359,27362,27365],{"class":89,"line":101},[87,27356,25524],{"class":205},[87,27358,27262],{"class":949},[87,27360,27361],{"class":949}," config-manager",[87,27363,27364],{"class":949}," addrepo",[87,27366,27367],{"class":104}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[87,27369,27370,27372,27375,27378,27381],{"class":89,"line":120},[87,27371,25524],{"class":205},[87,27373,27374],{"class":949}," sed",[87,27376,27377],{"class":104}," -i",[87,27379,27380],{"class":949}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[87,27382,27383],{"class":949}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,27385,27386],{},"最后安装：",[77,27388,27390],{"className":24769,"code":27389,"language":24771,"meta":82,"style":82},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[84,27391,27392],{"__ignoreMap":82},[87,27393,27394,27396,27398,27400,27402,27404,27406,27408],{"class":89,"line":90},[87,27395,25524],{"class":205},[87,27397,27262],{"class":949},[87,27399,24781],{"class":949},[87,27401,27200],{"class":949},[87,27403,27203],{"class":949},[87,27405,27206],{"class":949},[87,27407,27209],{"class":949},[87,27409,27212],{"class":949},[44,27411,27413],{"id":27412},"_22配置环境","2.2.配置环境",[49,27415,27417,27420],{"id":27416},"_221检查-docker-服务状态",[57,27418,27419],{},"2.2.1.检查 Docker 服务状态"," ：",[19,27422,27423],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[77,27425,27427],{"className":24769,"code":27426,"language":24771,"meta":82,"style":82},"systemctl status docker\n",[84,27428,27429],{"__ignoreMap":82},[87,27430,27431,27434,27437],{"class":89,"line":90},[87,27432,27433],{"class":205},"systemctl",[87,27435,27436],{"class":949}," status",[87,27438,27439],{"class":949}," docker\n",[49,27441,27443,27420],{"id":27442},"_222启动-docker-服务",[57,27444,27445],{},"2.2.2.启动 Docker 服务",[19,27447,27448],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[77,27450,27452],{"className":24769,"code":27451,"language":24771,"meta":82,"style":82},"sudo systemctl start docker\n",[84,27453,27454],{"__ignoreMap":82},[87,27455,27456,27458,27461,27463],{"class":89,"line":90},[87,27457,25524],{"class":205},[87,27459,27460],{"class":949}," systemctl",[87,27462,5137],{"class":949},[87,27464,27439],{"class":949},[49,27466,27468,27420],{"id":27467},"_223设置-docker-开机自启",[57,27469,27470],{},"2.2.3.设置 Docker 开机自启",[19,27472,27473],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[77,27475,27477],{"className":24769,"code":27476,"language":24771,"meta":82,"style":82},"sudo systemctl enable docker\n",[84,27478,27479],{"__ignoreMap":82},[87,27480,27481,27483,27485,27488],{"class":89,"line":90},[87,27482,25524],{"class":205},[87,27484,27460],{"class":949},[87,27486,27487],{"class":949}," enable",[87,27489,27439],{"class":949},[49,27491,27493,14745,27496,14745,27501,27420],{"id":27492},"_224将用户添加到-docker-组",[57,27494,27495],{},"2.2.4.将用户添加到",[57,27497,27498],{},[84,27499,27500],{},"docker",[57,27502,27503],{},"组",[19,27505,27506,27507,27509],{},"使用以下命令将当前用户添加到 ",[84,27508,27500],{}," 组：",[77,27511,27513],{"className":24769,"code":27512,"language":24771,"meta":82,"style":82},"sudo usermod -aG docker $USER\n",[84,27514,27515],{"__ignoreMap":82},[87,27516,27517,27519,27522,27525,27527],{"class":89,"line":90},[87,27518,25524],{"class":205},[87,27520,27521],{"class":949}," usermod",[87,27523,27524],{"class":104}," -aG",[87,27526,27267],{"class":949},[87,27528,27529],{"class":97}," $USER\n",[49,27531,27533,27420],{"id":27532},"_225退出并重新登录",[57,27534,27535],{},"2.2.5.退出并重新登录",[19,27537,27538],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[77,27540,27542],{"className":24769,"code":27541,"language":24771,"meta":82,"style":82},"newgrp docker\n",[84,27543,27544],{"__ignoreMap":82},[87,27545,27546,27549],{"class":89,"line":90},[87,27547,27548],{"class":205},"newgrp",[87,27550,27439],{"class":949},[49,27552,27554,27420],{"id":27553},"_226重新启动-docker-服务如果需要",[57,27555,27556],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,27558,27559],{},"确保 Docker 服务正在运行，可以使用以下命令：",[77,27561,27562],{"className":24769,"code":27451,"language":24771,"meta":82,"style":82},[84,27563,27564],{"__ignoreMap":82},[87,27565,27566,27568,27570,27572],{"class":89,"line":90},[87,27567,25524],{"class":205},[87,27569,27460],{"class":949},[87,27571,5137],{"class":949},[87,27573,27439],{"class":949},[49,27575,27577,27420],{"id":27576},"_227重启电脑后检查-docker-服务状态",[57,27578,27579],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,27581,27582],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[77,27584,27586],{"className":24769,"code":27585,"language":24771,"meta":82,"style":82},"sudo reboot\nsystemctl status docker\n",[84,27587,27588,27595],{"__ignoreMap":82},[87,27589,27590,27592],{"class":89,"line":90},[87,27591,25524],{"class":205},[87,27593,27594],{"class":949}," reboot\n",[87,27596,27597,27599,27601],{"class":89,"line":101},[87,27598,27433],{"class":205},[87,27600,27436],{"class":949},[87,27602,27439],{"class":949},[19,27604,27605],{},[39,27606],{"alt":82,"src":27607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,27609,27610],{},"第三行显示enabled说明开机自启动成功",[19,27612,27613],{},"按q退出",[44,27615,27617],{"id":27616},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,27619,27620],{},"优先使用linux来使用docker是比较好的",[19,27622,27623],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,27625,27626],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,27628,27629,27630],{},"官方下载安装:",[1334,27631,27632],{"href":27632,"rel":27633},"https:\u002F\u002Fwww.docker.com\u002F",[24812],[19,27635,27636],{},"Windows的Docker显卡直通与USB直通:",[19,27638,27639],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,27641,27642],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,27644,27645],{},[39,27646],{"alt":82,"src":27647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,27649,27650],{},[39,27651],{"alt":82,"src":27652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,27654,27655],{},[39,27656],{"alt":82,"src":27657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1006,27659,27660],{},"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":82,"searchDepth":101,"depth":101,"links":27662},[27663,27664,27665],{"id":26940,"depth":120,"text":26941},{"id":27412,"depth":120,"text":27413},{"id":27616,"depth":120,"text":27617},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26932,"description":82},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27672,"title":27673,"body":27674,"description":27681,"extension":1027,"meta":28374,"navigation":1029,"path":28375,"seo":28376,"stem":28377,"__hash__":28378},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27675,"toc":28368},[27676,27679,27682,27686,27691,27696,27699,27727,27732,27741,27744,27749,27753,27760,27765,27771,27775,27778,27782,27787,27879,27884,27902,27907,27928,27933,27949,27953,27958,27987,27992,28038,28043,28087,28095,28112,28117,28133,28138,28152,28155,28158,28161,28164,28193,28196,28201,28205,28208,28211,28217,28220,28223,28226,28288,28295,28300,28303,28321,28325,28328,28345,28348,28351,28365],[10,27677,27673],{"id":27678},"_3docker直通",[19,27680,27681],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[44,27683,27685],{"id":27684},"_31usb直通","3.1.USB直通",[19,27687,27688],{},[39,27689],{"alt":82,"src":27690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[1055,27692,27693],{},[29,27694,27695],{},"方法一(不是很推荐新手)：",[19,27697,27698],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[77,27700,27702],{"className":24769,"code":27701,"language":24771,"meta":82,"style":82},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[84,27703,27704,27712,27717],{"__ignoreMap":82},[87,27705,27706,27709],{"class":89,"line":90},[87,27707,27708],{"class":205},"ls",[87,27710,27711],{"class":949}," \u002Fdev\n",[87,27713,27714],{"class":89,"line":101},[87,27715,27716],{"class":199},"#例如\n",[87,27718,27719,27722,27724],{"class":89,"line":120},[87,27720,27721],{"class":97},"--device",[87,27723,946],{"class":171},[87,27725,27726],{"class":949},"\u002Fdev\u002Ftty_USB0\n",[1055,27728,27729],{"start":101},[29,27730,27731],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[77,27733,27735],{"className":24769,"code":27734,"language":24771,"meta":82,"style":82},"--privileged\n",[84,27736,27737],{"__ignoreMap":82},[87,27738,27739],{"class":89,"line":90},[87,27740,27734],{"class":205},[19,27742,27743],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,27745,27746],{},[39,27747],{"alt":82,"src":27748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[44,27750,27752],{"id":27751},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,27754,27755,27756,27759],{},"NVIDIA Container Toolkit使用户 ",[57,27757,27758],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,27761,27762],{},[39,27763],{"alt":82,"src":27764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,27766,27767],{},[1334,27768,27769],{"href":27769,"rel":27770},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24812],[49,27772,27774],{"id":27773},"_321安装","3.2.1.安装",[19,27776,27777],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23857,27779,27781],{"id":27780},"_3211ubuntu","3.2.1.1.Ubuntu",[1055,27783,27784],{},[29,27785,27786],{},"配置存储库 并更新",[77,27788,27790],{"className":24769,"code":27789,"language":24771,"meta":82,"style":82},"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",[84,27791,27792,27821,27841,27853,27865,27871],{"__ignoreMap":82},[87,27793,27794,27797,27800,27803,27805,27807,27810,27813,27816,27819],{"class":89,"line":90},[87,27795,27796],{"class":205},"curl",[87,27798,27799],{"class":104}," -fsSL",[87,27801,27802],{"class":949}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[87,27804,26057],{"class":171},[87,27806,27020],{"class":205},[87,27808,27809],{"class":949}," gpg",[87,27811,27812],{"class":104}," --dearmor",[87,27814,27815],{"class":104}," -o",[87,27817,27818],{"class":949}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[87,27820,25626],{"class":104},[87,27822,27823,27826,27828,27831,27834,27837,27839],{"class":89,"line":101},[87,27824,27825],{"class":97},"  && ",[87,27827,27796],{"class":205},[87,27829,27830],{"class":104}," -s",[87,27832,27833],{"class":104}," -L",[87,27835,27836],{"class":949}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[87,27838,26057],{"class":171},[87,27840,25626],{"class":104},[87,27842,27843,27846,27849,27851],{"class":89,"line":120},[87,27844,27845],{"class":205},"    sed",[87,27847,27848],{"class":949}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[87,27850,26057],{"class":171},[87,27852,25626],{"class":104},[87,27854,27855,27858,27860,27863],{"class":89,"line":222},[87,27856,27857],{"class":205},"    sudo",[87,27859,27163],{"class":949},[87,27861,27862],{"class":949}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[87,27864,25626],{"class":104},[87,27866,27867,27869],{"class":89,"line":234},[87,27868,27825],{"class":97},[87,27870,27122],{"class":104},[87,27872,27873,27875,27877],{"class":89,"line":256},[87,27874,27857],{"class":205},[87,27876,27023],{"class":949},[87,27878,27189],{"class":949},[1055,27880,27881],{"start":101},[29,27882,27883],{},"安装nvidia-docker2",[77,27885,27887],{"className":24769,"code":27886,"language":24771,"meta":82,"style":82},"sudo apt-get install -y nvidia-docker2\n",[84,27888,27889],{"__ignoreMap":82},[87,27890,27891,27893,27895,27897,27899],{"class":89,"line":90},[87,27892,25524],{"class":205},[87,27894,27023],{"class":949},[87,27896,24781],{"class":949},[87,27898,27347],{"class":104},[87,27900,27901],{"class":949}," nvidia-docker2\n",[1055,27903,27904],{"start":120},[29,27905,27906],{},"使用nvidia-ctk命令配置container runtime",[77,27908,27910],{"className":24769,"code":27909,"language":24771,"meta":82,"style":82},"sudo nvidia-ctk runtime configure --runtime=docker\n",[84,27911,27912],{"__ignoreMap":82},[87,27913,27914,27916,27919,27922,27925],{"class":89,"line":90},[87,27915,25524],{"class":205},[87,27917,27918],{"class":949}," nvidia-ctk",[87,27920,27921],{"class":949}," runtime",[87,27923,27924],{"class":949}," configure",[87,27926,27927],{"class":104}," --runtime=docker\n",[1055,27929,27930],{"start":222},[29,27931,27932],{},"重启docker服务:",[77,27934,27936],{"className":24769,"code":27935,"language":24771,"meta":82,"style":82},"sudo systemctl restart docker\n",[84,27937,27938],{"__ignoreMap":82},[87,27939,27940,27942,27944,27947],{"class":89,"line":90},[87,27941,25524],{"class":205},[87,27943,27460],{"class":949},[87,27945,27946],{"class":949}," restart",[87,27948,27439],{"class":949},[23857,27950,27952],{"id":27951},"_3212fedora","3.2.1.2.Fedora",[1055,27954,27955],{},[29,27956,27957],{},"配置存储库",[77,27959,27961],{"className":24769,"code":27960,"language":24771,"meta":82,"style":82},"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",[84,27962,27963,27978],{"__ignoreMap":82},[87,27964,27965,27967,27969,27971,27974,27976],{"class":89,"line":90},[87,27966,27796],{"class":205},[87,27968,27830],{"class":104},[87,27970,27833],{"class":104},[87,27972,27973],{"class":949}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[87,27975,26057],{"class":171},[87,27977,25626],{"class":104},[87,27979,27980,27982,27984],{"class":89,"line":101},[87,27981,25524],{"class":205},[87,27983,27163],{"class":949},[87,27985,27986],{"class":949}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[1055,27988,27989],{"start":101},[29,27990,27991],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[77,27993,27995],{"className":24769,"code":27994,"language":24771,"meta":82,"style":82},"# 如果是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",[84,27996,27997,28002,28016,28020,28025],{"__ignoreMap":82},[87,27998,27999],{"class":89,"line":90},[87,28000,28001],{"class":199},"# 如果是RHEL或者Rocky（DNF4）\n",[87,28003,28004,28006,28008,28010,28013],{"class":89,"line":101},[87,28005,25524],{"class":205},[87,28007,27262],{"class":949},[87,28009,27361],{"class":949},[87,28011,28012],{"class":104}," --add-repo",[87,28014,28015],{"class":949}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[87,28017,28018],{"class":89,"line":120},[87,28019,3355],{"emptyLinePlaceholder":1029},[87,28021,28022],{"class":89,"line":222},[87,28023,28024],{"class":199},"# 如果是Feodra41+（DNF5）\n",[87,28026,28027,28029,28031,28033,28035],{"class":89,"line":234},[87,28028,25524],{"class":205},[87,28030,27262],{"class":949},[87,28032,27361],{"class":949},[87,28034,27364],{"class":949},[87,28036,28037],{"class":104}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[1055,28039,28040],{"start":120},[29,28041,28042],{},"安装NVIDIA Container Toolki包",[77,28044,28046],{"className":24769,"code":28045,"language":24771,"meta":82,"style":82},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[84,28047,28048,28053,28066,28070,28075],{"__ignoreMap":82},[87,28049,28050],{"class":89,"line":90},[87,28051,28052],{"class":199},"# 如果是RHEL或者Rocky\n",[87,28054,28055,28057,28059,28061,28063],{"class":89,"line":101},[87,28056,25524],{"class":205},[87,28058,27262],{"class":949},[87,28060,24781],{"class":949},[87,28062,27347],{"class":104},[87,28064,28065],{"class":949}," nvidia-container-toolkit\n",[87,28067,28068],{"class":89,"line":120},[87,28069,3355],{"emptyLinePlaceholder":1029},[87,28071,28072],{"class":89,"line":222},[87,28073,28074],{"class":199},"# 如果是Fedora\n",[87,28076,28077,28079,28081,28083,28085],{"class":89,"line":234},[87,28078,25524],{"class":205},[87,28080,27262],{"class":949},[87,28082,24781],{"class":949},[87,28084,27347],{"class":104},[87,28086,28065],{"class":949},[1055,28088,28089],{"start":222},[29,28090,28091,28092,28094],{},"安装nvidia-docker2 ： 在Fedora上使用",[84,28093,27237],{},"进行安装",[77,28096,28098],{"className":24769,"code":28097,"language":24771,"meta":82,"style":82},"sudo dnf install -y nvidia-docker2\n",[84,28099,28100],{"__ignoreMap":82},[87,28101,28102,28104,28106,28108,28110],{"class":89,"line":90},[87,28103,25524],{"class":205},[87,28105,27262],{"class":949},[87,28107,24781],{"class":949},[87,28109,27347],{"class":104},[87,28111,27901],{"class":949},[1055,28113,28114],{"start":234},[29,28115,28116],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[77,28118,28119],{"className":24769,"code":27909,"language":24771,"meta":82,"style":82},[84,28120,28121],{"__ignoreMap":82},[87,28122,28123,28125,28127,28129,28131],{"class":89,"line":90},[87,28124,25524],{"class":205},[87,28126,27918],{"class":949},[87,28128,27921],{"class":949},[87,28130,27924],{"class":949},[87,28132,27927],{"class":104},[1055,28134,28135],{"start":256},[29,28136,28137],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[77,28139,28140],{"className":24769,"code":27935,"language":24771,"meta":82,"style":82},[84,28141,28142],{"__ignoreMap":82},[87,28143,28144,28146,28148,28150],{"class":89,"line":90},[87,28145,25524],{"class":205},[87,28147,27460],{"class":949},[87,28149,27946],{"class":949},[87,28151,27439],{"class":949},[19,28153,28154],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,28156,28157],{},"方法：",[19,28159,28160],{},"1️⃣nvidia-smi",[19,28162,28163],{},"2️⃣运行nvidia cuda 容器进行测试",[77,28165,28167],{"className":24769,"code":28166,"language":24771,"meta":82,"style":82},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[84,28168,28169],{"__ignoreMap":82},[87,28170,28171,28173,28175,28178,28181,28184,28187,28190],{"class":89,"line":90},[87,28172,25524],{"class":205},[87,28174,27267],{"class":949},[87,28176,28177],{"class":949}," run",[87,28179,28180],{"class":104}," --rm",[87,28182,28183],{"class":104}," --gpus",[87,28185,28186],{"class":949}," all",[87,28188,28189],{"class":949}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[87,28191,28192],{"class":949}," nvidia-smi\n",[19,28194,28195],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,28197,28198],{},[39,28199],{"alt":82,"src":28200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[44,28202,28204],{"id":28203},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,28206,28207],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,28209,28210],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,28212,28213],{},[1334,28214,28215],{"href":28215,"rel":28216},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24812],[19,28218,28219],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,28221,28222],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,28224,28225],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[1235,28227,28228,28244],{},[1238,28229,28230],{},[1241,28231,28232,28235,28238,28241],{},[1244,28233,28234],{"align":24683},"镜像类型",[1244,28236,28237],{"align":24683},"适用场景",[1244,28239,28240],{"align":24683},"示例标签",[1244,28242,28243],{"align":24683},"大小",[1281,28245,28246,28260,28274],{},[1241,28247,28248,28251,28254,28257],{},[1286,28249,28250],{"align":24683},"base",[1286,28252,28253],{"align":24683},"仅需 CUDA 运行时库",[1286,28255,28256],{"align":24683},"12.4.0-base-ubuntu22.04",[1286,28258,28259],{"align":24683},"~240MB",[1241,28261,28262,28265,28268,28271],{},[1286,28263,28264],{"align":24683},"runtime",[1286,28266,28267],{"align":24683},"部署编译后的应用（含数学库）",[1286,28269,28270],{"align":24683},"12.4.0-runtime-ubuntu22.04",[1286,28272,28273],{"align":24683},"~2GB",[1241,28275,28276,28279,28282,28285],{},[1286,28277,28278],{"align":24683},"devel",[1286,28280,28281],{"align":24683},"开发环境（含编译工具）",[1286,28283,28284],{"align":24683},"12.4.0-devel-ubuntu22.04",[1286,28286,28287],{"align":24683},"~3GB",[19,28289,28290,28291,28294],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[84,28292,28293],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,28296,28297],{},[39,28298],{"alt":82,"src":28299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,28301,28302],{},"在dockerfile里就可以开头这么写：",[77,28304,28306],{"className":24769,"code":28305,"language":24771,"meta":82,"style":82},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[84,28307,28308,28313],{"__ignoreMap":82},[87,28309,28310],{"class":89,"line":90},[87,28311,28312],{"class":199},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[87,28314,28315,28318],{"class":89,"line":101},[87,28316,28317],{"class":205},"FROM",[87,28319,28320],{"class":949}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[44,28322,28324],{"id":28323},"_34配置以太网","3.4.配置以太网",[19,28326,28327],{},"指定网络模式",[77,28329,28331],{"className":24769,"code":28330,"language":24771,"meta":82,"style":82},"--net=host \\\n",[84,28332,28333],{"__ignoreMap":82},[87,28334,28335,28338,28340,28343],{"class":89,"line":90},[87,28336,28337],{"class":97},"--net",[87,28339,946],{"class":171},[87,28341,28342],{"class":949},"host",[87,28344,25626],{"class":205},[19,28346,28347],{},"启动参数里加上这行即可。具体在下方",[19,28349,28350],{},"--net选项：指定网络模式，该选项有以下参数可选：",[26,28352,28353,28356,28359,28362],{},[29,28354,28355],{},"--net=bridge:默认选项，表示连接到默认的网桥",[29,28357,28358],{},"--net=host:容器使用宿主机的网络",[29,28360,28361],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[29,28363,28364],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1006,28366,28367],{},"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":82,"searchDepth":101,"depth":101,"links":28369},[28370,28371,28372,28373],{"id":27684,"depth":120,"text":27685},{"id":27751,"depth":120,"text":27752},{"id":28203,"depth":120,"text":28204},{"id":28323,"depth":120,"text":28324},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27673,"description":27681},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28380,"title":28381,"body":28382,"description":28389,"extension":1027,"meta":28395,"navigation":1029,"path":28396,"seo":28397,"stem":28398,"__hash__":28399},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28383,"toc":28393},[28384,28387,28390],[10,28385,28381],{"id":28386},"_4dockerhub换源",[19,28388,28389],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,28391,28392],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":82,"searchDepth":101,"depth":101,"links":28394},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28381,"description":28389},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28401,"title":28402,"body":28403,"description":82,"extension":1027,"meta":29415,"navigation":1029,"path":29416,"seo":29417,"stem":29418,"__hash__":29419},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28404,"toc":29410},[28405,28408,28412,28418,28422,28425,28765,28768,28771,28774,28779,28784,28787,28790,28793,28796,28815,28818,28829,28835,29017,29027,29043,29306,29308,29333,29348,29357,29407],[10,28406,28402],{"id":28407},"_5docker命令学习",[44,28409,28411],{"id":28410},"_51参考文档","5.1.参考文档",[19,28413,28414],{},[1334,28415,28416],{"href":28416,"rel":28417},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24812],[44,28419,28421],{"id":28420},"_52常用命令","5.2.常用命令",[19,28423,28424],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[1235,28426,28427,28440],{},[1238,28428,28429],{},[1241,28430,28431,28434,28437],{},[1244,28432,28433],{"align":24683},"命令",[1244,28435,28436],{"align":24683},"描述",[1244,28438,28439],{"align":24683},"示例",[1281,28441,28442,28453,28464,28475,28486,28497,28508,28519,28529,28540,28551,28562,28572,28583,28594,28605,28615,28625,28635,28645,28656,28667,28678,28689,28700,28711,28721,28732,28743,28754],{},[1241,28443,28444,28447,28450],{},[1286,28445,28446],{"align":24683},"docker run",[1286,28448,28449],{"align":24683},"创建并启动一个新的容器。",[1286,28451,28452],{"align":24683},"docker run -it ubuntu bash",[1241,28454,28455,28458,28461],{},[1286,28456,28457],{"align":24683},"docker build",[1286,28459,28460],{"align":24683},"通过指定的 Dockerfile 创建一个新的镜像。",[1286,28462,28463],{"align":24683},"docker build -t myimage .",[1241,28465,28466,28469,28472],{},[1286,28467,28468],{"align":24683},"docker pull",[1286,28470,28471],{"align":24683},"从 Docker 仓库拉取镜像。",[1286,28473,28474],{"align":24683},"docker pull ubuntu",[1241,28476,28477,28480,28483],{},[1286,28478,28479],{"align":24683},"docker push",[1286,28481,28482],{"align":24683},"将本地镜像推送到 Docker 仓库。",[1286,28484,28485],{"align":24683},"docker push myimage",[1241,28487,28488,28491,28494],{},[1286,28489,28490],{"align":24683},"docker stop",[1286,28492,28493],{"align":24683},"停止一个正在运行的容器。",[1286,28495,28496],{"align":24683},"docker stop container_id",[1241,28498,28499,28502,28505],{},[1286,28500,28501],{"align":24683},"docker start",[1286,28503,28504],{"align":24683},"启动一个已经存在的容器。",[1286,28506,28507],{"align":24683},"docker start container_id",[1241,28509,28510,28513,28516],{},[1286,28511,28512],{"align":24683},"docker restart",[1286,28514,28515],{"align":24683},"重新启动容器。",[1286,28517,28518],{"align":24683},"docker restart container_id",[1241,28520,28521,28524,28527],{},[1286,28522,28523],{"align":24683},"docker ps",[1286,28525,28526],{"align":24683},"列出当前正在运行的容器。",[1286,28528,28523],{"align":24683},[1241,28530,28531,28534,28537],{},[1286,28532,28533],{"align":24683},"docker rm",[1286,28535,28536],{"align":24683},"删除一个或多个停止的容器。",[1286,28538,28539],{"align":24683},"docker rm container_id",[1241,28541,28542,28545,28548],{},[1286,28543,28544],{"align":24683},"docker exec",[1286,28546,28547],{"align":24683},"在一个正在运行的容器中执行命令。",[1286,28549,28550],{"align":24683},"docker exec -it container_id bash",[1241,28552,28553,28556,28559],{},[1286,28554,28555],{"align":24683},"docker logs",[1286,28557,28558],{"align":24683},"查看容器的日志输出。",[1286,28560,28561],{"align":24683},"docker logs container_id",[1241,28563,28564,28567,28570],{},[1286,28565,28566],{"align":24683},"docker images",[1286,28568,28569],{"align":24683},"列出本地所有镜像。",[1286,28571,28566],{"align":24683},[1241,28573,28574,28577,28580],{},[1286,28575,28576],{"align":24683},"docker rmi",[1286,28578,28579],{"align":24683},"删除一个或多个镜像。",[1286,28581,28582],{"align":24683},"docker rmi myimage",[1241,28584,28585,28588,28591],{},[1286,28586,28587],{"align":24683},"docker network",[1286,28589,28590],{"align":24683},"管理 Docker 网络。",[1286,28592,28593],{"align":24683},"docker network ls",[1241,28595,28596,28599,28602],{},[1286,28597,28598],{"align":24683},"docker volume",[1286,28600,28601],{"align":24683},"管理 Docker 数据卷。",[1286,28603,28604],{"align":24683},"docker volume ls",[1241,28606,28607,28610,28613],{},[1286,28608,28609],{"align":24683},"docker-compose up",[1286,28611,28612],{"align":24683},"启动 docker-compose.yml 中定义的所有服务。",[1286,28614,28609],{"align":24683},[1241,28616,28617,28620,28623],{},[1286,28618,28619],{"align":24683},"docker-compose down",[1286,28621,28622],{"align":24683},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[1286,28624,28619],{"align":24683},[1241,28626,28627,28630,28633],{},[1286,28628,28629],{"align":24683},"docker info",[1286,28631,28632],{"align":24683},"显示 Docker 系统的详细信息。",[1286,28634,28629],{"align":24683},[1241,28636,28637,28640,28643],{},[1286,28638,28639],{"align":24683},"docker stats",[1286,28641,28642],{"align":24683},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[1286,28644,28639],{"align":24683},[1241,28646,28647,28650,28653],{},[1286,28648,28649],{"align":24683},"docker inspect",[1286,28651,28652],{"align":24683},"查看容器或镜像的详细信息（JSON 格式）。",[1286,28654,28655],{"align":24683},"docker inspect container_id",[1241,28657,28658,28661,28664],{},[1286,28659,28660],{"align":24683},"docker save",[1286,28662,28663],{"align":24683},"将一个镜像保存为 tar 文件。",[1286,28665,28666],{"align":24683},"docker save -o myimage.tar myimage",[1241,28668,28669,28672,28675],{},[1286,28670,28671],{"align":24683},"docker load",[1286,28673,28674],{"align":24683},"从 tar 文件中加载镜像。",[1286,28676,28677],{"align":24683},"docker load -i myimage.tar",[1241,28679,28680,28683,28686],{},[1286,28681,28682],{"align":24683},"docker tag",[1286,28684,28685],{"align":24683},"为镜像添加标签（tag）。",[1286,28687,28688],{"align":24683},"docker tag myimage myimage:v1",[1241,28690,28691,28694,28697],{},[1286,28692,28693],{"align":24683},"docker buildx build",[1286,28695,28696],{"align":24683},"使用 Buildx 构建多架构镜像。",[1286,28698,28699],{"align":24683},"docker buildx build -t myimage .",[1241,28701,28702,28705,28708],{},[1286,28703,28704],{"align":24683},"docker buildx create",[1286,28706,28707],{"align":24683},"创建一个新的 Buildx 构建实例。",[1286,28709,28710],{"align":24683},"docker buildx create –use",[1241,28712,28713,28716,28719],{},[1286,28714,28715],{"align":24683},"docker buildx ls",[1286,28717,28718],{"align":24683},"列出所有可用的 Buildx 构建实例。",[1286,28720,28715],{"align":24683},[1241,28722,28723,28726,28729],{},[1286,28724,28725],{"align":24683},"docker buildx use",[1286,28727,28728],{"align":24683},"设置当前的 Buildx 构建实例。",[1286,28730,28731],{"align":24683},"docker buildx use mybuilder",[1241,28733,28734,28737,28740],{},[1286,28735,28736],{"align":24683},"docker buildx bake",[1286,28738,28739],{"align":24683},"使用 Bake 文件批量构建镜像。",[1286,28741,28742],{"align":24683},"docker buildx bake -f bake.hcl",[1241,28744,28745,28748,28751],{},[1286,28746,28747],{"align":24683},"docker buildx build –push",[1286,28749,28750],{"align":24683},"构建镜像并推送到镜像仓库。",[1286,28752,28753],{"align":24683},"docker buildx build –push -t myimage .",[1241,28755,28756,28759,28762],{},[1286,28757,28758],{"align":24683},"docker buildx build –platform",[1286,28760,28761],{"align":24683},"构建镜像并为多个平台生成支持。",[1286,28763,28764],{"align":24683},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,28766,28767],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,28769,28770],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,28772,28773],{},"docker images 可以查看已经下载的镜像",[19,28775,28776],{},[39,28777],{"alt":82,"src":28778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,28780,28781],{},[57,28782,28783],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,28785,28786],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,28788,28789],{},"docker container logs 查看容器日志",[19,28791,28792],{},"docker top 查看容器里的进程",[19,28794,28795],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[77,28797,28799],{"className":24769,"code":28798,"language":24771,"meta":82,"style":82},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[84,28800,28801],{"__ignoreMap":82},[87,28802,28803,28806,28809,28812],{"class":89,"line":90},[87,28804,28805],{"class":205},"如：docker",[87,28807,28808],{"class":949}," cp",[87,28810,28811],{"class":949}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[87,28813,28814],{"class":949}," \u002Fmydata\u002Fnginx\n",[19,28816,28817],{},"docker run时在启动容器的时候会有几个常用的选项：",[26,28819,28820,28823,28826],{},[29,28821,28822],{},"-d选项：表示后台运行",[29,28824,28825],{},"-P选项：随机端口映射",[29,28827,28828],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[44,28830,28832],{"id":28831},"_53run命令的参数非常重要",[57,28833,28834],{},"5.3.run命令的参数（非常重要）",[1235,28836,28837,28850],{},[1238,28838,28839],{},[1241,28840,28841,28844,28847],{},[1244,28842,28843],{"align":24683},"参数\u002F配置",[1244,28845,28846],{"align":24683},"功能说明",[1244,28848,28849],{"align":24683},"重要性与参考依据",[1281,28851,28852,28863,28874,28885,28896,28907,28918,28929,28940,28951,28962,28973,28984,28995,29006],{},[1241,28853,28854,28857,28860],{},[1286,28855,28856],{"align":24683},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[1286,28858,28859],{"align":24683},"指定容器名称，便于后续管理",[1286,28861,28862],{"align":24683},"替代随机生成的容器名。",[1241,28864,28865,28868,28871],{},[1286,28866,28867],{"align":24683},"–gpus all",[1286,28869,28870],{"align":24683},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[1286,28872,28873],{"align":24683},"用于CUDA加速等GPU依赖任务。",[1241,28875,28876,28879,28882],{},[1286,28877,28878],{"align":24683},"-e NVIDIA_DRIVER_CAPABILITIES=all",[1286,28880,28881],{"align":24683},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[1286,28883,28884],{"align":24683},"确保容器内GPU功能完整67。",[1241,28886,28887,28890,28893],{},[1286,28888,28889],{"align":24683},"-dit",[1286,28891,28892],{"align":24683},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[1286,28894,28895],{"align":24683},"允许容器在后台运行并支持交互操作。",[1241,28897,28898,28901,28904],{},[1286,28899,28900],{"align":24683},"–privileged",[1286,28902,28903],{"align":24683},"赋予容器完全主机权限（可访问设备、内核模块等）",[1286,28905,28906],{"align":24683},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[1241,28908,28909,28912,28915],{},[1286,28910,28911],{"align":24683},"–net=host",[1286,28913,28914],{"align":24683},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[1286,28916,28917],{"align":24683},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[1241,28919,28920,28923,28926],{},[1286,28921,28922],{"align":24683},"–group-add audio–group-add video–group-add dialout",[1286,28924,28925],{"align":24683},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[1286,28927,28928],{"align":24683},"避免权限问题（如避免无法调用摄像头、麦克风）。",[1241,28930,28931,28934,28937],{},[1286,28932,28933],{"align":24683},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[1286,28935,28936],{"align":24683},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[1286,28938,28939],{"align":24683},"支持容器内运行图形界面应用（如OpenCV可视化）。",[1241,28941,28942,28945,28948],{},[1286,28943,28944],{"align":24683},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[1286,28946,28947],{"align":24683},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[1286,28949,28950],{"align":24683},"实现容器内图形显示。",[1241,28952,28953,28956,28959],{},[1286,28954,28955],{"align":24683},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[1286,28957,28958],{"align":24683},"挂载X11认证文件（只读）",[1286,28960,28961],{"align":24683},"确保容器有权连接宿主机显示服务。",[1241,28963,28964,28967,28970],{},[1286,28965,28966],{"align":24683},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[1286,28968,28969],{"align":24683},"挂载Wayland显示协议相关目录",[1286,28971,28972],{"align":24683},"支持Wayland协议的图形显示。",[1241,28974,28975,28978,28981],{},[1286,28976,28977],{"align":24683},"–ulimit nofile=1024:524288",[1286,28979,28980],{"align":24683},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[1286,28982,28983],{"align":24683},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[1241,28985,28986,28989,28992],{},[1286,28987,28988],{"align":24683},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[1286,28990,28991],{"align":24683},"挂载宿主机用户目录到容器内同名路径",[1286,28993,28994],{"align":24683},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[1241,28996,28997,29000,29003],{},[1286,28998,28999],{"align":24683},"-w \u002Fhome\u002Ftungchiahui",[1286,29001,29002],{"align":24683},"设置容器启动后的默认工作目录",[1286,29004,29005],{"align":24683},"直接进入项目路径，方便执行命令2324。",[1241,29007,29008,29011,29014],{},[1286,29009,29010],{"align":24683},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[1286,29012,29013],{"align":24683},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[1286,29015,29016],{"align":24683},"提供预配置的深度学习与机器人开发环境。",[19,29018,29019,29020,29022,29023,29026],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[84,29021,25524],{},"加不加",[84,29024,29025],{},"sudo -E","都无所谓。",[19,29028,29029,29030,29032,29033,29035,29036,29039,29040,29042],{},"用户已经被加到docker组了，不用",[84,29031,25524],{},"也行跑，其次，",[84,29034,25524],{},"运行的话，你的",[84,29037,29038],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[84,29041,29038],{},"更不可能变了。",[77,29044,29046],{"className":24769,"code":29045,"language":24771,"meta":82,"style":82},"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",[84,29047,29048,29061,29071,29081,29093,29100,29107,29114,29124,29133,29142,29156,29168,29180,29189,29199,29208,29223,29256,29283,29294,29301],{"__ignoreMap":82},[87,29049,29050,29052,29054,29056,29059],{"class":89,"line":90},[87,29051,25524],{"class":205},[87,29053,27267],{"class":949},[87,29055,28177],{"class":949},[87,29057,29058],{"class":104}," --name=ros_opencv_cuda",[87,29060,25626],{"class":104},[87,29062,29063,29066,29069],{"class":89,"line":101},[87,29064,29065],{"class":97},"--gpus ",[87,29067,29068],{"class":949},"all",[87,29070,25626],{"class":104},[87,29072,29073,29076,29079],{"class":89,"line":120},[87,29074,29075],{"class":97},"-e ",[87,29077,29078],{"class":949},"NVIDIA_DRIVER_CAPABILITIES=all",[87,29080,25626],{"class":104},[87,29082,29083,29085,29088,29091],{"class":89,"line":222},[87,29084,29075],{"class":97},[87,29086,29087],{"class":949},"DISPLAY=",[87,29089,29090],{"class":97},"$DISPLAY ",[87,29092,27122],{"class":104},[87,29094,29095,29098],{"class":89,"line":234},[87,29096,29097],{"class":97},"-dit ",[87,29099,27122],{"class":104},[87,29101,29102,29105],{"class":89,"line":256},[87,29103,29104],{"class":97},"--privileged ",[87,29106,27122],{"class":104},[87,29108,29109,29112],{"class":89,"line":269},[87,29110,29111],{"class":97},"--net=host ",[87,29113,27122],{"class":104},[87,29115,29116,29119,29122],{"class":89,"line":463},[87,29117,29118],{"class":97},"--group-add ",[87,29120,29121],{"class":949},"audio",[87,29123,25626],{"class":104},[87,29125,29126,29128,29131],{"class":89,"line":469},[87,29127,29118],{"class":97},[87,29129,29130],{"class":949},"video",[87,29132,25626],{"class":104},[87,29134,29135,29137,29140],{"class":89,"line":2287},[87,29136,29118],{"class":97},[87,29138,29139],{"class":949},"dialout",[87,29141,25626],{"class":104},[87,29143,29144,29146,29149,29151,29154],{"class":89,"line":2568},[87,29145,29075],{"class":97},[87,29147,29148],{"class":949},"XAUTHORITY=",[87,29150,29038],{"class":97},[87,29152,29153],{"class":949},"\u002F.Xauthority",[87,29155,25626],{"class":104},[87,29157,29158,29160,29163,29166],{"class":89,"line":2573},[87,29159,29075],{"class":97},[87,29161,29162],{"class":949},"WAYLAND_DISPLAY=",[87,29164,29165],{"class":97},"$WAYLAND_DISPLAY ",[87,29167,27122],{"class":104},[87,29169,29170,29172,29175,29178],{"class":89,"line":2579},[87,29171,29075],{"class":97},[87,29173,29174],{"class":949},"XDG_RUNTIME_DIR=",[87,29176,29177],{"class":97},"$XDG_RUNTIME_DIR ",[87,29179,27122],{"class":104},[87,29181,29182,29184,29187],{"class":89,"line":2584},[87,29183,29075],{"class":97},[87,29185,29186],{"class":949},"QT_QPA_PLATFORM=xcb",[87,29188,25626],{"class":104},[87,29190,29191,29194,29197],{"class":89,"line":2598},[87,29192,29193],{"class":97},"-v ",[87,29195,29196],{"class":949},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[87,29198,25626],{"class":104},[87,29200,29201,29203,29206],{"class":89,"line":2603},[87,29202,29193],{"class":97},[87,29204,29205],{"class":949},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[87,29207,25626],{"class":104},[87,29209,29210,29213,29216,29218,29221],{"class":89,"line":2609},[87,29211,29212],{"class":97},"-v $HOME",[87,29214,29215],{"class":949},"\u002F.Xauthority:",[87,29217,29038],{"class":97},[87,29219,29220],{"class":949},"\u002F.Xauthority:ro",[87,29222,25626],{"class":104},[87,29224,29225,29227,29230,29232,29235,29238,29240,29243,29245,29247,29249,29251,29254],{"class":89,"line":2630},[87,29226,29193],{"class":97},[87,29228,29229],{"class":949},"\u002Frun\u002Fuser\u002F",[87,29231,26047],{"class":97},[87,29233,29234],{"class":205},"id",[87,29236,29237],{"class":104}," -u",[87,29239,1524],{"class":97},[87,29241,29242],{"class":949},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[87,29244,26047],{"class":97},[87,29246,29234],{"class":205},[87,29248,29237],{"class":104},[87,29250,1524],{"class":97},[87,29252,29253],{"class":949},"\u002Fwayland-0",[87,29255,25626],{"class":104},[87,29257,29258,29260,29262,29264,29266,29268,29270,29273,29275,29277,29279,29281],{"class":89,"line":2635},[87,29259,29193],{"class":97},[87,29261,29229],{"class":949},[87,29263,26047],{"class":97},[87,29265,29234],{"class":205},[87,29267,29237],{"class":104},[87,29269,1524],{"class":97},[87,29271,29272],{"class":949},":\u002Frun\u002Fuser\u002F",[87,29274,26047],{"class":97},[87,29276,29234],{"class":205},[87,29278,29237],{"class":104},[87,29280,14664],{"class":97},[87,29282,27122],{"class":104},[87,29284,29285,29287,29289,29292],{"class":89,"line":2649},[87,29286,29212],{"class":97},[87,29288,1951],{"class":949},[87,29290,29291],{"class":97},"$HOME ",[87,29293,27122],{"class":104},[87,29295,29296,29299],{"class":89,"line":2654},[87,29297,29298],{"class":97},"-w $HOME ",[87,29300,27122],{"class":104},[87,29302,29303],{"class":89,"line":2683},[87,29304,29305],{"class":97},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,29307,9975],{},[1055,29309,29310,29318,29321,29324],{},[29,29311,29312,14745,29314,29317],{},[84,29313,29078],{},[84,29315,29316],{},"--gpus all","没有英伟达显卡请注释。",[29,29319,29320],{},"--name后面请自己为容器起名。",[29,29322,29323],{},"最后一行仓库名称请你自己找对应的镜像填上。",[29,29325,29326,29327,29332],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24500,29328,29329],{},[57,29330,29331],{},"请不要加","。",[77,29334,29336],{"className":24769,"code":29335,"language":24771,"meta":82,"style":82},"--ulimit nofile=1024:524288 \\\n",[84,29337,29338],{"__ignoreMap":82},[87,29339,29340,29343,29346],{"class":89,"line":90},[87,29341,29342],{"class":205},"--ulimit",[87,29344,29345],{"class":949}," nofile=1024:524288",[87,29347,25626],{"class":104},[19,29349,29350,29351,29356],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24500,29352,29353],{},[57,29354,29355],{},"不建议","**.**",[77,29358,29360],{"className":24769,"code":29359,"language":24771,"meta":82,"style":82},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[84,29361,29362,29389,29398],{"__ignoreMap":82},[87,29363,29364,29367,29370,29372,29374,29376,29378,29380,29382,29385,29387],{"class":89,"line":90},[87,29365,29366],{"class":205},"--user",[87,29368,29369],{"class":97}," $(",[87,29371,29234],{"class":205},[87,29373,29237],{"class":104},[87,29375,1524],{"class":97},[87,29377,1951],{"class":949},[87,29379,26047],{"class":97},[87,29381,29234],{"class":205},[87,29383,29384],{"class":104}," -g",[87,29386,14664],{"class":97},[87,29388,27122],{"class":104},[87,29390,29391,29393,29396],{"class":89,"line":101},[87,29392,29193],{"class":97},[87,29394,29395],{"class":949},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[87,29397,25626],{"class":104},[87,29399,29400,29402,29405],{"class":89,"line":120},[87,29401,29193],{"class":97},[87,29403,29404],{"class":949},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[87,29406,25626],{"class":104},[1006,29408,29409],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":82,"searchDepth":101,"depth":101,"links":29411},[29412,29413,29414],{"id":28410,"depth":120,"text":28411},{"id":28420,"depth":120,"text":28421},{"id":28831,"depth":120,"text":28834},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28402,"description":82},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29421,"title":29422,"body":29423,"description":82,"extension":1027,"meta":31046,"navigation":1029,"path":31047,"seo":31048,"stem":31049,"__hash__":31050},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29424,"toc":31041},[29425,29428,29432,29435,29657,29661,29665,29668,29774,29779,29782,29787,29790,29795,29798,29803,29806,29818,29821,29826,29833,29861,29868,29944,29949,29952,29975,29977,30052,30057,30060,30064,30072,30077,30082,30086,30097,30103,30106,30109,30133,30136,30139,30167,30170,30173,30638,30641,30646,30651,30655,30678,30683,30687,30691,30694,30697,30700,30727,30730,30733,30751,30754,30757,30779,30787,30792,30797,30801,30804,30807,30810,30813,30858,30861,30879,30882,30887,30890,30911,30914,30970,30973,30978,30982,30985,30992,30995,30998,31003,31006,31022,31025,31038],[10,29426,29422],{"id":29427},"_6手动创建docker镜像",[44,29429,29431],{"id":29430},"_61dockerfile","6.1.DockerFile",[19,29433,29434],{},"常用命令：",[1235,29436,29437,29448],{},[1238,29438,29439],{},[1241,29440,29441,29444,29446],{},[1244,29442,29443],{"align":24683},"指令",[1244,29445,26816],{"align":24683},[1244,29447,28439],{"align":24683},[1281,29449,29450,29460,29476,29487,29498,29509,29520,29531,29542,29556,29570,29581,29595,29606,29617,29631,29646],{},[1241,29451,29452,29454,29457],{},[1286,29453,28317],{"align":24683},[1286,29455,29456],{"align":24683},"指定基础镜像，是 Dockerfile 的起点",[1286,29458,29459],{"align":24683},"FROM ubuntu:22.04",[1241,29461,29462,29465,29468],{},[1286,29463,29464],{"align":24683},"LABEL",[1286,29466,29467],{"align":24683},"添加元数据（如作者、版本等）",[1286,29469,29470,29471,29475],{"align":24683},"LABEL maintainer=”",[1334,29472,29474],{"href":29473},"mailto:you@example.com","you@example.com","”",[1241,29477,29478,29481,29484],{},[1286,29479,29480],{"align":24683},"ENV",[1286,29482,29483],{"align":24683},"设置环境变量",[1286,29485,29486],{"align":24683},"ENV PORT=8080",[1241,29488,29489,29492,29495],{},[1286,29490,29491],{"align":24683},"ARG",[1286,29493,29494],{"align":24683},"构建参数，只在构建期间可用",[1286,29496,29497],{"align":24683},"ARG VERSION=1.0",[1241,29499,29500,29503,29506],{},[1286,29501,29502],{"align":24683},"RUN",[1286,29504,29505],{"align":24683},"构建镜像时运行命令",[1286,29507,29508],{"align":24683},"RUN apt-get update && apt-get install -y curl",[1241,29510,29511,29514,29517],{},[1286,29512,29513],{"align":24683},"COPY",[1286,29515,29516],{"align":24683},"复制文件到镜像中",[1286,29518,29519],{"align":24683},"COPY . \u002Fapp",[1241,29521,29522,29525,29528],{},[1286,29523,29524],{"align":24683},"ADD",[1286,29526,29527],{"align":24683},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[1286,29529,29530],{"align":24683},"ADD archive.tar.gz \u002Fdata\u002F",[1241,29532,29533,29536,29539],{},[1286,29534,29535],{"align":24683},"WORKDIR",[1286,29537,29538],{"align":24683},"设置工作目录",[1286,29540,29541],{"align":24683},"WORKDIR \u002Fopt",[1241,29543,29544,29547,29550],{},[1286,29545,29546],{"align":24683},"CMD",[1286,29548,29549],{"align":24683},"设置容器启动时默认命令（可被 docker run 覆盖）",[1286,29551,29552,29553],{"align":24683},"CMD ",[87,29554,29555],{},"“node”, “index.js”",[1241,29557,29558,29561,29564],{},[1286,29559,29560],{"align":24683},"ENTRYPOINT",[1286,29562,29563],{"align":24683},"设置容器启动时固定命令（通常用于 CLI 工具等）",[1286,29565,29566,29567],{"align":24683},"ENTRYPOINT ",[87,29568,29569],{},"“python3”",[1241,29571,29572,29575,29578],{},[1286,29573,29574],{"align":24683},"EXPOSE",[1286,29576,29577],{"align":24683},"声明镜像内服务监听的端口（不会自动映射）",[1286,29579,29580],{"align":24683},"EXPOSE 80",[1241,29582,29583,29586,29589],{},[1286,29584,29585],{"align":24683},"VOLUME",[1286,29587,29588],{"align":24683},"声明数据卷挂载点",[1286,29590,29591,29592],{"align":24683},"VOLUME ",[87,29593,29594],{},"“\u002Fdata”",[1241,29596,29597,29600,29603],{},[1286,29598,29599],{"align":24683},"USER",[1286,29601,29602],{"align":24683},"设置后续命令执行的用户",[1286,29604,29605],{"align":24683},"USER appuser",[1241,29607,29608,29611,29614],{},[1286,29609,29610],{"align":24683},"ONBUILD",[1286,29612,29613],{"align":24683},"当镜像作为其他镜像基础镜像时触发的构建指令",[1286,29615,29616],{"align":24683},"ONBUILD COPY . \u002Fsrc",[1241,29618,29619,29622,29625],{},[1286,29620,29621],{"align":24683},"SHELL",[1286,29623,29624],{"align":24683},"更改默认 shell，比如将 sh -c 改为 bash -c",[1286,29626,29627,29628],{"align":24683},"SHELL ",[87,29629,29630],{},"“\u002Fbin\u002Fbash”, “-c”",[1241,29632,29633,29636,29639],{},[1286,29634,29635],{"align":24683},"HEALTHCHECK",[1286,29637,29638],{"align":24683},"定义容器运行时的健康检查命令",[1286,29640,29641,29642],{"align":24683},"`HEALTHCHECK CMD curl –fail ",[1334,29643,29644],{"href":29644,"rel":29645},"http:\u002F\u002Flocalhost:8080",[24812],[1241,29647,29648,29651,29654],{},[1286,29649,29650],{"align":24683},"STOPSIGNAL",[1286,29652,29653],{"align":24683},"容器停止时发送的信号",[1286,29655,29656],{"align":24683},"STOPSIGNAL SIGKILL",[44,29658,29660],{"id":29659},"_62自己创建容器","6.2.自己创建容器",[49,29662,29664],{"id":29663},"_621手动创建","6.2.1.手动创建",[19,29666,29667],{},"在x86电脑上编译x86的：",[77,29669,29671],{"className":24769,"code":29670,"language":24771,"meta":82,"style":82},"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",[84,29672,29673,29689,29693,29706,29710,29723,29727,29740,29744,29757,29761],{"__ignoreMap":82},[87,29674,29675,29677,29680,29683,29686],{"class":89,"line":90},[87,29676,27500],{"class":205},[87,29678,29679],{"class":949}," build",[87,29681,29682],{"class":104}," -t",[87,29684,29685],{"class":949}," ros-melodic-cuda118-cudnn8-bionic:latest",[87,29687,29688],{"class":949}," .\n",[87,29690,29691],{"class":89,"line":101},[87,29692,3355],{"emptyLinePlaceholder":1029},[87,29694,29695,29697,29699,29701,29704],{"class":89,"line":120},[87,29696,27500],{"class":205},[87,29698,29679],{"class":949},[87,29700,29682],{"class":104},[87,29702,29703],{"class":949}," ros-noetic-focal:latest",[87,29705,29688],{"class":949},[87,29707,29708],{"class":89,"line":222},[87,29709,3355],{"emptyLinePlaceholder":1029},[87,29711,29712,29714,29716,29718,29721],{"class":89,"line":234},[87,29713,27500],{"class":205},[87,29715,29679],{"class":949},[87,29717,29682],{"class":104},[87,29719,29720],{"class":949}," ros-humble-jammy:latest",[87,29722,29688],{"class":949},[87,29724,29725],{"class":89,"line":256},[87,29726,3355],{"emptyLinePlaceholder":1029},[87,29728,29729,29731,29733,29735,29738],{"class":89,"line":269},[87,29730,27500],{"class":205},[87,29732,29679],{"class":949},[87,29734,29682],{"class":104},[87,29736,29737],{"class":949}," ros-jazzy-noble:latest",[87,29739,29688],{"class":949},[87,29741,29742],{"class":89,"line":463},[87,29743,3355],{"emptyLinePlaceholder":1029},[87,29745,29746,29748,29750,29752,29755],{"class":89,"line":469},[87,29747,27500],{"class":205},[87,29749,29679],{"class":949},[87,29751,29682],{"class":104},[87,29753,29754],{"class":949}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[87,29756,29688],{"class":949},[87,29758,29759],{"class":89,"line":2287},[87,29760,3355],{"emptyLinePlaceholder":1029},[87,29762,29763,29765,29767,29769,29772],{"class":89,"line":2568},[87,29764,27500],{"class":205},[87,29766,29679],{"class":949},[87,29768,29682],{"class":104},[87,29770,29771],{"class":949}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[87,29773,29688],{"class":949},[19,29775,29776],{},[39,29777],{"alt":82,"src":29778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,29780,29781],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,29783,29784],{},[39,29785],{"alt":82,"src":29786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,29788,29789],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[1055,29791,29792],{},[29,29793,29794],{},"创建 Docker Hub 账户",[19,29796,29797],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[1055,29799,29800],{"start":101},[29,29801,29802],{},"登录 Docker Hub",[19,29804,29805],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[77,29807,29809],{"className":24769,"code":29808,"language":24771,"meta":82,"style":82},"docker login\n",[84,29810,29811],{"__ignoreMap":82},[87,29812,29813,29815],{"class":89,"line":90},[87,29814,27500],{"class":205},[87,29816,29817],{"class":949}," login\n",[19,29819,29820],{},"输入你的 Docker Hub 用户名和密码进行验证。",[1055,29822,29823],{},[29,29824,29825],{},"为你的镜像打标签",[19,29827,29828,29829,29832],{},"Docker Hub 使用 ",[84,29830,29831],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[77,29834,29836],{"className":24769,"code":29835,"language":24771,"meta":82,"style":82},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[84,29837,29838],{"__ignoreMap":82},[87,29839,29840,29842,29845,29847,29850,29853,29856,29858],{"class":89,"line":90},[87,29841,27500],{"class":205},[87,29843,29844],{"class":949}," tag",[87,29846,29737],{"class":949},[87,29848,29849],{"class":171}," \u003C",[87,29851,29852],{"class":949},"你的用户",[87,29854,29855],{"class":97},"名",[87,29857,2051],{"class":171},[87,29859,29860],{"class":949},"\u002Fros-jazzy-noble:latest\n",[19,29862,29863,29864,29867],{},"例如，如果你的 Docker Hub 用户名是 ",[84,29865,29866],{},"tungchiahui","，你应该执行：",[77,29869,29871],{"className":24769,"code":29870,"language":24771,"meta":82,"style":82},"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",[84,29872,29873,29884,29888,29899,29903,29914,29918,29929,29933],{"__ignoreMap":82},[87,29874,29875,29877,29879,29881],{"class":89,"line":90},[87,29876,27500],{"class":205},[87,29878,29844],{"class":949},[87,29880,29703],{"class":949},[87,29882,29883],{"class":949}," tungchiahui\u002Fros-noetic-focal:latest\n",[87,29885,29886],{"class":89,"line":101},[87,29887,3355],{"emptyLinePlaceholder":1029},[87,29889,29890,29892,29894,29896],{"class":89,"line":120},[87,29891,27500],{"class":205},[87,29893,29844],{"class":949},[87,29895,29720],{"class":949},[87,29897,29898],{"class":949}," tungchiahui\u002Fros-humble-jammy:latest\n",[87,29900,29901],{"class":89,"line":222},[87,29902,3355],{"emptyLinePlaceholder":1029},[87,29904,29905,29907,29909,29911],{"class":89,"line":234},[87,29906,27500],{"class":205},[87,29908,29844],{"class":949},[87,29910,29737],{"class":949},[87,29912,29913],{"class":949}," tungchiahui\u002Fros-jazzy-noble:latest\n",[87,29915,29916],{"class":89,"line":256},[87,29917,3355],{"emptyLinePlaceholder":1029},[87,29919,29920,29922,29924,29926],{"class":89,"line":269},[87,29921,27500],{"class":205},[87,29923,29844],{"class":949},[87,29925,29754],{"class":949},[87,29927,29928],{"class":949}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[87,29930,29931],{"class":89,"line":463},[87,29932,3355],{"emptyLinePlaceholder":1029},[87,29934,29935,29937,29939,29941],{"class":89,"line":469},[87,29936,27500],{"class":205},[87,29938,29844],{"class":949},[87,29940,29771],{"class":949},[87,29942,29943],{"class":949}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[1055,29945,29946],{"start":101},[29,29947,29948],{},"推送镜像到 Docker Hub",[19,29950,29951],{},"使用以下命令将镜像推送到 Docker Hub：",[77,29953,29955],{"className":24769,"code":29954,"language":24771,"meta":82,"style":82},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[84,29956,29957],{"__ignoreMap":82},[87,29958,29959,29961,29964,29966,29968,29970,29972],{"class":89,"line":90},[87,29960,27500],{"class":205},[87,29962,29963],{"class":949}," push",[87,29965,29849],{"class":171},[87,29967,29852],{"class":949},[87,29969,29855],{"class":97},[87,29971,2051],{"class":171},[87,29973,29974],{"class":949},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29976,15583],{},[77,29978,29980],{"className":24769,"code":29979,"language":24771,"meta":82,"style":82},"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",[84,29981,29982,29990,29994,30002,30006,30014,30018,30027,30031,30039,30043],{"__ignoreMap":82},[87,29983,29984,29986,29988],{"class":89,"line":90},[87,29985,27500],{"class":205},[87,29987,29963],{"class":949},[87,29989,29883],{"class":949},[87,29991,29992],{"class":89,"line":101},[87,29993,3355],{"emptyLinePlaceholder":1029},[87,29995,29996,29998,30000],{"class":89,"line":120},[87,29997,27500],{"class":205},[87,29999,29963],{"class":949},[87,30001,29898],{"class":949},[87,30003,30004],{"class":89,"line":222},[87,30005,3355],{"emptyLinePlaceholder":1029},[87,30007,30008,30010,30012],{"class":89,"line":234},[87,30009,27500],{"class":205},[87,30011,29963],{"class":949},[87,30013,29913],{"class":949},[87,30015,30016],{"class":89,"line":256},[87,30017,3355],{"emptyLinePlaceholder":1029},[87,30019,30020,30022,30024],{"class":89,"line":269},[87,30021,27500],{"class":205},[87,30023,29963],{"class":949},[87,30025,30026],{"class":949}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[87,30028,30029],{"class":89,"line":463},[87,30030,3355],{"emptyLinePlaceholder":1029},[87,30032,30033,30035,30037],{"class":89,"line":469},[87,30034,27500],{"class":205},[87,30036,29963],{"class":949},[87,30038,29943],{"class":949},[87,30040,30041],{"class":89,"line":2287},[87,30042,3355],{"emptyLinePlaceholder":1029},[87,30044,30045,30047,30049],{"class":89,"line":2568},[87,30046,27500],{"class":205},[87,30048,29963],{"class":949},[87,30050,30051],{"class":949}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[1055,30053,30054],{"start":120},[29,30055,30056],{},"验证推送成功",[19,30058,30059],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,30061,30062],{},[57,30063,4738],{},[26,30065,30066,30069],{},[29,30067,30068],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[29,30070,30071],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,30073,30074],{},[39,30075],{"alt":82,"src":30076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,30078,30079],{},[39,30080],{"alt":82,"src":30081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[49,30083,30085],{"id":30084},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,30087,30088,30089,30092,30093,30096],{},"如果您想在 ",[57,30090,30091],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[57,30094,30095],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,30098,30099,30100],{},"1. ",[57,30101,30102],{},"启用 Docker 跨平台构建",[19,30104,30105],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,30107,30108],{},"第一步：启用 buildx（只需执行一次）",[77,30110,30112],{"className":24769,"code":30111,"language":24771,"meta":82,"style":82},"docker buildx create --name multiarch_builder --use\n",[84,30113,30114],{"__ignoreMap":82},[87,30115,30116,30118,30121,30124,30127,30130],{"class":89,"line":90},[87,30117,27500],{"class":205},[87,30119,30120],{"class":949}," buildx",[87,30122,30123],{"class":949}," create",[87,30125,30126],{"class":104}," --name",[87,30128,30129],{"class":949}," multiarch_builder",[87,30131,30132],{"class":104}," --use\n",[19,30134,30135],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,30137,30138],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[77,30140,30142],{"className":24769,"code":30141,"language":24771,"meta":82,"style":82},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[84,30143,30144],{"__ignoreMap":82},[87,30145,30146,30148,30150,30152,30155,30158,30161,30164],{"class":89,"line":90},[87,30147,27500],{"class":205},[87,30149,28177],{"class":949},[87,30151,28180],{"class":104},[87,30153,30154],{"class":104}," --privileged",[87,30156,30157],{"class":949}," multiarch\u002Fqemu-user-static",[87,30159,30160],{"class":104}," --reset",[87,30162,30163],{"class":104}," -p",[87,30165,30166],{"class":949}," yes\n",[19,30168,30169],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,30171,30172],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[77,30174,30176],{"className":24769,"code":30175,"language":24771,"meta":82,"style":82},"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",[84,30177,30178,30220,30224,30229,30239,30249,30258,30264,30268,30272,30282,30290,30299,30305,30309,30313,30323,30331,30340,30346,30350,30354,30364,30372,30381,30387,30391,30395,30405,30413,30422,30428,30432,30436,30446,30454,30463,30469,30473,30477,30487,30495,30504,30510,30514,30518,30528,30536,30545,30551,30555,30559,30569,30577,30586,30592,30596,30600,30611,30619,30628,30634],{"__ignoreMap":82},[87,30179,30180,30182,30184,30186,30189,30192,30194,30196,30199,30201,30203,30205,30207,30210,30213,30215,30218],{"class":89,"line":90},[87,30181,27500],{"class":205},[87,30183,30120],{"class":949},[87,30185,29679],{"class":949},[87,30187,30188],{"class":104}," --platform",[87,30190,30191],{"class":949}," linux\u002Famd64,linux\u002Farm64",[87,30193,29682],{"class":104},[87,30195,29849],{"class":171},[87,30197,30198],{"class":949},"你的镜像",[87,30200,29855],{"class":97},[87,30202,2051],{"class":171},[87,30204,1951],{"class":949},[87,30206,938],{"class":171},[87,30208,30209],{"class":949},"标",[87,30211,30212],{"class":97},"签",[87,30214,2051],{"class":171},[87,30216,30217],{"class":104}," --push",[87,30219,29688],{"class":949},[87,30221,30222],{"class":89,"line":101},[87,30223,3355],{"emptyLinePlaceholder":1029},[87,30225,30226],{"class":89,"line":120},[87,30227,30228],{"class":199},"# 例子：\n",[87,30230,30231,30233,30235,30237],{"class":89,"line":222},[87,30232,27500],{"class":205},[87,30234,30120],{"class":949},[87,30236,29679],{"class":949},[87,30238,25626],{"class":104},[87,30240,30241,30244,30247],{"class":89,"line":234},[87,30242,30243],{"class":97},"--platform ",[87,30245,30246],{"class":949},"linux\u002Famd64,linux\u002Farm64",[87,30248,25626],{"class":104},[87,30250,30251,30253,30256],{"class":89,"line":256},[87,30252,29682],{"class":104},[87,30254,30255],{"class":949}," tungchiahui\u002Fros:noetic-focal",[87,30257,25626],{"class":104},[87,30259,30260,30262],{"class":89,"line":269},[87,30261,30217],{"class":104},[87,30263,25626],{"class":104},[87,30265,30266],{"class":89,"line":463},[87,30267,29688],{"class":949},[87,30269,30270],{"class":89,"line":469},[87,30271,3355],{"emptyLinePlaceholder":1029},[87,30273,30274,30276,30278,30280],{"class":89,"line":2287},[87,30275,27500],{"class":205},[87,30277,30120],{"class":949},[87,30279,29679],{"class":949},[87,30281,25626],{"class":104},[87,30283,30284,30286,30288],{"class":89,"line":2568},[87,30285,30243],{"class":97},[87,30287,30246],{"class":949},[87,30289,25626],{"class":104},[87,30291,30292,30294,30297],{"class":89,"line":2573},[87,30293,29682],{"class":104},[87,30295,30296],{"class":949}," tungchiahui\u002Fros:humble-jammy",[87,30298,25626],{"class":104},[87,30300,30301,30303],{"class":89,"line":2579},[87,30302,30217],{"class":104},[87,30304,25626],{"class":104},[87,30306,30307],{"class":89,"line":2584},[87,30308,29688],{"class":949},[87,30310,30311],{"class":89,"line":2598},[87,30312,3355],{"emptyLinePlaceholder":1029},[87,30314,30315,30317,30319,30321],{"class":89,"line":2603},[87,30316,27500],{"class":205},[87,30318,30120],{"class":949},[87,30320,29679],{"class":949},[87,30322,25626],{"class":104},[87,30324,30325,30327,30329],{"class":89,"line":2609},[87,30326,30243],{"class":97},[87,30328,30246],{"class":949},[87,30330,25626],{"class":104},[87,30332,30333,30335,30338],{"class":89,"line":2630},[87,30334,29682],{"class":104},[87,30336,30337],{"class":949}," tungchiahui\u002Fros:jazzy-noble",[87,30339,25626],{"class":104},[87,30341,30342,30344],{"class":89,"line":2635},[87,30343,30217],{"class":104},[87,30345,25626],{"class":104},[87,30347,30348],{"class":89,"line":2649},[87,30349,29688],{"class":949},[87,30351,30352],{"class":89,"line":2654},[87,30353,3355],{"emptyLinePlaceholder":1029},[87,30355,30356,30358,30360,30362],{"class":89,"line":2683},[87,30357,27267],{"class":205},[87,30359,30120],{"class":949},[87,30361,29679],{"class":949},[87,30363,25626],{"class":104},[87,30365,30366,30368,30370],{"class":89,"line":2688},[87,30367,30243],{"class":97},[87,30369,30246],{"class":949},[87,30371,25626],{"class":104},[87,30373,30374,30376,30379],{"class":89,"line":2705},[87,30375,29682],{"class":104},[87,30377,30378],{"class":949}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[87,30380,25626],{"class":104},[87,30382,30383,30385],{"class":89,"line":2710},[87,30384,30217],{"class":104},[87,30386,25626],{"class":104},[87,30388,30389],{"class":89,"line":2715},[87,30390,29688],{"class":949},[87,30392,30393],{"class":89,"line":2720},[87,30394,3355],{"emptyLinePlaceholder":1029},[87,30396,30397,30399,30401,30403],{"class":89,"line":2734},[87,30398,27500],{"class":205},[87,30400,30120],{"class":949},[87,30402,29679],{"class":949},[87,30404,25626],{"class":104},[87,30406,30407,30409,30411],{"class":89,"line":2739},[87,30408,30243],{"class":97},[87,30410,30246],{"class":949},[87,30412,25626],{"class":104},[87,30414,30415,30417,30420],{"class":89,"line":3532},[87,30416,29682],{"class":104},[87,30418,30419],{"class":949}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[87,30421,25626],{"class":104},[87,30423,30424,30426],{"class":89,"line":3546},[87,30425,30217],{"class":104},[87,30427,25626],{"class":104},[87,30429,30430],{"class":89,"line":3554},[87,30431,29688],{"class":949},[87,30433,30434],{"class":89,"line":3559},[87,30435,3355],{"emptyLinePlaceholder":1029},[87,30437,30438,30440,30442,30444],{"class":89,"line":3565},[87,30439,27267],{"class":205},[87,30441,30120],{"class":949},[87,30443,29679],{"class":949},[87,30445,25626],{"class":104},[87,30447,30448,30450,30452],{"class":89,"line":3571},[87,30449,30243],{"class":97},[87,30451,30246],{"class":949},[87,30453,25626],{"class":104},[87,30455,30456,30458,30461],{"class":89,"line":3576},[87,30457,29682],{"class":104},[87,30459,30460],{"class":949}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[87,30462,25626],{"class":104},[87,30464,30465,30467],{"class":89,"line":8898},[87,30466,30217],{"class":104},[87,30468,25626],{"class":104},[87,30470,30471],{"class":89,"line":8922},[87,30472,29688],{"class":949},[87,30474,30475],{"class":89,"line":8927},[87,30476,3355],{"emptyLinePlaceholder":1029},[87,30478,30479,30481,30483,30485],{"class":89,"line":8933},[87,30480,27500],{"class":205},[87,30482,30120],{"class":949},[87,30484,29679],{"class":949},[87,30486,25626],{"class":104},[87,30488,30489,30491,30493],{"class":89,"line":8960},[87,30490,30243],{"class":97},[87,30492,30246],{"class":949},[87,30494,25626],{"class":104},[87,30496,30497,30499,30502],{"class":89,"line":8965},[87,30498,29682],{"class":104},[87,30500,30501],{"class":949}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[87,30503,25626],{"class":104},[87,30505,30506,30508],{"class":89,"line":8971},[87,30507,30217],{"class":104},[87,30509,25626],{"class":104},[87,30511,30512],{"class":89,"line":8983},[87,30513,29688],{"class":949},[87,30515,30516],{"class":89,"line":8995},[87,30517,3355],{"emptyLinePlaceholder":1029},[87,30519,30520,30522,30524,30526],{"class":89,"line":9007},[87,30521,27500],{"class":205},[87,30523,30120],{"class":949},[87,30525,29679],{"class":949},[87,30527,25626],{"class":104},[87,30529,30530,30532,30534],{"class":89,"line":10666},[87,30531,30243],{"class":97},[87,30533,30246],{"class":949},[87,30535,25626],{"class":104},[87,30537,30538,30540,30543],{"class":89,"line":10691},[87,30539,29682],{"class":104},[87,30541,30542],{"class":949}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[87,30544,25626],{"class":104},[87,30546,30547,30549],{"class":89,"line":10714},[87,30548,30217],{"class":104},[87,30550,25626],{"class":104},[87,30552,30553],{"class":89,"line":10738},[87,30554,29688],{"class":949},[87,30556,30557],{"class":89,"line":10743},[87,30558,3355],{"emptyLinePlaceholder":1029},[87,30560,30561,30563,30565,30567],{"class":89,"line":10748},[87,30562,27267],{"class":205},[87,30564,30120],{"class":949},[87,30566,29679],{"class":949},[87,30568,25626],{"class":104},[87,30570,30571,30573,30575],{"class":89,"line":10753},[87,30572,30243],{"class":97},[87,30574,30246],{"class":949},[87,30576,25626],{"class":104},[87,30578,30579,30581,30584],{"class":89,"line":10762},[87,30580,29682],{"class":104},[87,30582,30583],{"class":949}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[87,30585,25626],{"class":104},[87,30587,30588,30590],{"class":89,"line":10767},[87,30589,30217],{"class":104},[87,30591,25626],{"class":104},[87,30593,30594],{"class":89,"line":10773},[87,30595,29688],{"class":949},[87,30597,30598],{"class":89,"line":10794},[87,30599,3355],{"emptyLinePlaceholder":1029},[87,30601,30602,30605,30607,30609],{"class":89,"line":10800},[87,30603,30604],{"class":205},"  docker",[87,30606,30120],{"class":949},[87,30608,29679],{"class":949},[87,30610,25626],{"class":104},[87,30612,30613,30615,30617],{"class":89,"line":10814},[87,30614,30243],{"class":97},[87,30616,30246],{"class":949},[87,30618,25626],{"class":104},[87,30620,30621,30623,30626],{"class":89,"line":10820},[87,30622,29682],{"class":104},[87,30624,30625],{"class":949}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[87,30627,25626],{"class":104},[87,30629,30630,30632],{"class":89,"line":10847},[87,30631,30217],{"class":104},[87,30633,25626],{"class":104},[87,30635,30636],{"class":89,"line":10856},[87,30637,29688],{"class":949},[19,30639,30640],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,30642,30643],{},[39,30644],{"alt":82,"src":30645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,30647,30648],{},[39,30649],{"alt":82,"src":30650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[49,30652,30654],{"id":30653},"_623清除构建缓存","6.2.3.清除构建缓存",[77,30656,30658],{"className":24769,"code":30657,"language":24771,"meta":82,"style":82},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[84,30659,30660,30665],{"__ignoreMap":82},[87,30661,30662],{"class":89,"line":90},[87,30663,30664],{"class":199},"# 清理BuildKit构建缓存\n",[87,30666,30667,30669,30672,30675],{"class":89,"line":101},[87,30668,27500],{"class":205},[87,30670,30671],{"class":949}," builder",[87,30673,30674],{"class":949}," prune",[87,30676,30677],{"class":104}," -f\n",[19,30679,30680],{},[39,30681],{"alt":82,"src":30682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[44,30684,30686],{"id":30685},"_63补充","6.3.补充",[49,30688,30690],{"id":30689},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,30692,30693],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,30695,30696],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,30698,30699],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[77,30701,30703],{"className":24769,"code":30702,"language":24771,"meta":82,"style":82},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[84,30704,30705,30712],{"__ignoreMap":82},[87,30706,30707,30709],{"class":89,"line":90},[87,30708,28317],{"class":205},[87,30710,30711],{"class":949}," nginx\n",[87,30713,30714,30716,30719,30722,30724],{"class":89,"line":101},[87,30715,29502],{"class":205},[87,30717,30718],{"class":949}," echo",[87,30720,30721],{"class":949}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[87,30723,27169],{"class":171},[87,30725,30726],{"class":949}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,30728,30729],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,30731,30732],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[77,30734,30736],{"className":24769,"code":30735,"language":24771,"meta":82,"style":82},"docker build -t nginx:tuling .\n",[84,30737,30738],{"__ignoreMap":82},[87,30739,30740,30742,30744,30746,30749],{"class":89,"line":90},[87,30741,27500],{"class":205},[87,30743,29679],{"class":949},[87,30745,29682],{"class":104},[87,30747,30748],{"class":949}," nginx:tuling",[87,30750,29688],{"class":949},[19,30752,30753],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,30755,30756],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[77,30758,30760],{"className":24769,"code":30759,"language":24771,"meta":82,"style":82},"docker run -d -p 92:80 nginx:tuling\n",[84,30761,30762],{"__ignoreMap":82},[87,30763,30764,30766,30768,30771,30773,30776],{"class":89,"line":90},[87,30765,27500],{"class":205},[87,30767,28177],{"class":949},[87,30769,30770],{"class":104}," -d",[87,30772,30163],{"class":104},[87,30774,30775],{"class":949}," 92:80",[87,30777,30778],{"class":949}," nginx:tuling\n",[19,30780,30781,30782],{},"4、访问 ",[1334,30783,30786],{"href":30784,"rel":30785},"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",[24812],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,30788,30789],{},[39,30790],{"alt":82,"src":30791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,30793,30794],{},[39,30795],{"alt":82,"src":30796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[49,30798,30800],{"id":30799},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,30802,30803],{},"只需要知道大体流程即可",[19,30805,30806],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,30808,30809],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,30811,30812],{},"2、在Dockerfile中添加以下内容",[77,30814,30816],{"className":27038,"code":30815,"language":27040,"meta":82,"style":82},"# 基于哪个镜像\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",[84,30817,30818,30823,30828,30833,30838,30843,30848,30853],{"__ignoreMap":82},[87,30819,30820],{"class":89,"line":90},[87,30821,30822],{},"# 基于哪个镜像\n",[87,30824,30825],{"class":89,"line":101},[87,30826,30827],{},"From java:8\n",[87,30829,30830],{"class":89,"line":120},[87,30831,30832],{},"# 复制文件到容器\n",[87,30834,30835],{"class":89,"line":222},[87,30836,30837],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[87,30839,30840],{"class":89,"line":234},[87,30841,30842],{},"# 声明需要暴露的端口\n",[87,30844,30845],{"class":89,"line":256},[87,30846,30847],{},"EXPOSE 8877\n",[87,30849,30850],{"class":89,"line":269},[87,30851,30852],{},"# 配置容器启动后执行的命令\n",[87,30854,30855],{"class":89,"line":463},[87,30856,30857],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,30859,30860],{},"3、使用docker build命令构建镜像",[77,30862,30864],{"className":24769,"code":30863,"language":24771,"meta":82,"style":82},"docker build -t tulingmall-member:0.0.5 .\n",[84,30865,30866],{"__ignoreMap":82},[87,30867,30868,30870,30872,30874,30877],{"class":89,"line":90},[87,30869,27500],{"class":205},[87,30871,29679],{"class":949},[87,30873,29682],{"class":104},[87,30875,30876],{"class":949}," tulingmall-member:0.0.5",[87,30878,29688],{"class":949},[19,30880,30881],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30883,30884],{},[39,30885],{"alt":82,"src":30886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30888,30889],{},"4、启动镜像，加-d可在后台启动",[77,30891,30893],{"className":24769,"code":30892,"language":24771,"meta":82,"style":82},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[84,30894,30895],{"__ignoreMap":82},[87,30896,30897,30899,30901,30903,30905,30908],{"class":89,"line":90},[87,30898,27500],{"class":205},[87,30900,28177],{"class":949},[87,30902,30770],{"class":104},[87,30904,30163],{"class":104},[87,30906,30907],{"class":949}," 8877:8877",[87,30909,30910],{"class":949}," tulingmall-member:0.0.5\n",[19,30912,30913],{},"加上JVM参数：",[77,30915,30917],{"className":24769,"code":30916,"language":24771,"meta":82,"style":82},"# --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",[84,30918,30919,30924,30939,30949,30958,30965],{"__ignoreMap":82},[87,30920,30921],{"class":89,"line":90},[87,30922,30923],{"class":199},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[87,30925,30926,30928,30930,30933,30935,30937],{"class":89,"line":101},[87,30927,27500],{"class":205},[87,30929,28177],{"class":949},[87,30931,30932],{"class":104},"  -d",[87,30934,30163],{"class":104},[87,30936,30907],{"class":949},[87,30938,25626],{"class":104},[87,30940,30941,30943,30946],{"class":89,"line":120},[87,30942,29075],{"class":97},[87,30944,30945],{"class":949},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[87,30947,30948],{"class":104},"  \\\n",[87,30950,30951,30953,30956],{"class":89,"line":222},[87,30952,29075],{"class":97},[87,30954,30955],{"class":949},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[87,30957,30948],{"class":104},[87,30959,30960,30963],{"class":89,"line":234},[87,30961,30962],{"class":97},"--cap-add=SYS_PTRACE  ",[87,30964,27122],{"class":104},[87,30966,30967],{"class":89,"line":256},[87,30968,30969],{"class":97},"tulingmall-member:0.0.5\n",[19,30971,30972],{},"5、访问会员服务接口",[19,30974,30975],{},[39,30976],{"alt":82,"src":30977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[49,30979,30981],{"id":30980},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30983,30984],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30986,30987,30988],{},"阿里云docker镜像仓库：",[1334,30989,30990],{"href":30990,"rel":30991},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24812],[19,30993,30994],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30996,30997],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30999,31000],{},[39,31001],{"alt":82,"src":31002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,31004,31005],{},"要把镜像推送到镜像仓库",[77,31007,31009],{"className":24769,"code":31008,"language":24771,"meta":82,"style":82},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[84,31010,31011],{"__ignoreMap":82},[87,31012,31013,31015,31017,31019],{"class":89,"line":90},[87,31014,27500],{"class":205},[87,31016,29844],{"class":949},[87,31018,30876],{"class":949},[87,31020,31021],{"class":949}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,31023,31024],{},"最后将镜像推送到远程仓库",[77,31026,31028],{"className":24769,"code":31027,"language":24771,"meta":82,"style":82},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[84,31029,31030],{"__ignoreMap":82},[87,31031,31032,31034,31036],{"class":89,"line":90},[87,31033,27500],{"class":205},[87,31035,29963],{"class":949},[87,31037,31021],{"class":949},[1006,31039,31040],{},"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":82,"searchDepth":101,"depth":101,"links":31042},[31043,31044,31045],{"id":29430,"depth":120,"text":29431},{"id":29659,"depth":120,"text":29660},{"id":30685,"depth":120,"text":30686},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29422,"description":82},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31052,"title":31053,"body":31054,"description":82,"extension":1027,"meta":31197,"navigation":1029,"path":31198,"seo":31199,"stem":31200,"__hash__":31201},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31055,"toc":31195},[31056,31059,31064,31069,31072,31077,31082,31085,31090,31095,31098,31103,31106,31109,31112,31115,31118,31121,31141,31163,31166,31169,31189,31192],[10,31057,31053],{"id":31058},"_7vscode远程开发",[1055,31060,31061],{},[29,31062,31063],{},"插件1：微软Docker工具",[19,31065,31066],{},[39,31067],{"alt":82,"src":31068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,31070,31071],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,31073,31074],{},[39,31075],{"alt":82,"src":31076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[1055,31078,31079],{"start":101},[29,31080,31081],{},"插件2：微软Docker远程开发工具",[19,31083,31084],{},"下面这是远程开发的插件。",[19,31086,31087],{},[39,31088],{"alt":82,"src":31089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,31091,31092],{},[39,31093],{"alt":82,"src":31094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,31096,31097],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,31099,31100],{},[39,31101],{"alt":82,"src":31102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,31104,31105],{},"安装完拓展之后，vscode进行链接：",[19,31107,31108],{},"1.按ctrl+shift+p",[19,31110,31111],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,31113,31114],{},"3.选择目前运行的容器",[19,31116,31117],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,31119,31120],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[77,31122,31124],{"className":24769,"code":31123,"language":24771,"meta":82,"style":82},"docker run -v 主机目录:容器目录 image-name\n",[84,31125,31126],{"__ignoreMap":82},[87,31127,31128,31130,31132,31135,31138],{"class":89,"line":90},[87,31129,27500],{"class":205},[87,31131,28177],{"class":949},[87,31133,31134],{"class":104}," -v",[87,31136,31137],{"class":949}," 主机目录:容器目录",[87,31139,31140],{"class":949}," image-name\n",[77,31142,31144],{"className":24769,"code":31143,"language":24771,"meta":82,"style":82},"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",[84,31145,31146],{"__ignoreMap":82},[87,31147,31148,31150,31152,31155,31157,31160],{"class":89,"line":90},[87,31149,27500],{"class":205},[87,31151,28177],{"class":949},[87,31153,31154],{"class":104}," -it",[87,31156,31134],{"class":104},[87,31158,31159],{"class":949}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[87,31161,31162],{"class":949}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,31164,31165],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,31167,31168],{},"查看挂载情况：",[77,31170,31172],{"className":24769,"code":31171,"language":24771,"meta":82,"style":82},"mount | grep -i project\n",[84,31173,31174],{"__ignoreMap":82},[87,31175,31176,31179,31181,31184,31186],{"class":89,"line":90},[87,31177,31178],{"class":205},"mount",[87,31180,26057],{"class":171},[87,31182,31183],{"class":205}," grep",[87,31185,27377],{"class":104},[87,31187,31188],{"class":949}," project\n",[19,31190,31191],{},"也可以通过ls来进行查看",[1006,31193,31194],{},"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":82,"searchDepth":101,"depth":101,"links":31196},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31053,"description":82},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31203,"title":31204,"body":31205,"description":1026,"extension":1027,"meta":31209,"navigation":1029,"path":31211,"seo":31212,"stem":31213,"__hash__":31214},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31206,"toc":31207},[],{"title":82,"searchDepth":101,"depth":101,"links":31208},[],{"category":31210},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31204,"description":1026},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31216,"title":31217,"body":31218,"description":1026,"extension":1027,"meta":31222,"navigation":1029,"path":31223,"seo":31224,"stem":31225,"__hash__":31226},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31219,"toc":31220},[],{"title":82,"searchDepth":101,"depth":101,"links":31221},[],{"category":31210},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31217,"description":1026},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31228,"title":31229,"body":31230,"description":1026,"extension":1027,"meta":31523,"navigation":1029,"path":31524,"seo":31525,"stem":31526,"__hash__":31527},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31231,"toc":31521},[31232,31235,31243,31258,31263,31314,31317,31323,31510,31515,31518],[10,31233,31229],{"id":31234},"_1验证深度学习环境",[19,31236,31237,31238],{},"关于环境的安装，看",[1334,31239,31242],{"href":31240,"rel":31241},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24812],"Pytorch-->深度学习",[19,31244,31245,31246,31249,31250,31253,31254,31257],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[84,31247,31248],{},"pytorch-cuda=12.4"," 是一个“ ",[57,31251,31252],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[57,31255,31256],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,31259,31260],{},[39,31261],{"alt":82,"src":31262},"\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",[77,31264,31266],{"className":24769,"code":31265,"language":24771,"meta":82,"style":82},"# 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",[84,31267,31268,31273],{"__ignoreMap":82},[87,31269,31270],{"class":89,"line":90},[87,31271,31272],{"class":199},"# CUDA 12.4\n",[87,31274,31275,31278,31280,31283,31286,31289,31292,31295,31297,31300,31303,31306,31309,31311],{"class":89,"line":101},[87,31276,31277],{"class":205},"conda",[87,31279,24781],{"class":949},[87,31281,31282],{"class":949}," pytorch==",[87,31284,31285],{"class":104},"2.5.1",[87,31287,31288],{"class":949}," torchvision==",[87,31290,31291],{"class":104},"0.20.1",[87,31293,31294],{"class":949}," torchaudio==",[87,31296,31285],{"class":104},[87,31298,31299],{"class":949}," pytorch-cuda=",[87,31301,31302],{"class":104},"12.4",[87,31304,31305],{"class":104}," -c",[87,31307,31308],{"class":949}," pytorch",[87,31310,31305],{"class":104},[87,31312,31313],{"class":949}," nvidia\n",[19,31315,31316],{},"）：",[19,31318,31319],{},[1334,31320,31321],{"href":31321,"rel":31322},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24812],[77,31324,31328],{"className":31325,"code":31326,"language":31327,"meta":82,"style":82},"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",[84,31329,31330,31335,31343,31348,31358,31374,31379,31389,31426,31433,31445,31461,31466,31476,31488,31498],{"__ignoreMap":82},[87,31331,31332],{"class":89,"line":90},[87,31333,31334],{"class":199},"# 对深度学习环境进行测试\n",[87,31336,31337,31340],{"class":89,"line":101},[87,31338,31339],{"class":171},"import",[87,31341,31342],{"class":97}," torch\n",[87,31344,31345],{"class":89,"line":120},[87,31346,31347],{"class":199},"# 查看cuda是否被激活\n",[87,31349,31350,31353,31355],{"class":89,"line":222},[87,31351,31352],{"class":97},"flag",[87,31354,946],{"class":171},[87,31356,31357],{"class":97},"torch.cuda.is_available()\n",[87,31359,31360,31363,31365,31368,31371],{"class":89,"line":234},[87,31361,31362],{"class":104},"print",[87,31364,165],{"class":97},[87,31366,31367],{"class":949},"\"cuda:\"",[87,31369,31370],{"class":97},", flag)   ",[87,31372,31373],{"class":199},"#返回true的话说明被激活\n",[87,31375,31376],{"class":89,"line":256},[87,31377,31378],{"class":199},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[87,31380,31381,31384,31386],{"class":89,"line":269},[87,31382,31383],{"class":97},"ngpu",[87,31385,946],{"class":171},[87,31387,31388],{"class":104},"1\n",[87,31390,31391,31394,31396,31399,31402,31404,31407,31410,31413,31415,31417,31419,31421,31424],{"class":89,"line":463},[87,31392,31393],{"class":97},"device",[87,31395,946],{"class":171},[87,31397,31398],{"class":97},"torch.device(",[87,31400,31401],{"class":949},"\"cuda:0\"",[87,31403,2660],{"class":171},[87,31405,31406],{"class":97},"(torch.cuda.is_available() ",[87,31408,31409],{"class":171},"and",[87,31411,31412],{"class":97}," ngpu",[87,31414,2051],{"class":171},[87,31416,111],{"class":104},[87,31418,14664],{"class":97},[87,31420,2657],{"class":171},[87,31422,31423],{"class":949}," \"cpu\"",[87,31425,1108],{"class":97},[87,31427,31428,31430],{"class":89,"line":469},[87,31429,31362],{"class":104},[87,31431,31432],{"class":97},"(device)\n",[87,31434,31435,31437,31440,31442],{"class":89,"line":2287},[87,31436,31362],{"class":104},[87,31438,31439],{"class":97},"(torch.cuda.get_device_name(",[87,31441,111],{"class":104},[87,31443,31444],{"class":97},"))\n",[87,31446,31447,31449,31452,31454,31456,31458],{"class":89,"line":2568},[87,31448,31362],{"class":104},[87,31450,31451],{"class":97},"(torch.rand(",[87,31453,1170],{"class":104},[87,31455,1473],{"class":97},[87,31457,1170],{"class":104},[87,31459,31460],{"class":97},").cuda())\n",[87,31462,31463],{"class":89,"line":2573},[87,31464,31465],{"class":199},"# 查看cuda和cudnn的版本\n",[87,31467,31468,31471,31473],{"class":89,"line":2579},[87,31469,31470],{"class":97},"cuda_version",[87,31472,946],{"class":171},[87,31474,31475],{"class":97},"torch.version.cuda\n",[87,31477,31478,31480,31482,31485],{"class":89,"line":2584},[87,31479,31362],{"class":104},[87,31481,165],{"class":97},[87,31483,31484],{"class":949},"\"cuda version\"",[87,31486,31487],{"class":97},",cuda_version)\n",[87,31489,31490,31493,31495],{"class":89,"line":2598},[87,31491,31492],{"class":97},"cudnn_version",[87,31494,946],{"class":171},[87,31496,31497],{"class":97},"torch.backends.cudnn.version()\n",[87,31499,31500,31502,31504,31507],{"class":89,"line":2603},[87,31501,31362],{"class":104},[87,31503,165],{"class":97},[87,31505,31506],{"class":949},"\"cudnn version\"",[87,31508,31509],{"class":97},",cudnn_version)\n",[19,31511,31512],{},[39,31513],{"alt":82,"src":31514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[19,31516,31517],{},"cuda:0 指的是一块显卡",[1006,31519,31520],{},"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":82,"searchDepth":101,"depth":101,"links":31522},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31229,"description":1026},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31529,"title":31530,"body":31531,"description":1026,"extension":1027,"meta":51334,"navigation":1029,"path":51335,"seo":51336,"stem":51337,"__hash__":51338},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31532,"toc":51328},[31533,31536,31540,31544,31547,31552,31557,31560,31565,31570,31575,31578,31582,31587,31591,31596,31599,31604,31607,31610,31613,31616,31621,31624,31629,31634,31639,31644,31647,31651,31654,31659,32263,32268,32271,32276,32279,32282,32746,32749,32752,32755,32758,34809,34812,34817,34822,35617,35620,35625,36403,36407,38066,38070,38784,38788,38792,38797,38802,38807,38810,38815,38820,38825,38830,38835,38839,38844,40126,40131,40134,40137,40140,40295,40298,40301,41517,41522,42217,42221,42225,42230,42235,42238,42243,42248,42253,42258,42263,42268,42273,42278,42283,42288,42293,42298,42303,42308,42313,42318,42323,42328,42333,42338,42343,42348,42353,42358,42363,42368,42373,42378,42383,42388,42392,42396,42399,43877,43881,45528,45532,46226,46230,46233,46236,46780,46783,46787,46790,48187,48191,48194,48772,50558,50562,50565,51325],[10,31534,31530],{"id":31535},"_2经典神经网络",[44,31537,31539],{"id":31538},"_21lenet与alexnet","2.1.LeNet与AlexNet",[49,31541,31543],{"id":31542},"_211原理介绍","2.1.1.原理介绍",[19,31545,31546],{},"LeNet-5",[1055,31548,31549],{},[29,31550,31551],{},"原理",[19,31553,31554],{},[39,31555],{"alt":82,"src":31556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[19,31558,31559],{},"B是batch批次；C是channel通道",[1055,31561,31562],{"start":101},[29,31563,31564],{},"网络参数详细",[19,31566,31567],{},[39,31568],{"alt":82,"src":31569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[19,31571,31572],{},[39,31573],{"alt":82,"src":31574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[19,31576,31577],{},"AlexNet",[1055,31579,31580],{},[29,31581,31551],{},[19,31583,31584],{},[39,31585],{"alt":82,"src":31586},"\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",[1055,31588,31589],{"start":101},[29,31590,31564],{},[19,31592,31593],{},[39,31594],{"alt":82,"src":31595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[19,31597,31598],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,31600,31601],{},[39,31602],{"alt":82,"src":31603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[19,31605,31606],{},"数据处理中的图像增强操作:",[19,31608,31609],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,31611,31612],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,31614,31615],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,31617,31618],{},[39,31619],{"alt":82,"src":31620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[19,31622,31623],{},"提升网络精确度的方法：LRN正则化",[19,31625,31626],{},[39,31627],{"alt":82,"src":31628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[19,31630,31631],{},[39,31632],{"alt":82,"src":31633},"\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",[1055,31635,31636],{"start":120},[29,31637,31638],{},"AlexNet的总结",[19,31640,31641],{},[39,31642],{"alt":82,"src":31643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[19,31645,31646],{},"比LeNet模型要深一丢丢",[49,31648,31650],{"id":31649},"_212代码实现","2.1.2.代码实现",[19,31652,31653],{},"（1）LeNet",[1055,31655,31656],{},[29,31657,31658],{},"模型搭建",[77,31660,31662],{"className":31325,"code":31661,"language":31327,"meta":82,"style":82},"# 导入库\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",[84,31663,31664,31669,31675,31680,31693,31698,31710,31714,31734,31739,31744,31755,31760,31779,31783,31788,31837,31849,31854,31883,31918,31945,31950,31962,31967,31987,32006,32025,32029,32034,32044,32061,32072,32087,32098,32109,32124,32139,32150,32157,32161,32175,32180,32203,32208,32213,32218,32222,32227,32232,32242],{"__ignoreMap":82},[87,31665,31666],{"class":89,"line":90},[87,31667,31668],{"class":199},"# 导入库\n",[87,31670,31671,31673],{"class":89,"line":101},[87,31672,31339],{"class":171},[87,31674,31342],{"class":97},[87,31676,31677],{"class":89,"line":120},[87,31678,31679],{"class":199},"# 导入神经网络层\n",[87,31681,31682,31685,31688,31690],{"class":89,"line":222},[87,31683,31684],{"class":171},"from",[87,31686,31687],{"class":97}," torch ",[87,31689,31339],{"class":171},[87,31691,31692],{"class":97}," nn\n",[87,31694,31695],{"class":89,"line":234},[87,31696,31697],{"class":199},"# 导入展示神经网络参数的包\n",[87,31699,31700,31702,31705,31707],{"class":89,"line":256},[87,31701,31684],{"class":171},[87,31703,31704],{"class":97}," torchsummary ",[87,31706,31339],{"class":171},[87,31708,31709],{"class":97}," summary\n",[87,31711,31712],{"class":89,"line":269},[87,31713,3355],{"emptyLinePlaceholder":1029},[87,31715,31716,31718,31721,31723,31726,31728,31731],{"class":89,"line":463},[87,31717,15644],{"class":171},[87,31719,31720],{"class":205}," LeNet",[87,31722,165],{"class":97},[87,31724,31725],{"class":205},"nn",[87,31727,1651],{"class":97},[87,31729,31730],{"class":205},"Module",[87,31732,31733],{"class":97},"):\n",[87,31735,31736],{"class":89,"line":469},[87,31737,31738],{"class":199},"    # 模型初始化:\n",[87,31740,31741],{"class":89,"line":2287},[87,31742,31743],{"class":199},"    # 定义一些网络层和激活函数\n",[87,31745,31746,31749,31752],{"class":89,"line":2568},[87,31747,31748],{"class":171},"    def",[87,31750,31751],{"class":104}," __init__",[87,31753,31754],{"class":97},"(self):\n",[87,31756,31757],{"class":89,"line":2573},[87,31758,31759],{"class":199},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[87,31761,31762,31765,31768,31771,31774,31777],{"class":89,"line":2579},[87,31763,31764],{"class":104},"        super",[87,31766,31767],{"class":97},"(LeNet,",[87,31769,31770],{"class":104},"self",[87,31772,31773],{"class":97},").",[87,31775,31776],{"class":104},"__init__",[87,31778,2931],{"class":97},[87,31780,31781],{"class":89,"line":2584},[87,31782,3355],{"emptyLinePlaceholder":1029},[87,31784,31785],{"class":89,"line":2598},[87,31786,31787],{"class":199},"        # 定义网络层\n",[87,31789,31790,31793,31796,31798,31801,31804,31806,31808,31810,31813,31815,31817,31819,31822,31824,31826,31828,31831,31833,31835],{"class":89,"line":2603},[87,31791,31792],{"class":104},"        self",[87,31794,31795],{"class":97},".c1",[87,31797,946],{"class":171},[87,31799,31800],{"class":97},"nn.Conv2d(",[87,31802,31803],{"class":492},"in_channels",[87,31805,946],{"class":171},[87,31807,1313],{"class":104},[87,31809,1473],{"class":97},[87,31811,31812],{"class":492},"out_channels",[87,31814,946],{"class":171},[87,31816,1439],{"class":104},[87,31818,1473],{"class":97},[87,31820,31821],{"class":492},"kernel_size",[87,31823,946],{"class":171},[87,31825,1414],{"class":104},[87,31827,1473],{"class":97},[87,31829,31830],{"class":492},"padding",[87,31832,946],{"class":171},[87,31834,1176],{"class":104},[87,31836,1108],{"class":97},[87,31838,31839,31841,31844,31846],{"class":89,"line":2609},[87,31840,31792],{"class":104},[87,31842,31843],{"class":97},".sig",[87,31845,946],{"class":171},[87,31847,31848],{"class":97},"nn.Sigmoid()\n",[87,31850,31851],{"class":89,"line":2630},[87,31852,31853],{"class":199},"        # 定义池化\n",[87,31855,31856,31858,31861,31863,31866,31868,31870,31872,31874,31877,31879,31881],{"class":89,"line":2635},[87,31857,31792],{"class":104},[87,31859,31860],{"class":97},".s2",[87,31862,946],{"class":171},[87,31864,31865],{"class":97},"nn.AvgPool2d(",[87,31867,31821],{"class":492},[87,31869,946],{"class":171},[87,31871,1176],{"class":104},[87,31873,1473],{"class":97},[87,31875,31876],{"class":492},"stride",[87,31878,946],{"class":171},[87,31880,1176],{"class":104},[87,31882,1108],{"class":97},[87,31884,31885,31887,31890,31892,31894,31896,31898,31900,31902,31904,31906,31908,31910,31912,31914,31916],{"class":89,"line":2649},[87,31886,31792],{"class":104},[87,31888,31889],{"class":97},".c3",[87,31891,946],{"class":171},[87,31893,31800],{"class":97},[87,31895,31803],{"class":492},[87,31897,946],{"class":171},[87,31899,1439],{"class":104},[87,31901,1473],{"class":97},[87,31903,31812],{"class":492},[87,31905,946],{"class":171},[87,31907,1694],{"class":104},[87,31909,1473],{"class":97},[87,31911,31821],{"class":492},[87,31913,946],{"class":171},[87,31915,1414],{"class":104},[87,31917,1108],{"class":97},[87,31919,31920,31922,31925,31927,31929,31931,31933,31935,31937,31939,31941,31943],{"class":89,"line":2654},[87,31921,31792],{"class":104},[87,31923,31924],{"class":97},".s4",[87,31926,946],{"class":171},[87,31928,31865],{"class":97},[87,31930,31821],{"class":492},[87,31932,946],{"class":171},[87,31934,1176],{"class":104},[87,31936,1473],{"class":97},[87,31938,31876],{"class":492},[87,31940,946],{"class":171},[87,31942,1176],{"class":104},[87,31944,1108],{"class":97},[87,31946,31947],{"class":89,"line":2683},[87,31948,31949],{"class":199},"        # 定义平展层\n",[87,31951,31952,31954,31957,31959],{"class":89,"line":2688},[87,31953,31792],{"class":104},[87,31955,31956],{"class":97},".flatten",[87,31958,946],{"class":171},[87,31960,31961],{"class":97},"nn.Flatten()\n",[87,31963,31964],{"class":89,"line":2705},[87,31965,31966],{"class":199},"        # 定义全连接层\n",[87,31968,31969,31971,31974,31976,31979,31981,31983,31985],{"class":89,"line":2710},[87,31970,31792],{"class":104},[87,31972,31973],{"class":97},".f5",[87,31975,946],{"class":171},[87,31977,31978],{"class":97},"nn.Linear(",[87,31980,4941],{"class":104},[87,31982,1473],{"class":97},[87,31984,1909],{"class":104},[87,31986,1108],{"class":97},[87,31988,31989,31991,31994,31996,31998,32000,32002,32004],{"class":89,"line":2715},[87,31990,31792],{"class":104},[87,31992,31993],{"class":97},".f6",[87,31995,946],{"class":171},[87,31997,31978],{"class":97},[87,31999,1909],{"class":104},[87,32001,1473],{"class":97},[87,32003,1803],{"class":104},[87,32005,1108],{"class":97},[87,32007,32008,32010,32013,32015,32017,32019,32021,32023],{"class":89,"line":2720},[87,32009,31792],{"class":104},[87,32011,32012],{"class":97},".f7",[87,32014,946],{"class":171},[87,32016,31978],{"class":97},[87,32018,1803],{"class":104},[87,32020,1473],{"class":97},[87,32022,242],{"class":104},[87,32024,1108],{"class":97},[87,32026,32027],{"class":89,"line":2734},[87,32028,3355],{"emptyLinePlaceholder":1029},[87,32030,32031],{"class":89,"line":2739},[87,32032,32033],{"class":199},"    # 写工具->写前向传播\n",[87,32035,32036,32038,32041],{"class":89,"line":3532},[87,32037,31748],{"class":171},[87,32039,32040],{"class":205}," forward",[87,32042,32043],{"class":97},"(self,x):\n",[87,32045,32046,32049,32051,32053,32056,32058],{"class":89,"line":3546},[87,32047,32048],{"class":97},"        x",[87,32050,946],{"class":171},[87,32052,31770],{"class":104},[87,32054,32055],{"class":97},".sig(",[87,32057,31770],{"class":104},[87,32059,32060],{"class":97},".c1(x))\n",[87,32062,32063,32065,32067,32069],{"class":89,"line":3554},[87,32064,32048],{"class":97},[87,32066,946],{"class":171},[87,32068,31770],{"class":104},[87,32070,32071],{"class":97},".s2(x)\n",[87,32073,32074,32076,32078,32080,32082,32084],{"class":89,"line":3559},[87,32075,32048],{"class":97},[87,32077,946],{"class":171},[87,32079,31770],{"class":104},[87,32081,32055],{"class":97},[87,32083,31770],{"class":104},[87,32085,32086],{"class":97},".c3(x))\n",[87,32088,32089,32091,32093,32095],{"class":89,"line":3565},[87,32090,32048],{"class":97},[87,32092,946],{"class":171},[87,32094,31770],{"class":104},[87,32096,32097],{"class":97},".s4(x)\n",[87,32099,32100,32102,32104,32106],{"class":89,"line":3571},[87,32101,32048],{"class":97},[87,32103,946],{"class":171},[87,32105,31770],{"class":104},[87,32107,32108],{"class":97},".flatten(x)\n",[87,32110,32111,32113,32115,32117,32119,32121],{"class":89,"line":3576},[87,32112,32048],{"class":97},[87,32114,946],{"class":171},[87,32116,31770],{"class":104},[87,32118,32055],{"class":97},[87,32120,31770],{"class":104},[87,32122,32123],{"class":97},".f5(x))\n",[87,32125,32126,32128,32130,32132,32134,32136],{"class":89,"line":8898},[87,32127,32048],{"class":97},[87,32129,946],{"class":171},[87,32131,31770],{"class":104},[87,32133,32055],{"class":97},[87,32135,31770],{"class":104},[87,32137,32138],{"class":97},".f6(x))\n",[87,32140,32141,32143,32145,32147],{"class":89,"line":8922},[87,32142,32048],{"class":97},[87,32144,946],{"class":171},[87,32146,31770],{"class":104},[87,32148,32149],{"class":97},".f7(x)\n",[87,32151,32152,32154],{"class":89,"line":8927},[87,32153,15702],{"class":171},[87,32155,32156],{"class":97}," x\n",[87,32158,32159],{"class":89,"line":8933},[87,32160,3355],{"emptyLinePlaceholder":1029},[87,32162,32163,32165,32168,32170,32173],{"class":89,"line":8960},[87,32164,2488],{"class":171},[87,32166,32167],{"class":104}," __name__",[87,32169,3903],{"class":171},[87,32171,32172],{"class":949},"\"__main__\"",[87,32174,4693],{"class":97},[87,32176,32177],{"class":89,"line":8965},[87,32178,32179],{"class":199},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[87,32181,32182,32185,32187,32189,32192,32194,32197,32199,32201],{"class":89,"line":8971},[87,32183,32184],{"class":97},"    device",[87,32186,946],{"class":171},[87,32188,31398],{"class":97},[87,32190,32191],{"class":949},"\"cuda\"",[87,32193,2660],{"class":171},[87,32195,32196],{"class":97}," torch.cuda.is_available() ",[87,32198,2657],{"class":171},[87,32200,31423],{"class":949},[87,32202,1108],{"class":97},[87,32204,32205],{"class":89,"line":8983},[87,32206,32207],{"class":199},"    # 如果就是想指定用cpu用下方代码:\n",[87,32209,32210],{"class":89,"line":8995},[87,32211,32212],{"class":199},"    # device=\"cpu\"\n",[87,32214,32215],{"class":89,"line":9007},[87,32216,32217],{"class":199},"    # print(device)\n",[87,32219,32220],{"class":89,"line":10666},[87,32221,3355],{"emptyLinePlaceholder":1029},[87,32223,32224],{"class":89,"line":10691},[87,32225,32226],{"class":199},"    # 实例化模型\n",[87,32228,32229],{"class":89,"line":10714},[87,32230,32231],{"class":199},"    # 将模型放到设备中去运行\n",[87,32233,32234,32237,32239],{"class":89,"line":10738},[87,32235,32236],{"class":97},"    model",[87,32238,946],{"class":171},[87,32240,32241],{"class":97},"LeNet().to(device)\n",[87,32243,32244,32247,32250,32252,32254,32256,32258,32260],{"class":89,"line":10743},[87,32245,32246],{"class":104},"    print",[87,32248,32249],{"class":97},"(summary(model,(",[87,32251,1313],{"class":104},[87,32253,1473],{"class":97},[87,32255,1993],{"class":104},[87,32257,1473],{"class":97},[87,32259,1993],{"class":104},[87,32261,32262],{"class":97},")))\n",[19,32264,32265],{},[39,32266],{"alt":82,"src":32267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[19,32269,32270],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[1055,32272,32273],{"start":101},[29,32274,32275],{},"训练",[19,32277,32278],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,32280,32281],{},"在训练之前可以将数据展示看一下",[77,32283,32285],{"className":31325,"code":32284,"language":31327,"meta":82,"style":82},"# 建立画图的函数，用于展示数据\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",[84,32286,32287,32292,32297,32309,32321,32334,32339,32351,32356,32368,32373,32385,32389,32393,32414,32426,32431,32452,32463,32467,32472,32490,32501,32506,32517,32522,32533,32537,32542,32557,32570,32575,32580,32593,32606,32619,32624,32628,32633,32653,32670,32690,32703,32716,32726,32741],{"__ignoreMap":82},[87,32288,32289],{"class":89,"line":90},[87,32290,32291],{"class":199},"# 建立画图的函数，用于展示数据\n",[87,32293,32294],{"class":89,"line":101},[87,32295,32296],{"class":199},"# torchvision中包含很多内置的数据集\n",[87,32298,32299,32301,32304,32306],{"class":89,"line":120},[87,32300,31684],{"class":171},[87,32302,32303],{"class":97}," sklearn.externals.array_api_compat.torch ",[87,32305,31339],{"class":171},[87,32307,32308],{"class":97}," squeeze\n",[87,32310,32311,32313,32316,32318],{"class":89,"line":222},[87,32312,31684],{"class":171},[87,32314,32315],{"class":97}," torchvision.datasets ",[87,32317,31339],{"class":171},[87,32319,32320],{"class":97}," FashionMNIST\n",[87,32322,32323,32325,32328,32331],{"class":89,"line":234},[87,32324,31339],{"class":171},[87,32326,32327],{"class":97}," numpy ",[87,32329,32330],{"class":171},"as",[87,32332,32333],{"class":97}," np\n",[87,32335,32336],{"class":89,"line":256},[87,32337,32338],{"class":199},"# 引入处理数据集的包\n",[87,32340,32341,32343,32346,32348],{"class":89,"line":269},[87,32342,31684],{"class":171},[87,32344,32345],{"class":97}," torchvision ",[87,32347,31339],{"class":171},[87,32349,32350],{"class":97}," transforms\n",[87,32352,32353],{"class":89,"line":463},[87,32354,32355],{"class":199},"# 从torch库中引入数据处理的包\n",[87,32357,32358,32360,32363,32365],{"class":89,"line":469},[87,32359,31339],{"class":171},[87,32361,32362],{"class":97}," torch.utils.data ",[87,32364,32330],{"class":171},[87,32366,32367],{"class":97}," Data\n",[87,32369,32370],{"class":89,"line":2287},[87,32371,32372],{"class":199},"# 导入画图的库\n",[87,32374,32375,32377,32380,32382],{"class":89,"line":2568},[87,32376,31339],{"class":171},[87,32378,32379],{"class":97}," matplotlib.pyplot ",[87,32381,32330],{"class":171},[87,32383,32384],{"class":97}," plt\n",[87,32386,32387],{"class":89,"line":2573},[87,32388,3355],{"emptyLinePlaceholder":1029},[87,32390,32391],{"class":89,"line":2579},[87,32392,3355],{"emptyLinePlaceholder":1029},[87,32394,32395,32398,32400,32403,32406,32408,32411],{"class":89,"line":2584},[87,32396,32397],{"class":97},"train_data",[87,32399,946],{"class":171},[87,32401,32402],{"class":97},"FashionMNIST(",[87,32404,32405],{"class":492},"root",[87,32407,946],{"class":171},[87,32409,32410],{"class":949},"'.\u002Fdata'",[87,32412,32413],{"class":97},",\n",[87,32415,32416,32419,32421,32424],{"class":89,"line":2598},[87,32417,32418],{"class":492},"                        train",[87,32420,946],{"class":171},[87,32422,32423],{"class":104},"True",[87,32425,32413],{"class":97},[87,32427,32428],{"class":89,"line":2603},[87,32429,32430],{"class":199},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[87,32432,32433,32436,32438,32441,32444,32446,32449],{"class":89,"line":2609},[87,32434,32435],{"class":492},"                        transform",[87,32437,946],{"class":171},[87,32439,32440],{"class":97},"transforms.Compose([transforms.Resize(",[87,32442,32443],{"class":492},"size",[87,32445,946],{"class":171},[87,32447,32448],{"class":104},"224",[87,32450,32451],{"class":97},"),transforms.ToTensor()]),\n",[87,32453,32454,32457,32459,32461],{"class":89,"line":2630},[87,32455,32456],{"class":492},"                        download",[87,32458,946],{"class":171},[87,32460,32423],{"class":104},[87,32462,1108],{"class":97},[87,32464,32465],{"class":89,"line":2635},[87,32466,3355],{"emptyLinePlaceholder":1029},[87,32468,32469],{"class":89,"line":2649},[87,32470,32471],{"class":199},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[87,32473,32474,32477,32479,32482,32485,32487],{"class":89,"line":2654},[87,32475,32476],{"class":97},"train_loader",[87,32478,946],{"class":171},[87,32480,32481],{"class":97},"Data.DataLoader(",[87,32483,32484],{"class":492},"dataset",[87,32486,946],{"class":171},[87,32488,32489],{"class":97},"train_data,\n",[87,32491,32492,32495,32497,32499],{"class":89,"line":2683},[87,32493,32494],{"class":492},"                             batch_size",[87,32496,946],{"class":171},[87,32498,1299],{"class":104},[87,32500,32413],{"class":97},[87,32502,32503],{"class":89,"line":2688},[87,32504,32505],{"class":199},"                             # 数据是否打乱\n",[87,32507,32508,32511,32513,32515],{"class":89,"line":2705},[87,32509,32510],{"class":492},"                             shuffle",[87,32512,946],{"class":171},[87,32514,32423],{"class":104},[87,32516,32413],{"class":97},[87,32518,32519],{"class":89,"line":2710},[87,32520,32521],{"class":199},"                             # 规定加载数据的进程\n",[87,32523,32524,32527,32529,32531],{"class":89,"line":2715},[87,32525,32526],{"class":492},"                             num_workers",[87,32528,946],{"class":171},[87,32530,111],{"class":104},[87,32532,1108],{"class":97},[87,32534,32535],{"class":89,"line":2720},[87,32536,3355],{"emptyLinePlaceholder":1029},[87,32538,32539],{"class":89,"line":2734},[87,32540,32541],{"class":199},"# 获得一个batch的数据\n",[87,32543,32544,32546,32549,32551,32554],{"class":89,"line":2739},[87,32545,3979],{"class":171},[87,32547,32548],{"class":97}," step,(b_x,b_y) ",[87,32550,26990],{"class":171},[87,32552,32553],{"class":104}," enumerate",[87,32555,32556],{"class":97},"(train_loader):\n",[87,32558,32559,32561,32564,32566,32568],{"class":89,"line":3532},[87,32560,4055],{"class":171},[87,32562,32563],{"class":97}," step ",[87,32565,2051],{"class":171},[87,32567,577],{"class":104},[87,32569,4693],{"class":97},[87,32571,32572],{"class":89,"line":3546},[87,32573,32574],{"class":171},"        break\n",[87,32576,32577],{"class":89,"line":3554},[87,32578,32579],{"class":199},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[87,32581,32582,32585,32587,32590],{"class":89,"line":3559},[87,32583,32584],{"class":97},"batch_x",[87,32586,946],{"class":171},[87,32588,32589],{"class":97},"b_x.squeeze().numpy()  ",[87,32591,32592],{"class":199},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[87,32594,32595,32598,32600,32603],{"class":89,"line":3565},[87,32596,32597],{"class":97},"batch_y",[87,32599,946],{"class":171},[87,32601,32602],{"class":97},"b_y.numpy()   ",[87,32604,32605],{"class":199},"#将张量转换成功numpy数组\n",[87,32607,32608,32611,32613,32616],{"class":89,"line":3571},[87,32609,32610],{"class":97},"class_label",[87,32612,946],{"class":171},[87,32614,32615],{"class":97},"train_data.classes  ",[87,32617,32618],{"class":199},"#训练集标签\n",[87,32620,32621],{"class":89,"line":3576},[87,32622,32623],{"class":199},"# print(class_label)\n",[87,32625,32626],{"class":89,"line":8898},[87,32627,3355],{"emptyLinePlaceholder":1029},[87,32629,32630],{"class":89,"line":8922},[87,32631,32632],{"class":199},"# 可视化一个batch的图像\n",[87,32634,32635,32638,32641,32643,32645,32647,32649,32651],{"class":89,"line":8927},[87,32636,32637],{"class":97},"plt.figure(",[87,32639,32640],{"class":492},"figsize",[87,32642,946],{"class":171},[87,32644,165],{"class":97},[87,32646,1592],{"class":104},[87,32648,1473],{"class":97},[87,32650,1414],{"class":104},[87,32652,31444],{"class":97},[87,32654,32655,32657,32660,32662,32665,32667],{"class":89,"line":8933},[87,32656,3979],{"class":171},[87,32658,32659],{"class":97}," ii ",[87,32661,26990],{"class":171},[87,32663,32664],{"class":97}," np.arange(",[87,32666,8308],{"class":104},[87,32668,32669],{"class":97},"(batch_y)):\n",[87,32671,32672,32675,32677,32679,32681,32684,32686,32688],{"class":89,"line":8960},[87,32673,32674],{"class":97},"    plt.subplot(",[87,32676,1389],{"class":104},[87,32678,1473],{"class":97},[87,32680,1694],{"class":104},[87,32682,32683],{"class":97},",ii ",[87,32685,1575],{"class":171},[87,32687,568],{"class":104},[87,32689,1108],{"class":97},[87,32691,32692,32695,32698,32700],{"class":89,"line":8965},[87,32693,32694],{"class":97},"    plt.imshow(batch_x[ii,:,:],",[87,32696,32697],{"class":492},"cmap",[87,32699,946],{"class":171},[87,32701,32702],{"class":97},"plt.cm.gray)\n",[87,32704,32705,32708,32710,32712,32714],{"class":89,"line":8971},[87,32706,32707],{"class":97},"    plt.title(class_label[batch_y[ii]],",[87,32709,32443],{"class":492},[87,32711,946],{"class":171},[87,32713,242],{"class":104},[87,32715,1108],{"class":97},[87,32717,32718,32721,32724],{"class":89,"line":8983},[87,32719,32720],{"class":97},"    plt.axis(",[87,32722,32723],{"class":949},"\"off\"",[87,32725,1108],{"class":97},[87,32727,32728,32731,32734,32736,32739],{"class":89,"line":8995},[87,32729,32730],{"class":97},"    plt.subplots_adjust(",[87,32732,32733],{"class":492},"wspace",[87,32735,946],{"class":171},[87,32737,32738],{"class":104},"0.05",[87,32740,1108],{"class":97},[87,32742,32743],{"class":89,"line":9007},[87,32744,32745],{"class":97},"plt.show()\n",[19,32747,32748],{},"用matplotlib进行展示的过程可以后续再补",[19,32750,32751],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,32753,32754],{},"训练次数就是按照批次过整个训练集数据的次数",[19,32756,32757],{},"模型训练：",[77,32759,32761],{"className":31325,"code":32760,"language":31327,"meta":82,"style":82},"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",[84,32762,32763,32770,32777,32781,32793,32799,32810,32820,32830,32840,32850,32855,32867,32877,32881,32885,32890,32901,32914,32925,32942,32953,32992,33008,33020,33031,33036,33047,33063,33074,33085,33096,33103,33107,33112,33117,33121,33126,33136,33157,33161,33165,33170,33175,33180,33200,33204,33209,33219,33223,33228,33237,33242,33247,33252,33262,33266,33270,33275,33280,33290,33295,33305,33310,33319,33324,33333,33338,33347,33351,33356,33366,33370,33374,33379,33394,33422,33437,33441,33446,33451,33460,33465,33474,33479,33488,33493,33502,33507,33516,33521,33530,33535,33548,33553,33563,33568,33578,33584,33590,33596,33602,33613,33619,33639,33645,33656,33662,33668,33674,33680,33686,33692,33698,33718,33724,33740,33746,33760,33766,33781,33787,33796,33802,33811,33817,33823,33832,33838,33849,33855,33874,33880,33891,33897,33917,33933,33939,33953,33959,33965,33976,33982,33988,33998,34004,34015,34021,34031,34036,34042,34091,34138,34143,34149,34168,34174,34194,34200,34206,34216,34221,34227,34243,34288,34294,34300,34306,34317,34323,34329,34335,34353,34367,34376,34385,34394,34403,34409,34415,34423,34428,34434,34445,34451,34471,34477,34483,34489,34506,34512,34518,34524,34530,34536,34563,34587,34593,34599,34605,34616,34627,34633,34650,34673,34696,34702,34707,34716,34726,34732,34737,34743,34756,34762,34773,34784,34803],{"__ignoreMap":82},[87,32764,32765,32767],{"class":89,"line":90},[87,32766,31339],{"class":171},[87,32768,32769],{"class":97}," copy\n",[87,32771,32772,32774],{"class":89,"line":101},[87,32773,31339],{"class":171},[87,32775,32776],{"class":97}," time\n",[87,32778,32779],{"class":89,"line":120},[87,32780,3355],{"emptyLinePlaceholder":1029},[87,32782,32783,32785,32788,32790],{"class":89,"line":222},[87,32784,31339],{"class":171},[87,32786,32787],{"class":97}," pandas ",[87,32789,32330],{"class":171},[87,32791,32792],{"class":97}," pd\n",[87,32794,32795,32797],{"class":89,"line":234},[87,32796,31339],{"class":171},[87,32798,31342],{"class":97},[87,32800,32801,32803,32805,32807],{"class":89,"line":256},[87,32802,31684],{"class":171},[87,32804,32362],{"class":97},[87,32806,31339],{"class":171},[87,32808,32809],{"class":97}," Dataset\n",[87,32811,32812,32814,32816,32818],{"class":89,"line":269},[87,32813,31684],{"class":171},[87,32815,32315],{"class":97},[87,32817,31339],{"class":171},[87,32819,32320],{"class":97},[87,32821,32822,32824,32826,32828],{"class":89,"line":463},[87,32823,31684],{"class":171},[87,32825,32345],{"class":97},[87,32827,31339],{"class":171},[87,32829,32350],{"class":97},[87,32831,32832,32834,32836,32838],{"class":89,"line":469},[87,32833,31339],{"class":171},[87,32835,32362],{"class":97},[87,32837,32330],{"class":171},[87,32839,32367],{"class":97},[87,32841,32842,32844,32846,32848],{"class":89,"line":2287},[87,32843,31339],{"class":171},[87,32845,32379],{"class":97},[87,32847,32330],{"class":171},[87,32849,32384],{"class":97},[87,32851,32852],{"class":89,"line":2568},[87,32853,32854],{"class":199},"# 导入模型\n",[87,32856,32857,32859,32862,32864],{"class":89,"line":2573},[87,32858,31684],{"class":171},[87,32860,32861],{"class":97}," model ",[87,32863,31339],{"class":171},[87,32865,32866],{"class":97}," LeNet\n",[87,32868,32869,32871,32873,32875],{"class":89,"line":2579},[87,32870,31684],{"class":171},[87,32872,31687],{"class":97},[87,32874,31339],{"class":171},[87,32876,31692],{"class":97},[87,32878,32879],{"class":89,"line":2584},[87,32880,3355],{"emptyLinePlaceholder":1029},[87,32882,32883],{"class":89,"line":2598},[87,32884,3355],{"emptyLinePlaceholder":1029},[87,32886,32887],{"class":89,"line":2603},[87,32888,32889],{"class":199},"# 处理训练集与验证集函数--->划分数据集\n",[87,32891,32892,32895,32898],{"class":89,"line":2609},[87,32893,32894],{"class":171},"def",[87,32896,32897],{"class":205}," train_val_data_process",[87,32899,32900],{"class":97},"():\n",[87,32902,32903,32906,32908,32910,32912],{"class":89,"line":2630},[87,32904,32905],{"class":97},"    train_data",[87,32907,946],{"class":171},[87,32909,32402],{"class":97},[87,32911,32410],{"class":949},[87,32913,32413],{"class":97},[87,32915,32916,32919,32921,32923],{"class":89,"line":2635},[87,32917,32918],{"class":492},"                            train",[87,32920,946],{"class":171},[87,32922,32423],{"class":104},[87,32924,32413],{"class":97},[87,32926,32927,32930,32932,32934,32936,32938,32940],{"class":89,"line":2649},[87,32928,32929],{"class":492},"                            transform",[87,32931,946],{"class":171},[87,32933,32440],{"class":97},[87,32935,32443],{"class":492},[87,32937,946],{"class":171},[87,32939,1993],{"class":104},[87,32941,32451],{"class":97},[87,32943,32944,32947,32949,32951],{"class":89,"line":2654},[87,32945,32946],{"class":492},"                            download",[87,32948,946],{"class":171},[87,32950,32423],{"class":104},[87,32952,1108],{"class":97},[87,32954,32955,32958,32960,32963,32966,32968,32971,32973,32975,32978,32980,32982,32985,32987,32989],{"class":89,"line":2683},[87,32956,32957],{"class":97},"    train_data,val_data",[87,32959,946],{"class":171},[87,32961,32962],{"class":97},"Data.random_split(train_data,[",[87,32964,32965],{"class":104},"round",[87,32967,165],{"class":97},[87,32969,32970],{"class":104},"0.8",[87,32972,1549],{"class":171},[87,32974,8308],{"class":104},[87,32976,32977],{"class":97},"(train_data)),",[87,32979,32965],{"class":104},[87,32981,165],{"class":97},[87,32983,32984],{"class":104},"0.2",[87,32986,1549],{"class":171},[87,32988,8308],{"class":104},[87,32990,32991],{"class":97},"(train_data))])\n",[87,32993,32994,32997,32999,33002,33004,33006],{"class":89,"line":2688},[87,32995,32996],{"class":97},"    train_dataloader ",[87,32998,946],{"class":171},[87,33000,33001],{"class":97}," Data.DataLoader(",[87,33003,32484],{"class":492},[87,33005,946],{"class":171},[87,33007,32489],{"class":97},[87,33009,33010,33013,33015,33018],{"class":89,"line":2705},[87,33011,33012],{"class":492},"                                       batch_size",[87,33014,946],{"class":171},[87,33016,33017],{"class":104},"128",[87,33019,32413],{"class":97},[87,33021,33022,33025,33027,33029],{"class":89,"line":2710},[87,33023,33024],{"class":492},"                                       shuffle",[87,33026,946],{"class":171},[87,33028,32423],{"class":104},[87,33030,32413],{"class":97},[87,33032,33033],{"class":89,"line":2715},[87,33034,33035],{"class":199},"                                       # 规定8个进程\n",[87,33037,33038,33041,33043,33045],{"class":89,"line":2720},[87,33039,33040],{"class":492},"                                       num_workers",[87,33042,946],{"class":171},[87,33044,1490],{"class":104},[87,33046,1108],{"class":97},[87,33048,33049,33052,33054,33056,33058,33060],{"class":89,"line":2734},[87,33050,33051],{"class":97},"    val_dataloader",[87,33053,946],{"class":171},[87,33055,32481],{"class":97},[87,33057,32484],{"class":492},[87,33059,946],{"class":171},[87,33061,33062],{"class":97},"val_data,\n",[87,33064,33065,33068,33070,33072],{"class":89,"line":2739},[87,33066,33067],{"class":492},"                                   batch_size",[87,33069,946],{"class":171},[87,33071,33017],{"class":104},[87,33073,32413],{"class":97},[87,33075,33076,33079,33081,33083],{"class":89,"line":3532},[87,33077,33078],{"class":492},"                                   shuffle",[87,33080,946],{"class":171},[87,33082,32423],{"class":104},[87,33084,32413],{"class":97},[87,33086,33087,33090,33092,33094],{"class":89,"line":3546},[87,33088,33089],{"class":492},"                                   num_workers",[87,33091,946],{"class":171},[87,33093,1490],{"class":104},[87,33095,1108],{"class":97},[87,33097,33098,33100],{"class":89,"line":3554},[87,33099,5044],{"class":171},[87,33101,33102],{"class":97}," train_dataloader,val_dataloader\n",[87,33104,33105],{"class":89,"line":3559},[87,33106,3355],{"emptyLinePlaceholder":1029},[87,33108,33109],{"class":89,"line":3565},[87,33110,33111],{"class":199},"# 验证是否出错\n",[87,33113,33114],{"class":89,"line":3571},[87,33115,33116],{"class":199},"# train_val_data_process()\n",[87,33118,33119],{"class":89,"line":3576},[87,33120,3355],{"emptyLinePlaceholder":1029},[87,33122,33123],{"class":89,"line":8898},[87,33124,33125],{"class":199},"# 定义模型训练函数\n",[87,33127,33128,33130,33133],{"class":89,"line":8922},[87,33129,32894],{"class":171},[87,33131,33132],{"class":205}," train_model_process",[87,33134,33135],{"class":97},"(model,train_dataloader,val_dataloader,num_epochs):\n",[87,33137,33138,33140,33142,33144,33146,33148,33150,33152,33155],{"class":89,"line":8927},[87,33139,32184],{"class":97},[87,33141,946],{"class":171},[87,33143,31398],{"class":97},[87,33145,32191],{"class":949},[87,33147,2660],{"class":171},[87,33149,32196],{"class":97},[87,33151,2657],{"class":171},[87,33153,33154],{"class":949}," 'cpu'",[87,33156,1108],{"class":97},[87,33158,33159],{"class":89,"line":8933},[87,33160,3355],{"emptyLinePlaceholder":1029},[87,33162,33163],{"class":89,"line":8960},[87,33164,3355],{"emptyLinePlaceholder":1029},[87,33166,33167],{"class":89,"line":8965},[87,33168,33169],{"class":199},"    # 定义优化器\n",[87,33171,33172],{"class":89,"line":8971},[87,33173,33174],{"class":199},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[87,33176,33177],{"class":89,"line":8983},[87,33178,33179],{"class":199},"    # lr为学习率\n",[87,33181,33182,33185,33187,33190,33193,33195,33198],{"class":89,"line":8995},[87,33183,33184],{"class":97},"    optimizer",[87,33186,946],{"class":171},[87,33188,33189],{"class":97},"torch.optim.Adam(model.parameters(),",[87,33191,33192],{"class":492},"lr",[87,33194,946],{"class":171},[87,33196,33197],{"class":104},"0.001",[87,33199,1108],{"class":97},[87,33201,33202],{"class":89,"line":9007},[87,33203,3355],{"emptyLinePlaceholder":1029},[87,33205,33206],{"class":89,"line":10666},[87,33207,33208],{"class":199},"    # 定义损失函数使用交叉熵损失函数\n",[87,33210,33211,33214,33216],{"class":89,"line":10691},[87,33212,33213],{"class":97},"    criterion",[87,33215,946],{"class":171},[87,33217,33218],{"class":97},"nn.CrossEntropyLoss()\n",[87,33220,33221],{"class":89,"line":10714},[87,33222,3355],{"emptyLinePlaceholder":1029},[87,33224,33225],{"class":89,"line":10738},[87,33226,33227],{"class":199},"    # 将模型放到GPU中进行训练\n",[87,33229,33230,33232,33234],{"class":89,"line":10743},[87,33231,32236],{"class":97},[87,33233,946],{"class":171},[87,33235,33236],{"class":97},"model.to(device)\n",[87,33238,33239],{"class":89,"line":10748},[87,33240,33241],{"class":199},"    # 复制当前模型的参数\n",[87,33243,33244],{"class":89,"line":10753},[87,33245,33246],{"class":199},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[87,33248,33249],{"class":89,"line":10762},[87,33250,33251],{"class":199},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[87,33253,33254,33257,33259],{"class":89,"line":10767},[87,33255,33256],{"class":97},"    best_model_wts",[87,33258,946],{"class":171},[87,33260,33261],{"class":97},"copy.deepcopy(model.state_dict())\n",[87,33263,33264],{"class":89,"line":10773},[87,33265,3355],{"emptyLinePlaceholder":1029},[87,33267,33268],{"class":89,"line":10794},[87,33269,3355],{"emptyLinePlaceholder":1029},[87,33271,33272],{"class":89,"line":10800},[87,33273,33274],{"class":199},"    # 初始化参数\n",[87,33276,33277],{"class":89,"line":10814},[87,33278,33279],{"class":199},"    # 最高准确度\n",[87,33281,33282,33285,33287],{"class":89,"line":10820},[87,33283,33284],{"class":97},"    best_acc",[87,33286,946],{"class":171},[87,33288,33289],{"class":104},"0.0\n",[87,33291,33292],{"class":89,"line":10847},[87,33293,33294],{"class":199},"    # 训练集损失列表\n",[87,33296,33297,33300,33302],{"class":89,"line":10856},[87,33298,33299],{"class":97},"    train_loss_all",[87,33301,946],{"class":171},[87,33303,33304],{"class":97},"[]\n",[87,33306,33307],{"class":89,"line":10862},[87,33308,33309],{"class":199},"    # 验证集函数列表\n",[87,33311,33312,33315,33317],{"class":89,"line":10870},[87,33313,33314],{"class":97},"    val_loss_all",[87,33316,946],{"class":171},[87,33318,33304],{"class":97},[87,33320,33321],{"class":89,"line":10875},[87,33322,33323],{"class":199},"    # 训练集准确度列表\n",[87,33325,33326,33329,33331],{"class":89,"line":17553},[87,33327,33328],{"class":97},"    train_acc_all",[87,33330,946],{"class":171},[87,33332,33304],{"class":97},[87,33334,33335],{"class":89,"line":17559},[87,33336,33337],{"class":199},"    # 验证集准确度列表\n",[87,33339,33340,33343,33345],{"class":89,"line":17582},[87,33341,33342],{"class":97},"    val_acc_all",[87,33344,946],{"class":171},[87,33346,33304],{"class":97},[87,33348,33349],{"class":89,"line":17588},[87,33350,3355],{"emptyLinePlaceholder":1029},[87,33352,33353],{"class":89,"line":17611},[87,33354,33355],{"class":199},"    # 保存当前时间--->方便看每轮训练的时间\n",[87,33357,33358,33361,33363],{"class":89,"line":17625},[87,33359,33360],{"class":97},"    since",[87,33362,946],{"class":171},[87,33364,33365],{"class":97},"time.time()\n",[87,33367,33368],{"class":89,"line":17645},[87,33369,3355],{"emptyLinePlaceholder":1029},[87,33371,33372],{"class":89,"line":17651},[87,33373,3355],{"emptyLinePlaceholder":1029},[87,33375,33376],{"class":89,"line":17662},[87,33377,33378],{"class":199},"    # 准备工作完成--->开始训练模型\n",[87,33380,33381,33383,33386,33388,33391],{"class":89,"line":17685},[87,33382,4155],{"class":171},[87,33384,33385],{"class":97}," epoch ",[87,33387,26990],{"class":171},[87,33389,33390],{"class":104}," range",[87,33392,33393],{"class":97},"(num_epochs):\n",[87,33395,33396,33399,33401,33404,33407,33409,33411,33413,33416,33418,33420],{"class":89,"line":17707},[87,33397,33398],{"class":104},"        print",[87,33400,165],{"class":97},[87,33402,33403],{"class":949},"\"Epoch ",[87,33405,33406],{"class":104},"{}",[87,33408,1677],{"class":949},[87,33410,33406],{"class":104},[87,33412,1347],{"class":949},[87,33414,33415],{"class":97},".format(epoch,num_epochs",[87,33417,1625],{"class":171},[87,33419,1313],{"class":104},[87,33421,31444],{"class":97},[87,33423,33424,33426,33428,33431,33433,33435],{"class":89,"line":17712},[87,33425,33398],{"class":104},[87,33427,165],{"class":97},[87,33429,33430],{"class":949},"\"-\"",[87,33432,1549],{"class":171},[87,33434,242],{"class":104},[87,33436,1108],{"class":97},[87,33438,33439],{"class":89,"line":17718},[87,33440,3355],{"emptyLinePlaceholder":1029},[87,33442,33443],{"class":89,"line":17732},[87,33444,33445],{"class":199},"        # 初始化参数\n",[87,33447,33448],{"class":89,"line":17745},[87,33449,33450],{"class":199},"        # 训练集损失函数\n",[87,33452,33453,33456,33458],{"class":89,"line":17750},[87,33454,33455],{"class":97},"        train_loss",[87,33457,946],{"class":171},[87,33459,33289],{"class":104},[87,33461,33462],{"class":89,"line":17764},[87,33463,33464],{"class":199},"        # 训练集准确度\n",[87,33466,33467,33470,33472],{"class":89,"line":17769},[87,33468,33469],{"class":97},"        train_corrects",[87,33471,946],{"class":171},[87,33473,4039],{"class":104},[87,33475,33476],{"class":89,"line":17775},[87,33477,33478],{"class":199},"        # 验证集损失函数\n",[87,33480,33481,33484,33486],{"class":89,"line":17780},[87,33482,33483],{"class":97},"        val_loss",[87,33485,946],{"class":171},[87,33487,33289],{"class":104},[87,33489,33490],{"class":89,"line":17794},[87,33491,33492],{"class":199},"        # 验证集准确度\n",[87,33494,33495,33498,33500],{"class":89,"line":17799},[87,33496,33497],{"class":97},"        val_corrects",[87,33499,946],{"class":171},[87,33501,4039],{"class":104},[87,33503,33504],{"class":89,"line":17804},[87,33505,33506],{"class":199},"        # 训练集样本数量\n",[87,33508,33509,33512,33514],{"class":89,"line":17818},[87,33510,33511],{"class":97},"        train_num",[87,33513,946],{"class":171},[87,33515,4039],{"class":104},[87,33517,33518],{"class":89,"line":17830},[87,33519,33520],{"class":199},"        # 验证集样本数量\n",[87,33522,33523,33526,33528],{"class":89,"line":17835},[87,33524,33525],{"class":97},"        val_num",[87,33527,946],{"class":171},[87,33529,4039],{"class":104},[87,33531,33532],{"class":89,"line":17848},[87,33533,33534],{"class":199},"        # 将数据放到设备,并开始训练\n",[87,33536,33537,33539,33541,33543,33545],{"class":89,"line":17853},[87,33538,4357],{"class":171},[87,33540,32548],{"class":97},[87,33542,26990],{"class":171},[87,33544,32553],{"class":104},[87,33546,33547],{"class":97},"(train_dataloader):\n",[87,33549,33550],{"class":89,"line":17858},[87,33551,33552],{"class":199},"            # 将特征放入到训练设备\n",[87,33554,33555,33558,33560],{"class":89,"line":17863},[87,33556,33557],{"class":97},"            b_x",[87,33559,946],{"class":171},[87,33561,33562],{"class":97},"b_x.to(device)\n",[87,33564,33565],{"class":89,"line":17876},[87,33566,33567],{"class":199},"            # 将标签放入到训练设备当中\n",[87,33569,33570,33573,33575],{"class":89,"line":17881},[87,33571,33572],{"class":97},"            b_y",[87,33574,946],{"class":171},[87,33576,33577],{"class":97},"b_y.to(device)\n",[87,33579,33581],{"class":89,"line":33580},98,[87,33582,33583],{"class":199},"            # 设置模型为训练模式\n",[87,33585,33587],{"class":89,"line":33586},99,[87,33588,33589],{"class":97},"            model.train()\n",[87,33591,33593],{"class":89,"line":33592},100,[87,33594,33595],{"class":199},"            # 将数据放到模型当中,开始前向传播\n",[87,33597,33599],{"class":89,"line":33598},101,[87,33600,33601],{"class":199},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[87,33603,33605,33608,33610],{"class":89,"line":33604},102,[87,33606,33607],{"class":97},"            output",[87,33609,946],{"class":171},[87,33611,33612],{"class":97},"model(b_x)\n",[87,33614,33616],{"class":89,"line":33615},103,[87,33617,33618],{"class":199},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[87,33620,33622,33625,33627,33630,33633,33635,33637],{"class":89,"line":33621},104,[87,33623,33624],{"class":97},"            pre_lab",[87,33626,946],{"class":171},[87,33628,33629],{"class":97},"torch.argmax(output,",[87,33631,33632],{"class":492},"dim",[87,33634,946],{"class":171},[87,33636,1313],{"class":104},[87,33638,1108],{"class":97},[87,33640,33642],{"class":89,"line":33641},105,[87,33643,33644],{"class":199},"            # 计算每一个batch的损失函数\n",[87,33646,33648,33651,33653],{"class":89,"line":33647},106,[87,33649,33650],{"class":97},"            loss",[87,33652,946],{"class":171},[87,33654,33655],{"class":97},"criterion(output,b_y)\n",[87,33657,33659],{"class":89,"line":33658},107,[87,33660,33661],{"class":199},"            # 将梯度初始化为0\n",[87,33663,33665],{"class":89,"line":33664},108,[87,33666,33667],{"class":97},"            optimizer.zero_grad()\n",[87,33669,33671],{"class":89,"line":33670},109,[87,33672,33673],{"class":199},"            # 梯度置为0后再进行反向传播\n",[87,33675,33677],{"class":89,"line":33676},110,[87,33678,33679],{"class":97},"            loss.backward()\n",[87,33681,33683],{"class":89,"line":33682},111,[87,33684,33685],{"class":199},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[87,33687,33689],{"class":89,"line":33688},112,[87,33690,33691],{"class":97},"            optimizer.step()\n",[87,33693,33695],{"class":89,"line":33694},113,[87,33696,33697],{"class":199},"            # loss.item()指的是batch的平均损失\n",[87,33699,33701,33704,33706,33709,33711,33714,33716],{"class":89,"line":33700},114,[87,33702,33703],{"class":97},"            train_loss",[87,33705,10427],{"class":171},[87,33707,33708],{"class":97},"loss.item()",[87,33710,1549],{"class":171},[87,33712,33713],{"class":97},"b_x.size(",[87,33715,111],{"class":104},[87,33717,1108],{"class":97},[87,33719,33721],{"class":89,"line":33720},115,[87,33722,33723],{"class":199},"            # 计算每个批次中正确预测的数量\n",[87,33725,33727,33730,33732,33735,33737],{"class":89,"line":33726},116,[87,33728,33729],{"class":97},"            train_corrects",[87,33731,10427],{"class":171},[87,33733,33734],{"class":97},"torch.sum(pre_lab",[87,33736,3903],{"class":171},[87,33738,33739],{"class":97},"b_y.data)\n",[87,33741,33743],{"class":89,"line":33742},117,[87,33744,33745],{"class":199},"            # 计算目前为止一共处理了多少样本\n",[87,33747,33749,33752,33754,33756,33758],{"class":89,"line":33748},118,[87,33750,33751],{"class":97},"            train_num",[87,33753,10427],{"class":171},[87,33755,33713],{"class":97},[87,33757,111],{"class":104},[87,33759,1108],{"class":97},[87,33761,33763],{"class":89,"line":33762},119,[87,33764,33765],{"class":199},"        # 验证数据\n",[87,33767,33769,33771,33774,33776,33778],{"class":89,"line":33768},120,[87,33770,4357],{"class":171},[87,33772,33773],{"class":97}," step ,(b_x,b_y) ",[87,33775,26990],{"class":171},[87,33777,32553],{"class":104},[87,33779,33780],{"class":97},"(val_dataloader):\n",[87,33782,33784],{"class":89,"line":33783},121,[87,33785,33786],{"class":199},"            # 将特征放到验证设备当中\n",[87,33788,33790,33792,33794],{"class":89,"line":33789},122,[87,33791,33557],{"class":97},[87,33793,946],{"class":171},[87,33795,33562],{"class":97},[87,33797,33799],{"class":89,"line":33798},123,[87,33800,33801],{"class":199},"            # 将标签放到放到训练设备当中\n",[87,33803,33805,33807,33809],{"class":89,"line":33804},124,[87,33806,33572],{"class":97},[87,33808,946],{"class":171},[87,33810,33577],{"class":97},[87,33812,33814],{"class":89,"line":33813},125,[87,33815,33816],{"class":199},"            # 开启验证模式，设置模型为评估模式\n",[87,33818,33820],{"class":89,"line":33819},126,[87,33821,33822],{"class":97},"            model.eval()\n",[87,33824,33826,33829],{"class":89,"line":33825},127,[87,33827,33828],{"class":171},"            with",[87,33830,33831],{"class":97}," torch.no_grad():\n",[87,33833,33835],{"class":89,"line":33834},128,[87,33836,33837],{"class":199},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[87,33839,33841,33844,33846],{"class":89,"line":33840},129,[87,33842,33843],{"class":97},"                output ",[87,33845,946],{"class":171},[87,33847,33848],{"class":97}," model(b_x)\n",[87,33850,33852],{"class":89,"line":33851},130,[87,33853,33854],{"class":199},"                # 查找每一行中最大值对应的下标\n",[87,33856,33858,33861,33863,33866,33868,33870,33872],{"class":89,"line":33857},131,[87,33859,33860],{"class":97},"                pre_lab ",[87,33862,946],{"class":171},[87,33864,33865],{"class":97}," torch.argmax(output, ",[87,33867,33632],{"class":492},[87,33869,946],{"class":171},[87,33871,1313],{"class":104},[87,33873,1108],{"class":97},[87,33875,33877],{"class":89,"line":33876},132,[87,33878,33879],{"class":199},"                # 计算验证集上的当前 batch 损失\n",[87,33881,33883,33886,33888],{"class":89,"line":33882},133,[87,33884,33885],{"class":97},"                val_batch_loss ",[87,33887,946],{"class":171},[87,33889,33890],{"class":97}," criterion(output, b_y)\n",[87,33892,33894],{"class":89,"line":33893},134,[87,33895,33896],{"class":199},"                # 对损失函数进行累加（按样本数加权）\n",[87,33898,33900,33903,33905,33908,33910,33913,33915],{"class":89,"line":33899},135,[87,33901,33902],{"class":97},"                val_loss ",[87,33904,10427],{"class":171},[87,33906,33907],{"class":97}," val_batch_loss.item() ",[87,33909,1549],{"class":171},[87,33911,33912],{"class":97}," b_x.size(",[87,33914,111],{"class":104},[87,33916,1108],{"class":97},[87,33918,33920,33923,33925,33928,33930],{"class":89,"line":33919},136,[87,33921,33922],{"class":97},"                val_corrects ",[87,33924,10427],{"class":171},[87,33926,33927],{"class":97}," torch.sum(pre_lab ",[87,33929,3903],{"class":171},[87,33931,33932],{"class":97}," b_y.data)\n",[87,33934,33936],{"class":89,"line":33935},137,[87,33937,33938],{"class":199},"                # 当前用于验证的样本数量\n",[87,33940,33942,33945,33947,33949,33951],{"class":89,"line":33941},138,[87,33943,33944],{"class":97},"            val_num ",[87,33946,10427],{"class":171},[87,33948,33912],{"class":97},[87,33950,111],{"class":104},[87,33952,1108],{"class":97},[87,33954,33956],{"class":89,"line":33955},139,[87,33957,33958],{"class":199},"        # 计算并保存每一次迭代的loss值和准确率\n",[87,33960,33962],{"class":89,"line":33961},140,[87,33963,33964],{"class":199},"        # 计算并保存训练集的loss值\n",[87,33966,33968,33971,33973],{"class":89,"line":33967},141,[87,33969,33970],{"class":97},"        train_loss_all.append(train_loss",[87,33972,1677],{"class":171},[87,33974,33975],{"class":97},"train_num)\n",[87,33977,33979],{"class":89,"line":33978},142,[87,33980,33981],{"class":199},"        # 取双精度\n",[87,33983,33985],{"class":89,"line":33984},143,[87,33986,33987],{"class":199},"        # 计算并保存训练集的准确率\n",[87,33989,33991,33994,33996],{"class":89,"line":33990},144,[87,33992,33993],{"class":97},"        train_acc_all.append(train_corrects.double().item()",[87,33995,1677],{"class":171},[87,33997,33975],{"class":97},[87,33999,34001],{"class":89,"line":34000},145,[87,34002,34003],{"class":199},"        # 计算并保存验证集的loss值\n",[87,34005,34007,34010,34012],{"class":89,"line":34006},146,[87,34008,34009],{"class":97},"        val_loss_all.append(val_loss",[87,34011,1677],{"class":171},[87,34013,34014],{"class":97},"val_num)\n",[87,34016,34018],{"class":89,"line":34017},147,[87,34019,34020],{"class":199},"        # 计算并保存验证集的准确率\n",[87,34022,34024,34027,34029],{"class":89,"line":34023},148,[87,34025,34026],{"class":97},"        val_acc_all.append(val_corrects.double().item()",[87,34028,1677],{"class":171},[87,34030,34014],{"class":97},[87,34032,34034],{"class":89,"line":34033},149,[87,34035,3355],{"emptyLinePlaceholder":1029},[87,34037,34039],{"class":89,"line":34038},150,[87,34040,34041],{"class":199},"        # 打印训练一轮的loss值和准确率\n",[87,34043,34045,34047,34049,34051,34053,34056,34058,34061,34063,34066,34068,34070,34072,34074,34077,34079,34081,34084,34086,34088],{"class":89,"line":34044},151,[87,34046,33398],{"class":104},[87,34048,165],{"class":97},[87,34050,4546],{"class":949},[87,34052,33406],{"class":104},[87,34054,34055],{"class":949},"train loss:",[87,34057,1988],{"class":104},[87,34059,34060],{"class":171},":.4f",[87,34062,2037],{"class":104},[87,34064,34065],{"class":949}," train acc:",[87,34067,1988],{"class":104},[87,34069,34060],{"class":171},[87,34071,2037],{"class":104},[87,34073,4546],{"class":949},[87,34075,34076],{"class":97},".format(epoch,train_loss_all[",[87,34078,1625],{"class":171},[87,34080,1313],{"class":104},[87,34082,34083],{"class":97},"],train_acc_all[",[87,34085,1625],{"class":171},[87,34087,1313],{"class":104},[87,34089,34090],{"class":97},"]))\n",[87,34092,34094,34096,34098,34100,34102,34105,34107,34109,34111,34114,34116,34118,34120,34122,34125,34127,34129,34132,34134,34136],{"class":89,"line":34093},152,[87,34095,33398],{"class":104},[87,34097,165],{"class":97},[87,34099,4546],{"class":949},[87,34101,33406],{"class":104},[87,34103,34104],{"class":949},"val loss:",[87,34106,1988],{"class":104},[87,34108,34060],{"class":171},[87,34110,2037],{"class":104},[87,34112,34113],{"class":949}," val acc:",[87,34115,1988],{"class":104},[87,34117,34060],{"class":171},[87,34119,2037],{"class":104},[87,34121,4546],{"class":949},[87,34123,34124],{"class":97},".format(epoch,val_loss_all[",[87,34126,1625],{"class":171},[87,34128,1313],{"class":104},[87,34130,34131],{"class":97},"],val_acc_all[",[87,34133,1625],{"class":171},[87,34135,1313],{"class":104},[87,34137,34090],{"class":97},[87,34139,34141],{"class":89,"line":34140},153,[87,34142,3355],{"emptyLinePlaceholder":1029},[87,34144,34146],{"class":89,"line":34145},154,[87,34147,34148],{"class":199},"        # 判断准确度--->保存最优模型\n",[87,34150,34152,34154,34157,34159,34161,34163,34165],{"class":89,"line":34151},155,[87,34153,3452],{"class":171},[87,34155,34156],{"class":97}," val_acc_all[",[87,34158,1625],{"class":171},[87,34160,1313],{"class":104},[87,34162,2031],{"class":97},[87,34164,2051],{"class":171},[87,34166,34167],{"class":97},"best_acc:\n",[87,34169,34171],{"class":89,"line":34170},156,[87,34172,34173],{"class":199},"            # 保存当前模型准确度\n",[87,34175,34177,34180,34182,34184,34187,34189,34191],{"class":89,"line":34176},157,[87,34178,34179],{"class":97},"            best_acc:",[87,34181,1141],{"class":104},[87,34183,946],{"class":171},[87,34185,34186],{"class":97},"val_acc_all[",[87,34188,1625],{"class":171},[87,34190,1313],{"class":104},[87,34192,34193],{"class":97},"]\n",[87,34195,34197],{"class":89,"line":34196},158,[87,34198,34199],{"class":199},"            # 保存当前的准确度\n",[87,34201,34203],{"class":89,"line":34202},159,[87,34204,34205],{"class":199},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[87,34207,34209,34212,34214],{"class":89,"line":34208},160,[87,34210,34211],{"class":97},"            best_model_wts",[87,34213,946],{"class":171},[87,34215,33261],{"class":97},[87,34217,34219],{"class":89,"line":34218},161,[87,34220,3355],{"emptyLinePlaceholder":1029},[87,34222,34224],{"class":89,"line":34223},162,[87,34225,34226],{"class":199},"        # 计算耗时\n",[87,34228,34230,34233,34235,34238,34240],{"class":89,"line":34229},163,[87,34231,34232],{"class":97},"        time_use",[87,34234,946],{"class":171},[87,34236,34237],{"class":97},"time.time()",[87,34239,1625],{"class":171},[87,34241,34242],{"class":97},"since\n",[87,34244,34246,34248,34250,34253,34255,34258,34260,34262,34264,34266,34268,34271,34274,34277,34279,34282,34284,34286],{"class":89,"line":34245},164,[87,34247,33398],{"class":104},[87,34249,165],{"class":97},[87,34251,34252],{"class":949},"'训练和验证耗费的时间",[87,34254,1988],{"class":104},[87,34256,34257],{"class":171},":.0f",[87,34259,2037],{"class":104},[87,34261,1637],{"class":949},[87,34263,1988],{"class":104},[87,34265,34257],{"class":171},[87,34267,2037],{"class":104},[87,34269,34270],{"class":949},"s'",[87,34272,34273],{"class":97},".format(time_use",[87,34275,34276],{"class":171},"\u002F\u002F",[87,34278,1999],{"class":104},[87,34280,34281],{"class":97},",time_use",[87,34283,1423],{"class":171},[87,34285,1999],{"class":104},[87,34287,31444],{"class":97},[87,34289,34291],{"class":89,"line":34290},165,[87,34292,34293],{"class":199},"    # 选择最优参数\n",[87,34295,34297],{"class":89,"line":34296},166,[87,34298,34299],{"class":199},"    # 加载最高准确率下的模型参数\n",[87,34301,34303],{"class":89,"line":34302},167,[87,34304,34305],{"class":199},"    # model.load_state_dict(best_model_wts)\n",[87,34307,34309,34312,34315],{"class":89,"line":34308},168,[87,34310,34311],{"class":97},"    torch.save(model.state_dict(best_model_wts), ",[87,34313,34314],{"class":949},"'.\u002Fbest_model.pth'",[87,34316,1108],{"class":97},[87,34318,34320],{"class":89,"line":34319},169,[87,34321,34322],{"class":199},"    # 或者写成\n",[87,34324,34326],{"class":89,"line":34325},170,[87,34327,34328],{"class":199},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[87,34330,34332],{"class":89,"line":34331},171,[87,34333,34334],{"class":199},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[87,34336,34338,34341,34343,34346,34349,34351],{"class":89,"line":34337},172,[87,34339,34340],{"class":97},"    train_process",[87,34342,946],{"class":171},[87,34344,34345],{"class":97},"pd.DataFrame(",[87,34347,34348],{"class":492},"data",[87,34350,946],{"class":171},[87,34352,2503],{"class":97},[87,34354,34356,34359,34361,34364],{"class":89,"line":34355},173,[87,34357,34358],{"class":949},"        \"epoch\"",[87,34360,1951],{"class":97},[87,34362,34363],{"class":104},"range",[87,34365,34366],{"class":97},"(num_epochs),\n",[87,34368,34370,34373],{"class":89,"line":34369},174,[87,34371,34372],{"class":949},"        \"train_loss_all\"",[87,34374,34375],{"class":97},":train_loss_all,\n",[87,34377,34379,34382],{"class":89,"line":34378},175,[87,34380,34381],{"class":949},"        \"val_loss_all\"",[87,34383,34384],{"class":97},":val_loss_all,\n",[87,34386,34388,34391],{"class":89,"line":34387},176,[87,34389,34390],{"class":949},"        \"train_acc_all\"",[87,34392,34393],{"class":97},":train_acc_all,\n",[87,34395,34397,34400],{"class":89,"line":34396},177,[87,34398,34399],{"class":949},"        \"val_acc_all\"",[87,34401,34402],{"class":97},":val_acc_all\n",[87,34404,34406],{"class":89,"line":34405},178,[87,34407,34408],{"class":97},"    })\n",[87,34410,34412],{"class":89,"line":34411},179,[87,34413,34414],{"class":199},"    # 返回训练保存的过程\n",[87,34416,34418,34420],{"class":89,"line":34417},180,[87,34419,5044],{"class":171},[87,34421,34422],{"class":97}," train_process\n",[87,34424,34426],{"class":89,"line":34425},181,[87,34427,3355],{"emptyLinePlaceholder":1029},[87,34429,34431],{"class":89,"line":34430},182,[87,34432,34433],{"class":199},"# 将loss值和精度按照图片的形式展示出来\n",[87,34435,34437,34439,34442],{"class":89,"line":34436},183,[87,34438,32894],{"class":171},[87,34440,34441],{"class":205}," matplot_acc_loss",[87,34443,34444],{"class":97},"(train_process):\n",[87,34446,34448],{"class":89,"line":34447},184,[87,34449,34450],{"class":199},"    # 设置图的大小\n",[87,34452,34454,34457,34459,34461,34463,34465,34467,34469],{"class":89,"line":34453},185,[87,34455,34456],{"class":97},"    plt.figure(",[87,34458,32640],{"class":492},[87,34460,946],{"class":171},[87,34462,165],{"class":97},[87,34464,1592],{"class":104},[87,34466,1473],{"class":97},[87,34468,1389],{"class":104},[87,34470,31444],{"class":97},[87,34472,34474],{"class":89,"line":34473},186,[87,34475,34476],{"class":199},"    # 设置图中有几张图\n",[87,34478,34480],{"class":89,"line":34479},187,[87,34481,34482],{"class":199},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[87,34484,34486],{"class":89,"line":34485},188,[87,34487,34488],{"class":199},"    # ①loss图\n",[87,34490,34492,34494,34496,34498,34500,34502,34504],{"class":89,"line":34491},189,[87,34493,32674],{"class":97},[87,34495,1313],{"class":104},[87,34497,1473],{"class":97},[87,34499,1176],{"class":104},[87,34501,1473],{"class":97},[87,34503,1313],{"class":104},[87,34505,1108],{"class":97},[87,34507,34509],{"class":89,"line":34508},190,[87,34510,34511],{"class":199},"    # 补充:\n",[87,34513,34515],{"class":89,"line":34514},191,[87,34516,34517],{"class":199},"    # plt.subplot(nrows, ncols, index)\n",[87,34519,34521],{"class":89,"line":34520},192,[87,34522,34523],{"class":199},"    # nrows：行数\n",[87,34525,34527],{"class":89,"line":34526},193,[87,34528,34529],{"class":199},"    # ncols：列数\n",[87,34531,34533],{"class":89,"line":34532},194,[87,34534,34535],{"class":199},"    # index：目前选中第几个子图（从1开始）\n",[87,34537,34539,34542,34545,34548,34551,34553,34556,34558,34561],{"class":89,"line":34538},195,[87,34540,34541],{"class":97},"    plt.plot(train_process[",[87,34543,34544],{"class":949},"\"epoch\"",[87,34546,34547],{"class":97},"],train_process.train_loss_all,",[87,34549,34550],{"class":949},"'ro-'",[87,34552,1473],{"class":97},[87,34554,34555],{"class":492},"label",[87,34557,946],{"class":171},[87,34559,34560],{"class":949},"'train loss'",[87,34562,1108],{"class":97},[87,34564,34566,34568,34570,34573,34576,34578,34580,34582,34585],{"class":89,"line":34565},196,[87,34567,34541],{"class":97},[87,34569,34544],{"class":949},[87,34571,34572],{"class":97},"],train_process.val_loss_all,",[87,34574,34575],{"class":949},"'bs--'",[87,34577,1473],{"class":97},[87,34579,34555],{"class":492},[87,34581,946],{"class":171},[87,34583,34584],{"class":949},"'val loss'",[87,34586,1108],{"class":97},[87,34588,34590],{"class":89,"line":34589},197,[87,34591,34592],{"class":199},"    # 添加一个图例\n",[87,34594,34596],{"class":89,"line":34595},198,[87,34597,34598],{"class":97},"    plt.legend()\n",[87,34600,34602],{"class":89,"line":34601},199,[87,34603,34604],{"class":199},"    # 给轴添加标签\n",[87,34606,34608,34611,34614],{"class":89,"line":34607},200,[87,34609,34610],{"class":97},"    plt.xlabel(",[87,34612,34613],{"class":949},"'epoch'",[87,34615,1108],{"class":97},[87,34617,34619,34622,34625],{"class":89,"line":34618},201,[87,34620,34621],{"class":97},"    plt.ylabel(",[87,34623,34624],{"class":949},"'loss'",[87,34626,1108],{"class":97},[87,34628,34630],{"class":89,"line":34629},202,[87,34631,34632],{"class":199},"    # ②准确度图\n",[87,34634,34636,34638,34640,34642,34644,34646,34648],{"class":89,"line":34635},203,[87,34637,32674],{"class":97},[87,34639,1313],{"class":104},[87,34641,1473],{"class":97},[87,34643,1176],{"class":104},[87,34645,1473],{"class":97},[87,34647,1176],{"class":104},[87,34649,1108],{"class":97},[87,34651,34653,34655,34657,34660,34662,34664,34666,34668,34671],{"class":89,"line":34652},204,[87,34654,34541],{"class":97},[87,34656,34544],{"class":949},[87,34658,34659],{"class":97},"],train_process.train_acc_all,",[87,34661,34550],{"class":949},[87,34663,1473],{"class":97},[87,34665,34555],{"class":492},[87,34667,946],{"class":171},[87,34669,34670],{"class":949},"'train acc'",[87,34672,1108],{"class":97},[87,34674,34676,34678,34680,34683,34685,34687,34689,34691,34694],{"class":89,"line":34675},205,[87,34677,34541],{"class":97},[87,34679,34544],{"class":949},[87,34681,34682],{"class":97},"],train_process.val_acc_all,",[87,34684,34575],{"class":949},[87,34686,1473],{"class":97},[87,34688,34555],{"class":492},[87,34690,946],{"class":171},[87,34692,34693],{"class":949},"'val acc'",[87,34695,1108],{"class":97},[87,34697,34699],{"class":89,"line":34698},206,[87,34700,34701],{"class":199},"    # 添加图例\n",[87,34703,34705],{"class":89,"line":34704},207,[87,34706,34598],{"class":97},[87,34708,34710,34712,34714],{"class":89,"line":34709},208,[87,34711,34610],{"class":97},[87,34713,34544],{"class":949},[87,34715,1108],{"class":97},[87,34717,34719,34721,34724],{"class":89,"line":34718},209,[87,34720,34621],{"class":97},[87,34722,34723],{"class":949},"\"acc\"",[87,34725,1108],{"class":97},[87,34727,34729],{"class":89,"line":34728},210,[87,34730,34731],{"class":97},"    plt.show()\n",[87,34733,34735],{"class":89,"line":34734},211,[87,34736,3355],{"emptyLinePlaceholder":1029},[87,34738,34740],{"class":89,"line":34739},212,[87,34741,34742],{"class":199},"# 正式开始训练:\n",[87,34744,34746,34748,34750,34752,34754],{"class":89,"line":34745},213,[87,34747,2488],{"class":171},[87,34749,32167],{"class":104},[87,34751,3903],{"class":171},[87,34753,32172],{"class":949},[87,34755,4693],{"class":97},[87,34757,34759],{"class":89,"line":34758},214,[87,34760,34761],{"class":199},"    # 将模型实例化\n",[87,34763,34765,34768,34770],{"class":89,"line":34764},215,[87,34766,34767],{"class":97},"    LeNet",[87,34769,946],{"class":171},[87,34771,34772],{"class":97},"LeNet()\n",[87,34774,34776,34779,34781],{"class":89,"line":34775},216,[87,34777,34778],{"class":97},"    train_dataloader,val_dataloader",[87,34780,946],{"class":171},[87,34782,34783],{"class":97},"train_val_data_process()\n",[87,34785,34787,34789,34791,34794,34797,34799,34801],{"class":89,"line":34786},217,[87,34788,34340],{"class":97},[87,34790,946],{"class":171},[87,34792,34793],{"class":97},"train_model_process(LeNet,train_dataloader,val_dataloader,",[87,34795,34796],{"class":492},"num_epochs",[87,34798,946],{"class":171},[87,34800,1792],{"class":104},[87,34802,1108],{"class":97},[87,34804,34806],{"class":89,"line":34805},218,[87,34807,34808],{"class":97},"    matplot_acc_loss(train_process)\n",[19,34810,34811],{},"画图的补充点学习：",[19,34813,34814],{},[39,34815],{"alt":82,"src":34816},"\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",[1055,34818,34819],{"start":120},[29,34820,34821],{},"测试",[77,34823,34825],{"className":31325,"code":34824,"language":31327,"meta":82,"style":82},"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",[84,34826,34827,34833,34843,34855,34865,34870,34880,34890,34894,34899,34908,34925,34937,34954,34965,34981,34986,34997,35008,35019,35026,35030,35035,35045,35050,35067,35075,35079,35084,35093,35102,35106,35111,35116,35121,35128,35133,35145,35155,35165,35170,35174,35179,35188,35193,35209,35214,35219,35224,35238,35243,35257,35261,35266,35281,35286,35298,35302,35307,35319,35324,35332,35337,35342,35352,35357,35366,35371,35376,35380,35385,35390,35406,35414,35419,35424,35483,35489,35494,35505,35513,35521,35525,35530,35534,35539,35547,35552,35568,35573,35583,35593],{"__ignoreMap":82},[87,34828,34829,34831],{"class":89,"line":90},[87,34830,31339],{"class":171},[87,34832,31342],{"class":97},[87,34834,34835,34837,34839,34841],{"class":89,"line":101},[87,34836,31339],{"class":171},[87,34838,32362],{"class":97},[87,34840,32330],{"class":171},[87,34842,32367],{"class":97},[87,34844,34845,34847,34850,34852],{"class":89,"line":120},[87,34846,31684],{"class":171},[87,34848,34849],{"class":97}," jupyter_client.consoleapp ",[87,34851,31339],{"class":171},[87,34853,34854],{"class":97}," classes\n",[87,34856,34857,34859,34861,34863],{"class":89,"line":222},[87,34858,31684],{"class":171},[87,34860,32345],{"class":97},[87,34862,31339],{"class":171},[87,34864,32350],{"class":97},[87,34866,34867],{"class":89,"line":234},[87,34868,34869],{"class":199},"# 导入数据集\n",[87,34871,34872,34874,34876,34878],{"class":89,"line":256},[87,34873,31684],{"class":171},[87,34875,32315],{"class":97},[87,34877,31339],{"class":171},[87,34879,32320],{"class":97},[87,34881,34882,34884,34886,34888],{"class":89,"line":269},[87,34883,31684],{"class":171},[87,34885,32861],{"class":97},[87,34887,31339],{"class":171},[87,34889,32866],{"class":97},[87,34891,34892],{"class":89,"line":463},[87,34893,3355],{"emptyLinePlaceholder":1029},[87,34895,34896],{"class":89,"line":469},[87,34897,34898],{"class":199},"# 测试数据处理\n",[87,34900,34901,34903,34906],{"class":89,"line":2287},[87,34902,32894],{"class":171},[87,34904,34905],{"class":205}," test_data_process",[87,34907,32900],{"class":97},[87,34909,34910,34913,34915,34917,34919,34921,34923],{"class":89,"line":2568},[87,34911,34912],{"class":97},"    test_data",[87,34914,946],{"class":171},[87,34916,32402],{"class":97},[87,34918,32405],{"class":492},[87,34920,946],{"class":171},[87,34922,32410],{"class":949},[87,34924,32413],{"class":97},[87,34926,34927,34930,34932,34935],{"class":89,"line":2573},[87,34928,34929],{"class":492},"                           train",[87,34931,946],{"class":171},[87,34933,34934],{"class":104},"False",[87,34936,32413],{"class":97},[87,34938,34939,34942,34944,34946,34948,34950,34952],{"class":89,"line":2579},[87,34940,34941],{"class":492},"                           transform",[87,34943,946],{"class":171},[87,34945,32440],{"class":97},[87,34947,32443],{"class":492},[87,34949,946],{"class":171},[87,34951,1993],{"class":104},[87,34953,32451],{"class":97},[87,34955,34956,34959,34961,34963],{"class":89,"line":2584},[87,34957,34958],{"class":492},"                           download",[87,34960,946],{"class":171},[87,34962,32423],{"class":104},[87,34964,1108],{"class":97},[87,34966,34967,34970,34972,34974,34976,34978],{"class":89,"line":2598},[87,34968,34969],{"class":97},"    test_dataloader",[87,34971,946],{"class":171},[87,34973,32481],{"class":97},[87,34975,32484],{"class":492},[87,34977,946],{"class":171},[87,34979,34980],{"class":97},"test_data,\n",[87,34982,34983],{"class":89,"line":2603},[87,34984,34985],{"class":199},"                                    # 这里是一张一张进行测试\n",[87,34987,34988,34991,34993,34995],{"class":89,"line":2609},[87,34989,34990],{"class":492},"                                    batch_size",[87,34992,946],{"class":171},[87,34994,1313],{"class":104},[87,34996,32413],{"class":97},[87,34998,34999,35002,35004,35006],{"class":89,"line":2630},[87,35000,35001],{"class":492},"                                    shuffle",[87,35003,946],{"class":171},[87,35005,32423],{"class":104},[87,35007,32413],{"class":97},[87,35009,35010,35013,35015,35017],{"class":89,"line":2635},[87,35011,35012],{"class":492},"                                    num_workers",[87,35014,946],{"class":171},[87,35016,111],{"class":104},[87,35018,1108],{"class":97},[87,35020,35021,35023],{"class":89,"line":2649},[87,35022,5044],{"class":171},[87,35024,35025],{"class":97}," test_dataloader\n",[87,35027,35028],{"class":89,"line":2654},[87,35029,3355],{"emptyLinePlaceholder":1029},[87,35031,35032],{"class":89,"line":2683},[87,35033,35034],{"class":199},"# 定义模型测试函数\n",[87,35036,35037,35039,35042],{"class":89,"line":2688},[87,35038,32894],{"class":171},[87,35040,35041],{"class":205}," test_model_process",[87,35043,35044],{"class":97},"(model,test_dataloader):\n",[87,35046,35047],{"class":89,"line":2705},[87,35048,35049],{"class":199},"    # 将模型放到设备当中，先进行判断\n",[87,35051,35052,35054,35056,35058,35060,35062,35064],{"class":89,"line":2710},[87,35053,32184],{"class":97},[87,35055,946],{"class":171},[87,35057,32191],{"class":949},[87,35059,2660],{"class":171},[87,35061,32196],{"class":97},[87,35063,2657],{"class":171},[87,35065,35066],{"class":949}," \"cpu\"\n",[87,35068,35069,35071,35073],{"class":89,"line":2715},[87,35070,32236],{"class":97},[87,35072,946],{"class":171},[87,35074,33236],{"class":97},[87,35076,35077],{"class":89,"line":2720},[87,35078,3355],{"emptyLinePlaceholder":1029},[87,35080,35081],{"class":89,"line":2734},[87,35082,35083],{"class":199},"    # 设置初始化参数\n",[87,35085,35086,35089,35091],{"class":89,"line":2739},[87,35087,35088],{"class":97},"    test_corrects",[87,35090,946],{"class":171},[87,35092,33289],{"class":104},[87,35094,35095,35098,35100],{"class":89,"line":3532},[87,35096,35097],{"class":97},"    test_num",[87,35099,946],{"class":171},[87,35101,4039],{"class":104},[87,35103,35104],{"class":89,"line":3546},[87,35105,3355],{"emptyLinePlaceholder":1029},[87,35107,35108],{"class":89,"line":3554},[87,35109,35110],{"class":199},"    # 进行模型测试\n",[87,35112,35113],{"class":89,"line":3559},[87,35114,35115],{"class":199},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[87,35117,35118],{"class":89,"line":3565},[87,35119,35120],{"class":199},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[87,35122,35123,35126],{"class":89,"line":3571},[87,35124,35125],{"class":171},"    with",[87,35127,33831],{"class":97},[87,35129,35130],{"class":89,"line":3576},[87,35131,35132],{"class":199},"        # 从数据中进行\n",[87,35134,35135,35137,35140,35142],{"class":89,"line":8898},[87,35136,4357],{"class":171},[87,35138,35139],{"class":97}," test_data_x,test_data_y ",[87,35141,26990],{"class":171},[87,35143,35144],{"class":97}," test_dataloader:\n",[87,35146,35147,35150,35152],{"class":89,"line":8922},[87,35148,35149],{"class":97},"            test_data_x",[87,35151,946],{"class":171},[87,35153,35154],{"class":97},"test_data_x.to(device)\n",[87,35156,35157,35160,35162],{"class":89,"line":8927},[87,35158,35159],{"class":97},"            test_data_y",[87,35161,946],{"class":171},[87,35163,35164],{"class":97},"test_data_y.to(device)\n",[87,35166,35167],{"class":89,"line":8933},[87,35168,35169],{"class":199},"            # 设置为验证模式\n",[87,35171,35172],{"class":89,"line":8960},[87,35173,33822],{"class":97},[87,35175,35176],{"class":89,"line":8965},[87,35177,35178],{"class":199},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[87,35180,35181,35183,35185],{"class":89,"line":8971},[87,35182,33607],{"class":97},[87,35184,946],{"class":171},[87,35186,35187],{"class":97},"model(test_data_x)\n",[87,35189,35190],{"class":89,"line":8983},[87,35191,35192],{"class":199},"            # 查找每一行中最大值对应的下标\n",[87,35194,35195,35197,35199,35201,35203,35205,35207],{"class":89,"line":8995},[87,35196,33624],{"class":97},[87,35198,946],{"class":171},[87,35200,33629],{"class":97},[87,35202,33632],{"class":492},[87,35204,946],{"class":171},[87,35206,1313],{"class":104},[87,35208,1108],{"class":97},[87,35210,35211],{"class":89,"line":9007},[87,35212,35213],{"class":199},"            # 计算正确率\n",[87,35215,35216],{"class":89,"line":10666},[87,35217,35218],{"class":199},"            # .data表示是一个不带梯度信息的tensor\n",[87,35220,35221],{"class":89,"line":10691},[87,35222,35223],{"class":199},"            # 如果预测正确，则准确度test_corrects加1\n",[87,35225,35226,35229,35231,35233,35235],{"class":89,"line":10714},[87,35227,35228],{"class":97},"            test_corrects",[87,35230,10427],{"class":171},[87,35232,33734],{"class":97},[87,35234,3903],{"class":171},[87,35236,35237],{"class":97},"test_data_y.data)\n",[87,35239,35240],{"class":89,"line":10738},[87,35241,35242],{"class":199},"            # 将所有的测试样本进行累计\n",[87,35244,35245,35248,35250,35253,35255],{"class":89,"line":10743},[87,35246,35247],{"class":97},"            test_num",[87,35249,10427],{"class":171},[87,35251,35252],{"class":97},"test_data_x.size(",[87,35254,111],{"class":104},[87,35256,1108],{"class":97},[87,35258,35259],{"class":89,"line":10748},[87,35260,3355],{"emptyLinePlaceholder":1029},[87,35262,35263],{"class":89,"line":10753},[87,35264,35265],{"class":199},"        # 计算准确度\n",[87,35267,35268,35271,35273,35276,35278],{"class":89,"line":10762},[87,35269,35270],{"class":97},"        test_acc",[87,35272,946],{"class":171},[87,35274,35275],{"class":97},"test_corrects.double().item()",[87,35277,1677],{"class":171},[87,35279,35280],{"class":97},"test_num\n",[87,35282,35283],{"class":89,"line":10767},[87,35284,35285],{"class":199},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[87,35287,35288,35290,35292,35295],{"class":89,"line":10773},[87,35289,33398],{"class":104},[87,35291,165],{"class":97},[87,35293,35294],{"class":949},"\"测试的准确率：\"",[87,35296,35297],{"class":97},",test_acc)\n",[87,35299,35300],{"class":89,"line":10794},[87,35301,3355],{"emptyLinePlaceholder":1029},[87,35303,35304],{"class":89,"line":10800},[87,35305,35306],{"class":199},"# 实现模型的测试功能\n",[87,35308,35309,35311,35313,35315,35317],{"class":89,"line":10814},[87,35310,2488],{"class":171},[87,35312,32167],{"class":104},[87,35314,3903],{"class":171},[87,35316,32172],{"class":949},[87,35318,4693],{"class":97},[87,35320,35321],{"class":89,"line":10820},[87,35322,35323],{"class":199},"    # 加载模型\n",[87,35325,35326,35328,35330],{"class":89,"line":10847},[87,35327,32236],{"class":97},[87,35329,946],{"class":171},[87,35331,34772],{"class":97},[87,35333,35334],{"class":89,"line":10856},[87,35335,35336],{"class":199},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[87,35338,35339],{"class":89,"line":10862},[87,35340,35341],{"class":199},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[87,35343,35344,35347,35350],{"class":89,"line":10870},[87,35345,35346],{"class":97},"    model.load_state_dict(torch.load(",[87,35348,35349],{"class":949},"'best_model.pth'",[87,35351,31444],{"class":97},[87,35353,35354],{"class":89,"line":10875},[87,35355,35356],{"class":199},"    # 数据加载\n",[87,35358,35359,35361,35363],{"class":89,"line":17553},[87,35360,34969],{"class":97},[87,35362,946],{"class":171},[87,35364,35365],{"class":97},"test_data_process()\n",[87,35367,35368],{"class":89,"line":17559},[87,35369,35370],{"class":199},"    # 加载模型测试的函数\n",[87,35372,35373],{"class":89,"line":17582},[87,35374,35375],{"class":97},"    test_model_process(model,test_dataloader)\n",[87,35377,35378],{"class":89,"line":17588},[87,35379,3355],{"emptyLinePlaceholder":1029},[87,35381,35382],{"class":89,"line":17611},[87,35383,35384],{"class":199},"    # 验证集推理实现：\n",[87,35386,35387],{"class":89,"line":17625},[87,35388,35389],{"class":199},"    # 加载数据加载的更详细一些\n",[87,35391,35392,35394,35396,35398,35400,35402,35404],{"class":89,"line":17645},[87,35393,32184],{"class":97},[87,35395,946],{"class":171},[87,35397,32191],{"class":949},[87,35399,2660],{"class":171},[87,35401,32196],{"class":97},[87,35403,2657],{"class":171},[87,35405,35066],{"class":949},[87,35407,35408,35410,35412],{"class":89,"line":17651},[87,35409,32236],{"class":97},[87,35411,946],{"class":171},[87,35413,33236],{"class":97},[87,35415,35416],{"class":89,"line":17662},[87,35417,35418],{"class":199},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[87,35420,35421],{"class":89,"line":17685},[87,35422,35423],{"class":199},"    # 顺序不可改变\n",[87,35425,35426,35429,35431,35433,35436,35438,35441,35443,35446,35448,35451,35453,35456,35458,35461,35463,35466,35468,35471,35473,35476,35478,35481],{"class":89,"line":17707},[87,35427,35428],{"class":97},"    classes",[87,35430,946],{"class":171},[87,35432,1982],{"class":97},[87,35434,35435],{"class":949},"'T-shirt\u002Ftop'",[87,35437,1473],{"class":97},[87,35439,35440],{"class":949},"'Trouser'",[87,35442,1473],{"class":97},[87,35444,35445],{"class":949},"'Pullover'",[87,35447,1473],{"class":97},[87,35449,35450],{"class":949},"'Dress'",[87,35452,1473],{"class":97},[87,35454,35455],{"class":949},"'Coat'",[87,35457,1473],{"class":97},[87,35459,35460],{"class":949},"'Sandal'",[87,35462,1473],{"class":97},[87,35464,35465],{"class":949},"'Shirt'",[87,35467,1473],{"class":97},[87,35469,35470],{"class":949},"'Sneaker'",[87,35472,1473],{"class":97},[87,35474,35475],{"class":949},"'Bag'",[87,35477,1473],{"class":97},[87,35479,35480],{"class":949},"'Ankle boot'",[87,35482,34193],{"class":97},[87,35484,35485,35487],{"class":89,"line":17712},[87,35486,35125],{"class":171},[87,35488,33831],{"class":97},[87,35490,35491],{"class":89,"line":17718},[87,35492,35493],{"class":199},"        # 将数据和标签都放到设备当中\n",[87,35495,35496,35498,35501,35503],{"class":89,"line":17732},[87,35497,4357],{"class":171},[87,35499,35500],{"class":97}," b_x,b_y ",[87,35502,26990],{"class":171},[87,35504,35144],{"class":97},[87,35506,35507,35509,35511],{"class":89,"line":17745},[87,35508,33557],{"class":97},[87,35510,946],{"class":171},[87,35512,33562],{"class":97},[87,35514,35515,35517,35519],{"class":89,"line":17750},[87,35516,33572],{"class":97},[87,35518,946],{"class":171},[87,35520,33577],{"class":97},[87,35522,35523],{"class":89,"line":17764},[87,35524,3355],{"emptyLinePlaceholder":1029},[87,35526,35527],{"class":89,"line":17769},[87,35528,35529],{"class":199},"            # 设置模型为验证模式\n",[87,35531,35532],{"class":89,"line":17775},[87,35533,33822],{"class":97},[87,35535,35536],{"class":89,"line":17780},[87,35537,35538],{"class":199},"            # 模型推理结果\n",[87,35540,35541,35543,35545],{"class":89,"line":17794},[87,35542,33607],{"class":97},[87,35544,946],{"class":171},[87,35546,33612],{"class":97},[87,35548,35549],{"class":89,"line":17799},[87,35550,35551],{"class":199},"            # 获取最大下标，最大下标就是类别号\n",[87,35553,35554,35556,35558,35560,35562,35564,35566],{"class":89,"line":17804},[87,35555,33624],{"class":97},[87,35557,946],{"class":171},[87,35559,33629],{"class":97},[87,35561,33632],{"class":492},[87,35563,946],{"class":171},[87,35565,1313],{"class":104},[87,35567,1108],{"class":97},[87,35569,35570],{"class":89,"line":17818},[87,35571,35572],{"class":199},"            # 取出张量中的数值\n",[87,35574,35575,35578,35580],{"class":89,"line":17830},[87,35576,35577],{"class":97},"            result",[87,35579,946],{"class":171},[87,35581,35582],{"class":97},"pre_lab.item()\n",[87,35584,35585,35588,35590],{"class":89,"line":17835},[87,35586,35587],{"class":97},"            label",[87,35589,946],{"class":171},[87,35591,35592],{"class":97},"b_y.item()\n",[87,35594,35595,35598,35600,35603,35606,35609,35611,35614],{"class":89,"line":17848},[87,35596,35597],{"class":104},"            print",[87,35599,165],{"class":97},[87,35601,35602],{"class":949},"\"预测值：\"",[87,35604,35605],{"class":97},",classes[result],",[87,35607,35608],{"class":949},"\"------\"",[87,35610,1473],{"class":97},[87,35612,35613],{"class":949},"\"真实值：\"",[87,35615,35616],{"class":97},",classes[label])\n",[19,35618,35619],{},"（2）AlexNet",[1055,35621,35622],{},[29,35623,35624],{},"神经网络构建",[77,35626,35628],{"className":31325,"code":35627,"language":31327,"meta":82,"style":82},"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",[84,35629,35630,35636,35646,35656,35668,35672,35689,35697,35712,35724,35766,35793,35836,35862,35906,35949,35992,36019,36023,36033,36038,36066,36085,36104,36108,36113,36121,36136,36146,36160,36170,36185,36200,36215,36226,36230,36235,36245,36260,36265,36279,36294,36306,36311,36322,36327,36333,36338,36350,36370,36375,36384],{"__ignoreMap":82},[87,35631,35632,35634],{"class":89,"line":90},[87,35633,31339],{"class":171},[87,35635,31342],{"class":97},[87,35637,35638,35640,35642,35644],{"class":89,"line":101},[87,35639,31684],{"class":171},[87,35641,31687],{"class":97},[87,35643,31339],{"class":171},[87,35645,31692],{"class":97},[87,35647,35648,35650,35652,35654],{"class":89,"line":120},[87,35649,31684],{"class":171},[87,35651,31704],{"class":97},[87,35653,31339],{"class":171},[87,35655,31709],{"class":97},[87,35657,35658,35660,35663,35665],{"class":89,"line":222},[87,35659,31339],{"class":171},[87,35661,35662],{"class":97}," torch.nn.functional ",[87,35664,32330],{"class":171},[87,35666,35667],{"class":97}," F\n",[87,35669,35670],{"class":89,"line":234},[87,35671,3355],{"emptyLinePlaceholder":1029},[87,35673,35674,35676,35679,35681,35683,35685,35687],{"class":89,"line":256},[87,35675,15644],{"class":171},[87,35677,35678],{"class":205}," AlexNet",[87,35680,165],{"class":97},[87,35682,31725],{"class":205},[87,35684,1651],{"class":97},[87,35686,31730],{"class":205},[87,35688,31733],{"class":97},[87,35690,35691,35693,35695],{"class":89,"line":269},[87,35692,31748],{"class":171},[87,35694,31751],{"class":104},[87,35696,31754],{"class":97},[87,35698,35699,35701,35704,35706,35708,35710],{"class":89,"line":463},[87,35700,31764],{"class":104},[87,35702,35703],{"class":97},"(AlexNet,",[87,35705,31770],{"class":104},[87,35707,31773],{"class":97},[87,35709,31776],{"class":104},[87,35711,2931],{"class":97},[87,35713,35714,35716,35719,35721],{"class":89,"line":469},[87,35715,31792],{"class":104},[87,35717,35718],{"class":97},".ReLu",[87,35720,946],{"class":171},[87,35722,35723],{"class":97},"nn.ReLU()\n",[87,35725,35726,35728,35730,35732,35734,35736,35738,35740,35742,35744,35746,35748,35750,35752,35754,35756,35758,35760,35762,35764],{"class":89,"line":2287},[87,35727,31792],{"class":104},[87,35729,31795],{"class":97},[87,35731,946],{"class":171},[87,35733,31800],{"class":97},[87,35735,31803],{"class":492},[87,35737,946],{"class":171},[87,35739,1313],{"class":104},[87,35741,1473],{"class":97},[87,35743,31812],{"class":492},[87,35745,946],{"class":171},[87,35747,1305],{"class":104},[87,35749,1473],{"class":97},[87,35751,31821],{"class":492},[87,35753,946],{"class":171},[87,35755,1566],{"class":104},[87,35757,1473],{"class":97},[87,35759,31876],{"class":492},[87,35761,946],{"class":171},[87,35763,1389],{"class":104},[87,35765,1108],{"class":97},[87,35767,35768,35770,35772,35774,35777,35779,35781,35783,35785,35787,35789,35791],{"class":89,"line":2568},[87,35769,31792],{"class":104},[87,35771,31860],{"class":97},[87,35773,946],{"class":171},[87,35775,35776],{"class":97},"nn.MaxPool2d(",[87,35778,31821],{"class":492},[87,35780,946],{"class":171},[87,35782,1170],{"class":104},[87,35784,1473],{"class":97},[87,35786,31876],{"class":492},[87,35788,946],{"class":171},[87,35790,1176],{"class":104},[87,35792,1108],{"class":97},[87,35794,35795,35797,35799,35801,35803,35805,35807,35809,35811,35813,35815,35818,35820,35822,35824,35826,35828,35830,35832,35834],{"class":89,"line":2573},[87,35796,31792],{"class":104},[87,35798,31889],{"class":97},[87,35800,946],{"class":171},[87,35802,31800],{"class":97},[87,35804,31803],{"class":492},[87,35806,946],{"class":171},[87,35808,1305],{"class":104},[87,35810,1473],{"class":97},[87,35812,31812],{"class":492},[87,35814,946],{"class":171},[87,35816,35817],{"class":104},"256",[87,35819,1473],{"class":97},[87,35821,31821],{"class":492},[87,35823,946],{"class":171},[87,35825,1414],{"class":104},[87,35827,1473],{"class":97},[87,35829,31830],{"class":492},[87,35831,946],{"class":171},[87,35833,1176],{"class":104},[87,35835,1108],{"class":97},[87,35837,35838,35840,35842,35844,35846,35848,35850,35852,35854,35856,35858,35860],{"class":89,"line":2579},[87,35839,31792],{"class":104},[87,35841,31924],{"class":97},[87,35843,946],{"class":171},[87,35845,35776],{"class":97},[87,35847,31821],{"class":492},[87,35849,946],{"class":171},[87,35851,1170],{"class":104},[87,35853,1473],{"class":97},[87,35855,31876],{"class":492},[87,35857,946],{"class":171},[87,35859,1176],{"class":104},[87,35861,1108],{"class":97},[87,35863,35864,35866,35869,35871,35873,35875,35877,35879,35881,35883,35885,35888,35890,35892,35894,35896,35898,35900,35902,35904],{"class":89,"line":2584},[87,35865,31792],{"class":104},[87,35867,35868],{"class":97},".c5",[87,35870,946],{"class":171},[87,35872,31800],{"class":97},[87,35874,31803],{"class":492},[87,35876,946],{"class":171},[87,35878,35817],{"class":104},[87,35880,1473],{"class":97},[87,35882,31812],{"class":492},[87,35884,946],{"class":171},[87,35886,35887],{"class":104},"384",[87,35889,1473],{"class":97},[87,35891,31821],{"class":492},[87,35893,946],{"class":171},[87,35895,1170],{"class":104},[87,35897,1473],{"class":97},[87,35899,31830],{"class":492},[87,35901,946],{"class":171},[87,35903,1313],{"class":104},[87,35905,1108],{"class":97},[87,35907,35908,35910,35913,35915,35917,35919,35921,35923,35925,35927,35929,35931,35933,35935,35937,35939,35941,35943,35945,35947],{"class":89,"line":2598},[87,35909,31792],{"class":104},[87,35911,35912],{"class":97},".c6",[87,35914,946],{"class":171},[87,35916,31800],{"class":97},[87,35918,31803],{"class":492},[87,35920,946],{"class":171},[87,35922,35887],{"class":104},[87,35924,1473],{"class":97},[87,35926,31812],{"class":492},[87,35928,946],{"class":171},[87,35930,35887],{"class":104},[87,35932,1473],{"class":97},[87,35934,31821],{"class":492},[87,35936,946],{"class":171},[87,35938,1170],{"class":104},[87,35940,1473],{"class":97},[87,35942,31830],{"class":492},[87,35944,946],{"class":171},[87,35946,1313],{"class":104},[87,35948,1108],{"class":97},[87,35950,35951,35953,35956,35958,35960,35962,35964,35966,35968,35970,35972,35974,35976,35978,35980,35982,35984,35986,35988,35990],{"class":89,"line":2603},[87,35952,31792],{"class":104},[87,35954,35955],{"class":97},".c7",[87,35957,946],{"class":171},[87,35959,31800],{"class":97},[87,35961,31803],{"class":492},[87,35963,946],{"class":171},[87,35965,35887],{"class":104},[87,35967,1473],{"class":97},[87,35969,31812],{"class":492},[87,35971,946],{"class":171},[87,35973,35817],{"class":104},[87,35975,1473],{"class":97},[87,35977,31821],{"class":492},[87,35979,946],{"class":171},[87,35981,1170],{"class":104},[87,35983,1473],{"class":97},[87,35985,31830],{"class":492},[87,35987,946],{"class":171},[87,35989,1313],{"class":104},[87,35991,1108],{"class":97},[87,35993,35994,35996,35999,36001,36003,36005,36007,36009,36011,36013,36015,36017],{"class":89,"line":2609},[87,35995,31792],{"class":104},[87,35997,35998],{"class":97},".s8",[87,36000,946],{"class":171},[87,36002,35776],{"class":97},[87,36004,31821],{"class":492},[87,36006,946],{"class":171},[87,36008,1170],{"class":104},[87,36010,1473],{"class":97},[87,36012,31876],{"class":492},[87,36014,946],{"class":171},[87,36016,1176],{"class":104},[87,36018,1108],{"class":97},[87,36020,36021],{"class":89,"line":2630},[87,36022,31949],{"class":199},[87,36024,36025,36027,36029,36031],{"class":89,"line":2635},[87,36026,31792],{"class":104},[87,36028,31956],{"class":97},[87,36030,946],{"class":171},[87,36032,31961],{"class":97},[87,36034,36035],{"class":89,"line":2649},[87,36036,36037],{"class":199},"       # 定义全连接层\n",[87,36039,36040,36042,36045,36047,36049,36051,36053,36055,36057,36059,36061,36064],{"class":89,"line":2654},[87,36041,31792],{"class":104},[87,36043,36044],{"class":97},".f1",[87,36046,946],{"class":171},[87,36048,31978],{"class":97},[87,36050,1439],{"class":104},[87,36052,1549],{"class":171},[87,36054,1439],{"class":104},[87,36056,1549],{"class":171},[87,36058,35817],{"class":104},[87,36060,1473],{"class":97},[87,36062,36063],{"class":104},"4096",[87,36065,1108],{"class":97},[87,36067,36068,36070,36073,36075,36077,36079,36081,36083],{"class":89,"line":2683},[87,36069,31792],{"class":104},[87,36071,36072],{"class":97},".f2",[87,36074,946],{"class":171},[87,36076,31978],{"class":97},[87,36078,36063],{"class":104},[87,36080,1473],{"class":97},[87,36082,36063],{"class":104},[87,36084,1108],{"class":97},[87,36086,36087,36089,36092,36094,36096,36098,36100,36102],{"class":89,"line":2688},[87,36088,31792],{"class":104},[87,36090,36091],{"class":97},".f3",[87,36093,946],{"class":171},[87,36095,31978],{"class":97},[87,36097,36063],{"class":104},[87,36099,1473],{"class":97},[87,36101,242],{"class":104},[87,36103,1108],{"class":97},[87,36105,36106],{"class":89,"line":2705},[87,36107,3355],{"emptyLinePlaceholder":1029},[87,36109,36110],{"class":89,"line":2710},[87,36111,36112],{"class":199},"    # 定义前向传播\n",[87,36114,36115,36117,36119],{"class":89,"line":2715},[87,36116,31748],{"class":171},[87,36118,32040],{"class":205},[87,36120,32043],{"class":97},[87,36122,36123,36125,36127,36129,36132,36134],{"class":89,"line":2720},[87,36124,32048],{"class":97},[87,36126,946],{"class":171},[87,36128,31770],{"class":104},[87,36130,36131],{"class":97},".ReLu(",[87,36133,31770],{"class":104},[87,36135,32060],{"class":97},[87,36137,36138,36140,36142,36144],{"class":89,"line":2734},[87,36139,32048],{"class":97},[87,36141,946],{"class":171},[87,36143,31770],{"class":104},[87,36145,32071],{"class":97},[87,36147,36148,36150,36152,36154,36156,36158],{"class":89,"line":2739},[87,36149,32048],{"class":97},[87,36151,946],{"class":171},[87,36153,31770],{"class":104},[87,36155,36131],{"class":97},[87,36157,31770],{"class":104},[87,36159,32086],{"class":97},[87,36161,36162,36164,36166,36168],{"class":89,"line":3532},[87,36163,32048],{"class":97},[87,36165,946],{"class":171},[87,36167,31770],{"class":104},[87,36169,32097],{"class":97},[87,36171,36172,36174,36176,36178,36180,36182],{"class":89,"line":3546},[87,36173,32048],{"class":97},[87,36175,946],{"class":171},[87,36177,31770],{"class":104},[87,36179,36131],{"class":97},[87,36181,31770],{"class":104},[87,36183,36184],{"class":97},".c5(x))\n",[87,36186,36187,36189,36191,36193,36195,36197],{"class":89,"line":3554},[87,36188,32048],{"class":97},[87,36190,946],{"class":171},[87,36192,31770],{"class":104},[87,36194,36131],{"class":97},[87,36196,31770],{"class":104},[87,36198,36199],{"class":97},".c6(x))\n",[87,36201,36202,36204,36206,36208,36210,36212],{"class":89,"line":3559},[87,36203,32048],{"class":97},[87,36205,946],{"class":171},[87,36207,31770],{"class":104},[87,36209,36131],{"class":97},[87,36211,31770],{"class":104},[87,36213,36214],{"class":97},".c7(x))\n",[87,36216,36217,36219,36221,36223],{"class":89,"line":3565},[87,36218,32048],{"class":97},[87,36220,946],{"class":171},[87,36222,31770],{"class":104},[87,36224,36225],{"class":97},".s8(x)\n",[87,36227,36228],{"class":89,"line":3571},[87,36229,3355],{"emptyLinePlaceholder":1029},[87,36231,36232],{"class":89,"line":3576},[87,36233,36234],{"class":199},"        # 展平加线性全连接层\n",[87,36236,36237,36239,36241,36243],{"class":89,"line":8898},[87,36238,32048],{"class":97},[87,36240,946],{"class":171},[87,36242,31770],{"class":104},[87,36244,32108],{"class":97},[87,36246,36247,36249,36251,36253,36255,36257],{"class":89,"line":8922},[87,36248,32048],{"class":97},[87,36250,946],{"class":171},[87,36252,31770],{"class":104},[87,36254,36131],{"class":97},[87,36256,31770],{"class":104},[87,36258,36259],{"class":97},".f1(x))\n",[87,36261,36262],{"class":89,"line":8927},[87,36263,36264],{"class":199},"        # 还需要dropout对神经元随机进行失活\n",[87,36266,36267,36269,36271,36274,36277],{"class":89,"line":8933},[87,36268,32048],{"class":97},[87,36270,946],{"class":171},[87,36272,36273],{"class":97},"F.dropout(x,",[87,36275,36276],{"class":104},"0.5",[87,36278,1108],{"class":97},[87,36280,36281,36283,36285,36287,36289,36291],{"class":89,"line":8960},[87,36282,32048],{"class":97},[87,36284,946],{"class":171},[87,36286,31770],{"class":104},[87,36288,36131],{"class":97},[87,36290,31770],{"class":104},[87,36292,36293],{"class":97},".f2(x))\n",[87,36295,36296,36298,36300,36302,36304],{"class":89,"line":8965},[87,36297,32048],{"class":97},[87,36299,946],{"class":171},[87,36301,36273],{"class":97},[87,36303,36276],{"class":104},[87,36305,1108],{"class":97},[87,36307,36308],{"class":89,"line":8971},[87,36309,36310],{"class":199},"        # 直接输出\n",[87,36312,36313,36315,36317,36319],{"class":89,"line":8983},[87,36314,32048],{"class":97},[87,36316,946],{"class":171},[87,36318,31770],{"class":104},[87,36320,36321],{"class":97},".f3(x)\n",[87,36323,36324],{"class":89,"line":8995},[87,36325,36326],{"class":199},"        # 前向传播输出\n",[87,36328,36329,36331],{"class":89,"line":9007},[87,36330,15702],{"class":171},[87,36332,32156],{"class":97},[87,36334,36335],{"class":89,"line":10666},[87,36336,36337],{"class":199},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[87,36339,36340,36342,36344,36346,36348],{"class":89,"line":10691},[87,36341,2488],{"class":171},[87,36343,32167],{"class":104},[87,36345,3903],{"class":171},[87,36347,32172],{"class":949},[87,36349,4693],{"class":97},[87,36351,36352,36354,36356,36358,36360,36362,36364,36366,36368],{"class":89,"line":10714},[87,36353,32184],{"class":97},[87,36355,946],{"class":171},[87,36357,31398],{"class":97},[87,36359,32191],{"class":949},[87,36361,2660],{"class":171},[87,36363,32196],{"class":97},[87,36365,2657],{"class":171},[87,36367,31423],{"class":949},[87,36369,1108],{"class":97},[87,36371,36372],{"class":89,"line":10738},[87,36373,36374],{"class":199},"    # 模型实例化，然后将实例化的模型放到设备中\n",[87,36376,36377,36379,36381],{"class":89,"line":10743},[87,36378,32236],{"class":97},[87,36380,946],{"class":171},[87,36382,36383],{"class":97},"AlexNet().to(device)\n",[87,36385,36386,36388,36390,36392,36394,36397,36399,36401],{"class":89,"line":10748},[87,36387,32246],{"class":104},[87,36389,32249],{"class":97},[87,36391,1313],{"class":104},[87,36393,1473],{"class":97},[87,36395,36396],{"class":104},"227",[87,36398,1473],{"class":97},[87,36400,36396],{"class":104},[87,36402,32262],{"class":97},[1055,36404,36405],{"start":101},[29,36406,32275],{},[77,36408,36410],{"className":31325,"code":36409,"language":31327,"meta":82,"style":82},"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",[84,36411,36412,36418,36424,36434,36440,36450,36460,36470,36480,36490,36494,36505,36515,36519,36523,36527,36535,36547,36557,36573,36583,36615,36629,36639,36649,36653,36663,36677,36687,36697,36707,36713,36717,36721,36725,36729,36733,36741,36761,36765,36769,36773,36777,36781,36797,36801,36805,36813,36817,36821,36829,36833,36837,36841,36849,36853,36857,36861,36865,36873,36877,36885,36889,36897,36901,36909,36913,36921,36925,36929,36937,36941,36945,36949,36961,36985,36999,37003,37007,37011,37019,37023,37031,37035,37043,37047,37055,37059,37067,37071,37079,37083,37095,37099,37107,37111,37119,37123,37127,37131,37135,37143,37147,37163,37167,37175,37179,37183,37187,37191,37195,37199,37203,37219,37223,37235,37239,37251,37255,37267,37271,37279,37283,37291,37295,37299,37304,37310,37314,37323,37327,37344,37348,37357,37361,37379,37392,37397,37410,37414,37418,37426,37430,37434,37442,37446,37454,37458,37466,37470,37474,37516,37558,37562,37566,37582,37586,37602,37606,37610,37618,37622,37626,37638,37676,37681,37686,37695,37699,37713,37723,37729,37735,37741,37747,37751,37755,37761,37765,37769,37777,37781,37799,37803,37807,37811,37827,37831,37835,37839,37843,37847,37867,37887,37891,37895,37899,37907,37915,37919,37935,37955,37975,37979,37983,37991,37999,38003,38007,38011,38023,38027,38037,38045,38062],{"__ignoreMap":82},[87,36413,36414,36416],{"class":89,"line":90},[87,36415,31339],{"class":171},[87,36417,32769],{"class":97},[87,36419,36420,36422],{"class":89,"line":101},[87,36421,31339],{"class":171},[87,36423,32776],{"class":97},[87,36425,36426,36428,36430,36432],{"class":89,"line":120},[87,36427,31339],{"class":171},[87,36429,32787],{"class":97},[87,36431,32330],{"class":171},[87,36433,32792],{"class":97},[87,36435,36436,36438],{"class":89,"line":222},[87,36437,31339],{"class":171},[87,36439,31342],{"class":97},[87,36441,36442,36444,36446,36448],{"class":89,"line":234},[87,36443,31684],{"class":171},[87,36445,32362],{"class":97},[87,36447,31339],{"class":171},[87,36449,32809],{"class":97},[87,36451,36452,36454,36456,36458],{"class":89,"line":256},[87,36453,31684],{"class":171},[87,36455,32315],{"class":97},[87,36457,31339],{"class":171},[87,36459,32320],{"class":97},[87,36461,36462,36464,36466,36468],{"class":89,"line":269},[87,36463,31684],{"class":171},[87,36465,32345],{"class":97},[87,36467,31339],{"class":171},[87,36469,32350],{"class":97},[87,36471,36472,36474,36476,36478],{"class":89,"line":463},[87,36473,31339],{"class":171},[87,36475,32362],{"class":97},[87,36477,32330],{"class":171},[87,36479,32367],{"class":97},[87,36481,36482,36484,36486,36488],{"class":89,"line":469},[87,36483,31339],{"class":171},[87,36485,32379],{"class":97},[87,36487,32330],{"class":171},[87,36489,32384],{"class":97},[87,36491,36492],{"class":89,"line":2287},[87,36493,32854],{"class":199},[87,36495,36496,36498,36500,36502],{"class":89,"line":2568},[87,36497,31684],{"class":171},[87,36499,32861],{"class":97},[87,36501,31339],{"class":171},[87,36503,36504],{"class":97}," AlexNet\n",[87,36506,36507,36509,36511,36513],{"class":89,"line":2573},[87,36508,31684],{"class":171},[87,36510,31687],{"class":97},[87,36512,31339],{"class":171},[87,36514,31692],{"class":97},[87,36516,36517],{"class":89,"line":2579},[87,36518,3355],{"emptyLinePlaceholder":1029},[87,36520,36521],{"class":89,"line":2584},[87,36522,3355],{"emptyLinePlaceholder":1029},[87,36524,36525],{"class":89,"line":2598},[87,36526,32889],{"class":199},[87,36528,36529,36531,36533],{"class":89,"line":2603},[87,36530,32894],{"class":171},[87,36532,32897],{"class":205},[87,36534,32900],{"class":97},[87,36536,36537,36539,36541,36543,36545],{"class":89,"line":2609},[87,36538,32905],{"class":97},[87,36540,946],{"class":171},[87,36542,32402],{"class":97},[87,36544,32410],{"class":949},[87,36546,32413],{"class":97},[87,36548,36549,36551,36553,36555],{"class":89,"line":2630},[87,36550,32918],{"class":492},[87,36552,946],{"class":171},[87,36554,32423],{"class":104},[87,36556,32413],{"class":97},[87,36558,36559,36561,36563,36565,36567,36569,36571],{"class":89,"line":2635},[87,36560,32929],{"class":492},[87,36562,946],{"class":171},[87,36564,32440],{"class":97},[87,36566,32443],{"class":492},[87,36568,946],{"class":171},[87,36570,36396],{"class":104},[87,36572,32451],{"class":97},[87,36574,36575,36577,36579,36581],{"class":89,"line":2649},[87,36576,32946],{"class":492},[87,36578,946],{"class":171},[87,36580,32423],{"class":104},[87,36582,1108],{"class":97},[87,36584,36585,36587,36589,36591,36593,36595,36597,36599,36601,36603,36605,36607,36609,36611,36613],{"class":89,"line":2654},[87,36586,32957],{"class":97},[87,36588,946],{"class":171},[87,36590,32962],{"class":97},[87,36592,32965],{"class":104},[87,36594,165],{"class":97},[87,36596,32970],{"class":104},[87,36598,1549],{"class":171},[87,36600,8308],{"class":104},[87,36602,32977],{"class":97},[87,36604,32965],{"class":104},[87,36606,165],{"class":97},[87,36608,32984],{"class":104},[87,36610,1549],{"class":171},[87,36612,8308],{"class":104},[87,36614,32991],{"class":97},[87,36616,36617,36619,36621,36623,36625,36627],{"class":89,"line":2683},[87,36618,32996],{"class":97},[87,36620,946],{"class":171},[87,36622,33001],{"class":97},[87,36624,32484],{"class":492},[87,36626,946],{"class":171},[87,36628,32489],{"class":97},[87,36630,36631,36633,36635,36637],{"class":89,"line":2688},[87,36632,33012],{"class":492},[87,36634,946],{"class":171},[87,36636,33017],{"class":104},[87,36638,32413],{"class":97},[87,36640,36641,36643,36645,36647],{"class":89,"line":2705},[87,36642,33024],{"class":492},[87,36644,946],{"class":171},[87,36646,32423],{"class":104},[87,36648,32413],{"class":97},[87,36650,36651],{"class":89,"line":2710},[87,36652,33035],{"class":199},[87,36654,36655,36657,36659,36661],{"class":89,"line":2715},[87,36656,33040],{"class":492},[87,36658,946],{"class":171},[87,36660,1490],{"class":104},[87,36662,1108],{"class":97},[87,36664,36665,36667,36669,36671,36673,36675],{"class":89,"line":2720},[87,36666,33051],{"class":97},[87,36668,946],{"class":171},[87,36670,32481],{"class":97},[87,36672,32484],{"class":492},[87,36674,946],{"class":171},[87,36676,33062],{"class":97},[87,36678,36679,36681,36683,36685],{"class":89,"line":2734},[87,36680,33067],{"class":492},[87,36682,946],{"class":171},[87,36684,33017],{"class":104},[87,36686,32413],{"class":97},[87,36688,36689,36691,36693,36695],{"class":89,"line":2739},[87,36690,33078],{"class":492},[87,36692,946],{"class":171},[87,36694,32423],{"class":104},[87,36696,32413],{"class":97},[87,36698,36699,36701,36703,36705],{"class":89,"line":3532},[87,36700,33089],{"class":492},[87,36702,946],{"class":171},[87,36704,1490],{"class":104},[87,36706,1108],{"class":97},[87,36708,36709,36711],{"class":89,"line":3546},[87,36710,5044],{"class":171},[87,36712,33102],{"class":97},[87,36714,36715],{"class":89,"line":3554},[87,36716,3355],{"emptyLinePlaceholder":1029},[87,36718,36719],{"class":89,"line":3559},[87,36720,33111],{"class":199},[87,36722,36723],{"class":89,"line":3565},[87,36724,33116],{"class":199},[87,36726,36727],{"class":89,"line":3571},[87,36728,3355],{"emptyLinePlaceholder":1029},[87,36730,36731],{"class":89,"line":3576},[87,36732,33125],{"class":199},[87,36734,36735,36737,36739],{"class":89,"line":8898},[87,36736,32894],{"class":171},[87,36738,33132],{"class":205},[87,36740,33135],{"class":97},[87,36742,36743,36745,36747,36749,36751,36753,36755,36757,36759],{"class":89,"line":8922},[87,36744,32184],{"class":97},[87,36746,946],{"class":171},[87,36748,31398],{"class":97},[87,36750,32191],{"class":949},[87,36752,2660],{"class":171},[87,36754,32196],{"class":97},[87,36756,2657],{"class":171},[87,36758,33154],{"class":949},[87,36760,1108],{"class":97},[87,36762,36763],{"class":89,"line":8927},[87,36764,3355],{"emptyLinePlaceholder":1029},[87,36766,36767],{"class":89,"line":8933},[87,36768,3355],{"emptyLinePlaceholder":1029},[87,36770,36771],{"class":89,"line":8960},[87,36772,33169],{"class":199},[87,36774,36775],{"class":89,"line":8965},[87,36776,33174],{"class":199},[87,36778,36779],{"class":89,"line":8971},[87,36780,33179],{"class":199},[87,36782,36783,36785,36787,36789,36791,36793,36795],{"class":89,"line":8983},[87,36784,33184],{"class":97},[87,36786,946],{"class":171},[87,36788,33189],{"class":97},[87,36790,33192],{"class":492},[87,36792,946],{"class":171},[87,36794,33197],{"class":104},[87,36796,1108],{"class":97},[87,36798,36799],{"class":89,"line":8995},[87,36800,3355],{"emptyLinePlaceholder":1029},[87,36802,36803],{"class":89,"line":9007},[87,36804,33208],{"class":199},[87,36806,36807,36809,36811],{"class":89,"line":10666},[87,36808,33213],{"class":97},[87,36810,946],{"class":171},[87,36812,33218],{"class":97},[87,36814,36815],{"class":89,"line":10691},[87,36816,3355],{"emptyLinePlaceholder":1029},[87,36818,36819],{"class":89,"line":10714},[87,36820,33227],{"class":199},[87,36822,36823,36825,36827],{"class":89,"line":10738},[87,36824,32236],{"class":97},[87,36826,946],{"class":171},[87,36828,33236],{"class":97},[87,36830,36831],{"class":89,"line":10743},[87,36832,33241],{"class":199},[87,36834,36835],{"class":89,"line":10748},[87,36836,33246],{"class":199},[87,36838,36839],{"class":89,"line":10753},[87,36840,33251],{"class":199},[87,36842,36843,36845,36847],{"class":89,"line":10762},[87,36844,33256],{"class":97},[87,36846,946],{"class":171},[87,36848,33261],{"class":97},[87,36850,36851],{"class":89,"line":10767},[87,36852,3355],{"emptyLinePlaceholder":1029},[87,36854,36855],{"class":89,"line":10773},[87,36856,3355],{"emptyLinePlaceholder":1029},[87,36858,36859],{"class":89,"line":10794},[87,36860,33274],{"class":199},[87,36862,36863],{"class":89,"line":10800},[87,36864,33279],{"class":199},[87,36866,36867,36869,36871],{"class":89,"line":10814},[87,36868,33284],{"class":97},[87,36870,946],{"class":171},[87,36872,33289],{"class":104},[87,36874,36875],{"class":89,"line":10820},[87,36876,33294],{"class":199},[87,36878,36879,36881,36883],{"class":89,"line":10847},[87,36880,33299],{"class":97},[87,36882,946],{"class":171},[87,36884,33304],{"class":97},[87,36886,36887],{"class":89,"line":10856},[87,36888,33309],{"class":199},[87,36890,36891,36893,36895],{"class":89,"line":10862},[87,36892,33314],{"class":97},[87,36894,946],{"class":171},[87,36896,33304],{"class":97},[87,36898,36899],{"class":89,"line":10870},[87,36900,33323],{"class":199},[87,36902,36903,36905,36907],{"class":89,"line":10875},[87,36904,33328],{"class":97},[87,36906,946],{"class":171},[87,36908,33304],{"class":97},[87,36910,36911],{"class":89,"line":17553},[87,36912,33337],{"class":199},[87,36914,36915,36917,36919],{"class":89,"line":17559},[87,36916,33342],{"class":97},[87,36918,946],{"class":171},[87,36920,33304],{"class":97},[87,36922,36923],{"class":89,"line":17582},[87,36924,3355],{"emptyLinePlaceholder":1029},[87,36926,36927],{"class":89,"line":17588},[87,36928,33355],{"class":199},[87,36930,36931,36933,36935],{"class":89,"line":17611},[87,36932,33360],{"class":97},[87,36934,946],{"class":171},[87,36936,33365],{"class":97},[87,36938,36939],{"class":89,"line":17625},[87,36940,3355],{"emptyLinePlaceholder":1029},[87,36942,36943],{"class":89,"line":17645},[87,36944,3355],{"emptyLinePlaceholder":1029},[87,36946,36947],{"class":89,"line":17651},[87,36948,33378],{"class":199},[87,36950,36951,36953,36955,36957,36959],{"class":89,"line":17662},[87,36952,4155],{"class":171},[87,36954,33385],{"class":97},[87,36956,26990],{"class":171},[87,36958,33390],{"class":104},[87,36960,33393],{"class":97},[87,36962,36963,36965,36967,36969,36971,36973,36975,36977,36979,36981,36983],{"class":89,"line":17685},[87,36964,33398],{"class":104},[87,36966,165],{"class":97},[87,36968,33403],{"class":949},[87,36970,33406],{"class":104},[87,36972,1677],{"class":949},[87,36974,33406],{"class":104},[87,36976,1347],{"class":949},[87,36978,33415],{"class":97},[87,36980,1625],{"class":171},[87,36982,1313],{"class":104},[87,36984,31444],{"class":97},[87,36986,36987,36989,36991,36993,36995,36997],{"class":89,"line":17707},[87,36988,33398],{"class":104},[87,36990,165],{"class":97},[87,36992,33430],{"class":949},[87,36994,1549],{"class":171},[87,36996,242],{"class":104},[87,36998,1108],{"class":97},[87,37000,37001],{"class":89,"line":17712},[87,37002,3355],{"emptyLinePlaceholder":1029},[87,37004,37005],{"class":89,"line":17718},[87,37006,33445],{"class":199},[87,37008,37009],{"class":89,"line":17732},[87,37010,33450],{"class":199},[87,37012,37013,37015,37017],{"class":89,"line":17745},[87,37014,33455],{"class":97},[87,37016,946],{"class":171},[87,37018,33289],{"class":104},[87,37020,37021],{"class":89,"line":17750},[87,37022,33464],{"class":199},[87,37024,37025,37027,37029],{"class":89,"line":17764},[87,37026,33469],{"class":97},[87,37028,946],{"class":171},[87,37030,4039],{"class":104},[87,37032,37033],{"class":89,"line":17769},[87,37034,33478],{"class":199},[87,37036,37037,37039,37041],{"class":89,"line":17775},[87,37038,33483],{"class":97},[87,37040,946],{"class":171},[87,37042,33289],{"class":104},[87,37044,37045],{"class":89,"line":17780},[87,37046,33492],{"class":199},[87,37048,37049,37051,37053],{"class":89,"line":17794},[87,37050,33497],{"class":97},[87,37052,946],{"class":171},[87,37054,4039],{"class":104},[87,37056,37057],{"class":89,"line":17799},[87,37058,33506],{"class":199},[87,37060,37061,37063,37065],{"class":89,"line":17804},[87,37062,33511],{"class":97},[87,37064,946],{"class":171},[87,37066,4039],{"class":104},[87,37068,37069],{"class":89,"line":17818},[87,37070,33520],{"class":199},[87,37072,37073,37075,37077],{"class":89,"line":17830},[87,37074,33525],{"class":97},[87,37076,946],{"class":171},[87,37078,4039],{"class":104},[87,37080,37081],{"class":89,"line":17835},[87,37082,33534],{"class":199},[87,37084,37085,37087,37089,37091,37093],{"class":89,"line":17848},[87,37086,4357],{"class":171},[87,37088,32548],{"class":97},[87,37090,26990],{"class":171},[87,37092,32553],{"class":104},[87,37094,33547],{"class":97},[87,37096,37097],{"class":89,"line":17853},[87,37098,33552],{"class":199},[87,37100,37101,37103,37105],{"class":89,"line":17858},[87,37102,33557],{"class":97},[87,37104,946],{"class":171},[87,37106,33562],{"class":97},[87,37108,37109],{"class":89,"line":17863},[87,37110,33567],{"class":199},[87,37112,37113,37115,37117],{"class":89,"line":17876},[87,37114,33572],{"class":97},[87,37116,946],{"class":171},[87,37118,33577],{"class":97},[87,37120,37121],{"class":89,"line":17881},[87,37122,33583],{"class":199},[87,37124,37125],{"class":89,"line":33580},[87,37126,33589],{"class":97},[87,37128,37129],{"class":89,"line":33586},[87,37130,33595],{"class":199},[87,37132,37133],{"class":89,"line":33592},[87,37134,33601],{"class":199},[87,37136,37137,37139,37141],{"class":89,"line":33598},[87,37138,33607],{"class":97},[87,37140,946],{"class":171},[87,37142,33612],{"class":97},[87,37144,37145],{"class":89,"line":33604},[87,37146,33618],{"class":199},[87,37148,37149,37151,37153,37155,37157,37159,37161],{"class":89,"line":33615},[87,37150,33624],{"class":97},[87,37152,946],{"class":171},[87,37154,33629],{"class":97},[87,37156,33632],{"class":492},[87,37158,946],{"class":171},[87,37160,1313],{"class":104},[87,37162,1108],{"class":97},[87,37164,37165],{"class":89,"line":33621},[87,37166,33644],{"class":199},[87,37168,37169,37171,37173],{"class":89,"line":33641},[87,37170,33650],{"class":97},[87,37172,946],{"class":171},[87,37174,33655],{"class":97},[87,37176,37177],{"class":89,"line":33647},[87,37178,33661],{"class":199},[87,37180,37181],{"class":89,"line":33658},[87,37182,33667],{"class":97},[87,37184,37185],{"class":89,"line":33664},[87,37186,33673],{"class":199},[87,37188,37189],{"class":89,"line":33670},[87,37190,33679],{"class":97},[87,37192,37193],{"class":89,"line":33676},[87,37194,33685],{"class":199},[87,37196,37197],{"class":89,"line":33682},[87,37198,33691],{"class":97},[87,37200,37201],{"class":89,"line":33688},[87,37202,33697],{"class":199},[87,37204,37205,37207,37209,37211,37213,37215,37217],{"class":89,"line":33694},[87,37206,33703],{"class":97},[87,37208,10427],{"class":171},[87,37210,33708],{"class":97},[87,37212,1549],{"class":171},[87,37214,33713],{"class":97},[87,37216,111],{"class":104},[87,37218,1108],{"class":97},[87,37220,37221],{"class":89,"line":33700},[87,37222,33723],{"class":199},[87,37224,37225,37227,37229,37231,37233],{"class":89,"line":33720},[87,37226,33729],{"class":97},[87,37228,10427],{"class":171},[87,37230,33734],{"class":97},[87,37232,3903],{"class":171},[87,37234,33739],{"class":97},[87,37236,37237],{"class":89,"line":33726},[87,37238,33745],{"class":199},[87,37240,37241,37243,37245,37247,37249],{"class":89,"line":33742},[87,37242,33751],{"class":97},[87,37244,10427],{"class":171},[87,37246,33713],{"class":97},[87,37248,111],{"class":104},[87,37250,1108],{"class":97},[87,37252,37253],{"class":89,"line":33748},[87,37254,33765],{"class":199},[87,37256,37257,37259,37261,37263,37265],{"class":89,"line":33762},[87,37258,4357],{"class":171},[87,37260,33773],{"class":97},[87,37262,26990],{"class":171},[87,37264,32553],{"class":104},[87,37266,33780],{"class":97},[87,37268,37269],{"class":89,"line":33768},[87,37270,33786],{"class":199},[87,37272,37273,37275,37277],{"class":89,"line":33783},[87,37274,33557],{"class":97},[87,37276,946],{"class":171},[87,37278,33562],{"class":97},[87,37280,37281],{"class":89,"line":33789},[87,37282,33801],{"class":199},[87,37284,37285,37287,37289],{"class":89,"line":33798},[87,37286,33572],{"class":97},[87,37288,946],{"class":171},[87,37290,33577],{"class":97},[87,37292,37293],{"class":89,"line":33804},[87,37294,33816],{"class":199},[87,37296,37297],{"class":89,"line":33813},[87,37298,33822],{"class":97},[87,37300,37301],{"class":89,"line":33819},[87,37302,37303],{"class":199},"            # 验证时不计算梯度以节省内存\u002F计算\n",[87,37305,37306,37308],{"class":89,"line":33825},[87,37307,33828],{"class":171},[87,37309,33831],{"class":97},[87,37311,37312],{"class":89,"line":33834},[87,37313,33837],{"class":199},[87,37315,37316,37319,37321],{"class":89,"line":33840},[87,37317,37318],{"class":97},"                output",[87,37320,946],{"class":171},[87,37322,33612],{"class":97},[87,37324,37325],{"class":89,"line":33851},[87,37326,33854],{"class":199},[87,37328,37329,37332,37334,37336,37338,37340,37342],{"class":89,"line":33857},[87,37330,37331],{"class":97},"                pre_lab",[87,37333,946],{"class":171},[87,37335,33629],{"class":97},[87,37337,33632],{"class":492},[87,37339,946],{"class":171},[87,37341,1313],{"class":104},[87,37343,1108],{"class":97},[87,37345,37346],{"class":89,"line":33876},[87,37347,33879],{"class":199},[87,37349,37350,37353,37355],{"class":89,"line":33882},[87,37351,37352],{"class":97},"                val_batch_loss",[87,37354,946],{"class":171},[87,37356,33655],{"class":97},[87,37358,37359],{"class":89,"line":33893},[87,37360,33896],{"class":199},[87,37362,37363,37366,37368,37371,37373,37375,37377],{"class":89,"line":33899},[87,37364,37365],{"class":97},"                val_loss",[87,37367,10427],{"class":171},[87,37369,37370],{"class":97},"val_batch_loss.item()",[87,37372,1549],{"class":171},[87,37374,33713],{"class":97},[87,37376,111],{"class":104},[87,37378,1108],{"class":97},[87,37380,37381,37384,37386,37388,37390],{"class":89,"line":33919},[87,37382,37383],{"class":97},"                val_corrects",[87,37385,10427],{"class":171},[87,37387,33734],{"class":97},[87,37389,3903],{"class":171},[87,37391,33739],{"class":97},[87,37393,37394],{"class":89,"line":33935},[87,37395,37396],{"class":199},"            # 当前用于验证的样本数量\n",[87,37398,37399,37402,37404,37406,37408],{"class":89,"line":33941},[87,37400,37401],{"class":97},"            val_num",[87,37403,10427],{"class":171},[87,37405,33713],{"class":97},[87,37407,111],{"class":104},[87,37409,1108],{"class":97},[87,37411,37412],{"class":89,"line":33955},[87,37413,33958],{"class":199},[87,37415,37416],{"class":89,"line":33961},[87,37417,33964],{"class":199},[87,37419,37420,37422,37424],{"class":89,"line":33967},[87,37421,33970],{"class":97},[87,37423,1677],{"class":171},[87,37425,33975],{"class":97},[87,37427,37428],{"class":89,"line":33978},[87,37429,33981],{"class":199},[87,37431,37432],{"class":89,"line":33984},[87,37433,33987],{"class":199},[87,37435,37436,37438,37440],{"class":89,"line":33990},[87,37437,33993],{"class":97},[87,37439,1677],{"class":171},[87,37441,33975],{"class":97},[87,37443,37444],{"class":89,"line":34000},[87,37445,34003],{"class":199},[87,37447,37448,37450,37452],{"class":89,"line":34006},[87,37449,34009],{"class":97},[87,37451,1677],{"class":171},[87,37453,34014],{"class":97},[87,37455,37456],{"class":89,"line":34017},[87,37457,34020],{"class":199},[87,37459,37460,37462,37464],{"class":89,"line":34023},[87,37461,34026],{"class":97},[87,37463,1677],{"class":171},[87,37465,34014],{"class":97},[87,37467,37468],{"class":89,"line":34033},[87,37469,3355],{"emptyLinePlaceholder":1029},[87,37471,37472],{"class":89,"line":34038},[87,37473,34041],{"class":199},[87,37475,37476,37478,37480,37482,37484,37486,37488,37490,37492,37494,37496,37498,37500,37502,37504,37506,37508,37510,37512,37514],{"class":89,"line":34044},[87,37477,33398],{"class":104},[87,37479,165],{"class":97},[87,37481,4546],{"class":949},[87,37483,33406],{"class":104},[87,37485,34055],{"class":949},[87,37487,1988],{"class":104},[87,37489,34060],{"class":171},[87,37491,2037],{"class":104},[87,37493,34065],{"class":949},[87,37495,1988],{"class":104},[87,37497,34060],{"class":171},[87,37499,2037],{"class":104},[87,37501,4546],{"class":949},[87,37503,34076],{"class":97},[87,37505,1625],{"class":171},[87,37507,1313],{"class":104},[87,37509,34083],{"class":97},[87,37511,1625],{"class":171},[87,37513,1313],{"class":104},[87,37515,34090],{"class":97},[87,37517,37518,37520,37522,37524,37526,37528,37530,37532,37534,37536,37538,37540,37542,37544,37546,37548,37550,37552,37554,37556],{"class":89,"line":34093},[87,37519,33398],{"class":104},[87,37521,165],{"class":97},[87,37523,4546],{"class":949},[87,37525,33406],{"class":104},[87,37527,34104],{"class":949},[87,37529,1988],{"class":104},[87,37531,34060],{"class":171},[87,37533,2037],{"class":104},[87,37535,34113],{"class":949},[87,37537,1988],{"class":104},[87,37539,34060],{"class":171},[87,37541,2037],{"class":104},[87,37543,4546],{"class":949},[87,37545,34124],{"class":97},[87,37547,1625],{"class":171},[87,37549,1313],{"class":104},[87,37551,34131],{"class":97},[87,37553,1625],{"class":171},[87,37555,1313],{"class":104},[87,37557,34090],{"class":97},[87,37559,37560],{"class":89,"line":34140},[87,37561,3355],{"emptyLinePlaceholder":1029},[87,37563,37564],{"class":89,"line":34145},[87,37565,34148],{"class":199},[87,37567,37568,37570,37572,37574,37576,37578,37580],{"class":89,"line":34151},[87,37569,3452],{"class":171},[87,37571,34156],{"class":97},[87,37573,1625],{"class":171},[87,37575,1313],{"class":104},[87,37577,2031],{"class":97},[87,37579,2051],{"class":171},[87,37581,34167],{"class":97},[87,37583,37584],{"class":89,"line":34170},[87,37585,34173],{"class":199},[87,37587,37588,37590,37592,37594,37596,37598,37600],{"class":89,"line":34176},[87,37589,34179],{"class":97},[87,37591,1141],{"class":104},[87,37593,946],{"class":171},[87,37595,34186],{"class":97},[87,37597,1625],{"class":171},[87,37599,1313],{"class":104},[87,37601,34193],{"class":97},[87,37603,37604],{"class":89,"line":34196},[87,37605,34199],{"class":199},[87,37607,37608],{"class":89,"line":34202},[87,37609,34205],{"class":199},[87,37611,37612,37614,37616],{"class":89,"line":34208},[87,37613,34211],{"class":97},[87,37615,946],{"class":171},[87,37617,33261],{"class":97},[87,37619,37620],{"class":89,"line":34218},[87,37621,3355],{"emptyLinePlaceholder":1029},[87,37623,37624],{"class":89,"line":34223},[87,37625,34226],{"class":199},[87,37627,37628,37630,37632,37634,37636],{"class":89,"line":34229},[87,37629,34232],{"class":97},[87,37631,946],{"class":171},[87,37633,34237],{"class":97},[87,37635,1625],{"class":171},[87,37637,34242],{"class":97},[87,37639,37640,37642,37644,37646,37648,37650,37652,37654,37656,37658,37660,37662,37664,37666,37668,37670,37672,37674],{"class":89,"line":34245},[87,37641,33398],{"class":104},[87,37643,165],{"class":97},[87,37645,34252],{"class":949},[87,37647,1988],{"class":104},[87,37649,34257],{"class":171},[87,37651,2037],{"class":104},[87,37653,1637],{"class":949},[87,37655,1988],{"class":104},[87,37657,34257],{"class":171},[87,37659,2037],{"class":104},[87,37661,34270],{"class":949},[87,37663,34273],{"class":97},[87,37665,34276],{"class":171},[87,37667,1999],{"class":104},[87,37669,34281],{"class":97},[87,37671,1423],{"class":171},[87,37673,1999],{"class":104},[87,37675,31444],{"class":97},[87,37677,37678],{"class":89,"line":34290},[87,37679,37680],{"class":199},"    # 选择最优参数并保存\n",[87,37682,37683],{"class":89,"line":34296},[87,37684,37685],{"class":199},"    # 保存最佳模型权重字典\n",[87,37687,37688,37691,37693],{"class":89,"line":34302},[87,37689,37690],{"class":97},"    torch.save(best_model_wts,",[87,37692,34314],{"class":949},[87,37694,1108],{"class":97},[87,37696,37697],{"class":89,"line":34308},[87,37698,34334],{"class":199},[87,37700,37701,37703,37705,37707,37709,37711],{"class":89,"line":34319},[87,37702,34340],{"class":97},[87,37704,946],{"class":171},[87,37706,34345],{"class":97},[87,37708,34348],{"class":492},[87,37710,946],{"class":171},[87,37712,2503],{"class":97},[87,37714,37715,37717,37719,37721],{"class":89,"line":34325},[87,37716,34358],{"class":949},[87,37718,1951],{"class":97},[87,37720,34363],{"class":104},[87,37722,34366],{"class":97},[87,37724,37725,37727],{"class":89,"line":34331},[87,37726,34372],{"class":949},[87,37728,34375],{"class":97},[87,37730,37731,37733],{"class":89,"line":34337},[87,37732,34381],{"class":949},[87,37734,34384],{"class":97},[87,37736,37737,37739],{"class":89,"line":34355},[87,37738,34390],{"class":949},[87,37740,34393],{"class":97},[87,37742,37743,37745],{"class":89,"line":34369},[87,37744,34399],{"class":949},[87,37746,34402],{"class":97},[87,37748,37749],{"class":89,"line":34378},[87,37750,34408],{"class":97},[87,37752,37753],{"class":89,"line":34387},[87,37754,34414],{"class":199},[87,37756,37757,37759],{"class":89,"line":34396},[87,37758,5044],{"class":171},[87,37760,34422],{"class":97},[87,37762,37763],{"class":89,"line":34405},[87,37764,3355],{"emptyLinePlaceholder":1029},[87,37766,37767],{"class":89,"line":34411},[87,37768,34433],{"class":199},[87,37770,37771,37773,37775],{"class":89,"line":34417},[87,37772,32894],{"class":171},[87,37774,34441],{"class":205},[87,37776,34444],{"class":97},[87,37778,37779],{"class":89,"line":34425},[87,37780,34450],{"class":199},[87,37782,37783,37785,37787,37789,37791,37793,37795,37797],{"class":89,"line":34430},[87,37784,34456],{"class":97},[87,37786,32640],{"class":492},[87,37788,946],{"class":171},[87,37790,165],{"class":97},[87,37792,1592],{"class":104},[87,37794,1473],{"class":97},[87,37796,1389],{"class":104},[87,37798,31444],{"class":97},[87,37800,37801],{"class":89,"line":34436},[87,37802,34476],{"class":199},[87,37804,37805],{"class":89,"line":34447},[87,37806,34482],{"class":199},[87,37808,37809],{"class":89,"line":34453},[87,37810,34488],{"class":199},[87,37812,37813,37815,37817,37819,37821,37823,37825],{"class":89,"line":34473},[87,37814,32674],{"class":97},[87,37816,1313],{"class":104},[87,37818,1473],{"class":97},[87,37820,1176],{"class":104},[87,37822,1473],{"class":97},[87,37824,1313],{"class":104},[87,37826,1108],{"class":97},[87,37828,37829],{"class":89,"line":34479},[87,37830,34511],{"class":199},[87,37832,37833],{"class":89,"line":34485},[87,37834,34517],{"class":199},[87,37836,37837],{"class":89,"line":34491},[87,37838,34523],{"class":199},[87,37840,37841],{"class":89,"line":34508},[87,37842,34529],{"class":199},[87,37844,37845],{"class":89,"line":34514},[87,37846,34535],{"class":199},[87,37848,37849,37851,37853,37855,37857,37859,37861,37863,37865],{"class":89,"line":34520},[87,37850,34541],{"class":97},[87,37852,34544],{"class":949},[87,37854,34547],{"class":97},[87,37856,34550],{"class":949},[87,37858,1473],{"class":97},[87,37860,34555],{"class":492},[87,37862,946],{"class":171},[87,37864,34560],{"class":949},[87,37866,1108],{"class":97},[87,37868,37869,37871,37873,37875,37877,37879,37881,37883,37885],{"class":89,"line":34526},[87,37870,34541],{"class":97},[87,37872,34544],{"class":949},[87,37874,34572],{"class":97},[87,37876,34575],{"class":949},[87,37878,1473],{"class":97},[87,37880,34555],{"class":492},[87,37882,946],{"class":171},[87,37884,34584],{"class":949},[87,37886,1108],{"class":97},[87,37888,37889],{"class":89,"line":34532},[87,37890,34592],{"class":199},[87,37892,37893],{"class":89,"line":34538},[87,37894,34598],{"class":97},[87,37896,37897],{"class":89,"line":34565},[87,37898,34604],{"class":199},[87,37900,37901,37903,37905],{"class":89,"line":34589},[87,37902,34610],{"class":97},[87,37904,34613],{"class":949},[87,37906,1108],{"class":97},[87,37908,37909,37911,37913],{"class":89,"line":34595},[87,37910,34621],{"class":97},[87,37912,34624],{"class":949},[87,37914,1108],{"class":97},[87,37916,37917],{"class":89,"line":34601},[87,37918,34632],{"class":199},[87,37920,37921,37923,37925,37927,37929,37931,37933],{"class":89,"line":34607},[87,37922,32674],{"class":97},[87,37924,1313],{"class":104},[87,37926,1473],{"class":97},[87,37928,1176],{"class":104},[87,37930,1473],{"class":97},[87,37932,1176],{"class":104},[87,37934,1108],{"class":97},[87,37936,37937,37939,37941,37943,37945,37947,37949,37951,37953],{"class":89,"line":34618},[87,37938,34541],{"class":97},[87,37940,34544],{"class":949},[87,37942,34659],{"class":97},[87,37944,34550],{"class":949},[87,37946,1473],{"class":97},[87,37948,34555],{"class":492},[87,37950,946],{"class":171},[87,37952,34670],{"class":949},[87,37954,1108],{"class":97},[87,37956,37957,37959,37961,37963,37965,37967,37969,37971,37973],{"class":89,"line":34629},[87,37958,34541],{"class":97},[87,37960,34544],{"class":949},[87,37962,34682],{"class":97},[87,37964,34575],{"class":949},[87,37966,1473],{"class":97},[87,37968,34555],{"class":492},[87,37970,946],{"class":171},[87,37972,34693],{"class":949},[87,37974,1108],{"class":97},[87,37976,37977],{"class":89,"line":34635},[87,37978,34701],{"class":199},[87,37980,37981],{"class":89,"line":34652},[87,37982,34598],{"class":97},[87,37984,37985,37987,37989],{"class":89,"line":34675},[87,37986,34610],{"class":97},[87,37988,34544],{"class":949},[87,37990,1108],{"class":97},[87,37992,37993,37995,37997],{"class":89,"line":34698},[87,37994,34621],{"class":97},[87,37996,34723],{"class":949},[87,37998,1108],{"class":97},[87,38000,38001],{"class":89,"line":34704},[87,38002,34731],{"class":97},[87,38004,38005],{"class":89,"line":34709},[87,38006,3355],{"emptyLinePlaceholder":1029},[87,38008,38009],{"class":89,"line":34718},[87,38010,34742],{"class":199},[87,38012,38013,38015,38017,38019,38021],{"class":89,"line":34728},[87,38014,2488],{"class":171},[87,38016,32167],{"class":104},[87,38018,3903],{"class":171},[87,38020,32172],{"class":949},[87,38022,4693],{"class":97},[87,38024,38025],{"class":89,"line":34734},[87,38026,34761],{"class":199},[87,38028,38029,38032,38034],{"class":89,"line":34739},[87,38030,38031],{"class":97},"    AlexNet",[87,38033,946],{"class":171},[87,38035,38036],{"class":97},"AlexNet()\n",[87,38038,38039,38041,38043],{"class":89,"line":34745},[87,38040,34778],{"class":97},[87,38042,946],{"class":171},[87,38044,34783],{"class":97},[87,38046,38047,38049,38051,38054,38056,38058,38060],{"class":89,"line":34758},[87,38048,34340],{"class":97},[87,38050,946],{"class":171},[87,38052,38053],{"class":97},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[87,38055,34796],{"class":492},[87,38057,946],{"class":171},[87,38059,1792],{"class":104},[87,38061,1108],{"class":97},[87,38063,38064],{"class":89,"line":34764},[87,38065,34808],{"class":97},[1055,38067,38068],{"start":120},[29,38069,34821],{},[77,38071,38073],{"className":31325,"code":38072,"language":31327,"meta":82,"style":82},"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",[84,38074,38075,38081,38091,38101,38111,38115,38125,38135,38146,38150,38154,38158,38166,38182,38192,38208,38218,38232,38236,38246,38256,38266,38272,38276,38280,38288,38292,38308,38316,38320,38324,38332,38340,38344,38348,38352,38356,38362,38366,38376,38384,38392,38396,38400,38404,38412,38416,38432,38436,38440,38444,38456,38460,38472,38476,38480,38492,38496,38506,38510,38514,38526,38530,38538,38542,38546,38554,38558,38566,38570,38574,38578,38582,38586,38602,38610,38614,38618,38666,38672,38676,38686,38694,38702,38706,38710,38714,38718,38726,38730,38746,38750,38758,38766],{"__ignoreMap":82},[87,38076,38077,38079],{"class":89,"line":90},[87,38078,31339],{"class":171},[87,38080,31342],{"class":97},[87,38082,38083,38085,38087,38089],{"class":89,"line":101},[87,38084,31339],{"class":171},[87,38086,32362],{"class":97},[87,38088,32330],{"class":171},[87,38090,32367],{"class":97},[87,38092,38093,38095,38097,38099],{"class":89,"line":120},[87,38094,31684],{"class":171},[87,38096,34849],{"class":97},[87,38098,31339],{"class":171},[87,38100,34854],{"class":97},[87,38102,38103,38105,38107,38109],{"class":89,"line":222},[87,38104,31684],{"class":171},[87,38106,32345],{"class":97},[87,38108,31339],{"class":171},[87,38110,32350],{"class":97},[87,38112,38113],{"class":89,"line":234},[87,38114,34869],{"class":199},[87,38116,38117,38119,38121,38123],{"class":89,"line":256},[87,38118,31684],{"class":171},[87,38120,32315],{"class":97},[87,38122,31339],{"class":171},[87,38124,32320],{"class":97},[87,38126,38127,38129,38131,38133],{"class":89,"line":269},[87,38128,31684],{"class":171},[87,38130,32861],{"class":97},[87,38132,31339],{"class":171},[87,38134,36504],{"class":97},[87,38136,38137,38139,38142,38144],{"class":89,"line":463},[87,38138,31684],{"class":171},[87,38140,38141],{"class":97}," 练习.AlexNet.model ",[87,38143,31339],{"class":171},[87,38145,36504],{"class":97},[87,38147,38148],{"class":89,"line":469},[87,38149,3355],{"emptyLinePlaceholder":1029},[87,38151,38152],{"class":89,"line":2287},[87,38153,3355],{"emptyLinePlaceholder":1029},[87,38155,38156],{"class":89,"line":2568},[87,38157,34898],{"class":199},[87,38159,38160,38162,38164],{"class":89,"line":2573},[87,38161,32894],{"class":171},[87,38163,34905],{"class":205},[87,38165,32900],{"class":97},[87,38167,38168,38170,38172,38174,38176,38178,38180],{"class":89,"line":2579},[87,38169,34912],{"class":97},[87,38171,946],{"class":171},[87,38173,32402],{"class":97},[87,38175,32405],{"class":492},[87,38177,946],{"class":171},[87,38179,32410],{"class":949},[87,38181,32413],{"class":97},[87,38183,38184,38186,38188,38190],{"class":89,"line":2584},[87,38185,34929],{"class":492},[87,38187,946],{"class":171},[87,38189,34934],{"class":104},[87,38191,32413],{"class":97},[87,38193,38194,38196,38198,38200,38202,38204,38206],{"class":89,"line":2598},[87,38195,34941],{"class":492},[87,38197,946],{"class":171},[87,38199,32440],{"class":97},[87,38201,32443],{"class":492},[87,38203,946],{"class":171},[87,38205,36396],{"class":104},[87,38207,32451],{"class":97},[87,38209,38210,38212,38214,38216],{"class":89,"line":2603},[87,38211,34958],{"class":492},[87,38213,946],{"class":171},[87,38215,32423],{"class":104},[87,38217,1108],{"class":97},[87,38219,38220,38222,38224,38226,38228,38230],{"class":89,"line":2609},[87,38221,34969],{"class":97},[87,38223,946],{"class":171},[87,38225,32481],{"class":97},[87,38227,32484],{"class":492},[87,38229,946],{"class":171},[87,38231,34980],{"class":97},[87,38233,38234],{"class":89,"line":2630},[87,38235,34985],{"class":199},[87,38237,38238,38240,38242,38244],{"class":89,"line":2635},[87,38239,34990],{"class":492},[87,38241,946],{"class":171},[87,38243,1313],{"class":104},[87,38245,32413],{"class":97},[87,38247,38248,38250,38252,38254],{"class":89,"line":2649},[87,38249,35001],{"class":492},[87,38251,946],{"class":171},[87,38253,32423],{"class":104},[87,38255,32413],{"class":97},[87,38257,38258,38260,38262,38264],{"class":89,"line":2654},[87,38259,35012],{"class":492},[87,38261,946],{"class":171},[87,38263,111],{"class":104},[87,38265,1108],{"class":97},[87,38267,38268,38270],{"class":89,"line":2683},[87,38269,5044],{"class":171},[87,38271,35025],{"class":97},[87,38273,38274],{"class":89,"line":2688},[87,38275,3355],{"emptyLinePlaceholder":1029},[87,38277,38278],{"class":89,"line":2705},[87,38279,35034],{"class":199},[87,38281,38282,38284,38286],{"class":89,"line":2710},[87,38283,32894],{"class":171},[87,38285,35041],{"class":205},[87,38287,35044],{"class":97},[87,38289,38290],{"class":89,"line":2715},[87,38291,35049],{"class":199},[87,38293,38294,38296,38298,38300,38302,38304,38306],{"class":89,"line":2720},[87,38295,32184],{"class":97},[87,38297,946],{"class":171},[87,38299,32191],{"class":949},[87,38301,2660],{"class":171},[87,38303,32196],{"class":97},[87,38305,2657],{"class":171},[87,38307,35066],{"class":949},[87,38309,38310,38312,38314],{"class":89,"line":2734},[87,38311,32236],{"class":97},[87,38313,946],{"class":171},[87,38315,33236],{"class":97},[87,38317,38318],{"class":89,"line":2739},[87,38319,3355],{"emptyLinePlaceholder":1029},[87,38321,38322],{"class":89,"line":3532},[87,38323,35083],{"class":199},[87,38325,38326,38328,38330],{"class":89,"line":3546},[87,38327,35088],{"class":97},[87,38329,946],{"class":171},[87,38331,33289],{"class":104},[87,38333,38334,38336,38338],{"class":89,"line":3554},[87,38335,35097],{"class":97},[87,38337,946],{"class":171},[87,38339,4039],{"class":104},[87,38341,38342],{"class":89,"line":3559},[87,38343,3355],{"emptyLinePlaceholder":1029},[87,38345,38346],{"class":89,"line":3565},[87,38347,35110],{"class":199},[87,38349,38350],{"class":89,"line":3571},[87,38351,35115],{"class":199},[87,38353,38354],{"class":89,"line":3576},[87,38355,35120],{"class":199},[87,38357,38358,38360],{"class":89,"line":8898},[87,38359,35125],{"class":171},[87,38361,33831],{"class":97},[87,38363,38364],{"class":89,"line":8922},[87,38365,35132],{"class":199},[87,38367,38368,38370,38372,38374],{"class":89,"line":8927},[87,38369,4357],{"class":171},[87,38371,35139],{"class":97},[87,38373,26990],{"class":171},[87,38375,35144],{"class":97},[87,38377,38378,38380,38382],{"class":89,"line":8933},[87,38379,35149],{"class":97},[87,38381,946],{"class":171},[87,38383,35154],{"class":97},[87,38385,38386,38388,38390],{"class":89,"line":8960},[87,38387,35159],{"class":97},[87,38389,946],{"class":171},[87,38391,35164],{"class":97},[87,38393,38394],{"class":89,"line":8965},[87,38395,35169],{"class":199},[87,38397,38398],{"class":89,"line":8971},[87,38399,33822],{"class":97},[87,38401,38402],{"class":89,"line":8983},[87,38403,35178],{"class":199},[87,38405,38406,38408,38410],{"class":89,"line":8995},[87,38407,33607],{"class":97},[87,38409,946],{"class":171},[87,38411,35187],{"class":97},[87,38413,38414],{"class":89,"line":9007},[87,38415,35192],{"class":199},[87,38417,38418,38420,38422,38424,38426,38428,38430],{"class":89,"line":10666},[87,38419,33624],{"class":97},[87,38421,946],{"class":171},[87,38423,33629],{"class":97},[87,38425,33632],{"class":492},[87,38427,946],{"class":171},[87,38429,1313],{"class":104},[87,38431,1108],{"class":97},[87,38433,38434],{"class":89,"line":10691},[87,38435,35213],{"class":199},[87,38437,38438],{"class":89,"line":10714},[87,38439,35218],{"class":199},[87,38441,38442],{"class":89,"line":10738},[87,38443,35223],{"class":199},[87,38445,38446,38448,38450,38452,38454],{"class":89,"line":10743},[87,38447,35228],{"class":97},[87,38449,10427],{"class":171},[87,38451,33734],{"class":97},[87,38453,3903],{"class":171},[87,38455,35237],{"class":97},[87,38457,38458],{"class":89,"line":10748},[87,38459,35242],{"class":199},[87,38461,38462,38464,38466,38468,38470],{"class":89,"line":10753},[87,38463,35247],{"class":97},[87,38465,10427],{"class":171},[87,38467,35252],{"class":97},[87,38469,111],{"class":104},[87,38471,1108],{"class":97},[87,38473,38474],{"class":89,"line":10762},[87,38475,3355],{"emptyLinePlaceholder":1029},[87,38477,38478],{"class":89,"line":10767},[87,38479,35265],{"class":199},[87,38481,38482,38484,38486,38488,38490],{"class":89,"line":10773},[87,38483,35270],{"class":97},[87,38485,946],{"class":171},[87,38487,35275],{"class":97},[87,38489,1677],{"class":171},[87,38491,35280],{"class":97},[87,38493,38494],{"class":89,"line":10794},[87,38495,35285],{"class":199},[87,38497,38498,38500,38502,38504],{"class":89,"line":10800},[87,38499,33398],{"class":104},[87,38501,165],{"class":97},[87,38503,35294],{"class":949},[87,38505,35297],{"class":97},[87,38507,38508],{"class":89,"line":10814},[87,38509,3355],{"emptyLinePlaceholder":1029},[87,38511,38512],{"class":89,"line":10820},[87,38513,35306],{"class":199},[87,38515,38516,38518,38520,38522,38524],{"class":89,"line":10847},[87,38517,2488],{"class":171},[87,38519,32167],{"class":104},[87,38521,3903],{"class":171},[87,38523,32172],{"class":949},[87,38525,4693],{"class":97},[87,38527,38528],{"class":89,"line":10856},[87,38529,35323],{"class":199},[87,38531,38532,38534,38536],{"class":89,"line":10862},[87,38533,32236],{"class":97},[87,38535,946],{"class":171},[87,38537,38036],{"class":97},[87,38539,38540],{"class":89,"line":10870},[87,38541,35336],{"class":199},[87,38543,38544],{"class":89,"line":10875},[87,38545,35341],{"class":199},[87,38547,38548,38550,38552],{"class":89,"line":17553},[87,38549,35346],{"class":97},[87,38551,35349],{"class":949},[87,38553,31444],{"class":97},[87,38555,38556],{"class":89,"line":17559},[87,38557,35356],{"class":199},[87,38559,38560,38562,38564],{"class":89,"line":17582},[87,38561,34969],{"class":97},[87,38563,946],{"class":171},[87,38565,35365],{"class":97},[87,38567,38568],{"class":89,"line":17588},[87,38569,35370],{"class":199},[87,38571,38572],{"class":89,"line":17611},[87,38573,35375],{"class":97},[87,38575,38576],{"class":89,"line":17625},[87,38577,3355],{"emptyLinePlaceholder":1029},[87,38579,38580],{"class":89,"line":17645},[87,38581,35384],{"class":199},[87,38583,38584],{"class":89,"line":17651},[87,38585,35389],{"class":199},[87,38587,38588,38590,38592,38594,38596,38598,38600],{"class":89,"line":17662},[87,38589,32184],{"class":97},[87,38591,946],{"class":171},[87,38593,32191],{"class":949},[87,38595,2660],{"class":171},[87,38597,32196],{"class":97},[87,38599,2657],{"class":171},[87,38601,35066],{"class":949},[87,38603,38604,38606,38608],{"class":89,"line":17685},[87,38605,32236],{"class":97},[87,38607,946],{"class":171},[87,38609,33236],{"class":97},[87,38611,38612],{"class":89,"line":17707},[87,38613,35418],{"class":199},[87,38615,38616],{"class":89,"line":17712},[87,38617,35423],{"class":199},[87,38619,38620,38622,38624,38626,38628,38630,38632,38634,38636,38638,38640,38642,38644,38646,38648,38650,38652,38654,38656,38658,38660,38662,38664],{"class":89,"line":17718},[87,38621,35428],{"class":97},[87,38623,946],{"class":171},[87,38625,1982],{"class":97},[87,38627,35435],{"class":949},[87,38629,1473],{"class":97},[87,38631,35440],{"class":949},[87,38633,1473],{"class":97},[87,38635,35445],{"class":949},[87,38637,1473],{"class":97},[87,38639,35450],{"class":949},[87,38641,1473],{"class":97},[87,38643,35455],{"class":949},[87,38645,1473],{"class":97},[87,38647,35460],{"class":949},[87,38649,1473],{"class":97},[87,38651,35465],{"class":949},[87,38653,1473],{"class":97},[87,38655,35470],{"class":949},[87,38657,1473],{"class":97},[87,38659,35475],{"class":949},[87,38661,1473],{"class":97},[87,38663,35480],{"class":949},[87,38665,34193],{"class":97},[87,38667,38668,38670],{"class":89,"line":17732},[87,38669,35125],{"class":171},[87,38671,33831],{"class":97},[87,38673,38674],{"class":89,"line":17745},[87,38675,35493],{"class":199},[87,38677,38678,38680,38682,38684],{"class":89,"line":17750},[87,38679,4357],{"class":171},[87,38681,35500],{"class":97},[87,38683,26990],{"class":171},[87,38685,35144],{"class":97},[87,38687,38688,38690,38692],{"class":89,"line":17764},[87,38689,33557],{"class":97},[87,38691,946],{"class":171},[87,38693,33562],{"class":97},[87,38695,38696,38698,38700],{"class":89,"line":17769},[87,38697,33572],{"class":97},[87,38699,946],{"class":171},[87,38701,33577],{"class":97},[87,38703,38704],{"class":89,"line":17775},[87,38705,3355],{"emptyLinePlaceholder":1029},[87,38707,38708],{"class":89,"line":17780},[87,38709,35529],{"class":199},[87,38711,38712],{"class":89,"line":17794},[87,38713,33822],{"class":97},[87,38715,38716],{"class":89,"line":17799},[87,38717,35538],{"class":199},[87,38719,38720,38722,38724],{"class":89,"line":17804},[87,38721,33607],{"class":97},[87,38723,946],{"class":171},[87,38725,33612],{"class":97},[87,38727,38728],{"class":89,"line":17818},[87,38729,35551],{"class":199},[87,38731,38732,38734,38736,38738,38740,38742,38744],{"class":89,"line":17830},[87,38733,33624],{"class":97},[87,38735,946],{"class":171},[87,38737,33629],{"class":97},[87,38739,33632],{"class":492},[87,38741,946],{"class":171},[87,38743,1313],{"class":104},[87,38745,1108],{"class":97},[87,38747,38748],{"class":89,"line":17835},[87,38749,35572],{"class":199},[87,38751,38752,38754,38756],{"class":89,"line":17848},[87,38753,35577],{"class":97},[87,38755,946],{"class":171},[87,38757,35582],{"class":97},[87,38759,38760,38762,38764],{"class":89,"line":17853},[87,38761,35587],{"class":97},[87,38763,946],{"class":171},[87,38765,35592],{"class":97},[87,38767,38768,38770,38772,38774,38776,38778,38780,38782],{"class":89,"line":17858},[87,38769,35597],{"class":104},[87,38771,165],{"class":97},[87,38773,35602],{"class":949},[87,38775,35605],{"class":97},[87,38777,35608],{"class":949},[87,38779,1473],{"class":97},[87,38781,35613],{"class":949},[87,38783,35616],{"class":97},[44,38785,38787],{"id":38786},"_22vgg","2.2.VGG",[49,38789,38791],{"id":38790},"_221原理","2.2.1.原理",[19,38793,38794],{},[39,38795],{"alt":82,"src":38796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[19,38798,38799],{},[39,38800],{"alt":82,"src":38801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[19,38803,38804],{},[39,38805],{"alt":82,"src":38806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[19,38808,38809],{},"参数详细描述：",[19,38811,38812],{},[39,38813],{"alt":82,"src":38814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[19,38816,38817],{},[39,38818],{"alt":82,"src":38819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[19,38821,38822],{},[39,38823],{"alt":82,"src":38824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[19,38826,38827],{},[39,38828],{"alt":82,"src":38829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[19,38831,38832],{},[39,38833],{"alt":82,"src":38834},"\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",[49,38836,38838],{"id":38837},"_222代码实现","2.2.2.代码实现",[1055,38840,38841],{},[29,38842,38843],{},"网络搭建",[77,38845,38847],{"className":31325,"code":38846,"language":31327,"meta":82,"style":82},"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",[84,38848,38849,38855,38867,38877,38887,38891,38908,38916,38935,38940,38945,38957,38995,39000,39036,39040,39069,39074,39079,39090,39126,39130,39166,39170,39198,39202,39207,39218,39254,39258,39294,39298,39334,39338,39366,39370,39375,39386,39423,39427,39463,39467,39503,39507,39535,39539,39544,39555,39591,39595,39631,39635,39671,39675,39703,39707,39712,39723,39728,39733,39738,39759,39763,39775,39779,39791,39795,39799,39804,39809,39824,39829,39839,39844,39859,39864,39883,39888,39897,39902,39912,39917,39922,39936,39941,39955,39963,39967,39971,39979,39990,40001,40012,40023,40034,40045,40051,40055,40060,40073,40093,40099,40108],{"__ignoreMap":82},[87,38850,38851,38853],{"class":89,"line":90},[87,38852,31339],{"class":171},[87,38854,31342],{"class":97},[87,38856,38857,38859,38862,38864],{"class":89,"line":101},[87,38858,31684],{"class":171},[87,38860,38861],{"class":97}," sympy.core.sympify ",[87,38863,31339],{"class":171},[87,38865,38866],{"class":97}," kernS\n",[87,38868,38869,38871,38873,38875],{"class":89,"line":120},[87,38870,31684],{"class":171},[87,38872,31687],{"class":97},[87,38874,31339],{"class":171},[87,38876,31692],{"class":97},[87,38878,38879,38881,38883,38885],{"class":89,"line":222},[87,38880,31684],{"class":171},[87,38882,31704],{"class":97},[87,38884,31339],{"class":171},[87,38886,31709],{"class":97},[87,38888,38889],{"class":89,"line":234},[87,38890,3355],{"emptyLinePlaceholder":1029},[87,38892,38893,38895,38898,38900,38902,38904,38906],{"class":89,"line":256},[87,38894,15644],{"class":171},[87,38896,38897],{"class":205}," VGG16",[87,38899,165],{"class":97},[87,38901,31725],{"class":205},[87,38903,1651],{"class":97},[87,38905,31730],{"class":205},[87,38907,31733],{"class":97},[87,38909,38910,38912,38914],{"class":89,"line":269},[87,38911,31748],{"class":171},[87,38913,31751],{"class":104},[87,38915,31754],{"class":97},[87,38917,38918,38920,38922,38925,38927,38929,38931,38933],{"class":89,"line":463},[87,38919,31764],{"class":104},[87,38921,165],{"class":97},[87,38923,38924],{"class":104},"VGG16",[87,38926,13385],{"class":97},[87,38928,31770],{"class":104},[87,38930,31773],{"class":97},[87,38932,31776],{"class":104},[87,38934,2931],{"class":97},[87,38936,38937],{"class":89,"line":469},[87,38938,38939],{"class":199},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[87,38941,38942],{"class":89,"line":2287},[87,38943,38944],{"class":199},"        # 这里用的是灰度图\n",[87,38946,38947,38949,38952,38954],{"class":89,"line":2568},[87,38948,31792],{"class":104},[87,38950,38951],{"class":97},".block1",[87,38953,946],{"class":171},[87,38955,38956],{"class":97},"nn.Sequential(\n",[87,38958,38959,38962,38964,38966,38968,38970,38972,38974,38976,38978,38980,38982,38984,38986,38988,38990,38992],{"class":89,"line":2573},[87,38960,38961],{"class":97},"            nn.Conv2d(",[87,38963,31803],{"class":492},[87,38965,946],{"class":171},[87,38967,1313],{"class":104},[87,38969,1473],{"class":97},[87,38971,31812],{"class":492},[87,38973,946],{"class":171},[87,38975,1299],{"class":104},[87,38977,1473],{"class":97},[87,38979,31821],{"class":492},[87,38981,946],{"class":171},[87,38983,1170],{"class":104},[87,38985,1473],{"class":97},[87,38987,31830],{"class":492},[87,38989,946],{"class":171},[87,38991,1313],{"class":104},[87,38993,38994],{"class":97},"),\n",[87,38996,38997],{"class":89,"line":2579},[87,38998,38999],{"class":97},"            nn.ReLU(),\n",[87,39001,39002,39004,39006,39008,39010,39012,39014,39016,39018,39020,39022,39024,39026,39028,39030,39032,39034],{"class":89,"line":2584},[87,39003,38961],{"class":97},[87,39005,31803],{"class":492},[87,39007,946],{"class":171},[87,39009,1299],{"class":104},[87,39011,1473],{"class":97},[87,39013,31812],{"class":492},[87,39015,946],{"class":171},[87,39017,1299],{"class":104},[87,39019,1473],{"class":97},[87,39021,31821],{"class":492},[87,39023,946],{"class":171},[87,39025,1170],{"class":104},[87,39027,1473],{"class":97},[87,39029,31830],{"class":492},[87,39031,946],{"class":171},[87,39033,1313],{"class":104},[87,39035,38994],{"class":97},[87,39037,39038],{"class":89,"line":2598},[87,39039,38999],{"class":97},[87,39041,39042,39045,39047,39049,39051,39053,39055,39057,39059,39061,39063,39065,39067],{"class":89,"line":2603},[87,39043,39044],{"class":97},"            nn.MaxPool2d(",[87,39046,31821],{"class":492},[87,39048,946],{"class":171},[87,39050,1176],{"class":104},[87,39052,1473],{"class":97},[87,39054,31876],{"class":492},[87,39056,946],{"class":171},[87,39058,1176],{"class":104},[87,39060,1473],{"class":97},[87,39062,31830],{"class":492},[87,39064,946],{"class":171},[87,39066,111],{"class":104},[87,39068,1108],{"class":97},[87,39070,39071],{"class":89,"line":2609},[87,39072,39073],{"class":97},"        )\n",[87,39075,39076],{"class":89,"line":2630},[87,39077,39078],{"class":199},"        # 第二层\n",[87,39080,39081,39083,39086,39088],{"class":89,"line":2635},[87,39082,31792],{"class":104},[87,39084,39085],{"class":97},".block2",[87,39087,946],{"class":171},[87,39089,38956],{"class":97},[87,39091,39092,39094,39096,39098,39100,39102,39104,39106,39108,39110,39112,39114,39116,39118,39120,39122,39124],{"class":89,"line":2649},[87,39093,38961],{"class":97},[87,39095,31803],{"class":492},[87,39097,946],{"class":171},[87,39099,1299],{"class":104},[87,39101,1473],{"class":97},[87,39103,31812],{"class":492},[87,39105,946],{"class":171},[87,39107,33017],{"class":104},[87,39109,1473],{"class":97},[87,39111,31821],{"class":492},[87,39113,946],{"class":171},[87,39115,1170],{"class":104},[87,39117,1473],{"class":97},[87,39119,31830],{"class":492},[87,39121,946],{"class":171},[87,39123,1313],{"class":104},[87,39125,38994],{"class":97},[87,39127,39128],{"class":89,"line":2654},[87,39129,38999],{"class":97},[87,39131,39132,39134,39136,39138,39140,39142,39144,39146,39148,39150,39152,39154,39156,39158,39160,39162,39164],{"class":89,"line":2683},[87,39133,38961],{"class":97},[87,39135,31803],{"class":492},[87,39137,946],{"class":171},[87,39139,33017],{"class":104},[87,39141,1473],{"class":97},[87,39143,31812],{"class":492},[87,39145,946],{"class":171},[87,39147,33017],{"class":104},[87,39149,1473],{"class":97},[87,39151,31821],{"class":492},[87,39153,946],{"class":171},[87,39155,1170],{"class":104},[87,39157,1473],{"class":97},[87,39159,31830],{"class":492},[87,39161,946],{"class":171},[87,39163,1313],{"class":104},[87,39165,38994],{"class":97},[87,39167,39168],{"class":89,"line":2688},[87,39169,38999],{"class":97},[87,39171,39172,39174,39176,39178,39180,39182,39184,39186,39188,39190,39192,39194,39196],{"class":89,"line":2705},[87,39173,39044],{"class":97},[87,39175,31821],{"class":492},[87,39177,946],{"class":171},[87,39179,1176],{"class":104},[87,39181,1473],{"class":97},[87,39183,31876],{"class":492},[87,39185,946],{"class":171},[87,39187,1176],{"class":104},[87,39189,1473],{"class":97},[87,39191,31830],{"class":492},[87,39193,946],{"class":171},[87,39195,111],{"class":104},[87,39197,1108],{"class":97},[87,39199,39200],{"class":89,"line":2710},[87,39201,39073],{"class":97},[87,39203,39204],{"class":89,"line":2715},[87,39205,39206],{"class":199},"        # 第三层\n",[87,39208,39209,39211,39214,39216],{"class":89,"line":2720},[87,39210,31792],{"class":104},[87,39212,39213],{"class":97},".block3",[87,39215,946],{"class":171},[87,39217,38956],{"class":97},[87,39219,39220,39222,39224,39226,39228,39230,39232,39234,39236,39238,39240,39242,39244,39246,39248,39250,39252],{"class":89,"line":2734},[87,39221,38961],{"class":97},[87,39223,31803],{"class":492},[87,39225,946],{"class":171},[87,39227,33017],{"class":104},[87,39229,1473],{"class":97},[87,39231,31812],{"class":492},[87,39233,946],{"class":171},[87,39235,35817],{"class":104},[87,39237,1473],{"class":97},[87,39239,31821],{"class":492},[87,39241,946],{"class":171},[87,39243,1170],{"class":104},[87,39245,1473],{"class":97},[87,39247,31830],{"class":492},[87,39249,946],{"class":171},[87,39251,1313],{"class":104},[87,39253,38994],{"class":97},[87,39255,39256],{"class":89,"line":2739},[87,39257,38999],{"class":97},[87,39259,39260,39262,39264,39266,39268,39270,39272,39274,39276,39278,39280,39282,39284,39286,39288,39290,39292],{"class":89,"line":3532},[87,39261,38961],{"class":97},[87,39263,31803],{"class":492},[87,39265,946],{"class":171},[87,39267,35817],{"class":104},[87,39269,1473],{"class":97},[87,39271,31812],{"class":492},[87,39273,946],{"class":171},[87,39275,35817],{"class":104},[87,39277,1473],{"class":97},[87,39279,31821],{"class":492},[87,39281,946],{"class":171},[87,39283,1170],{"class":104},[87,39285,1473],{"class":97},[87,39287,31830],{"class":492},[87,39289,946],{"class":171},[87,39291,1313],{"class":104},[87,39293,38994],{"class":97},[87,39295,39296],{"class":89,"line":3546},[87,39297,38999],{"class":97},[87,39299,39300,39302,39304,39306,39308,39310,39312,39314,39316,39318,39320,39322,39324,39326,39328,39330,39332],{"class":89,"line":3554},[87,39301,38961],{"class":97},[87,39303,31803],{"class":492},[87,39305,946],{"class":171},[87,39307,35817],{"class":104},[87,39309,1473],{"class":97},[87,39311,31812],{"class":492},[87,39313,946],{"class":171},[87,39315,35817],{"class":104},[87,39317,1473],{"class":97},[87,39319,31821],{"class":492},[87,39321,946],{"class":171},[87,39323,1170],{"class":104},[87,39325,1473],{"class":97},[87,39327,31830],{"class":492},[87,39329,946],{"class":171},[87,39331,1313],{"class":104},[87,39333,38994],{"class":97},[87,39335,39336],{"class":89,"line":3559},[87,39337,38999],{"class":97},[87,39339,39340,39342,39344,39346,39348,39350,39352,39354,39356,39358,39360,39362,39364],{"class":89,"line":3565},[87,39341,39044],{"class":97},[87,39343,31821],{"class":492},[87,39345,946],{"class":171},[87,39347,1176],{"class":104},[87,39349,1473],{"class":97},[87,39351,31876],{"class":492},[87,39353,946],{"class":171},[87,39355,1176],{"class":104},[87,39357,1473],{"class":97},[87,39359,31830],{"class":492},[87,39361,946],{"class":171},[87,39363,111],{"class":104},[87,39365,1108],{"class":97},[87,39367,39368],{"class":89,"line":3571},[87,39369,39073],{"class":97},[87,39371,39372],{"class":89,"line":3576},[87,39373,39374],{"class":199},"        # 第四层\n",[87,39376,39377,39379,39382,39384],{"class":89,"line":8898},[87,39378,31792],{"class":104},[87,39380,39381],{"class":97},".block4",[87,39383,946],{"class":171},[87,39385,38956],{"class":97},[87,39387,39388,39390,39392,39394,39396,39398,39400,39402,39405,39407,39409,39411,39413,39415,39417,39419,39421],{"class":89,"line":8922},[87,39389,38961],{"class":97},[87,39391,31803],{"class":492},[87,39393,946],{"class":171},[87,39395,35817],{"class":104},[87,39397,1473],{"class":97},[87,39399,31812],{"class":492},[87,39401,946],{"class":171},[87,39403,39404],{"class":104},"512",[87,39406,1473],{"class":97},[87,39408,31821],{"class":492},[87,39410,946],{"class":171},[87,39412,1170],{"class":104},[87,39414,1473],{"class":97},[87,39416,31830],{"class":492},[87,39418,946],{"class":171},[87,39420,1313],{"class":104},[87,39422,38994],{"class":97},[87,39424,39425],{"class":89,"line":8927},[87,39426,38999],{"class":97},[87,39428,39429,39431,39433,39435,39437,39439,39441,39443,39445,39447,39449,39451,39453,39455,39457,39459,39461],{"class":89,"line":8933},[87,39430,38961],{"class":97},[87,39432,31803],{"class":492},[87,39434,946],{"class":171},[87,39436,39404],{"class":104},[87,39438,1473],{"class":97},[87,39440,31812],{"class":492},[87,39442,946],{"class":171},[87,39444,39404],{"class":104},[87,39446,1473],{"class":97},[87,39448,31821],{"class":492},[87,39450,946],{"class":171},[87,39452,1170],{"class":104},[87,39454,1473],{"class":97},[87,39456,31830],{"class":492},[87,39458,946],{"class":171},[87,39460,1313],{"class":104},[87,39462,38994],{"class":97},[87,39464,39465],{"class":89,"line":8960},[87,39466,38999],{"class":97},[87,39468,39469,39471,39473,39475,39477,39479,39481,39483,39485,39487,39489,39491,39493,39495,39497,39499,39501],{"class":89,"line":8965},[87,39470,38961],{"class":97},[87,39472,31803],{"class":492},[87,39474,946],{"class":171},[87,39476,39404],{"class":104},[87,39478,1473],{"class":97},[87,39480,31812],{"class":492},[87,39482,946],{"class":171},[87,39484,39404],{"class":104},[87,39486,1473],{"class":97},[87,39488,31821],{"class":492},[87,39490,946],{"class":171},[87,39492,1170],{"class":104},[87,39494,1473],{"class":97},[87,39496,31830],{"class":492},[87,39498,946],{"class":171},[87,39500,1313],{"class":104},[87,39502,38994],{"class":97},[87,39504,39505],{"class":89,"line":8971},[87,39506,38999],{"class":97},[87,39508,39509,39511,39513,39515,39517,39519,39521,39523,39525,39527,39529,39531,39533],{"class":89,"line":8983},[87,39510,39044],{"class":97},[87,39512,31821],{"class":492},[87,39514,946],{"class":171},[87,39516,1176],{"class":104},[87,39518,1473],{"class":97},[87,39520,31876],{"class":492},[87,39522,946],{"class":171},[87,39524,1176],{"class":104},[87,39526,1473],{"class":97},[87,39528,31830],{"class":492},[87,39530,946],{"class":171},[87,39532,111],{"class":104},[87,39534,1108],{"class":97},[87,39536,39537],{"class":89,"line":8995},[87,39538,39073],{"class":97},[87,39540,39541],{"class":89,"line":9007},[87,39542,39543],{"class":199},"        # 第五层\n",[87,39545,39546,39548,39551,39553],{"class":89,"line":10666},[87,39547,31792],{"class":104},[87,39549,39550],{"class":97},".block5",[87,39552,946],{"class":171},[87,39554,38956],{"class":97},[87,39556,39557,39559,39561,39563,39565,39567,39569,39571,39573,39575,39577,39579,39581,39583,39585,39587,39589],{"class":89,"line":10691},[87,39558,38961],{"class":97},[87,39560,31803],{"class":492},[87,39562,946],{"class":171},[87,39564,39404],{"class":104},[87,39566,1473],{"class":97},[87,39568,31812],{"class":492},[87,39570,946],{"class":171},[87,39572,39404],{"class":104},[87,39574,1473],{"class":97},[87,39576,31821],{"class":492},[87,39578,946],{"class":171},[87,39580,1170],{"class":104},[87,39582,1473],{"class":97},[87,39584,31830],{"class":492},[87,39586,946],{"class":171},[87,39588,1313],{"class":104},[87,39590,38994],{"class":97},[87,39592,39593],{"class":89,"line":10714},[87,39594,38999],{"class":97},[87,39596,39597,39599,39601,39603,39605,39607,39609,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629],{"class":89,"line":10738},[87,39598,38961],{"class":97},[87,39600,31803],{"class":492},[87,39602,946],{"class":171},[87,39604,39404],{"class":104},[87,39606,1473],{"class":97},[87,39608,31812],{"class":492},[87,39610,946],{"class":171},[87,39612,39404],{"class":104},[87,39614,1473],{"class":97},[87,39616,31821],{"class":492},[87,39618,946],{"class":171},[87,39620,1170],{"class":104},[87,39622,1473],{"class":97},[87,39624,31830],{"class":492},[87,39626,946],{"class":171},[87,39628,1313],{"class":104},[87,39630,38994],{"class":97},[87,39632,39633],{"class":89,"line":10743},[87,39634,38999],{"class":97},[87,39636,39637,39639,39641,39643,39645,39647,39649,39651,39653,39655,39657,39659,39661,39663,39665,39667,39669],{"class":89,"line":10748},[87,39638,38961],{"class":97},[87,39640,31803],{"class":492},[87,39642,946],{"class":171},[87,39644,39404],{"class":104},[87,39646,1473],{"class":97},[87,39648,31812],{"class":492},[87,39650,946],{"class":171},[87,39652,39404],{"class":104},[87,39654,1473],{"class":97},[87,39656,31821],{"class":492},[87,39658,946],{"class":171},[87,39660,1170],{"class":104},[87,39662,1473],{"class":97},[87,39664,31830],{"class":492},[87,39666,946],{"class":171},[87,39668,1313],{"class":104},[87,39670,38994],{"class":97},[87,39672,39673],{"class":89,"line":10753},[87,39674,38999],{"class":97},[87,39676,39677,39679,39681,39683,39685,39687,39689,39691,39693,39695,39697,39699,39701],{"class":89,"line":10762},[87,39678,39044],{"class":97},[87,39680,31821],{"class":492},[87,39682,946],{"class":171},[87,39684,1176],{"class":104},[87,39686,1473],{"class":97},[87,39688,31876],{"class":492},[87,39690,946],{"class":171},[87,39692,1176],{"class":104},[87,39694,1473],{"class":97},[87,39696,31830],{"class":492},[87,39698,946],{"class":171},[87,39700,111],{"class":104},[87,39702,1108],{"class":97},[87,39704,39705],{"class":89,"line":10767},[87,39706,39073],{"class":97},[87,39708,39709],{"class":89,"line":10773},[87,39710,39711],{"class":199},"        # 全连接层\n",[87,39713,39714,39716,39719,39721],{"class":89,"line":10794},[87,39715,31792],{"class":104},[87,39717,39718],{"class":97},".block6",[87,39720,946],{"class":171},[87,39722,38956],{"class":97},[87,39724,39725],{"class":89,"line":10800},[87,39726,39727],{"class":199},"            # 平展操作\n",[87,39729,39730],{"class":89,"line":10814},[87,39731,39732],{"class":199},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[87,39734,39735],{"class":89,"line":10820},[87,39736,39737],{"class":97},"            nn.Flatten(),\n",[87,39739,39740,39743,39745,39747,39749,39751,39753,39755,39757],{"class":89,"line":10847},[87,39741,39742],{"class":97},"            nn.Linear(",[87,39744,1464],{"class":104},[87,39746,1549],{"class":171},[87,39748,1464],{"class":104},[87,39750,1549],{"class":171},[87,39752,39404],{"class":104},[87,39754,1473],{"class":97},[87,39756,35817],{"class":104},[87,39758,38994],{"class":97},[87,39760,39761],{"class":89,"line":10856},[87,39762,38999],{"class":97},[87,39764,39765,39767,39769,39771,39773],{"class":89,"line":10862},[87,39766,39742],{"class":97},[87,39768,35817],{"class":104},[87,39770,1473],{"class":97},[87,39772,33017],{"class":104},[87,39774,38994],{"class":97},[87,39776,39777],{"class":89,"line":10870},[87,39778,38999],{"class":97},[87,39780,39781,39783,39785,39787,39789],{"class":89,"line":10875},[87,39782,39742],{"class":97},[87,39784,33017],{"class":104},[87,39786,1473],{"class":97},[87,39788,242],{"class":104},[87,39790,1108],{"class":97},[87,39792,39793],{"class":89,"line":17553},[87,39794,39073],{"class":97},[87,39796,39797],{"class":89,"line":17559},[87,39798,3355],{"emptyLinePlaceholder":1029},[87,39800,39801],{"class":89,"line":17582},[87,39802,39803],{"class":199},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[87,39805,39806],{"class":89,"line":17588},[87,39807,39808],{"class":199},"        # 循环遍历模型\n",[87,39810,39811,39813,39816,39818,39821],{"class":89,"line":17611},[87,39812,4357],{"class":171},[87,39814,39815],{"class":97}," m ",[87,39817,26990],{"class":171},[87,39819,39820],{"class":104}," self",[87,39822,39823],{"class":97},".modules():\n",[87,39825,39826],{"class":89,"line":17625},[87,39827,39828],{"class":199},"            # print(m)\n",[87,39830,39831,39833,39836],{"class":89,"line":17645},[87,39832,5595],{"class":171},[87,39834,39835],{"class":104}," isinstance",[87,39837,39838],{"class":97},"(m,nn.Conv2d):\n",[87,39840,39841],{"class":89,"line":17651},[87,39842,39843],{"class":199},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[87,39845,39846,39849,39852,39854,39857],{"class":89,"line":17662},[87,39847,39848],{"class":97},"                nn.init.kaiming_normal_(m.weight,",[87,39850,39851],{"class":492},"nonlinearity",[87,39853,946],{"class":171},[87,39855,39856],{"class":949},"'relu'",[87,39858,1108],{"class":97},[87,39860,39861],{"class":89,"line":17685},[87,39862,39863],{"class":199},"                # 判断b参数是否存在\n",[87,39865,39866,39869,39872,39875,39878,39881],{"class":89,"line":17707},[87,39867,39868],{"class":171},"                if",[87,39870,39871],{"class":97}," m.bias ",[87,39873,39874],{"class":171},"is",[87,39876,39877],{"class":171}," not",[87,39879,39880],{"class":104}," None",[87,39882,4693],{"class":97},[87,39884,39885],{"class":89,"line":17712},[87,39886,39887],{"class":199},"                    # 如果参数不存在的化初始化b=0\n",[87,39889,39890,39893,39895],{"class":89,"line":17718},[87,39891,39892],{"class":97},"                    nn.init.constant_(m.bias,",[87,39894,111],{"class":104},[87,39896,1108],{"class":97},[87,39898,39899],{"class":89,"line":17732},[87,39900,39901],{"class":199},"            # 全连接层初始化\n",[87,39903,39904,39907,39909],{"class":89,"line":17745},[87,39905,39906],{"class":171},"            elif",[87,39908,39835],{"class":104},[87,39910,39911],{"class":97},"(m,nn.Linear):\n",[87,39913,39914],{"class":89,"line":17750},[87,39915,39916],{"class":199},"                # 这个初始化方法是利用的是正太分布的方式\n",[87,39918,39919],{"class":89,"line":17764},[87,39920,39921],{"class":199},"                # 均值为0，方差为0.01\n",[87,39923,39924,39927,39929,39931,39934],{"class":89,"line":17769},[87,39925,39926],{"class":97},"                nn.init.normal_(m.weight,",[87,39928,111],{"class":104},[87,39930,1473],{"class":97},[87,39932,39933],{"class":104},"0.01",[87,39935,1108],{"class":97},[87,39937,39938],{"class":89,"line":17775},[87,39939,39940],{"class":199},"                # 初始化b参数\n",[87,39942,39943,39945,39947,39949,39951,39953],{"class":89,"line":17780},[87,39944,39868],{"class":171},[87,39946,39871],{"class":97},[87,39948,39874],{"class":171},[87,39950,39877],{"class":171},[87,39952,39880],{"class":104},[87,39954,4693],{"class":97},[87,39956,39957,39959,39961],{"class":89,"line":17794},[87,39958,39892],{"class":97},[87,39960,111],{"class":104},[87,39962,1108],{"class":97},[87,39964,39965],{"class":89,"line":17799},[87,39966,3355],{"emptyLinePlaceholder":1029},[87,39968,39969],{"class":89,"line":17804},[87,39970,36112],{"class":199},[87,39972,39973,39975,39977],{"class":89,"line":17818},[87,39974,31748],{"class":171},[87,39976,32040],{"class":205},[87,39978,32043],{"class":97},[87,39980,39981,39983,39985,39987],{"class":89,"line":17830},[87,39982,32048],{"class":97},[87,39984,946],{"class":171},[87,39986,31770],{"class":104},[87,39988,39989],{"class":97},".block1(x)\n",[87,39991,39992,39994,39996,39998],{"class":89,"line":17835},[87,39993,32048],{"class":97},[87,39995,946],{"class":171},[87,39997,31770],{"class":104},[87,39999,40000],{"class":97},".block2(x)\n",[87,40002,40003,40005,40007,40009],{"class":89,"line":17848},[87,40004,32048],{"class":97},[87,40006,946],{"class":171},[87,40008,31770],{"class":104},[87,40010,40011],{"class":97},".block3(x)\n",[87,40013,40014,40016,40018,40020],{"class":89,"line":17853},[87,40015,32048],{"class":97},[87,40017,946],{"class":171},[87,40019,31770],{"class":104},[87,40021,40022],{"class":97},".block4(x)\n",[87,40024,40025,40027,40029,40031],{"class":89,"line":17858},[87,40026,32048],{"class":97},[87,40028,946],{"class":171},[87,40030,31770],{"class":104},[87,40032,40033],{"class":97},".block5(x)\n",[87,40035,40036,40038,40040,40042],{"class":89,"line":17863},[87,40037,32048],{"class":97},[87,40039,946],{"class":171},[87,40041,31770],{"class":104},[87,40043,40044],{"class":97},".block6(x)\n",[87,40046,40047,40049],{"class":89,"line":17876},[87,40048,15702],{"class":171},[87,40050,32156],{"class":97},[87,40052,40053],{"class":89,"line":17881},[87,40054,3355],{"emptyLinePlaceholder":1029},[87,40056,40057],{"class":89,"line":33580},[87,40058,40059],{"class":199},"# 验证模型\n",[87,40061,40062,40064,40066,40068,40071],{"class":89,"line":33586},[87,40063,2488],{"class":171},[87,40065,32167],{"class":104},[87,40067,3903],{"class":171},[87,40069,40070],{"class":949},"'__main__'",[87,40072,4693],{"class":97},[87,40074,40075,40077,40079,40081,40083,40085,40087,40089,40091],{"class":89,"line":33592},[87,40076,32184],{"class":97},[87,40078,946],{"class":171},[87,40080,31398],{"class":97},[87,40082,32191],{"class":949},[87,40084,2660],{"class":171},[87,40086,32196],{"class":97},[87,40088,2657],{"class":171},[87,40090,31423],{"class":949},[87,40092,1108],{"class":97},[87,40094,40095,40097],{"class":89,"line":33598},[87,40096,32246],{"class":104},[87,40098,31432],{"class":97},[87,40100,40101,40103,40105],{"class":89,"line":33604},[87,40102,32236],{"class":97},[87,40104,946],{"class":171},[87,40106,40107],{"class":97},"VGG16().to(device)\n",[87,40109,40110,40112,40114,40116,40118,40120,40122,40124],{"class":89,"line":33615},[87,40111,32246],{"class":104},[87,40113,32249],{"class":97},[87,40115,1313],{"class":104},[87,40117,1473],{"class":97},[87,40119,32448],{"class":104},[87,40121,1473],{"class":97},[87,40123,32448],{"class":104},[87,40125,32262],{"class":97},[1055,40127,40128],{"start":101},[29,40129,40130],{},"训练代码",[19,40132,40133],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,40135,40136],{},"解决方式:",[19,40138,40139],{},"①权重初始化",[77,40141,40143],{"className":31325,"code":40142,"language":31327,"meta":82,"style":82},"# 权重初始化,保证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",[84,40144,40145,40150,40155,40167,40172,40180,40185,40198,40203,40217,40222,40231,40236,40245,40250,40255,40268,40273,40287],{"__ignoreMap":82},[87,40146,40147],{"class":89,"line":90},[87,40148,40149],{"class":199},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[87,40151,40152],{"class":89,"line":101},[87,40153,40154],{"class":199},"# 循环遍历模型\n",[87,40156,40157,40159,40161,40163,40165],{"class":89,"line":120},[87,40158,3979],{"class":171},[87,40160,39815],{"class":97},[87,40162,26990],{"class":171},[87,40164,39820],{"class":104},[87,40166,39823],{"class":97},[87,40168,40169],{"class":89,"line":222},[87,40170,40171],{"class":199},"    # print(m)\n",[87,40173,40174,40176,40178],{"class":89,"line":234},[87,40175,4055],{"class":171},[87,40177,39835],{"class":104},[87,40179,39838],{"class":97},[87,40181,40182],{"class":89,"line":256},[87,40183,40184],{"class":199},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[87,40186,40187,40190,40192,40194,40196],{"class":89,"line":269},[87,40188,40189],{"class":97},"        nn.init.kaiming_normal_(m.weight,",[87,40191,39851],{"class":492},[87,40193,946],{"class":171},[87,40195,39856],{"class":949},[87,40197,1108],{"class":97},[87,40199,40200],{"class":89,"line":463},[87,40201,40202],{"class":199},"        # 判断b参数是否存在\n",[87,40204,40205,40207,40209,40211,40213,40215],{"class":89,"line":469},[87,40206,3452],{"class":171},[87,40208,39871],{"class":97},[87,40210,39874],{"class":171},[87,40212,39877],{"class":171},[87,40214,39880],{"class":104},[87,40216,4693],{"class":97},[87,40218,40219],{"class":89,"line":2287},[87,40220,40221],{"class":199},"            # 如果参数不存在的化初始化b=0\n",[87,40223,40224,40227,40229],{"class":89,"line":2568},[87,40225,40226],{"class":97},"            nn.init.constant_(m.bias,",[87,40228,111],{"class":104},[87,40230,1108],{"class":97},[87,40232,40233],{"class":89,"line":2573},[87,40234,40235],{"class":199},"    # 全连接层初始化\n",[87,40237,40238,40241,40243],{"class":89,"line":2579},[87,40239,40240],{"class":171},"    elif",[87,40242,39835],{"class":104},[87,40244,39911],{"class":97},[87,40246,40247],{"class":89,"line":2584},[87,40248,40249],{"class":199},"        # 这个初始化方法是利用的是正太分布的方式\n",[87,40251,40252],{"class":89,"line":2598},[87,40253,40254],{"class":199},"        # 均值为0，方差为0.01\n",[87,40256,40257,40260,40262,40264,40266],{"class":89,"line":2603},[87,40258,40259],{"class":97},"        nn.init.normal_(m.weight,",[87,40261,111],{"class":104},[87,40263,1473],{"class":97},[87,40265,39933],{"class":104},[87,40267,1108],{"class":97},[87,40269,40270],{"class":89,"line":2609},[87,40271,40272],{"class":199},"        # 初始化b参数\n",[87,40274,40275,40277,40279,40281,40283,40285],{"class":89,"line":2630},[87,40276,3452],{"class":171},[87,40278,39871],{"class":97},[87,40280,39874],{"class":171},[87,40282,39877],{"class":171},[87,40284,39880],{"class":104},[87,40286,4693],{"class":97},[87,40288,40289,40291,40293],{"class":89,"line":2635},[87,40290,40226],{"class":97},[87,40292,111],{"class":104},[87,40294,1108],{"class":97},[19,40296,40297],{},"②尽可能地增加批次",[19,40299,40300],{},"训练完整代码：",[77,40302,40303],{"className":31325,"code":38846,"language":31327,"meta":82,"style":82},[84,40304,40305,40311,40321,40331,40341,40345,40361,40369,40387,40391,40395,40405,40441,40445,40481,40485,40513,40517,40521,40531,40567,40571,40607,40611,40639,40643,40647,40657,40693,40697,40733,40737,40773,40777,40805,40809,40813,40823,40859,40863,40899,40903,40939,40943,40971,40975,40979,40989,41025,41029,41065,41069,41105,41109,41137,41141,41145,41155,41159,41163,41167,41187,41191,41203,41207,41219,41223,41227,41231,41235,41247,41251,41259,41263,41275,41279,41293,41297,41305,41309,41317,41321,41325,41337,41341,41355,41363,41367,41371,41379,41389,41399,41409,41419,41429,41439,41445,41449,41453,41465,41485,41491,41499],{"__ignoreMap":82},[87,40306,40307,40309],{"class":89,"line":90},[87,40308,31339],{"class":171},[87,40310,31342],{"class":97},[87,40312,40313,40315,40317,40319],{"class":89,"line":101},[87,40314,31684],{"class":171},[87,40316,38861],{"class":97},[87,40318,31339],{"class":171},[87,40320,38866],{"class":97},[87,40322,40323,40325,40327,40329],{"class":89,"line":120},[87,40324,31684],{"class":171},[87,40326,31687],{"class":97},[87,40328,31339],{"class":171},[87,40330,31692],{"class":97},[87,40332,40333,40335,40337,40339],{"class":89,"line":222},[87,40334,31684],{"class":171},[87,40336,31704],{"class":97},[87,40338,31339],{"class":171},[87,40340,31709],{"class":97},[87,40342,40343],{"class":89,"line":234},[87,40344,3355],{"emptyLinePlaceholder":1029},[87,40346,40347,40349,40351,40353,40355,40357,40359],{"class":89,"line":256},[87,40348,15644],{"class":171},[87,40350,38897],{"class":205},[87,40352,165],{"class":97},[87,40354,31725],{"class":205},[87,40356,1651],{"class":97},[87,40358,31730],{"class":205},[87,40360,31733],{"class":97},[87,40362,40363,40365,40367],{"class":89,"line":269},[87,40364,31748],{"class":171},[87,40366,31751],{"class":104},[87,40368,31754],{"class":97},[87,40370,40371,40373,40375,40377,40379,40381,40383,40385],{"class":89,"line":463},[87,40372,31764],{"class":104},[87,40374,165],{"class":97},[87,40376,38924],{"class":104},[87,40378,13385],{"class":97},[87,40380,31770],{"class":104},[87,40382,31773],{"class":97},[87,40384,31776],{"class":104},[87,40386,2931],{"class":97},[87,40388,40389],{"class":89,"line":469},[87,40390,38939],{"class":199},[87,40392,40393],{"class":89,"line":2287},[87,40394,38944],{"class":199},[87,40396,40397,40399,40401,40403],{"class":89,"line":2568},[87,40398,31792],{"class":104},[87,40400,38951],{"class":97},[87,40402,946],{"class":171},[87,40404,38956],{"class":97},[87,40406,40407,40409,40411,40413,40415,40417,40419,40421,40423,40425,40427,40429,40431,40433,40435,40437,40439],{"class":89,"line":2573},[87,40408,38961],{"class":97},[87,40410,31803],{"class":492},[87,40412,946],{"class":171},[87,40414,1313],{"class":104},[87,40416,1473],{"class":97},[87,40418,31812],{"class":492},[87,40420,946],{"class":171},[87,40422,1299],{"class":104},[87,40424,1473],{"class":97},[87,40426,31821],{"class":492},[87,40428,946],{"class":171},[87,40430,1170],{"class":104},[87,40432,1473],{"class":97},[87,40434,31830],{"class":492},[87,40436,946],{"class":171},[87,40438,1313],{"class":104},[87,40440,38994],{"class":97},[87,40442,40443],{"class":89,"line":2579},[87,40444,38999],{"class":97},[87,40446,40447,40449,40451,40453,40455,40457,40459,40461,40463,40465,40467,40469,40471,40473,40475,40477,40479],{"class":89,"line":2584},[87,40448,38961],{"class":97},[87,40450,31803],{"class":492},[87,40452,946],{"class":171},[87,40454,1299],{"class":104},[87,40456,1473],{"class":97},[87,40458,31812],{"class":492},[87,40460,946],{"class":171},[87,40462,1299],{"class":104},[87,40464,1473],{"class":97},[87,40466,31821],{"class":492},[87,40468,946],{"class":171},[87,40470,1170],{"class":104},[87,40472,1473],{"class":97},[87,40474,31830],{"class":492},[87,40476,946],{"class":171},[87,40478,1313],{"class":104},[87,40480,38994],{"class":97},[87,40482,40483],{"class":89,"line":2598},[87,40484,38999],{"class":97},[87,40486,40487,40489,40491,40493,40495,40497,40499,40501,40503,40505,40507,40509,40511],{"class":89,"line":2603},[87,40488,39044],{"class":97},[87,40490,31821],{"class":492},[87,40492,946],{"class":171},[87,40494,1176],{"class":104},[87,40496,1473],{"class":97},[87,40498,31876],{"class":492},[87,40500,946],{"class":171},[87,40502,1176],{"class":104},[87,40504,1473],{"class":97},[87,40506,31830],{"class":492},[87,40508,946],{"class":171},[87,40510,111],{"class":104},[87,40512,1108],{"class":97},[87,40514,40515],{"class":89,"line":2609},[87,40516,39073],{"class":97},[87,40518,40519],{"class":89,"line":2630},[87,40520,39078],{"class":199},[87,40522,40523,40525,40527,40529],{"class":89,"line":2635},[87,40524,31792],{"class":104},[87,40526,39085],{"class":97},[87,40528,946],{"class":171},[87,40530,38956],{"class":97},[87,40532,40533,40535,40537,40539,40541,40543,40545,40547,40549,40551,40553,40555,40557,40559,40561,40563,40565],{"class":89,"line":2649},[87,40534,38961],{"class":97},[87,40536,31803],{"class":492},[87,40538,946],{"class":171},[87,40540,1299],{"class":104},[87,40542,1473],{"class":97},[87,40544,31812],{"class":492},[87,40546,946],{"class":171},[87,40548,33017],{"class":104},[87,40550,1473],{"class":97},[87,40552,31821],{"class":492},[87,40554,946],{"class":171},[87,40556,1170],{"class":104},[87,40558,1473],{"class":97},[87,40560,31830],{"class":492},[87,40562,946],{"class":171},[87,40564,1313],{"class":104},[87,40566,38994],{"class":97},[87,40568,40569],{"class":89,"line":2654},[87,40570,38999],{"class":97},[87,40572,40573,40575,40577,40579,40581,40583,40585,40587,40589,40591,40593,40595,40597,40599,40601,40603,40605],{"class":89,"line":2683},[87,40574,38961],{"class":97},[87,40576,31803],{"class":492},[87,40578,946],{"class":171},[87,40580,33017],{"class":104},[87,40582,1473],{"class":97},[87,40584,31812],{"class":492},[87,40586,946],{"class":171},[87,40588,33017],{"class":104},[87,40590,1473],{"class":97},[87,40592,31821],{"class":492},[87,40594,946],{"class":171},[87,40596,1170],{"class":104},[87,40598,1473],{"class":97},[87,40600,31830],{"class":492},[87,40602,946],{"class":171},[87,40604,1313],{"class":104},[87,40606,38994],{"class":97},[87,40608,40609],{"class":89,"line":2688},[87,40610,38999],{"class":97},[87,40612,40613,40615,40617,40619,40621,40623,40625,40627,40629,40631,40633,40635,40637],{"class":89,"line":2705},[87,40614,39044],{"class":97},[87,40616,31821],{"class":492},[87,40618,946],{"class":171},[87,40620,1176],{"class":104},[87,40622,1473],{"class":97},[87,40624,31876],{"class":492},[87,40626,946],{"class":171},[87,40628,1176],{"class":104},[87,40630,1473],{"class":97},[87,40632,31830],{"class":492},[87,40634,946],{"class":171},[87,40636,111],{"class":104},[87,40638,1108],{"class":97},[87,40640,40641],{"class":89,"line":2710},[87,40642,39073],{"class":97},[87,40644,40645],{"class":89,"line":2715},[87,40646,39206],{"class":199},[87,40648,40649,40651,40653,40655],{"class":89,"line":2720},[87,40650,31792],{"class":104},[87,40652,39213],{"class":97},[87,40654,946],{"class":171},[87,40656,38956],{"class":97},[87,40658,40659,40661,40663,40665,40667,40669,40671,40673,40675,40677,40679,40681,40683,40685,40687,40689,40691],{"class":89,"line":2734},[87,40660,38961],{"class":97},[87,40662,31803],{"class":492},[87,40664,946],{"class":171},[87,40666,33017],{"class":104},[87,40668,1473],{"class":97},[87,40670,31812],{"class":492},[87,40672,946],{"class":171},[87,40674,35817],{"class":104},[87,40676,1473],{"class":97},[87,40678,31821],{"class":492},[87,40680,946],{"class":171},[87,40682,1170],{"class":104},[87,40684,1473],{"class":97},[87,40686,31830],{"class":492},[87,40688,946],{"class":171},[87,40690,1313],{"class":104},[87,40692,38994],{"class":97},[87,40694,40695],{"class":89,"line":2739},[87,40696,38999],{"class":97},[87,40698,40699,40701,40703,40705,40707,40709,40711,40713,40715,40717,40719,40721,40723,40725,40727,40729,40731],{"class":89,"line":3532},[87,40700,38961],{"class":97},[87,40702,31803],{"class":492},[87,40704,946],{"class":171},[87,40706,35817],{"class":104},[87,40708,1473],{"class":97},[87,40710,31812],{"class":492},[87,40712,946],{"class":171},[87,40714,35817],{"class":104},[87,40716,1473],{"class":97},[87,40718,31821],{"class":492},[87,40720,946],{"class":171},[87,40722,1170],{"class":104},[87,40724,1473],{"class":97},[87,40726,31830],{"class":492},[87,40728,946],{"class":171},[87,40730,1313],{"class":104},[87,40732,38994],{"class":97},[87,40734,40735],{"class":89,"line":3546},[87,40736,38999],{"class":97},[87,40738,40739,40741,40743,40745,40747,40749,40751,40753,40755,40757,40759,40761,40763,40765,40767,40769,40771],{"class":89,"line":3554},[87,40740,38961],{"class":97},[87,40742,31803],{"class":492},[87,40744,946],{"class":171},[87,40746,35817],{"class":104},[87,40748,1473],{"class":97},[87,40750,31812],{"class":492},[87,40752,946],{"class":171},[87,40754,35817],{"class":104},[87,40756,1473],{"class":97},[87,40758,31821],{"class":492},[87,40760,946],{"class":171},[87,40762,1170],{"class":104},[87,40764,1473],{"class":97},[87,40766,31830],{"class":492},[87,40768,946],{"class":171},[87,40770,1313],{"class":104},[87,40772,38994],{"class":97},[87,40774,40775],{"class":89,"line":3559},[87,40776,38999],{"class":97},[87,40778,40779,40781,40783,40785,40787,40789,40791,40793,40795,40797,40799,40801,40803],{"class":89,"line":3565},[87,40780,39044],{"class":97},[87,40782,31821],{"class":492},[87,40784,946],{"class":171},[87,40786,1176],{"class":104},[87,40788,1473],{"class":97},[87,40790,31876],{"class":492},[87,40792,946],{"class":171},[87,40794,1176],{"class":104},[87,40796,1473],{"class":97},[87,40798,31830],{"class":492},[87,40800,946],{"class":171},[87,40802,111],{"class":104},[87,40804,1108],{"class":97},[87,40806,40807],{"class":89,"line":3571},[87,40808,39073],{"class":97},[87,40810,40811],{"class":89,"line":3576},[87,40812,39374],{"class":199},[87,40814,40815,40817,40819,40821],{"class":89,"line":8898},[87,40816,31792],{"class":104},[87,40818,39381],{"class":97},[87,40820,946],{"class":171},[87,40822,38956],{"class":97},[87,40824,40825,40827,40829,40831,40833,40835,40837,40839,40841,40843,40845,40847,40849,40851,40853,40855,40857],{"class":89,"line":8922},[87,40826,38961],{"class":97},[87,40828,31803],{"class":492},[87,40830,946],{"class":171},[87,40832,35817],{"class":104},[87,40834,1473],{"class":97},[87,40836,31812],{"class":492},[87,40838,946],{"class":171},[87,40840,39404],{"class":104},[87,40842,1473],{"class":97},[87,40844,31821],{"class":492},[87,40846,946],{"class":171},[87,40848,1170],{"class":104},[87,40850,1473],{"class":97},[87,40852,31830],{"class":492},[87,40854,946],{"class":171},[87,40856,1313],{"class":104},[87,40858,38994],{"class":97},[87,40860,40861],{"class":89,"line":8927},[87,40862,38999],{"class":97},[87,40864,40865,40867,40869,40871,40873,40875,40877,40879,40881,40883,40885,40887,40889,40891,40893,40895,40897],{"class":89,"line":8933},[87,40866,38961],{"class":97},[87,40868,31803],{"class":492},[87,40870,946],{"class":171},[87,40872,39404],{"class":104},[87,40874,1473],{"class":97},[87,40876,31812],{"class":492},[87,40878,946],{"class":171},[87,40880,39404],{"class":104},[87,40882,1473],{"class":97},[87,40884,31821],{"class":492},[87,40886,946],{"class":171},[87,40888,1170],{"class":104},[87,40890,1473],{"class":97},[87,40892,31830],{"class":492},[87,40894,946],{"class":171},[87,40896,1313],{"class":104},[87,40898,38994],{"class":97},[87,40900,40901],{"class":89,"line":8960},[87,40902,38999],{"class":97},[87,40904,40905,40907,40909,40911,40913,40915,40917,40919,40921,40923,40925,40927,40929,40931,40933,40935,40937],{"class":89,"line":8965},[87,40906,38961],{"class":97},[87,40908,31803],{"class":492},[87,40910,946],{"class":171},[87,40912,39404],{"class":104},[87,40914,1473],{"class":97},[87,40916,31812],{"class":492},[87,40918,946],{"class":171},[87,40920,39404],{"class":104},[87,40922,1473],{"class":97},[87,40924,31821],{"class":492},[87,40926,946],{"class":171},[87,40928,1170],{"class":104},[87,40930,1473],{"class":97},[87,40932,31830],{"class":492},[87,40934,946],{"class":171},[87,40936,1313],{"class":104},[87,40938,38994],{"class":97},[87,40940,40941],{"class":89,"line":8971},[87,40942,38999],{"class":97},[87,40944,40945,40947,40949,40951,40953,40955,40957,40959,40961,40963,40965,40967,40969],{"class":89,"line":8983},[87,40946,39044],{"class":97},[87,40948,31821],{"class":492},[87,40950,946],{"class":171},[87,40952,1176],{"class":104},[87,40954,1473],{"class":97},[87,40956,31876],{"class":492},[87,40958,946],{"class":171},[87,40960,1176],{"class":104},[87,40962,1473],{"class":97},[87,40964,31830],{"class":492},[87,40966,946],{"class":171},[87,40968,111],{"class":104},[87,40970,1108],{"class":97},[87,40972,40973],{"class":89,"line":8995},[87,40974,39073],{"class":97},[87,40976,40977],{"class":89,"line":9007},[87,40978,39543],{"class":199},[87,40980,40981,40983,40985,40987],{"class":89,"line":10666},[87,40982,31792],{"class":104},[87,40984,39550],{"class":97},[87,40986,946],{"class":171},[87,40988,38956],{"class":97},[87,40990,40991,40993,40995,40997,40999,41001,41003,41005,41007,41009,41011,41013,41015,41017,41019,41021,41023],{"class":89,"line":10691},[87,40992,38961],{"class":97},[87,40994,31803],{"class":492},[87,40996,946],{"class":171},[87,40998,39404],{"class":104},[87,41000,1473],{"class":97},[87,41002,31812],{"class":492},[87,41004,946],{"class":171},[87,41006,39404],{"class":104},[87,41008,1473],{"class":97},[87,41010,31821],{"class":492},[87,41012,946],{"class":171},[87,41014,1170],{"class":104},[87,41016,1473],{"class":97},[87,41018,31830],{"class":492},[87,41020,946],{"class":171},[87,41022,1313],{"class":104},[87,41024,38994],{"class":97},[87,41026,41027],{"class":89,"line":10714},[87,41028,38999],{"class":97},[87,41030,41031,41033,41035,41037,41039,41041,41043,41045,41047,41049,41051,41053,41055,41057,41059,41061,41063],{"class":89,"line":10738},[87,41032,38961],{"class":97},[87,41034,31803],{"class":492},[87,41036,946],{"class":171},[87,41038,39404],{"class":104},[87,41040,1473],{"class":97},[87,41042,31812],{"class":492},[87,41044,946],{"class":171},[87,41046,39404],{"class":104},[87,41048,1473],{"class":97},[87,41050,31821],{"class":492},[87,41052,946],{"class":171},[87,41054,1170],{"class":104},[87,41056,1473],{"class":97},[87,41058,31830],{"class":492},[87,41060,946],{"class":171},[87,41062,1313],{"class":104},[87,41064,38994],{"class":97},[87,41066,41067],{"class":89,"line":10743},[87,41068,38999],{"class":97},[87,41070,41071,41073,41075,41077,41079,41081,41083,41085,41087,41089,41091,41093,41095,41097,41099,41101,41103],{"class":89,"line":10748},[87,41072,38961],{"class":97},[87,41074,31803],{"class":492},[87,41076,946],{"class":171},[87,41078,39404],{"class":104},[87,41080,1473],{"class":97},[87,41082,31812],{"class":492},[87,41084,946],{"class":171},[87,41086,39404],{"class":104},[87,41088,1473],{"class":97},[87,41090,31821],{"class":492},[87,41092,946],{"class":171},[87,41094,1170],{"class":104},[87,41096,1473],{"class":97},[87,41098,31830],{"class":492},[87,41100,946],{"class":171},[87,41102,1313],{"class":104},[87,41104,38994],{"class":97},[87,41106,41107],{"class":89,"line":10753},[87,41108,38999],{"class":97},[87,41110,41111,41113,41115,41117,41119,41121,41123,41125,41127,41129,41131,41133,41135],{"class":89,"line":10762},[87,41112,39044],{"class":97},[87,41114,31821],{"class":492},[87,41116,946],{"class":171},[87,41118,1176],{"class":104},[87,41120,1473],{"class":97},[87,41122,31876],{"class":492},[87,41124,946],{"class":171},[87,41126,1176],{"class":104},[87,41128,1473],{"class":97},[87,41130,31830],{"class":492},[87,41132,946],{"class":171},[87,41134,111],{"class":104},[87,41136,1108],{"class":97},[87,41138,41139],{"class":89,"line":10767},[87,41140,39073],{"class":97},[87,41142,41143],{"class":89,"line":10773},[87,41144,39711],{"class":199},[87,41146,41147,41149,41151,41153],{"class":89,"line":10794},[87,41148,31792],{"class":104},[87,41150,39718],{"class":97},[87,41152,946],{"class":171},[87,41154,38956],{"class":97},[87,41156,41157],{"class":89,"line":10800},[87,41158,39727],{"class":199},[87,41160,41161],{"class":89,"line":10814},[87,41162,39732],{"class":199},[87,41164,41165],{"class":89,"line":10820},[87,41166,39737],{"class":97},[87,41168,41169,41171,41173,41175,41177,41179,41181,41183,41185],{"class":89,"line":10847},[87,41170,39742],{"class":97},[87,41172,1464],{"class":104},[87,41174,1549],{"class":171},[87,41176,1464],{"class":104},[87,41178,1549],{"class":171},[87,41180,39404],{"class":104},[87,41182,1473],{"class":97},[87,41184,35817],{"class":104},[87,41186,38994],{"class":97},[87,41188,41189],{"class":89,"line":10856},[87,41190,38999],{"class":97},[87,41192,41193,41195,41197,41199,41201],{"class":89,"line":10862},[87,41194,39742],{"class":97},[87,41196,35817],{"class":104},[87,41198,1473],{"class":97},[87,41200,33017],{"class":104},[87,41202,38994],{"class":97},[87,41204,41205],{"class":89,"line":10870},[87,41206,38999],{"class":97},[87,41208,41209,41211,41213,41215,41217],{"class":89,"line":10875},[87,41210,39742],{"class":97},[87,41212,33017],{"class":104},[87,41214,1473],{"class":97},[87,41216,242],{"class":104},[87,41218,1108],{"class":97},[87,41220,41221],{"class":89,"line":17553},[87,41222,39073],{"class":97},[87,41224,41225],{"class":89,"line":17559},[87,41226,3355],{"emptyLinePlaceholder":1029},[87,41228,41229],{"class":89,"line":17582},[87,41230,39803],{"class":199},[87,41232,41233],{"class":89,"line":17588},[87,41234,39808],{"class":199},[87,41236,41237,41239,41241,41243,41245],{"class":89,"line":17611},[87,41238,4357],{"class":171},[87,41240,39815],{"class":97},[87,41242,26990],{"class":171},[87,41244,39820],{"class":104},[87,41246,39823],{"class":97},[87,41248,41249],{"class":89,"line":17625},[87,41250,39828],{"class":199},[87,41252,41253,41255,41257],{"class":89,"line":17645},[87,41254,5595],{"class":171},[87,41256,39835],{"class":104},[87,41258,39838],{"class":97},[87,41260,41261],{"class":89,"line":17651},[87,41262,39843],{"class":199},[87,41264,41265,41267,41269,41271,41273],{"class":89,"line":17662},[87,41266,39848],{"class":97},[87,41268,39851],{"class":492},[87,41270,946],{"class":171},[87,41272,39856],{"class":949},[87,41274,1108],{"class":97},[87,41276,41277],{"class":89,"line":17685},[87,41278,39863],{"class":199},[87,41280,41281,41283,41285,41287,41289,41291],{"class":89,"line":17707},[87,41282,39868],{"class":171},[87,41284,39871],{"class":97},[87,41286,39874],{"class":171},[87,41288,39877],{"class":171},[87,41290,39880],{"class":104},[87,41292,4693],{"class":97},[87,41294,41295],{"class":89,"line":17712},[87,41296,39887],{"class":199},[87,41298,41299,41301,41303],{"class":89,"line":17718},[87,41300,39892],{"class":97},[87,41302,111],{"class":104},[87,41304,1108],{"class":97},[87,41306,41307],{"class":89,"line":17732},[87,41308,39901],{"class":199},[87,41310,41311,41313,41315],{"class":89,"line":17745},[87,41312,39906],{"class":171},[87,41314,39835],{"class":104},[87,41316,39911],{"class":97},[87,41318,41319],{"class":89,"line":17750},[87,41320,39916],{"class":199},[87,41322,41323],{"class":89,"line":17764},[87,41324,39921],{"class":199},[87,41326,41327,41329,41331,41333,41335],{"class":89,"line":17769},[87,41328,39926],{"class":97},[87,41330,111],{"class":104},[87,41332,1473],{"class":97},[87,41334,39933],{"class":104},[87,41336,1108],{"class":97},[87,41338,41339],{"class":89,"line":17775},[87,41340,39940],{"class":199},[87,41342,41343,41345,41347,41349,41351,41353],{"class":89,"line":17780},[87,41344,39868],{"class":171},[87,41346,39871],{"class":97},[87,41348,39874],{"class":171},[87,41350,39877],{"class":171},[87,41352,39880],{"class":104},[87,41354,4693],{"class":97},[87,41356,41357,41359,41361],{"class":89,"line":17794},[87,41358,39892],{"class":97},[87,41360,111],{"class":104},[87,41362,1108],{"class":97},[87,41364,41365],{"class":89,"line":17799},[87,41366,3355],{"emptyLinePlaceholder":1029},[87,41368,41369],{"class":89,"line":17804},[87,41370,36112],{"class":199},[87,41372,41373,41375,41377],{"class":89,"line":17818},[87,41374,31748],{"class":171},[87,41376,32040],{"class":205},[87,41378,32043],{"class":97},[87,41380,41381,41383,41385,41387],{"class":89,"line":17830},[87,41382,32048],{"class":97},[87,41384,946],{"class":171},[87,41386,31770],{"class":104},[87,41388,39989],{"class":97},[87,41390,41391,41393,41395,41397],{"class":89,"line":17835},[87,41392,32048],{"class":97},[87,41394,946],{"class":171},[87,41396,31770],{"class":104},[87,41398,40000],{"class":97},[87,41400,41401,41403,41405,41407],{"class":89,"line":17848},[87,41402,32048],{"class":97},[87,41404,946],{"class":171},[87,41406,31770],{"class":104},[87,41408,40011],{"class":97},[87,41410,41411,41413,41415,41417],{"class":89,"line":17853},[87,41412,32048],{"class":97},[87,41414,946],{"class":171},[87,41416,31770],{"class":104},[87,41418,40022],{"class":97},[87,41420,41421,41423,41425,41427],{"class":89,"line":17858},[87,41422,32048],{"class":97},[87,41424,946],{"class":171},[87,41426,31770],{"class":104},[87,41428,40033],{"class":97},[87,41430,41431,41433,41435,41437],{"class":89,"line":17863},[87,41432,32048],{"class":97},[87,41434,946],{"class":171},[87,41436,31770],{"class":104},[87,41438,40044],{"class":97},[87,41440,41441,41443],{"class":89,"line":17876},[87,41442,15702],{"class":171},[87,41444,32156],{"class":97},[87,41446,41447],{"class":89,"line":17881},[87,41448,3355],{"emptyLinePlaceholder":1029},[87,41450,41451],{"class":89,"line":33580},[87,41452,40059],{"class":199},[87,41454,41455,41457,41459,41461,41463],{"class":89,"line":33586},[87,41456,2488],{"class":171},[87,41458,32167],{"class":104},[87,41460,3903],{"class":171},[87,41462,40070],{"class":949},[87,41464,4693],{"class":97},[87,41466,41467,41469,41471,41473,41475,41477,41479,41481,41483],{"class":89,"line":33592},[87,41468,32184],{"class":97},[87,41470,946],{"class":171},[87,41472,31398],{"class":97},[87,41474,32191],{"class":949},[87,41476,2660],{"class":171},[87,41478,32196],{"class":97},[87,41480,2657],{"class":171},[87,41482,31423],{"class":949},[87,41484,1108],{"class":97},[87,41486,41487,41489],{"class":89,"line":33598},[87,41488,32246],{"class":104},[87,41490,31432],{"class":97},[87,41492,41493,41495,41497],{"class":89,"line":33604},[87,41494,32236],{"class":97},[87,41496,946],{"class":171},[87,41498,40107],{"class":97},[87,41500,41501,41503,41505,41507,41509,41511,41513,41515],{"class":89,"line":33615},[87,41502,32246],{"class":104},[87,41504,32249],{"class":97},[87,41506,1313],{"class":104},[87,41508,1473],{"class":97},[87,41510,32448],{"class":104},[87,41512,1473],{"class":97},[87,41514,32448],{"class":104},[87,41516,32262],{"class":97},[1055,41518,41519],{"start":120},[29,41520,41521],{},"测试代码",[77,41523,41525],{"className":31325,"code":41524,"language":31327,"meta":82,"style":82},"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",[84,41526,41527,41533,41543,41553,41557,41567,41578,41582,41586,41590,41598,41614,41624,41640,41650,41664,41668,41678,41688,41698,41704,41708,41712,41720,41724,41740,41748,41752,41756,41764,41772,41776,41780,41784,41788,41794,41798,41808,41816,41824,41828,41832,41836,41844,41848,41864,41868,41872,41876,41888,41892,41904,41908,41912,41924,41928,41938,41942,41946,41958,41962,41971,41975,41979,41987,41991,41999,42003,42007,42011,42015,42019,42035,42043,42047,42051,42099,42105,42109,42119,42127,42135,42139,42143,42147,42151,42159,42163,42179,42183,42191,42199],{"__ignoreMap":82},[87,41528,41529,41531],{"class":89,"line":90},[87,41530,31339],{"class":171},[87,41532,31342],{"class":97},[87,41534,41535,41537,41539,41541],{"class":89,"line":101},[87,41536,31339],{"class":171},[87,41538,32362],{"class":97},[87,41540,32330],{"class":171},[87,41542,32367],{"class":97},[87,41544,41545,41547,41549,41551],{"class":89,"line":120},[87,41546,31684],{"class":171},[87,41548,32345],{"class":97},[87,41550,31339],{"class":171},[87,41552,32350],{"class":97},[87,41554,41555],{"class":89,"line":222},[87,41556,34869],{"class":199},[87,41558,41559,41561,41563,41565],{"class":89,"line":234},[87,41560,31684],{"class":171},[87,41562,32315],{"class":97},[87,41564,31339],{"class":171},[87,41566,32320],{"class":97},[87,41568,41569,41571,41573,41575],{"class":89,"line":256},[87,41570,31684],{"class":171},[87,41572,32861],{"class":97},[87,41574,31339],{"class":171},[87,41576,41577],{"class":104}," VGG16\n",[87,41579,41580],{"class":89,"line":269},[87,41581,3355],{"emptyLinePlaceholder":1029},[87,41583,41584],{"class":89,"line":463},[87,41585,3355],{"emptyLinePlaceholder":1029},[87,41587,41588],{"class":89,"line":469},[87,41589,34898],{"class":199},[87,41591,41592,41594,41596],{"class":89,"line":2287},[87,41593,32894],{"class":171},[87,41595,34905],{"class":205},[87,41597,32900],{"class":97},[87,41599,41600,41602,41604,41606,41608,41610,41612],{"class":89,"line":2568},[87,41601,34912],{"class":97},[87,41603,946],{"class":171},[87,41605,32402],{"class":97},[87,41607,32405],{"class":492},[87,41609,946],{"class":171},[87,41611,32410],{"class":949},[87,41613,32413],{"class":97},[87,41615,41616,41618,41620,41622],{"class":89,"line":2573},[87,41617,34929],{"class":492},[87,41619,946],{"class":171},[87,41621,34934],{"class":104},[87,41623,32413],{"class":97},[87,41625,41626,41628,41630,41632,41634,41636,41638],{"class":89,"line":2579},[87,41627,34941],{"class":492},[87,41629,946],{"class":171},[87,41631,32440],{"class":97},[87,41633,32443],{"class":492},[87,41635,946],{"class":171},[87,41637,32448],{"class":104},[87,41639,32451],{"class":97},[87,41641,41642,41644,41646,41648],{"class":89,"line":2584},[87,41643,34958],{"class":492},[87,41645,946],{"class":171},[87,41647,32423],{"class":104},[87,41649,1108],{"class":97},[87,41651,41652,41654,41656,41658,41660,41662],{"class":89,"line":2598},[87,41653,34969],{"class":97},[87,41655,946],{"class":171},[87,41657,32481],{"class":97},[87,41659,32484],{"class":492},[87,41661,946],{"class":171},[87,41663,34980],{"class":97},[87,41665,41666],{"class":89,"line":2603},[87,41667,34985],{"class":199},[87,41669,41670,41672,41674,41676],{"class":89,"line":2609},[87,41671,34990],{"class":492},[87,41673,946],{"class":171},[87,41675,1313],{"class":104},[87,41677,32413],{"class":97},[87,41679,41680,41682,41684,41686],{"class":89,"line":2630},[87,41681,35001],{"class":492},[87,41683,946],{"class":171},[87,41685,32423],{"class":104},[87,41687,32413],{"class":97},[87,41689,41690,41692,41694,41696],{"class":89,"line":2635},[87,41691,35012],{"class":492},[87,41693,946],{"class":171},[87,41695,111],{"class":104},[87,41697,1108],{"class":97},[87,41699,41700,41702],{"class":89,"line":2649},[87,41701,5044],{"class":171},[87,41703,35025],{"class":97},[87,41705,41706],{"class":89,"line":2654},[87,41707,3355],{"emptyLinePlaceholder":1029},[87,41709,41710],{"class":89,"line":2683},[87,41711,35034],{"class":199},[87,41713,41714,41716,41718],{"class":89,"line":2688},[87,41715,32894],{"class":171},[87,41717,35041],{"class":205},[87,41719,35044],{"class":97},[87,41721,41722],{"class":89,"line":2705},[87,41723,35049],{"class":199},[87,41725,41726,41728,41730,41732,41734,41736,41738],{"class":89,"line":2710},[87,41727,32184],{"class":97},[87,41729,946],{"class":171},[87,41731,32191],{"class":949},[87,41733,2660],{"class":171},[87,41735,32196],{"class":97},[87,41737,2657],{"class":171},[87,41739,35066],{"class":949},[87,41741,41742,41744,41746],{"class":89,"line":2715},[87,41743,32236],{"class":97},[87,41745,946],{"class":171},[87,41747,33236],{"class":97},[87,41749,41750],{"class":89,"line":2720},[87,41751,3355],{"emptyLinePlaceholder":1029},[87,41753,41754],{"class":89,"line":2734},[87,41755,35083],{"class":199},[87,41757,41758,41760,41762],{"class":89,"line":2739},[87,41759,35088],{"class":97},[87,41761,946],{"class":171},[87,41763,33289],{"class":104},[87,41765,41766,41768,41770],{"class":89,"line":3532},[87,41767,35097],{"class":97},[87,41769,946],{"class":171},[87,41771,4039],{"class":104},[87,41773,41774],{"class":89,"line":3546},[87,41775,3355],{"emptyLinePlaceholder":1029},[87,41777,41778],{"class":89,"line":3554},[87,41779,35110],{"class":199},[87,41781,41782],{"class":89,"line":3559},[87,41783,35115],{"class":199},[87,41785,41786],{"class":89,"line":3565},[87,41787,35120],{"class":199},[87,41789,41790,41792],{"class":89,"line":3571},[87,41791,35125],{"class":171},[87,41793,33831],{"class":97},[87,41795,41796],{"class":89,"line":3576},[87,41797,35132],{"class":199},[87,41799,41800,41802,41804,41806],{"class":89,"line":8898},[87,41801,4357],{"class":171},[87,41803,35139],{"class":97},[87,41805,26990],{"class":171},[87,41807,35144],{"class":97},[87,41809,41810,41812,41814],{"class":89,"line":8922},[87,41811,35149],{"class":97},[87,41813,946],{"class":171},[87,41815,35154],{"class":97},[87,41817,41818,41820,41822],{"class":89,"line":8927},[87,41819,35159],{"class":97},[87,41821,946],{"class":171},[87,41823,35164],{"class":97},[87,41825,41826],{"class":89,"line":8933},[87,41827,35169],{"class":199},[87,41829,41830],{"class":89,"line":8960},[87,41831,33822],{"class":97},[87,41833,41834],{"class":89,"line":8965},[87,41835,35178],{"class":199},[87,41837,41838,41840,41842],{"class":89,"line":8971},[87,41839,33607],{"class":97},[87,41841,946],{"class":171},[87,41843,35187],{"class":97},[87,41845,41846],{"class":89,"line":8983},[87,41847,35192],{"class":199},[87,41849,41850,41852,41854,41856,41858,41860,41862],{"class":89,"line":8995},[87,41851,33624],{"class":97},[87,41853,946],{"class":171},[87,41855,33629],{"class":97},[87,41857,33632],{"class":492},[87,41859,946],{"class":171},[87,41861,1313],{"class":104},[87,41863,1108],{"class":97},[87,41865,41866],{"class":89,"line":9007},[87,41867,35213],{"class":199},[87,41869,41870],{"class":89,"line":10666},[87,41871,35218],{"class":199},[87,41873,41874],{"class":89,"line":10691},[87,41875,35223],{"class":199},[87,41877,41878,41880,41882,41884,41886],{"class":89,"line":10714},[87,41879,35228],{"class":97},[87,41881,10427],{"class":171},[87,41883,33734],{"class":97},[87,41885,3903],{"class":171},[87,41887,35237],{"class":97},[87,41889,41890],{"class":89,"line":10738},[87,41891,35242],{"class":199},[87,41893,41894,41896,41898,41900,41902],{"class":89,"line":10743},[87,41895,35247],{"class":97},[87,41897,10427],{"class":171},[87,41899,35252],{"class":97},[87,41901,111],{"class":104},[87,41903,1108],{"class":97},[87,41905,41906],{"class":89,"line":10748},[87,41907,3355],{"emptyLinePlaceholder":1029},[87,41909,41910],{"class":89,"line":10753},[87,41911,35265],{"class":199},[87,41913,41914,41916,41918,41920,41922],{"class":89,"line":10762},[87,41915,35270],{"class":97},[87,41917,946],{"class":171},[87,41919,35275],{"class":97},[87,41921,1677],{"class":171},[87,41923,35280],{"class":97},[87,41925,41926],{"class":89,"line":10767},[87,41927,35285],{"class":199},[87,41929,41930,41932,41934,41936],{"class":89,"line":10773},[87,41931,33398],{"class":104},[87,41933,165],{"class":97},[87,41935,35294],{"class":949},[87,41937,35297],{"class":97},[87,41939,41940],{"class":89,"line":10794},[87,41941,3355],{"emptyLinePlaceholder":1029},[87,41943,41944],{"class":89,"line":10800},[87,41945,35306],{"class":199},[87,41947,41948,41950,41952,41954,41956],{"class":89,"line":10814},[87,41949,2488],{"class":171},[87,41951,32167],{"class":104},[87,41953,3903],{"class":171},[87,41955,32172],{"class":949},[87,41957,4693],{"class":97},[87,41959,41960],{"class":89,"line":10820},[87,41961,35323],{"class":199},[87,41963,41964,41966,41968],{"class":89,"line":10847},[87,41965,32236],{"class":97},[87,41967,946],{"class":171},[87,41969,41970],{"class":97},"VGG16()\n",[87,41972,41973],{"class":89,"line":10856},[87,41974,35336],{"class":199},[87,41976,41977],{"class":89,"line":10862},[87,41978,35341],{"class":199},[87,41980,41981,41983,41985],{"class":89,"line":10870},[87,41982,35346],{"class":97},[87,41984,35349],{"class":949},[87,41986,31444],{"class":97},[87,41988,41989],{"class":89,"line":10875},[87,41990,35356],{"class":199},[87,41992,41993,41995,41997],{"class":89,"line":17553},[87,41994,34969],{"class":97},[87,41996,946],{"class":171},[87,41998,35365],{"class":97},[87,42000,42001],{"class":89,"line":17559},[87,42002,35370],{"class":199},[87,42004,42005],{"class":89,"line":17582},[87,42006,35375],{"class":97},[87,42008,42009],{"class":89,"line":17588},[87,42010,3355],{"emptyLinePlaceholder":1029},[87,42012,42013],{"class":89,"line":17611},[87,42014,35384],{"class":199},[87,42016,42017],{"class":89,"line":17625},[87,42018,35389],{"class":199},[87,42020,42021,42023,42025,42027,42029,42031,42033],{"class":89,"line":17645},[87,42022,32184],{"class":97},[87,42024,946],{"class":171},[87,42026,32191],{"class":949},[87,42028,2660],{"class":171},[87,42030,32196],{"class":97},[87,42032,2657],{"class":171},[87,42034,35066],{"class":949},[87,42036,42037,42039,42041],{"class":89,"line":17651},[87,42038,32236],{"class":97},[87,42040,946],{"class":171},[87,42042,33236],{"class":97},[87,42044,42045],{"class":89,"line":17662},[87,42046,35418],{"class":199},[87,42048,42049],{"class":89,"line":17685},[87,42050,35423],{"class":199},[87,42052,42053,42055,42057,42059,42061,42063,42065,42067,42069,42071,42073,42075,42077,42079,42081,42083,42085,42087,42089,42091,42093,42095,42097],{"class":89,"line":17707},[87,42054,35428],{"class":97},[87,42056,946],{"class":171},[87,42058,1982],{"class":97},[87,42060,35435],{"class":949},[87,42062,1473],{"class":97},[87,42064,35440],{"class":949},[87,42066,1473],{"class":97},[87,42068,35445],{"class":949},[87,42070,1473],{"class":97},[87,42072,35450],{"class":949},[87,42074,1473],{"class":97},[87,42076,35455],{"class":949},[87,42078,1473],{"class":97},[87,42080,35460],{"class":949},[87,42082,1473],{"class":97},[87,42084,35465],{"class":949},[87,42086,1473],{"class":97},[87,42088,35470],{"class":949},[87,42090,1473],{"class":97},[87,42092,35475],{"class":949},[87,42094,1473],{"class":97},[87,42096,35480],{"class":949},[87,42098,34193],{"class":97},[87,42100,42101,42103],{"class":89,"line":17712},[87,42102,35125],{"class":171},[87,42104,33831],{"class":97},[87,42106,42107],{"class":89,"line":17718},[87,42108,35493],{"class":199},[87,42110,42111,42113,42115,42117],{"class":89,"line":17732},[87,42112,4357],{"class":171},[87,42114,35500],{"class":97},[87,42116,26990],{"class":171},[87,42118,35144],{"class":97},[87,42120,42121,42123,42125],{"class":89,"line":17745},[87,42122,33557],{"class":97},[87,42124,946],{"class":171},[87,42126,33562],{"class":97},[87,42128,42129,42131,42133],{"class":89,"line":17750},[87,42130,33572],{"class":97},[87,42132,946],{"class":171},[87,42134,33577],{"class":97},[87,42136,42137],{"class":89,"line":17764},[87,42138,3355],{"emptyLinePlaceholder":1029},[87,42140,42141],{"class":89,"line":17769},[87,42142,35529],{"class":199},[87,42144,42145],{"class":89,"line":17775},[87,42146,33822],{"class":97},[87,42148,42149],{"class":89,"line":17780},[87,42150,35538],{"class":199},[87,42152,42153,42155,42157],{"class":89,"line":17794},[87,42154,33607],{"class":97},[87,42156,946],{"class":171},[87,42158,33612],{"class":97},[87,42160,42161],{"class":89,"line":17799},[87,42162,35551],{"class":199},[87,42164,42165,42167,42169,42171,42173,42175,42177],{"class":89,"line":17804},[87,42166,33624],{"class":97},[87,42168,946],{"class":171},[87,42170,33629],{"class":97},[87,42172,33632],{"class":492},[87,42174,946],{"class":171},[87,42176,1313],{"class":104},[87,42178,1108],{"class":97},[87,42180,42181],{"class":89,"line":17818},[87,42182,35572],{"class":199},[87,42184,42185,42187,42189],{"class":89,"line":17830},[87,42186,35577],{"class":97},[87,42188,946],{"class":171},[87,42190,35582],{"class":97},[87,42192,42193,42195,42197],{"class":89,"line":17835},[87,42194,35587],{"class":97},[87,42196,946],{"class":171},[87,42198,35592],{"class":97},[87,42200,42201,42203,42205,42207,42209,42211,42213,42215],{"class":89,"line":17848},[87,42202,35597],{"class":104},[87,42204,165],{"class":97},[87,42206,35602],{"class":949},[87,42208,35605],{"class":97},[87,42210,35608],{"class":949},[87,42212,1473],{"class":97},[87,42214,35613],{"class":949},[87,42216,35616],{"class":97},[44,42218,42220],{"id":42219},"_23googlenet","2.3.GoogLeNet",[49,42222,42224],{"id":42223},"_231原理","2.3.1.原理",[1055,42226,42227],{},[29,42228,42229],{},"网络结构",[19,42231,42232],{},[39,42233],{"alt":82,"src":42234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[19,42236,42237],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,42239,42240],{},[39,42241],{"alt":82,"src":42242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[19,42244,42245],{},[39,42246],{"alt":82,"src":42247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[19,42249,42250],{},[39,42251],{"alt":82,"src":42252},"\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",[1055,42254,42255],{"start":101},[29,42256,42257],{},"1x1卷积的优点",[19,42259,42260],{},[39,42261],{"alt":82,"src":42262},"\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",[1055,42264,42265],{"start":120},[29,42266,42267],{},"全局平均池化层优点",[19,42269,42270],{},[39,42271],{"alt":82,"src":42272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[19,42274,42275],{},[39,42276],{"alt":82,"src":42277},"\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",[1055,42279,42280],{"start":222},[29,42281,42282],{},"参数详细描述",[19,42284,42285],{},[39,42286],{"alt":82,"src":42287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[19,42289,42290],{},[39,42291],{"alt":82,"src":42292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[19,42294,42295],{},[39,42296],{"alt":82,"src":42297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[19,42299,42300],{},[39,42301],{"alt":82,"src":42302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[19,42304,42305],{},[39,42306],{"alt":82,"src":42307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[19,42309,42310],{},[39,42311],{"alt":82,"src":42312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[19,42314,42315],{},[39,42316],{"alt":82,"src":42317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[19,42319,42320],{},[39,42321],{"alt":82,"src":42322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[19,42324,42325],{},[39,42326],{"alt":82,"src":42327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[19,42329,42330],{},[39,42331],{"alt":82,"src":42332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[19,42334,42335],{},[39,42336],{"alt":82,"src":42337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[19,42339,42340],{},[39,42341],{"alt":82,"src":42342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[19,42344,42345],{},[39,42346],{"alt":82,"src":42347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[19,42349,42350],{},[39,42351],{"alt":82,"src":42352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[19,42354,42355],{},[39,42356],{"alt":82,"src":42357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[19,42359,42360],{},[39,42361],{"alt":82,"src":42362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[19,42364,42365],{},[39,42366],{"alt":82,"src":42367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[19,42369,42370],{},[39,42371],{"alt":82,"src":42372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[19,42374,42375],{},[39,42376],{"alt":82,"src":42377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[19,42379,42380],{},[39,42381],{"alt":82,"src":42382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[19,42384,42385],{},[39,42386],{"alt":82,"src":42387},"\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",[49,42389,42391],{"id":42390},"_232代码实现","2.3.2.代码实现",[1055,42393,42394],{},[29,42395,31658],{},[19,42397,42398],{},"根据原理一步一步搭建即可",[77,42400,42402],{"className":31325,"code":42401,"language":31327,"meta":82,"style":82},"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",[84,42403,42404,42410,42420,42430,42434,42451,42460,42475,42485,42490,42523,42528,42565,42612,42617,42653,42700,42705,42710,42745,42777,42781,42789,42805,42829,42854,42875,42880,42895,42899,42903,42908,42925,42930,42939,42954,42965,43009,43013,43041,43045,43056,43084,43088,43125,43129,43157,43161,43172,43208,43240,43268,43272,43283,43317,43349,43381,43414,43448,43476,43480,43491,43524,43556,43570,43574,43587,43591,43596,43608,43616,43638,43643,43648,43653,43658,43663,43668,43682,43690,43699,43712,43727,43736,43740,43748,43759,43770,43781,43792,43803,43809,43813,43818,43830,43850,43859],{"__ignoreMap":82},[87,42405,42406,42408],{"class":89,"line":90},[87,42407,31339],{"class":171},[87,42409,31342],{"class":97},[87,42411,42412,42414,42416,42418],{"class":89,"line":101},[87,42413,31684],{"class":171},[87,42415,31687],{"class":97},[87,42417,31339],{"class":171},[87,42419,31692],{"class":97},[87,42421,42422,42424,42426,42428],{"class":89,"line":120},[87,42423,31684],{"class":171},[87,42425,31704],{"class":97},[87,42427,31339],{"class":171},[87,42429,31709],{"class":97},[87,42431,42432],{"class":89,"line":222},[87,42433,3355],{"emptyLinePlaceholder":1029},[87,42435,42436,42438,42441,42443,42445,42447,42449],{"class":89,"line":234},[87,42437,15644],{"class":171},[87,42439,42440],{"class":205}," Inception",[87,42442,165],{"class":97},[87,42444,31725],{"class":205},[87,42446,1651],{"class":97},[87,42448,31730],{"class":205},[87,42450,31733],{"class":97},[87,42452,42453,42455,42457],{"class":89,"line":256},[87,42454,31748],{"class":171},[87,42456,31751],{"class":104},[87,42458,42459],{"class":97},"(self,in_channels,c1,c2,c3,c4):\n",[87,42461,42462,42464,42467,42469,42471,42473],{"class":89,"line":269},[87,42463,31764],{"class":104},[87,42465,42466],{"class":97},"(Inception,",[87,42468,31770],{"class":104},[87,42470,31773],{"class":97},[87,42472,31776],{"class":104},[87,42474,2931],{"class":97},[87,42476,42477,42479,42481,42483],{"class":89,"line":463},[87,42478,31792],{"class":104},[87,42480,35718],{"class":97},[87,42482,946],{"class":171},[87,42484,35723],{"class":97},[87,42486,42487],{"class":89,"line":469},[87,42488,42489],{"class":199},"        # 路线1：定义1*1卷积\n",[87,42491,42492,42494,42497,42499,42501,42503,42505,42508,42510,42512,42515,42517,42519,42521],{"class":89,"line":2287},[87,42493,31792],{"class":104},[87,42495,42496],{"class":97},".p1_1",[87,42498,946],{"class":171},[87,42500,31800],{"class":97},[87,42502,31803],{"class":492},[87,42504,946],{"class":171},[87,42506,42507],{"class":97},"in_channels,",[87,42509,31812],{"class":492},[87,42511,946],{"class":171},[87,42513,42514],{"class":97},"c1,",[87,42516,31821],{"class":492},[87,42518,946],{"class":171},[87,42520,1313],{"class":104},[87,42522,1108],{"class":97},[87,42524,42525],{"class":89,"line":2568},[87,42526,42527],{"class":199},"        # 路线2：定义1*1卷积和3*3\n",[87,42529,42530,42532,42535,42537,42539,42541,42543,42545,42547,42549,42552,42554,42557,42559,42561,42563],{"class":89,"line":2573},[87,42531,31792],{"class":104},[87,42533,42534],{"class":97},".p2_1",[87,42536,946],{"class":171},[87,42538,31800],{"class":97},[87,42540,31803],{"class":492},[87,42542,946],{"class":171},[87,42544,42507],{"class":97},[87,42546,31812],{"class":492},[87,42548,946],{"class":171},[87,42550,42551],{"class":97},"c2[",[87,42553,111],{"class":104},[87,42555,42556],{"class":97},"],",[87,42558,31821],{"class":492},[87,42560,946],{"class":171},[87,42562,1313],{"class":104},[87,42564,1108],{"class":97},[87,42566,42567,42569,42572,42574,42576,42578,42580,42582,42584,42586,42588,42590,42592,42594,42596,42598,42600,42602,42604,42606,42608,42610],{"class":89,"line":2579},[87,42568,31792],{"class":104},[87,42570,42571],{"class":97},".p2_2",[87,42573,946],{"class":171},[87,42575,31800],{"class":97},[87,42577,31803],{"class":492},[87,42579,946],{"class":171},[87,42581,42551],{"class":97},[87,42583,111],{"class":104},[87,42585,42556],{"class":97},[87,42587,31812],{"class":492},[87,42589,946],{"class":171},[87,42591,42551],{"class":97},[87,42593,1313],{"class":104},[87,42595,42556],{"class":97},[87,42597,31821],{"class":492},[87,42599,946],{"class":171},[87,42601,1170],{"class":104},[87,42603,1473],{"class":97},[87,42605,31830],{"class":492},[87,42607,946],{"class":171},[87,42609,1313],{"class":104},[87,42611,1108],{"class":97},[87,42613,42614],{"class":89,"line":2584},[87,42615,42616],{"class":199},"        # 路线3：定义1*1卷积和5*5\n",[87,42618,42619,42621,42624,42626,42628,42630,42632,42634,42636,42638,42641,42643,42645,42647,42649,42651],{"class":89,"line":2598},[87,42620,31792],{"class":104},[87,42622,42623],{"class":97},".p3_1",[87,42625,946],{"class":171},[87,42627,31800],{"class":97},[87,42629,31803],{"class":492},[87,42631,946],{"class":171},[87,42633,42507],{"class":97},[87,42635,31812],{"class":492},[87,42637,946],{"class":171},[87,42639,42640],{"class":97},"c3[",[87,42642,111],{"class":104},[87,42644,42556],{"class":97},[87,42646,31821],{"class":492},[87,42648,946],{"class":171},[87,42650,1313],{"class":104},[87,42652,1108],{"class":97},[87,42654,42655,42657,42660,42662,42664,42666,42668,42670,42672,42674,42676,42678,42680,42682,42684,42686,42688,42690,42692,42694,42696,42698],{"class":89,"line":2603},[87,42656,31792],{"class":104},[87,42658,42659],{"class":97},".p3_2",[87,42661,946],{"class":171},[87,42663,31800],{"class":97},[87,42665,31803],{"class":492},[87,42667,946],{"class":171},[87,42669,42640],{"class":97},[87,42671,111],{"class":104},[87,42673,42556],{"class":97},[87,42675,31812],{"class":492},[87,42677,946],{"class":171},[87,42679,42640],{"class":97},[87,42681,1313],{"class":104},[87,42683,42556],{"class":97},[87,42685,31821],{"class":492},[87,42687,946],{"class":171},[87,42689,1414],{"class":104},[87,42691,1473],{"class":97},[87,42693,31830],{"class":492},[87,42695,946],{"class":171},[87,42697,1176],{"class":104},[87,42699,1108],{"class":97},[87,42701,42702],{"class":89,"line":2609},[87,42703,42704],{"class":199},"        # 路线4：定义3*3最大池化和1*1卷积\n",[87,42706,42707],{"class":89,"line":2630},[87,42708,42709],{"class":199},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[87,42711,42712,42714,42717,42719,42721,42723,42725,42727,42729,42731,42733,42735,42737,42739,42741,42743],{"class":89,"line":2635},[87,42713,31792],{"class":104},[87,42715,42716],{"class":97},".p4_1",[87,42718,946],{"class":171},[87,42720,35776],{"class":97},[87,42722,31821],{"class":492},[87,42724,946],{"class":171},[87,42726,1170],{"class":104},[87,42728,1473],{"class":97},[87,42730,31876],{"class":492},[87,42732,946],{"class":171},[87,42734,1313],{"class":104},[87,42736,1473],{"class":97},[87,42738,31830],{"class":492},[87,42740,946],{"class":171},[87,42742,1313],{"class":104},[87,42744,1108],{"class":97},[87,42746,42747,42749,42752,42754,42756,42758,42760,42762,42764,42766,42769,42771,42773,42775],{"class":89,"line":2649},[87,42748,31792],{"class":104},[87,42750,42751],{"class":97},".p4_2",[87,42753,946],{"class":171},[87,42755,31800],{"class":97},[87,42757,31803],{"class":492},[87,42759,946],{"class":171},[87,42761,42507],{"class":97},[87,42763,31812],{"class":492},[87,42765,946],{"class":171},[87,42767,42768],{"class":97},"c4,",[87,42770,31821],{"class":492},[87,42772,946],{"class":171},[87,42774,1313],{"class":104},[87,42776,1108],{"class":97},[87,42778,42779],{"class":89,"line":2654},[87,42780,3355],{"emptyLinePlaceholder":1029},[87,42782,42783,42785,42787],{"class":89,"line":2683},[87,42784,31748],{"class":171},[87,42786,32040],{"class":205},[87,42788,32043],{"class":97},[87,42790,42791,42794,42796,42798,42800,42802],{"class":89,"line":2688},[87,42792,42793],{"class":97},"        p1",[87,42795,946],{"class":171},[87,42797,31770],{"class":104},[87,42799,36131],{"class":97},[87,42801,31770],{"class":104},[87,42803,42804],{"class":97},".p1_1(x))\n",[87,42806,42807,42809,42811,42813,42815,42817,42820,42822,42824,42826],{"class":89,"line":2705},[87,42808,8035],{"class":97},[87,42810,946],{"class":171},[87,42812,31770],{"class":104},[87,42814,36131],{"class":97},[87,42816,31770],{"class":104},[87,42818,42819],{"class":97},".p2_2(",[87,42821,31770],{"class":104},[87,42823,36131],{"class":97},[87,42825,31770],{"class":104},[87,42827,42828],{"class":97},".p2_1(x))))\n",[87,42830,42831,42834,42836,42838,42840,42842,42845,42847,42849,42851],{"class":89,"line":2710},[87,42832,42833],{"class":97},"        p3",[87,42835,946],{"class":171},[87,42837,31770],{"class":104},[87,42839,36131],{"class":97},[87,42841,31770],{"class":104},[87,42843,42844],{"class":97},".p3_2(",[87,42846,31770],{"class":104},[87,42848,36131],{"class":97},[87,42850,31770],{"class":104},[87,42852,42853],{"class":97},".p3_1(x))))\n",[87,42855,42856,42859,42861,42863,42865,42867,42870,42872],{"class":89,"line":2715},[87,42857,42858],{"class":97},"        p4",[87,42860,946],{"class":171},[87,42862,31770],{"class":104},[87,42864,36131],{"class":97},[87,42866,31770],{"class":104},[87,42868,42869],{"class":97},".p4_2(",[87,42871,31770],{"class":104},[87,42873,42874],{"class":97},".p4_1(x)))\n",[87,42876,42877],{"class":89,"line":2720},[87,42878,42879],{"class":199},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[87,42881,42882,42884,42887,42889,42891,42893],{"class":89,"line":2734},[87,42883,15702],{"class":171},[87,42885,42886],{"class":97}," torch.cat((p1,p2,p3,p4),",[87,42888,33632],{"class":492},[87,42890,946],{"class":171},[87,42892,1313],{"class":104},[87,42894,1108],{"class":97},[87,42896,42897],{"class":89,"line":2739},[87,42898,3355],{"emptyLinePlaceholder":1029},[87,42900,42901],{"class":89,"line":3532},[87,42902,3355],{"emptyLinePlaceholder":1029},[87,42904,42905],{"class":89,"line":3546},[87,42906,42907],{"class":199},"# 搭建GoogLeNet网络\n",[87,42909,42910,42912,42915,42917,42919,42921,42923],{"class":89,"line":3554},[87,42911,15644],{"class":171},[87,42913,42914],{"class":205}," GoogLeNet",[87,42916,165],{"class":97},[87,42918,31725],{"class":205},[87,42920,1651],{"class":97},[87,42922,31730],{"class":205},[87,42924,31733],{"class":97},[87,42926,42927],{"class":89,"line":3559},[87,42928,42929],{"class":199},"    # 必须把Inception导入到里边\n",[87,42931,42932,42934,42936],{"class":89,"line":3565},[87,42933,31748],{"class":171},[87,42935,31751],{"class":104},[87,42937,42938],{"class":97},"(self,Inception):\n",[87,42940,42941,42943,42946,42948,42950,42952],{"class":89,"line":3571},[87,42942,31764],{"class":104},[87,42944,42945],{"class":97},"(GoogLeNet,",[87,42947,31770],{"class":104},[87,42949,31773],{"class":97},[87,42951,31776],{"class":104},[87,42953,2931],{"class":97},[87,42955,42956,42958,42961,42963],{"class":89,"line":3576},[87,42957,31792],{"class":104},[87,42959,42960],{"class":97},".b1",[87,42962,946],{"class":171},[87,42964,38956],{"class":97},[87,42966,42967,42969,42971,42973,42975,42977,42979,42981,42983,42985,42987,42989,42991,42993,42995,42997,42999,43001,43003,43005,43007],{"class":89,"line":8898},[87,42968,38961],{"class":97},[87,42970,31803],{"class":492},[87,42972,946],{"class":171},[87,42974,1313],{"class":104},[87,42976,1473],{"class":97},[87,42978,31812],{"class":492},[87,42980,946],{"class":171},[87,42982,1299],{"class":104},[87,42984,1473],{"class":97},[87,42986,31821],{"class":492},[87,42988,946],{"class":171},[87,42990,1464],{"class":104},[87,42992,1473],{"class":97},[87,42994,31876],{"class":492},[87,42996,946],{"class":171},[87,42998,1176],{"class":104},[87,43000,1473],{"class":97},[87,43002,31830],{"class":492},[87,43004,946],{"class":171},[87,43006,1170],{"class":104},[87,43008,38994],{"class":97},[87,43010,43011],{"class":89,"line":8922},[87,43012,38999],{"class":97},[87,43014,43015,43017,43019,43021,43023,43025,43027,43029,43031,43033,43035,43037,43039],{"class":89,"line":8927},[87,43016,39044],{"class":97},[87,43018,31821],{"class":492},[87,43020,946],{"class":171},[87,43022,1170],{"class":104},[87,43024,1473],{"class":97},[87,43026,31876],{"class":492},[87,43028,946],{"class":171},[87,43030,1176],{"class":104},[87,43032,1473],{"class":97},[87,43034,31830],{"class":492},[87,43036,946],{"class":171},[87,43038,1313],{"class":104},[87,43040,1108],{"class":97},[87,43042,43043],{"class":89,"line":8933},[87,43044,39073],{"class":97},[87,43046,43047,43049,43052,43054],{"class":89,"line":8960},[87,43048,31792],{"class":104},[87,43050,43051],{"class":97},".b2",[87,43053,946],{"class":171},[87,43055,38956],{"class":97},[87,43057,43058,43060,43062,43064,43066,43068,43070,43072,43074,43076,43078,43080,43082],{"class":89,"line":8965},[87,43059,38961],{"class":97},[87,43061,31803],{"class":492},[87,43063,946],{"class":171},[87,43065,1299],{"class":104},[87,43067,1473],{"class":97},[87,43069,31812],{"class":492},[87,43071,946],{"class":171},[87,43073,1299],{"class":104},[87,43075,1473],{"class":97},[87,43077,31821],{"class":492},[87,43079,946],{"class":171},[87,43081,1313],{"class":104},[87,43083,38994],{"class":97},[87,43085,43086],{"class":89,"line":8971},[87,43087,38999],{"class":97},[87,43089,43090,43092,43094,43096,43098,43100,43102,43104,43107,43109,43111,43113,43115,43117,43119,43121,43123],{"class":89,"line":8983},[87,43091,38961],{"class":97},[87,43093,31803],{"class":492},[87,43095,946],{"class":171},[87,43097,1299],{"class":104},[87,43099,1473],{"class":97},[87,43101,31812],{"class":492},[87,43103,946],{"class":171},[87,43105,43106],{"class":104},"192",[87,43108,1473],{"class":97},[87,43110,31821],{"class":492},[87,43112,946],{"class":171},[87,43114,1170],{"class":104},[87,43116,1473],{"class":97},[87,43118,31830],{"class":492},[87,43120,946],{"class":171},[87,43122,1313],{"class":104},[87,43124,38994],{"class":97},[87,43126,43127],{"class":89,"line":8995},[87,43128,38999],{"class":97},[87,43130,43131,43133,43135,43137,43139,43141,43143,43145,43147,43149,43151,43153,43155],{"class":89,"line":9007},[87,43132,39044],{"class":97},[87,43134,31821],{"class":492},[87,43136,946],{"class":171},[87,43138,1170],{"class":104},[87,43140,1473],{"class":97},[87,43142,31876],{"class":492},[87,43144,946],{"class":171},[87,43146,1176],{"class":104},[87,43148,1473],{"class":97},[87,43150,31830],{"class":492},[87,43152,946],{"class":171},[87,43154,1313],{"class":104},[87,43156,1108],{"class":97},[87,43158,43159],{"class":89,"line":10666},[87,43160,39073],{"class":97},[87,43162,43163,43165,43168,43170],{"class":89,"line":10691},[87,43164,31792],{"class":104},[87,43166,43167],{"class":97},".b3",[87,43169,946],{"class":171},[87,43171,38956],{"class":97},[87,43173,43174,43177,43179,43181,43183,43186,43188,43190,43192,43195,43197,43199,43201,43204,43206],{"class":89,"line":10714},[87,43175,43176],{"class":97},"            Inception(",[87,43178,43106],{"class":104},[87,43180,1473],{"class":97},[87,43182,1299],{"class":104},[87,43184,43185],{"class":97},",(",[87,43187,1305],{"class":104},[87,43189,1473],{"class":97},[87,43191,33017],{"class":104},[87,43193,43194],{"class":97},"),(",[87,43196,1694],{"class":104},[87,43198,1473],{"class":97},[87,43200,1293],{"class":104},[87,43202,43203],{"class":97},"),",[87,43205,1293],{"class":104},[87,43207,38994],{"class":97},[87,43209,43210,43212,43214,43216,43218,43220,43222,43224,43226,43228,43230,43232,43234,43236,43238],{"class":89,"line":10738},[87,43211,43176],{"class":97},[87,43213,35817],{"class":104},[87,43215,1473],{"class":97},[87,43217,33017],{"class":104},[87,43219,43185],{"class":97},[87,43221,33017],{"class":104},[87,43223,1473],{"class":97},[87,43225,43106],{"class":104},[87,43227,43194],{"class":97},[87,43229,1293],{"class":104},[87,43231,1473],{"class":97},[87,43233,1305],{"class":104},[87,43235,43203],{"class":97},[87,43237,1299],{"class":104},[87,43239,38994],{"class":97},[87,43241,43242,43244,43246,43248,43250,43252,43254,43256,43258,43260,43262,43264,43266],{"class":89,"line":10743},[87,43243,39044],{"class":97},[87,43245,31821],{"class":492},[87,43247,946],{"class":171},[87,43249,1170],{"class":104},[87,43251,1473],{"class":97},[87,43253,31876],{"class":492},[87,43255,946],{"class":171},[87,43257,1176],{"class":104},[87,43259,1473],{"class":97},[87,43261,31830],{"class":492},[87,43263,946],{"class":171},[87,43265,1313],{"class":104},[87,43267,1108],{"class":97},[87,43269,43270],{"class":89,"line":10748},[87,43271,39073],{"class":97},[87,43273,43274,43276,43279,43281],{"class":89,"line":10753},[87,43275,31792],{"class":104},[87,43277,43278],{"class":97},".b4",[87,43280,946],{"class":171},[87,43282,38956],{"class":97},[87,43284,43285,43287,43290,43292,43294,43296,43298,43300,43303,43305,43307,43309,43311,43313,43315],{"class":89,"line":10762},[87,43286,43176],{"class":97},[87,43288,43289],{"class":104},"480",[87,43291,1473],{"class":97},[87,43293,43106],{"class":104},[87,43295,43185],{"class":97},[87,43297,1305],{"class":104},[87,43299,1473],{"class":97},[87,43301,43302],{"class":104},"208",[87,43304,43194],{"class":97},[87,43306,1694],{"class":104},[87,43308,1473],{"class":97},[87,43310,1700],{"class":104},[87,43312,43203],{"class":97},[87,43314,1299],{"class":104},[87,43316,38994],{"class":97},[87,43318,43319,43321,43323,43325,43327,43329,43331,43333,43335,43337,43339,43341,43343,43345,43347],{"class":89,"line":10767},[87,43320,43176],{"class":97},[87,43322,39404],{"class":104},[87,43324,1473],{"class":97},[87,43326,21996],{"class":104},[87,43328,43185],{"class":97},[87,43330,1711],{"class":104},[87,43332,1473],{"class":97},[87,43334,32448],{"class":104},[87,43336,43194],{"class":97},[87,43338,1892],{"class":104},[87,43340,1473],{"class":97},[87,43342,1299],{"class":104},[87,43344,43203],{"class":97},[87,43346,1299],{"class":104},[87,43348,38994],{"class":97},[87,43350,43351,43353,43355,43357,43359,43361,43363,43365,43367,43369,43371,43373,43375,43377,43379],{"class":89,"line":10773},[87,43352,43176],{"class":97},[87,43354,39404],{"class":104},[87,43356,1473],{"class":97},[87,43358,33017],{"class":104},[87,43360,43185],{"class":97},[87,43362,33017],{"class":104},[87,43364,1473],{"class":97},[87,43366,35817],{"class":104},[87,43368,43194],{"class":97},[87,43370,1892],{"class":104},[87,43372,1473],{"class":97},[87,43374,1299],{"class":104},[87,43376,43203],{"class":97},[87,43378,1299],{"class":104},[87,43380,38994],{"class":97},[87,43382,43383,43385,43387,43389,43391,43393,43395,43397,43400,43402,43404,43406,43408,43410,43412],{"class":89,"line":10794},[87,43384,43176],{"class":97},[87,43386,39404],{"class":104},[87,43388,1473],{"class":97},[87,43390,1711],{"class":104},[87,43392,43185],{"class":97},[87,43394,33017],{"class":104},[87,43396,1473],{"class":97},[87,43398,43399],{"class":104},"288",[87,43401,43194],{"class":97},[87,43403,1293],{"class":104},[87,43405,1473],{"class":97},[87,43407,1299],{"class":104},[87,43409,43203],{"class":97},[87,43411,1299],{"class":104},[87,43413,38994],{"class":97},[87,43415,43416,43418,43421,43423,43425,43427,43429,43431,43434,43436,43438,43440,43442,43444,43446],{"class":89,"line":10800},[87,43417,43176],{"class":97},[87,43419,43420],{"class":104},"528",[87,43422,1473],{"class":97},[87,43424,35817],{"class":104},[87,43426,43185],{"class":97},[87,43428,21996],{"class":104},[87,43430,1473],{"class":97},[87,43432,43433],{"class":104},"320",[87,43435,43194],{"class":97},[87,43437,1293],{"class":104},[87,43439,1473],{"class":97},[87,43441,33017],{"class":104},[87,43443,43203],{"class":97},[87,43445,33017],{"class":104},[87,43447,38994],{"class":97},[87,43449,43450,43452,43454,43456,43458,43460,43462,43464,43466,43468,43470,43472,43474],{"class":89,"line":10814},[87,43451,39044],{"class":97},[87,43453,31821],{"class":492},[87,43455,946],{"class":171},[87,43457,1170],{"class":104},[87,43459,1473],{"class":97},[87,43461,31876],{"class":492},[87,43463,946],{"class":171},[87,43465,1176],{"class":104},[87,43467,1473],{"class":97},[87,43469,31830],{"class":492},[87,43471,946],{"class":171},[87,43473,1313],{"class":104},[87,43475,1108],{"class":97},[87,43477,43478],{"class":89,"line":10820},[87,43479,39073],{"class":97},[87,43481,43482,43484,43487,43489],{"class":89,"line":10847},[87,43483,31792],{"class":104},[87,43485,43486],{"class":97},".b5",[87,43488,946],{"class":171},[87,43490,38956],{"class":97},[87,43492,43493,43495,43498,43500,43502,43504,43506,43508,43510,43512,43514,43516,43518,43520,43522],{"class":89,"line":10856},[87,43494,43176],{"class":97},[87,43496,43497],{"class":104},"832",[87,43499,1473],{"class":97},[87,43501,35817],{"class":104},[87,43503,43185],{"class":97},[87,43505,21996],{"class":104},[87,43507,1473],{"class":97},[87,43509,43433],{"class":104},[87,43511,43194],{"class":97},[87,43513,1293],{"class":104},[87,43515,1473],{"class":97},[87,43517,33017],{"class":104},[87,43519,43203],{"class":97},[87,43521,33017],{"class":104},[87,43523,38994],{"class":97},[87,43525,43526,43528,43530,43532,43534,43536,43538,43540,43542,43544,43546,43548,43550,43552,43554],{"class":89,"line":10862},[87,43527,43176],{"class":97},[87,43529,43497],{"class":104},[87,43531,1473],{"class":97},[87,43533,35887],{"class":104},[87,43535,43185],{"class":97},[87,43537,43106],{"class":104},[87,43539,1473],{"class":97},[87,43541,35887],{"class":104},[87,43543,43194],{"class":97},[87,43545,1700],{"class":104},[87,43547,1473],{"class":97},[87,43549,33017],{"class":104},[87,43551,43203],{"class":97},[87,43553,33017],{"class":104},[87,43555,38994],{"class":97},[87,43557,43558,43561,43563,43565,43567],{"class":89,"line":10870},[87,43559,43560],{"class":97},"            nn.AdaptiveAvgPool2d((",[87,43562,1313],{"class":104},[87,43564,1473],{"class":97},[87,43566,1313],{"class":104},[87,43568,43569],{"class":97},")),\n",[87,43571,43572],{"class":89,"line":10875},[87,43573,39737],{"class":97},[87,43575,43576,43578,43581,43583,43585],{"class":89,"line":17553},[87,43577,39742],{"class":97},[87,43579,43580],{"class":104},"1024",[87,43582,1473],{"class":97},[87,43584,242],{"class":104},[87,43586,1108],{"class":97},[87,43588,43589],{"class":89,"line":17559},[87,43590,39073],{"class":97},[87,43592,43593],{"class":89,"line":17582},[87,43594,43595],{"class":199},"        # 对模型参数初始化\n",[87,43597,43598,43600,43602,43604,43606],{"class":89,"line":17588},[87,43599,4357],{"class":171},[87,43601,39815],{"class":97},[87,43603,26990],{"class":171},[87,43605,39820],{"class":104},[87,43607,39823],{"class":97},[87,43609,43610,43612,43614],{"class":89,"line":17611},[87,43611,5595],{"class":171},[87,43613,39835],{"class":104},[87,43615,39838],{"class":97},[87,43617,43618,43620,43623,43625,43628,43630,43632,43634,43636],{"class":89,"line":17625},[87,43619,39848],{"class":97},[87,43621,43622],{"class":492},"mode",[87,43624,946],{"class":171},[87,43626,43627],{"class":949},"'fan_out'",[87,43629,1473],{"class":97},[87,43631,39851],{"class":492},[87,43633,946],{"class":171},[87,43635,39856],{"class":949},[87,43637,1108],{"class":97},[87,43639,43640],{"class":89,"line":17645},[87,43641,43642],{"class":199},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[87,43644,43645],{"class":89,"line":17651},[87,43646,43647],{"class":199},"                # ② mode = 'fan_out'决定使用的fan值：\n",[87,43649,43650],{"class":89,"line":17662},[87,43651,43652],{"class":199},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[87,43654,43655],{"class":89,"line":17685},[87,43656,43657],{"class":199},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[87,43659,43660],{"class":89,"line":17707},[87,43661,43662],{"class":199},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[87,43664,43665],{"class":89,"line":17712},[87,43666,43667],{"class":199},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[87,43669,43670,43672,43674,43676,43678,43680],{"class":89,"line":17718},[87,43671,39868],{"class":171},[87,43673,39871],{"class":97},[87,43675,39874],{"class":171},[87,43677,39877],{"class":171},[87,43679,39880],{"class":104},[87,43681,4693],{"class":97},[87,43683,43684,43686,43688],{"class":89,"line":17732},[87,43685,39892],{"class":97},[87,43687,111],{"class":104},[87,43689,1108],{"class":97},[87,43691,43692,43695,43697],{"class":89,"line":17745},[87,43693,43694],{"class":171},"                elif",[87,43696,39835],{"class":104},[87,43698,39911],{"class":97},[87,43700,43701,43704,43706,43708,43710],{"class":89,"line":17750},[87,43702,43703],{"class":97},"                    nn.init.normal_(m.weight,",[87,43705,111],{"class":104},[87,43707,1473],{"class":97},[87,43709,39933],{"class":104},[87,43711,1108],{"class":97},[87,43713,43714,43717,43719,43721,43723,43725],{"class":89,"line":17764},[87,43715,43716],{"class":171},"                    if",[87,43718,39871],{"class":97},[87,43720,39874],{"class":171},[87,43722,39877],{"class":171},[87,43724,39880],{"class":104},[87,43726,4693],{"class":97},[87,43728,43729,43732,43734],{"class":89,"line":17769},[87,43730,43731],{"class":97},"                        nn.init.constant_(m.bias,",[87,43733,111],{"class":104},[87,43735,1108],{"class":97},[87,43737,43738],{"class":89,"line":17775},[87,43739,36112],{"class":199},[87,43741,43742,43744,43746],{"class":89,"line":17780},[87,43743,31748],{"class":171},[87,43745,32040],{"class":205},[87,43747,32043],{"class":97},[87,43749,43750,43752,43754,43756],{"class":89,"line":17794},[87,43751,32048],{"class":97},[87,43753,946],{"class":171},[87,43755,31770],{"class":104},[87,43757,43758],{"class":97},".b1(x)\n",[87,43760,43761,43763,43765,43767],{"class":89,"line":17799},[87,43762,32048],{"class":97},[87,43764,946],{"class":171},[87,43766,31770],{"class":104},[87,43768,43769],{"class":97},".b2(x)\n",[87,43771,43772,43774,43776,43778],{"class":89,"line":17804},[87,43773,32048],{"class":97},[87,43775,946],{"class":171},[87,43777,31770],{"class":104},[87,43779,43780],{"class":97},".b3(x)\n",[87,43782,43783,43785,43787,43789],{"class":89,"line":17818},[87,43784,32048],{"class":97},[87,43786,946],{"class":171},[87,43788,31770],{"class":104},[87,43790,43791],{"class":97},".b4(x)\n",[87,43793,43794,43796,43798,43800],{"class":89,"line":17830},[87,43795,32048],{"class":97},[87,43797,946],{"class":171},[87,43799,31770],{"class":104},[87,43801,43802],{"class":97},".b5(x)\n",[87,43804,43805,43807],{"class":89,"line":17835},[87,43806,15702],{"class":171},[87,43808,32156],{"class":97},[87,43810,43811],{"class":89,"line":17848},[87,43812,3355],{"emptyLinePlaceholder":1029},[87,43814,43815],{"class":89,"line":17853},[87,43816,43817],{"class":199},"# 模型展示\n",[87,43819,43820,43822,43824,43826,43828],{"class":89,"line":17858},[87,43821,2488],{"class":171},[87,43823,32167],{"class":104},[87,43825,3903],{"class":171},[87,43827,32172],{"class":949},[87,43829,4693],{"class":97},[87,43831,43832,43834,43836,43838,43840,43842,43844,43846,43848],{"class":89,"line":17863},[87,43833,32184],{"class":97},[87,43835,946],{"class":171},[87,43837,31398],{"class":97},[87,43839,32191],{"class":949},[87,43841,2660],{"class":171},[87,43843,32196],{"class":97},[87,43845,2657],{"class":171},[87,43847,31423],{"class":949},[87,43849,1108],{"class":97},[87,43851,43852,43854,43856],{"class":89,"line":17876},[87,43853,32236],{"class":97},[87,43855,946],{"class":171},[87,43857,43858],{"class":97},"GoogLeNet(Inception).to(device)\n",[87,43860,43861,43863,43865,43867,43869,43871,43873,43875],{"class":89,"line":17881},[87,43862,32246],{"class":104},[87,43864,32249],{"class":97},[87,43866,1313],{"class":104},[87,43868,1473],{"class":97},[87,43870,32448],{"class":104},[87,43872,1473],{"class":97},[87,43874,32448],{"class":104},[87,43876,32262],{"class":97},[1055,43878,43879],{"start":101},[29,43880,40130],{},[77,43882,43884],{"className":31325,"code":43883,"language":31327,"meta":82,"style":82},"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",[84,43885,43886,43892,43898,43908,43914,43924,43934,43944,43954,43964,43968,43979,43989,43993,43997,44001,44009,44021,44031,44047,44057,44089,44103,44113,44123,44127,44137,44151,44161,44171,44181,44187,44191,44195,44199,44203,44207,44215,44235,44239,44243,44247,44251,44255,44271,44275,44279,44287,44291,44295,44303,44307,44311,44315,44323,44327,44331,44335,44339,44347,44351,44359,44363,44371,44375,44383,44387,44395,44399,44403,44411,44415,44419,44423,44435,44459,44473,44477,44481,44485,44493,44497,44505,44509,44517,44521,44529,44533,44541,44545,44553,44557,44569,44573,44581,44585,44593,44597,44601,44605,44609,44617,44621,44637,44641,44649,44653,44657,44661,44665,44669,44673,44677,44693,44697,44709,44713,44725,44729,44741,44745,44753,44757,44765,44769,44773,44777,44783,44787,44795,44799,44815,44819,44827,44831,44847,44859,44863,44875,44879,44883,44891,44895,44899,44907,44911,44919,44923,44931,44935,44939,44981,45023,45027,45031,45047,45051,45067,45071,45075,45083,45087,45091,45103,45141,45145,45149,45157,45161,45175,45185,45191,45197,45203,45209,45213,45217,45223,45227,45231,45239,45243,45261,45265,45269,45273,45289,45293,45297,45301,45305,45309,45329,45349,45353,45357,45361,45369,45377,45381,45397,45417,45437,45441,45445,45453,45461,45465,45469,45473,45485,45489,45499,45507,45524],{"__ignoreMap":82},[87,43887,43888,43890],{"class":89,"line":90},[87,43889,31339],{"class":171},[87,43891,32769],{"class":97},[87,43893,43894,43896],{"class":89,"line":101},[87,43895,31339],{"class":171},[87,43897,32776],{"class":97},[87,43899,43900,43902,43904,43906],{"class":89,"line":120},[87,43901,31339],{"class":171},[87,43903,32787],{"class":97},[87,43905,32330],{"class":171},[87,43907,32792],{"class":97},[87,43909,43910,43912],{"class":89,"line":222},[87,43911,31339],{"class":171},[87,43913,31342],{"class":97},[87,43915,43916,43918,43920,43922],{"class":89,"line":234},[87,43917,31684],{"class":171},[87,43919,32362],{"class":97},[87,43921,31339],{"class":171},[87,43923,32809],{"class":97},[87,43925,43926,43928,43930,43932],{"class":89,"line":256},[87,43927,31684],{"class":171},[87,43929,32315],{"class":97},[87,43931,31339],{"class":171},[87,43933,32320],{"class":97},[87,43935,43936,43938,43940,43942],{"class":89,"line":269},[87,43937,31684],{"class":171},[87,43939,32345],{"class":97},[87,43941,31339],{"class":171},[87,43943,32350],{"class":97},[87,43945,43946,43948,43950,43952],{"class":89,"line":463},[87,43947,31339],{"class":171},[87,43949,32362],{"class":97},[87,43951,32330],{"class":171},[87,43953,32367],{"class":97},[87,43955,43956,43958,43960,43962],{"class":89,"line":469},[87,43957,31339],{"class":171},[87,43959,32379],{"class":97},[87,43961,32330],{"class":171},[87,43963,32384],{"class":97},[87,43965,43966],{"class":89,"line":2287},[87,43967,32854],{"class":199},[87,43969,43970,43972,43974,43976],{"class":89,"line":2568},[87,43971,31684],{"class":171},[87,43973,32861],{"class":97},[87,43975,31339],{"class":171},[87,43977,43978],{"class":97}," GoogLeNet, Inception\n",[87,43980,43981,43983,43985,43987],{"class":89,"line":2573},[87,43982,31684],{"class":171},[87,43984,31687],{"class":97},[87,43986,31339],{"class":171},[87,43988,31692],{"class":97},[87,43990,43991],{"class":89,"line":2579},[87,43992,3355],{"emptyLinePlaceholder":1029},[87,43994,43995],{"class":89,"line":2584},[87,43996,3355],{"emptyLinePlaceholder":1029},[87,43998,43999],{"class":89,"line":2598},[87,44000,32889],{"class":199},[87,44002,44003,44005,44007],{"class":89,"line":2603},[87,44004,32894],{"class":171},[87,44006,32897],{"class":205},[87,44008,32900],{"class":97},[87,44010,44011,44013,44015,44017,44019],{"class":89,"line":2609},[87,44012,32905],{"class":97},[87,44014,946],{"class":171},[87,44016,32402],{"class":97},[87,44018,32410],{"class":949},[87,44020,32413],{"class":97},[87,44022,44023,44025,44027,44029],{"class":89,"line":2630},[87,44024,32918],{"class":492},[87,44026,946],{"class":171},[87,44028,32423],{"class":104},[87,44030,32413],{"class":97},[87,44032,44033,44035,44037,44039,44041,44043,44045],{"class":89,"line":2635},[87,44034,32929],{"class":492},[87,44036,946],{"class":171},[87,44038,32440],{"class":97},[87,44040,32443],{"class":492},[87,44042,946],{"class":171},[87,44044,36396],{"class":104},[87,44046,32451],{"class":97},[87,44048,44049,44051,44053,44055],{"class":89,"line":2649},[87,44050,32946],{"class":492},[87,44052,946],{"class":171},[87,44054,32423],{"class":104},[87,44056,1108],{"class":97},[87,44058,44059,44061,44063,44065,44067,44069,44071,44073,44075,44077,44079,44081,44083,44085,44087],{"class":89,"line":2654},[87,44060,32957],{"class":97},[87,44062,946],{"class":171},[87,44064,32962],{"class":97},[87,44066,32965],{"class":104},[87,44068,165],{"class":97},[87,44070,32970],{"class":104},[87,44072,1549],{"class":171},[87,44074,8308],{"class":104},[87,44076,32977],{"class":97},[87,44078,32965],{"class":104},[87,44080,165],{"class":97},[87,44082,32984],{"class":104},[87,44084,1549],{"class":171},[87,44086,8308],{"class":104},[87,44088,32991],{"class":97},[87,44090,44091,44093,44095,44097,44099,44101],{"class":89,"line":2683},[87,44092,32996],{"class":97},[87,44094,946],{"class":171},[87,44096,33001],{"class":97},[87,44098,32484],{"class":492},[87,44100,946],{"class":171},[87,44102,32489],{"class":97},[87,44104,44105,44107,44109,44111],{"class":89,"line":2688},[87,44106,33012],{"class":492},[87,44108,946],{"class":171},[87,44110,1293],{"class":104},[87,44112,32413],{"class":97},[87,44114,44115,44117,44119,44121],{"class":89,"line":2705},[87,44116,33024],{"class":492},[87,44118,946],{"class":171},[87,44120,32423],{"class":104},[87,44122,32413],{"class":97},[87,44124,44125],{"class":89,"line":2710},[87,44126,33035],{"class":199},[87,44128,44129,44131,44133,44135],{"class":89,"line":2715},[87,44130,33040],{"class":492},[87,44132,946],{"class":171},[87,44134,1490],{"class":104},[87,44136,1108],{"class":97},[87,44138,44139,44141,44143,44145,44147,44149],{"class":89,"line":2720},[87,44140,33051],{"class":97},[87,44142,946],{"class":171},[87,44144,32481],{"class":97},[87,44146,32484],{"class":492},[87,44148,946],{"class":171},[87,44150,33062],{"class":97},[87,44152,44153,44155,44157,44159],{"class":89,"line":2734},[87,44154,33067],{"class":492},[87,44156,946],{"class":171},[87,44158,1293],{"class":104},[87,44160,32413],{"class":97},[87,44162,44163,44165,44167,44169],{"class":89,"line":2739},[87,44164,33078],{"class":492},[87,44166,946],{"class":171},[87,44168,32423],{"class":104},[87,44170,32413],{"class":97},[87,44172,44173,44175,44177,44179],{"class":89,"line":3532},[87,44174,33089],{"class":492},[87,44176,946],{"class":171},[87,44178,1490],{"class":104},[87,44180,1108],{"class":97},[87,44182,44183,44185],{"class":89,"line":3546},[87,44184,5044],{"class":171},[87,44186,33102],{"class":97},[87,44188,44189],{"class":89,"line":3554},[87,44190,3355],{"emptyLinePlaceholder":1029},[87,44192,44193],{"class":89,"line":3559},[87,44194,33111],{"class":199},[87,44196,44197],{"class":89,"line":3565},[87,44198,33116],{"class":199},[87,44200,44201],{"class":89,"line":3571},[87,44202,3355],{"emptyLinePlaceholder":1029},[87,44204,44205],{"class":89,"line":3576},[87,44206,33125],{"class":199},[87,44208,44209,44211,44213],{"class":89,"line":8898},[87,44210,32894],{"class":171},[87,44212,33132],{"class":205},[87,44214,33135],{"class":97},[87,44216,44217,44219,44221,44223,44225,44227,44229,44231,44233],{"class":89,"line":8922},[87,44218,32184],{"class":97},[87,44220,946],{"class":171},[87,44222,31398],{"class":97},[87,44224,32191],{"class":949},[87,44226,2660],{"class":171},[87,44228,32196],{"class":97},[87,44230,2657],{"class":171},[87,44232,33154],{"class":949},[87,44234,1108],{"class":97},[87,44236,44237],{"class":89,"line":8927},[87,44238,3355],{"emptyLinePlaceholder":1029},[87,44240,44241],{"class":89,"line":8933},[87,44242,3355],{"emptyLinePlaceholder":1029},[87,44244,44245],{"class":89,"line":8960},[87,44246,33169],{"class":199},[87,44248,44249],{"class":89,"line":8965},[87,44250,33174],{"class":199},[87,44252,44253],{"class":89,"line":8971},[87,44254,33179],{"class":199},[87,44256,44257,44259,44261,44263,44265,44267,44269],{"class":89,"line":8983},[87,44258,33184],{"class":97},[87,44260,946],{"class":171},[87,44262,33189],{"class":97},[87,44264,33192],{"class":492},[87,44266,946],{"class":171},[87,44268,33197],{"class":104},[87,44270,1108],{"class":97},[87,44272,44273],{"class":89,"line":8995},[87,44274,3355],{"emptyLinePlaceholder":1029},[87,44276,44277],{"class":89,"line":9007},[87,44278,33208],{"class":199},[87,44280,44281,44283,44285],{"class":89,"line":10666},[87,44282,33213],{"class":97},[87,44284,946],{"class":171},[87,44286,33218],{"class":97},[87,44288,44289],{"class":89,"line":10691},[87,44290,3355],{"emptyLinePlaceholder":1029},[87,44292,44293],{"class":89,"line":10714},[87,44294,33227],{"class":199},[87,44296,44297,44299,44301],{"class":89,"line":10738},[87,44298,32236],{"class":97},[87,44300,946],{"class":171},[87,44302,33236],{"class":97},[87,44304,44305],{"class":89,"line":10743},[87,44306,33241],{"class":199},[87,44308,44309],{"class":89,"line":10748},[87,44310,33246],{"class":199},[87,44312,44313],{"class":89,"line":10753},[87,44314,33251],{"class":199},[87,44316,44317,44319,44321],{"class":89,"line":10762},[87,44318,33256],{"class":97},[87,44320,946],{"class":171},[87,44322,33261],{"class":97},[87,44324,44325],{"class":89,"line":10767},[87,44326,3355],{"emptyLinePlaceholder":1029},[87,44328,44329],{"class":89,"line":10773},[87,44330,3355],{"emptyLinePlaceholder":1029},[87,44332,44333],{"class":89,"line":10794},[87,44334,33274],{"class":199},[87,44336,44337],{"class":89,"line":10800},[87,44338,33279],{"class":199},[87,44340,44341,44343,44345],{"class":89,"line":10814},[87,44342,33284],{"class":97},[87,44344,946],{"class":171},[87,44346,33289],{"class":104},[87,44348,44349],{"class":89,"line":10820},[87,44350,33294],{"class":199},[87,44352,44353,44355,44357],{"class":89,"line":10847},[87,44354,33299],{"class":97},[87,44356,946],{"class":171},[87,44358,33304],{"class":97},[87,44360,44361],{"class":89,"line":10856},[87,44362,33309],{"class":199},[87,44364,44365,44367,44369],{"class":89,"line":10862},[87,44366,33314],{"class":97},[87,44368,946],{"class":171},[87,44370,33304],{"class":97},[87,44372,44373],{"class":89,"line":10870},[87,44374,33323],{"class":199},[87,44376,44377,44379,44381],{"class":89,"line":10875},[87,44378,33328],{"class":97},[87,44380,946],{"class":171},[87,44382,33304],{"class":97},[87,44384,44385],{"class":89,"line":17553},[87,44386,33337],{"class":199},[87,44388,44389,44391,44393],{"class":89,"line":17559},[87,44390,33342],{"class":97},[87,44392,946],{"class":171},[87,44394,33304],{"class":97},[87,44396,44397],{"class":89,"line":17582},[87,44398,3355],{"emptyLinePlaceholder":1029},[87,44400,44401],{"class":89,"line":17588},[87,44402,33355],{"class":199},[87,44404,44405,44407,44409],{"class":89,"line":17611},[87,44406,33360],{"class":97},[87,44408,946],{"class":171},[87,44410,33365],{"class":97},[87,44412,44413],{"class":89,"line":17625},[87,44414,3355],{"emptyLinePlaceholder":1029},[87,44416,44417],{"class":89,"line":17645},[87,44418,3355],{"emptyLinePlaceholder":1029},[87,44420,44421],{"class":89,"line":17651},[87,44422,33378],{"class":199},[87,44424,44425,44427,44429,44431,44433],{"class":89,"line":17662},[87,44426,4155],{"class":171},[87,44428,33385],{"class":97},[87,44430,26990],{"class":171},[87,44432,33390],{"class":104},[87,44434,33393],{"class":97},[87,44436,44437,44439,44441,44443,44445,44447,44449,44451,44453,44455,44457],{"class":89,"line":17685},[87,44438,33398],{"class":104},[87,44440,165],{"class":97},[87,44442,33403],{"class":949},[87,44444,33406],{"class":104},[87,44446,1677],{"class":949},[87,44448,33406],{"class":104},[87,44450,1347],{"class":949},[87,44452,33415],{"class":97},[87,44454,1625],{"class":171},[87,44456,1313],{"class":104},[87,44458,31444],{"class":97},[87,44460,44461,44463,44465,44467,44469,44471],{"class":89,"line":17707},[87,44462,33398],{"class":104},[87,44464,165],{"class":97},[87,44466,33430],{"class":949},[87,44468,1549],{"class":171},[87,44470,242],{"class":104},[87,44472,1108],{"class":97},[87,44474,44475],{"class":89,"line":17712},[87,44476,3355],{"emptyLinePlaceholder":1029},[87,44478,44479],{"class":89,"line":17718},[87,44480,33445],{"class":199},[87,44482,44483],{"class":89,"line":17732},[87,44484,33450],{"class":199},[87,44486,44487,44489,44491],{"class":89,"line":17745},[87,44488,33455],{"class":97},[87,44490,946],{"class":171},[87,44492,33289],{"class":104},[87,44494,44495],{"class":89,"line":17750},[87,44496,33464],{"class":199},[87,44498,44499,44501,44503],{"class":89,"line":17764},[87,44500,33469],{"class":97},[87,44502,946],{"class":171},[87,44504,4039],{"class":104},[87,44506,44507],{"class":89,"line":17769},[87,44508,33478],{"class":199},[87,44510,44511,44513,44515],{"class":89,"line":17775},[87,44512,33483],{"class":97},[87,44514,946],{"class":171},[87,44516,33289],{"class":104},[87,44518,44519],{"class":89,"line":17780},[87,44520,33492],{"class":199},[87,44522,44523,44525,44527],{"class":89,"line":17794},[87,44524,33497],{"class":97},[87,44526,946],{"class":171},[87,44528,4039],{"class":104},[87,44530,44531],{"class":89,"line":17799},[87,44532,33506],{"class":199},[87,44534,44535,44537,44539],{"class":89,"line":17804},[87,44536,33511],{"class":97},[87,44538,946],{"class":171},[87,44540,4039],{"class":104},[87,44542,44543],{"class":89,"line":17818},[87,44544,33520],{"class":199},[87,44546,44547,44549,44551],{"class":89,"line":17830},[87,44548,33525],{"class":97},[87,44550,946],{"class":171},[87,44552,4039],{"class":104},[87,44554,44555],{"class":89,"line":17835},[87,44556,33534],{"class":199},[87,44558,44559,44561,44563,44565,44567],{"class":89,"line":17848},[87,44560,4357],{"class":171},[87,44562,32548],{"class":97},[87,44564,26990],{"class":171},[87,44566,32553],{"class":104},[87,44568,33547],{"class":97},[87,44570,44571],{"class":89,"line":17853},[87,44572,33552],{"class":199},[87,44574,44575,44577,44579],{"class":89,"line":17858},[87,44576,33557],{"class":97},[87,44578,946],{"class":171},[87,44580,33562],{"class":97},[87,44582,44583],{"class":89,"line":17863},[87,44584,33567],{"class":199},[87,44586,44587,44589,44591],{"class":89,"line":17876},[87,44588,33572],{"class":97},[87,44590,946],{"class":171},[87,44592,33577],{"class":97},[87,44594,44595],{"class":89,"line":17881},[87,44596,33583],{"class":199},[87,44598,44599],{"class":89,"line":33580},[87,44600,33589],{"class":97},[87,44602,44603],{"class":89,"line":33586},[87,44604,33595],{"class":199},[87,44606,44607],{"class":89,"line":33592},[87,44608,33601],{"class":199},[87,44610,44611,44613,44615],{"class":89,"line":33598},[87,44612,33607],{"class":97},[87,44614,946],{"class":171},[87,44616,33612],{"class":97},[87,44618,44619],{"class":89,"line":33604},[87,44620,33618],{"class":199},[87,44622,44623,44625,44627,44629,44631,44633,44635],{"class":89,"line":33615},[87,44624,33624],{"class":97},[87,44626,946],{"class":171},[87,44628,33629],{"class":97},[87,44630,33632],{"class":492},[87,44632,946],{"class":171},[87,44634,1313],{"class":104},[87,44636,1108],{"class":97},[87,44638,44639],{"class":89,"line":33621},[87,44640,33644],{"class":199},[87,44642,44643,44645,44647],{"class":89,"line":33641},[87,44644,33650],{"class":97},[87,44646,946],{"class":171},[87,44648,33655],{"class":97},[87,44650,44651],{"class":89,"line":33647},[87,44652,33661],{"class":199},[87,44654,44655],{"class":89,"line":33658},[87,44656,33667],{"class":97},[87,44658,44659],{"class":89,"line":33664},[87,44660,33673],{"class":199},[87,44662,44663],{"class":89,"line":33670},[87,44664,33679],{"class":97},[87,44666,44667],{"class":89,"line":33676},[87,44668,33685],{"class":199},[87,44670,44671],{"class":89,"line":33682},[87,44672,33691],{"class":97},[87,44674,44675],{"class":89,"line":33688},[87,44676,33697],{"class":199},[87,44678,44679,44681,44683,44685,44687,44689,44691],{"class":89,"line":33694},[87,44680,33703],{"class":97},[87,44682,10427],{"class":171},[87,44684,33708],{"class":97},[87,44686,1549],{"class":171},[87,44688,33713],{"class":97},[87,44690,111],{"class":104},[87,44692,1108],{"class":97},[87,44694,44695],{"class":89,"line":33700},[87,44696,33723],{"class":199},[87,44698,44699,44701,44703,44705,44707],{"class":89,"line":33720},[87,44700,33729],{"class":97},[87,44702,10427],{"class":171},[87,44704,33734],{"class":97},[87,44706,3903],{"class":171},[87,44708,33739],{"class":97},[87,44710,44711],{"class":89,"line":33726},[87,44712,33745],{"class":199},[87,44714,44715,44717,44719,44721,44723],{"class":89,"line":33742},[87,44716,33751],{"class":97},[87,44718,10427],{"class":171},[87,44720,33713],{"class":97},[87,44722,111],{"class":104},[87,44724,1108],{"class":97},[87,44726,44727],{"class":89,"line":33748},[87,44728,33765],{"class":199},[87,44730,44731,44733,44735,44737,44739],{"class":89,"line":33762},[87,44732,4357],{"class":171},[87,44734,33773],{"class":97},[87,44736,26990],{"class":171},[87,44738,32553],{"class":104},[87,44740,33780],{"class":97},[87,44742,44743],{"class":89,"line":33768},[87,44744,33786],{"class":199},[87,44746,44747,44749,44751],{"class":89,"line":33783},[87,44748,33557],{"class":97},[87,44750,946],{"class":171},[87,44752,33562],{"class":97},[87,44754,44755],{"class":89,"line":33789},[87,44756,33801],{"class":199},[87,44758,44759,44761,44763],{"class":89,"line":33798},[87,44760,33572],{"class":97},[87,44762,946],{"class":171},[87,44764,33577],{"class":97},[87,44766,44767],{"class":89,"line":33804},[87,44768,33816],{"class":199},[87,44770,44771],{"class":89,"line":33813},[87,44772,33822],{"class":97},[87,44774,44775],{"class":89,"line":33819},[87,44776,37303],{"class":199},[87,44778,44779,44781],{"class":89,"line":33825},[87,44780,33828],{"class":171},[87,44782,33831],{"class":97},[87,44784,44785],{"class":89,"line":33834},[87,44786,33837],{"class":199},[87,44788,44789,44791,44793],{"class":89,"line":33840},[87,44790,37318],{"class":97},[87,44792,946],{"class":171},[87,44794,33612],{"class":97},[87,44796,44797],{"class":89,"line":33851},[87,44798,33854],{"class":199},[87,44800,44801,44803,44805,44807,44809,44811,44813],{"class":89,"line":33857},[87,44802,37331],{"class":97},[87,44804,946],{"class":171},[87,44806,33629],{"class":97},[87,44808,33632],{"class":492},[87,44810,946],{"class":171},[87,44812,1313],{"class":104},[87,44814,1108],{"class":97},[87,44816,44817],{"class":89,"line":33876},[87,44818,33879],{"class":199},[87,44820,44821,44823,44825],{"class":89,"line":33882},[87,44822,37352],{"class":97},[87,44824,946],{"class":171},[87,44826,33655],{"class":97},[87,44828,44829],{"class":89,"line":33893},[87,44830,33896],{"class":199},[87,44832,44833,44835,44837,44839,44841,44843,44845],{"class":89,"line":33899},[87,44834,37365],{"class":97},[87,44836,10427],{"class":171},[87,44838,37370],{"class":97},[87,44840,1549],{"class":171},[87,44842,33713],{"class":97},[87,44844,111],{"class":104},[87,44846,1108],{"class":97},[87,44848,44849,44851,44853,44855,44857],{"class":89,"line":33919},[87,44850,37383],{"class":97},[87,44852,10427],{"class":171},[87,44854,33734],{"class":97},[87,44856,3903],{"class":171},[87,44858,33739],{"class":97},[87,44860,44861],{"class":89,"line":33935},[87,44862,37396],{"class":199},[87,44864,44865,44867,44869,44871,44873],{"class":89,"line":33941},[87,44866,37401],{"class":97},[87,44868,10427],{"class":171},[87,44870,33713],{"class":97},[87,44872,111],{"class":104},[87,44874,1108],{"class":97},[87,44876,44877],{"class":89,"line":33955},[87,44878,33958],{"class":199},[87,44880,44881],{"class":89,"line":33961},[87,44882,33964],{"class":199},[87,44884,44885,44887,44889],{"class":89,"line":33967},[87,44886,33970],{"class":97},[87,44888,1677],{"class":171},[87,44890,33975],{"class":97},[87,44892,44893],{"class":89,"line":33978},[87,44894,33981],{"class":199},[87,44896,44897],{"class":89,"line":33984},[87,44898,33987],{"class":199},[87,44900,44901,44903,44905],{"class":89,"line":33990},[87,44902,33993],{"class":97},[87,44904,1677],{"class":171},[87,44906,33975],{"class":97},[87,44908,44909],{"class":89,"line":34000},[87,44910,34003],{"class":199},[87,44912,44913,44915,44917],{"class":89,"line":34006},[87,44914,34009],{"class":97},[87,44916,1677],{"class":171},[87,44918,34014],{"class":97},[87,44920,44921],{"class":89,"line":34017},[87,44922,34020],{"class":199},[87,44924,44925,44927,44929],{"class":89,"line":34023},[87,44926,34026],{"class":97},[87,44928,1677],{"class":171},[87,44930,34014],{"class":97},[87,44932,44933],{"class":89,"line":34033},[87,44934,3355],{"emptyLinePlaceholder":1029},[87,44936,44937],{"class":89,"line":34038},[87,44938,34041],{"class":199},[87,44940,44941,44943,44945,44947,44949,44951,44953,44955,44957,44959,44961,44963,44965,44967,44969,44971,44973,44975,44977,44979],{"class":89,"line":34044},[87,44942,33398],{"class":104},[87,44944,165],{"class":97},[87,44946,4546],{"class":949},[87,44948,33406],{"class":104},[87,44950,34055],{"class":949},[87,44952,1988],{"class":104},[87,44954,34060],{"class":171},[87,44956,2037],{"class":104},[87,44958,34065],{"class":949},[87,44960,1988],{"class":104},[87,44962,34060],{"class":171},[87,44964,2037],{"class":104},[87,44966,4546],{"class":949},[87,44968,34076],{"class":97},[87,44970,1625],{"class":171},[87,44972,1313],{"class":104},[87,44974,34083],{"class":97},[87,44976,1625],{"class":171},[87,44978,1313],{"class":104},[87,44980,34090],{"class":97},[87,44982,44983,44985,44987,44989,44991,44993,44995,44997,44999,45001,45003,45005,45007,45009,45011,45013,45015,45017,45019,45021],{"class":89,"line":34093},[87,44984,33398],{"class":104},[87,44986,165],{"class":97},[87,44988,4546],{"class":949},[87,44990,33406],{"class":104},[87,44992,34104],{"class":949},[87,44994,1988],{"class":104},[87,44996,34060],{"class":171},[87,44998,2037],{"class":104},[87,45000,34113],{"class":949},[87,45002,1988],{"class":104},[87,45004,34060],{"class":171},[87,45006,2037],{"class":104},[87,45008,4546],{"class":949},[87,45010,34124],{"class":97},[87,45012,1625],{"class":171},[87,45014,1313],{"class":104},[87,45016,34131],{"class":97},[87,45018,1625],{"class":171},[87,45020,1313],{"class":104},[87,45022,34090],{"class":97},[87,45024,45025],{"class":89,"line":34140},[87,45026,3355],{"emptyLinePlaceholder":1029},[87,45028,45029],{"class":89,"line":34145},[87,45030,34148],{"class":199},[87,45032,45033,45035,45037,45039,45041,45043,45045],{"class":89,"line":34151},[87,45034,3452],{"class":171},[87,45036,34156],{"class":97},[87,45038,1625],{"class":171},[87,45040,1313],{"class":104},[87,45042,2031],{"class":97},[87,45044,2051],{"class":171},[87,45046,34167],{"class":97},[87,45048,45049],{"class":89,"line":34170},[87,45050,34173],{"class":199},[87,45052,45053,45055,45057,45059,45061,45063,45065],{"class":89,"line":34176},[87,45054,34179],{"class":97},[87,45056,1141],{"class":104},[87,45058,946],{"class":171},[87,45060,34186],{"class":97},[87,45062,1625],{"class":171},[87,45064,1313],{"class":104},[87,45066,34193],{"class":97},[87,45068,45069],{"class":89,"line":34196},[87,45070,34199],{"class":199},[87,45072,45073],{"class":89,"line":34202},[87,45074,34205],{"class":199},[87,45076,45077,45079,45081],{"class":89,"line":34208},[87,45078,34211],{"class":97},[87,45080,946],{"class":171},[87,45082,33261],{"class":97},[87,45084,45085],{"class":89,"line":34218},[87,45086,3355],{"emptyLinePlaceholder":1029},[87,45088,45089],{"class":89,"line":34223},[87,45090,34226],{"class":199},[87,45092,45093,45095,45097,45099,45101],{"class":89,"line":34229},[87,45094,34232],{"class":97},[87,45096,946],{"class":171},[87,45098,34237],{"class":97},[87,45100,1625],{"class":171},[87,45102,34242],{"class":97},[87,45104,45105,45107,45109,45111,45113,45115,45117,45119,45121,45123,45125,45127,45129,45131,45133,45135,45137,45139],{"class":89,"line":34245},[87,45106,33398],{"class":104},[87,45108,165],{"class":97},[87,45110,34252],{"class":949},[87,45112,1988],{"class":104},[87,45114,34257],{"class":171},[87,45116,2037],{"class":104},[87,45118,1637],{"class":949},[87,45120,1988],{"class":104},[87,45122,34257],{"class":171},[87,45124,2037],{"class":104},[87,45126,34270],{"class":949},[87,45128,34273],{"class":97},[87,45130,34276],{"class":171},[87,45132,1999],{"class":104},[87,45134,34281],{"class":97},[87,45136,1423],{"class":171},[87,45138,1999],{"class":104},[87,45140,31444],{"class":97},[87,45142,45143],{"class":89,"line":34290},[87,45144,37680],{"class":199},[87,45146,45147],{"class":89,"line":34296},[87,45148,37685],{"class":199},[87,45150,45151,45153,45155],{"class":89,"line":34302},[87,45152,37690],{"class":97},[87,45154,34314],{"class":949},[87,45156,1108],{"class":97},[87,45158,45159],{"class":89,"line":34308},[87,45160,34334],{"class":199},[87,45162,45163,45165,45167,45169,45171,45173],{"class":89,"line":34319},[87,45164,34340],{"class":97},[87,45166,946],{"class":171},[87,45168,34345],{"class":97},[87,45170,34348],{"class":492},[87,45172,946],{"class":171},[87,45174,2503],{"class":97},[87,45176,45177,45179,45181,45183],{"class":89,"line":34325},[87,45178,34358],{"class":949},[87,45180,1951],{"class":97},[87,45182,34363],{"class":104},[87,45184,34366],{"class":97},[87,45186,45187,45189],{"class":89,"line":34331},[87,45188,34372],{"class":949},[87,45190,34375],{"class":97},[87,45192,45193,45195],{"class":89,"line":34337},[87,45194,34381],{"class":949},[87,45196,34384],{"class":97},[87,45198,45199,45201],{"class":89,"line":34355},[87,45200,34390],{"class":949},[87,45202,34393],{"class":97},[87,45204,45205,45207],{"class":89,"line":34369},[87,45206,34399],{"class":949},[87,45208,34402],{"class":97},[87,45210,45211],{"class":89,"line":34378},[87,45212,34408],{"class":97},[87,45214,45215],{"class":89,"line":34387},[87,45216,34414],{"class":199},[87,45218,45219,45221],{"class":89,"line":34396},[87,45220,5044],{"class":171},[87,45222,34422],{"class":97},[87,45224,45225],{"class":89,"line":34405},[87,45226,3355],{"emptyLinePlaceholder":1029},[87,45228,45229],{"class":89,"line":34411},[87,45230,34433],{"class":199},[87,45232,45233,45235,45237],{"class":89,"line":34417},[87,45234,32894],{"class":171},[87,45236,34441],{"class":205},[87,45238,34444],{"class":97},[87,45240,45241],{"class":89,"line":34425},[87,45242,34450],{"class":199},[87,45244,45245,45247,45249,45251,45253,45255,45257,45259],{"class":89,"line":34430},[87,45246,34456],{"class":97},[87,45248,32640],{"class":492},[87,45250,946],{"class":171},[87,45252,165],{"class":97},[87,45254,1592],{"class":104},[87,45256,1473],{"class":97},[87,45258,1389],{"class":104},[87,45260,31444],{"class":97},[87,45262,45263],{"class":89,"line":34436},[87,45264,34476],{"class":199},[87,45266,45267],{"class":89,"line":34447},[87,45268,34482],{"class":199},[87,45270,45271],{"class":89,"line":34453},[87,45272,34488],{"class":199},[87,45274,45275,45277,45279,45281,45283,45285,45287],{"class":89,"line":34473},[87,45276,32674],{"class":97},[87,45278,1313],{"class":104},[87,45280,1473],{"class":97},[87,45282,1176],{"class":104},[87,45284,1473],{"class":97},[87,45286,1313],{"class":104},[87,45288,1108],{"class":97},[87,45290,45291],{"class":89,"line":34479},[87,45292,34511],{"class":199},[87,45294,45295],{"class":89,"line":34485},[87,45296,34517],{"class":199},[87,45298,45299],{"class":89,"line":34491},[87,45300,34523],{"class":199},[87,45302,45303],{"class":89,"line":34508},[87,45304,34529],{"class":199},[87,45306,45307],{"class":89,"line":34514},[87,45308,34535],{"class":199},[87,45310,45311,45313,45315,45317,45319,45321,45323,45325,45327],{"class":89,"line":34520},[87,45312,34541],{"class":97},[87,45314,34544],{"class":949},[87,45316,34547],{"class":97},[87,45318,34550],{"class":949},[87,45320,1473],{"class":97},[87,45322,34555],{"class":492},[87,45324,946],{"class":171},[87,45326,34560],{"class":949},[87,45328,1108],{"class":97},[87,45330,45331,45333,45335,45337,45339,45341,45343,45345,45347],{"class":89,"line":34526},[87,45332,34541],{"class":97},[87,45334,34544],{"class":949},[87,45336,34572],{"class":97},[87,45338,34575],{"class":949},[87,45340,1473],{"class":97},[87,45342,34555],{"class":492},[87,45344,946],{"class":171},[87,45346,34584],{"class":949},[87,45348,1108],{"class":97},[87,45350,45351],{"class":89,"line":34532},[87,45352,34592],{"class":199},[87,45354,45355],{"class":89,"line":34538},[87,45356,34598],{"class":97},[87,45358,45359],{"class":89,"line":34565},[87,45360,34604],{"class":199},[87,45362,45363,45365,45367],{"class":89,"line":34589},[87,45364,34610],{"class":97},[87,45366,34613],{"class":949},[87,45368,1108],{"class":97},[87,45370,45371,45373,45375],{"class":89,"line":34595},[87,45372,34621],{"class":97},[87,45374,34624],{"class":949},[87,45376,1108],{"class":97},[87,45378,45379],{"class":89,"line":34601},[87,45380,34632],{"class":199},[87,45382,45383,45385,45387,45389,45391,45393,45395],{"class":89,"line":34607},[87,45384,32674],{"class":97},[87,45386,1313],{"class":104},[87,45388,1473],{"class":97},[87,45390,1176],{"class":104},[87,45392,1473],{"class":97},[87,45394,1176],{"class":104},[87,45396,1108],{"class":97},[87,45398,45399,45401,45403,45405,45407,45409,45411,45413,45415],{"class":89,"line":34618},[87,45400,34541],{"class":97},[87,45402,34544],{"class":949},[87,45404,34659],{"class":97},[87,45406,34550],{"class":949},[87,45408,1473],{"class":97},[87,45410,34555],{"class":492},[87,45412,946],{"class":171},[87,45414,34670],{"class":949},[87,45416,1108],{"class":97},[87,45418,45419,45421,45423,45425,45427,45429,45431,45433,45435],{"class":89,"line":34629},[87,45420,34541],{"class":97},[87,45422,34544],{"class":949},[87,45424,34682],{"class":97},[87,45426,34575],{"class":949},[87,45428,1473],{"class":97},[87,45430,34555],{"class":492},[87,45432,946],{"class":171},[87,45434,34693],{"class":949},[87,45436,1108],{"class":97},[87,45438,45439],{"class":89,"line":34635},[87,45440,34701],{"class":199},[87,45442,45443],{"class":89,"line":34652},[87,45444,34598],{"class":97},[87,45446,45447,45449,45451],{"class":89,"line":34675},[87,45448,34610],{"class":97},[87,45450,34544],{"class":949},[87,45452,1108],{"class":97},[87,45454,45455,45457,45459],{"class":89,"line":34698},[87,45456,34621],{"class":97},[87,45458,34723],{"class":949},[87,45460,1108],{"class":97},[87,45462,45463],{"class":89,"line":34704},[87,45464,34731],{"class":97},[87,45466,45467],{"class":89,"line":34709},[87,45468,3355],{"emptyLinePlaceholder":1029},[87,45470,45471],{"class":89,"line":34718},[87,45472,34742],{"class":199},[87,45474,45475,45477,45479,45481,45483],{"class":89,"line":34728},[87,45476,2488],{"class":171},[87,45478,32167],{"class":104},[87,45480,3903],{"class":171},[87,45482,32172],{"class":949},[87,45484,4693],{"class":97},[87,45486,45487],{"class":89,"line":34734},[87,45488,34761],{"class":199},[87,45490,45491,45494,45496],{"class":89,"line":34739},[87,45492,45493],{"class":97},"    GoogLeNet",[87,45495,946],{"class":171},[87,45497,45498],{"class":97},"GoogLeNet(Inception)\n",[87,45500,45501,45503,45505],{"class":89,"line":34745},[87,45502,34778],{"class":97},[87,45504,946],{"class":171},[87,45506,34783],{"class":97},[87,45508,45509,45511,45513,45516,45518,45520,45522],{"class":89,"line":34758},[87,45510,34340],{"class":97},[87,45512,946],{"class":171},[87,45514,45515],{"class":97},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[87,45517,34796],{"class":492},[87,45519,946],{"class":171},[87,45521,2042],{"class":104},[87,45523,1108],{"class":97},[87,45525,45526],{"class":89,"line":34764},[87,45527,34808],{"class":97},[1055,45529,45530],{"start":120},[29,45531,41521],{},[77,45533,45535],{"className":31325,"code":45534,"language":31327,"meta":82,"style":82},"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",[84,45536,45537,45543,45553,45563,45567,45577,45588,45592,45596,45600,45608,45624,45634,45650,45660,45674,45678,45688,45698,45708,45714,45718,45722,45730,45734,45750,45758,45762,45766,45774,45782,45786,45790,45794,45798,45804,45808,45818,45826,45834,45838,45842,45846,45854,45858,45874,45878,45882,45886,45898,45902,45914,45918,45922,45934,45938,45948,45952,45956,45968,45972,45980,45984,45988,45996,46000,46008,46012,46016,46020,46024,46028,46044,46052,46056,46060,46108,46114,46118,46128,46136,46144,46148,46152,46156,46160,46168,46172,46188,46192,46200,46208],{"__ignoreMap":82},[87,45538,45539,45541],{"class":89,"line":90},[87,45540,31339],{"class":171},[87,45542,31342],{"class":97},[87,45544,45545,45547,45549,45551],{"class":89,"line":101},[87,45546,31339],{"class":171},[87,45548,32362],{"class":97},[87,45550,32330],{"class":171},[87,45552,32367],{"class":97},[87,45554,45555,45557,45559,45561],{"class":89,"line":120},[87,45556,31684],{"class":171},[87,45558,32345],{"class":97},[87,45560,31339],{"class":171},[87,45562,32350],{"class":97},[87,45564,45565],{"class":89,"line":222},[87,45566,34869],{"class":199},[87,45568,45569,45571,45573,45575],{"class":89,"line":234},[87,45570,31684],{"class":171},[87,45572,32315],{"class":97},[87,45574,31339],{"class":171},[87,45576,32320],{"class":97},[87,45578,45579,45581,45583,45585],{"class":89,"line":256},[87,45580,31684],{"class":171},[87,45582,32861],{"class":97},[87,45584,31339],{"class":171},[87,45586,45587],{"class":97}," GoogLeNet,Inception\n",[87,45589,45590],{"class":89,"line":269},[87,45591,3355],{"emptyLinePlaceholder":1029},[87,45593,45594],{"class":89,"line":463},[87,45595,3355],{"emptyLinePlaceholder":1029},[87,45597,45598],{"class":89,"line":469},[87,45599,34898],{"class":199},[87,45601,45602,45604,45606],{"class":89,"line":2287},[87,45603,32894],{"class":171},[87,45605,34905],{"class":205},[87,45607,32900],{"class":97},[87,45609,45610,45612,45614,45616,45618,45620,45622],{"class":89,"line":2568},[87,45611,34912],{"class":97},[87,45613,946],{"class":171},[87,45615,32402],{"class":97},[87,45617,32405],{"class":492},[87,45619,946],{"class":171},[87,45621,32410],{"class":949},[87,45623,32413],{"class":97},[87,45625,45626,45628,45630,45632],{"class":89,"line":2573},[87,45627,34929],{"class":492},[87,45629,946],{"class":171},[87,45631,34934],{"class":104},[87,45633,32413],{"class":97},[87,45635,45636,45638,45640,45642,45644,45646,45648],{"class":89,"line":2579},[87,45637,34941],{"class":492},[87,45639,946],{"class":171},[87,45641,32440],{"class":97},[87,45643,32443],{"class":492},[87,45645,946],{"class":171},[87,45647,36396],{"class":104},[87,45649,32451],{"class":97},[87,45651,45652,45654,45656,45658],{"class":89,"line":2584},[87,45653,34958],{"class":492},[87,45655,946],{"class":171},[87,45657,32423],{"class":104},[87,45659,1108],{"class":97},[87,45661,45662,45664,45666,45668,45670,45672],{"class":89,"line":2598},[87,45663,34969],{"class":97},[87,45665,946],{"class":171},[87,45667,32481],{"class":97},[87,45669,32484],{"class":492},[87,45671,946],{"class":171},[87,45673,34980],{"class":97},[87,45675,45676],{"class":89,"line":2603},[87,45677,34985],{"class":199},[87,45679,45680,45682,45684,45686],{"class":89,"line":2609},[87,45681,34990],{"class":492},[87,45683,946],{"class":171},[87,45685,1313],{"class":104},[87,45687,32413],{"class":97},[87,45689,45690,45692,45694,45696],{"class":89,"line":2630},[87,45691,35001],{"class":492},[87,45693,946],{"class":171},[87,45695,32423],{"class":104},[87,45697,32413],{"class":97},[87,45699,45700,45702,45704,45706],{"class":89,"line":2635},[87,45701,35012],{"class":492},[87,45703,946],{"class":171},[87,45705,111],{"class":104},[87,45707,1108],{"class":97},[87,45709,45710,45712],{"class":89,"line":2649},[87,45711,5044],{"class":171},[87,45713,35025],{"class":97},[87,45715,45716],{"class":89,"line":2654},[87,45717,3355],{"emptyLinePlaceholder":1029},[87,45719,45720],{"class":89,"line":2683},[87,45721,35034],{"class":199},[87,45723,45724,45726,45728],{"class":89,"line":2688},[87,45725,32894],{"class":171},[87,45727,35041],{"class":205},[87,45729,35044],{"class":97},[87,45731,45732],{"class":89,"line":2705},[87,45733,35049],{"class":199},[87,45735,45736,45738,45740,45742,45744,45746,45748],{"class":89,"line":2710},[87,45737,32184],{"class":97},[87,45739,946],{"class":171},[87,45741,32191],{"class":949},[87,45743,2660],{"class":171},[87,45745,32196],{"class":97},[87,45747,2657],{"class":171},[87,45749,35066],{"class":949},[87,45751,45752,45754,45756],{"class":89,"line":2715},[87,45753,32236],{"class":97},[87,45755,946],{"class":171},[87,45757,33236],{"class":97},[87,45759,45760],{"class":89,"line":2720},[87,45761,3355],{"emptyLinePlaceholder":1029},[87,45763,45764],{"class":89,"line":2734},[87,45765,35083],{"class":199},[87,45767,45768,45770,45772],{"class":89,"line":2739},[87,45769,35088],{"class":97},[87,45771,946],{"class":171},[87,45773,33289],{"class":104},[87,45775,45776,45778,45780],{"class":89,"line":3532},[87,45777,35097],{"class":97},[87,45779,946],{"class":171},[87,45781,4039],{"class":104},[87,45783,45784],{"class":89,"line":3546},[87,45785,3355],{"emptyLinePlaceholder":1029},[87,45787,45788],{"class":89,"line":3554},[87,45789,35110],{"class":199},[87,45791,45792],{"class":89,"line":3559},[87,45793,35115],{"class":199},[87,45795,45796],{"class":89,"line":3565},[87,45797,35120],{"class":199},[87,45799,45800,45802],{"class":89,"line":3571},[87,45801,35125],{"class":171},[87,45803,33831],{"class":97},[87,45805,45806],{"class":89,"line":3576},[87,45807,35132],{"class":199},[87,45809,45810,45812,45814,45816],{"class":89,"line":8898},[87,45811,4357],{"class":171},[87,45813,35139],{"class":97},[87,45815,26990],{"class":171},[87,45817,35144],{"class":97},[87,45819,45820,45822,45824],{"class":89,"line":8922},[87,45821,35149],{"class":97},[87,45823,946],{"class":171},[87,45825,35154],{"class":97},[87,45827,45828,45830,45832],{"class":89,"line":8927},[87,45829,35159],{"class":97},[87,45831,946],{"class":171},[87,45833,35164],{"class":97},[87,45835,45836],{"class":89,"line":8933},[87,45837,35169],{"class":199},[87,45839,45840],{"class":89,"line":8960},[87,45841,33822],{"class":97},[87,45843,45844],{"class":89,"line":8965},[87,45845,35178],{"class":199},[87,45847,45848,45850,45852],{"class":89,"line":8971},[87,45849,33607],{"class":97},[87,45851,946],{"class":171},[87,45853,35187],{"class":97},[87,45855,45856],{"class":89,"line":8983},[87,45857,35192],{"class":199},[87,45859,45860,45862,45864,45866,45868,45870,45872],{"class":89,"line":8995},[87,45861,33624],{"class":97},[87,45863,946],{"class":171},[87,45865,33629],{"class":97},[87,45867,33632],{"class":492},[87,45869,946],{"class":171},[87,45871,1313],{"class":104},[87,45873,1108],{"class":97},[87,45875,45876],{"class":89,"line":9007},[87,45877,35213],{"class":199},[87,45879,45880],{"class":89,"line":10666},[87,45881,35218],{"class":199},[87,45883,45884],{"class":89,"line":10691},[87,45885,35223],{"class":199},[87,45887,45888,45890,45892,45894,45896],{"class":89,"line":10714},[87,45889,35228],{"class":97},[87,45891,10427],{"class":171},[87,45893,33734],{"class":97},[87,45895,3903],{"class":171},[87,45897,35237],{"class":97},[87,45899,45900],{"class":89,"line":10738},[87,45901,35242],{"class":199},[87,45903,45904,45906,45908,45910,45912],{"class":89,"line":10743},[87,45905,35247],{"class":97},[87,45907,10427],{"class":171},[87,45909,35252],{"class":97},[87,45911,111],{"class":104},[87,45913,1108],{"class":97},[87,45915,45916],{"class":89,"line":10748},[87,45917,3355],{"emptyLinePlaceholder":1029},[87,45919,45920],{"class":89,"line":10753},[87,45921,35265],{"class":199},[87,45923,45924,45926,45928,45930,45932],{"class":89,"line":10762},[87,45925,35270],{"class":97},[87,45927,946],{"class":171},[87,45929,35275],{"class":97},[87,45931,1677],{"class":171},[87,45933,35280],{"class":97},[87,45935,45936],{"class":89,"line":10767},[87,45937,35285],{"class":199},[87,45939,45940,45942,45944,45946],{"class":89,"line":10773},[87,45941,33398],{"class":104},[87,45943,165],{"class":97},[87,45945,35294],{"class":949},[87,45947,35297],{"class":97},[87,45949,45950],{"class":89,"line":10794},[87,45951,3355],{"emptyLinePlaceholder":1029},[87,45953,45954],{"class":89,"line":10800},[87,45955,35306],{"class":199},[87,45957,45958,45960,45962,45964,45966],{"class":89,"line":10814},[87,45959,2488],{"class":171},[87,45961,32167],{"class":104},[87,45963,3903],{"class":171},[87,45965,32172],{"class":949},[87,45967,4693],{"class":97},[87,45969,45970],{"class":89,"line":10820},[87,45971,35323],{"class":199},[87,45973,45974,45976,45978],{"class":89,"line":10847},[87,45975,32236],{"class":97},[87,45977,946],{"class":171},[87,45979,45498],{"class":97},[87,45981,45982],{"class":89,"line":10856},[87,45983,35336],{"class":199},[87,45985,45986],{"class":89,"line":10862},[87,45987,35341],{"class":199},[87,45989,45990,45992,45994],{"class":89,"line":10870},[87,45991,35346],{"class":97},[87,45993,35349],{"class":949},[87,45995,31444],{"class":97},[87,45997,45998],{"class":89,"line":10875},[87,45999,35356],{"class":199},[87,46001,46002,46004,46006],{"class":89,"line":17553},[87,46003,34969],{"class":97},[87,46005,946],{"class":171},[87,46007,35365],{"class":97},[87,46009,46010],{"class":89,"line":17559},[87,46011,35370],{"class":199},[87,46013,46014],{"class":89,"line":17582},[87,46015,35375],{"class":97},[87,46017,46018],{"class":89,"line":17588},[87,46019,3355],{"emptyLinePlaceholder":1029},[87,46021,46022],{"class":89,"line":17611},[87,46023,35384],{"class":199},[87,46025,46026],{"class":89,"line":17625},[87,46027,35389],{"class":199},[87,46029,46030,46032,46034,46036,46038,46040,46042],{"class":89,"line":17645},[87,46031,32184],{"class":97},[87,46033,946],{"class":171},[87,46035,32191],{"class":949},[87,46037,2660],{"class":171},[87,46039,32196],{"class":97},[87,46041,2657],{"class":171},[87,46043,35066],{"class":949},[87,46045,46046,46048,46050],{"class":89,"line":17651},[87,46047,32236],{"class":97},[87,46049,946],{"class":171},[87,46051,33236],{"class":97},[87,46053,46054],{"class":89,"line":17662},[87,46055,35418],{"class":199},[87,46057,46058],{"class":89,"line":17685},[87,46059,35423],{"class":199},[87,46061,46062,46064,46066,46068,46070,46072,46074,46076,46078,46080,46082,46084,46086,46088,46090,46092,46094,46096,46098,46100,46102,46104,46106],{"class":89,"line":17707},[87,46063,35428],{"class":97},[87,46065,946],{"class":171},[87,46067,1982],{"class":97},[87,46069,35435],{"class":949},[87,46071,1473],{"class":97},[87,46073,35440],{"class":949},[87,46075,1473],{"class":97},[87,46077,35445],{"class":949},[87,46079,1473],{"class":97},[87,46081,35450],{"class":949},[87,46083,1473],{"class":97},[87,46085,35455],{"class":949},[87,46087,1473],{"class":97},[87,46089,35460],{"class":949},[87,46091,1473],{"class":97},[87,46093,35465],{"class":949},[87,46095,1473],{"class":97},[87,46097,35470],{"class":949},[87,46099,1473],{"class":97},[87,46101,35475],{"class":949},[87,46103,1473],{"class":97},[87,46105,35480],{"class":949},[87,46107,34193],{"class":97},[87,46109,46110,46112],{"class":89,"line":17712},[87,46111,35125],{"class":171},[87,46113,33831],{"class":97},[87,46115,46116],{"class":89,"line":17718},[87,46117,35493],{"class":199},[87,46119,46120,46122,46124,46126],{"class":89,"line":17732},[87,46121,4357],{"class":171},[87,46123,35500],{"class":97},[87,46125,26990],{"class":171},[87,46127,35144],{"class":97},[87,46129,46130,46132,46134],{"class":89,"line":17745},[87,46131,33557],{"class":97},[87,46133,946],{"class":171},[87,46135,33562],{"class":97},[87,46137,46138,46140,46142],{"class":89,"line":17750},[87,46139,33572],{"class":97},[87,46141,946],{"class":171},[87,46143,33577],{"class":97},[87,46145,46146],{"class":89,"line":17764},[87,46147,3355],{"emptyLinePlaceholder":1029},[87,46149,46150],{"class":89,"line":17769},[87,46151,35529],{"class":199},[87,46153,46154],{"class":89,"line":17775},[87,46155,33822],{"class":97},[87,46157,46158],{"class":89,"line":17780},[87,46159,35538],{"class":199},[87,46161,46162,46164,46166],{"class":89,"line":17794},[87,46163,33607],{"class":97},[87,46165,946],{"class":171},[87,46167,33612],{"class":97},[87,46169,46170],{"class":89,"line":17799},[87,46171,35551],{"class":199},[87,46173,46174,46176,46178,46180,46182,46184,46186],{"class":89,"line":17804},[87,46175,33624],{"class":97},[87,46177,946],{"class":171},[87,46179,33629],{"class":97},[87,46181,33632],{"class":492},[87,46183,946],{"class":171},[87,46185,1313],{"class":104},[87,46187,1108],{"class":97},[87,46189,46190],{"class":89,"line":17818},[87,46191,35572],{"class":199},[87,46193,46194,46196,46198],{"class":89,"line":17830},[87,46195,35577],{"class":97},[87,46197,946],{"class":171},[87,46199,35582],{"class":97},[87,46201,46202,46204,46206],{"class":89,"line":17835},[87,46203,35587],{"class":97},[87,46205,946],{"class":171},[87,46207,35592],{"class":97},[87,46209,46210,46212,46214,46216,46218,46220,46222,46224],{"class":89,"line":17848},[87,46211,35597],{"class":104},[87,46213,165],{"class":97},[87,46215,35602],{"class":949},[87,46217,35605],{"class":97},[87,46219,35608],{"class":949},[87,46221,1473],{"class":97},[87,46223,35613],{"class":949},[87,46225,35616],{"class":97},[44,46227,46229],{"id":46228},"_24训练自己的数据集","2.4.训练自己的数据集",[19,46231,46232],{},"猫狗分类任务",[19,46234,46235],{},"划分数据集和验证集",[77,46237,46239],{"className":31325,"code":46238,"language":31327,"meta":82,"style":82},"# 创建脚本，用于划分数据集和验证集\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",[84,46240,46241,46246,46253,46258,46269,46276,46280,46290,46304,46313,46317,46322,46332,46352,46356,46361,46371,46382,46395,46399,46404,46413,46423,46434,46438,46443,46453,46457,46462,46467,46472,46477,46482,46486,46496,46523,46536,46548,46575,46580,46585,46599,46604,46616,46631,46646,46654,46658,46663,46669,46681,46694,46699,46704,46709,46759,46765,46769],{"__ignoreMap":82},[87,46242,46243],{"class":89,"line":90},[87,46244,46245],{"class":199},"# 创建脚本，用于划分数据集和验证集\n",[87,46247,46248,46250],{"class":89,"line":101},[87,46249,31339],{"class":171},[87,46251,46252],{"class":97}," os\n",[87,46254,46255],{"class":89,"line":120},[87,46256,46257],{"class":199},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[87,46259,46260,46262,46265,46267],{"class":89,"line":222},[87,46261,31684],{"class":171},[87,46263,46264],{"class":97}," shutil ",[87,46266,31339],{"class":171},[87,46268,32769],{"class":97},[87,46270,46271,46273],{"class":89,"line":234},[87,46272,31339],{"class":171},[87,46274,46275],{"class":97}," random\n",[87,46277,46278],{"class":89,"line":256},[87,46279,3355],{"emptyLinePlaceholder":1029},[87,46281,46282,46284,46287],{"class":89,"line":269},[87,46283,32894],{"class":171},[87,46285,46286],{"class":205}," mkfile",[87,46288,46289],{"class":97},"(file):\n",[87,46291,46292,46294,46296,46299,46302],{"class":89,"line":463},[87,46293,4055],{"class":171},[87,46295,39877],{"class":171},[87,46297,46298],{"class":97}," os.path.exists(",[87,46300,46301],{"class":492},"file",[87,46303,31733],{"class":97},[87,46305,46306,46309,46311],{"class":89,"line":469},[87,46307,46308],{"class":97},"        os.makedirs(",[87,46310,46301],{"class":492},[87,46312,1108],{"class":97},[87,46314,46315],{"class":89,"line":2287},[87,46316,3355],{"emptyLinePlaceholder":1029},[87,46318,46319],{"class":89,"line":2568},[87,46320,46321],{"class":199},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[87,46323,46324,46327,46329],{"class":89,"line":2573},[87,46325,46326],{"class":97},"file_path",[87,46328,946],{"class":171},[87,46330,46331],{"class":949},"'data_cat_dog'\n",[87,46333,46334,46337,46339,46342,46344,46347,46349],{"class":89,"line":2579},[87,46335,46336],{"class":97},"flower_class",[87,46338,946],{"class":171},[87,46340,46341],{"class":97},"[cla ",[87,46343,3979],{"class":171},[87,46345,46346],{"class":97}," cla ",[87,46348,26990],{"class":171},[87,46350,46351],{"class":97}," os.listdir(file_path)]\n",[87,46353,46354],{"class":89,"line":2584},[87,46355,3355],{"emptyLinePlaceholder":1029},[87,46357,46358],{"class":89,"line":2598},[87,46359,46360],{"class":199},"# 创建训练集train文件夹\n",[87,46362,46363,46366,46369],{"class":89,"line":2603},[87,46364,46365],{"class":97},"mkfile(",[87,46367,46368],{"class":949},"'data\u002Ftrain'",[87,46370,1108],{"class":97},[87,46372,46373,46375,46377,46379],{"class":89,"line":2609},[87,46374,3979],{"class":171},[87,46376,46346],{"class":97},[87,46378,26990],{"class":171},[87,46380,46381],{"class":97}," flower_class:\n",[87,46383,46384,46387,46390,46392],{"class":89,"line":2630},[87,46385,46386],{"class":97},"    mkfile(",[87,46388,46389],{"class":949},"'data\u002Ftrain\u002F'",[87,46391,1575],{"class":171},[87,46393,46394],{"class":97},"cla)\n",[87,46396,46397],{"class":89,"line":2635},[87,46398,3355],{"emptyLinePlaceholder":1029},[87,46400,46401],{"class":89,"line":2649},[87,46402,46403],{"class":199},"# 创建验证集val文件夹\n",[87,46405,46406,46408,46411],{"class":89,"line":2654},[87,46407,46365],{"class":97},[87,46409,46410],{"class":949},"'data\u002Ftest'",[87,46412,1108],{"class":97},[87,46414,46415,46417,46419,46421],{"class":89,"line":2683},[87,46416,3979],{"class":171},[87,46418,46346],{"class":97},[87,46420,26990],{"class":171},[87,46422,46381],{"class":97},[87,46424,46425,46427,46430,46432],{"class":89,"line":2688},[87,46426,46386],{"class":97},[87,46428,46429],{"class":949},"'data\u002Ftest\u002F'",[87,46431,1575],{"class":171},[87,46433,46394],{"class":97},[87,46435,46436],{"class":89,"line":2705},[87,46437,3355],{"emptyLinePlaceholder":1029},[87,46439,46440],{"class":89,"line":2710},[87,46441,46442],{"class":199},"# 划分比例，训练集：测试集=9：1\n",[87,46444,46445,46448,46450],{"class":89,"line":2715},[87,46446,46447],{"class":97},"split_rate",[87,46449,946],{"class":171},[87,46451,46452],{"class":104},"0.1\n",[87,46454,46455],{"class":89,"line":2720},[87,46456,3355],{"emptyLinePlaceholder":1029},[87,46458,46459],{"class":89,"line":2734},[87,46460,46461],{"class":199},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[87,46463,46464],{"class":89,"line":2739},[87,46465,46466],{"class":199},"# cla_path：当前类别的原始图片路径\n",[87,46468,46469],{"class":89,"line":3532},[87,46470,46471],{"class":199},"# images：当前类别下所有图片的文件名列表\n",[87,46473,46474],{"class":89,"line":3546},[87,46475,46476],{"class":199},"# num：该类别图片总数\n",[87,46478,46479],{"class":89,"line":3554},[87,46480,46481],{"class":199},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[87,46483,46484],{"class":89,"line":3559},[87,46485,3355],{"emptyLinePlaceholder":1029},[87,46487,46488,46490,46492,46494],{"class":89,"line":3565},[87,46489,3979],{"class":171},[87,46491,46346],{"class":97},[87,46493,26990],{"class":171},[87,46495,46381],{"class":97},[87,46497,46498,46501,46503,46506,46508,46511,46514,46516,46518,46520],{"class":89,"line":3571},[87,46499,46500],{"class":97},"    cla_path ",[87,46502,946],{"class":171},[87,46504,46505],{"class":97}," file_path ",[87,46507,1575],{"class":171},[87,46509,46510],{"class":949}," '\u002F'",[87,46512,46513],{"class":171}," +",[87,46515,46346],{"class":97},[87,46517,1575],{"class":171},[87,46519,46510],{"class":949},[87,46521,46522],{"class":199},"  # 某一类别的子目录\n",[87,46524,46525,46528,46530,46533],{"class":89,"line":3576},[87,46526,46527],{"class":97},"    images ",[87,46529,946],{"class":171},[87,46531,46532],{"class":97}," os.listdir(cla_path)  ",[87,46534,46535],{"class":199},"# iamges 列表存储了该目录下所有图像的名称\n",[87,46537,46538,46541,46543,46545],{"class":89,"line":8898},[87,46539,46540],{"class":97},"    num ",[87,46542,946],{"class":171},[87,46544,8281],{"class":104},[87,46546,46547],{"class":97},"(images)\n",[87,46549,46550,46553,46555,46558,46560,46562,46564,46567,46569,46572],{"class":89,"line":8922},[87,46551,46552],{"class":97},"    eval_index ",[87,46554,946],{"class":171},[87,46556,46557],{"class":97}," random.sample(images, ",[87,46559,1587],{"class":492},[87,46561,946],{"class":171},[87,46563,1105],{"class":104},[87,46565,46566],{"class":97},"(num ",[87,46568,1549],{"class":171},[87,46570,46571],{"class":97}," split_rate))  ",[87,46573,46574],{"class":199},"# 从images列表中随机抽取 k 个图像名称\n",[87,46576,46577],{"class":89,"line":8927},[87,46578,46579],{"class":199},"    # 遍历该类别下的所有图片\n",[87,46581,46582],{"class":89,"line":8933},[87,46583,46584],{"class":199},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[87,46586,46587,46589,46592,46594,46596],{"class":89,"line":8960},[87,46588,4155],{"class":171},[87,46590,46591],{"class":97}," index, image ",[87,46593,26990],{"class":171},[87,46595,32553],{"class":104},[87,46597,46598],{"class":97},"(images):\n",[87,46600,46601],{"class":89,"line":8965},[87,46602,46603],{"class":199},"        # eval_index 中保存验证集val的图像名称\n",[87,46605,46606,46608,46611,46613],{"class":89,"line":8971},[87,46607,3452],{"class":171},[87,46609,46610],{"class":97}," image ",[87,46612,26990],{"class":171},[87,46614,46615],{"class":97}," eval_index:\n",[87,46617,46618,46621,46623,46626,46628],{"class":89,"line":8983},[87,46619,46620],{"class":97},"            image_path ",[87,46622,946],{"class":171},[87,46624,46625],{"class":97}," cla_path ",[87,46627,1575],{"class":171},[87,46629,46630],{"class":97}," image\n",[87,46632,46633,46636,46638,46641,46643],{"class":89,"line":8995},[87,46634,46635],{"class":97},"            new_path ",[87,46637,946],{"class":171},[87,46639,46640],{"class":949}," 'data\u002Ftest\u002F'",[87,46642,46513],{"class":171},[87,46644,46645],{"class":97}," cla\n",[87,46647,46648,46651],{"class":89,"line":9007},[87,46649,46650],{"class":97},"            copy(image_path, new_path)  ",[87,46652,46653],{"class":199},"# 将选中的图像复制到新路径\n",[87,46655,46656],{"class":89,"line":10666},[87,46657,3355],{"emptyLinePlaceholder":1029},[87,46659,46660],{"class":89,"line":10691},[87,46661,46662],{"class":199},"        # 其余的图像保存在训练集train中\n",[87,46664,46665,46667],{"class":89,"line":10714},[87,46666,3489],{"class":171},[87,46668,4693],{"class":97},[87,46670,46671,46673,46675,46677,46679],{"class":89,"line":10738},[87,46672,46620],{"class":97},[87,46674,946],{"class":171},[87,46676,46625],{"class":97},[87,46678,1575],{"class":171},[87,46680,46630],{"class":97},[87,46682,46683,46685,46687,46690,46692],{"class":89,"line":10743},[87,46684,46635],{"class":97},[87,46686,946],{"class":171},[87,46688,46689],{"class":949}," 'data\u002Ftrain\u002F'",[87,46691,46513],{"class":171},[87,46693,46645],{"class":97},[87,46695,46696],{"class":89,"line":10748},[87,46697,46698],{"class":97},"            copy(image_path, new_path)\n",[87,46700,46701],{"class":89,"line":10753},[87,46702,46703],{"class":199},"            # 打印进度条信息\n",[87,46705,46706],{"class":89,"line":10762},[87,46707,46708],{"class":199},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[87,46710,46711,46713,46715,46717,46720,46722,46724,46727,46729,46731,46733,46736,46739,46741,46743,46746,46749,46751,46753,46756],{"class":89,"line":10767},[87,46712,33398],{"class":104},[87,46714,165],{"class":97},[87,46716,1347],{"class":949},[87,46718,46719],{"class":104},"\\r",[87,46721,1982],{"class":949},[87,46723,33406],{"class":104},[87,46725,46726],{"class":949},"] processing [",[87,46728,33406],{"class":104},[87,46730,1677],{"class":949},[87,46732,33406],{"class":104},[87,46734,46735],{"class":949},"]\"",[87,46737,46738],{"class":97},".format(cla, index ",[87,46740,1575],{"class":171},[87,46742,568],{"class":104},[87,46744,46745],{"class":97},", num), ",[87,46747,46748],{"class":492},"end",[87,46750,946],{"class":171},[87,46752,8602],{"class":949},[87,46754,46755],{"class":97},")  ",[87,46757,46758],{"class":199},"# processing bar\n",[87,46760,46761,46763],{"class":89,"line":10773},[87,46762,32246],{"class":104},[87,46764,2931],{"class":97},[87,46766,46767],{"class":89,"line":10794},[87,46768,3355],{"emptyLinePlaceholder":1029},[87,46770,46771,46773,46775,46778],{"class":89,"line":10800},[87,46772,31362],{"class":104},[87,46774,165],{"class":97},[87,46776,46777],{"class":949},"\"processing done!\"",[87,46779,1108],{"class":97},[19,46781,46782],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[49,46784,46786],{"id":46785},"_242模型代码","2.4.2.模型代码",[19,46788,46789],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[77,46791,46793],{"className":31325,"code":46792,"language":31327,"meta":82,"style":82},"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",[84,46794,46795,46801,46811,46821,46825,46841,46849,46863,46873,46877,46907,46911,46945,46991,46995,47029,47075,47079,47083,47117,47147,47151,47159,47173,47195,47217,47235,47239,47253,47257,47261,47277,47281,47289,47303,47313,47357,47361,47389,47393,47403,47431,47435,47471,47475,47503,47507,47517,47549,47581,47609,47613,47623,47655,47687,47719,47751,47783,47811,47815,47825,47857,47889,47901,47905,47917,47921,47925,47937,47945,47965,47969,47973,47977,47981,47985,47989,48003,48011,48019,48031,48045,48053,48057,48065,48075,48085,48095,48105,48115,48121,48125,48129,48141,48161,48169],{"__ignoreMap":82},[87,46796,46797,46799],{"class":89,"line":90},[87,46798,31339],{"class":171},[87,46800,31342],{"class":97},[87,46802,46803,46805,46807,46809],{"class":89,"line":101},[87,46804,31684],{"class":171},[87,46806,31687],{"class":97},[87,46808,31339],{"class":171},[87,46810,31692],{"class":97},[87,46812,46813,46815,46817,46819],{"class":89,"line":120},[87,46814,31684],{"class":171},[87,46816,31704],{"class":97},[87,46818,31339],{"class":171},[87,46820,31709],{"class":97},[87,46822,46823],{"class":89,"line":222},[87,46824,3355],{"emptyLinePlaceholder":1029},[87,46826,46827,46829,46831,46833,46835,46837,46839],{"class":89,"line":234},[87,46828,15644],{"class":171},[87,46830,42440],{"class":205},[87,46832,165],{"class":97},[87,46834,31725],{"class":205},[87,46836,1651],{"class":97},[87,46838,31730],{"class":205},[87,46840,31733],{"class":97},[87,46842,46843,46845,46847],{"class":89,"line":256},[87,46844,31748],{"class":171},[87,46846,31751],{"class":104},[87,46848,42459],{"class":97},[87,46850,46851,46853,46855,46857,46859,46861],{"class":89,"line":269},[87,46852,31764],{"class":104},[87,46854,42466],{"class":97},[87,46856,31770],{"class":104},[87,46858,31773],{"class":97},[87,46860,31776],{"class":104},[87,46862,2931],{"class":97},[87,46864,46865,46867,46869,46871],{"class":89,"line":463},[87,46866,31792],{"class":104},[87,46868,35718],{"class":97},[87,46870,946],{"class":171},[87,46872,35723],{"class":97},[87,46874,46875],{"class":89,"line":469},[87,46876,42489],{"class":199},[87,46878,46879,46881,46883,46885,46887,46889,46891,46893,46895,46897,46899,46901,46903,46905],{"class":89,"line":2287},[87,46880,31792],{"class":104},[87,46882,42496],{"class":97},[87,46884,946],{"class":171},[87,46886,31800],{"class":97},[87,46888,31803],{"class":492},[87,46890,946],{"class":171},[87,46892,42507],{"class":97},[87,46894,31812],{"class":492},[87,46896,946],{"class":171},[87,46898,42514],{"class":97},[87,46900,31821],{"class":492},[87,46902,946],{"class":171},[87,46904,1313],{"class":104},[87,46906,1108],{"class":97},[87,46908,46909],{"class":89,"line":2568},[87,46910,42527],{"class":199},[87,46912,46913,46915,46917,46919,46921,46923,46925,46927,46929,46931,46933,46935,46937,46939,46941,46943],{"class":89,"line":2573},[87,46914,31792],{"class":104},[87,46916,42534],{"class":97},[87,46918,946],{"class":171},[87,46920,31800],{"class":97},[87,46922,31803],{"class":492},[87,46924,946],{"class":171},[87,46926,42507],{"class":97},[87,46928,31812],{"class":492},[87,46930,946],{"class":171},[87,46932,42551],{"class":97},[87,46934,111],{"class":104},[87,46936,42556],{"class":97},[87,46938,31821],{"class":492},[87,46940,946],{"class":171},[87,46942,1313],{"class":104},[87,46944,1108],{"class":97},[87,46946,46947,46949,46951,46953,46955,46957,46959,46961,46963,46965,46967,46969,46971,46973,46975,46977,46979,46981,46983,46985,46987,46989],{"class":89,"line":2579},[87,46948,31792],{"class":104},[87,46950,42571],{"class":97},[87,46952,946],{"class":171},[87,46954,31800],{"class":97},[87,46956,31803],{"class":492},[87,46958,946],{"class":171},[87,46960,42551],{"class":97},[87,46962,111],{"class":104},[87,46964,42556],{"class":97},[87,46966,31812],{"class":492},[87,46968,946],{"class":171},[87,46970,42551],{"class":97},[87,46972,1313],{"class":104},[87,46974,42556],{"class":97},[87,46976,31821],{"class":492},[87,46978,946],{"class":171},[87,46980,1170],{"class":104},[87,46982,1473],{"class":97},[87,46984,31830],{"class":492},[87,46986,946],{"class":171},[87,46988,1313],{"class":104},[87,46990,1108],{"class":97},[87,46992,46993],{"class":89,"line":2584},[87,46994,42616],{"class":199},[87,46996,46997,46999,47001,47003,47005,47007,47009,47011,47013,47015,47017,47019,47021,47023,47025,47027],{"class":89,"line":2598},[87,46998,31792],{"class":104},[87,47000,42623],{"class":97},[87,47002,946],{"class":171},[87,47004,31800],{"class":97},[87,47006,31803],{"class":492},[87,47008,946],{"class":171},[87,47010,42507],{"class":97},[87,47012,31812],{"class":492},[87,47014,946],{"class":171},[87,47016,42640],{"class":97},[87,47018,111],{"class":104},[87,47020,42556],{"class":97},[87,47022,31821],{"class":492},[87,47024,946],{"class":171},[87,47026,1313],{"class":104},[87,47028,1108],{"class":97},[87,47030,47031,47033,47035,47037,47039,47041,47043,47045,47047,47049,47051,47053,47055,47057,47059,47061,47063,47065,47067,47069,47071,47073],{"class":89,"line":2603},[87,47032,31792],{"class":104},[87,47034,42659],{"class":97},[87,47036,946],{"class":171},[87,47038,31800],{"class":97},[87,47040,31803],{"class":492},[87,47042,946],{"class":171},[87,47044,42640],{"class":97},[87,47046,111],{"class":104},[87,47048,42556],{"class":97},[87,47050,31812],{"class":492},[87,47052,946],{"class":171},[87,47054,42640],{"class":97},[87,47056,1313],{"class":104},[87,47058,42556],{"class":97},[87,47060,31821],{"class":492},[87,47062,946],{"class":171},[87,47064,1414],{"class":104},[87,47066,1473],{"class":97},[87,47068,31830],{"class":492},[87,47070,946],{"class":171},[87,47072,1176],{"class":104},[87,47074,1108],{"class":97},[87,47076,47077],{"class":89,"line":2609},[87,47078,42704],{"class":199},[87,47080,47081],{"class":89,"line":2630},[87,47082,42709],{"class":199},[87,47084,47085,47087,47089,47091,47093,47095,47097,47099,47101,47103,47105,47107,47109,47111,47113,47115],{"class":89,"line":2635},[87,47086,31792],{"class":104},[87,47088,42716],{"class":97},[87,47090,946],{"class":171},[87,47092,35776],{"class":97},[87,47094,31821],{"class":492},[87,47096,946],{"class":171},[87,47098,1170],{"class":104},[87,47100,1473],{"class":97},[87,47102,31876],{"class":492},[87,47104,946],{"class":171},[87,47106,1313],{"class":104},[87,47108,1473],{"class":97},[87,47110,31830],{"class":492},[87,47112,946],{"class":171},[87,47114,1313],{"class":104},[87,47116,1108],{"class":97},[87,47118,47119,47121,47123,47125,47127,47129,47131,47133,47135,47137,47139,47141,47143,47145],{"class":89,"line":2649},[87,47120,31792],{"class":104},[87,47122,42751],{"class":97},[87,47124,946],{"class":171},[87,47126,31800],{"class":97},[87,47128,31803],{"class":492},[87,47130,946],{"class":171},[87,47132,42507],{"class":97},[87,47134,31812],{"class":492},[87,47136,946],{"class":171},[87,47138,42768],{"class":97},[87,47140,31821],{"class":492},[87,47142,946],{"class":171},[87,47144,1313],{"class":104},[87,47146,1108],{"class":97},[87,47148,47149],{"class":89,"line":2654},[87,47150,3355],{"emptyLinePlaceholder":1029},[87,47152,47153,47155,47157],{"class":89,"line":2683},[87,47154,31748],{"class":171},[87,47156,32040],{"class":205},[87,47158,32043],{"class":97},[87,47160,47161,47163,47165,47167,47169,47171],{"class":89,"line":2688},[87,47162,42793],{"class":97},[87,47164,946],{"class":171},[87,47166,31770],{"class":104},[87,47168,36131],{"class":97},[87,47170,31770],{"class":104},[87,47172,42804],{"class":97},[87,47174,47175,47177,47179,47181,47183,47185,47187,47189,47191,47193],{"class":89,"line":2705},[87,47176,8035],{"class":97},[87,47178,946],{"class":171},[87,47180,31770],{"class":104},[87,47182,36131],{"class":97},[87,47184,31770],{"class":104},[87,47186,42819],{"class":97},[87,47188,31770],{"class":104},[87,47190,36131],{"class":97},[87,47192,31770],{"class":104},[87,47194,42828],{"class":97},[87,47196,47197,47199,47201,47203,47205,47207,47209,47211,47213,47215],{"class":89,"line":2710},[87,47198,42833],{"class":97},[87,47200,946],{"class":171},[87,47202,31770],{"class":104},[87,47204,36131],{"class":97},[87,47206,31770],{"class":104},[87,47208,42844],{"class":97},[87,47210,31770],{"class":104},[87,47212,36131],{"class":97},[87,47214,31770],{"class":104},[87,47216,42853],{"class":97},[87,47218,47219,47221,47223,47225,47227,47229,47231,47233],{"class":89,"line":2715},[87,47220,42858],{"class":97},[87,47222,946],{"class":171},[87,47224,31770],{"class":104},[87,47226,36131],{"class":97},[87,47228,31770],{"class":104},[87,47230,42869],{"class":97},[87,47232,31770],{"class":104},[87,47234,42874],{"class":97},[87,47236,47237],{"class":89,"line":2720},[87,47238,42879],{"class":199},[87,47240,47241,47243,47245,47247,47249,47251],{"class":89,"line":2734},[87,47242,15702],{"class":171},[87,47244,42886],{"class":97},[87,47246,33632],{"class":492},[87,47248,946],{"class":171},[87,47250,1313],{"class":104},[87,47252,1108],{"class":97},[87,47254,47255],{"class":89,"line":2739},[87,47256,3355],{"emptyLinePlaceholder":1029},[87,47258,47259],{"class":89,"line":3532},[87,47260,42907],{"class":199},[87,47262,47263,47265,47267,47269,47271,47273,47275],{"class":89,"line":3546},[87,47264,15644],{"class":171},[87,47266,42914],{"class":205},[87,47268,165],{"class":97},[87,47270,31725],{"class":205},[87,47272,1651],{"class":97},[87,47274,31730],{"class":205},[87,47276,31733],{"class":97},[87,47278,47279],{"class":89,"line":3554},[87,47280,42929],{"class":199},[87,47282,47283,47285,47287],{"class":89,"line":3559},[87,47284,31748],{"class":171},[87,47286,31751],{"class":104},[87,47288,42938],{"class":97},[87,47290,47291,47293,47295,47297,47299,47301],{"class":89,"line":3565},[87,47292,31764],{"class":104},[87,47294,42945],{"class":97},[87,47296,31770],{"class":104},[87,47298,31773],{"class":97},[87,47300,31776],{"class":104},[87,47302,2931],{"class":97},[87,47304,47305,47307,47309,47311],{"class":89,"line":3571},[87,47306,31792],{"class":104},[87,47308,42960],{"class":97},[87,47310,946],{"class":171},[87,47312,38956],{"class":97},[87,47314,47315,47317,47319,47321,47323,47325,47327,47329,47331,47333,47335,47337,47339,47341,47343,47345,47347,47349,47351,47353,47355],{"class":89,"line":3576},[87,47316,38961],{"class":97},[87,47318,31803],{"class":492},[87,47320,946],{"class":171},[87,47322,1170],{"class":104},[87,47324,1473],{"class":97},[87,47326,31812],{"class":492},[87,47328,946],{"class":171},[87,47330,1299],{"class":104},[87,47332,1473],{"class":97},[87,47334,31821],{"class":492},[87,47336,946],{"class":171},[87,47338,1464],{"class":104},[87,47340,1473],{"class":97},[87,47342,31876],{"class":492},[87,47344,946],{"class":171},[87,47346,1176],{"class":104},[87,47348,1473],{"class":97},[87,47350,31830],{"class":492},[87,47352,946],{"class":171},[87,47354,1170],{"class":104},[87,47356,38994],{"class":97},[87,47358,47359],{"class":89,"line":8898},[87,47360,38999],{"class":97},[87,47362,47363,47365,47367,47369,47371,47373,47375,47377,47379,47381,47383,47385,47387],{"class":89,"line":8922},[87,47364,39044],{"class":97},[87,47366,31821],{"class":492},[87,47368,946],{"class":171},[87,47370,1170],{"class":104},[87,47372,1473],{"class":97},[87,47374,31876],{"class":492},[87,47376,946],{"class":171},[87,47378,1176],{"class":104},[87,47380,1473],{"class":97},[87,47382,31830],{"class":492},[87,47384,946],{"class":171},[87,47386,1313],{"class":104},[87,47388,1108],{"class":97},[87,47390,47391],{"class":89,"line":8927},[87,47392,39073],{"class":97},[87,47394,47395,47397,47399,47401],{"class":89,"line":8933},[87,47396,31792],{"class":104},[87,47398,43051],{"class":97},[87,47400,946],{"class":171},[87,47402,38956],{"class":97},[87,47404,47405,47407,47409,47411,47413,47415,47417,47419,47421,47423,47425,47427,47429],{"class":89,"line":8960},[87,47406,38961],{"class":97},[87,47408,31803],{"class":492},[87,47410,946],{"class":171},[87,47412,1299],{"class":104},[87,47414,1473],{"class":97},[87,47416,31812],{"class":492},[87,47418,946],{"class":171},[87,47420,1299],{"class":104},[87,47422,1473],{"class":97},[87,47424,31821],{"class":492},[87,47426,946],{"class":171},[87,47428,1313],{"class":104},[87,47430,38994],{"class":97},[87,47432,47433],{"class":89,"line":8965},[87,47434,38999],{"class":97},[87,47436,47437,47439,47441,47443,47445,47447,47449,47451,47453,47455,47457,47459,47461,47463,47465,47467,47469],{"class":89,"line":8971},[87,47438,38961],{"class":97},[87,47440,31803],{"class":492},[87,47442,946],{"class":171},[87,47444,1299],{"class":104},[87,47446,1473],{"class":97},[87,47448,31812],{"class":492},[87,47450,946],{"class":171},[87,47452,43106],{"class":104},[87,47454,1473],{"class":97},[87,47456,31821],{"class":492},[87,47458,946],{"class":171},[87,47460,1170],{"class":104},[87,47462,1473],{"class":97},[87,47464,31830],{"class":492},[87,47466,946],{"class":171},[87,47468,1313],{"class":104},[87,47470,38994],{"class":97},[87,47472,47473],{"class":89,"line":8983},[87,47474,38999],{"class":97},[87,47476,47477,47479,47481,47483,47485,47487,47489,47491,47493,47495,47497,47499,47501],{"class":89,"line":8995},[87,47478,39044],{"class":97},[87,47480,31821],{"class":492},[87,47482,946],{"class":171},[87,47484,1170],{"class":104},[87,47486,1473],{"class":97},[87,47488,31876],{"class":492},[87,47490,946],{"class":171},[87,47492,1176],{"class":104},[87,47494,1473],{"class":97},[87,47496,31830],{"class":492},[87,47498,946],{"class":171},[87,47500,1313],{"class":104},[87,47502,1108],{"class":97},[87,47504,47505],{"class":89,"line":9007},[87,47506,39073],{"class":97},[87,47508,47509,47511,47513,47515],{"class":89,"line":10666},[87,47510,31792],{"class":104},[87,47512,43167],{"class":97},[87,47514,946],{"class":171},[87,47516,38956],{"class":97},[87,47518,47519,47521,47523,47525,47527,47529,47531,47533,47535,47537,47539,47541,47543,47545,47547],{"class":89,"line":10691},[87,47520,43176],{"class":97},[87,47522,43106],{"class":104},[87,47524,1473],{"class":97},[87,47526,1299],{"class":104},[87,47528,43185],{"class":97},[87,47530,1305],{"class":104},[87,47532,1473],{"class":97},[87,47534,33017],{"class":104},[87,47536,43194],{"class":97},[87,47538,1694],{"class":104},[87,47540,1473],{"class":97},[87,47542,1293],{"class":104},[87,47544,43203],{"class":97},[87,47546,1293],{"class":104},[87,47548,38994],{"class":97},[87,47550,47551,47553,47555,47557,47559,47561,47563,47565,47567,47569,47571,47573,47575,47577,47579],{"class":89,"line":10714},[87,47552,43176],{"class":97},[87,47554,35817],{"class":104},[87,47556,1473],{"class":97},[87,47558,33017],{"class":104},[87,47560,43185],{"class":97},[87,47562,33017],{"class":104},[87,47564,1473],{"class":97},[87,47566,43106],{"class":104},[87,47568,43194],{"class":97},[87,47570,1293],{"class":104},[87,47572,1473],{"class":97},[87,47574,1305],{"class":104},[87,47576,43203],{"class":97},[87,47578,1299],{"class":104},[87,47580,38994],{"class":97},[87,47582,47583,47585,47587,47589,47591,47593,47595,47597,47599,47601,47603,47605,47607],{"class":89,"line":10738},[87,47584,39044],{"class":97},[87,47586,31821],{"class":492},[87,47588,946],{"class":171},[87,47590,1170],{"class":104},[87,47592,1473],{"class":97},[87,47594,31876],{"class":492},[87,47596,946],{"class":171},[87,47598,1176],{"class":104},[87,47600,1473],{"class":97},[87,47602,31830],{"class":492},[87,47604,946],{"class":171},[87,47606,1313],{"class":104},[87,47608,1108],{"class":97},[87,47610,47611],{"class":89,"line":10743},[87,47612,39073],{"class":97},[87,47614,47615,47617,47619,47621],{"class":89,"line":10748},[87,47616,31792],{"class":104},[87,47618,43278],{"class":97},[87,47620,946],{"class":171},[87,47622,38956],{"class":97},[87,47624,47625,47627,47629,47631,47633,47635,47637,47639,47641,47643,47645,47647,47649,47651,47653],{"class":89,"line":10753},[87,47626,43176],{"class":97},[87,47628,43289],{"class":104},[87,47630,1473],{"class":97},[87,47632,43106],{"class":104},[87,47634,43185],{"class":97},[87,47636,1305],{"class":104},[87,47638,1473],{"class":97},[87,47640,43302],{"class":104},[87,47642,43194],{"class":97},[87,47644,1694],{"class":104},[87,47646,1473],{"class":97},[87,47648,1700],{"class":104},[87,47650,43203],{"class":97},[87,47652,1299],{"class":104},[87,47654,38994],{"class":97},[87,47656,47657,47659,47661,47663,47665,47667,47669,47671,47673,47675,47677,47679,47681,47683,47685],{"class":89,"line":10762},[87,47658,43176],{"class":97},[87,47660,39404],{"class":104},[87,47662,1473],{"class":97},[87,47664,21996],{"class":104},[87,47666,43185],{"class":97},[87,47668,1711],{"class":104},[87,47670,1473],{"class":97},[87,47672,32448],{"class":104},[87,47674,43194],{"class":97},[87,47676,1892],{"class":104},[87,47678,1473],{"class":97},[87,47680,1299],{"class":104},[87,47682,43203],{"class":97},[87,47684,1299],{"class":104},[87,47686,38994],{"class":97},[87,47688,47689,47691,47693,47695,47697,47699,47701,47703,47705,47707,47709,47711,47713,47715,47717],{"class":89,"line":10767},[87,47690,43176],{"class":97},[87,47692,39404],{"class":104},[87,47694,1473],{"class":97},[87,47696,33017],{"class":104},[87,47698,43185],{"class":97},[87,47700,33017],{"class":104},[87,47702,1473],{"class":97},[87,47704,35817],{"class":104},[87,47706,43194],{"class":97},[87,47708,1892],{"class":104},[87,47710,1473],{"class":97},[87,47712,1299],{"class":104},[87,47714,43203],{"class":97},[87,47716,1299],{"class":104},[87,47718,38994],{"class":97},[87,47720,47721,47723,47725,47727,47729,47731,47733,47735,47737,47739,47741,47743,47745,47747,47749],{"class":89,"line":10773},[87,47722,43176],{"class":97},[87,47724,39404],{"class":104},[87,47726,1473],{"class":97},[87,47728,1711],{"class":104},[87,47730,43185],{"class":97},[87,47732,33017],{"class":104},[87,47734,1473],{"class":97},[87,47736,43399],{"class":104},[87,47738,43194],{"class":97},[87,47740,1293],{"class":104},[87,47742,1473],{"class":97},[87,47744,1299],{"class":104},[87,47746,43203],{"class":97},[87,47748,1299],{"class":104},[87,47750,38994],{"class":97},[87,47752,47753,47755,47757,47759,47761,47763,47765,47767,47769,47771,47773,47775,47777,47779,47781],{"class":89,"line":10794},[87,47754,43176],{"class":97},[87,47756,43420],{"class":104},[87,47758,1473],{"class":97},[87,47760,35817],{"class":104},[87,47762,43185],{"class":97},[87,47764,21996],{"class":104},[87,47766,1473],{"class":97},[87,47768,43433],{"class":104},[87,47770,43194],{"class":97},[87,47772,1293],{"class":104},[87,47774,1473],{"class":97},[87,47776,33017],{"class":104},[87,47778,43203],{"class":97},[87,47780,33017],{"class":104},[87,47782,38994],{"class":97},[87,47784,47785,47787,47789,47791,47793,47795,47797,47799,47801,47803,47805,47807,47809],{"class":89,"line":10800},[87,47786,39044],{"class":97},[87,47788,31821],{"class":492},[87,47790,946],{"class":171},[87,47792,1170],{"class":104},[87,47794,1473],{"class":97},[87,47796,31876],{"class":492},[87,47798,946],{"class":171},[87,47800,1176],{"class":104},[87,47802,1473],{"class":97},[87,47804,31830],{"class":492},[87,47806,946],{"class":171},[87,47808,1313],{"class":104},[87,47810,1108],{"class":97},[87,47812,47813],{"class":89,"line":10814},[87,47814,39073],{"class":97},[87,47816,47817,47819,47821,47823],{"class":89,"line":10820},[87,47818,31792],{"class":104},[87,47820,43486],{"class":97},[87,47822,946],{"class":171},[87,47824,38956],{"class":97},[87,47826,47827,47829,47831,47833,47835,47837,47839,47841,47843,47845,47847,47849,47851,47853,47855],{"class":89,"line":10847},[87,47828,43176],{"class":97},[87,47830,43497],{"class":104},[87,47832,1473],{"class":97},[87,47834,35817],{"class":104},[87,47836,43185],{"class":97},[87,47838,21996],{"class":104},[87,47840,1473],{"class":97},[87,47842,43433],{"class":104},[87,47844,43194],{"class":97},[87,47846,1293],{"class":104},[87,47848,1473],{"class":97},[87,47850,33017],{"class":104},[87,47852,43203],{"class":97},[87,47854,33017],{"class":104},[87,47856,38994],{"class":97},[87,47858,47859,47861,47863,47865,47867,47869,47871,47873,47875,47877,47879,47881,47883,47885,47887],{"class":89,"line":10856},[87,47860,43176],{"class":97},[87,47862,43497],{"class":104},[87,47864,1473],{"class":97},[87,47866,35887],{"class":104},[87,47868,43185],{"class":97},[87,47870,43106],{"class":104},[87,47872,1473],{"class":97},[87,47874,35887],{"class":104},[87,47876,43194],{"class":97},[87,47878,1700],{"class":104},[87,47880,1473],{"class":97},[87,47882,33017],{"class":104},[87,47884,43203],{"class":97},[87,47886,33017],{"class":104},[87,47888,38994],{"class":97},[87,47890,47891,47893,47895,47897,47899],{"class":89,"line":10862},[87,47892,43560],{"class":97},[87,47894,1313],{"class":104},[87,47896,1473],{"class":97},[87,47898,1313],{"class":104},[87,47900,43569],{"class":97},[87,47902,47903],{"class":89,"line":10870},[87,47904,39737],{"class":97},[87,47906,47907,47909,47911,47913,47915],{"class":89,"line":10875},[87,47908,39742],{"class":97},[87,47910,43580],{"class":104},[87,47912,1473],{"class":97},[87,47914,1176],{"class":104},[87,47916,1108],{"class":97},[87,47918,47919],{"class":89,"line":17553},[87,47920,39073],{"class":97},[87,47922,47923],{"class":89,"line":17559},[87,47924,43595],{"class":199},[87,47926,47927,47929,47931,47933,47935],{"class":89,"line":17582},[87,47928,4357],{"class":171},[87,47930,39815],{"class":97},[87,47932,26990],{"class":171},[87,47934,39820],{"class":104},[87,47936,39823],{"class":97},[87,47938,47939,47941,47943],{"class":89,"line":17588},[87,47940,5595],{"class":171},[87,47942,39835],{"class":104},[87,47944,39838],{"class":97},[87,47946,47947,47949,47951,47953,47955,47957,47959,47961,47963],{"class":89,"line":17611},[87,47948,39848],{"class":97},[87,47950,43622],{"class":492},[87,47952,946],{"class":171},[87,47954,43627],{"class":949},[87,47956,1473],{"class":97},[87,47958,39851],{"class":492},[87,47960,946],{"class":171},[87,47962,39856],{"class":949},[87,47964,1108],{"class":97},[87,47966,47967],{"class":89,"line":17625},[87,47968,43642],{"class":199},[87,47970,47971],{"class":89,"line":17645},[87,47972,43647],{"class":199},[87,47974,47975],{"class":89,"line":17651},[87,47976,43652],{"class":199},[87,47978,47979],{"class":89,"line":17662},[87,47980,43657],{"class":199},[87,47982,47983],{"class":89,"line":17685},[87,47984,43662],{"class":199},[87,47986,47987],{"class":89,"line":17707},[87,47988,43667],{"class":199},[87,47990,47991,47993,47995,47997,47999,48001],{"class":89,"line":17712},[87,47992,39868],{"class":171},[87,47994,39871],{"class":97},[87,47996,39874],{"class":171},[87,47998,39877],{"class":171},[87,48000,39880],{"class":104},[87,48002,4693],{"class":97},[87,48004,48005,48007,48009],{"class":89,"line":17718},[87,48006,39892],{"class":97},[87,48008,111],{"class":104},[87,48010,1108],{"class":97},[87,48012,48013,48015,48017],{"class":89,"line":17732},[87,48014,43694],{"class":171},[87,48016,39835],{"class":104},[87,48018,39911],{"class":97},[87,48020,48021,48023,48025,48027,48029],{"class":89,"line":17745},[87,48022,43703],{"class":97},[87,48024,111],{"class":104},[87,48026,1473],{"class":97},[87,48028,39933],{"class":104},[87,48030,1108],{"class":97},[87,48032,48033,48035,48037,48039,48041,48043],{"class":89,"line":17750},[87,48034,43716],{"class":171},[87,48036,39871],{"class":97},[87,48038,39874],{"class":171},[87,48040,39877],{"class":171},[87,48042,39880],{"class":104},[87,48044,4693],{"class":97},[87,48046,48047,48049,48051],{"class":89,"line":17764},[87,48048,43731],{"class":97},[87,48050,111],{"class":104},[87,48052,1108],{"class":97},[87,48054,48055],{"class":89,"line":17769},[87,48056,36112],{"class":199},[87,48058,48059,48061,48063],{"class":89,"line":17775},[87,48060,31748],{"class":171},[87,48062,32040],{"class":205},[87,48064,32043],{"class":97},[87,48066,48067,48069,48071,48073],{"class":89,"line":17780},[87,48068,32048],{"class":97},[87,48070,946],{"class":171},[87,48072,31770],{"class":104},[87,48074,43758],{"class":97},[87,48076,48077,48079,48081,48083],{"class":89,"line":17794},[87,48078,32048],{"class":97},[87,48080,946],{"class":171},[87,48082,31770],{"class":104},[87,48084,43769],{"class":97},[87,48086,48087,48089,48091,48093],{"class":89,"line":17799},[87,48088,32048],{"class":97},[87,48090,946],{"class":171},[87,48092,31770],{"class":104},[87,48094,43780],{"class":97},[87,48096,48097,48099,48101,48103],{"class":89,"line":17804},[87,48098,32048],{"class":97},[87,48100,946],{"class":171},[87,48102,31770],{"class":104},[87,48104,43791],{"class":97},[87,48106,48107,48109,48111,48113],{"class":89,"line":17818},[87,48108,32048],{"class":97},[87,48110,946],{"class":171},[87,48112,31770],{"class":104},[87,48114,43802],{"class":97},[87,48116,48117,48119],{"class":89,"line":17830},[87,48118,15702],{"class":171},[87,48120,32156],{"class":97},[87,48122,48123],{"class":89,"line":17835},[87,48124,3355],{"emptyLinePlaceholder":1029},[87,48126,48127],{"class":89,"line":17848},[87,48128,43817],{"class":199},[87,48130,48131,48133,48135,48137,48139],{"class":89,"line":17853},[87,48132,2488],{"class":171},[87,48134,32167],{"class":104},[87,48136,3903],{"class":171},[87,48138,32172],{"class":949},[87,48140,4693],{"class":97},[87,48142,48143,48145,48147,48149,48151,48153,48155,48157,48159],{"class":89,"line":17858},[87,48144,32184],{"class":97},[87,48146,946],{"class":171},[87,48148,31398],{"class":97},[87,48150,32191],{"class":949},[87,48152,2660],{"class":171},[87,48154,32196],{"class":97},[87,48156,2657],{"class":171},[87,48158,31423],{"class":949},[87,48160,1108],{"class":97},[87,48162,48163,48165,48167],{"class":89,"line":17863},[87,48164,32236],{"class":97},[87,48166,946],{"class":171},[87,48168,43858],{"class":97},[87,48170,48171,48173,48175,48177,48179,48181,48183,48185],{"class":89,"line":17876},[87,48172,32246],{"class":104},[87,48174,32249],{"class":97},[87,48176,1313],{"class":104},[87,48178,1473],{"class":97},[87,48180,32448],{"class":104},[87,48182,1473],{"class":97},[87,48184,32448],{"class":104},[87,48186,32262],{"class":97},[49,48188,48190],{"id":48189},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,48192,48193],{},"计算图片的均值与方差，用于训练中归一化处理操作",[77,48195,48197],{"className":31325,"code":48196,"language":31327,"meta":82,"style":82},"# 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",[84,48198,48199,48204,48217,48222,48228,48233,48243,48247,48252,48262,48266,48271,48281,48298,48302,48307,48319,48331,48362,48371,48381,48391,48395,48400,48415,48419,48424,48429,48434,48444,48449,48474,48478,48483,48498,48502,48515,48519,48524,48529,48534,48539,48544,48554,48564,48587,48595,48603,48611,48615,48627,48631,48636,48640,48644,48651,48671,48695,48702,48716,48721,48726,48730,48744,48748,48760],{"__ignoreMap":82},[87,48200,48201],{"class":89,"line":90},[87,48202,48203],{"class":199},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[87,48205,48206,48208,48211,48214],{"class":89,"line":101},[87,48207,31684],{"class":171},[87,48209,48210],{"class":104}," PIL",[87,48212,48213],{"class":171}," import",[87,48215,48216],{"class":97}," Image\n",[87,48218,48219],{"class":89,"line":120},[87,48220,48221],{"class":199},"# os 用来处理文件夹和文件路径\n",[87,48223,48224,48226],{"class":89,"line":222},[87,48225,31339],{"class":171},[87,48227,46252],{"class":97},[87,48229,48230],{"class":89,"line":234},[87,48231,48232],{"class":199},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[87,48234,48235,48237,48239,48241],{"class":89,"line":256},[87,48236,31339],{"class":171},[87,48238,32327],{"class":97},[87,48240,32330],{"class":171},[87,48242,32333],{"class":97},[87,48244,48245],{"class":89,"line":269},[87,48246,3355],{"emptyLinePlaceholder":1029},[87,48248,48249],{"class":89,"line":463},[87,48250,48251],{"class":199},"# 文件夹路径，包含所有图片文件\n",[87,48253,48254,48257,48259],{"class":89,"line":469},[87,48255,48256],{"class":97},"folder_path ",[87,48258,946],{"class":171},[87,48260,48261],{"class":949}," 'data_cat_dog'\n",[87,48263,48264],{"class":89,"line":2287},[87,48265,3355],{"emptyLinePlaceholder":1029},[87,48267,48268],{"class":89,"line":2568},[87,48269,48270],{"class":199},"# 初始化累积变量\n",[87,48272,48273,48276,48278],{"class":89,"line":2573},[87,48274,48275],{"class":97},"total_pixels ",[87,48277,946],{"class":171},[87,48279,48280],{"class":104}," 0\n",[87,48282,48283,48286,48288,48291,48293,48295],{"class":89,"line":2579},[87,48284,48285],{"class":97},"sum_normalized_pixel_values ",[87,48287,946],{"class":171},[87,48289,48290],{"class":97}," np.zeros(",[87,48292,1170],{"class":104},[87,48294,46755],{"class":97},[87,48296,48297],{"class":199},"# 如果是RGB图像，需要三个通道的均值和方差\n",[87,48299,48300],{"class":89,"line":2584},[87,48301,3355],{"emptyLinePlaceholder":1029},[87,48303,48304],{"class":89,"line":2598},[87,48305,48306],{"class":199},"# 遍历文件夹中的图片文件\n",[87,48308,48309,48311,48314,48316],{"class":89,"line":2603},[87,48310,3979],{"class":171},[87,48312,48313],{"class":97}," root, dirs, files ",[87,48315,26990],{"class":171},[87,48317,48318],{"class":97}," os.walk(folder_path):\n",[87,48320,48321,48323,48326,48328],{"class":89,"line":2609},[87,48322,4155],{"class":171},[87,48324,48325],{"class":97}," filename ",[87,48327,26990],{"class":171},[87,48329,48330],{"class":97}," files:\n",[87,48332,48333,48335,48338,48341,48343,48346,48348,48351,48353,48356,48359],{"class":89,"line":2630},[87,48334,3452],{"class":171},[87,48336,48337],{"class":97}," filename.endswith((",[87,48339,48340],{"class":949},"'.jpg'",[87,48342,13385],{"class":97},[87,48344,48345],{"class":949},"'.jpeg'",[87,48347,13385],{"class":97},[87,48349,48350],{"class":949},"'.png'",[87,48352,13385],{"class":97},[87,48354,48355],{"class":949},"'.bmp'",[87,48357,48358],{"class":97},")):  ",[87,48360,48361],{"class":199},"# 可根据实际情况添加其他格式\n",[87,48363,48364,48366,48368],{"class":89,"line":2635},[87,48365,46620],{"class":97},[87,48367,946],{"class":171},[87,48369,48370],{"class":97}," os.path.join(root, filename)\n",[87,48372,48373,48376,48378],{"class":89,"line":2649},[87,48374,48375],{"class":97},"            image ",[87,48377,946],{"class":171},[87,48379,48380],{"class":97}," Image.open(image_path)\n",[87,48382,48383,48386,48388],{"class":89,"line":2654},[87,48384,48385],{"class":97},"            image_array ",[87,48387,946],{"class":171},[87,48389,48390],{"class":97}," np.array(image)\n",[87,48392,48393],{"class":89,"line":2683},[87,48394,3355],{"emptyLinePlaceholder":1029},[87,48396,48397],{"class":89,"line":2688},[87,48398,48399],{"class":199},"            # 归一化像素值到0-1之间\n",[87,48401,48402,48405,48407,48410,48412],{"class":89,"line":2705},[87,48403,48404],{"class":97},"            normalized_image_array ",[87,48406,946],{"class":171},[87,48408,48409],{"class":97}," image_array ",[87,48411,1677],{"class":171},[87,48413,48414],{"class":104}," 255.0\n",[87,48416,48417],{"class":89,"line":2710},[87,48418,3355],{"emptyLinePlaceholder":1029},[87,48420,48421],{"class":89,"line":2715},[87,48422,48423],{"class":199},"            # print(image_path)\n",[87,48425,48426],{"class":89,"line":2720},[87,48427,48428],{"class":199},"            # print(normalized_image_array.shape)\n",[87,48430,48431],{"class":89,"line":2734},[87,48432,48433],{"class":199},"            # 累积归一化后的像素值和像素数量\n",[87,48435,48436,48439,48441],{"class":89,"line":2739},[87,48437,48438],{"class":97},"            total_pixels ",[87,48440,10427],{"class":171},[87,48442,48443],{"class":97}," normalized_image_array.size\n",[87,48445,48446],{"class":89,"line":3532},[87,48447,48448],{"class":199},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[87,48450,48451,48454,48456,48459,48462,48464,48466,48468,48470,48472],{"class":89,"line":3546},[87,48452,48453],{"class":97},"            sum_normalized_pixel_values ",[87,48455,10427],{"class":171},[87,48457,48458],{"class":97}," np.sum(normalized_image_array, ",[87,48460,48461],{"class":492},"axis",[87,48463,946],{"class":171},[87,48465,165],{"class":97},[87,48467,111],{"class":104},[87,48469,13385],{"class":97},[87,48471,1313],{"class":104},[87,48473,31444],{"class":97},[87,48475,48476],{"class":89,"line":3554},[87,48477,3355],{"emptyLinePlaceholder":1029},[87,48479,48480],{"class":89,"line":3559},[87,48481,48482],{"class":199},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[87,48484,48485,48488,48490,48493,48495],{"class":89,"line":3565},[87,48486,48487],{"class":97},"mean ",[87,48489,946],{"class":171},[87,48491,48492],{"class":97}," sum_normalized_pixel_values ",[87,48494,1677],{"class":171},[87,48496,48497],{"class":97}," total_pixels\n",[87,48499,48500],{"class":89,"line":3571},[87,48501,3355],{"emptyLinePlaceholder":1029},[87,48503,48504,48507,48509,48511,48513],{"class":89,"line":3576},[87,48505,48506],{"class":97},"sum_squared_diff ",[87,48508,946],{"class":171},[87,48510,48290],{"class":97},[87,48512,1170],{"class":104},[87,48514,1108],{"class":97},[87,48516,48517],{"class":89,"line":8898},[87,48518,3355],{"emptyLinePlaceholder":1029},[87,48520,48521],{"class":89,"line":8922},[87,48522,48523],{"class":199},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[87,48525,48526],{"class":89,"line":8927},[87,48527,48528],{"class":199},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[87,48530,48531],{"class":89,"line":8933},[87,48532,48533],{"class":199},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[87,48535,48536],{"class":89,"line":8960},[87,48537,48538],{"class":199},"# Image.open(image_path)：打开图片\n",[87,48540,48541],{"class":89,"line":8965},[87,48542,48543],{"class":199},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[87,48545,48546,48548,48550,48552],{"class":89,"line":8971},[87,48547,3979],{"class":171},[87,48549,48313],{"class":97},[87,48551,26990],{"class":171},[87,48553,48318],{"class":97},[87,48555,48556,48558,48560,48562],{"class":89,"line":8983},[87,48557,4155],{"class":171},[87,48559,48325],{"class":97},[87,48561,26990],{"class":171},[87,48563,48330],{"class":97},[87,48565,48566,48568,48570,48572,48574,48576,48578,48580,48582,48584],{"class":89,"line":8995},[87,48567,3452],{"class":171},[87,48569,48337],{"class":97},[87,48571,48340],{"class":949},[87,48573,13385],{"class":97},[87,48575,48345],{"class":949},[87,48577,13385],{"class":97},[87,48579,48350],{"class":949},[87,48581,13385],{"class":97},[87,48583,48355],{"class":949},[87,48585,48586],{"class":97},")):\n",[87,48588,48589,48591,48593],{"class":89,"line":9007},[87,48590,46620],{"class":97},[87,48592,946],{"class":171},[87,48594,48370],{"class":97},[87,48596,48597,48599,48601],{"class":89,"line":10666},[87,48598,48375],{"class":97},[87,48600,946],{"class":171},[87,48602,48380],{"class":97},[87,48604,48605,48607,48609],{"class":89,"line":10691},[87,48606,48385],{"class":97},[87,48608,946],{"class":171},[87,48610,48390],{"class":97},[87,48612,48613],{"class":89,"line":10714},[87,48614,48399],{"class":199},[87,48616,48617,48619,48621,48623,48625],{"class":89,"line":10738},[87,48618,48404],{"class":97},[87,48620,946],{"class":171},[87,48622,48409],{"class":97},[87,48624,1677],{"class":171},[87,48626,48414],{"class":104},[87,48628,48629],{"class":89,"line":10743},[87,48630,48428],{"class":199},[87,48632,48633],{"class":89,"line":10748},[87,48634,48635],{"class":199},"            # print(mean.shape)\n",[87,48637,48638],{"class":89,"line":10753},[87,48639,48423],{"class":199},[87,48641,48642],{"class":89,"line":10762},[87,48643,3355],{"emptyLinePlaceholder":1029},[87,48645,48646,48649],{"class":89,"line":10767},[87,48647,48648],{"class":171},"            try",[87,48650,4693],{"class":97},[87,48652,48653,48656,48658,48661,48663,48666,48668],{"class":89,"line":10773},[87,48654,48655],{"class":97},"                diff ",[87,48657,946],{"class":171},[87,48659,48660],{"class":97}," (normalized_image_array ",[87,48662,1625],{"class":171},[87,48664,48665],{"class":97}," mean) ",[87,48667,11611],{"class":171},[87,48669,48670],{"class":104}," 2\n",[87,48672,48673,48676,48678,48681,48683,48685,48687,48689,48691,48693],{"class":89,"line":10794},[87,48674,48675],{"class":97},"                sum_squared_diff ",[87,48677,10427],{"class":171},[87,48679,48680],{"class":97}," np.sum(diff, ",[87,48682,48461],{"class":492},[87,48684,946],{"class":171},[87,48686,165],{"class":97},[87,48688,111],{"class":104},[87,48690,13385],{"class":97},[87,48692,1313],{"class":104},[87,48694,31444],{"class":97},[87,48696,48697,48700],{"class":89,"line":10800},[87,48698,48699],{"class":171},"            except",[87,48701,4693],{"class":97},[87,48703,48704,48707,48709,48711,48714],{"class":89,"line":10814},[87,48705,48706],{"class":104},"                print",[87,48708,165],{"class":97},[87,48710,1152],{"class":171},[87,48712,48713],{"class":949},"\"捕获到自定义异常\"",[87,48715,1108],{"class":97},[87,48717,48718],{"class":89,"line":10820},[87,48719,48720],{"class":199},"            # diff = (normalized_image_array - mean) ** 2\n",[87,48722,48723],{"class":89,"line":10847},[87,48724,48725],{"class":199},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[87,48727,48728],{"class":89,"line":10856},[87,48729,3355],{"emptyLinePlaceholder":1029},[87,48731,48732,48735,48737,48740,48742],{"class":89,"line":10862},[87,48733,48734],{"class":97},"variance ",[87,48736,946],{"class":171},[87,48738,48739],{"class":97}," sum_squared_diff ",[87,48741,1677],{"class":171},[87,48743,48497],{"class":97},[87,48745,48746],{"class":89,"line":10870},[87,48747,3355],{"emptyLinePlaceholder":1029},[87,48749,48750,48752,48754,48757],{"class":89,"line":10875},[87,48751,31362],{"class":104},[87,48753,165],{"class":97},[87,48755,48756],{"class":949},"\"Mean:\"",[87,48758,48759],{"class":97},", mean)\n",[87,48761,48762,48764,48766,48769],{"class":89,"line":17553},[87,48763,31362],{"class":104},[87,48765,165],{"class":97},[87,48767,48768],{"class":949},"\"Variance:\"",[87,48770,48771],{"class":97},", variance)\n",[77,48773,48775],{"className":31325,"code":48774,"language":31327,"meta":82,"style":82},"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",[84,48776,48777,48783,48789,48799,48805,48815,48829,48839,48849,48859,48863,48873,48883,48887,48891,48899,48904,48909,48928,48932,48937,48942,48947,48952,48993,48998,49008,49013,49026,49031,49036,49041,49046,49051,49055,49060,49065,49086,49090,49122,49136,49146,49156,49160,49170,49184,49194,49204,49214,49220,49224,49228,49232,49236,49240,49248,49268,49272,49276,49280,49284,49300,49304,49308,49316,49320,49324,49332,49336,49340,49344,49352,49356,49360,49364,49372,49376,49384,49388,49396,49400,49408,49412,49420,49424,49428,49436,49440,49444,49456,49480,49494,49498,49502,49506,49514,49518,49526,49530,49538,49542,49550,49554,49562,49566,49574,49578,49590,49594,49602,49606,49614,49618,49622,49626,49630,49638,49642,49658,49662,49670,49674,49678,49682,49686,49690,49694,49698,49714,49718,49730,49734,49746,49750,49762,49766,49774,49778,49786,49790,49794,49798,49804,49808,49816,49820,49836,49840,49848,49852,49868,49880,49884,49896,49900,49904,49912,49916,49920,49928,49932,49940,49944,49952,49956,49960,50002,50044,50048,50052,50068,50072,50088,50092,50096,50104,50108,50112,50124,50162,50166,50170,50178,50182,50196,50206,50212,50218,50224,50230,50234,50238,50244,50248,50252,50260,50264,50282,50286,50290,50294,50310,50314,50318,50322,50326,50330,50350,50370,50374,50378,50382,50390,50398,50402,50418,50438,50458,50462,50467,50476,50485,50490,50495,50500,50513,50518,50527,50536,50553],{"__ignoreMap":82},[87,48778,48779,48781],{"class":89,"line":90},[87,48780,31339],{"class":171},[87,48782,32769],{"class":97},[87,48784,48785,48787],{"class":89,"line":101},[87,48786,31339],{"class":171},[87,48788,32776],{"class":97},[87,48790,48791,48793,48795,48797],{"class":89,"line":120},[87,48792,31339],{"class":171},[87,48794,32787],{"class":97},[87,48796,32330],{"class":171},[87,48798,32792],{"class":97},[87,48800,48801,48803],{"class":89,"line":222},[87,48802,31339],{"class":171},[87,48804,31342],{"class":97},[87,48806,48807,48809,48811,48813],{"class":89,"line":234},[87,48808,31684],{"class":171},[87,48810,32362],{"class":97},[87,48812,31339],{"class":171},[87,48814,32809],{"class":97},[87,48816,48817,48819,48821,48823,48826],{"class":89,"line":256},[87,48818,31684],{"class":171},[87,48820,32315],{"class":97},[87,48822,31339],{"class":171},[87,48824,48825],{"class":97}," ImageFolder ",[87,48827,48828],{"class":199},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[87,48830,48831,48833,48835,48837],{"class":89,"line":269},[87,48832,31684],{"class":171},[87,48834,32345],{"class":97},[87,48836,31339],{"class":171},[87,48838,32350],{"class":97},[87,48840,48841,48843,48845,48847],{"class":89,"line":463},[87,48842,31339],{"class":171},[87,48844,32362],{"class":97},[87,48846,32330],{"class":171},[87,48848,32367],{"class":97},[87,48850,48851,48853,48855,48857],{"class":89,"line":469},[87,48852,31339],{"class":171},[87,48854,32379],{"class":97},[87,48856,32330],{"class":171},[87,48858,32384],{"class":97},[87,48860,48861],{"class":89,"line":2287},[87,48862,32854],{"class":199},[87,48864,48865,48867,48869,48871],{"class":89,"line":2568},[87,48866,31684],{"class":171},[87,48868,32861],{"class":97},[87,48870,31339],{"class":171},[87,48872,43978],{"class":97},[87,48874,48875,48877,48879,48881],{"class":89,"line":2573},[87,48876,31684],{"class":171},[87,48878,31687],{"class":97},[87,48880,31339],{"class":171},[87,48882,31692],{"class":97},[87,48884,48885],{"class":89,"line":2579},[87,48886,3355],{"emptyLinePlaceholder":1029},[87,48888,48889],{"class":89,"line":2584},[87,48890,32889],{"class":199},[87,48892,48893,48895,48897],{"class":89,"line":2598},[87,48894,32894],{"class":171},[87,48896,32897],{"class":205},[87,48898,32900],{"class":97},[87,48900,48901],{"class":89,"line":2603},[87,48902,48903],{"class":199},"    # 导入自己的数据集，并进行数据处理\n",[87,48905,48906],{"class":89,"line":2609},[87,48907,48908],{"class":199},"    # 定义数据集的路径\n",[87,48910,48911,48914,48916,48918,48920,48922,48926],{"class":89,"line":2630},[87,48912,48913],{"class":104},"    ROOT_PATH",[87,48915,946],{"class":171},[87,48917,1763],{"class":171},[87,48919,1347],{"class":949},[87,48921,1651],{"class":104},[87,48923,48925],{"class":48924},"sA_wV","\u002Fdata\u002Ftrain",[87,48927,26080],{"class":949},[87,48929,48930],{"class":89,"line":2635},[87,48931,3355],{"emptyLinePlaceholder":1029},[87,48933,48934],{"class":89,"line":2649},[87,48935,48936],{"class":199},"    # 定义归一化方法\n",[87,48938,48939],{"class":89,"line":2654},[87,48940,48941],{"class":199},"    # 这里需要先计算一下数据集的均值和方差\n",[87,48943,48944],{"class":89,"line":2683},[87,48945,48946],{"class":199},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[87,48948,48949],{"class":89,"line":2688},[87,48950,48951],{"class":199},"    # 第一个参数是均值，第二个参数是方差\n",[87,48953,48954,48957,48959,48962,48965,48967,48970,48972,48975,48978,48981,48983,48986,48988,48991],{"class":89,"line":2705},[87,48955,48956],{"class":97},"    normalize",[87,48958,946],{"class":171},[87,48960,48961],{"class":97},"transforms.Normalize([",[87,48963,48964],{"class":104},"0.162",[87,48966,1473],{"class":97},[87,48968,48969],{"class":104},"0.151",[87,48971,1473],{"class":97},[87,48973,48974],{"class":104},"0.138",[87,48976,48977],{"class":97},"],[",[87,48979,48980],{"class":104},"0.058",[87,48982,1473],{"class":97},[87,48984,48985],{"class":104},"0.052",[87,48987,1473],{"class":97},[87,48989,48990],{"class":104},"0.048",[87,48992,5610],{"class":97},[87,48994,48995],{"class":89,"line":2710},[87,48996,48997],{"class":199},"    # 定义数据集处理方法变量\n",[87,48999,49000,49003,49005],{"class":89,"line":2715},[87,49001,49002],{"class":97},"    train_transform",[87,49004,946],{"class":171},[87,49006,49007],{"class":97},"transforms.Compose([\n",[87,49009,49010],{"class":89,"line":2720},[87,49011,49012],{"class":199},"        # 调整图像大小为224*224\n",[87,49014,49015,49018,49020,49022,49024],{"class":89,"line":2734},[87,49016,49017],{"class":97},"        transforms.Resize((",[87,49019,32448],{"class":104},[87,49021,1473],{"class":97},[87,49023,32448],{"class":104},[87,49025,43569],{"class":97},[87,49027,49028],{"class":89,"line":2739},[87,49029,49030],{"class":199},"        # 将图像转换为张量\n",[87,49032,49033],{"class":89,"line":3532},[87,49034,49035],{"class":97},"        transforms.ToTensor(),\n",[87,49037,49038],{"class":89,"line":3546},[87,49039,49040],{"class":97},"        normalize])\n",[87,49042,49043],{"class":89,"line":3554},[87,49044,49045],{"class":199},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[87,49047,49048],{"class":89,"line":3559},[87,49049,49050],{"class":199},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[87,49052,49053],{"class":89,"line":3565},[87,49054,3355],{"emptyLinePlaceholder":1029},[87,49056,49057],{"class":89,"line":3571},[87,49058,49059],{"class":199},"    # 加载数据集\n",[87,49061,49062],{"class":89,"line":3576},[87,49063,49064],{"class":199},"    # 传入数据集路径与处理方法\n",[87,49066,49067,49069,49071,49074,49077,49079,49081,49083],{"class":89,"line":8898},[87,49068,32905],{"class":97},[87,49070,946],{"class":171},[87,49072,49073],{"class":97},"ImageFolder(",[87,49075,49076],{"class":104},"ROOT_PATH",[87,49078,1473],{"class":97},[87,49080,506],{"class":492},[87,49082,946],{"class":171},[87,49084,49085],{"class":97},"train_transform)\n",[87,49087,49088],{"class":89,"line":8922},[87,49089,3355],{"emptyLinePlaceholder":1029},[87,49091,49092,49094,49096,49098,49100,49102,49104,49106,49108,49110,49112,49114,49116,49118,49120],{"class":89,"line":8927},[87,49093,32957],{"class":97},[87,49095,946],{"class":171},[87,49097,32962],{"class":97},[87,49099,32965],{"class":104},[87,49101,165],{"class":97},[87,49103,32970],{"class":104},[87,49105,1549],{"class":171},[87,49107,8308],{"class":104},[87,49109,32977],{"class":97},[87,49111,32965],{"class":104},[87,49113,165],{"class":97},[87,49115,32984],{"class":104},[87,49117,1549],{"class":171},[87,49119,8308],{"class":104},[87,49121,32991],{"class":97},[87,49123,49124,49126,49128,49130,49132,49134],{"class":89,"line":8933},[87,49125,32996],{"class":97},[87,49127,946],{"class":171},[87,49129,33001],{"class":97},[87,49131,32484],{"class":492},[87,49133,946],{"class":171},[87,49135,32489],{"class":97},[87,49137,49138,49140,49142,49144],{"class":89,"line":8960},[87,49139,33012],{"class":492},[87,49141,946],{"class":171},[87,49143,1293],{"class":104},[87,49145,32413],{"class":97},[87,49147,49148,49150,49152,49154],{"class":89,"line":8965},[87,49149,33024],{"class":492},[87,49151,946],{"class":171},[87,49153,32423],{"class":104},[87,49155,32413],{"class":97},[87,49157,49158],{"class":89,"line":8971},[87,49159,33035],{"class":199},[87,49161,49162,49164,49166,49168],{"class":89,"line":8983},[87,49163,33040],{"class":492},[87,49165,946],{"class":171},[87,49167,1490],{"class":104},[87,49169,1108],{"class":97},[87,49171,49172,49174,49176,49178,49180,49182],{"class":89,"line":8995},[87,49173,33051],{"class":97},[87,49175,946],{"class":171},[87,49177,32481],{"class":97},[87,49179,32484],{"class":492},[87,49181,946],{"class":171},[87,49183,33062],{"class":97},[87,49185,49186,49188,49190,49192],{"class":89,"line":9007},[87,49187,33067],{"class":492},[87,49189,946],{"class":171},[87,49191,1293],{"class":104},[87,49193,32413],{"class":97},[87,49195,49196,49198,49200,49202],{"class":89,"line":10666},[87,49197,33078],{"class":492},[87,49199,946],{"class":171},[87,49201,32423],{"class":104},[87,49203,32413],{"class":97},[87,49205,49206,49208,49210,49212],{"class":89,"line":10691},[87,49207,33089],{"class":492},[87,49209,946],{"class":171},[87,49211,1490],{"class":104},[87,49213,1108],{"class":97},[87,49215,49216,49218],{"class":89,"line":10714},[87,49217,5044],{"class":171},[87,49219,33102],{"class":97},[87,49221,49222],{"class":89,"line":10738},[87,49223,3355],{"emptyLinePlaceholder":1029},[87,49225,49226],{"class":89,"line":10743},[87,49227,33111],{"class":199},[87,49229,49230],{"class":89,"line":10748},[87,49231,33116],{"class":199},[87,49233,49234],{"class":89,"line":10753},[87,49235,3355],{"emptyLinePlaceholder":1029},[87,49237,49238],{"class":89,"line":10762},[87,49239,33125],{"class":199},[87,49241,49242,49244,49246],{"class":89,"line":10767},[87,49243,32894],{"class":171},[87,49245,33132],{"class":205},[87,49247,33135],{"class":97},[87,49249,49250,49252,49254,49256,49258,49260,49262,49264,49266],{"class":89,"line":10773},[87,49251,32184],{"class":97},[87,49253,946],{"class":171},[87,49255,31398],{"class":97},[87,49257,32191],{"class":949},[87,49259,2660],{"class":171},[87,49261,32196],{"class":97},[87,49263,2657],{"class":171},[87,49265,33154],{"class":949},[87,49267,1108],{"class":97},[87,49269,49270],{"class":89,"line":10794},[87,49271,3355],{"emptyLinePlaceholder":1029},[87,49273,49274],{"class":89,"line":10800},[87,49275,33169],{"class":199},[87,49277,49278],{"class":89,"line":10814},[87,49279,33174],{"class":199},[87,49281,49282],{"class":89,"line":10820},[87,49283,33179],{"class":199},[87,49285,49286,49288,49290,49292,49294,49296,49298],{"class":89,"line":10847},[87,49287,33184],{"class":97},[87,49289,946],{"class":171},[87,49291,33189],{"class":97},[87,49293,33192],{"class":492},[87,49295,946],{"class":171},[87,49297,33197],{"class":104},[87,49299,1108],{"class":97},[87,49301,49302],{"class":89,"line":10856},[87,49303,3355],{"emptyLinePlaceholder":1029},[87,49305,49306],{"class":89,"line":10862},[87,49307,33208],{"class":199},[87,49309,49310,49312,49314],{"class":89,"line":10870},[87,49311,33213],{"class":97},[87,49313,946],{"class":171},[87,49315,33218],{"class":97},[87,49317,49318],{"class":89,"line":10875},[87,49319,3355],{"emptyLinePlaceholder":1029},[87,49321,49322],{"class":89,"line":17553},[87,49323,33227],{"class":199},[87,49325,49326,49328,49330],{"class":89,"line":17559},[87,49327,32236],{"class":97},[87,49329,946],{"class":171},[87,49331,33236],{"class":97},[87,49333,49334],{"class":89,"line":17582},[87,49335,33241],{"class":199},[87,49337,49338],{"class":89,"line":17588},[87,49339,33246],{"class":199},[87,49341,49342],{"class":89,"line":17611},[87,49343,33251],{"class":199},[87,49345,49346,49348,49350],{"class":89,"line":17625},[87,49347,33256],{"class":97},[87,49349,946],{"class":171},[87,49351,33261],{"class":97},[87,49353,49354],{"class":89,"line":17645},[87,49355,3355],{"emptyLinePlaceholder":1029},[87,49357,49358],{"class":89,"line":17651},[87,49359,33274],{"class":199},[87,49361,49362],{"class":89,"line":17662},[87,49363,33279],{"class":199},[87,49365,49366,49368,49370],{"class":89,"line":17685},[87,49367,33284],{"class":97},[87,49369,946],{"class":171},[87,49371,33289],{"class":104},[87,49373,49374],{"class":89,"line":17707},[87,49375,33294],{"class":199},[87,49377,49378,49380,49382],{"class":89,"line":17712},[87,49379,33299],{"class":97},[87,49381,946],{"class":171},[87,49383,33304],{"class":97},[87,49385,49386],{"class":89,"line":17718},[87,49387,33309],{"class":199},[87,49389,49390,49392,49394],{"class":89,"line":17732},[87,49391,33314],{"class":97},[87,49393,946],{"class":171},[87,49395,33304],{"class":97},[87,49397,49398],{"class":89,"line":17745},[87,49399,33323],{"class":199},[87,49401,49402,49404,49406],{"class":89,"line":17750},[87,49403,33328],{"class":97},[87,49405,946],{"class":171},[87,49407,33304],{"class":97},[87,49409,49410],{"class":89,"line":17764},[87,49411,33337],{"class":199},[87,49413,49414,49416,49418],{"class":89,"line":17769},[87,49415,33342],{"class":97},[87,49417,946],{"class":171},[87,49419,33304],{"class":97},[87,49421,49422],{"class":89,"line":17775},[87,49423,3355],{"emptyLinePlaceholder":1029},[87,49425,49426],{"class":89,"line":17780},[87,49427,33355],{"class":199},[87,49429,49430,49432,49434],{"class":89,"line":17794},[87,49431,33360],{"class":97},[87,49433,946],{"class":171},[87,49435,33365],{"class":97},[87,49437,49438],{"class":89,"line":17799},[87,49439,3355],{"emptyLinePlaceholder":1029},[87,49441,49442],{"class":89,"line":17804},[87,49443,33378],{"class":199},[87,49445,49446,49448,49450,49452,49454],{"class":89,"line":17818},[87,49447,4155],{"class":171},[87,49449,33385],{"class":97},[87,49451,26990],{"class":171},[87,49453,33390],{"class":104},[87,49455,33393],{"class":97},[87,49457,49458,49460,49462,49464,49466,49468,49470,49472,49474,49476,49478],{"class":89,"line":17830},[87,49459,33398],{"class":104},[87,49461,165],{"class":97},[87,49463,33403],{"class":949},[87,49465,33406],{"class":104},[87,49467,1677],{"class":949},[87,49469,33406],{"class":104},[87,49471,1347],{"class":949},[87,49473,33415],{"class":97},[87,49475,1625],{"class":171},[87,49477,1313],{"class":104},[87,49479,31444],{"class":97},[87,49481,49482,49484,49486,49488,49490,49492],{"class":89,"line":17835},[87,49483,33398],{"class":104},[87,49485,165],{"class":97},[87,49487,33430],{"class":949},[87,49489,1549],{"class":171},[87,49491,242],{"class":104},[87,49493,1108],{"class":97},[87,49495,49496],{"class":89,"line":17848},[87,49497,3355],{"emptyLinePlaceholder":1029},[87,49499,49500],{"class":89,"line":17853},[87,49501,33445],{"class":199},[87,49503,49504],{"class":89,"line":17858},[87,49505,33450],{"class":199},[87,49507,49508,49510,49512],{"class":89,"line":17863},[87,49509,33455],{"class":97},[87,49511,946],{"class":171},[87,49513,33289],{"class":104},[87,49515,49516],{"class":89,"line":17876},[87,49517,33464],{"class":199},[87,49519,49520,49522,49524],{"class":89,"line":17881},[87,49521,33469],{"class":97},[87,49523,946],{"class":171},[87,49525,4039],{"class":104},[87,49527,49528],{"class":89,"line":33580},[87,49529,33478],{"class":199},[87,49531,49532,49534,49536],{"class":89,"line":33586},[87,49533,33483],{"class":97},[87,49535,946],{"class":171},[87,49537,33289],{"class":104},[87,49539,49540],{"class":89,"line":33592},[87,49541,33492],{"class":199},[87,49543,49544,49546,49548],{"class":89,"line":33598},[87,49545,33497],{"class":97},[87,49547,946],{"class":171},[87,49549,4039],{"class":104},[87,49551,49552],{"class":89,"line":33604},[87,49553,33506],{"class":199},[87,49555,49556,49558,49560],{"class":89,"line":33615},[87,49557,33511],{"class":97},[87,49559,946],{"class":171},[87,49561,4039],{"class":104},[87,49563,49564],{"class":89,"line":33621},[87,49565,33520],{"class":199},[87,49567,49568,49570,49572],{"class":89,"line":33641},[87,49569,33525],{"class":97},[87,49571,946],{"class":171},[87,49573,4039],{"class":104},[87,49575,49576],{"class":89,"line":33647},[87,49577,33534],{"class":199},[87,49579,49580,49582,49584,49586,49588],{"class":89,"line":33658},[87,49581,4357],{"class":171},[87,49583,32548],{"class":97},[87,49585,26990],{"class":171},[87,49587,32553],{"class":104},[87,49589,33547],{"class":97},[87,49591,49592],{"class":89,"line":33664},[87,49593,33552],{"class":199},[87,49595,49596,49598,49600],{"class":89,"line":33670},[87,49597,33557],{"class":97},[87,49599,946],{"class":171},[87,49601,33562],{"class":97},[87,49603,49604],{"class":89,"line":33676},[87,49605,33567],{"class":199},[87,49607,49608,49610,49612],{"class":89,"line":33682},[87,49609,33572],{"class":97},[87,49611,946],{"class":171},[87,49613,33577],{"class":97},[87,49615,49616],{"class":89,"line":33688},[87,49617,33583],{"class":199},[87,49619,49620],{"class":89,"line":33694},[87,49621,33589],{"class":97},[87,49623,49624],{"class":89,"line":33700},[87,49625,33595],{"class":199},[87,49627,49628],{"class":89,"line":33720},[87,49629,33601],{"class":199},[87,49631,49632,49634,49636],{"class":89,"line":33726},[87,49633,33607],{"class":97},[87,49635,946],{"class":171},[87,49637,33612],{"class":97},[87,49639,49640],{"class":89,"line":33742},[87,49641,33618],{"class":199},[87,49643,49644,49646,49648,49650,49652,49654,49656],{"class":89,"line":33748},[87,49645,33624],{"class":97},[87,49647,946],{"class":171},[87,49649,33629],{"class":97},[87,49651,33632],{"class":492},[87,49653,946],{"class":171},[87,49655,1313],{"class":104},[87,49657,1108],{"class":97},[87,49659,49660],{"class":89,"line":33762},[87,49661,33644],{"class":199},[87,49663,49664,49666,49668],{"class":89,"line":33768},[87,49665,33650],{"class":97},[87,49667,946],{"class":171},[87,49669,33655],{"class":97},[87,49671,49672],{"class":89,"line":33783},[87,49673,33661],{"class":199},[87,49675,49676],{"class":89,"line":33789},[87,49677,33667],{"class":97},[87,49679,49680],{"class":89,"line":33798},[87,49681,33673],{"class":199},[87,49683,49684],{"class":89,"line":33804},[87,49685,33679],{"class":97},[87,49687,49688],{"class":89,"line":33813},[87,49689,33685],{"class":199},[87,49691,49692],{"class":89,"line":33819},[87,49693,33691],{"class":97},[87,49695,49696],{"class":89,"line":33825},[87,49697,33697],{"class":199},[87,49699,49700,49702,49704,49706,49708,49710,49712],{"class":89,"line":33834},[87,49701,33703],{"class":97},[87,49703,10427],{"class":171},[87,49705,33708],{"class":97},[87,49707,1549],{"class":171},[87,49709,33713],{"class":97},[87,49711,111],{"class":104},[87,49713,1108],{"class":97},[87,49715,49716],{"class":89,"line":33840},[87,49717,33723],{"class":199},[87,49719,49720,49722,49724,49726,49728],{"class":89,"line":33851},[87,49721,33729],{"class":97},[87,49723,10427],{"class":171},[87,49725,33734],{"class":97},[87,49727,3903],{"class":171},[87,49729,33739],{"class":97},[87,49731,49732],{"class":89,"line":33857},[87,49733,33745],{"class":199},[87,49735,49736,49738,49740,49742,49744],{"class":89,"line":33876},[87,49737,33751],{"class":97},[87,49739,10427],{"class":171},[87,49741,33713],{"class":97},[87,49743,111],{"class":104},[87,49745,1108],{"class":97},[87,49747,49748],{"class":89,"line":33882},[87,49749,33765],{"class":199},[87,49751,49752,49754,49756,49758,49760],{"class":89,"line":33893},[87,49753,4357],{"class":171},[87,49755,33773],{"class":97},[87,49757,26990],{"class":171},[87,49759,32553],{"class":104},[87,49761,33780],{"class":97},[87,49763,49764],{"class":89,"line":33899},[87,49765,33786],{"class":199},[87,49767,49768,49770,49772],{"class":89,"line":33919},[87,49769,33557],{"class":97},[87,49771,946],{"class":171},[87,49773,33562],{"class":97},[87,49775,49776],{"class":89,"line":33935},[87,49777,33801],{"class":199},[87,49779,49780,49782,49784],{"class":89,"line":33941},[87,49781,33572],{"class":97},[87,49783,946],{"class":171},[87,49785,33577],{"class":97},[87,49787,49788],{"class":89,"line":33955},[87,49789,33816],{"class":199},[87,49791,49792],{"class":89,"line":33961},[87,49793,33822],{"class":97},[87,49795,49796],{"class":89,"line":33967},[87,49797,37303],{"class":199},[87,49799,49800,49802],{"class":89,"line":33978},[87,49801,33828],{"class":171},[87,49803,33831],{"class":97},[87,49805,49806],{"class":89,"line":33984},[87,49807,33837],{"class":199},[87,49809,49810,49812,49814],{"class":89,"line":33990},[87,49811,37318],{"class":97},[87,49813,946],{"class":171},[87,49815,33612],{"class":97},[87,49817,49818],{"class":89,"line":34000},[87,49819,33854],{"class":199},[87,49821,49822,49824,49826,49828,49830,49832,49834],{"class":89,"line":34006},[87,49823,37331],{"class":97},[87,49825,946],{"class":171},[87,49827,33629],{"class":97},[87,49829,33632],{"class":492},[87,49831,946],{"class":171},[87,49833,1313],{"class":104},[87,49835,1108],{"class":97},[87,49837,49838],{"class":89,"line":34017},[87,49839,33879],{"class":199},[87,49841,49842,49844,49846],{"class":89,"line":34023},[87,49843,37352],{"class":97},[87,49845,946],{"class":171},[87,49847,33655],{"class":97},[87,49849,49850],{"class":89,"line":34033},[87,49851,33896],{"class":199},[87,49853,49854,49856,49858,49860,49862,49864,49866],{"class":89,"line":34038},[87,49855,37365],{"class":97},[87,49857,10427],{"class":171},[87,49859,37370],{"class":97},[87,49861,1549],{"class":171},[87,49863,33713],{"class":97},[87,49865,111],{"class":104},[87,49867,1108],{"class":97},[87,49869,49870,49872,49874,49876,49878],{"class":89,"line":34044},[87,49871,37383],{"class":97},[87,49873,10427],{"class":171},[87,49875,33734],{"class":97},[87,49877,3903],{"class":171},[87,49879,33739],{"class":97},[87,49881,49882],{"class":89,"line":34093},[87,49883,37396],{"class":199},[87,49885,49886,49888,49890,49892,49894],{"class":89,"line":34140},[87,49887,37401],{"class":97},[87,49889,10427],{"class":171},[87,49891,33713],{"class":97},[87,49893,111],{"class":104},[87,49895,1108],{"class":97},[87,49897,49898],{"class":89,"line":34145},[87,49899,33958],{"class":199},[87,49901,49902],{"class":89,"line":34151},[87,49903,33964],{"class":199},[87,49905,49906,49908,49910],{"class":89,"line":34170},[87,49907,33970],{"class":97},[87,49909,1677],{"class":171},[87,49911,33975],{"class":97},[87,49913,49914],{"class":89,"line":34176},[87,49915,33981],{"class":199},[87,49917,49918],{"class":89,"line":34196},[87,49919,33987],{"class":199},[87,49921,49922,49924,49926],{"class":89,"line":34202},[87,49923,33993],{"class":97},[87,49925,1677],{"class":171},[87,49927,33975],{"class":97},[87,49929,49930],{"class":89,"line":34208},[87,49931,34003],{"class":199},[87,49933,49934,49936,49938],{"class":89,"line":34218},[87,49935,34009],{"class":97},[87,49937,1677],{"class":171},[87,49939,34014],{"class":97},[87,49941,49942],{"class":89,"line":34223},[87,49943,34020],{"class":199},[87,49945,49946,49948,49950],{"class":89,"line":34229},[87,49947,34026],{"class":97},[87,49949,1677],{"class":171},[87,49951,34014],{"class":97},[87,49953,49954],{"class":89,"line":34245},[87,49955,3355],{"emptyLinePlaceholder":1029},[87,49957,49958],{"class":89,"line":34290},[87,49959,34041],{"class":199},[87,49961,49962,49964,49966,49968,49970,49972,49974,49976,49978,49980,49982,49984,49986,49988,49990,49992,49994,49996,49998,50000],{"class":89,"line":34296},[87,49963,33398],{"class":104},[87,49965,165],{"class":97},[87,49967,4546],{"class":949},[87,49969,33406],{"class":104},[87,49971,34055],{"class":949},[87,49973,1988],{"class":104},[87,49975,34060],{"class":171},[87,49977,2037],{"class":104},[87,49979,34065],{"class":949},[87,49981,1988],{"class":104},[87,49983,34060],{"class":171},[87,49985,2037],{"class":104},[87,49987,4546],{"class":949},[87,49989,34076],{"class":97},[87,49991,1625],{"class":171},[87,49993,1313],{"class":104},[87,49995,34083],{"class":97},[87,49997,1625],{"class":171},[87,49999,1313],{"class":104},[87,50001,34090],{"class":97},[87,50003,50004,50006,50008,50010,50012,50014,50016,50018,50020,50022,50024,50026,50028,50030,50032,50034,50036,50038,50040,50042],{"class":89,"line":34302},[87,50005,33398],{"class":104},[87,50007,165],{"class":97},[87,50009,4546],{"class":949},[87,50011,33406],{"class":104},[87,50013,34104],{"class":949},[87,50015,1988],{"class":104},[87,50017,34060],{"class":171},[87,50019,2037],{"class":104},[87,50021,34113],{"class":949},[87,50023,1988],{"class":104},[87,50025,34060],{"class":171},[87,50027,2037],{"class":104},[87,50029,4546],{"class":949},[87,50031,34124],{"class":97},[87,50033,1625],{"class":171},[87,50035,1313],{"class":104},[87,50037,34131],{"class":97},[87,50039,1625],{"class":171},[87,50041,1313],{"class":104},[87,50043,34090],{"class":97},[87,50045,50046],{"class":89,"line":34308},[87,50047,3355],{"emptyLinePlaceholder":1029},[87,50049,50050],{"class":89,"line":34319},[87,50051,34148],{"class":199},[87,50053,50054,50056,50058,50060,50062,50064,50066],{"class":89,"line":34325},[87,50055,3452],{"class":171},[87,50057,34156],{"class":97},[87,50059,1625],{"class":171},[87,50061,1313],{"class":104},[87,50063,2031],{"class":97},[87,50065,2051],{"class":171},[87,50067,34167],{"class":97},[87,50069,50070],{"class":89,"line":34331},[87,50071,34173],{"class":199},[87,50073,50074,50076,50078,50080,50082,50084,50086],{"class":89,"line":34337},[87,50075,34179],{"class":97},[87,50077,1141],{"class":104},[87,50079,946],{"class":171},[87,50081,34186],{"class":97},[87,50083,1625],{"class":171},[87,50085,1313],{"class":104},[87,50087,34193],{"class":97},[87,50089,50090],{"class":89,"line":34355},[87,50091,34199],{"class":199},[87,50093,50094],{"class":89,"line":34369},[87,50095,34205],{"class":199},[87,50097,50098,50100,50102],{"class":89,"line":34378},[87,50099,34211],{"class":97},[87,50101,946],{"class":171},[87,50103,33261],{"class":97},[87,50105,50106],{"class":89,"line":34387},[87,50107,3355],{"emptyLinePlaceholder":1029},[87,50109,50110],{"class":89,"line":34396},[87,50111,34226],{"class":199},[87,50113,50114,50116,50118,50120,50122],{"class":89,"line":34405},[87,50115,34232],{"class":97},[87,50117,946],{"class":171},[87,50119,34237],{"class":97},[87,50121,1625],{"class":171},[87,50123,34242],{"class":97},[87,50125,50126,50128,50130,50132,50134,50136,50138,50140,50142,50144,50146,50148,50150,50152,50154,50156,50158,50160],{"class":89,"line":34411},[87,50127,33398],{"class":104},[87,50129,165],{"class":97},[87,50131,34252],{"class":949},[87,50133,1988],{"class":104},[87,50135,34257],{"class":171},[87,50137,2037],{"class":104},[87,50139,1637],{"class":949},[87,50141,1988],{"class":104},[87,50143,34257],{"class":171},[87,50145,2037],{"class":104},[87,50147,34270],{"class":949},[87,50149,34273],{"class":97},[87,50151,34276],{"class":171},[87,50153,1999],{"class":104},[87,50155,34281],{"class":97},[87,50157,1423],{"class":171},[87,50159,1999],{"class":104},[87,50161,31444],{"class":97},[87,50163,50164],{"class":89,"line":34417},[87,50165,37680],{"class":199},[87,50167,50168],{"class":89,"line":34425},[87,50169,37685],{"class":199},[87,50171,50172,50174,50176],{"class":89,"line":34430},[87,50173,37690],{"class":97},[87,50175,34314],{"class":949},[87,50177,1108],{"class":97},[87,50179,50180],{"class":89,"line":34436},[87,50181,34334],{"class":199},[87,50183,50184,50186,50188,50190,50192,50194],{"class":89,"line":34447},[87,50185,34340],{"class":97},[87,50187,946],{"class":171},[87,50189,34345],{"class":97},[87,50191,34348],{"class":492},[87,50193,946],{"class":171},[87,50195,2503],{"class":97},[87,50197,50198,50200,50202,50204],{"class":89,"line":34453},[87,50199,34358],{"class":949},[87,50201,1951],{"class":97},[87,50203,34363],{"class":104},[87,50205,34366],{"class":97},[87,50207,50208,50210],{"class":89,"line":34473},[87,50209,34372],{"class":949},[87,50211,34375],{"class":97},[87,50213,50214,50216],{"class":89,"line":34479},[87,50215,34381],{"class":949},[87,50217,34384],{"class":97},[87,50219,50220,50222],{"class":89,"line":34485},[87,50221,34390],{"class":949},[87,50223,34393],{"class":97},[87,50225,50226,50228],{"class":89,"line":34491},[87,50227,34399],{"class":949},[87,50229,34402],{"class":97},[87,50231,50232],{"class":89,"line":34508},[87,50233,34408],{"class":97},[87,50235,50236],{"class":89,"line":34514},[87,50237,34414],{"class":199},[87,50239,50240,50242],{"class":89,"line":34520},[87,50241,5044],{"class":171},[87,50243,34422],{"class":97},[87,50245,50246],{"class":89,"line":34526},[87,50247,3355],{"emptyLinePlaceholder":1029},[87,50249,50250],{"class":89,"line":34532},[87,50251,34433],{"class":199},[87,50253,50254,50256,50258],{"class":89,"line":34538},[87,50255,32894],{"class":171},[87,50257,34441],{"class":205},[87,50259,34444],{"class":97},[87,50261,50262],{"class":89,"line":34565},[87,50263,34450],{"class":199},[87,50265,50266,50268,50270,50272,50274,50276,50278,50280],{"class":89,"line":34589},[87,50267,34456],{"class":97},[87,50269,32640],{"class":492},[87,50271,946],{"class":171},[87,50273,165],{"class":97},[87,50275,1592],{"class":104},[87,50277,1473],{"class":97},[87,50279,1389],{"class":104},[87,50281,31444],{"class":97},[87,50283,50284],{"class":89,"line":34595},[87,50285,34476],{"class":199},[87,50287,50288],{"class":89,"line":34601},[87,50289,34482],{"class":199},[87,50291,50292],{"class":89,"line":34607},[87,50293,34488],{"class":199},[87,50295,50296,50298,50300,50302,50304,50306,50308],{"class":89,"line":34618},[87,50297,32674],{"class":97},[87,50299,1313],{"class":104},[87,50301,1473],{"class":97},[87,50303,1176],{"class":104},[87,50305,1473],{"class":97},[87,50307,1313],{"class":104},[87,50309,1108],{"class":97},[87,50311,50312],{"class":89,"line":34629},[87,50313,34511],{"class":199},[87,50315,50316],{"class":89,"line":34635},[87,50317,34517],{"class":199},[87,50319,50320],{"class":89,"line":34652},[87,50321,34523],{"class":199},[87,50323,50324],{"class":89,"line":34675},[87,50325,34529],{"class":199},[87,50327,50328],{"class":89,"line":34698},[87,50329,34535],{"class":199},[87,50331,50332,50334,50336,50338,50340,50342,50344,50346,50348],{"class":89,"line":34704},[87,50333,34541],{"class":97},[87,50335,34544],{"class":949},[87,50337,34547],{"class":97},[87,50339,34550],{"class":949},[87,50341,1473],{"class":97},[87,50343,34555],{"class":492},[87,50345,946],{"class":171},[87,50347,34560],{"class":949},[87,50349,1108],{"class":97},[87,50351,50352,50354,50356,50358,50360,50362,50364,50366,50368],{"class":89,"line":34709},[87,50353,34541],{"class":97},[87,50355,34544],{"class":949},[87,50357,34572],{"class":97},[87,50359,34575],{"class":949},[87,50361,1473],{"class":97},[87,50363,34555],{"class":492},[87,50365,946],{"class":171},[87,50367,34584],{"class":949},[87,50369,1108],{"class":97},[87,50371,50372],{"class":89,"line":34718},[87,50373,34592],{"class":199},[87,50375,50376],{"class":89,"line":34728},[87,50377,34598],{"class":97},[87,50379,50380],{"class":89,"line":34734},[87,50381,34604],{"class":199},[87,50383,50384,50386,50388],{"class":89,"line":34739},[87,50385,34610],{"class":97},[87,50387,34613],{"class":949},[87,50389,1108],{"class":97},[87,50391,50392,50394,50396],{"class":89,"line":34745},[87,50393,34621],{"class":97},[87,50395,34624],{"class":949},[87,50397,1108],{"class":97},[87,50399,50400],{"class":89,"line":34758},[87,50401,34632],{"class":199},[87,50403,50404,50406,50408,50410,50412,50414,50416],{"class":89,"line":34764},[87,50405,32674],{"class":97},[87,50407,1313],{"class":104},[87,50409,1473],{"class":97},[87,50411,1176],{"class":104},[87,50413,1473],{"class":97},[87,50415,1176],{"class":104},[87,50417,1108],{"class":97},[87,50419,50420,50422,50424,50426,50428,50430,50432,50434,50436],{"class":89,"line":34775},[87,50421,34541],{"class":97},[87,50423,34544],{"class":949},[87,50425,34659],{"class":97},[87,50427,34550],{"class":949},[87,50429,1473],{"class":97},[87,50431,34555],{"class":492},[87,50433,946],{"class":171},[87,50435,34670],{"class":949},[87,50437,1108],{"class":97},[87,50439,50440,50442,50444,50446,50448,50450,50452,50454,50456],{"class":89,"line":34786},[87,50441,34541],{"class":97},[87,50443,34544],{"class":949},[87,50445,34682],{"class":97},[87,50447,34575],{"class":949},[87,50449,1473],{"class":97},[87,50451,34555],{"class":492},[87,50453,946],{"class":171},[87,50455,34693],{"class":949},[87,50457,1108],{"class":97},[87,50459,50460],{"class":89,"line":34805},[87,50461,34701],{"class":199},[87,50463,50465],{"class":89,"line":50464},219,[87,50466,34598],{"class":97},[87,50468,50470,50472,50474],{"class":89,"line":50469},220,[87,50471,34610],{"class":97},[87,50473,34544],{"class":949},[87,50475,1108],{"class":97},[87,50477,50479,50481,50483],{"class":89,"line":50478},221,[87,50480,34621],{"class":97},[87,50482,34723],{"class":949},[87,50484,1108],{"class":97},[87,50486,50488],{"class":89,"line":50487},222,[87,50489,34731],{"class":97},[87,50491,50493],{"class":89,"line":50492},223,[87,50494,3355],{"emptyLinePlaceholder":1029},[87,50496,50498],{"class":89,"line":50497},224,[87,50499,34742],{"class":199},[87,50501,50503,50505,50507,50509,50511],{"class":89,"line":50502},225,[87,50504,2488],{"class":171},[87,50506,32167],{"class":104},[87,50508,3903],{"class":171},[87,50510,32172],{"class":949},[87,50512,4693],{"class":97},[87,50514,50516],{"class":89,"line":50515},226,[87,50517,34761],{"class":199},[87,50519,50521,50523,50525],{"class":89,"line":50520},227,[87,50522,45493],{"class":97},[87,50524,946],{"class":171},[87,50526,45498],{"class":97},[87,50528,50530,50532,50534],{"class":89,"line":50529},228,[87,50531,34778],{"class":97},[87,50533,946],{"class":171},[87,50535,34783],{"class":97},[87,50537,50539,50541,50543,50545,50547,50549,50551],{"class":89,"line":50538},229,[87,50540,34340],{"class":97},[87,50542,946],{"class":171},[87,50544,45515],{"class":97},[87,50546,34796],{"class":492},[87,50548,946],{"class":171},[87,50550,1999],{"class":104},[87,50552,1108],{"class":97},[87,50554,50556],{"class":89,"line":50555},230,[87,50557,34808],{"class":97},[49,50559,50561],{"id":50560},"_242测试代码","2.4.2.测试代码",[19,50563,50564],{},"使用测试集进行测试与推理",[77,50566,50568],{"className":31325,"code":50567,"language":31327,"meta":82,"style":82},"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",[84,50569,50570,50576,50586,50596,50607,50617,50621,50625,50633,50638,50642,50659,50663,50667,50671,50675,50679,50711,50715,50723,50727,50739,50743,50747,50751,50755,50759,50763,50767,50771,50789,50803,50807,50817,50827,50837,50843,50847,50851,50859,50863,50879,50887,50891,50895,50903,50911,50915,50919,50923,50927,50933,50937,50947,50955,50963,50967,50971,50975,50983,50987,51003,51007,51011,51015,51027,51031,51043,51047,51051,51063,51067,51077,51081,51085,51097,51101,51109,51113,51117,51125,51129,51137,51141,51145,51149,51153,51157,51173,51181,51185,51189,51207,51213,51217,51227,51235,51243,51247,51251,51255,51259,51267,51271,51287,51291,51299,51307],{"__ignoreMap":82},[87,50571,50572,50574],{"class":89,"line":90},[87,50573,31339],{"class":171},[87,50575,31342],{"class":97},[87,50577,50578,50580,50582,50584],{"class":89,"line":101},[87,50579,31339],{"class":171},[87,50581,32362],{"class":97},[87,50583,32330],{"class":171},[87,50585,32367],{"class":97},[87,50587,50588,50590,50592,50594],{"class":89,"line":120},[87,50589,31684],{"class":171},[87,50591,32345],{"class":97},[87,50593,31339],{"class":171},[87,50595,32350],{"class":97},[87,50597,50598,50600,50602,50604],{"class":89,"line":222},[87,50599,31684],{"class":171},[87,50601,32315],{"class":97},[87,50603,31339],{"class":171},[87,50605,50606],{"class":97}," ImageFolder\n",[87,50608,50609,50611,50613,50615],{"class":89,"line":234},[87,50610,31684],{"class":171},[87,50612,32861],{"class":97},[87,50614,31339],{"class":171},[87,50616,45587],{"class":97},[87,50618,50619],{"class":89,"line":256},[87,50620,3355],{"emptyLinePlaceholder":1029},[87,50622,50623],{"class":89,"line":269},[87,50624,34898],{"class":199},[87,50626,50627,50629,50631],{"class":89,"line":463},[87,50628,32894],{"class":171},[87,50630,34905],{"class":205},[87,50632,32900],{"class":97},[87,50634,50635],{"class":89,"line":469},[87,50636,50637],{"class":199},"   # 导入自己的数据集，并进行数据处理\n",[87,50639,50640],{"class":89,"line":2287},[87,50641,48908],{"class":199},[87,50643,50644,50646,50648,50650,50652,50654,50657],{"class":89,"line":2568},[87,50645,48913],{"class":104},[87,50647,946],{"class":171},[87,50649,1763],{"class":171},[87,50651,1347],{"class":949},[87,50653,1651],{"class":104},[87,50655,50656],{"class":48924},"\u002Fdata\u002Ftest",[87,50658,26080],{"class":949},[87,50660,50661],{"class":89,"line":2573},[87,50662,3355],{"emptyLinePlaceholder":1029},[87,50664,50665],{"class":89,"line":2579},[87,50666,48936],{"class":199},[87,50668,50669],{"class":89,"line":2584},[87,50670,48941],{"class":199},[87,50672,50673],{"class":89,"line":2598},[87,50674,48946],{"class":199},[87,50676,50677],{"class":89,"line":2603},[87,50678,48951],{"class":199},[87,50680,50681,50683,50685,50687,50689,50691,50693,50695,50697,50699,50701,50703,50705,50707,50709],{"class":89,"line":2609},[87,50682,48956],{"class":97},[87,50684,946],{"class":171},[87,50686,48961],{"class":97},[87,50688,48964],{"class":104},[87,50690,1473],{"class":97},[87,50692,48969],{"class":104},[87,50694,1473],{"class":97},[87,50696,48974],{"class":104},[87,50698,48977],{"class":97},[87,50700,48980],{"class":104},[87,50702,1473],{"class":97},[87,50704,48985],{"class":104},[87,50706,1473],{"class":97},[87,50708,48990],{"class":104},[87,50710,5610],{"class":97},[87,50712,50713],{"class":89,"line":2630},[87,50714,48997],{"class":199},[87,50716,50717,50719,50721],{"class":89,"line":2635},[87,50718,49002],{"class":97},[87,50720,946],{"class":171},[87,50722,49007],{"class":97},[87,50724,50725],{"class":89,"line":2649},[87,50726,49012],{"class":199},[87,50728,50729,50731,50733,50735,50737],{"class":89,"line":2654},[87,50730,49017],{"class":97},[87,50732,32448],{"class":104},[87,50734,1473],{"class":97},[87,50736,32448],{"class":104},[87,50738,43569],{"class":97},[87,50740,50741],{"class":89,"line":2683},[87,50742,49030],{"class":199},[87,50744,50745],{"class":89,"line":2688},[87,50746,49035],{"class":97},[87,50748,50749],{"class":89,"line":2705},[87,50750,49040],{"class":97},[87,50752,50753],{"class":89,"line":2710},[87,50754,49045],{"class":199},[87,50756,50757],{"class":89,"line":2715},[87,50758,49050],{"class":199},[87,50760,50761],{"class":89,"line":2720},[87,50762,3355],{"emptyLinePlaceholder":1029},[87,50764,50765],{"class":89,"line":2734},[87,50766,49059],{"class":199},[87,50768,50769],{"class":89,"line":2739},[87,50770,49064],{"class":199},[87,50772,50773,50775,50777,50779,50781,50783,50785,50787],{"class":89,"line":3532},[87,50774,34912],{"class":97},[87,50776,946],{"class":171},[87,50778,49073],{"class":97},[87,50780,49076],{"class":104},[87,50782,1473],{"class":97},[87,50784,506],{"class":492},[87,50786,946],{"class":171},[87,50788,49085],{"class":97},[87,50790,50791,50793,50795,50797,50799,50801],{"class":89,"line":3546},[87,50792,34969],{"class":97},[87,50794,946],{"class":171},[87,50796,32481],{"class":97},[87,50798,32484],{"class":492},[87,50800,946],{"class":171},[87,50802,34980],{"class":97},[87,50804,50805],{"class":89,"line":3554},[87,50806,34985],{"class":199},[87,50808,50809,50811,50813,50815],{"class":89,"line":3559},[87,50810,34990],{"class":492},[87,50812,946],{"class":171},[87,50814,1313],{"class":104},[87,50816,32413],{"class":97},[87,50818,50819,50821,50823,50825],{"class":89,"line":3565},[87,50820,35001],{"class":492},[87,50822,946],{"class":171},[87,50824,32423],{"class":104},[87,50826,32413],{"class":97},[87,50828,50829,50831,50833,50835],{"class":89,"line":3571},[87,50830,35012],{"class":492},[87,50832,946],{"class":171},[87,50834,111],{"class":104},[87,50836,1108],{"class":97},[87,50838,50839,50841],{"class":89,"line":3576},[87,50840,5044],{"class":171},[87,50842,35025],{"class":97},[87,50844,50845],{"class":89,"line":8898},[87,50846,3355],{"emptyLinePlaceholder":1029},[87,50848,50849],{"class":89,"line":8922},[87,50850,35034],{"class":199},[87,50852,50853,50855,50857],{"class":89,"line":8927},[87,50854,32894],{"class":171},[87,50856,35041],{"class":205},[87,50858,35044],{"class":97},[87,50860,50861],{"class":89,"line":8933},[87,50862,35049],{"class":199},[87,50864,50865,50867,50869,50871,50873,50875,50877],{"class":89,"line":8960},[87,50866,32184],{"class":97},[87,50868,946],{"class":171},[87,50870,32191],{"class":949},[87,50872,2660],{"class":171},[87,50874,32196],{"class":97},[87,50876,2657],{"class":171},[87,50878,35066],{"class":949},[87,50880,50881,50883,50885],{"class":89,"line":8965},[87,50882,32236],{"class":97},[87,50884,946],{"class":171},[87,50886,33236],{"class":97},[87,50888,50889],{"class":89,"line":8971},[87,50890,3355],{"emptyLinePlaceholder":1029},[87,50892,50893],{"class":89,"line":8983},[87,50894,35083],{"class":199},[87,50896,50897,50899,50901],{"class":89,"line":8995},[87,50898,35088],{"class":97},[87,50900,946],{"class":171},[87,50902,33289],{"class":104},[87,50904,50905,50907,50909],{"class":89,"line":9007},[87,50906,35097],{"class":97},[87,50908,946],{"class":171},[87,50910,4039],{"class":104},[87,50912,50913],{"class":89,"line":10666},[87,50914,3355],{"emptyLinePlaceholder":1029},[87,50916,50917],{"class":89,"line":10691},[87,50918,35110],{"class":199},[87,50920,50921],{"class":89,"line":10714},[87,50922,35115],{"class":199},[87,50924,50925],{"class":89,"line":10738},[87,50926,35120],{"class":199},[87,50928,50929,50931],{"class":89,"line":10743},[87,50930,35125],{"class":171},[87,50932,33831],{"class":97},[87,50934,50935],{"class":89,"line":10748},[87,50936,35132],{"class":199},[87,50938,50939,50941,50943,50945],{"class":89,"line":10753},[87,50940,4357],{"class":171},[87,50942,35139],{"class":97},[87,50944,26990],{"class":171},[87,50946,35144],{"class":97},[87,50948,50949,50951,50953],{"class":89,"line":10762},[87,50950,35149],{"class":97},[87,50952,946],{"class":171},[87,50954,35154],{"class":97},[87,50956,50957,50959,50961],{"class":89,"line":10767},[87,50958,35159],{"class":97},[87,50960,946],{"class":171},[87,50962,35164],{"class":97},[87,50964,50965],{"class":89,"line":10773},[87,50966,35169],{"class":199},[87,50968,50969],{"class":89,"line":10794},[87,50970,33822],{"class":97},[87,50972,50973],{"class":89,"line":10800},[87,50974,35178],{"class":199},[87,50976,50977,50979,50981],{"class":89,"line":10814},[87,50978,33607],{"class":97},[87,50980,946],{"class":171},[87,50982,35187],{"class":97},[87,50984,50985],{"class":89,"line":10820},[87,50986,35192],{"class":199},[87,50988,50989,50991,50993,50995,50997,50999,51001],{"class":89,"line":10847},[87,50990,33624],{"class":97},[87,50992,946],{"class":171},[87,50994,33629],{"class":97},[87,50996,33632],{"class":492},[87,50998,946],{"class":171},[87,51000,1313],{"class":104},[87,51002,1108],{"class":97},[87,51004,51005],{"class":89,"line":10856},[87,51006,35213],{"class":199},[87,51008,51009],{"class":89,"line":10862},[87,51010,35218],{"class":199},[87,51012,51013],{"class":89,"line":10870},[87,51014,35223],{"class":199},[87,51016,51017,51019,51021,51023,51025],{"class":89,"line":10875},[87,51018,35228],{"class":97},[87,51020,10427],{"class":171},[87,51022,33734],{"class":97},[87,51024,3903],{"class":171},[87,51026,35237],{"class":97},[87,51028,51029],{"class":89,"line":17553},[87,51030,35242],{"class":199},[87,51032,51033,51035,51037,51039,51041],{"class":89,"line":17559},[87,51034,35247],{"class":97},[87,51036,10427],{"class":171},[87,51038,35252],{"class":97},[87,51040,111],{"class":104},[87,51042,1108],{"class":97},[87,51044,51045],{"class":89,"line":17582},[87,51046,3355],{"emptyLinePlaceholder":1029},[87,51048,51049],{"class":89,"line":17588},[87,51050,35265],{"class":199},[87,51052,51053,51055,51057,51059,51061],{"class":89,"line":17611},[87,51054,35270],{"class":97},[87,51056,946],{"class":171},[87,51058,35275],{"class":97},[87,51060,1677],{"class":171},[87,51062,35280],{"class":97},[87,51064,51065],{"class":89,"line":17625},[87,51066,35285],{"class":199},[87,51068,51069,51071,51073,51075],{"class":89,"line":17645},[87,51070,33398],{"class":104},[87,51072,165],{"class":97},[87,51074,35294],{"class":949},[87,51076,35297],{"class":97},[87,51078,51079],{"class":89,"line":17651},[87,51080,3355],{"emptyLinePlaceholder":1029},[87,51082,51083],{"class":89,"line":17662},[87,51084,35306],{"class":199},[87,51086,51087,51089,51091,51093,51095],{"class":89,"line":17685},[87,51088,2488],{"class":171},[87,51090,32167],{"class":104},[87,51092,3903],{"class":171},[87,51094,32172],{"class":949},[87,51096,4693],{"class":97},[87,51098,51099],{"class":89,"line":17707},[87,51100,35323],{"class":199},[87,51102,51103,51105,51107],{"class":89,"line":17712},[87,51104,32236],{"class":97},[87,51106,946],{"class":171},[87,51108,45498],{"class":97},[87,51110,51111],{"class":89,"line":17718},[87,51112,35336],{"class":199},[87,51114,51115],{"class":89,"line":17732},[87,51116,35341],{"class":199},[87,51118,51119,51121,51123],{"class":89,"line":17745},[87,51120,35346],{"class":97},[87,51122,35349],{"class":949},[87,51124,31444],{"class":97},[87,51126,51127],{"class":89,"line":17750},[87,51128,35356],{"class":199},[87,51130,51131,51133,51135],{"class":89,"line":17764},[87,51132,34969],{"class":97},[87,51134,946],{"class":171},[87,51136,35365],{"class":97},[87,51138,51139],{"class":89,"line":17769},[87,51140,35370],{"class":199},[87,51142,51143],{"class":89,"line":17775},[87,51144,35375],{"class":97},[87,51146,51147],{"class":89,"line":17780},[87,51148,3355],{"emptyLinePlaceholder":1029},[87,51150,51151],{"class":89,"line":17794},[87,51152,35384],{"class":199},[87,51154,51155],{"class":89,"line":17799},[87,51156,35389],{"class":199},[87,51158,51159,51161,51163,51165,51167,51169,51171],{"class":89,"line":17804},[87,51160,32184],{"class":97},[87,51162,946],{"class":171},[87,51164,32191],{"class":949},[87,51166,2660],{"class":171},[87,51168,32196],{"class":97},[87,51170,2657],{"class":171},[87,51172,35066],{"class":949},[87,51174,51175,51177,51179],{"class":89,"line":17818},[87,51176,32236],{"class":97},[87,51178,946],{"class":171},[87,51180,33236],{"class":97},[87,51182,51183],{"class":89,"line":17830},[87,51184,35418],{"class":199},[87,51186,51187],{"class":89,"line":17835},[87,51188,35423],{"class":199},[87,51190,51191,51193,51195,51197,51200,51202,51205],{"class":89,"line":17848},[87,51192,35428],{"class":97},[87,51194,946],{"class":171},[87,51196,1982],{"class":97},[87,51198,51199],{"class":949},"'猫'",[87,51201,1473],{"class":97},[87,51203,51204],{"class":949},"'狗'",[87,51206,34193],{"class":97},[87,51208,51209,51211],{"class":89,"line":17853},[87,51210,35125],{"class":171},[87,51212,33831],{"class":97},[87,51214,51215],{"class":89,"line":17858},[87,51216,35493],{"class":199},[87,51218,51219,51221,51223,51225],{"class":89,"line":17863},[87,51220,4357],{"class":171},[87,51222,35500],{"class":97},[87,51224,26990],{"class":171},[87,51226,35144],{"class":97},[87,51228,51229,51231,51233],{"class":89,"line":17876},[87,51230,33557],{"class":97},[87,51232,946],{"class":171},[87,51234,33562],{"class":97},[87,51236,51237,51239,51241],{"class":89,"line":17881},[87,51238,33572],{"class":97},[87,51240,946],{"class":171},[87,51242,33577],{"class":97},[87,51244,51245],{"class":89,"line":33580},[87,51246,3355],{"emptyLinePlaceholder":1029},[87,51248,51249],{"class":89,"line":33586},[87,51250,35529],{"class":199},[87,51252,51253],{"class":89,"line":33592},[87,51254,33822],{"class":97},[87,51256,51257],{"class":89,"line":33598},[87,51258,35538],{"class":199},[87,51260,51261,51263,51265],{"class":89,"line":33604},[87,51262,33607],{"class":97},[87,51264,946],{"class":171},[87,51266,33612],{"class":97},[87,51268,51269],{"class":89,"line":33615},[87,51270,35551],{"class":199},[87,51272,51273,51275,51277,51279,51281,51283,51285],{"class":89,"line":33621},[87,51274,33624],{"class":97},[87,51276,946],{"class":171},[87,51278,33629],{"class":97},[87,51280,33632],{"class":492},[87,51282,946],{"class":171},[87,51284,1313],{"class":104},[87,51286,1108],{"class":97},[87,51288,51289],{"class":89,"line":33641},[87,51290,35572],{"class":199},[87,51292,51293,51295,51297],{"class":89,"line":33647},[87,51294,35577],{"class":97},[87,51296,946],{"class":171},[87,51298,35582],{"class":97},[87,51300,51301,51303,51305],{"class":89,"line":33658},[87,51302,35587],{"class":97},[87,51304,946],{"class":171},[87,51306,35592],{"class":97},[87,51308,51309,51311,51313,51315,51317,51319,51321,51323],{"class":89,"line":33664},[87,51310,35597],{"class":104},[87,51312,165],{"class":97},[87,51314,35602],{"class":949},[87,51316,35605],{"class":97},[87,51318,35608],{"class":949},[87,51320,1473],{"class":97},[87,51322,35613],{"class":949},[87,51324,35616],{"class":97},[1006,51326,51327],{},"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":82,"searchDepth":101,"depth":101,"links":51329},[51330,51331,51332,51333],{"id":31538,"depth":120,"text":31539},{"id":38786,"depth":120,"text":38787},{"id":42219,"depth":120,"text":42220},{"id":46228,"depth":120,"text":46229},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31530,"description":1026},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51340,"title":51341,"body":51342,"description":1026,"extension":1027,"meta":51349,"navigation":1029,"path":51350,"seo":51351,"stem":51352,"__hash__":51353},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51343,"toc":51347},[51344],[10,51345,51341],{"id":51346},"_3yolo模型学习",{"title":82,"searchDepth":101,"depth":101,"links":51348},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51341,"description":1026},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51355,"title":51356,"body":51357,"description":51364,"extension":1027,"meta":51365,"navigation":1029,"path":51367,"seo":51368,"stem":51369,"__hash__":51370},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51358,"toc":51362},[51359],[19,51360,51361],{},"yolo模型还未补充",{"title":82,"searchDepth":101,"depth":101,"links":51363},[],"深度学习学习",{"category":51366},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51356,"description":51364},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51372,"title":51373,"body":51374,"description":1026,"extension":1027,"meta":51399,"navigation":1029,"path":51400,"seo":51401,"stem":51402,"__hash__":51403},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51375,"toc":51397},[51376,51379,51382,51387,51394],[10,51377,51373],{"id":51378},"_1工具",[19,51380,51381],{},"提示错误插件：有问题会提前报错",[19,51383,51384],{},[39,51385],{"alt":82,"src":51386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,51388,51389],{},[1334,51390,51393],{"href":51391,"rel":51392},"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",[24812],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,51395,51396],{},"alt键加上下箭头可以实现语句的移动",{"title":82,"searchDepth":101,"depth":101,"links":51398},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51373,"description":1026},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51405,"title":51406,"body":51407,"description":1026,"extension":1027,"meta":54262,"navigation":1029,"path":54263,"seo":54264,"stem":54265,"__hash__":54266},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51408,"toc":54213},[51409,51412,51416,51420,51425,51428,51433,51437,51444,51449,51456,51461,51468,51473,51477,51482,51485,51489,51494,51498,51503,51506,51509,51512,51515,51518,51521,51524,51527,51532,51537,51542,51546,51549,51552,51556,51561,51564,51572,51577,51594,51602,51607,51612,51617,51622,51627,51630,51635,51640,51644,51653,51658,51663,51667,51672,51675,51679,51684,51692,51697,51702,51705,51710,51715,51720,51723,51726,51729,51734,51739,51742,51747,51750,51755,51758,51761,51764,51769,51772,51775,51790,51795,51800,51805,51808,51811,51814,51828,51831,51836,51841,51844,51847,51850,51853,51856,51859,51862,51866,51870,51875,51879,51882,51887,51892,51895,51900,51903,51907,51912,51915,51918,51921,51924,51927,51930,51933,51936,51939,51943,51948,51953,51958,51961,51964,51968,51973,51976,51980,51983,51986,51991,51994,51997,52001,52005,52008,52013,52018,52021,52050,52055,52060,52065,52070,52074,52079,52083,52088,52091,52095,52099,52104,52108,52113,52118,52122,52127,52130,52132,52135,52140,52144,52149,52153,52157,52162,52167,52172,52177,52181,52186,52191,52196,52199,52202,52207,52210,52215,52220,52225,52230,52234,53032,53036,53379,53384,53387,53390,53393,53396,53399,53402,53405,53408,53410,53413,53415,53418,53422,53427,53430,53433,53436,53440,53445,53450,53470,53473,53477,53482,53487,53504,53508,53537,53541,53563,53565,53604,53612,53618,53622,53625,53628,53633,53638,53641,53644,53647,53652,53657,53660,53663,53666,53669,53672,53675,53678,53681,53684,53687,53690,53692,53695,53698,53701,53704,53707,53710,53713,53716,53720,53725,53728,53733,53736,53739,53742,53745,53748,53751,53754,53756,53759,53762,53765,53768,53771,53774,53778,53781,53790,53793,53798,53801,53806,53809,53812,53815,53818,53821,53824,53827,53831,53835,53838,53841,53846,53851,53856,53860,53865,53870,53873,53876,53879,53882,53885,53890,53893,53898,53900,53905,53908,53912,53917,53920,53923,53928,53932,53935,53940,53943,53946,53975,53980,53983,53986,53989,53992,53995,53999,54002,54088,54092,54095,54100,54105,54112,54115,54118,54121,54124,54127,54132,54137,54140,54143,54146,54149,54152,54155,54158,54161,54164,54166,54169,54173,54178,54183,54188,54191,54196,54201,54204,54207,54210],[10,51410,51406],{"id":51411},"_2基础语法",[14,51413,51415],{"id":51414},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[44,51417,51419],{"id":51418},"_211-js组成","2.1.1 js组成",[1055,51421,51422],{},[29,51423,51424],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,51426,51427],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[1055,51429,51430],{"start":101},[29,51431,51432],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[44,51434,51436],{"id":51435},"_212-js书写位置","2.1.2 js书写位置",[1055,51438,51439],{},[29,51440,51441],{},[57,51442,51443],{},"内部 JavaScript",[19,51445,51446],{},[39,51447],{"alt":82,"src":51448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[1055,51450,51451],{"start":101},[29,51452,51453],{},[57,51454,51455],{},"外部 JavaScript",[19,51457,51458],{},[39,51459],{"alt":82,"src":51460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[1055,51462,51463],{"start":120},[29,51464,51465],{},[57,51466,51467],{},"内联 JavaScript",[19,51469,51470],{},[39,51471],{"alt":82,"src":51472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[44,51474,51476],{"id":51475},"_213-javascript注释","2.1.3 JavaScript注释",[19,51478,51479],{},[39,51480],{"alt":82,"src":51481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,51483,51484],{},"alt+shift+a一定要记住！",[44,51486,51488],{"id":51487},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,51490,51491],{},[39,51492],{"alt":82,"src":51493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[44,51495,51497],{"id":51496},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[1055,51499,51500],{},[29,51501,51502],{},"输出语法：",[19,51504,51505],{},"①document.write('要出的内容')",[19,51507,51508],{},"向body内输出内容；",[19,51510,51511],{},"如果输出的内容写的是标签，也会被解析cheng",[19,51513,51514],{},"②alert('要出的内容')",[19,51516,51517],{},"页面弹出警告对话框",[19,51519,51520],{},"③console.log('控制台打印')",[19,51522,51523],{},"控制台输出语法，程序员调试使用",[19,51525,51526],{},"输入log就行，自动生成：",[19,51528,51529],{},[39,51530],{"alt":82,"src":51531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[1055,51533,51534],{"start":101},[29,51535,51536],{},"输入语法：",[19,51538,51539],{},[39,51540],{"alt":82,"src":51541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[44,51543,51545],{"id":51544},"_2116-字面量","21.1.6 字面量",[19,51547,51548],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,51550,51551],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,51553,51555],{"id":51554},"_22-变量","2.2 变量",[1055,51557,51558],{},[29,51559,51560],{},"变量声明",[19,51562,51563],{},"let 变量名",[26,51565,51566,51569],{},[29,51567,51568],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[29,51570,51571],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[1055,51573,51574],{"start":101},[29,51575,51576],{},"变量赋值",[77,51578,51582],{"className":51579,"code":51580,"language":51581,"meta":82,"style":82},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[84,51583,51584,51589],{"__ignoreMap":82},[87,51585,51586],{"class":89,"line":90},[87,51587,51588],{"class":97},"let age\n",[87,51590,51591],{"class":89,"line":101},[87,51592,51593],{"class":97},"age=18\n",[1055,51595,51596,51599],{"start":120},[29,51597,51598],{},"连这些（变量的初始化）：let age=18",[29,51600,51601],{},"更新变量",[19,51603,51604],{},[39,51605],{"alt":82,"src":51606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[1055,51608,51609],{"start":234},[29,51610,51611],{},"声明多个变量",[19,51613,51614],{},[39,51615],{"alt":82,"src":51616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[1055,51618,51619],{"start":256},[29,51620,51621],{},"变量命名规则与规范",[19,51623,51624],{},[39,51625],{"alt":82,"src":51626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,51628,51629],{},"遵守小驼峰！",[1055,51631,51632],{"start":269},[29,51633,51634],{},"变量拓展-let和var的区别",[19,51636,51637],{},[39,51638],{"alt":82,"src":51639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,51641,51643],{"id":51642},"_23-数组","2.3 数组",[77,51645,51647],{"className":51579,"code":51646,"language":51581,"meta":82,"style":82},"let arr = []\n",[84,51648,51649],{"__ignoreMap":82},[87,51650,51651],{"class":89,"line":90},[87,51652,51646],{"class":97},[19,51654,51655],{},[39,51656],{"alt":82,"src":51657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,51659,51660],{},[39,51661],{"alt":82,"src":51662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,51664,51666],{"id":51665},"_24-常量","2.4 常量",[19,51668,51669],{},[39,51670],{"alt":82,"src":51671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,51673,51674],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51676,51678],{"id":51677},"_25-数据类型","2.5 数据类型",[19,51680,51681],{},[39,51682],{"alt":82,"src":51683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[1055,51685,51686,51689],{},[29,51687,51688],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[29,51690,51691],{},"算数运算符：",[19,51693,51694],{},[39,51695],{"alt":82,"src":51696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[1055,51698,51699],{"start":120},[29,51700,51701],{},"数字类型（Number）",[19,51703,51704],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,51706,51707],{},[39,51708],{"alt":82,"src":51709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[1055,51711,51712],{"start":222},[29,51713,51714],{},"字符串类型（string）",[19,51716,51717],{},[39,51718],{"alt":82,"src":51719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,51721,51722],{},"反引号也是可以使用的",[19,51724,51725],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,51727,51728],{},"例如：document.write(\"我今年\"+age+\"岁\")",[1055,51730,51731],{"start":234},[29,51732,51733],{},"模板字符串",[19,51735,51736],{},[39,51737],{"alt":82,"src":51738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,51740,51741],{},"类似于python的字符串格式化",[1055,51743,51744],{"start":256},[29,51745,51746],{},"布尔类型",[19,51748,51749],{},"true 和 false",[1055,51751,51752],{"start":269},[29,51753,51754],{},"未定义类型（underfined）",[19,51756,51757],{},"表示没有赋值",[19,51759,51760],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,51762,51763],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[1055,51765,51766],{"start":463},[29,51767,51768],{},"null（空类型）",[19,51770,51771],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,51773,51774],{},"赋值了，但是内容为空",[77,51776,51778],{"className":51579,"code":51777,"language":51581,"meta":82,"style":82},"typeof null\n输出的是'object'，是一个对象数据类型\n",[84,51779,51780,51785],{"__ignoreMap":82},[87,51781,51782],{"class":89,"line":90},[87,51783,51784],{"class":97},"typeof null\n",[87,51786,51787],{"class":89,"line":101},[87,51788,51789],{"class":97},"输出的是'object'，是一个对象数据类型\n",[1055,51791,51792],{"start":469},[29,51793,51794],{},"控制台检测数据类型",[19,51796,51797],{},[39,51798],{"alt":82,"src":51799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[1055,51801,51802],{"start":2287},[29,51803,51804],{},"类型转换",[19,51806,51807],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,51809,51810],{},"转换方式：隐式转换和显示转换",[19,51812,51813],{},"①隐式转换",[26,51815,51816,51819,51822,51825],{},[29,51817,51818],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[29,51820,51821],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[29,51823,51824],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[29,51826,51827],{},"任何数据和字符串相加结果都是字符串",[19,51829,51830],{},"②显示转换",[19,51832,51833],{},[39,51834],{"alt":82,"src":51835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,51837,51838],{},[39,51839],{"alt":82,"src":51840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,51842,51843],{},"在输入的时候要用好隐式转换，简单写起来",[19,51845,51846],{},"let num = +prompt(’请输入数字：‘)",[19,51848,51849],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,51851,51852],{},"console.log(parseInt('12.333px'))",[19,51854,51855],{},"输出为：12",[19,51857,51858],{},"console.log(parseInt('a'a'a12.333px'))",[19,51860,51861],{},"输出：NaN",[14,51863,51865],{"id":51864},"_26-运算符","2.6 运算符",[44,51867,51869],{"id":51868},"_261-赋值运算符","2.6.1 赋值运算符",[19,51871,51872],{},[39,51873],{"alt":82,"src":51874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[44,51876,51878],{"id":51877},"_262-一元运算符","2.6.2 一元运算符",[19,51880,51881],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51883,51884],{},[39,51885],{"alt":82,"src":51886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51888,51889],{},[39,51890],{"alt":82,"src":51891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51893,51894],{},"两者的区别：",[19,51896,51897],{},[39,51898],{"alt":82,"src":51899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51901,51902],{},"前置先自加；后置后加，代码执行完之后再加",[44,51904,51906],{"id":51905},"_263-比较运算符","2.6.3 比较运算符",[19,51908,51909],{},[39,51910],{"alt":82,"src":51911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51913,51914],{},"比较运算符也有隐式转换",[19,51916,51917],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51919,51920],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51922,51923],{},"要使用三等，开发的时候",[19,51925,51926],{},"NaN不等于任何人，包括它自己",[19,51928,51929],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51931,51932],{},"7\u002F10=0.7",[19,51934,51935],{},"最后：0.5+0.2=0.7",[19,51937,51938],{},"字符串比较，比较的是字符对应的ASCII码",[44,51940,51942],{"id":51941},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51944,51945],{},[39,51946],{"alt":82,"src":51947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51949,51950],{},[39,51951],{"alt":82,"src":51952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51954,51955],{},[39,51956],{"alt":82,"src":51957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51959,51960],{},"上述题目选D",[19,51962,51963],{},"与真2假1；或真1假2",[44,51965,51967],{"id":51966},"_265-运算符优先级","2.6.5 运算符优先级",[19,51969,51970],{},[39,51971],{"alt":82,"src":51972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51974,51975],{},"先算逻辑与，后算逻辑或",[14,51977,51979],{"id":51978},"_27-语句","2.7 语句",[19,51981,51982],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51984,51985],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51987,51988],{},[39,51989],{"alt":82,"src":51990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51992,51993],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51995,51996],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[44,51998,52000],{"id":51999},"_271-分支语句","2.7.1 分支语句",[49,52002,52004],{"id":52003},"_2711-if分支语句","2.7.1.1 if分支语句",[19,52006,52007],{},"if语句单行简单的话，可以不写{}，写在一行就行",[1055,52009,52010],{},[29,52011,52012],{},"单分支语句",[19,52014,52015],{},[39,52016],{"alt":82,"src":52017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,52019,52020],{},"除了0，所有数字都为真",[77,52022,52024],{"className":51579,"code":52023,"language":51581,"meta":82,"style":82},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[84,52025,52026,52031,52036,52041,52045],{"__ignoreMap":82},[87,52027,52028],{"class":89,"line":90},[87,52029,52030],{"class":97},"if（0) {\n",[87,52032,52033],{"class":89,"line":101},[87,52034,52035],{"class":97},"    let a=1\n",[87,52037,52038],{"class":89,"line":120},[87,52039,52040],{"class":97},"    alert(typeof a)\n",[87,52042,52043],{"class":89,"line":222},[87,52044,123],{"class":97},[87,52046,52047],{"class":89,"line":234},[87,52048,52049],{"class":97},"不输出，括号为假\n",[1055,52051,52052],{"start":101},[29,52053,52054],{},"双分支语句",[19,52056,52057],{},[39,52058],{"alt":82,"src":52059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[1055,52061,52062],{"start":120},[29,52063,52064],{},"多分支语句",[19,52066,52067],{},[39,52068],{"alt":82,"src":52069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[49,52071,52073],{"id":52072},"_2712-三元运算符","2.7.1.2 三元运算符",[19,52075,52076],{},[39,52077],{"alt":82,"src":52078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[49,52080,52082],{"id":52081},"_2713-switch语句","2.7.1.3 switch语句",[19,52084,52085],{},[39,52086],{"alt":82,"src":52087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,52089,52090],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[44,52092,52094],{"id":52093},"_272-循环语句","2.7.2 循环语句",[49,52096,52098],{"id":52097},"_2721-断点演示","2.7.2.1 断点演示",[19,52100,52101],{},[39,52102],{"alt":82,"src":52103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[49,52105,52107],{"id":52106},"_2722-while循环","2.7.2.2 while循环",[19,52109,52110],{},[39,52111],{"alt":82,"src":52112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,52114,52115],{},[39,52116],{"alt":82,"src":52117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[49,52119,52121],{"id":52120},"_2723-for循环","2.7.2.3 for循环",[19,52123,52124],{},[39,52125],{"alt":82,"src":52126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,52128,52129],{},"for(;;) {",[19,52131,2037],{},[19,52133,52134],{},"表示无限循环",[19,52136,52137],{},[39,52138],{"alt":82,"src":52139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[49,52141,52143],{"id":52142},"_2724-循环的退出","2.7.2.4 循环的退出",[19,52145,52146],{},[39,52147],{"alt":82,"src":52148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52150,52152],{"id":52151},"_28-数组","2.8 数组",[44,52154,52156],{"id":52155},"_281-基础认识","2.8.1 基础认识",[19,52158,52159],{},[39,52160],{"alt":82,"src":52161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,52163,52164],{},[39,52165],{"alt":82,"src":52166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,52168,52169],{},[39,52170],{"alt":82,"src":52171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,52173,52174],{},[39,52175],{"alt":82,"src":52176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[44,52178,52180],{"id":52179},"_282-操作数组","2.8.2 操作数组",[19,52182,52183],{},[39,52184],{"alt":82,"src":52185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[1055,52187,52188],{},[29,52189,52190],{},"添加元素",[19,52192,52193],{},[39,52194],{"alt":82,"src":52195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,52197,52198],{},"console.log(arr.push('green'))",[19,52200,52201],{},"输出结果：为新数组的长度",[19,52203,52204],{},[39,52205],{"alt":82,"src":52206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,52208,52209],{},"push用的非常多，一定要记住",[1055,52211,52212],{},[29,52213,52214],{},"删除元素",[19,52216,52217],{},[39,52218],{"alt":82,"src":52219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,52221,52222],{},[39,52223],{"alt":82,"src":52224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,52226,52227],{},[39,52228],{"alt":82,"src":52229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[44,52231,52233],{"id":52232},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[77,52235,52237],{"className":51579,"code":52236,"language":51581,"meta":82,"style":82},"\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",[84,52238,52239,52252,52268,52272,52281,52299,52323,52345,52359,52367,52374,52385,52396,52400,52404,52411,52423,52437,52450,52468,52485,52499,52511,52523,52534,52538,52542,52552,52562,52574,52586,52598,52609,52613,52617,52629,52633,52647,52651,52655,52666,52680,52692,52706,52710,52719,52727,52731,52740,52744,52753,52758,52763,52776,52804,52809,52814,52839,52844,52848,52853,52858,52873,52877,52882,52912,52924,52940,52956,52970,52975,52982,52986,52991,53004,53012,53020,53024],{"__ignoreMap":82},[87,52240,52241,52244,52247,52250],{"class":89,"line":90},[87,52242,52243],{"class":97},"\u003C!",[87,52245,52246],{"class":93},"DOCTYPE",[87,52248,52249],{"class":205}," html",[87,52251,953],{"class":97},[87,52253,52254,52256,52258,52261,52263,52266],{"class":89,"line":101},[87,52255,938],{"class":97},[87,52257,51581],{"class":93},[87,52259,52260],{"class":205}," lang",[87,52262,946],{"class":97},[87,52264,52265],{"class":949},"\"en\"",[87,52267,953],{"class":97},[87,52269,52270],{"class":89,"line":120},[87,52271,3355],{"emptyLinePlaceholder":1029},[87,52273,52274,52276,52279],{"class":89,"line":222},[87,52275,938],{"class":97},[87,52277,52278],{"class":93},"head",[87,52280,953],{"class":97},[87,52282,52283,52286,52289,52292,52294,52297],{"class":89,"line":234},[87,52284,52285],{"class":97},"    \u003C",[87,52287,52288],{"class":93},"meta",[87,52290,52291],{"class":205}," charset",[87,52293,946],{"class":97},[87,52295,52296],{"class":949},"\"UTF-8\"",[87,52298,953],{"class":97},[87,52300,52301,52303,52305,52308,52310,52313,52316,52318,52321],{"class":89,"line":256},[87,52302,52285],{"class":97},[87,52304,52288],{"class":93},[87,52306,52307],{"class":205}," http-equiv",[87,52309,946],{"class":97},[87,52311,52312],{"class":949},"\"X-UA-Compatible\"",[87,52314,52315],{"class":205}," content",[87,52317,946],{"class":97},[87,52319,52320],{"class":949},"\"IE=edge\"",[87,52322,953],{"class":97},[87,52324,52325,52327,52329,52331,52333,52336,52338,52340,52343],{"class":89,"line":269},[87,52326,52285],{"class":97},[87,52328,52288],{"class":93},[87,52330,15870],{"class":205},[87,52332,946],{"class":97},[87,52334,52335],{"class":949},"\"viewport\"",[87,52337,52315],{"class":205},[87,52339,946],{"class":97},[87,52341,52342],{"class":949},"\"width=device-width, initial-scale=1.0\"",[87,52344,953],{"class":97},[87,52346,52347,52349,52352,52355,52357],{"class":89,"line":463},[87,52348,52285],{"class":97},[87,52350,52351],{"class":93},"title",[87,52353,52354],{"class":97},">Document\u003C\u002F",[87,52356,52351],{"class":93},[87,52358,953],{"class":97},[87,52360,52361,52363,52365],{"class":89,"line":469},[87,52362,52285],{"class":97},[87,52364,1006],{"class":93},[87,52366,953],{"class":97},[87,52368,52369,52372],{"class":89,"line":2287},[87,52370,52371],{"class":93},"        *",[87,52373,98],{"class":97},[87,52375,52376,52379,52381,52383],{"class":89,"line":2568},[87,52377,52378],{"class":104},"            margin",[87,52380,108],{"class":97},[87,52382,111],{"class":104},[87,52384,117],{"class":97},[87,52386,52387,52390,52392,52394],{"class":89,"line":2573},[87,52388,52389],{"class":104},"            padding",[87,52391,108],{"class":97},[87,52393,111],{"class":104},[87,52395,117],{"class":97},[87,52397,52398],{"class":89,"line":2579},[87,52399,3484],{"class":97},[87,52401,52402],{"class":89,"line":2584},[87,52403,3355],{"emptyLinePlaceholder":1029},[87,52405,52406,52409],{"class":89,"line":2598},[87,52407,52408],{"class":205},"        .box",[87,52410,98],{"class":97},[87,52412,52413,52416,52418,52421],{"class":89,"line":2603},[87,52414,52415],{"class":104},"            display",[87,52417,108],{"class":97},[87,52419,52420],{"class":104},"flex",[87,52422,117],{"class":97},[87,52424,52425,52428,52430,52433,52435],{"class":89,"line":2609},[87,52426,52427],{"class":104},"            width",[87,52429,108],{"class":97},[87,52431,52432],{"class":104},"700",[87,52434,245],{"class":171},[87,52436,117],{"class":97},[87,52438,52439,52442,52444,52446,52448],{"class":89,"line":2630},[87,52440,52441],{"class":104},"            height",[87,52443,108],{"class":97},[87,52445,4927],{"class":104},[87,52447,245],{"class":171},[87,52449,117],{"class":97},[87,52451,52452,52455,52457,52459,52461,52463,52466],{"class":89,"line":2635},[87,52453,52454],{"class":104},"            border-left",[87,52456,108],{"class":97},[87,52458,1313],{"class":104},[87,52460,245],{"class":171},[87,52462,248],{"class":104},[87,52464,52465],{"class":104}," pink",[87,52467,117],{"class":97},[87,52469,52470,52473,52475,52477,52479,52481,52483],{"class":89,"line":2649},[87,52471,52472],{"class":104},"            border-bottom",[87,52474,108],{"class":97},[87,52476,1313],{"class":104},[87,52478,245],{"class":171},[87,52480,248],{"class":104},[87,52482,52465],{"class":104},[87,52484,117],{"class":97},[87,52486,52487,52489,52491,52493,52495,52497],{"class":89,"line":2654},[87,52488,52378],{"class":104},[87,52490,108],{"class":97},[87,52492,1749],{"class":104},[87,52494,245],{"class":171},[87,52496,114],{"class":104},[87,52498,117],{"class":97},[87,52500,52501,52504,52506,52509],{"class":89,"line":2683},[87,52502,52503],{"class":104},"            justify-content",[87,52505,108],{"class":97},[87,52507,52508],{"class":104},"space-around",[87,52510,117],{"class":97},[87,52512,52513,52516,52518,52521],{"class":89,"line":2688},[87,52514,52515],{"class":104},"            align-items",[87,52517,108],{"class":97},[87,52519,52520],{"class":104},"flex-end",[87,52522,117],{"class":97},[87,52524,52525,52528,52530,52532],{"class":89,"line":2705},[87,52526,52527],{"class":104},"            text-align",[87,52529,108],{"class":97},[87,52531,318],{"class":104},[87,52533,117],{"class":97},[87,52535,52536],{"class":89,"line":2710},[87,52537,3484],{"class":97},[87,52539,52540],{"class":89,"line":2715},[87,52541,3355],{"emptyLinePlaceholder":1029},[87,52543,52544,52546,52548,52550],{"class":89,"line":2720},[87,52545,52408],{"class":205},[87,52547,2051],{"class":171},[87,52549,94],{"class":93},[87,52551,98],{"class":97},[87,52553,52554,52556,52558,52560],{"class":89,"line":2734},[87,52555,52415],{"class":104},[87,52557,108],{"class":97},[87,52559,52420],{"class":104},[87,52561,117],{"class":97},[87,52563,52564,52566,52568,52570,52572],{"class":89,"line":2739},[87,52565,52427],{"class":104},[87,52567,108],{"class":97},[87,52569,1749],{"class":104},[87,52571,245],{"class":171},[87,52573,117],{"class":97},[87,52575,52576,52579,52581,52584],{"class":89,"line":3532},[87,52577,52578],{"class":104},"            background-color",[87,52580,108],{"class":97},[87,52582,52583],{"class":104},"pink",[87,52585,117],{"class":97},[87,52587,52588,52591,52593,52596],{"class":89,"line":3546},[87,52589,52590],{"class":104},"            flex-direction",[87,52592,108],{"class":97},[87,52594,52595],{"class":104},"column",[87,52597,117],{"class":97},[87,52599,52600,52602,52604,52607],{"class":89,"line":3554},[87,52601,52503],{"class":104},[87,52603,108],{"class":97},[87,52605,52606],{"class":104},"space-between",[87,52608,117],{"class":97},[87,52610,52611],{"class":89,"line":3559},[87,52612,3484],{"class":97},[87,52614,52615],{"class":89,"line":3565},[87,52616,3355],{"emptyLinePlaceholder":1029},[87,52618,52619,52621,52624,52627],{"class":89,"line":3571},[87,52620,52408],{"class":205},[87,52622,52623],{"class":93}," div",[87,52625,52626],{"class":93}," span",[87,52628,98],{"class":97},[87,52630,52631],{"class":89,"line":3576},[87,52632,3355],{"emptyLinePlaceholder":1029},[87,52634,52635,52638,52640,52643,52645],{"class":89,"line":8898},[87,52636,52637],{"class":104},"            margin-top",[87,52639,108],{"class":97},[87,52641,52642],{"class":104},"-20",[87,52644,245],{"class":171},[87,52646,117],{"class":97},[87,52648,52649],{"class":89,"line":8922},[87,52650,3484],{"class":97},[87,52652,52653],{"class":89,"line":8927},[87,52654,3355],{"emptyLinePlaceholder":1029},[87,52656,52657,52659,52661,52664],{"class":89,"line":8933},[87,52658,52408],{"class":205},[87,52660,52623],{"class":93},[87,52662,52663],{"class":93}," h4",[87,52665,98],{"class":97},[87,52667,52668,52671,52673,52676,52678],{"class":89,"line":8960},[87,52669,52670],{"class":104},"            margin-bottom",[87,52672,108],{"class":97},[87,52674,52675],{"class":104},"-35",[87,52677,245],{"class":171},[87,52679,117],{"class":97},[87,52681,52682,52684,52686,52688,52690],{"class":89,"line":8965},[87,52683,52427],{"class":104},[87,52685,108],{"class":97},[87,52687,1451],{"class":104},[87,52689,245],{"class":171},[87,52691,117],{"class":97},[87,52693,52694,52697,52699,52702,52704],{"class":89,"line":8971},[87,52695,52696],{"class":104},"            margin-left",[87,52698,108],{"class":97},[87,52700,52701],{"class":104},"-10",[87,52703,245],{"class":171},[87,52705,117],{"class":97},[87,52707,52708],{"class":89,"line":8983},[87,52709,3484],{"class":97},[87,52711,52712,52715,52717],{"class":89,"line":8995},[87,52713,52714],{"class":97},"    \u003C\u002F",[87,52716,1006],{"class":93},[87,52718,953],{"class":97},[87,52720,52721,52723,52725],{"class":89,"line":9007},[87,52722,963],{"class":97},[87,52724,52278],{"class":93},[87,52726,953],{"class":97},[87,52728,52729],{"class":89,"line":10666},[87,52730,3355],{"emptyLinePlaceholder":1029},[87,52732,52733,52735,52738],{"class":89,"line":10691},[87,52734,938],{"class":97},[87,52736,52737],{"class":93},"body",[87,52739,953],{"class":97},[87,52741,52742],{"class":89,"line":10714},[87,52743,3355],{"emptyLinePlaceholder":1029},[87,52745,52746,52748,52751],{"class":89,"line":10738},[87,52747,52285],{"class":97},[87,52749,52750],{"class":93},"script",[87,52752,953],{"class":97},[87,52754,52755],{"class":89,"line":10743},[87,52756,52757],{"class":199},"        \u002F\u002F 1. 四次弹框效果\n",[87,52759,52760],{"class":89,"line":10748},[87,52761,52762],{"class":199},"        \u002F\u002F 声明一个新的数组\n",[87,52764,52765,52768,52771,52773],{"class":89,"line":10753},[87,52766,52767],{"class":171},"        let",[87,52769,52770],{"class":97}," arr ",[87,52772,946],{"class":171},[87,52774,52775],{"class":97}," []\n",[87,52777,52778,52780,52782,52785,52787,52789,52791,52793,52795,52798,52800,52802],{"class":89,"line":10762},[87,52779,4357],{"class":171},[87,52781,2614],{"class":97},[87,52783,52784],{"class":171},"let",[87,52786,10388],{"class":97},[87,52788,946],{"class":171},[87,52790,568],{"class":104},[87,52792,10395],{"class":97},[87,52794,2544],{"class":171},[87,52796,52797],{"class":104}," 4",[87,52799,4168],{"class":97},[87,52801,3247],{"class":171},[87,52803,13392],{"class":97},[87,52805,52806],{"class":89,"line":10767},[87,52807,52808],{"class":199},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[87,52810,52811],{"class":89,"line":10773},[87,52812,52813],{"class":199},"            \u002F\u002F arr.push(num)\n",[87,52815,52816,52819,52822,52824,52827,52829,52832,52834,52837],{"class":89,"line":10794},[87,52817,52818],{"class":97},"            arr.",[87,52820,52821],{"class":205},"push",[87,52823,165],{"class":97},[87,52825,52826],{"class":205},"prompt",[87,52828,165],{"class":97},[87,52830,52831],{"class":949},"`请输入第${",[87,52833,1536],{"class":97},[87,52835,52836],{"class":949},"}季度的数据:`",[87,52838,31444],{"class":97},[87,52840,52841],{"class":89,"line":10800},[87,52842,52843],{"class":199},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[87,52845,52846],{"class":89,"line":10814},[87,52847,3484],{"class":97},[87,52849,52850],{"class":89,"line":10820},[87,52851,52852],{"class":199},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[87,52854,52855],{"class":89,"line":10847},[87,52856,52857],{"class":199},"        \u002F\u002F 盒子开头\n",[87,52859,52860,52863,52866,52868,52871],{"class":89,"line":10856},[87,52861,52862],{"class":97},"        document.",[87,52864,52865],{"class":205},"write",[87,52867,165],{"class":97},[87,52869,52870],{"class":949},"` \u003Cdiv class=\"box\">`",[87,52872,1108],{"class":97},[87,52874,52875],{"class":89,"line":10862},[87,52876,3355],{"emptyLinePlaceholder":1029},[87,52878,52879],{"class":89,"line":10870},[87,52880,52881],{"class":199},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[87,52883,52884,52886,52888,52890,52892,52894,52896,52898,52900,52903,52906,52908,52910],{"class":89,"line":10875},[87,52885,4357],{"class":171},[87,52887,2614],{"class":97},[87,52889,52784],{"class":171},[87,52891,10388],{"class":97},[87,52893,946],{"class":171},[87,52895,577],{"class":104},[87,52897,10395],{"class":97},[87,52899,938],{"class":171},[87,52901,52902],{"class":97}," arr.",[87,52904,52905],{"class":104},"length",[87,52907,4168],{"class":97},[87,52909,3247],{"class":171},[87,52911,13392],{"class":97},[87,52913,52914,52917,52919,52921],{"class":89,"line":17553},[87,52915,52916],{"class":97},"            document.",[87,52918,52865],{"class":205},[87,52920,165],{"class":97},[87,52922,52923],{"class":949},"`\n",[87,52925,52926,52929,52931,52933,52935,52937],{"class":89,"line":17559},[87,52927,52928],{"class":949},"              \u003Cdiv style=\"height: ${",[87,52930,4834],{"class":97},[87,52932,1982],{"class":949},[87,52934,1536],{"class":97},[87,52936,2031],{"class":949},[87,52938,52939],{"class":949},"}px;\">\n",[87,52941,52942,52945,52947,52949,52951,52953],{"class":89,"line":17582},[87,52943,52944],{"class":949},"                \u003Cspan>${",[87,52946,4834],{"class":97},[87,52948,1982],{"class":949},[87,52950,1536],{"class":97},[87,52952,2031],{"class":949},[87,52954,52955],{"class":949},"}\u003C\u002Fspan>\n",[87,52957,52958,52961,52963,52965,52967],{"class":89,"line":17588},[87,52959,52960],{"class":949},"                \u003Ch4>第${",[87,52962,1536],{"class":97},[87,52964,46513],{"class":171},[87,52966,568],{"class":104},[87,52968,52969],{"class":949},"}季度\u003C\u002Fh4>\n",[87,52971,52972],{"class":89,"line":17611},[87,52973,52974],{"class":949},"              \u003C\u002Fdiv>          \n",[87,52976,52977,52980],{"class":89,"line":17625},[87,52978,52979],{"class":949},"            `",[87,52981,1108],{"class":97},[87,52983,52984],{"class":89,"line":17645},[87,52985,3484],{"class":97},[87,52987,52988],{"class":89,"line":17651},[87,52989,52990],{"class":199},"        \u002F\u002F 盒子结尾\n",[87,52992,52993,52995,52997,52999,53002],{"class":89,"line":17662},[87,52994,52862],{"class":97},[87,52996,52865],{"class":205},[87,52998,165],{"class":97},[87,53000,53001],{"class":949},"` \u003C\u002Fdiv>`",[87,53003,1108],{"class":97},[87,53005,53006,53008,53010],{"class":89,"line":17685},[87,53007,52714],{"class":97},[87,53009,52750],{"class":93},[87,53011,953],{"class":97},[87,53013,53014,53016,53018],{"class":89,"line":17707},[87,53015,963],{"class":97},[87,53017,52737],{"class":93},[87,53019,953],{"class":97},[87,53021,53022],{"class":89,"line":17712},[87,53023,3355],{"emptyLinePlaceholder":1029},[87,53025,53026,53028,53030],{"class":89,"line":17718},[87,53027,963],{"class":97},[87,53029,51581],{"class":93},[87,53031,953],{"class":97},[44,53033,53035],{"id":53034},"_284-冒泡排序","2.8.4 冒泡排序",[77,53037,53039],{"className":51579,"code":53038,"language":51581,"meta":82,"style":82},"\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",[84,53040,53041,53051,53065,53069,53077,53092,53112,53124,53132,53136,53144,53152,53184,53217,53254,53259,53278,53283,53296,53311,53327,53331,53336,53340,53350,53359,53367,53371],{"__ignoreMap":82},[87,53042,53043,53045,53047,53049],{"class":89,"line":90},[87,53044,52243],{"class":97},[87,53046,52246],{"class":93},[87,53048,52249],{"class":205},[87,53050,953],{"class":97},[87,53052,53053,53055,53057,53059,53061,53063],{"class":89,"line":101},[87,53054,938],{"class":97},[87,53056,51581],{"class":93},[87,53058,52260],{"class":205},[87,53060,946],{"class":97},[87,53062,52265],{"class":949},[87,53064,953],{"class":97},[87,53066,53067],{"class":89,"line":120},[87,53068,3355],{"emptyLinePlaceholder":1029},[87,53070,53071,53073,53075],{"class":89,"line":222},[87,53072,938],{"class":97},[87,53074,52278],{"class":93},[87,53076,953],{"class":97},[87,53078,53079,53082,53084,53086,53088,53090],{"class":89,"line":234},[87,53080,53081],{"class":97},"  \u003C",[87,53083,52288],{"class":93},[87,53085,52291],{"class":205},[87,53087,946],{"class":97},[87,53089,52296],{"class":949},[87,53091,953],{"class":97},[87,53093,53094,53096,53098,53100,53102,53104,53106,53108,53110],{"class":89,"line":256},[87,53095,53081],{"class":97},[87,53097,52288],{"class":93},[87,53099,15870],{"class":205},[87,53101,946],{"class":97},[87,53103,52335],{"class":949},[87,53105,52315],{"class":205},[87,53107,946],{"class":97},[87,53109,52342],{"class":949},[87,53111,953],{"class":97},[87,53113,53114,53116,53118,53120,53122],{"class":89,"line":269},[87,53115,53081],{"class":97},[87,53117,52351],{"class":93},[87,53119,52354],{"class":97},[87,53121,52351],{"class":93},[87,53123,953],{"class":97},[87,53125,53126,53128,53130],{"class":89,"line":463},[87,53127,963],{"class":97},[87,53129,52278],{"class":93},[87,53131,953],{"class":97},[87,53133,53134],{"class":89,"line":469},[87,53135,3355],{"emptyLinePlaceholder":1029},[87,53137,53138,53140,53142],{"class":89,"line":2287},[87,53139,938],{"class":97},[87,53141,52737],{"class":93},[87,53143,953],{"class":97},[87,53145,53146,53148,53150],{"class":89,"line":2568},[87,53147,53081],{"class":97},[87,53149,52750],{"class":93},[87,53151,953],{"class":97},[87,53153,53154,53157,53159,53161,53164,53166,53168,53170,53172,53174,53176,53178,53180,53182],{"class":89,"line":2573},[87,53155,53156],{"class":171},"    let",[87,53158,52770],{"class":97},[87,53160,946],{"class":171},[87,53162,53163],{"class":97}," [",[87,53165,1414],{"class":104},[87,53167,13385],{"class":97},[87,53169,1389],{"class":104},[87,53171,13385],{"class":97},[87,53173,1170],{"class":104},[87,53175,13385],{"class":97},[87,53177,1176],{"class":104},[87,53179,13385],{"class":97},[87,53181,1313],{"class":104},[87,53183,34193],{"class":97},[87,53185,53186,53188,53190,53192,53194,53196,53198,53200,53202,53204,53206,53209,53211,53213,53215],{"class":89,"line":2579},[87,53187,4155],{"class":171},[87,53189,2614],{"class":97},[87,53191,52784],{"class":171},[87,53193,10388],{"class":97},[87,53195,946],{"class":171},[87,53197,577],{"class":104},[87,53199,10395],{"class":97},[87,53201,938],{"class":171},[87,53203,52902],{"class":97},[87,53205,52905],{"class":104},[87,53207,53208],{"class":171}," -",[87,53210,568],{"class":104},[87,53212,4168],{"class":97},[87,53214,3247],{"class":171},[87,53216,13392],{"class":97},[87,53218,53219,53222,53224,53226,53228,53230,53232,53234,53236,53238,53240,53242,53244,53246,53248,53250,53252],{"class":89,"line":2584},[87,53220,53221],{"class":171},"      for",[87,53223,2614],{"class":97},[87,53225,52784],{"class":171},[87,53227,10450],{"class":97},[87,53229,946],{"class":171},[87,53231,577],{"class":104},[87,53233,10457],{"class":97},[87,53235,938],{"class":171},[87,53237,52902],{"class":97},[87,53239,52905],{"class":104},[87,53241,53208],{"class":171},[87,53243,10388],{"class":97},[87,53245,1625],{"class":171},[87,53247,568],{"class":104},[87,53249,10464],{"class":97},[87,53251,3247],{"class":171},[87,53253,13392],{"class":97},[87,53255,53256],{"class":89,"line":2598},[87,53257,53258],{"class":199},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[87,53260,53261,53263,53266,53268,53271,53273,53275],{"class":89,"line":2603},[87,53262,3452],{"class":171},[87,53264,53265],{"class":97}," (arr[j] ",[87,53267,2051],{"class":171},[87,53269,53270],{"class":97}," arr[j ",[87,53272,1575],{"class":171},[87,53274,568],{"class":104},[87,53276,53277],{"class":97},"]) {\n",[87,53279,53280],{"class":89,"line":2609},[87,53281,53282],{"class":199},"          \u002F\u002F 交换两个变量\n",[87,53284,53285,53288,53291,53293],{"class":89,"line":2630},[87,53286,53287],{"class":171},"          let",[87,53289,53290],{"class":97}," tmp ",[87,53292,946],{"class":171},[87,53294,53295],{"class":97}," arr[j]\n",[87,53297,53298,53301,53303,53305,53307,53309],{"class":89,"line":2635},[87,53299,53300],{"class":97},"          arr[j] ",[87,53302,946],{"class":171},[87,53304,53270],{"class":97},[87,53306,1575],{"class":171},[87,53308,568],{"class":104},[87,53310,34193],{"class":97},[87,53312,53313,53316,53318,53320,53322,53324],{"class":89,"line":2649},[87,53314,53315],{"class":97},"          arr[j ",[87,53317,1575],{"class":171},[87,53319,568],{"class":104},[87,53321,5396],{"class":97},[87,53323,946],{"class":171},[87,53325,53326],{"class":97}," tmp\n",[87,53328,53329],{"class":89,"line":2654},[87,53330,3484],{"class":97},[87,53332,53333],{"class":89,"line":2683},[87,53334,53335],{"class":97},"      }\n",[87,53337,53338],{"class":89,"line":2688},[87,53339,3142],{"class":97},[87,53341,53342,53345,53347],{"class":89,"line":2705},[87,53343,53344],{"class":97},"    document.",[87,53346,52865],{"class":205},[87,53348,53349],{"class":97},"(arr)\n",[87,53351,53352,53355,53357],{"class":89,"line":2710},[87,53353,53354],{"class":97},"  \u003C\u002F",[87,53356,52750],{"class":93},[87,53358,953],{"class":97},[87,53360,53361,53363,53365],{"class":89,"line":2715},[87,53362,963],{"class":97},[87,53364,52737],{"class":93},[87,53366,953],{"class":97},[87,53368,53369],{"class":89,"line":2720},[87,53370,3355],{"emptyLinePlaceholder":1029},[87,53372,53373,53375,53377],{"class":89,"line":2734},[87,53374,963],{"class":97},[87,53376,51581],{"class":93},[87,53378,953],{"class":97},[19,53380,53381],{},[39,53382],{"alt":82,"src":53383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,53385,53386],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,53388,53389],{},"let arr = [4, 2, 5, 1, 3]",[19,53391,53392],{},"\u002F\u002F 1.升序排列写法",[19,53394,53395],{},"arr.sort(function (a, b) {",[19,53397,53398],{},"return a - b",[19,53400,53401],{},"})",[19,53403,53404],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,53406,53407],{},"\u002F\u002F 降序排列写法",[19,53409,53395],{},[19,53411,53412],{},"return b - a",[19,53414,53401],{},[19,53416,53417],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,53419,53421],{"id":53420},"_29-函数","2.9 函数",[19,53423,53424],{},[39,53425],{"alt":82,"src":53426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,53428,53429],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,53431,53432],{},"函数的声明用function",[19,53434,53435],{},"函数里边可以嵌套函数",[44,53437,53439],{"id":53438},"_291-函数传参","2.9.1 函数传参",[19,53441,53442],{},[39,53443],{"alt":82,"src":53444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,53446,53447],{},[39,53448],{"alt":82,"src":53449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[26,53451,53452,53455,53458,53461,53464,53467],{},[29,53453,53454],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[29,53456,53457],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[29,53459,53460],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[29,53462,53463],{},"开发中尽量保持形参和实参个数一致",[29,53465,53466],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[29,53468,53469],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,53471,53472],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[44,53474,53476],{"id":53475},"_292-函数的返回值","2.9.2 函数的返回值",[19,53478,53479],{},[39,53480],{"alt":82,"src":53481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,53483,53484],{},[39,53485],{"alt":82,"src":53486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[26,53488,53489,53492,53495,53498,53501],{},[29,53490,53491],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[29,53493,53494],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[29,53496,53497],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[29,53499,53500],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[29,53502,53503],{},"断点调试:进入函数内部看执行过程F11",[44,53505,53507],{"id":53506},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[77,53509,53511],{"className":51579,"code":53510,"language":51581,"meta":82,"style":82},"    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",[84,53512,53513,53518,53523,53527,53532],{"__ignoreMap":82},[87,53514,53515],{"class":89,"line":90},[87,53516,53517],{"class":97},"    function fn(a, b) {\n",[87,53519,53520],{"class":89,"line":101},[87,53521,53522],{"class":97},"      console.log(a + b);\n",[87,53524,53525],{"class":89,"line":120},[87,53526,3142],{"class":97},[87,53528,53529],{"class":89,"line":222},[87,53530,53531],{"class":97},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[87,53533,53534],{"class":89,"line":234},[87,53535,53536],{"class":97},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[44,53538,53540],{"id":53539},"_294-作用域","2.9.4 作用域",[26,53542,53543,53549,53554,53557,53560],{},[29,53544,53545,53546],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[57,53547,53548],{},"作用域",[29,53550,53551],{},[57,53552,53553],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[29,53555,53556],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[29,53558,53559],{},"函数内部可以直接所使用全局变量",[29,53561,53562],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,53564,15583],{},[77,53566,53568],{"className":51579,"code":53567,"language":51581,"meta":82,"style":82},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[84,53569,53570,53575,53580,53584,53589,53594,53599],{"__ignoreMap":82},[87,53571,53572],{"class":89,"line":90},[87,53573,53574],{"class":97},"    function fun() {\n",[87,53576,53577],{"class":89,"line":101},[87,53578,53579],{"class":97},"      num = 10\n",[87,53581,53582],{"class":89,"line":120},[87,53583,3142],{"class":97},[87,53585,53586],{"class":89,"line":222},[87,53587,53588],{"class":97},"    fun()\n",[87,53590,53591],{"class":89,"line":234},[87,53592,53593],{"class":97},"    console.log(num)\n",[87,53595,53596],{"class":89,"line":256},[87,53597,53598],{"class":97},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[87,53600,53601],{"class":89,"line":269},[87,53602,53603],{"class":97},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[26,53605,53606,53609],{},[29,53607,53608],{},"函数内部的形参可以看做是局部变量",[29,53610,53611],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,53613,53614,53615],{},"变量访问原则： ",[57,53616,53617],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[44,53619,53621],{"id":53620},"_295-匿名函数","2.9.5 匿名函数",[19,53623,53624],{},"函数可以分为具名函数和匿名函数",[19,53626,53627],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[1055,53629,53630],{},[29,53631,53632],{},"函数表达式",[19,53634,53635],{},[39,53636],{"alt":82,"src":53637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,53639,53640],{},"里边也可以写参数",[19,53642,53643],{},"具名函数调用位置可以随意调整；",[19,53645,53646],{},"匿名函数函数表达式形式只能在声明后才可以使用",[1055,53648,53649],{"start":101},[29,53650,53651],{},"立即执行函数",[19,53653,53654],{},[39,53655],{"alt":82,"src":53656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,53658,53659],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,53661,53662],{},"写法：两个小括号，然后在第一个小括号中写function",[19,53664,53665],{},"(function () {})();",[19,53667,53668],{},"不要落下最后的;",[19,53670,53671],{},"立即执行函数必须要加;",[19,53673,53674],{},"分号写前写后都没问题",[19,53676,53677],{},"写前：",[19,53679,53680],{},"(function() {})()",[19,53682,53683],{},";(function () {})();",[19,53685,53686],{},"写后:",[19,53688,53689],{},"(function() {})();",[19,53691,53665],{},[19,53693,53694],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,53696,53697],{},"还有一种写法：",[19,53699,53700],{},"(function(){}());",[19,53702,53703],{},"或者:",[19,53705,53706],{},"!function(){}();",[19,53708,53709],{},"立即执行函数有时候也是可以加名字的：",[19,53711,53712],{},"(function flexible(window,document) {}(window,document));",[19,53714,53715],{},"省一些调用方法",[44,53717,53719],{"id":53718},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,53721,53722],{},[39,53723],{"alt":82,"src":53724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,53726,53727],{},"这样就不用非得给x,y初始化了",[19,53729,53730],{},[39,53731],{"alt":82,"src":53732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,53734,53735],{},"代码执行时先看左边",[19,53737,53738],{},"例如：console.log(false && 3+5)",[19,53740,53741],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,53743,53744],{},"&&都是真时，就返回最后一个真值",[19,53746,53747],{},"console.log(11 && 22)",[19,53749,53750],{},"输出22",[19,53752,53753],{},"逻辑与：遇真则真",[19,53755,15583],{},[19,53757,53758],{},"let age=1",[19,53760,53761],{},"console.log(11 || age++)",[19,53763,53764],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,53766,53767],{},"console.log(11 || 22)",[19,53769,53770],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,53772,53773],{},"||如果都是假的话，就取最后一个假的值了",[44,53775,53777],{"id":53776},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,53779,53780],{},"显示转换：",[19,53782,53783,53786,53787],{},[57,53784,53785],{},"记忆","： ",[57,53788,53789],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,53791,53792],{},"空字符串为假，其他字符串全为真",[19,53794,53795],{},[39,53796],{"alt":82,"src":53797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,53799,53800],{},"隐式转换：",[19,53802,53803],{},[39,53804],{"alt":82,"src":53805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,53807,53808],{},"隐式转换:",[19,53810,53811],{},"null+3=3",[19,53813,53814],{},"undefined+3=NaN",[19,53816,53817],{},"null==undefined 输出true,他两个都当0看",[19,53819,53820],{},"null===undefined 输出false",[19,53822,53823],{},"undefined做任何操作都是NaN",[19,53825,53826],{},"NaN不等于NaN，NaN表示计算错误",[14,53828,53830],{"id":53829},"_210-对象","2.10 对象",[44,53832,53834],{"id":53833},"_2101-对象的介绍","2.10.1 对象的介绍",[19,53836,53837],{},"对象也是一种数据类型，里边的数据是无序的",[19,53839,53840],{},"对象由属性和方法组成",[19,53842,53843],{},[39,53844],{"alt":82,"src":53845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,53847,53848],{},[39,53849],{"alt":82,"src":53850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53852,53853],{},[39,53854],{"alt":82,"src":53855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[44,53857,53859],{"id":53858},"_2102-对象属性","2.10.2 对象属性",[19,53861,53862],{},[39,53863],{"alt":82,"src":53864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[1055,53866,53867],{},[29,53868,53869],{},"查询对象",[19,53871,53872],{},"对象名.属性 goods.uname",[19,53874,53875],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53877,53878],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53880,53881],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53883,53884],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[1055,53886,53887],{"start":101},[29,53888,53889],{},"重新赋值",[19,53891,53892],{},"对象名.属性=新值",[1055,53894,53895],{"start":120},[29,53896,53897],{},"增加新数据",[19,53899,53892],{},[1055,53901,53902],{"start":222},[29,53903,53904],{},"删除对象中的属性",[19,53906,53907],{},"delete 对象名.属性",[44,53909,53911],{"id":53910},"_2103-对象方法","2.10.3 对象方法",[19,53913,53914],{},[39,53915],{"alt":82,"src":53916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53918,53919],{},"后边跟的是匿名函数",[19,53921,53922],{},"对象外面的叫函数；对象内部的叫方法",[19,53924,53925],{},[39,53926],{"alt":82,"src":53927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[44,53929,53931],{"id":53930},"_2104-遍历对象","2.10.4 遍历对象",[19,53933,53934],{},"理解为加括号的python字典遍历",[19,53936,53937],{},[39,53938],{"alt":82,"src":53939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53941,53942],{},"k是字符串类型",[19,53944,53945],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[77,53947,53949],{"className":51579,"code":53948,"language":51581,"meta":82,"style":82},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[84,53950,53951,53956,53961,53966,53971],{"__ignoreMap":82},[87,53952,53953],{"class":89,"line":90},[87,53954,53955],{"class":97},"   let arr = [1, 2, 3]\n",[87,53957,53958],{"class":89,"line":101},[87,53959,53960],{"class":97},"    for (let k in arr) {\n",[87,53962,53963],{"class":89,"line":120},[87,53964,53965],{"class":97},"      console.log(k)\n",[87,53967,53968],{"class":89,"line":222},[87,53969,53970],{"class":97},"      console.log(arr[k])\n",[87,53972,53973],{"class":89,"line":234},[87,53974,3142],{"class":97},[19,53976,53977],{},[39,53978],{"alt":82,"src":53979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53981,53982],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53984,53985],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53987,53988],{},"for in 得到的k是属性名",[52750,53990,53991],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[19,53993,53994],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[44,53996,53998],{"id":53997},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,54000,54001],{},"数组中放对象信息",[77,54003,54007],{"className":54004,"code":54005,"language":54006,"meta":82,"style":82},"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",[84,54008,54009,54017,54022,54027,54032,54037,54042,54047,54052,54057,54062,54067,54072,54076,54080],{"__ignoreMap":82},[87,54010,54011,54013,54015],{"class":89,"line":90},[87,54012,938],{"class":97},[87,54014,52750],{"class":93},[87,54016,953],{"class":97},[87,54018,54019],{"class":89,"line":101},[87,54020,54021],{"class":97},"    let students = [\n",[87,54023,54024],{"class":89,"line":120},[87,54025,54026],{"class":97},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[87,54028,54029],{"class":89,"line":222},[87,54030,54031],{"class":97},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[87,54033,54034],{"class":89,"line":234},[87,54035,54036],{"class":97},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[87,54038,54039],{"class":89,"line":256},[87,54040,54041],{"class":97},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[87,54043,54044],{"class":89,"line":269},[87,54045,54046],{"class":97},"    ]\n",[87,54048,54049],{"class":89,"line":463},[87,54050,54051],{"class":97},"    for (let i = 0; i \u003C students.length; i++) {\n",[87,54053,54054],{"class":89,"line":469},[87,54055,54056],{"class":97},"      for (let k in students[i]) {\n",[87,54058,54059],{"class":89,"line":2287},[87,54060,54061],{"class":97},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[87,54063,54064],{"class":89,"line":2568},[87,54065,54066],{"class":97},"        \u002F\u002F输出每个人的名字：\n",[87,54068,54069],{"class":89,"line":2573},[87,54070,54071],{"class":97},"        \u002F\u002Fconsole.log(students[i].name)\n",[87,54073,54074],{"class":89,"line":2579},[87,54075,53335],{"class":97},[87,54077,54078],{"class":89,"line":2584},[87,54079,3142],{"class":97},[87,54081,54082,54084,54086],{"class":89,"line":2598},[87,54083,53354],{"class":97},[87,54085,52750],{"class":93},[87,54087,953],{"class":97},[44,54089,54091],{"id":54090},"_2106-内置对象","2.10.6 内置对象",[19,54093,54094],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[1055,54096,54097],{},[29,54098,54099],{},"数学对象Math",[19,54101,54102],{},[39,54103],{"alt":82,"src":54104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,54106,54107],{},[1334,54108,54111],{"href":54109,"rel":54110},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24812],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,54113,54114],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,54116,54117],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,54119,54120],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,54122,54123],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,54125,54126],{},"null属于对象数据类型",[1055,54128,54129],{"start":101},[29,54130,54131],{},"生成任意范围随机数",[19,54133,54134],{},[39,54135],{"alt":82,"src":54136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,54138,54139],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,54141,54142],{},"乘以几就取不到几",[19,54144,54145],{},"取数组中的随机元素：",[19,54147,54148],{},"let arr = ['red', 'green', 'blue']",[19,54150,54151],{},"let random = Math.floor(Math.random() * arr.length)",[19,54153,54154],{},"console.log(arr[random])",[19,54156,54157],{},"这个函数得到的是全闭区间",[19,54159,54160],{},"function getRandom(N, M) {",[19,54162,54163],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,54165,2037],{},[19,54167,54168],{},"console.log(getRandom(4, 8))",[44,54170,54172],{"id":54171},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,54174,54175],{},[39,54176],{"alt":82,"src":54177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,54179,54180],{},[39,54181],{"alt":82,"src":54182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,54184,54185],{},[39,54186],{"alt":82,"src":54187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,54189,54190],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,54192,54193],{},[39,54194],{"alt":82,"src":54195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,54197,54198],{},[39,54199],{"alt":82,"src":54200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,54202,54203],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,54205,54206],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,54208,54209],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1006,54211,54212],{},"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":82,"searchDepth":101,"depth":101,"links":54214},[54215,54223,54224,54225,54226,54227,54234,54238,54244,54253],{"id":51414,"depth":101,"text":51415,"children":54216},[54217,54218,54219,54220,54221,54222],{"id":51418,"depth":120,"text":51419},{"id":51435,"depth":120,"text":51436},{"id":51475,"depth":120,"text":51476},{"id":51487,"depth":120,"text":51488},{"id":51496,"depth":120,"text":51497},{"id":51544,"depth":120,"text":51545},{"id":51554,"depth":101,"text":51555},{"id":51642,"depth":101,"text":51643},{"id":51665,"depth":101,"text":51666},{"id":51677,"depth":101,"text":51678},{"id":51864,"depth":101,"text":51865,"children":54228},[54229,54230,54231,54232,54233],{"id":51868,"depth":120,"text":51869},{"id":51877,"depth":120,"text":51878},{"id":51905,"depth":120,"text":51906},{"id":51941,"depth":120,"text":51942},{"id":51966,"depth":120,"text":51967},{"id":51978,"depth":101,"text":51979,"children":54235},[54236,54237],{"id":51999,"depth":120,"text":52000},{"id":52093,"depth":120,"text":52094},{"id":52151,"depth":101,"text":52152,"children":54239},[54240,54241,54242,54243],{"id":52155,"depth":120,"text":52156},{"id":52179,"depth":120,"text":52180},{"id":52232,"depth":120,"text":52233},{"id":53034,"depth":120,"text":53035},{"id":53420,"depth":101,"text":53421,"children":54245},[54246,54247,54248,54249,54250,54251,54252],{"id":53438,"depth":120,"text":53439},{"id":53475,"depth":120,"text":53476},{"id":53506,"depth":120,"text":53507},{"id":53539,"depth":120,"text":53540},{"id":53620,"depth":120,"text":53621},{"id":53718,"depth":120,"text":53719},{"id":53776,"depth":120,"text":53777},{"id":53829,"depth":101,"text":53830,"children":54254},[54255,54256,54257,54258,54259,54260,54261],{"id":53833,"depth":120,"text":53834},{"id":53858,"depth":120,"text":53859},{"id":53910,"depth":120,"text":53911},{"id":53930,"depth":120,"text":53931},{"id":53997,"depth":120,"text":53998},{"id":54090,"depth":120,"text":54091},{"id":54171,"depth":120,"text":54172},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51406,"description":1026},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54268,"title":54269,"body":54270,"description":1026,"extension":1027,"meta":77601,"navigation":1029,"path":77602,"seo":77603,"stem":77604,"__hash__":77605},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54271,"toc":77541},[54272,54275,54278,54281,54286,54289,54292,54295,54299,54303,54309,54314,54322,54329,54332,54336,54341,54346,54351,54354,54357,54368,54371,54375,54378,54381,54386,54391,54396,54399,54402,54493,54496,54501,54504,54509,54512,54515,54520,54523,54528,54532,54535,54549,54553,54558,54561,54564,54568,54573,54576,54580,54584,54589,54593,54598,54601,54604,54607,54610,54613,54616,54621,54626,54654,54657,54660,54663,54668,54671,54674,54677,54680,54684,54713,54717,54722,54727,54730,54733,54736,54741,54856,54861,54866,55027,55032,55035,55039,55044,55049,55052,55055,55058,55061,55064,55067,55070,55073,55076,55079,55082,55085,55088,55091,55093,55096,55099,55102,55107,55111,55508,55511,55517,55521,55526,56808,56813,56816,56819,56822,56827,58023,58027,58033,58038,58041,58046,58051,58055,58059,58064,58067,58072,58075,58078,58082,58990,58993,58997,59218,59221,59224,59227,59453,59456,59680,59683,59687,59692,59695,59698,59926,59929,59962,59965,59969,59974,59978,59981,59984,59987,59990,59993,59996,59999,60004,61284,61288,61291,62384,62388,62391,62394,62397,62400,62404,62407,62410,62412,62420,63899,63903,63906,63909,63912,64121,64124,64128,64132,64137,64142,64145,64148,64153,64157,64162,64165,64274,64278,64283,64288,64291,64294,64298,64303,64308,64313,64316,64319,64330,64333,64338,64343,64346,64349,64422,64426,64431,64434,64436,64447,64451,64456,65781,65784,65787,65790,65792,65795,65798,65801,65804,65807,65810,65813,65816,65819,65822,65825,65828,65830,65832,65835,65839,66932,66935,66938,66954,66968,66971,66976,66982,66987,66991,66995,67000,67004,67009,67451,67456,67459,67463,67468,67471,67474,67478,67483,67487,67492,67497,67501,67506,67511,67514,67519,67524,67528,67533,67538,67642,67645,67649,67654,68020,68023,68026,68029,68032,68035,68038,68041,68044,69340,69344,69349,69354,69357,69360,69363,69366,69368,69373,69378,69381,69385,69390,69395,69400,69403,69406,69409,69412,69415,69420,69423,69427,69432,69437,69441,69446,69449,69454,69457,69460,69463,69466,69469,69474,69477,69480,69483,69486,69490,69495,69498,69502,69507,69510,69513,69517,69546,69549,69553,69557,69562,69566,69571,69574,69577,69580,69583,69586,69589,69592,69595,69598,69601,69604,69607,69610,69613,69617,69622,69627,69630,69634,69638,69643,69646,69650,69653,69656,69661,69666,69671,69676,69681,69684,69687,69692,69697,69701,69706,69709,69714,69717,69720,69723,69726,69731,69734,69743,69747,69752,69755,69758,69762,69765,69770,69774,69777,69783,69789,69793,69819,69822,71383,71386,71878,71881,71886,71891,71896,71900,71905,71910,71915,71919,71924,71927,71930,71933,71936,71940,71943,71948,71951,71956,71960,71965,71968,71973,71978,71983,71986,71989,71994,71999,72002,72005,72009,72012,72017,72020,72025,72028,72033,72038,72043,72046,72051,72116,72119,72130,72134,72139,72311,72315,72320,72323,72326,72329,72333,72344,72348,72351,72356,72361,72364,72367,72370,72373,72376,72378,72381,72384,72387,72392,72395,72400,72403,72407,72410,72413,72427,72431,72434,72489,72494,72497,72500,72505,72508,72512,72517,72647,72651,72656,72661,72742,72747,72751,72754,72759,72764,72770,72773,72776,72779,72783,72788,72791,72802,72806,72823,75870,75874,75877,75880,75883,75904,75908,75911,75919,75922,75927,75930,75933,75938,75943,75947,75968,75972,75977,75980,75983,75986,75989,75993,75998,76001,76005,76010,76013,76018,76021,76026,76029,76034,77237,77241,77246,77249,77254,77538],[10,54273,54269],{"id":54274},"_3web-apis",[19,54276,54277],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,54279,54280],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,54282,54283],{},[39,54284],{"alt":82,"src":54285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,54287,54288],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,54290,54291],{},"建议数组和对象使用 const 来声明",[19,54293,54294],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,54296,54298],{"id":54297},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[44,54300,54302],{"id":54301},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,54304,54305,54308],{},[84,54306,54307],{},"document"," = HTML 文件解析后的对象化表示；",[19,54310,54311,54313],{},[84,54312,54307],{}," ≠ HTML 文件本身",[19,54315,54316,54321],{},[57,54317,54318],{},[84,54319,54320],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,54323,54324,54328],{},[57,54325,54326],{},[84,54327,54307],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,54330,54331],{},"document实际上为window.document的简写",[44,54333,54335],{"id":54334},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,54337,54338],{},[39,54339],{"alt":82,"src":54340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,54342,54343],{},[39,54344],{"alt":82,"src":54345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,54347,54348],{},[39,54349],{"alt":82,"src":54350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,54352,54353],{},"console.dir()",[19,54355,54356],{},"dir用来打印对象",[26,54358,54359,54362,54365],{},[29,54360,54361],{},"任何一个标签，都是一个对象",[29,54363,54364],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[29,54366,54367],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,54369,54370],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[44,54372,54374],{"id":54373},"_312-获取dom对象","3.1.2 获取DoM对象",[19,54376,54377],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,54379,54380],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,54382,54383],{},[57,54384,54385],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[1055,54387,54388],{},[29,54389,54390],{},"利用CSS选择器来获取标签元素",[19,54392,54393],{},[39,54394],{"alt":82,"src":54395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,54397,54398],{},"里边的选择器必须必须加引号！！！",[19,54400,54401],{},"只选择第一个元素",[77,54403,54405],{"className":54004,"code":54404,"language":54006,"meta":82,"style":82},"\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",[84,54406,54407,54415,54435,54454,54462,54467,54472,54477,54485],{"__ignoreMap":82},[87,54408,54409,54411,54413],{"class":89,"line":90},[87,54410,938],{"class":97},[87,54412,52737],{"class":93},[87,54414,953],{"class":97},[87,54416,54417,54419,54421,54423,54425,54428,54431,54433],{"class":89,"line":101},[87,54418,53081],{"class":97},[87,54420,94],{"class":93},[87,54422,943],{"class":205},[87,54424,946],{"class":97},[87,54426,54427],{"class":949},"\"box\"",[87,54429,54430],{"class":97},">123\u003C\u002F",[87,54432,94],{"class":93},[87,54434,953],{"class":97},[87,54436,54437,54439,54441,54443,54445,54447,54450,54452],{"class":89,"line":120},[87,54438,53081],{"class":97},[87,54440,94],{"class":93},[87,54442,943],{"class":205},[87,54444,946],{"class":97},[87,54446,54427],{"class":949},[87,54448,54449],{"class":97},">456\u003C\u002F",[87,54451,94],{"class":93},[87,54453,953],{"class":97},[87,54455,54456,54458,54460],{"class":89,"line":222},[87,54457,53081],{"class":97},[87,54459,52750],{"class":93},[87,54461,953],{"class":97},[87,54463,54464],{"class":89,"line":234},[87,54465,54466],{"class":97},"    \u002F\u002F 1.获取匹配的第一个元素\n",[87,54468,54469],{"class":89,"line":256},[87,54470,54471],{"class":97},"    const box = document.querySelector('div')\n",[87,54473,54474],{"class":89,"line":269},[87,54475,54476],{"class":97},"    console.dir(box)\n",[87,54478,54479,54481,54483],{"class":89,"line":463},[87,54480,53354],{"class":97},[87,54482,52750],{"class":93},[87,54484,953],{"class":97},[87,54486,54487,54489,54491],{"class":89,"line":469},[87,54488,963],{"class":97},[87,54490,52737],{"class":93},[87,54492,953],{"class":97},[19,54494,54495],{},"只选123，不选456",[19,54497,54498],{},[39,54499],{"alt":82,"src":54500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,54502,54503],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,54505,54506],{},[39,54507],{"alt":82,"src":54508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,54510,54511],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,54513,54514],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[1055,54516,54517],{"start":101},[29,54518,54519],{},"其他方法来获取标签元素",[19,54521,54522],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,54524,54525],{},[39,54526],{"alt":82,"src":54527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[44,54529,54531],{"id":54530},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,54533,54534],{},"设置修改DOM元素内容有两种方式：",[26,54536,54537,54540,54543,54546],{},[29,54538,54539],{},"元素.innerText=''",[29,54541,54542],{},"元素.innerHTML=''",[29,54544,54545],{},"不写字符串输出数字也是可以的",[29,54547,54548],{},"元素.innerHtml=1",[49,54550,54552],{"id":54551},"_3131-innertext","3.1.3.1 innerText",[19,54554,54555],{},[39,54556],{"alt":82,"src":54557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,54559,54560],{},"思路：实现了修改盒子中的内容！",[19,54562,54563],{},"它只显示纯文本，不解析标签",[49,54565,54567],{"id":54566},"_3132-innerhtml","3.1.3.2 innerHTML",[19,54569,54570],{},[39,54571],{"alt":82,"src":54572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,54574,54575],{},"相比于innerText，他的强大之处在于可以解析标签",[44,54577,54579],{"id":54578},"_314-操作元素属性","3.1.4 操作元素属性",[49,54581,54583],{"id":54582},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,54585,54586],{},[39,54587],{"alt":82,"src":54588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[49,54590,54592],{"id":54591},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,54594,54595],{},[39,54596],{"alt":82,"src":54597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,54599,54600],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,54602,54603],{},"div.style.backgroundColor = 'hotpink'",[19,54605,54606],{},"如果按照css的写法，-表示减，就会出错",[19,54608,54609],{},"body元素不需要再获取，直接用就行！！！！！！",[19,54611,54612],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,54614,54615],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,54617,54618],{},[39,54619],{"alt":82,"src":54620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,54622,54623],{},[39,54624],{"alt":82,"src":54625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[1055,54627,54628,54631,54634,54637,54640,54643],{},[29,54629,54630],{},"className这个方式就是修改很多样式的时候来使用的！",[29,54632,54633],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[29,54635,54636],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[29,54638,54639],{},"className为属性名，如果还用class的话就导致与关键字冲突",[29,54641,54642],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[29,54644,54645,54646,54651],{},"解析标签的时候就变为了",[94,54647],{"className":54648},[54649,54650],"nav","box",[54652,54653],"br",{},[19,54655,54656],{},"例子：",[94,54658],{"className":54659},[54649],[52750,54661,54662],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,54664,54665],{},[39,54666],{"alt":82,"src":54667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,54669,54670],{},"追加和删除类名用classList",[19,54672,54673],{},"常用于类似于开关的操作",[19,54675,54676],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,54678,54679],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[49,54681,54683],{"id":54682},"_3143-牢记点","3.1.4.3 牢记点",[1055,54685,54686,54689,54692,54695,54698,54701,54704,54707,54710],{},[29,54687,54688],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[29,54690,54691],{},"使用style属性操作css时不要忘记引号",[29,54693,54694],{},"使用className或者classList时也不要忘记引号",[29,54696,54697],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[29,54699,54700],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[29,54702,54703],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[29,54705,54706],{},"若： let arr=['1','2',3] arr[0]=1",[29,54708,54709],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[29,54711,54712],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[44,54714,54716],{"id":54715},"_315-操作表单元素","3.1.5 操作表单元素",[1055,54718,54719],{},[29,54720,54721],{},"天生的属性",[19,54723,54724],{},[39,54725],{"alt":82,"src":54726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,54728,54729],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,54731,54732],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,54734,54735],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,54737,54738],{},[39,54739],{"alt":82,"src":54740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[77,54742,54744],{"className":51579,"code":54743,"language":51581,"meta":82,"style":82},"在复选框中如果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",[84,54745,54746,54751,54783,54788,54793,54798,54803,54807,54812,54817,54834,54846,54851],{"__ignoreMap":82},[87,54747,54748],{"class":89,"line":90},[87,54749,54750],{"class":97},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[87,54752,54753,54755,54758,54761,54763,54766,54768,54770,54772,54774,54776,54778,54781],{"class":89,"line":101},[87,54754,938],{"class":97},[87,54756,54757],{"class":93},"input",[87,54759,54760],{"class":205}," type",[87,54762,946],{"class":97},[87,54764,54765],{"class":949},"\"checkbox\"",[87,54767,15870],{"class":205},[87,54769,946],{"class":97},[87,54771,8602],{"class":949},[87,54773,15909],{"class":205},[87,54775,946],{"class":97},[87,54777,8602],{"class":949},[87,54779,54780],{"class":205}," checked",[87,54782,953],{"class":97},[87,54784,54785],{"class":89,"line":120},[87,54786,54787],{"class":97},"不选的话：\n",[87,54789,54790],{"class":89,"line":222},[87,54791,54792],{"class":97},"const input = document.querySelector('input')\n",[87,54794,54795],{"class":89,"line":234},[87,54796,54797],{"class":97},"input.checked=false\n",[87,54799,54800],{"class":89,"line":256},[87,54801,54802],{"class":97},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[87,54804,54805],{"class":89,"line":269},[87,54806,3355],{"emptyLinePlaceholder":1029},[87,54808,54809],{"class":89,"line":463},[87,54810,54811],{"class":97},"禁用按钮：\n",[87,54813,54814],{"class":89,"line":469},[87,54815,54816],{"class":97},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[87,54818,54819,54821,54824,54827,54830,54832],{"class":89,"line":2287},[87,54820,938],{"class":97},[87,54822,54823],{"class":93},"button",[87,54825,54826],{"class":205}," disabled",[87,54828,54829],{"class":97},">点击\u003C\u002F",[87,54831,54823],{"class":93},[87,54833,953],{"class":97},[87,54835,54836,54838,54840,54842,54844],{"class":89,"line":2568},[87,54837,938],{"class":97},[87,54839,54823],{"class":93},[87,54841,54829],{"class":97},[87,54843,54823],{"class":93},[87,54845,953],{"class":97},[87,54847,54848],{"class":89,"line":2573},[87,54849,54850],{"class":97},"const bt = document.querySelector('button')\n",[87,54852,54853],{"class":89,"line":2579},[87,54854,54855],{"class":97},"bt.disabled = false\n",[1055,54857,54858],{"start":101},[29,54859,54860],{},"自定义属性",[19,54862,54863],{},[39,54864],{"alt":82,"src":54865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[77,54867,54869],{"className":54004,"code":54868,"language":54006,"meta":82,"style":82},"\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",[84,54870,54871,54879,54907,54926,54945,54964,54983,54991,54996,55001,55006,55011,55019],{"__ignoreMap":82},[87,54872,54873,54875,54877],{"class":89,"line":90},[87,54874,938],{"class":97},[87,54876,52737],{"class":93},[87,54878,953],{"class":97},[87,54880,54881,54883,54885,54888,54890,54892,54895,54897,54900,54903,54905],{"class":89,"line":101},[87,54882,53081],{"class":97},[87,54884,94],{"class":93},[87,54886,54887],{"class":205}," data-id",[87,54889,946],{"class":97},[87,54891,4632],{"class":949},[87,54893,54894],{"class":205}," data-spm",[87,54896,946],{"class":97},[87,54898,54899],{"class":949},"\"我不知道\"",[87,54901,54902],{"class":97},">1\u003C\u002F",[87,54904,94],{"class":93},[87,54906,953],{"class":97},[87,54908,54909,54911,54913,54915,54917,54919,54922,54924],{"class":89,"line":120},[87,54910,53081],{"class":97},[87,54912,94],{"class":93},[87,54914,54887],{"class":205},[87,54916,946],{"class":97},[87,54918,4655],{"class":949},[87,54920,54921],{"class":97},">2\u003C\u002F",[87,54923,94],{"class":93},[87,54925,953],{"class":97},[87,54927,54928,54930,54932,54934,54936,54938,54941,54943],{"class":89,"line":222},[87,54929,53081],{"class":97},[87,54931,94],{"class":93},[87,54933,54887],{"class":205},[87,54935,946],{"class":97},[87,54937,4668],{"class":949},[87,54939,54940],{"class":97},">3\u003C\u002F",[87,54942,94],{"class":93},[87,54944,953],{"class":97},[87,54946,54947,54949,54951,54953,54955,54957,54960,54962],{"class":89,"line":234},[87,54948,53081],{"class":97},[87,54950,94],{"class":93},[87,54952,54887],{"class":205},[87,54954,946],{"class":97},[87,54956,4681],{"class":949},[87,54958,54959],{"class":97},">4\u003C\u002F",[87,54961,94],{"class":93},[87,54963,953],{"class":97},[87,54965,54966,54968,54970,54972,54974,54976,54979,54981],{"class":89,"line":256},[87,54967,53081],{"class":97},[87,54969,94],{"class":93},[87,54971,54887],{"class":205},[87,54973,946],{"class":97},[87,54975,4702],{"class":949},[87,54977,54978],{"class":97},">5\u003C\u002F",[87,54980,94],{"class":93},[87,54982,953],{"class":97},[87,54984,54985,54987,54989],{"class":89,"line":269},[87,54986,53081],{"class":97},[87,54988,52750],{"class":93},[87,54990,953],{"class":97},[87,54992,54993],{"class":89,"line":463},[87,54994,54995],{"class":97},"    const one = document.querySelector('div')\n",[87,54997,54998],{"class":89,"line":469},[87,54999,55000],{"class":97},"    console.log(one.dataset)\n",[87,55002,55003],{"class":89,"line":2287},[87,55004,55005],{"class":97},"    console.log(one.dataset.id)\n",[87,55007,55008],{"class":89,"line":2568},[87,55009,55010],{"class":97},"    console.log(one.dataset.spm)\n",[87,55012,55013,55015,55017],{"class":89,"line":2573},[87,55014,53354],{"class":97},[87,55016,52750],{"class":93},[87,55018,953],{"class":97},[87,55020,55021,55023,55025],{"class":89,"line":2579},[87,55022,963],{"class":97},[87,55024,52737],{"class":93},[87,55026,953],{"class":97},[19,55028,55029],{},[39,55030],{"alt":82,"src":55031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,55033,55034],{},"document.querySelector选择的是第一个对象（元素）",[44,55036,55038],{"id":55037},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,55040,55041],{},[39,55042],{"alt":82,"src":55043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,55045,55046],{},[39,55047],{"alt":82,"src":55048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,55050,55051],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52750,55053,55054],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,55056,55057],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52750,55059,55060],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[19,55062,55063],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,55065,55066],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,55068,55069],{},"单位为毫秒！！！",[19,55071,55072],{},"可以搭配匿名函数来用！！！",[19,55074,55075],{},"setInterval(function () {",[19,55077,55078],{},"alert('两秒执行一次')",[19,55080,55081],{},"}, 2000)",[19,55083,55084],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,55086,55087],{},"function fn() {",[19,55089,55090],{},"document.write(1)",[19,55092,2037],{},[19,55094,55095],{},"setInterval(fn, 1000)",[19,55097,55098],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,55100,55101],{},"setInterval('fn()', 1000)",[19,55103,55104],{},[39,55105],{"alt":82,"src":55106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[49,55108,55110],{"id":55109},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[77,55112,55114],{"className":51579,"code":55113,"language":51581,"meta":82,"style":82},"\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",[84,55115,55116,55126,55140,55144,55152,55166,55186,55198,55206,55210,55218,55255,55260,55265,55270,55278,55286,55308,55316,55321,55343,55348,55353,55364,55369,55389,55397,55412,55427,55438,55443,55453,55463,55467,55476,55480,55488,55496,55500],{"__ignoreMap":82},[87,55117,55118,55120,55122,55124],{"class":89,"line":90},[87,55119,52243],{"class":97},[87,55121,52246],{"class":93},[87,55123,52249],{"class":205},[87,55125,953],{"class":97},[87,55127,55128,55130,55132,55134,55136,55138],{"class":89,"line":101},[87,55129,938],{"class":97},[87,55131,51581],{"class":93},[87,55133,52260],{"class":205},[87,55135,946],{"class":97},[87,55137,52265],{"class":949},[87,55139,953],{"class":97},[87,55141,55142],{"class":89,"line":120},[87,55143,3355],{"emptyLinePlaceholder":1029},[87,55145,55146,55148,55150],{"class":89,"line":222},[87,55147,938],{"class":97},[87,55149,52278],{"class":93},[87,55151,953],{"class":97},[87,55153,55154,55156,55158,55160,55162,55164],{"class":89,"line":234},[87,55155,53081],{"class":97},[87,55157,52288],{"class":93},[87,55159,52291],{"class":205},[87,55161,946],{"class":97},[87,55163,52296],{"class":949},[87,55165,953],{"class":97},[87,55167,55168,55170,55172,55174,55176,55178,55180,55182,55184],{"class":89,"line":256},[87,55169,53081],{"class":97},[87,55171,52288],{"class":93},[87,55173,15870],{"class":205},[87,55175,946],{"class":97},[87,55177,52335],{"class":949},[87,55179,52315],{"class":205},[87,55181,946],{"class":97},[87,55183,52342],{"class":949},[87,55185,953],{"class":97},[87,55187,55188,55190,55192,55194,55196],{"class":89,"line":269},[87,55189,53081],{"class":97},[87,55191,52351],{"class":93},[87,55193,52354],{"class":97},[87,55195,52351],{"class":93},[87,55197,953],{"class":97},[87,55199,55200,55202,55204],{"class":89,"line":463},[87,55201,963],{"class":97},[87,55203,52278],{"class":93},[87,55205,953],{"class":97},[87,55207,55208],{"class":89,"line":469},[87,55209,3355],{"emptyLinePlaceholder":1029},[87,55211,55212,55214,55216],{"class":89,"line":2287},[87,55213,938],{"class":97},[87,55215,52737],{"class":93},[87,55217,953],{"class":97},[87,55219,55220,55222,55225,55227,55229,55231,55233,55235,55237,55240,55242,55245,55248,55250,55253],{"class":89,"line":2568},[87,55221,53081],{"class":97},[87,55223,55224],{"class":93},"textarea",[87,55226,15870],{"class":205},[87,55228,946],{"class":97},[87,55230,8602],{"class":949},[87,55232,15909],{"class":205},[87,55234,946],{"class":97},[87,55236,8602],{"class":949},[87,55238,55239],{"class":205}," cols",[87,55241,946],{"class":97},[87,55243,55244],{"class":949},"\"30\"",[87,55246,55247],{"class":205}," rows",[87,55249,946],{"class":97},[87,55251,55252],{"class":949},"\"10\"",[87,55254,953],{"class":97},[87,55256,55257],{"class":89,"line":2573},[87,55258,55259],{"class":97},"        用户注册协议\n",[87,55261,55262],{"class":89,"line":2579},[87,55263,55264],{"class":97},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[87,55266,55267],{"class":89,"line":2584},[87,55268,55269],{"class":97},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[87,55271,55272,55274,55276],{"class":89,"line":2598},[87,55273,52714],{"class":97},[87,55275,55224],{"class":93},[87,55277,953],{"class":97},[87,55279,55280,55282,55284],{"class":89,"line":2603},[87,55281,53081],{"class":97},[87,55283,54652],{"class":93},[87,55285,953],{"class":97},[87,55287,55288,55290,55292,55294,55296,55299,55301,55304,55306],{"class":89,"line":2609},[87,55289,53081],{"class":97},[87,55291,54823],{"class":93},[87,55293,943],{"class":205},[87,55295,946],{"class":97},[87,55297,55298],{"class":949},"\"btn\"",[87,55300,54826],{"class":205},[87,55302,55303],{"class":97},">我已经阅读用户协议(5)\u003C\u002F",[87,55305,54823],{"class":93},[87,55307,953],{"class":97},[87,55309,55310,55312,55314],{"class":89,"line":2630},[87,55311,53081],{"class":97},[87,55313,52750],{"class":93},[87,55315,953],{"class":97},[87,55317,55318],{"class":89,"line":2635},[87,55319,55320],{"class":199},"    \u002F\u002F 1. 获取元素\n",[87,55322,55323,55325,55328,55330,55333,55336,55338,55341],{"class":89,"line":2649},[87,55324,12171],{"class":171},[87,55326,55327],{"class":104}," btn",[87,55329,14514],{"class":171},[87,55331,55332],{"class":97}," document.",[87,55334,55335],{"class":205},"querySelector",[87,55337,165],{"class":97},[87,55339,55340],{"class":949},"'.btn'",[87,55342,1108],{"class":97},[87,55344,55345],{"class":89,"line":2654},[87,55346,55347],{"class":199},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[87,55349,55350],{"class":89,"line":2683},[87,55351,55352],{"class":199},"    \u002F\u002F 2. 倒计时\n",[87,55354,55355,55357,55359,55361],{"class":89,"line":2688},[87,55356,53156],{"class":171},[87,55358,10388],{"class":97},[87,55360,946],{"class":171},[87,55362,55363],{"class":104}," 5\n",[87,55365,55366],{"class":89,"line":2705},[87,55367,55368],{"class":199},"    \u002F\u002F 2.1 开启定时器\n",[87,55370,55371,55373,55376,55378,55381,55383,55386],{"class":89,"line":2710},[87,55372,53156],{"class":171},[87,55374,55375],{"class":97}," n ",[87,55377,946],{"class":171},[87,55379,55380],{"class":205}," setInterval",[87,55382,165],{"class":97},[87,55384,55385],{"class":171},"function",[87,55387,55388],{"class":97}," () {\n",[87,55390,55391,55394],{"class":89,"line":2715},[87,55392,55393],{"class":97},"      i",[87,55395,55396],{"class":171},"--\n",[87,55398,55399,55402,55404,55407,55409],{"class":89,"line":2720},[87,55400,55401],{"class":97},"      btn.innerHTML ",[87,55403,946],{"class":171},[87,55405,55406],{"class":949}," `我已经阅读用户协议(${",[87,55408,1536],{"class":97},[87,55410,55411],{"class":949},"})`\n",[87,55413,55414,55417,55420,55423,55425],{"class":89,"line":2734},[87,55415,55416],{"class":171},"      if",[87,55418,55419],{"class":97}," (i ",[87,55421,55422],{"class":171},"===",[87,55424,577],{"class":104},[87,55426,13392],{"class":97},[87,55428,55429,55432,55435],{"class":89,"line":2739},[87,55430,55431],{"class":205},"        clearInterval",[87,55433,55434],{"class":97},"(n)  ",[87,55436,55437],{"class":199},"\u002F\u002F 关闭定时器\n",[87,55439,55440],{"class":89,"line":3532},[87,55441,55442],{"class":199},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[87,55444,55445,55448,55450],{"class":89,"line":3546},[87,55446,55447],{"class":97},"        btn.disabled ",[87,55449,946],{"class":171},[87,55451,55452],{"class":104}," false\n",[87,55454,55455,55458,55460],{"class":89,"line":3554},[87,55456,55457],{"class":97},"        btn.innerHTML ",[87,55459,946],{"class":171},[87,55461,55462],{"class":949}," '同意'\n",[87,55464,55465],{"class":89,"line":3559},[87,55466,53335],{"class":97},[87,55468,55469,55472,55474],{"class":89,"line":3565},[87,55470,55471],{"class":97},"    }, ",[87,55473,7360],{"class":104},[87,55475,1108],{"class":97},[87,55477,55478],{"class":89,"line":3571},[87,55479,3355],{"emptyLinePlaceholder":1029},[87,55481,55482,55484,55486],{"class":89,"line":3576},[87,55483,53354],{"class":97},[87,55485,52750],{"class":93},[87,55487,953],{"class":97},[87,55489,55490,55492,55494],{"class":89,"line":8898},[87,55491,963],{"class":97},[87,55493,52737],{"class":93},[87,55495,953],{"class":97},[87,55497,55498],{"class":89,"line":8922},[87,55499,3355],{"emptyLinePlaceholder":1029},[87,55501,55502,55504,55506],{"class":89,"line":8927},[87,55503,963],{"class":97},[87,55505,51581],{"class":93},[87,55507,953],{"class":97},[19,55509,55510],{},"不要一直想着用死循环,避免死循环",[19,55512,55513,55516],{},[84,55514,55515],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[49,55518,55520],{"id":55519},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[1055,55522,55523],{},[29,55524,55525],{},"法1",[77,55527,55529],{"className":51579,"code":55528,"language":51581,"meta":82,"style":82},"\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",[84,55530,55531,55541,55555,55559,55567,55581,55601,55613,55621,55627,55638,55649,55653,55657,55664,55676,55680,55684,55691,55703,55717,55730,55744,55748,55752,55759,55770,55781,55792,55804,55816,55828,55832,55836,55844,55854,55867,55879,55892,55896,55900,55907,55917,55929,55941,55952,55963,55973,55985,55997,56001,56005,56014,56026,56038,56066,56079,56083,56087,56094,56105,56109,56117,56125,56129,56137,56151,56166,56190,56198,56213,56226,56234,56255,56267,56279,56291,56303,56315,56327,56339,56348,56356,56364,56372,56384,56407,56426,56445,56464,56483,56502,56521,56541,56545,56565,56584,56604,56625,56636,56653,56663,56673,56683,56688,56693,56698,56703,56728,56741,56745,56768,56772,56780,56788,56796,56800],{"__ignoreMap":82},[87,55532,55533,55535,55537,55539],{"class":89,"line":90},[87,55534,52243],{"class":97},[87,55536,52246],{"class":93},[87,55538,52249],{"class":205},[87,55540,953],{"class":97},[87,55542,55543,55545,55547,55549,55551,55553],{"class":89,"line":101},[87,55544,938],{"class":97},[87,55546,51581],{"class":93},[87,55548,52260],{"class":205},[87,55550,946],{"class":97},[87,55552,52265],{"class":949},[87,55554,953],{"class":97},[87,55556,55557],{"class":89,"line":120},[87,55558,3355],{"emptyLinePlaceholder":1029},[87,55560,55561,55563,55565],{"class":89,"line":222},[87,55562,938],{"class":97},[87,55564,52278],{"class":93},[87,55566,953],{"class":97},[87,55568,55569,55571,55573,55575,55577,55579],{"class":89,"line":234},[87,55570,53081],{"class":97},[87,55572,52288],{"class":93},[87,55574,52291],{"class":205},[87,55576,946],{"class":97},[87,55578,52296],{"class":949},[87,55580,953],{"class":97},[87,55582,55583,55585,55587,55589,55591,55593,55595,55597,55599],{"class":89,"line":256},[87,55584,53081],{"class":97},[87,55586,52288],{"class":93},[87,55588,15870],{"class":205},[87,55590,946],{"class":97},[87,55592,52335],{"class":949},[87,55594,52315],{"class":205},[87,55596,946],{"class":97},[87,55598,52342],{"class":949},[87,55600,953],{"class":97},[87,55602,55603,55605,55607,55609,55611],{"class":89,"line":269},[87,55604,53081],{"class":97},[87,55606,52351],{"class":93},[87,55608,52354],{"class":97},[87,55610,52351],{"class":93},[87,55612,953],{"class":97},[87,55614,55615,55617,55619],{"class":89,"line":463},[87,55616,53081],{"class":97},[87,55618,1006],{"class":93},[87,55620,953],{"class":97},[87,55622,55623,55625],{"class":89,"line":469},[87,55624,7353],{"class":93},[87,55626,98],{"class":97},[87,55628,55629,55632,55634,55636],{"class":89,"line":2287},[87,55630,55631],{"class":104},"      padding",[87,55633,108],{"class":97},[87,55635,111],{"class":104},[87,55637,117],{"class":97},[87,55639,55640,55643,55645,55647],{"class":89,"line":2568},[87,55641,55642],{"class":104},"      margin",[87,55644,108],{"class":97},[87,55646,111],{"class":104},[87,55648,117],{"class":97},[87,55650,55651],{"class":89,"line":2573},[87,55652,3142],{"class":97},[87,55654,55655],{"class":89,"line":2579},[87,55656,3355],{"emptyLinePlaceholder":1029},[87,55658,55659,55662],{"class":89,"line":2584},[87,55660,55661],{"class":93},"    li",[87,55663,98],{"class":97},[87,55665,55666,55669,55671,55674],{"class":89,"line":2598},[87,55667,55668],{"class":104},"      list-style",[87,55670,108],{"class":97},[87,55672,55673],{"class":104},"none",[87,55675,117],{"class":97},[87,55677,55678],{"class":89,"line":2603},[87,55679,3142],{"class":97},[87,55681,55682],{"class":89,"line":2609},[87,55683,3355],{"emptyLinePlaceholder":1029},[87,55685,55686,55689],{"class":89,"line":2630},[87,55687,55688],{"class":205},"    .box",[87,55690,98],{"class":97},[87,55692,55693,55696,55698,55701],{"class":89,"line":2635},[87,55694,55695],{"class":104},"      position",[87,55697,108],{"class":97},[87,55699,55700],{"class":104},"relative",[87,55702,117],{"class":97},[87,55704,55705,55708,55710,55713,55715],{"class":89,"line":2649},[87,55706,55707],{"class":104},"      width",[87,55709,108],{"class":97},[87,55711,55712],{"class":104},"976",[87,55714,245],{"class":171},[87,55716,117],{"class":97},[87,55718,55719,55722,55724,55726,55728],{"class":89,"line":2654},[87,55720,55721],{"class":104},"      height",[87,55723,108],{"class":97},[87,55725,2496],{"class":104},[87,55727,245],{"class":171},[87,55729,117],{"class":97},[87,55731,55732,55734,55736,55738,55740,55742],{"class":89,"line":2683},[87,55733,55642],{"class":104},[87,55735,108],{"class":97},[87,55737,536],{"class":104},[87,55739,245],{"class":171},[87,55741,114],{"class":104},[87,55743,117],{"class":97},[87,55745,55746],{"class":89,"line":2688},[87,55747,3142],{"class":97},[87,55749,55750],{"class":89,"line":2705},[87,55751,3355],{"emptyLinePlaceholder":1029},[87,55753,55754,55757],{"class":89,"line":2710},[87,55755,55756],{"class":205},"    .slider-footer",[87,55758,98],{"class":97},[87,55760,55761,55763,55765,55768],{"class":89,"line":2715},[87,55762,55695],{"class":104},[87,55764,108],{"class":97},[87,55766,55767],{"class":104},"absolute",[87,55769,117],{"class":97},[87,55771,55772,55775,55777,55779],{"class":89,"line":2720},[87,55773,55774],{"class":104},"      left",[87,55776,108],{"class":97},[87,55778,111],{"class":104},[87,55780,117],{"class":97},[87,55782,55783,55786,55788,55790],{"class":89,"line":2734},[87,55784,55785],{"class":104},"      bottom",[87,55787,108],{"class":97},[87,55789,111],{"class":104},[87,55791,117],{"class":97},[87,55793,55794,55796,55798,55800,55802],{"class":89,"line":2739},[87,55795,55707],{"class":104},[87,55797,108],{"class":97},[87,55799,536],{"class":104},[87,55801,1423],{"class":171},[87,55803,117],{"class":97},[87,55805,55806,55808,55810,55812,55814],{"class":89,"line":3532},[87,55807,55721],{"class":104},[87,55809,108],{"class":97},[87,55811,1668],{"class":104},[87,55813,1423],{"class":171},[87,55815,117],{"class":97},[87,55817,55818,55821,55823,55826],{"class":89,"line":3546},[87,55819,55820],{"class":104},"      background-color",[87,55822,108],{"class":97},[87,55824,55825],{"class":104},"skyblue",[87,55827,117],{"class":97},[87,55829,55830],{"class":89,"line":3554},[87,55831,3142],{"class":97},[87,55833,55834],{"class":89,"line":3559},[87,55835,3355],{"emptyLinePlaceholder":1029},[87,55837,55838,55840,55842],{"class":89,"line":3565},[87,55839,55756],{"class":205},[87,55841,7775],{"class":93},[87,55843,98],{"class":97},[87,55845,55846,55848,55850,55852],{"class":89,"line":3571},[87,55847,55695],{"class":104},[87,55849,108],{"class":97},[87,55851,55767],{"class":104},[87,55853,117],{"class":97},[87,55855,55856,55859,55861,55863,55865],{"class":89,"line":3576},[87,55857,55858],{"class":104},"      font-size",[87,55860,108],{"class":97},[87,55862,1993],{"class":104},[87,55864,245],{"class":171},[87,55866,117],{"class":97},[87,55868,55869,55871,55873,55875,55877],{"class":89,"line":8898},[87,55870,55774],{"class":104},[87,55872,108],{"class":97},[87,55874,1792],{"class":104},[87,55876,245],{"class":171},[87,55878,117],{"class":97},[87,55880,55881,55884,55886,55888,55890],{"class":89,"line":8922},[87,55882,55883],{"class":104},"      top",[87,55885,108],{"class":97},[87,55887,1414],{"class":104},[87,55889,245],{"class":171},[87,55891,117],{"class":97},[87,55893,55894],{"class":89,"line":8927},[87,55895,3142],{"class":97},[87,55897,55898],{"class":89,"line":8933},[87,55899,3355],{"emptyLinePlaceholder":1029},[87,55901,55902,55905],{"class":89,"line":8960},[87,55903,55904],{"class":93},"    ul",[87,55906,98],{"class":97},[87,55908,55909,55911,55913,55915],{"class":89,"line":8965},[87,55910,55695],{"class":104},[87,55912,108],{"class":97},[87,55914,55767],{"class":104},[87,55916,117],{"class":97},[87,55918,55919,55921,55923,55925,55927],{"class":89,"line":8971},[87,55920,55883],{"class":104},[87,55922,108],{"class":97},[87,55924,1873],{"class":104},[87,55926,245],{"class":171},[87,55928,117],{"class":97},[87,55930,55931,55933,55935,55937,55939],{"class":89,"line":8983},[87,55932,55774],{"class":104},[87,55934,108],{"class":97},[87,55936,1792],{"class":104},[87,55938,245],{"class":171},[87,55940,117],{"class":97},[87,55942,55943,55946,55948,55950],{"class":89,"line":8995},[87,55944,55945],{"class":104},"      display",[87,55947,108],{"class":97},[87,55949,52420],{"class":104},[87,55951,117],{"class":97},[87,55953,55954,55957,55959,55961],{"class":89,"line":9007},[87,55955,55956],{"class":104},"      justify-content",[87,55958,108],{"class":97},[87,55960,52606],{"class":104},[87,55962,117],{"class":97},[87,55964,55965,55967,55969,55971],{"class":89,"line":10666},[87,55966,55695],{"class":104},[87,55968,108],{"class":97},[87,55970,55767],{"class":104},[87,55972,117],{"class":97},[87,55974,55975,55977,55979,55981,55983],{"class":89,"line":10691},[87,55976,55707],{"class":104},[87,55978,108],{"class":97},[87,55980,4946],{"class":104},[87,55982,245],{"class":171},[87,55984,117],{"class":97},[87,55986,55987,55989,55991,55993,55995],{"class":89,"line":10714},[87,55988,55721],{"class":104},[87,55990,108],{"class":97},[87,55992,1792],{"class":104},[87,55994,245],{"class":171},[87,55996,117],{"class":97},[87,55998,55999],{"class":89,"line":10738},[87,56000,3142],{"class":97},[87,56002,56003],{"class":89,"line":10743},[87,56004,3355],{"emptyLinePlaceholder":1029},[87,56006,56007,56009,56012],{"class":89,"line":10748},[87,56008,55904],{"class":93},[87,56010,56011],{"class":93}," li",[87,56013,98],{"class":97},[87,56015,56016,56018,56020,56022,56024],{"class":89,"line":10753},[87,56017,55707],{"class":104},[87,56019,108],{"class":97},[87,56021,1792],{"class":104},[87,56023,245],{"class":171},[87,56025,117],{"class":97},[87,56027,56028,56030,56032,56034,56036],{"class":89,"line":10762},[87,56029,55721],{"class":104},[87,56031,108],{"class":97},[87,56033,1792],{"class":104},[87,56035,245],{"class":171},[87,56037,117],{"class":97},[87,56039,56040,56042,56044,56047,56049,56051,56053,56055,56057,56059,56061,56064],{"class":89,"line":10767},[87,56041,55820],{"class":104},[87,56043,108],{"class":97},[87,56045,56046],{"class":104},"rgba",[87,56048,165],{"class":97},[87,56050,111],{"class":104},[87,56052,13385],{"class":97},[87,56054,111],{"class":104},[87,56056,13385],{"class":97},[87,56058,111],{"class":104},[87,56060,13385],{"class":97},[87,56062,56063],{"class":104},".4",[87,56065,175],{"class":97},[87,56067,56068,56071,56073,56075,56077],{"class":89,"line":10773},[87,56069,56070],{"class":104},"      border-radius",[87,56072,108],{"class":97},[87,56074,242],{"class":104},[87,56076,245],{"class":171},[87,56078,117],{"class":97},[87,56080,56081],{"class":89,"line":10794},[87,56082,3142],{"class":97},[87,56084,56085],{"class":89,"line":10800},[87,56086,3355],{"emptyLinePlaceholder":1029},[87,56088,56089,56092],{"class":89,"line":10814},[87,56090,56091],{"class":205},"    .activate",[87,56093,98],{"class":97},[87,56095,56096,56098,56100,56103],{"class":89,"line":10820},[87,56097,55820],{"class":104},[87,56099,108],{"class":97},[87,56101,56102],{"class":104},"#f7f7f7",[87,56104,117],{"class":97},[87,56106,56107],{"class":89,"line":10847},[87,56108,3142],{"class":97},[87,56110,56111,56113,56115],{"class":89,"line":10856},[87,56112,53354],{"class":97},[87,56114,1006],{"class":93},[87,56116,953],{"class":97},[87,56118,56119,56121,56123],{"class":89,"line":10862},[87,56120,963],{"class":97},[87,56122,52278],{"class":93},[87,56124,953],{"class":97},[87,56126,56127],{"class":89,"line":10870},[87,56128,3355],{"emptyLinePlaceholder":1029},[87,56130,56131,56133,56135],{"class":89,"line":10875},[87,56132,938],{"class":97},[87,56134,52737],{"class":93},[87,56136,953],{"class":97},[87,56138,56139,56141,56143,56145,56147,56149],{"class":89,"line":17553},[87,56140,53081],{"class":97},[87,56142,94],{"class":93},[87,56144,943],{"class":205},[87,56146,946],{"class":97},[87,56148,54427],{"class":949},[87,56150,953],{"class":97},[87,56152,56153,56155,56157,56159,56161,56164],{"class":89,"line":17559},[87,56154,52285],{"class":97},[87,56156,94],{"class":93},[87,56158,943],{"class":205},[87,56160,946],{"class":97},[87,56162,56163],{"class":949},"\"slider-wrapper\"",[87,56165,953],{"class":97},[87,56167,56168,56171,56173,56176,56178,56181,56184,56186,56188],{"class":89,"line":17582},[87,56169,56170],{"class":97},"      \u003C",[87,56172,39],{"class":93},[87,56174,56175],{"class":205}," src",[87,56177,946],{"class":97},[87,56179,56180],{"class":949},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[87,56182,56183],{"class":205}," alt",[87,56185,946],{"class":97},[87,56187,8602],{"class":949},[87,56189,953],{"class":97},[87,56191,56192,56194,56196],{"class":89,"line":17588},[87,56193,52714],{"class":97},[87,56195,94],{"class":93},[87,56197,953],{"class":97},[87,56199,56200,56202,56204,56206,56208,56211],{"class":89,"line":17611},[87,56201,52285],{"class":97},[87,56203,94],{"class":93},[87,56205,943],{"class":205},[87,56207,946],{"class":97},[87,56209,56210],{"class":949},"\"slider-footer\"",[87,56212,953],{"class":97},[87,56214,56215,56217,56219,56222,56224],{"class":89,"line":17625},[87,56216,56170],{"class":97},[87,56218,19],{"class":93},[87,56220,56221],{"class":97},">对人类来说会不会太超前了?\u003C\u002F",[87,56223,19],{"class":93},[87,56225,953],{"class":97},[87,56227,56228,56230,56232],{"class":89,"line":17645},[87,56229,56170],{"class":97},[87,56231,26],{"class":93},[87,56233,953],{"class":97},[87,56235,56236,56239,56241,56243,56245,56248,56251,56253],{"class":89,"line":17651},[87,56237,56238],{"class":97},"        \u003C",[87,56240,29],{"class":93},[87,56242,943],{"class":205},[87,56244,946],{"class":97},[87,56246,56247],{"class":949},"\"activate\"",[87,56249,56250],{"class":97},">\u003C\u002F",[87,56252,29],{"class":93},[87,56254,953],{"class":97},[87,56256,56257,56259,56261,56263,56265],{"class":89,"line":17662},[87,56258,56238],{"class":97},[87,56260,29],{"class":93},[87,56262,56250],{"class":97},[87,56264,29],{"class":93},[87,56266,953],{"class":97},[87,56268,56269,56271,56273,56275,56277],{"class":89,"line":17685},[87,56270,56238],{"class":97},[87,56272,29],{"class":93},[87,56274,56250],{"class":97},[87,56276,29],{"class":93},[87,56278,953],{"class":97},[87,56280,56281,56283,56285,56287,56289],{"class":89,"line":17707},[87,56282,56238],{"class":97},[87,56284,29],{"class":93},[87,56286,56250],{"class":97},[87,56288,29],{"class":93},[87,56290,953],{"class":97},[87,56292,56293,56295,56297,56299,56301],{"class":89,"line":17712},[87,56294,56238],{"class":97},[87,56296,29],{"class":93},[87,56298,56250],{"class":97},[87,56300,29],{"class":93},[87,56302,953],{"class":97},[87,56304,56305,56307,56309,56311,56313],{"class":89,"line":17718},[87,56306,56238],{"class":97},[87,56308,29],{"class":93},[87,56310,56250],{"class":97},[87,56312,29],{"class":93},[87,56314,953],{"class":97},[87,56316,56317,56319,56321,56323,56325],{"class":89,"line":17732},[87,56318,56238],{"class":97},[87,56320,29],{"class":93},[87,56322,56250],{"class":97},[87,56324,29],{"class":93},[87,56326,953],{"class":97},[87,56328,56329,56331,56333,56335,56337],{"class":89,"line":17745},[87,56330,56238],{"class":97},[87,56332,29],{"class":93},[87,56334,56250],{"class":97},[87,56336,29],{"class":93},[87,56338,953],{"class":97},[87,56340,56341,56344,56346],{"class":89,"line":17750},[87,56342,56343],{"class":97},"      \u003C\u002F",[87,56345,26],{"class":93},[87,56347,953],{"class":97},[87,56349,56350,56352,56354],{"class":89,"line":17764},[87,56351,52714],{"class":97},[87,56353,94],{"class":93},[87,56355,953],{"class":97},[87,56357,56358,56360,56362],{"class":89,"line":17769},[87,56359,53354],{"class":97},[87,56361,94],{"class":93},[87,56363,953],{"class":97},[87,56365,56366,56368,56370],{"class":89,"line":17775},[87,56367,53081],{"class":97},[87,56369,52750],{"class":93},[87,56371,953],{"class":97},[87,56373,56374,56376,56379,56381],{"class":89,"line":17780},[87,56375,12171],{"class":171},[87,56377,56378],{"class":104}," arrImage",[87,56380,14514],{"class":171},[87,56382,56383],{"class":97}," [\n",[87,56385,56386,56389,56392,56395,56398,56401,56404],{"class":89,"line":17794},[87,56387,56388],{"class":97},"      { url: ",[87,56390,56391],{"class":949},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[87,56393,56394],{"class":97},", title: ",[87,56396,56397],{"class":949},"'对人类来说会不会太超前了?'",[87,56399,56400],{"class":97},", color: ",[87,56402,56403],{"class":949},"'rgba(100,67,68)'",[87,56405,56406],{"class":97}," },\n",[87,56408,56409,56411,56414,56416,56419,56421,56424],{"class":89,"line":17799},[87,56410,56388],{"class":97},[87,56412,56413],{"class":949},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[87,56415,56394],{"class":97},[87,56417,56418],{"class":949},"'开启剑与雪的黑暗传说!'",[87,56420,56400],{"class":97},[87,56422,56423],{"class":949},"'rgba(43,35,26)'",[87,56425,56406],{"class":97},[87,56427,56428,56430,56433,56435,56438,56440,56443],{"class":89,"line":17804},[87,56429,56388],{"class":97},[87,56431,56432],{"class":949},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[87,56434,56394],{"class":97},[87,56436,56437],{"class":949},"'真正的jo厨出现了!'",[87,56439,56400],{"class":97},[87,56441,56442],{"class":949},"'rgba(36,31,33)'",[87,56444,56406],{"class":97},[87,56446,56447,56449,56452,56454,56457,56459,56462],{"class":89,"line":17818},[87,56448,56388],{"class":97},[87,56450,56451],{"class":949},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[87,56453,56394],{"class":97},[87,56455,56456],{"class":949},"'李玉刚:让世界通过b站看到东方大国文化'",[87,56458,56400],{"class":97},[87,56460,56461],{"class":949},"'rgba(139,98,66)'",[87,56463,56406],{"class":97},[87,56465,56466,56468,56471,56473,56476,56478,56481],{"class":89,"line":17830},[87,56467,56388],{"class":97},[87,56469,56470],{"class":949},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[87,56472,56394],{"class":97},[87,56474,56475],{"class":949},"'快来分享你的寒假日常吧'",[87,56477,56400],{"class":97},[87,56479,56480],{"class":949},"'rgba(67,90,92)'",[87,56482,56406],{"class":97},[87,56484,56485,56487,56490,56492,56495,56497,56500],{"class":89,"line":17835},[87,56486,56388],{"class":97},[87,56488,56489],{"class":949},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[87,56491,56394],{"class":97},[87,56493,56494],{"class":949},"'哔哩哔哩小年YEAR'",[87,56496,56400],{"class":97},[87,56498,56499],{"class":949},"'rgba(166,131,143)'",[87,56501,56406],{"class":97},[87,56503,56504,56506,56509,56511,56514,56516,56519],{"class":89,"line":17848},[87,56505,56388],{"class":97},[87,56507,56508],{"class":949},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[87,56510,56394],{"class":97},[87,56512,56513],{"class":949},"'一站式解决你的电脑配置问题'",[87,56515,56400],{"class":97},[87,56517,56518],{"class":949},"'rgba(53,29,25)'",[87,56520,56406],{"class":97},[87,56522,56523,56525,56528,56530,56533,56535,56538],{"class":89,"line":17853},[87,56524,56388],{"class":97},[87,56526,56527],{"class":949},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[87,56529,56394],{"class":97},[87,56531,56532],{"class":949},"'谁不想和小猫咪贴贴呢?'",[87,56534,56400],{"class":97},[87,56536,56537],{"class":949},"'rgba(99,72,114)'",[87,56539,56540],{"class":97}," }\n",[87,56542,56543],{"class":89,"line":17858},[87,56544,54046],{"class":97},[87,56546,56547,56549,56552,56554,56556,56558,56560,56563],{"class":89,"line":17863},[87,56548,12171],{"class":171},[87,56550,56551],{"class":104}," img",[87,56553,14514],{"class":171},[87,56555,55332],{"class":97},[87,56557,55335],{"class":205},[87,56559,165],{"class":97},[87,56561,56562],{"class":949},"'.slider-wrapper img'",[87,56564,1108],{"class":97},[87,56566,56567,56569,56571,56573,56575,56577,56579,56582],{"class":89,"line":17876},[87,56568,12171],{"class":171},[87,56570,7775],{"class":104},[87,56572,14514],{"class":171},[87,56574,55332],{"class":97},[87,56576,55335],{"class":205},[87,56578,165],{"class":97},[87,56580,56581],{"class":949},"'.slider-footer p'",[87,56583,1108],{"class":97},[87,56585,56586,56588,56591,56593,56595,56597,56599,56602],{"class":89,"line":17881},[87,56587,12171],{"class":171},[87,56589,56590],{"class":104}," color",[87,56592,14514],{"class":171},[87,56594,55332],{"class":97},[87,56596,55335],{"class":205},[87,56598,165],{"class":97},[87,56600,56601],{"class":949},"'.slider-footer'",[87,56603,1108],{"class":97},[87,56605,56606,56608,56611,56613,56615,56618,56620,56623],{"class":89,"line":33580},[87,56607,12171],{"class":171},[87,56609,56610],{"class":104}," lis",[87,56612,14514],{"class":171},[87,56614,55332],{"class":97},[87,56616,56617],{"class":205},"querySelectorAll",[87,56619,165],{"class":97},[87,56621,56622],{"class":949},"'.slider-footer ul li'",[87,56624,1108],{"class":97},[87,56626,56627,56629,56631,56633],{"class":89,"line":33586},[87,56628,53156],{"class":171},[87,56630,10388],{"class":97},[87,56632,946],{"class":171},[87,56634,56635],{"class":104}," 1\n",[87,56637,56638,56640,56643,56645,56647,56649,56651],{"class":89,"line":33592},[87,56639,53156],{"class":171},[87,56641,56642],{"class":97}," timer ",[87,56644,946],{"class":171},[87,56646,55380],{"class":205},[87,56648,165],{"class":97},[87,56650,55385],{"class":171},[87,56652,55388],{"class":97},[87,56654,56655,56658,56660],{"class":89,"line":33598},[87,56656,56657],{"class":97},"      img.src ",[87,56659,946],{"class":171},[87,56661,56662],{"class":97}," arrImage[i].url\n",[87,56664,56665,56668,56670],{"class":89,"line":33604},[87,56666,56667],{"class":97},"      p.innerHTML ",[87,56669,946],{"class":171},[87,56671,56672],{"class":97}," arrImage[i].title\n",[87,56674,56675,56678,56680],{"class":89,"line":33615},[87,56676,56677],{"class":97},"      color.style.backgroundColor ",[87,56679,946],{"class":171},[87,56681,56682],{"class":97}," arrImage[i].color\n",[87,56684,56685],{"class":89,"line":33621},[87,56686,56687],{"class":199},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[87,56689,56690],{"class":89,"line":33641},[87,56691,56692],{"class":199},"      \u002F\u002F li.classList.add('activate')\n",[87,56694,56695],{"class":89,"line":33647},[87,56696,56697],{"class":199},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[87,56699,56700],{"class":89,"line":33658},[87,56701,56702],{"class":199},"      \u002F\u002F lis[i].classList.remove('activate')\n",[87,56704,56705,56708,56710,56712,56715,56718,56721,56723,56726],{"class":89,"line":33664},[87,56706,56707],{"class":97},"      document.",[87,56709,55335],{"class":205},[87,56711,165],{"class":97},[87,56713,56714],{"class":949},"'.activate'",[87,56716,56717],{"class":97},")?.classList.",[87,56719,56720],{"class":205},"toggle",[87,56722,165],{"class":97},[87,56724,56725],{"class":949},"'activate'",[87,56727,1108],{"class":97},[87,56729,56730,56733,56735,56737,56739],{"class":89,"line":33670},[87,56731,56732],{"class":97},"      lis[i].classList.",[87,56734,6284],{"class":205},[87,56736,165],{"class":97},[87,56738,56725],{"class":949},[87,56740,1108],{"class":97},[87,56742,56743],{"class":89,"line":33676},[87,56744,3355],{"emptyLinePlaceholder":1029},[87,56746,56747,56750,56752,56754,56756,56758,56760,56762,56765],{"class":89,"line":33682},[87,56748,56749],{"class":97},"      i ",[87,56751,946],{"class":171},[87,56753,55419],{"class":97},[87,56755,1575],{"class":171},[87,56757,568],{"class":104},[87,56759,14664],{"class":97},[87,56761,1423],{"class":171},[87,56763,56764],{"class":97}," arrImage.",[87,56766,56767],{"class":104},"length\n",[87,56769,56770],{"class":89,"line":33688},[87,56771,3355],{"emptyLinePlaceholder":1029},[87,56773,56774,56776,56778],{"class":89,"line":33694},[87,56775,55471],{"class":97},[87,56777,7360],{"class":104},[87,56779,1108],{"class":97},[87,56781,56782,56784,56786],{"class":89,"line":33700},[87,56783,53354],{"class":97},[87,56785,52750],{"class":93},[87,56787,953],{"class":97},[87,56789,56790,56792,56794],{"class":89,"line":33720},[87,56791,963],{"class":97},[87,56793,52737],{"class":93},[87,56795,953],{"class":97},[87,56797,56798],{"class":89,"line":33726},[87,56799,3355],{"emptyLinePlaceholder":1029},[87,56801,56802,56804,56806],{"class":89,"line":33742},[87,56803,963],{"class":97},[87,56805,51581],{"class":93},[87,56807,953],{"class":97},[19,56809,56810],{},[39,56811],{"alt":82,"src":56812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,56814,56815],{},"?.就是短路保护,确保输出正常进行",[19,56817,56818],{},"不要忘记取余%,有时候可以用",[19,56820,56821],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[1055,56823,56824],{"start":101},[29,56825,56826],{},"法2",[77,56828,56830],{"className":51579,"code":56829,"language":51581,"meta":82,"style":82},"\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",[84,56831,56832,56842,56856,56860,56868,56882,56902,56914,56922,56928,56938,56948,56952,56956,56962,56972,56976,56980,56986,56996,57008,57020,57034,57038,57042,57048,57058,57068,57078,57090,57102,57112,57116,57120,57128,57138,57150,57162,57174,57178,57182,57188,57198,57210,57222,57232,57242,57252,57264,57276,57280,57284,57292,57304,57316,57342,57354,57358,57362,57368,57378,57382,57390,57398,57402,57410,57424,57438,57458,57466,57480,57492,57500,57518,57530,57542,57554,57566,57578,57590,57602,57610,57618,57626,57634,57645,57661,57677,57693,57709,57725,57741,57757,57773,57777,57782,57800,57818,57828,57833,57838,57849,57855,57870,57879,57883,57888,57897,57902,57911,57916,57921,57926,57949,57979,57983,57991,57995,58003,58011,58015],{"__ignoreMap":82},[87,56833,56834,56836,56838,56840],{"class":89,"line":90},[87,56835,52243],{"class":97},[87,56837,52246],{"class":93},[87,56839,52249],{"class":205},[87,56841,953],{"class":97},[87,56843,56844,56846,56848,56850,56852,56854],{"class":89,"line":101},[87,56845,938],{"class":97},[87,56847,51581],{"class":93},[87,56849,52260],{"class":205},[87,56851,946],{"class":97},[87,56853,52265],{"class":949},[87,56855,953],{"class":97},[87,56857,56858],{"class":89,"line":120},[87,56859,3355],{"emptyLinePlaceholder":1029},[87,56861,56862,56864,56866],{"class":89,"line":222},[87,56863,938],{"class":97},[87,56865,52278],{"class":93},[87,56867,953],{"class":97},[87,56869,56870,56872,56874,56876,56878,56880],{"class":89,"line":234},[87,56871,53081],{"class":97},[87,56873,52288],{"class":93},[87,56875,52291],{"class":205},[87,56877,946],{"class":97},[87,56879,52296],{"class":949},[87,56881,953],{"class":97},[87,56883,56884,56886,56888,56890,56892,56894,56896,56898,56900],{"class":89,"line":256},[87,56885,53081],{"class":97},[87,56887,52288],{"class":93},[87,56889,15870],{"class":205},[87,56891,946],{"class":97},[87,56893,52335],{"class":949},[87,56895,52315],{"class":205},[87,56897,946],{"class":97},[87,56899,52342],{"class":949},[87,56901,953],{"class":97},[87,56903,56904,56906,56908,56910,56912],{"class":89,"line":269},[87,56905,53081],{"class":97},[87,56907,52351],{"class":93},[87,56909,52354],{"class":97},[87,56911,52351],{"class":93},[87,56913,953],{"class":97},[87,56915,56916,56918,56920],{"class":89,"line":463},[87,56917,53081],{"class":97},[87,56919,1006],{"class":93},[87,56921,953],{"class":97},[87,56923,56924,56926],{"class":89,"line":469},[87,56925,7353],{"class":93},[87,56927,98],{"class":97},[87,56929,56930,56932,56934,56936],{"class":89,"line":2287},[87,56931,55631],{"class":104},[87,56933,108],{"class":97},[87,56935,111],{"class":104},[87,56937,117],{"class":97},[87,56939,56940,56942,56944,56946],{"class":89,"line":2568},[87,56941,55642],{"class":104},[87,56943,108],{"class":97},[87,56945,111],{"class":104},[87,56947,117],{"class":97},[87,56949,56950],{"class":89,"line":2573},[87,56951,3142],{"class":97},[87,56953,56954],{"class":89,"line":2579},[87,56955,3355],{"emptyLinePlaceholder":1029},[87,56957,56958,56960],{"class":89,"line":2584},[87,56959,55661],{"class":93},[87,56961,98],{"class":97},[87,56963,56964,56966,56968,56970],{"class":89,"line":2598},[87,56965,55668],{"class":104},[87,56967,108],{"class":97},[87,56969,55673],{"class":104},[87,56971,117],{"class":97},[87,56973,56974],{"class":89,"line":2603},[87,56975,3142],{"class":97},[87,56977,56978],{"class":89,"line":2609},[87,56979,3355],{"emptyLinePlaceholder":1029},[87,56981,56982,56984],{"class":89,"line":2630},[87,56983,55688],{"class":205},[87,56985,98],{"class":97},[87,56987,56988,56990,56992,56994],{"class":89,"line":2635},[87,56989,55695],{"class":104},[87,56991,108],{"class":97},[87,56993,55700],{"class":104},[87,56995,117],{"class":97},[87,56997,56998,57000,57002,57004,57006],{"class":89,"line":2649},[87,56999,55707],{"class":104},[87,57001,108],{"class":97},[87,57003,55712],{"class":104},[87,57005,245],{"class":171},[87,57007,117],{"class":97},[87,57009,57010,57012,57014,57016,57018],{"class":89,"line":2654},[87,57011,55721],{"class":104},[87,57013,108],{"class":97},[87,57015,2496],{"class":104},[87,57017,245],{"class":171},[87,57019,117],{"class":97},[87,57021,57022,57024,57026,57028,57030,57032],{"class":89,"line":2683},[87,57023,55642],{"class":104},[87,57025,108],{"class":97},[87,57027,536],{"class":104},[87,57029,245],{"class":171},[87,57031,114],{"class":104},[87,57033,117],{"class":97},[87,57035,57036],{"class":89,"line":2688},[87,57037,3142],{"class":97},[87,57039,57040],{"class":89,"line":2705},[87,57041,3355],{"emptyLinePlaceholder":1029},[87,57043,57044,57046],{"class":89,"line":2710},[87,57045,55756],{"class":205},[87,57047,98],{"class":97},[87,57049,57050,57052,57054,57056],{"class":89,"line":2715},[87,57051,55695],{"class":104},[87,57053,108],{"class":97},[87,57055,55767],{"class":104},[87,57057,117],{"class":97},[87,57059,57060,57062,57064,57066],{"class":89,"line":2720},[87,57061,55774],{"class":104},[87,57063,108],{"class":97},[87,57065,111],{"class":104},[87,57067,117],{"class":97},[87,57069,57070,57072,57074,57076],{"class":89,"line":2734},[87,57071,55785],{"class":104},[87,57073,108],{"class":97},[87,57075,111],{"class":104},[87,57077,117],{"class":97},[87,57079,57080,57082,57084,57086,57088],{"class":89,"line":2739},[87,57081,55707],{"class":104},[87,57083,108],{"class":97},[87,57085,536],{"class":104},[87,57087,1423],{"class":171},[87,57089,117],{"class":97},[87,57091,57092,57094,57096,57098,57100],{"class":89,"line":3532},[87,57093,55721],{"class":104},[87,57095,108],{"class":97},[87,57097,1668],{"class":104},[87,57099,1423],{"class":171},[87,57101,117],{"class":97},[87,57103,57104,57106,57108,57110],{"class":89,"line":3546},[87,57105,55820],{"class":104},[87,57107,108],{"class":97},[87,57109,55825],{"class":104},[87,57111,117],{"class":97},[87,57113,57114],{"class":89,"line":3554},[87,57115,3142],{"class":97},[87,57117,57118],{"class":89,"line":3559},[87,57119,3355],{"emptyLinePlaceholder":1029},[87,57121,57122,57124,57126],{"class":89,"line":3565},[87,57123,55756],{"class":205},[87,57125,7775],{"class":93},[87,57127,98],{"class":97},[87,57129,57130,57132,57134,57136],{"class":89,"line":3571},[87,57131,55695],{"class":104},[87,57133,108],{"class":97},[87,57135,55767],{"class":104},[87,57137,117],{"class":97},[87,57139,57140,57142,57144,57146,57148],{"class":89,"line":3576},[87,57141,55858],{"class":104},[87,57143,108],{"class":97},[87,57145,1993],{"class":104},[87,57147,245],{"class":171},[87,57149,117],{"class":97},[87,57151,57152,57154,57156,57158,57160],{"class":89,"line":8898},[87,57153,55774],{"class":104},[87,57155,108],{"class":97},[87,57157,1792],{"class":104},[87,57159,245],{"class":171},[87,57161,117],{"class":97},[87,57163,57164,57166,57168,57170,57172],{"class":89,"line":8922},[87,57165,55883],{"class":104},[87,57167,108],{"class":97},[87,57169,1414],{"class":104},[87,57171,245],{"class":171},[87,57173,117],{"class":97},[87,57175,57176],{"class":89,"line":8927},[87,57177,3142],{"class":97},[87,57179,57180],{"class":89,"line":8933},[87,57181,3355],{"emptyLinePlaceholder":1029},[87,57183,57184,57186],{"class":89,"line":8960},[87,57185,55904],{"class":93},[87,57187,98],{"class":97},[87,57189,57190,57192,57194,57196],{"class":89,"line":8965},[87,57191,55695],{"class":104},[87,57193,108],{"class":97},[87,57195,55767],{"class":104},[87,57197,117],{"class":97},[87,57199,57200,57202,57204,57206,57208],{"class":89,"line":8971},[87,57201,55883],{"class":104},[87,57203,108],{"class":97},[87,57205,1873],{"class":104},[87,57207,245],{"class":171},[87,57209,117],{"class":97},[87,57211,57212,57214,57216,57218,57220],{"class":89,"line":8983},[87,57213,55774],{"class":104},[87,57215,108],{"class":97},[87,57217,1792],{"class":104},[87,57219,245],{"class":171},[87,57221,117],{"class":97},[87,57223,57224,57226,57228,57230],{"class":89,"line":8995},[87,57225,55945],{"class":104},[87,57227,108],{"class":97},[87,57229,52420],{"class":104},[87,57231,117],{"class":97},[87,57233,57234,57236,57238,57240],{"class":89,"line":9007},[87,57235,55956],{"class":104},[87,57237,108],{"class":97},[87,57239,52606],{"class":104},[87,57241,117],{"class":97},[87,57243,57244,57246,57248,57250],{"class":89,"line":10666},[87,57245,55695],{"class":104},[87,57247,108],{"class":97},[87,57249,55767],{"class":104},[87,57251,117],{"class":97},[87,57253,57254,57256,57258,57260,57262],{"class":89,"line":10691},[87,57255,55707],{"class":104},[87,57257,108],{"class":97},[87,57259,4946],{"class":104},[87,57261,245],{"class":171},[87,57263,117],{"class":97},[87,57265,57266,57268,57270,57272,57274],{"class":89,"line":10714},[87,57267,55721],{"class":104},[87,57269,108],{"class":97},[87,57271,1792],{"class":104},[87,57273,245],{"class":171},[87,57275,117],{"class":97},[87,57277,57278],{"class":89,"line":10738},[87,57279,3142],{"class":97},[87,57281,57282],{"class":89,"line":10743},[87,57283,3355],{"emptyLinePlaceholder":1029},[87,57285,57286,57288,57290],{"class":89,"line":10748},[87,57287,55904],{"class":93},[87,57289,56011],{"class":93},[87,57291,98],{"class":97},[87,57293,57294,57296,57298,57300,57302],{"class":89,"line":10753},[87,57295,55707],{"class":104},[87,57297,108],{"class":97},[87,57299,1792],{"class":104},[87,57301,245],{"class":171},[87,57303,117],{"class":97},[87,57305,57306,57308,57310,57312,57314],{"class":89,"line":10762},[87,57307,55721],{"class":104},[87,57309,108],{"class":97},[87,57311,1792],{"class":104},[87,57313,245],{"class":171},[87,57315,117],{"class":97},[87,57317,57318,57320,57322,57324,57326,57328,57330,57332,57334,57336,57338,57340],{"class":89,"line":10767},[87,57319,55820],{"class":104},[87,57321,108],{"class":97},[87,57323,56046],{"class":104},[87,57325,165],{"class":97},[87,57327,111],{"class":104},[87,57329,13385],{"class":97},[87,57331,111],{"class":104},[87,57333,13385],{"class":97},[87,57335,111],{"class":104},[87,57337,13385],{"class":97},[87,57339,56063],{"class":104},[87,57341,175],{"class":97},[87,57343,57344,57346,57348,57350,57352],{"class":89,"line":10773},[87,57345,56070],{"class":104},[87,57347,108],{"class":97},[87,57349,242],{"class":104},[87,57351,245],{"class":171},[87,57353,117],{"class":97},[87,57355,57356],{"class":89,"line":10794},[87,57357,3142],{"class":97},[87,57359,57360],{"class":89,"line":10800},[87,57361,3355],{"emptyLinePlaceholder":1029},[87,57363,57364,57366],{"class":89,"line":10814},[87,57365,56091],{"class":205},[87,57367,98],{"class":97},[87,57369,57370,57372,57374,57376],{"class":89,"line":10820},[87,57371,55820],{"class":104},[87,57373,108],{"class":97},[87,57375,56102],{"class":104},[87,57377,117],{"class":97},[87,57379,57380],{"class":89,"line":10847},[87,57381,3142],{"class":97},[87,57383,57384,57386,57388],{"class":89,"line":10856},[87,57385,53354],{"class":97},[87,57387,1006],{"class":93},[87,57389,953],{"class":97},[87,57391,57392,57394,57396],{"class":89,"line":10862},[87,57393,963],{"class":97},[87,57395,52278],{"class":93},[87,57397,953],{"class":97},[87,57399,57400],{"class":89,"line":10870},[87,57401,3355],{"emptyLinePlaceholder":1029},[87,57403,57404,57406,57408],{"class":89,"line":10875},[87,57405,938],{"class":97},[87,57407,52737],{"class":93},[87,57409,953],{"class":97},[87,57411,57412,57414,57416,57418,57420,57422],{"class":89,"line":17553},[87,57413,53081],{"class":97},[87,57415,94],{"class":93},[87,57417,943],{"class":205},[87,57419,946],{"class":97},[87,57421,54427],{"class":949},[87,57423,953],{"class":97},[87,57425,57426,57428,57430,57432,57434,57436],{"class":89,"line":17559},[87,57427,52285],{"class":97},[87,57429,94],{"class":93},[87,57431,943],{"class":205},[87,57433,946],{"class":97},[87,57435,56163],{"class":949},[87,57437,953],{"class":97},[87,57439,57440,57442,57444,57446,57448,57450,57452,57454,57456],{"class":89,"line":17582},[87,57441,56170],{"class":97},[87,57443,39],{"class":93},[87,57445,56175],{"class":205},[87,57447,946],{"class":97},[87,57449,56180],{"class":949},[87,57451,56183],{"class":205},[87,57453,946],{"class":97},[87,57455,8602],{"class":949},[87,57457,953],{"class":97},[87,57459,57460,57462,57464],{"class":89,"line":17588},[87,57461,52714],{"class":97},[87,57463,94],{"class":93},[87,57465,953],{"class":97},[87,57467,57468,57470,57472,57474,57476,57478],{"class":89,"line":17611},[87,57469,52285],{"class":97},[87,57471,94],{"class":93},[87,57473,943],{"class":205},[87,57475,946],{"class":97},[87,57477,56210],{"class":949},[87,57479,953],{"class":97},[87,57481,57482,57484,57486,57488,57490],{"class":89,"line":17625},[87,57483,56170],{"class":97},[87,57485,19],{"class":93},[87,57487,56221],{"class":97},[87,57489,19],{"class":93},[87,57491,953],{"class":97},[87,57493,57494,57496,57498],{"class":89,"line":17645},[87,57495,56170],{"class":97},[87,57497,26],{"class":93},[87,57499,953],{"class":97},[87,57501,57502,57504,57506,57508,57510,57512,57514,57516],{"class":89,"line":17651},[87,57503,56238],{"class":97},[87,57505,29],{"class":93},[87,57507,943],{"class":205},[87,57509,946],{"class":97},[87,57511,56247],{"class":949},[87,57513,56250],{"class":97},[87,57515,29],{"class":93},[87,57517,953],{"class":97},[87,57519,57520,57522,57524,57526,57528],{"class":89,"line":17662},[87,57521,56238],{"class":97},[87,57523,29],{"class":93},[87,57525,56250],{"class":97},[87,57527,29],{"class":93},[87,57529,953],{"class":97},[87,57531,57532,57534,57536,57538,57540],{"class":89,"line":17685},[87,57533,56238],{"class":97},[87,57535,29],{"class":93},[87,57537,56250],{"class":97},[87,57539,29],{"class":93},[87,57541,953],{"class":97},[87,57543,57544,57546,57548,57550,57552],{"class":89,"line":17707},[87,57545,56238],{"class":97},[87,57547,29],{"class":93},[87,57549,56250],{"class":97},[87,57551,29],{"class":93},[87,57553,953],{"class":97},[87,57555,57556,57558,57560,57562,57564],{"class":89,"line":17712},[87,57557,56238],{"class":97},[87,57559,29],{"class":93},[87,57561,56250],{"class":97},[87,57563,29],{"class":93},[87,57565,953],{"class":97},[87,57567,57568,57570,57572,57574,57576],{"class":89,"line":17718},[87,57569,56238],{"class":97},[87,57571,29],{"class":93},[87,57573,56250],{"class":97},[87,57575,29],{"class":93},[87,57577,953],{"class":97},[87,57579,57580,57582,57584,57586,57588],{"class":89,"line":17732},[87,57581,56238],{"class":97},[87,57583,29],{"class":93},[87,57585,56250],{"class":97},[87,57587,29],{"class":93},[87,57589,953],{"class":97},[87,57591,57592,57594,57596,57598,57600],{"class":89,"line":17745},[87,57593,56238],{"class":97},[87,57595,29],{"class":93},[87,57597,56250],{"class":97},[87,57599,29],{"class":93},[87,57601,953],{"class":97},[87,57603,57604,57606,57608],{"class":89,"line":17750},[87,57605,56343],{"class":97},[87,57607,26],{"class":93},[87,57609,953],{"class":97},[87,57611,57612,57614,57616],{"class":89,"line":17764},[87,57613,52714],{"class":97},[87,57615,94],{"class":93},[87,57617,953],{"class":97},[87,57619,57620,57622,57624],{"class":89,"line":17769},[87,57621,53354],{"class":97},[87,57623,94],{"class":93},[87,57625,953],{"class":97},[87,57627,57628,57630,57632],{"class":89,"line":17775},[87,57629,53081],{"class":97},[87,57631,52750],{"class":93},[87,57633,953],{"class":97},[87,57635,57636,57638,57641,57643],{"class":89,"line":17780},[87,57637,12171],{"class":171},[87,57639,57640],{"class":104}," sliderData",[87,57642,14514],{"class":171},[87,57644,56383],{"class":97},[87,57646,57647,57649,57651,57653,57655,57657,57659],{"class":89,"line":17794},[87,57648,56388],{"class":97},[87,57650,56391],{"class":949},[87,57652,56394],{"class":97},[87,57654,56397],{"class":949},[87,57656,56400],{"class":97},[87,57658,56403],{"class":949},[87,57660,56406],{"class":97},[87,57662,57663,57665,57667,57669,57671,57673,57675],{"class":89,"line":17799},[87,57664,56388],{"class":97},[87,57666,56413],{"class":949},[87,57668,56394],{"class":97},[87,57670,56418],{"class":949},[87,57672,56400],{"class":97},[87,57674,56423],{"class":949},[87,57676,56406],{"class":97},[87,57678,57679,57681,57683,57685,57687,57689,57691],{"class":89,"line":17804},[87,57680,56388],{"class":97},[87,57682,56432],{"class":949},[87,57684,56394],{"class":97},[87,57686,56437],{"class":949},[87,57688,56400],{"class":97},[87,57690,56442],{"class":949},[87,57692,56406],{"class":97},[87,57694,57695,57697,57699,57701,57703,57705,57707],{"class":89,"line":17818},[87,57696,56388],{"class":97},[87,57698,56451],{"class":949},[87,57700,56394],{"class":97},[87,57702,56456],{"class":949},[87,57704,56400],{"class":97},[87,57706,56461],{"class":949},[87,57708,56406],{"class":97},[87,57710,57711,57713,57715,57717,57719,57721,57723],{"class":89,"line":17830},[87,57712,56388],{"class":97},[87,57714,56470],{"class":949},[87,57716,56394],{"class":97},[87,57718,56475],{"class":949},[87,57720,56400],{"class":97},[87,57722,56480],{"class":949},[87,57724,56406],{"class":97},[87,57726,57727,57729,57731,57733,57735,57737,57739],{"class":89,"line":17835},[87,57728,56388],{"class":97},[87,57730,56489],{"class":949},[87,57732,56394],{"class":97},[87,57734,56494],{"class":949},[87,57736,56400],{"class":97},[87,57738,56499],{"class":949},[87,57740,56406],{"class":97},[87,57742,57743,57745,57747,57749,57751,57753,57755],{"class":89,"line":17848},[87,57744,56388],{"class":97},[87,57746,56508],{"class":949},[87,57748,56394],{"class":97},[87,57750,56513],{"class":949},[87,57752,56400],{"class":97},[87,57754,56518],{"class":949},[87,57756,56406],{"class":97},[87,57758,57759,57761,57763,57765,57767,57769,57771],{"class":89,"line":17853},[87,57760,56388],{"class":97},[87,57762,56527],{"class":949},[87,57764,56394],{"class":97},[87,57766,56532],{"class":949},[87,57768,56400],{"class":97},[87,57770,56537],{"class":949},[87,57772,56540],{"class":97},[87,57774,57775],{"class":89,"line":17858},[87,57776,54046],{"class":97},[87,57778,57779],{"class":89,"line":17863},[87,57780,57781],{"class":199},"    \u002F\u002F 1.获取元素\n",[87,57783,57784,57786,57788,57790,57792,57794,57796,57798],{"class":89,"line":17876},[87,57785,12171],{"class":171},[87,57787,56551],{"class":104},[87,57789,14514],{"class":171},[87,57791,55332],{"class":97},[87,57793,55335],{"class":205},[87,57795,165],{"class":97},[87,57797,56562],{"class":949},[87,57799,1108],{"class":97},[87,57801,57802,57804,57806,57808,57810,57812,57814,57816],{"class":89,"line":17881},[87,57803,12171],{"class":171},[87,57805,7775],{"class":104},[87,57807,14514],{"class":171},[87,57809,55332],{"class":97},[87,57811,55335],{"class":205},[87,57813,165],{"class":97},[87,57815,56581],{"class":949},[87,57817,1108],{"class":97},[87,57819,57820,57822,57824,57826],{"class":89,"line":33580},[87,57821,53156],{"class":171},[87,57823,10388],{"class":97},[87,57825,946],{"class":171},[87,57827,48280],{"class":104},[87,57829,57830],{"class":89,"line":33586},[87,57831,57832],{"class":199},"    \u002F\u002F 2.开启定时器\n",[87,57834,57835],{"class":89,"line":33592},[87,57836,57837],{"class":199},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[87,57839,57840,57843,57845,57847],{"class":89,"line":33598},[87,57841,57842],{"class":205},"    setInterval",[87,57844,165],{"class":97},[87,57846,55385],{"class":171},[87,57848,55388],{"class":97},[87,57850,57851,57853],{"class":89,"line":33604},[87,57852,55393],{"class":97},[87,57854,3657],{"class":171},[87,57856,57857,57859,57861,57863,57866,57868],{"class":89,"line":33615},[87,57858,55416],{"class":171},[87,57860,55419],{"class":97},[87,57862,2666],{"class":171},[87,57864,57865],{"class":97}," sliderData.",[87,57867,52905],{"class":104},[87,57869,13392],{"class":97},[87,57871,57872,57875,57877],{"class":89,"line":33621},[87,57873,57874],{"class":97},"        i ",[87,57876,946],{"class":171},[87,57878,48280],{"class":104},[87,57880,57881],{"class":89,"line":33641},[87,57882,53335],{"class":97},[87,57884,57885],{"class":89,"line":33647},[87,57886,57887],{"class":199},"      \u002F\u002F 更换图片路径\n",[87,57889,57890,57892,57894],{"class":89,"line":33658},[87,57891,56657],{"class":97},[87,57893,946],{"class":171},[87,57895,57896],{"class":97}," sliderData[i].url\n",[87,57898,57899],{"class":89,"line":33664},[87,57900,57901],{"class":199},"      \u002F\u002F 把文字写到p里面\n",[87,57903,57904,57906,57908],{"class":89,"line":33670},[87,57905,56667],{"class":97},[87,57907,946],{"class":171},[87,57909,57910],{"class":97}," sliderData[i].title\n",[87,57912,57913],{"class":89,"line":33676},[87,57914,57915],{"class":199},"      \u002F\u002F 小圆点\n",[87,57917,57918],{"class":89,"line":33682},[87,57919,57920],{"class":199},"      \u002F\u002F 先删除以前的active\n",[87,57922,57923],{"class":89,"line":33688},[87,57924,57925],{"class":199},"      \u002F\u002F 只让当前li添加active\n",[87,57927,57928,57930,57932,57934,57937,57940,57943,57945,57947],{"class":89,"line":33694},[87,57929,56707],{"class":97},[87,57931,55335],{"class":205},[87,57933,165],{"class":97},[87,57935,57936],{"class":949},"'.slider-footer .activate'",[87,57938,57939],{"class":97},").classList.",[87,57941,57942],{"class":205},"remove",[87,57944,165],{"class":97},[87,57946,56725],{"class":949},[87,57948,1108],{"class":97},[87,57950,57951,57953,57955,57957,57960,57962,57964,57966,57969,57971,57973,57975,57977],{"class":89,"line":33700},[87,57952,56707],{"class":97},[87,57954,55335],{"class":205},[87,57956,165],{"class":97},[87,57958,57959],{"class":949},"`.slider-footer ul li:nth-child(${",[87,57961,1536],{"class":97},[87,57963,46513],{"class":171},[87,57965,568],{"class":104},[87,57967,57968],{"class":949},"})`",[87,57970,57939],{"class":97},[87,57972,6284],{"class":205},[87,57974,165],{"class":97},[87,57976,56725],{"class":949},[87,57978,1108],{"class":97},[87,57980,57981],{"class":89,"line":33720},[87,57982,3355],{"emptyLinePlaceholder":1029},[87,57984,57985,57987,57989],{"class":89,"line":33726},[87,57986,55471],{"class":97},[87,57988,7360],{"class":104},[87,57990,1108],{"class":97},[87,57992,57993],{"class":89,"line":33742},[87,57994,3355],{"emptyLinePlaceholder":1029},[87,57996,57997,57999,58001],{"class":89,"line":33748},[87,57998,53354],{"class":97},[87,58000,52750],{"class":93},[87,58002,953],{"class":97},[87,58004,58005,58007,58009],{"class":89,"line":33762},[87,58006,963],{"class":97},[87,58008,52737],{"class":93},[87,58010,953],{"class":97},[87,58012,58013],{"class":89,"line":33768},[87,58014,3355],{"emptyLinePlaceholder":1029},[87,58016,58017,58019,58021],{"class":89,"line":33783},[87,58018,963],{"class":97},[87,58020,51581],{"class":93},[87,58022,953],{"class":97},[44,58024,58026],{"id":58025},"_317-重要知识点","3.1.7 重要知识点",[19,58028,58029,58030],{},"浏览器在渲染文本时， ",[57,58031,58032],{},"没有空格或换行符就没有“断行点”",[19,58034,58035],{},[39,58036],{"alt":82,"src":58037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,58039,58040],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,58042,58043],{},[39,58044],{"alt":82,"src":58045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,58047,58048],{},[39,58049],{"alt":82,"src":58050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58052,58054],{"id":58053},"_32-dom事件基础","3.2 DOM事件基础",[44,58056,58058],{"id":58057},"_321-事件监听","3.2.1 事件监听",[19,58060,58061],{},[39,58062],{"alt":82,"src":58063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,58065,58066],{},"事件监听有响应的发生",[19,58068,58069],{},[39,58070],{"alt":82,"src":58071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,58073,58074],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,58076,58077],{},"对于有名函数,要执行的函数名后边不要加()",[44,58079,58081],{"id":58080},"_322-随机点名案例","3.2.2 随机点名案例",[77,58083,58085],{"className":51579,"code":58084,"language":51581,"meta":82,"style":82},"\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",[84,58086,58087,58097,58111,58115,58123,58137,58157,58169,58177,58183,58193,58203,58207,58211,58218,58229,58233,58237,58243,58255,58269,58279,58291,58304,58308,58312,58319,58323,58336,58348,58360,58364,58368,58372,58379,58389,58393,58397,58406,58418,58430,58445,58449,58457,58465,58469,58477,58490,58504,58517,58537,58545,58560,58580,58600,58608,58612,58620,58625,58661,58681,58686,58705,58710,58721,58726,58737,58742,58761,58776,58781,58807,58817,58826,58831,58847,58852,58857,58862,58877,58881,58885,58890,58909,58926,58934,58939,58954,58958,58962,58970,58978,58982],{"__ignoreMap":82},[87,58088,58089,58091,58093,58095],{"class":89,"line":90},[87,58090,52243],{"class":97},[87,58092,52246],{"class":93},[87,58094,52249],{"class":205},[87,58096,953],{"class":97},[87,58098,58099,58101,58103,58105,58107,58109],{"class":89,"line":101},[87,58100,938],{"class":97},[87,58102,51581],{"class":93},[87,58104,52260],{"class":205},[87,58106,946],{"class":97},[87,58108,52265],{"class":949},[87,58110,953],{"class":97},[87,58112,58113],{"class":89,"line":120},[87,58114,3355],{"emptyLinePlaceholder":1029},[87,58116,58117,58119,58121],{"class":89,"line":222},[87,58118,938],{"class":97},[87,58120,52278],{"class":93},[87,58122,953],{"class":97},[87,58124,58125,58127,58129,58131,58133,58135],{"class":89,"line":234},[87,58126,53081],{"class":97},[87,58128,52288],{"class":93},[87,58130,52291],{"class":205},[87,58132,946],{"class":97},[87,58134,52296],{"class":949},[87,58136,953],{"class":97},[87,58138,58139,58141,58143,58145,58147,58149,58151,58153,58155],{"class":89,"line":256},[87,58140,53081],{"class":97},[87,58142,52288],{"class":93},[87,58144,15870],{"class":205},[87,58146,946],{"class":97},[87,58148,52335],{"class":949},[87,58150,52315],{"class":205},[87,58152,946],{"class":97},[87,58154,52342],{"class":949},[87,58156,953],{"class":97},[87,58158,58159,58161,58163,58165,58167],{"class":89,"line":269},[87,58160,53081],{"class":97},[87,58162,52351],{"class":93},[87,58164,52354],{"class":97},[87,58166,52351],{"class":93},[87,58168,953],{"class":97},[87,58170,58171,58173,58175],{"class":89,"line":463},[87,58172,53081],{"class":97},[87,58174,1006],{"class":93},[87,58176,953],{"class":97},[87,58178,58179,58181],{"class":89,"line":469},[87,58180,7353],{"class":93},[87,58182,98],{"class":97},[87,58184,58185,58187,58189,58191],{"class":89,"line":2287},[87,58186,55642],{"class":104},[87,58188,108],{"class":97},[87,58190,111],{"class":104},[87,58192,117],{"class":97},[87,58194,58195,58197,58199,58201],{"class":89,"line":2568},[87,58196,55631],{"class":104},[87,58198,108],{"class":97},[87,58200,111],{"class":104},[87,58202,117],{"class":97},[87,58204,58205],{"class":89,"line":2573},[87,58206,3142],{"class":97},[87,58208,58209],{"class":89,"line":2579},[87,58210,3355],{"emptyLinePlaceholder":1029},[87,58212,58213,58216],{"class":89,"line":2584},[87,58214,58215],{"class":93},"    h2",[87,58217,98],{"class":97},[87,58219,58220,58223,58225,58227],{"class":89,"line":2598},[87,58221,58222],{"class":104},"      text-align",[87,58224,108],{"class":97},[87,58226,318],{"class":104},[87,58228,117],{"class":97},[87,58230,58231],{"class":89,"line":2603},[87,58232,3142],{"class":97},[87,58234,58235],{"class":89,"line":2609},[87,58236,3355],{"emptyLinePlaceholder":1029},[87,58238,58239,58241],{"class":89,"line":2630},[87,58240,55688],{"class":205},[87,58242,98],{"class":97},[87,58244,58245,58247,58249,58251,58253],{"class":89,"line":2635},[87,58246,55707],{"class":104},[87,58248,108],{"class":97},[87,58250,2496],{"class":104},[87,58252,245],{"class":171},[87,58254,117],{"class":97},[87,58256,58257,58259,58261,58263,58265,58267],{"class":89,"line":2649},[87,58258,55642],{"class":104},[87,58260,108],{"class":97},[87,58262,1749],{"class":104},[87,58264,245],{"class":171},[87,58266,114],{"class":104},[87,58268,117],{"class":97},[87,58270,58271,58273,58275,58277],{"class":89,"line":2654},[87,58272,55945],{"class":104},[87,58274,108],{"class":97},[87,58276,52420],{"class":104},[87,58278,117],{"class":97},[87,58280,58281,58283,58285,58287,58289],{"class":89,"line":2683},[87,58282,55858],{"class":104},[87,58284,108],{"class":97},[87,58286,1917],{"class":104},[87,58288,245],{"class":171},[87,58290,117],{"class":97},[87,58292,58293,58296,58298,58300,58302],{"class":89,"line":2688},[87,58294,58295],{"class":104},"      line-height",[87,58297,108],{"class":97},[87,58299,1496],{"class":104},[87,58301,245],{"class":171},[87,58303,117],{"class":97},[87,58305,58306],{"class":89,"line":2705},[87,58307,3142],{"class":97},[87,58309,58310],{"class":89,"line":2710},[87,58311,3355],{"emptyLinePlaceholder":1029},[87,58313,58314,58317],{"class":89,"line":2715},[87,58315,58316],{"class":205},"    .qs",[87,58318,98],{"class":97},[87,58320,58321],{"class":89,"line":2720},[87,58322,3355],{"emptyLinePlaceholder":1029},[87,58324,58325,58327,58329,58332,58334],{"class":89,"line":2734},[87,58326,55707],{"class":104},[87,58328,108],{"class":97},[87,58330,58331],{"class":104},"450",[87,58333,245],{"class":171},[87,58335,117],{"class":97},[87,58337,58338,58340,58342,58344,58346],{"class":89,"line":2739},[87,58339,55721],{"class":104},[87,58341,108],{"class":97},[87,58343,1496],{"class":104},[87,58345,245],{"class":171},[87,58347,117],{"class":97},[87,58349,58350,58353,58355,58358],{"class":89,"line":3532},[87,58351,58352],{"class":104},"      color",[87,58354,108],{"class":97},[87,58356,58357],{"class":104},"red",[87,58359,117],{"class":97},[87,58361,58362],{"class":89,"line":3546},[87,58363,3355],{"emptyLinePlaceholder":1029},[87,58365,58366],{"class":89,"line":3554},[87,58367,3142],{"class":97},[87,58369,58370],{"class":89,"line":3559},[87,58371,3355],{"emptyLinePlaceholder":1029},[87,58373,58374,58377],{"class":89,"line":3565},[87,58375,58376],{"class":205},"    .btns",[87,58378,98],{"class":97},[87,58380,58381,58383,58385,58387],{"class":89,"line":3571},[87,58382,58222],{"class":104},[87,58384,108],{"class":97},[87,58386,318],{"class":104},[87,58388,117],{"class":97},[87,58390,58391],{"class":89,"line":3576},[87,58392,3142],{"class":97},[87,58394,58395],{"class":89,"line":8898},[87,58396,3355],{"emptyLinePlaceholder":1029},[87,58398,58399,58401,58404],{"class":89,"line":8922},[87,58400,58376],{"class":205},[87,58402,58403],{"class":93}," button",[87,58405,98],{"class":97},[87,58407,58408,58410,58412,58414,58416],{"class":89,"line":8927},[87,58409,55707],{"class":104},[87,58411,108],{"class":97},[87,58413,1909],{"class":104},[87,58415,245],{"class":171},[87,58417,117],{"class":97},[87,58419,58420,58422,58424,58426,58428],{"class":89,"line":8933},[87,58421,55721],{"class":104},[87,58423,108],{"class":97},[87,58425,1369],{"class":104},[87,58427,245],{"class":171},[87,58429,117],{"class":97},[87,58431,58432,58434,58436,58438,58441,58443],{"class":89,"line":8960},[87,58433,55642],{"class":104},[87,58435,108],{"class":97},[87,58437,111],{"class":104},[87,58439,58440],{"class":104}," 50",[87,58442,245],{"class":171},[87,58444,117],{"class":97},[87,58446,58447],{"class":89,"line":8965},[87,58448,3142],{"class":97},[87,58450,58451,58453,58455],{"class":89,"line":8971},[87,58452,53354],{"class":97},[87,58454,1006],{"class":93},[87,58456,953],{"class":97},[87,58458,58459,58461,58463],{"class":89,"line":8983},[87,58460,963],{"class":97},[87,58462,52278],{"class":93},[87,58464,953],{"class":97},[87,58466,58467],{"class":89,"line":8995},[87,58468,3355],{"emptyLinePlaceholder":1029},[87,58470,58471,58473,58475],{"class":89,"line":9007},[87,58472,938],{"class":97},[87,58474,52737],{"class":93},[87,58476,953],{"class":97},[87,58478,58479,58481,58483,58486,58488],{"class":89,"line":10666},[87,58480,53081],{"class":97},[87,58482,14],{"class":93},[87,58484,58485],{"class":97},">随机点名\u003C\u002F",[87,58487,14],{"class":93},[87,58489,953],{"class":97},[87,58491,58492,58494,58496,58498,58500,58502],{"class":89,"line":10691},[87,58493,53081],{"class":97},[87,58495,94],{"class":93},[87,58497,943],{"class":205},[87,58499,946],{"class":97},[87,58501,54427],{"class":949},[87,58503,953],{"class":97},[87,58505,58506,58508,58510,58513,58515],{"class":89,"line":10714},[87,58507,52285],{"class":97},[87,58509,87],{"class":93},[87,58511,58512],{"class":97},">名字是：\u003C\u002F",[87,58514,87],{"class":93},[87,58516,953],{"class":97},[87,58518,58519,58521,58523,58525,58527,58530,58533,58535],{"class":89,"line":10738},[87,58520,52285],{"class":97},[87,58522,94],{"class":93},[87,58524,943],{"class":205},[87,58526,946],{"class":97},[87,58528,58529],{"class":949},"\"qs\"",[87,58531,58532],{"class":97},">这里显示姓名\u003C\u002F",[87,58534,94],{"class":93},[87,58536,953],{"class":97},[87,58538,58539,58541,58543],{"class":89,"line":10743},[87,58540,53354],{"class":97},[87,58542,94],{"class":93},[87,58544,953],{"class":97},[87,58546,58547,58549,58551,58553,58555,58558],{"class":89,"line":10748},[87,58548,53081],{"class":97},[87,58550,94],{"class":93},[87,58552,943],{"class":205},[87,58554,946],{"class":97},[87,58556,58557],{"class":949},"\"btns\"",[87,58559,953],{"class":97},[87,58561,58562,58564,58566,58568,58570,58573,58576,58578],{"class":89,"line":10753},[87,58563,52285],{"class":97},[87,58565,54823],{"class":93},[87,58567,943],{"class":205},[87,58569,946],{"class":97},[87,58571,58572],{"class":949},"\"start\"",[87,58574,58575],{"class":97},">开始\u003C\u002F",[87,58577,54823],{"class":93},[87,58579,953],{"class":97},[87,58581,58582,58584,58586,58588,58590,58593,58596,58598],{"class":89,"line":10762},[87,58583,52285],{"class":97},[87,58585,54823],{"class":93},[87,58587,943],{"class":205},[87,58589,946],{"class":97},[87,58591,58592],{"class":949},"\"end\"",[87,58594,58595],{"class":97},">结束\u003C\u002F",[87,58597,54823],{"class":93},[87,58599,953],{"class":97},[87,58601,58602,58604,58606],{"class":89,"line":10767},[87,58603,53354],{"class":97},[87,58605,94],{"class":93},[87,58607,953],{"class":97},[87,58609,58610],{"class":89,"line":10773},[87,58611,3355],{"emptyLinePlaceholder":1029},[87,58613,58614,58616,58618],{"class":89,"line":10794},[87,58615,53081],{"class":97},[87,58617,52750],{"class":93},[87,58619,953],{"class":97},[87,58621,58622],{"class":89,"line":10800},[87,58623,58624],{"class":199},"    \u002F\u002F 数据数组\n",[87,58626,58627,58629,58632,58634,58636,58639,58641,58644,58646,58649,58651,58654,58656,58659],{"class":89,"line":10814},[87,58628,12171],{"class":171},[87,58630,58631],{"class":104}," arr",[87,58633,14514],{"class":171},[87,58635,53163],{"class":97},[87,58637,58638],{"class":949},"'马超'",[87,58640,13385],{"class":97},[87,58642,58643],{"class":949},"'黄忠'",[87,58645,13385],{"class":97},[87,58647,58648],{"class":949},"'赵云'",[87,58650,13385],{"class":97},[87,58652,58653],{"class":949},"'关羽'",[87,58655,13385],{"class":97},[87,58657,58658],{"class":949},"'张飞'",[87,58660,34193],{"class":97},[87,58662,58663,58665,58668,58670,58672,58674,58676,58679],{"class":89,"line":10820},[87,58664,12171],{"class":171},[87,58666,58667],{"class":104}," qs",[87,58669,14514],{"class":171},[87,58671,55332],{"class":97},[87,58673,55335],{"class":205},[87,58675,165],{"class":97},[87,58677,58678],{"class":949},"'.qs'",[87,58680,1108],{"class":97},[87,58682,58683],{"class":89,"line":10847},[87,58684,58685],{"class":199},"    \u002F\u002F 1.业务1.开始按钮模块\n",[87,58687,58688,58690,58692,58694,58696,58698,58700,58703],{"class":89,"line":10856},[87,58689,12171],{"class":171},[87,58691,5137],{"class":104},[87,58693,14514],{"class":171},[87,58695,55332],{"class":97},[87,58697,55335],{"class":205},[87,58699,165],{"class":97},[87,58701,58702],{"class":949},"'.start'",[87,58704,1108],{"class":97},[87,58706,58707],{"class":89,"line":10862},[87,58708,58709],{"class":199},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[87,58711,58712,58714,58717,58719],{"class":89,"line":10870},[87,58713,53156],{"class":171},[87,58715,58716],{"class":97}," timerId ",[87,58718,946],{"class":171},[87,58720,48280],{"class":104},[87,58722,58723],{"class":89,"line":10875},[87,58724,58725],{"class":199},"    \u002F\u002F 随机号要全局变量\n",[87,58727,58728,58730,58733,58735],{"class":89,"line":17553},[87,58729,53156],{"class":171},[87,58731,58732],{"class":97}," random ",[87,58734,946],{"class":171},[87,58736,48280],{"class":104},[87,58738,58739],{"class":89,"line":17559},[87,58740,58741],{"class":199},"    \u002F\u002F 1.1 添加点击事件\n",[87,58743,58744,58747,58750,58752,58755,58757,58759],{"class":89,"line":17582},[87,58745,58746],{"class":97},"    start.",[87,58748,58749],{"class":205},"addEventListener",[87,58751,165],{"class":97},[87,58753,58754],{"class":949},"'click'",[87,58756,13385],{"class":97},[87,58758,55385],{"class":171},[87,58760,55388],{"class":97},[87,58762,58763,58766,58768,58770,58772,58774],{"class":89,"line":17588},[87,58764,58765],{"class":97},"      timerId ",[87,58767,946],{"class":171},[87,58769,55380],{"class":205},[87,58771,165],{"class":97},[87,58773,55385],{"class":171},[87,58775,55388],{"class":97},[87,58777,58778],{"class":89,"line":17611},[87,58779,58780],{"class":199},"        \u002F\u002F 随机数\n",[87,58782,58783,58786,58788,58791,58794,58797,58799,58801,58803,58805],{"class":89,"line":17625},[87,58784,58785],{"class":97},"        random ",[87,58787,946],{"class":171},[87,58789,58790],{"class":205}," parseInt",[87,58792,58793],{"class":97},"(Math.",[87,58795,58796],{"class":205},"random",[87,58798,14000],{"class":97},[87,58800,1549],{"class":171},[87,58802,52902],{"class":97},[87,58804,52905],{"class":104},[87,58806,1108],{"class":97},[87,58808,58809,58812,58814],{"class":89,"line":17645},[87,58810,58811],{"class":97},"        qs.innerHTML ",[87,58813,946],{"class":171},[87,58815,58816],{"class":97}," arr[random]\n",[87,58818,58819,58822,58824],{"class":89,"line":17651},[87,58820,58821],{"class":97},"      }, ",[87,58823,1369],{"class":104},[87,58825,1108],{"class":97},[87,58827,58828],{"class":89,"line":17662},[87,58829,58830],{"class":199},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[87,58832,58833,58835,58838,58840,58843,58845],{"class":89,"line":17685},[87,58834,55416],{"class":171},[87,58836,58837],{"class":97}," (arr.",[87,58839,52905],{"class":104},[87,58841,58842],{"class":171}," ===",[87,58844,568],{"class":104},[87,58846,13392],{"class":97},[87,58848,58849],{"class":89,"line":17707},[87,58850,58851],{"class":199},"        \u002F\u002F start.disabled = true\n",[87,58853,58854],{"class":89,"line":17712},[87,58855,58856],{"class":199},"        \u002F\u002F end.disabled = true\n",[87,58858,58859],{"class":89,"line":17718},[87,58860,58861],{"class":199},"        \u002F\u002F 可以合起来写\n",[87,58863,58864,58867,58869,58872,58874],{"class":89,"line":17732},[87,58865,58866],{"class":97},"        start.disabled ",[87,58868,946],{"class":171},[87,58870,58871],{"class":97}," end.disabled ",[87,58873,946],{"class":171},[87,58875,58876],{"class":104}," true\n",[87,58878,58879],{"class":89,"line":17745},[87,58880,53335],{"class":97},[87,58882,58883],{"class":89,"line":17750},[87,58884,34408],{"class":97},[87,58886,58887],{"class":89,"line":17764},[87,58888,58889],{"class":199},"    \u002F\u002F 1.2 关闭按钮模块\n",[87,58891,58892,58894,58896,58898,58900,58902,58904,58907],{"class":89,"line":17769},[87,58893,12171],{"class":171},[87,58895,5153],{"class":104},[87,58897,14514],{"class":171},[87,58899,55332],{"class":97},[87,58901,55335],{"class":205},[87,58903,165],{"class":97},[87,58905,58906],{"class":949},"'.end'",[87,58908,1108],{"class":97},[87,58910,58911,58914,58916,58918,58920,58922,58924],{"class":89,"line":17775},[87,58912,58913],{"class":97},"    end.",[87,58915,58749],{"class":205},[87,58917,165],{"class":97},[87,58919,58754],{"class":949},[87,58921,13385],{"class":97},[87,58923,55385],{"class":171},[87,58925,55388],{"class":97},[87,58927,58928,58931],{"class":89,"line":17780},[87,58929,58930],{"class":205},"      clearInterval",[87,58932,58933],{"class":97},"(timerId)\n",[87,58935,58936],{"class":89,"line":17794},[87,58937,58938],{"class":199},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[87,58940,58941,58944,58947,58950,58952],{"class":89,"line":17799},[87,58942,58943],{"class":97},"      arr.",[87,58945,58946],{"class":205},"splice",[87,58948,58949],{"class":97},"(random, ",[87,58951,1313],{"class":104},[87,58953,1108],{"class":97},[87,58955,58956],{"class":89,"line":17804},[87,58957,34408],{"class":97},[87,58959,58960],{"class":89,"line":17818},[87,58961,3355],{"emptyLinePlaceholder":1029},[87,58963,58964,58966,58968],{"class":89,"line":17830},[87,58965,53354],{"class":97},[87,58967,52750],{"class":93},[87,58969,953],{"class":97},[87,58971,58972,58974,58976],{"class":89,"line":17835},[87,58973,963],{"class":97},[87,58975,52737],{"class":93},[87,58977,953],{"class":97},[87,58979,58980],{"class":89,"line":17848},[87,58981,3355],{"emptyLinePlaceholder":1029},[87,58983,58984,58986,58988],{"class":89,"line":17853},[87,58985,963],{"class":97},[87,58987,51581],{"class":93},[87,58989,953],{"class":97},[19,58991,58992],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[44,58994,58996],{"id":58995},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[77,58998,59000],{"className":51579,"code":58999,"language":51581,"meta":82,"style":82},"\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",[84,59001,59002,59012,59026,59030,59038,59052,59072,59084,59092,59096,59104,59116,59124,59143,59160,59176,59186,59190,59198,59206,59210],{"__ignoreMap":82},[87,59003,59004,59006,59008,59010],{"class":89,"line":90},[87,59005,52243],{"class":97},[87,59007,52246],{"class":93},[87,59009,52249],{"class":205},[87,59011,953],{"class":97},[87,59013,59014,59016,59018,59020,59022,59024],{"class":89,"line":101},[87,59015,938],{"class":97},[87,59017,51581],{"class":93},[87,59019,52260],{"class":205},[87,59021,946],{"class":97},[87,59023,52265],{"class":949},[87,59025,953],{"class":97},[87,59027,59028],{"class":89,"line":120},[87,59029,3355],{"emptyLinePlaceholder":1029},[87,59031,59032,59034,59036],{"class":89,"line":222},[87,59033,938],{"class":97},[87,59035,52278],{"class":93},[87,59037,953],{"class":97},[87,59039,59040,59042,59044,59046,59048,59050],{"class":89,"line":234},[87,59041,53081],{"class":97},[87,59043,52288],{"class":93},[87,59045,52291],{"class":205},[87,59047,946],{"class":97},[87,59049,52296],{"class":949},[87,59051,953],{"class":97},[87,59053,59054,59056,59058,59060,59062,59064,59066,59068,59070],{"class":89,"line":256},[87,59055,53081],{"class":97},[87,59057,52288],{"class":93},[87,59059,15870],{"class":205},[87,59061,946],{"class":97},[87,59063,52335],{"class":949},[87,59065,52315],{"class":205},[87,59067,946],{"class":97},[87,59069,52342],{"class":949},[87,59071,953],{"class":97},[87,59073,59074,59076,59078,59080,59082],{"class":89,"line":269},[87,59075,53081],{"class":97},[87,59077,52351],{"class":93},[87,59079,52354],{"class":97},[87,59081,52351],{"class":93},[87,59083,953],{"class":97},[87,59085,59086,59088,59090],{"class":89,"line":463},[87,59087,963],{"class":97},[87,59089,52278],{"class":93},[87,59091,953],{"class":97},[87,59093,59094],{"class":89,"line":469},[87,59095,3355],{"emptyLinePlaceholder":1029},[87,59097,59098,59100,59102],{"class":89,"line":2287},[87,59099,938],{"class":97},[87,59101,52737],{"class":93},[87,59103,953],{"class":97},[87,59105,59106,59108,59110,59112,59114],{"class":89,"line":2568},[87,59107,53081],{"class":97},[87,59109,54823],{"class":93},[87,59111,54829],{"class":97},[87,59113,54823],{"class":93},[87,59115,953],{"class":97},[87,59117,59118,59120,59122],{"class":89,"line":2573},[87,59119,53081],{"class":97},[87,59121,52750],{"class":93},[87,59123,953],{"class":97},[87,59125,59126,59128,59130,59132,59134,59136,59138,59141],{"class":89,"line":2579},[87,59127,12171],{"class":171},[87,59129,55327],{"class":104},[87,59131,14514],{"class":171},[87,59133,55332],{"class":97},[87,59135,55335],{"class":205},[87,59137,165],{"class":97},[87,59139,59140],{"class":949},"'button'",[87,59142,1108],{"class":97},[87,59144,59145,59148,59150,59152,59154,59156,59158],{"class":89,"line":2584},[87,59146,59147],{"class":97},"    btn.",[87,59149,58749],{"class":205},[87,59151,165],{"class":97},[87,59153,58754],{"class":949},[87,59155,13385],{"class":97},[87,59157,55385],{"class":171},[87,59159,55388],{"class":97},[87,59161,59162,59165,59167,59169,59172,59174],{"class":89,"line":2598},[87,59163,59164],{"class":171},"      const",[87,59166,3195],{"class":104},[87,59168,14514],{"class":171},[87,59170,59171],{"class":97}," Math.",[87,59173,58796],{"class":205},[87,59175,2931],{"class":97},[87,59177,59178,59181,59184],{"class":89,"line":2603},[87,59179,59180],{"class":97},"      console.",[87,59182,59183],{"class":205},"log",[87,59185,1115],{"class":97},[87,59187,59188],{"class":89,"line":2609},[87,59189,34408],{"class":97},[87,59191,59192,59194,59196],{"class":89,"line":2630},[87,59193,53354],{"class":97},[87,59195,52750],{"class":93},[87,59197,953],{"class":97},[87,59199,59200,59202,59204],{"class":89,"line":2635},[87,59201,963],{"class":97},[87,59203,52737],{"class":93},[87,59205,953],{"class":97},[87,59207,59208],{"class":89,"line":2649},[87,59209,3355],{"emptyLinePlaceholder":1029},[87,59211,59212,59214,59216],{"class":89,"line":2654},[87,59213,963],{"class":97},[87,59215,51581],{"class":93},[87,59217,953],{"class":97},[19,59219,59220],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,59222,59223],{},"常量不可以重新赋值",[19,59225,59226],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[77,59228,59230],{"className":51579,"code":59229,"language":51581,"meta":82,"style":82},"\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",[84,59231,59232,59242,59256,59260,59268,59282,59302,59314,59322,59326,59334,59346,59354,59365,59383,59399,59413,59421,59425,59433,59441,59445],{"__ignoreMap":82},[87,59233,59234,59236,59238,59240],{"class":89,"line":90},[87,59235,52243],{"class":97},[87,59237,52246],{"class":93},[87,59239,52249],{"class":205},[87,59241,953],{"class":97},[87,59243,59244,59246,59248,59250,59252,59254],{"class":89,"line":101},[87,59245,938],{"class":97},[87,59247,51581],{"class":93},[87,59249,52260],{"class":205},[87,59251,946],{"class":97},[87,59253,52265],{"class":949},[87,59255,953],{"class":97},[87,59257,59258],{"class":89,"line":120},[87,59259,3355],{"emptyLinePlaceholder":1029},[87,59261,59262,59264,59266],{"class":89,"line":222},[87,59263,938],{"class":97},[87,59265,52278],{"class":93},[87,59267,953],{"class":97},[87,59269,59270,59272,59274,59276,59278,59280],{"class":89,"line":234},[87,59271,53081],{"class":97},[87,59273,52288],{"class":93},[87,59275,52291],{"class":205},[87,59277,946],{"class":97},[87,59279,52296],{"class":949},[87,59281,953],{"class":97},[87,59283,59284,59286,59288,59290,59292,59294,59296,59298,59300],{"class":89,"line":256},[87,59285,53081],{"class":97},[87,59287,52288],{"class":93},[87,59289,15870],{"class":205},[87,59291,946],{"class":97},[87,59293,52335],{"class":949},[87,59295,52315],{"class":205},[87,59297,946],{"class":97},[87,59299,52342],{"class":949},[87,59301,953],{"class":97},[87,59303,59304,59306,59308,59310,59312],{"class":89,"line":269},[87,59305,53081],{"class":97},[87,59307,52351],{"class":93},[87,59309,52354],{"class":97},[87,59311,52351],{"class":93},[87,59313,953],{"class":97},[87,59315,59316,59318,59320],{"class":89,"line":463},[87,59317,963],{"class":97},[87,59319,52278],{"class":93},[87,59321,953],{"class":97},[87,59323,59324],{"class":89,"line":469},[87,59325,3355],{"emptyLinePlaceholder":1029},[87,59327,59328,59330,59332],{"class":89,"line":2287},[87,59329,938],{"class":97},[87,59331,52737],{"class":93},[87,59333,953],{"class":97},[87,59335,59336,59338,59340,59342,59344],{"class":89,"line":2568},[87,59337,53081],{"class":97},[87,59339,54823],{"class":93},[87,59341,54829],{"class":97},[87,59343,54823],{"class":93},[87,59345,953],{"class":97},[87,59347,59348,59350,59352],{"class":89,"line":2573},[87,59349,53081],{"class":97},[87,59351,52750],{"class":93},[87,59353,953],{"class":97},[87,59355,59356,59358,59360,59362],{"class":89,"line":2579},[87,59357,12171],{"class":171},[87,59359,3195],{"class":104},[87,59361,14514],{"class":171},[87,59363,59364],{"class":104}," 10\n",[87,59366,59367,59369,59371,59373,59375,59377,59379,59381],{"class":89,"line":2584},[87,59368,12171],{"class":171},[87,59370,55327],{"class":104},[87,59372,14514],{"class":171},[87,59374,55332],{"class":97},[87,59376,55335],{"class":205},[87,59378,165],{"class":97},[87,59380,59140],{"class":949},[87,59382,1108],{"class":97},[87,59384,59385,59387,59389,59391,59393,59395,59397],{"class":89,"line":2598},[87,59386,59147],{"class":97},[87,59388,58749],{"class":205},[87,59390,165],{"class":97},[87,59392,58754],{"class":949},[87,59394,13385],{"class":97},[87,59396,55385],{"class":171},[87,59398,55388],{"class":97},[87,59400,59401,59403,59405,59407,59409,59411],{"class":89,"line":2603},[87,59402,59164],{"class":171},[87,59404,3195],{"class":104},[87,59406,14514],{"class":171},[87,59408,59171],{"class":97},[87,59410,58796],{"class":205},[87,59412,2931],{"class":97},[87,59414,59415,59417,59419],{"class":89,"line":2609},[87,59416,59180],{"class":97},[87,59418,59183],{"class":205},[87,59420,1115],{"class":97},[87,59422,59423],{"class":89,"line":2630},[87,59424,34408],{"class":97},[87,59426,59427,59429,59431],{"class":89,"line":2635},[87,59428,53354],{"class":97},[87,59430,52750],{"class":93},[87,59432,953],{"class":97},[87,59434,59435,59437,59439],{"class":89,"line":2649},[87,59436,963],{"class":97},[87,59438,52737],{"class":93},[87,59440,953],{"class":97},[87,59442,59443],{"class":89,"line":2654},[87,59444,3355],{"emptyLinePlaceholder":1029},[87,59446,59447,59449,59451],{"class":89,"line":2683},[87,59448,963],{"class":97},[87,59450,51581],{"class":93},[87,59452,953],{"class":97},[19,59454,59455],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[77,59457,59459],{"className":51579,"code":59458,"language":51581,"meta":82,"style":82},"\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",[84,59460,59461,59471,59485,59489,59497,59511,59531,59543,59551,59555,59563,59575,59583,59593,59611,59627,59640,59648,59652,59660,59668,59672],{"__ignoreMap":82},[87,59462,59463,59465,59467,59469],{"class":89,"line":90},[87,59464,52243],{"class":97},[87,59466,52246],{"class":93},[87,59468,52249],{"class":205},[87,59470,953],{"class":97},[87,59472,59473,59475,59477,59479,59481,59483],{"class":89,"line":101},[87,59474,938],{"class":97},[87,59476,51581],{"class":93},[87,59478,52260],{"class":205},[87,59480,946],{"class":97},[87,59482,52265],{"class":949},[87,59484,953],{"class":97},[87,59486,59487],{"class":89,"line":120},[87,59488,3355],{"emptyLinePlaceholder":1029},[87,59490,59491,59493,59495],{"class":89,"line":222},[87,59492,938],{"class":97},[87,59494,52278],{"class":93},[87,59496,953],{"class":97},[87,59498,59499,59501,59503,59505,59507,59509],{"class":89,"line":234},[87,59500,53081],{"class":97},[87,59502,52288],{"class":93},[87,59504,52291],{"class":205},[87,59506,946],{"class":97},[87,59508,52296],{"class":949},[87,59510,953],{"class":97},[87,59512,59513,59515,59517,59519,59521,59523,59525,59527,59529],{"class":89,"line":256},[87,59514,53081],{"class":97},[87,59516,52288],{"class":93},[87,59518,15870],{"class":205},[87,59520,946],{"class":97},[87,59522,52335],{"class":949},[87,59524,52315],{"class":205},[87,59526,946],{"class":97},[87,59528,52342],{"class":949},[87,59530,953],{"class":97},[87,59532,59533,59535,59537,59539,59541],{"class":89,"line":269},[87,59534,53081],{"class":97},[87,59536,52351],{"class":93},[87,59538,52354],{"class":97},[87,59540,52351],{"class":93},[87,59542,953],{"class":97},[87,59544,59545,59547,59549],{"class":89,"line":463},[87,59546,963],{"class":97},[87,59548,52278],{"class":93},[87,59550,953],{"class":97},[87,59552,59553],{"class":89,"line":469},[87,59554,3355],{"emptyLinePlaceholder":1029},[87,59556,59557,59559,59561],{"class":89,"line":2287},[87,59558,938],{"class":97},[87,59560,52737],{"class":93},[87,59562,953],{"class":97},[87,59564,59565,59567,59569,59571,59573],{"class":89,"line":2568},[87,59566,53081],{"class":97},[87,59568,54823],{"class":93},[87,59570,54829],{"class":97},[87,59572,54823],{"class":93},[87,59574,953],{"class":97},[87,59576,59577,59579,59581],{"class":89,"line":2573},[87,59578,53081],{"class":97},[87,59580,52750],{"class":93},[87,59582,953],{"class":97},[87,59584,59585,59587,59589,59591],{"class":89,"line":2579},[87,59586,12171],{"class":171},[87,59588,3195],{"class":104},[87,59590,14514],{"class":171},[87,59592,59364],{"class":104},[87,59594,59595,59597,59599,59601,59603,59605,59607,59609],{"class":89,"line":2584},[87,59596,12171],{"class":171},[87,59598,55327],{"class":104},[87,59600,14514],{"class":171},[87,59602,55332],{"class":97},[87,59604,55335],{"class":205},[87,59606,165],{"class":97},[87,59608,59140],{"class":949},[87,59610,1108],{"class":97},[87,59612,59613,59615,59617,59619,59621,59623,59625],{"class":89,"line":2598},[87,59614,59147],{"class":97},[87,59616,58749],{"class":205},[87,59618,165],{"class":97},[87,59620,58754],{"class":949},[87,59622,13385],{"class":97},[87,59624,55385],{"class":171},[87,59626,55388],{"class":97},[87,59628,59629,59632,59634,59636,59638],{"class":89,"line":2603},[87,59630,59631],{"class":97},"      num ",[87,59633,946],{"class":171},[87,59635,59171],{"class":97},[87,59637,58796],{"class":205},[87,59639,2931],{"class":97},[87,59641,59642,59644,59646],{"class":89,"line":2609},[87,59643,59180],{"class":97},[87,59645,59183],{"class":205},[87,59647,1115],{"class":97},[87,59649,59650],{"class":89,"line":2630},[87,59651,34408],{"class":97},[87,59653,59654,59656,59658],{"class":89,"line":2635},[87,59655,53354],{"class":97},[87,59657,52750],{"class":93},[87,59659,953],{"class":97},[87,59661,59662,59664,59666],{"class":89,"line":2649},[87,59663,963],{"class":97},[87,59665,52737],{"class":93},[87,59667,953],{"class":97},[87,59669,59670],{"class":89,"line":2654},[87,59671,3355],{"emptyLinePlaceholder":1029},[87,59673,59674,59676,59678],{"class":89,"line":2683},[87,59675,963],{"class":97},[87,59677,51581],{"class":93},[87,59679,953],{"class":97},[19,59681,59682],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[44,59684,59686],{"id":59685},"_324-事件监听版本","3.2.4 事件监听版本",[19,59688,59689],{},[39,59690],{"alt":82,"src":59691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,59693,59694],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,59696,59697],{},"这种方式会覆盖前边的事件监听:",[77,59699,59701],{"className":51579,"code":59700,"language":51581,"meta":82,"style":82},"\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",[84,59702,59703,59713,59727,59731,59739,59753,59773,59785,59793,59797,59805,59817,59825,59843,59857,59868,59872,59884,59894,59898,59906,59914,59918],{"__ignoreMap":82},[87,59704,59705,59707,59709,59711],{"class":89,"line":90},[87,59706,52243],{"class":97},[87,59708,52246],{"class":93},[87,59710,52249],{"class":205},[87,59712,953],{"class":97},[87,59714,59715,59717,59719,59721,59723,59725],{"class":89,"line":101},[87,59716,938],{"class":97},[87,59718,51581],{"class":93},[87,59720,52260],{"class":205},[87,59722,946],{"class":97},[87,59724,52265],{"class":949},[87,59726,953],{"class":97},[87,59728,59729],{"class":89,"line":120},[87,59730,3355],{"emptyLinePlaceholder":1029},[87,59732,59733,59735,59737],{"class":89,"line":222},[87,59734,938],{"class":97},[87,59736,52278],{"class":93},[87,59738,953],{"class":97},[87,59740,59741,59743,59745,59747,59749,59751],{"class":89,"line":234},[87,59742,53081],{"class":97},[87,59744,52288],{"class":93},[87,59746,52291],{"class":205},[87,59748,946],{"class":97},[87,59750,52296],{"class":949},[87,59752,953],{"class":97},[87,59754,59755,59757,59759,59761,59763,59765,59767,59769,59771],{"class":89,"line":256},[87,59756,53081],{"class":97},[87,59758,52288],{"class":93},[87,59760,15870],{"class":205},[87,59762,946],{"class":97},[87,59764,52335],{"class":949},[87,59766,52315],{"class":205},[87,59768,946],{"class":97},[87,59770,52342],{"class":949},[87,59772,953],{"class":97},[87,59774,59775,59777,59779,59781,59783],{"class":89,"line":269},[87,59776,53081],{"class":97},[87,59778,52351],{"class":93},[87,59780,52354],{"class":97},[87,59782,52351],{"class":93},[87,59784,953],{"class":97},[87,59786,59787,59789,59791],{"class":89,"line":463},[87,59788,963],{"class":97},[87,59790,52278],{"class":93},[87,59792,953],{"class":97},[87,59794,59795],{"class":89,"line":469},[87,59796,3355],{"emptyLinePlaceholder":1029},[87,59798,59799,59801,59803],{"class":89,"line":2287},[87,59800,938],{"class":97},[87,59802,52737],{"class":93},[87,59804,953],{"class":97},[87,59806,59807,59809,59811,59813,59815],{"class":89,"line":2568},[87,59808,53081],{"class":97},[87,59810,54823],{"class":93},[87,59812,54829],{"class":97},[87,59814,54823],{"class":93},[87,59816,953],{"class":97},[87,59818,59819,59821,59823],{"class":89,"line":2573},[87,59820,53081],{"class":97},[87,59822,52750],{"class":93},[87,59824,953],{"class":97},[87,59826,59827,59829,59831,59833,59835,59837,59839,59841],{"class":89,"line":2579},[87,59828,12171],{"class":171},[87,59830,55327],{"class":104},[87,59832,14514],{"class":171},[87,59834,55332],{"class":97},[87,59836,55335],{"class":205},[87,59838,165],{"class":97},[87,59840,59140],{"class":949},[87,59842,1108],{"class":97},[87,59844,59845,59847,59850,59852,59855],{"class":89,"line":2584},[87,59846,59147],{"class":97},[87,59848,59849],{"class":205},"onclick",[87,59851,14514],{"class":171},[87,59853,59854],{"class":171}," function",[87,59856,55388],{"class":97},[87,59858,59859,59862,59864,59866],{"class":89,"line":2598},[87,59860,59861],{"class":205},"      alert",[87,59863,165],{"class":97},[87,59865,1566],{"class":104},[87,59867,1108],{"class":97},[87,59869,59870],{"class":89,"line":2603},[87,59871,3142],{"class":97},[87,59873,59874,59876,59878,59880,59882],{"class":89,"line":2609},[87,59875,59147],{"class":97},[87,59877,59849],{"class":205},[87,59879,14514],{"class":171},[87,59881,59854],{"class":171},[87,59883,55388],{"class":97},[87,59885,59886,59888,59890,59892],{"class":89,"line":2630},[87,59887,59861],{"class":205},[87,59889,165],{"class":97},[87,59891,1842],{"class":104},[87,59893,1108],{"class":97},[87,59895,59896],{"class":89,"line":2635},[87,59897,3142],{"class":97},[87,59899,59900,59902,59904],{"class":89,"line":2649},[87,59901,53354],{"class":97},[87,59903,52750],{"class":93},[87,59905,953],{"class":97},[87,59907,59908,59910,59912],{"class":89,"line":2654},[87,59909,963],{"class":97},[87,59911,52737],{"class":93},[87,59913,953],{"class":97},[87,59915,59916],{"class":89,"line":2683},[87,59917,3355],{"emptyLinePlaceholder":1029},[87,59919,59920,59922,59924],{"class":89,"line":2688},[87,59921,963],{"class":97},[87,59923,51581],{"class":93},[87,59925,953],{"class":97},[19,59927,59928],{},"只要点击就输出结果为22,前边11被覆盖了",[77,59930,59932],{"className":51579,"code":59931,"language":51581,"meta":82,"style":82},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[84,59933,59934,59939,59944,59948,59953,59958],{"__ignoreMap":82},[87,59935,59936],{"class":89,"line":90},[87,59937,59938],{"class":97},"  btn.addEventListener('click', function () {\n",[87,59940,59941],{"class":89,"line":101},[87,59942,59943],{"class":97},"      alert(11)\n",[87,59945,59946],{"class":89,"line":120},[87,59947,34408],{"class":97},[87,59949,59950],{"class":89,"line":222},[87,59951,59952],{"class":97},"    btn.addEventListener('click', function () {\n",[87,59954,59955],{"class":89,"line":234},[87,59956,59957],{"class":97},"      alert(22)\n",[87,59959,59960],{"class":89,"line":256},[87,59961,34408],{"class":97},[19,59963,59964],{},"点击第一次输出11,第二次点击为22",[44,59966,59968],{"id":59967},"_325-事件类型","3.2.5 事件类型",[19,59970,59971],{},[39,59972],{"alt":82,"src":59973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[49,59975,59977],{"id":59976},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59979,59980],{},"补充知识:",[19,59982,59983],{},"轮播图自动播放模块,可以使用",[19,59985,59986],{},"let timerId = setInterval(function () {",[19,59988,59989],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59991,59992],{},"用js方法模拟进行点击事件,click必须加()",[19,59994,59995],{},"next.click()",[19,59997,59998],{},"}, 1000)",[19,60000,60001],{},[39,60002],{"alt":82,"src":60003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[77,60005,60007],{"className":54004,"code":60006,"language":54006,"meta":82,"style":82},"\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",[84,60008,60009,60013,60023,60037,60041,60049,60064,60084,60104,60117,60125,60130,60135,60139,60143,60148,60153,60158,60163,60167,60171,60176,60181,60186,60190,60194,60199,60203,60208,60213,60217,60221,60226,60231,60236,60241,60246,60250,60254,60259,60264,60269,60274,60279,60283,60287,60292,60297,60302,60307,60312,60317,60322,60327,60332,60337,60341,60345,60350,60355,60359,60363,60368,60373,60377,60382,60387,60391,60395,60400,60404,60409,60414,60418,60423,60427,60431,60436,60441,60446,60451,60456,60461,60466,60470,60474,60478,60483,60488,60493,60498,60502,60510,60518,60522,60530,60545,60559,60580,60588,60602,60615,60630,60649,60661,60673,60685,60697,60709,60721,60733,60741,60756,60780,60804,60812,60820,60828,60836,60841,60846,60851,60856,60861,60866,60871,60876,60881,60886,60890,60895,60900,60905,60910,60915,60920,60925,60930,60935,60939,60944,60949,60954,60959,60964,60969,60974,60979,60984,60989,60994,60999,61003,61007,61012,61017,61022,61026,61031,61036,61041,61046,61051,61055,61060,61064,61068,61072,61076,61080,61084,61089,61094,61099,61104,61109,61114,61119,61124,61129,61133,61137,61142,61147,61152,61157,61162,61166,61171,61176,61181,61186,61191,61196,61200,61204,61209,61213,61218,61222,61227,61232,61237,61242,61247,61252,61256,61264,61272,61276],{"__ignoreMap":82},[87,60010,60011],{"class":89,"line":90},[87,60012,3355],{"emptyLinePlaceholder":1029},[87,60014,60015,60017,60019,60021],{"class":89,"line":101},[87,60016,52243],{"class":97},[87,60018,52246],{"class":171},[87,60020,52249],{"class":104},[87,60022,953],{"class":97},[87,60024,60025,60027,60029,60031,60033,60035],{"class":89,"line":120},[87,60026,938],{"class":97},[87,60028,51581],{"class":93},[87,60030,52260],{"class":205},[87,60032,946],{"class":97},[87,60034,52265],{"class":949},[87,60036,953],{"class":97},[87,60038,60039],{"class":89,"line":222},[87,60040,3355],{"emptyLinePlaceholder":1029},[87,60042,60043,60045,60047],{"class":89,"line":234},[87,60044,938],{"class":97},[87,60046,52278],{"class":93},[87,60048,953],{"class":97},[87,60050,60051,60053,60055,60057,60059,60061],{"class":89,"line":256},[87,60052,53081],{"class":97},[87,60054,52288],{"class":93},[87,60056,52291],{"class":205},[87,60058,946],{"class":97},[87,60060,52296],{"class":949},[87,60062,60063],{"class":97}," \u002F>\n",[87,60065,60066,60068,60070,60072,60074,60076,60078,60080,60082],{"class":89,"line":269},[87,60067,53081],{"class":97},[87,60069,52288],{"class":93},[87,60071,52307],{"class":205},[87,60073,946],{"class":97},[87,60075,52312],{"class":949},[87,60077,52315],{"class":205},[87,60079,946],{"class":97},[87,60081,52320],{"class":949},[87,60083,60063],{"class":97},[87,60085,60086,60088,60090,60092,60094,60096,60098,60100,60102],{"class":89,"line":463},[87,60087,53081],{"class":97},[87,60089,52288],{"class":93},[87,60091,15870],{"class":205},[87,60093,946],{"class":97},[87,60095,52335],{"class":949},[87,60097,52315],{"class":205},[87,60099,946],{"class":97},[87,60101,52342],{"class":949},[87,60103,60063],{"class":97},[87,60105,60106,60108,60110,60113,60115],{"class":89,"line":469},[87,60107,53081],{"class":97},[87,60109,52351],{"class":93},[87,60111,60112],{"class":97},">轮播图点击切换\u003C\u002F",[87,60114,52351],{"class":93},[87,60116,953],{"class":97},[87,60118,60119,60121,60123],{"class":89,"line":2287},[87,60120,53081],{"class":97},[87,60122,1006],{"class":93},[87,60124,953],{"class":97},[87,60126,60127],{"class":89,"line":2568},[87,60128,60129],{"class":97},"    * {\n",[87,60131,60132],{"class":89,"line":2573},[87,60133,60134],{"class":97},"      box-sizing: border-box;\n",[87,60136,60137],{"class":89,"line":2579},[87,60138,3142],{"class":97},[87,60140,60141],{"class":89,"line":2584},[87,60142,3355],{"emptyLinePlaceholder":1029},[87,60144,60145],{"class":89,"line":2598},[87,60146,60147],{"class":97},"    .slider {\n",[87,60149,60150],{"class":89,"line":2603},[87,60151,60152],{"class":97},"      width: 560px;\n",[87,60154,60155],{"class":89,"line":2609},[87,60156,60157],{"class":97},"      height: 400px;\n",[87,60159,60160],{"class":89,"line":2630},[87,60161,60162],{"class":97},"      overflow: hidden;\n",[87,60164,60165],{"class":89,"line":2635},[87,60166,3142],{"class":97},[87,60168,60169],{"class":89,"line":2649},[87,60170,3355],{"emptyLinePlaceholder":1029},[87,60172,60173],{"class":89,"line":2654},[87,60174,60175],{"class":97},"    .slider-wrapper {\n",[87,60177,60178],{"class":89,"line":2683},[87,60179,60180],{"class":97},"      width: 100%;\n",[87,60182,60183],{"class":89,"line":2688},[87,60184,60185],{"class":97},"      height: 320px;\n",[87,60187,60188],{"class":89,"line":2705},[87,60189,3142],{"class":97},[87,60191,60192],{"class":89,"line":2710},[87,60193,3355],{"emptyLinePlaceholder":1029},[87,60195,60196],{"class":89,"line":2715},[87,60197,60198],{"class":97},"    .slider-wrapper img {\n",[87,60200,60201],{"class":89,"line":2720},[87,60202,60180],{"class":97},[87,60204,60205],{"class":89,"line":2734},[87,60206,60207],{"class":97},"      height: 100%;\n",[87,60209,60210],{"class":89,"line":2739},[87,60211,60212],{"class":97},"      display: block;\n",[87,60214,60215],{"class":89,"line":3532},[87,60216,3142],{"class":97},[87,60218,60219],{"class":89,"line":3546},[87,60220,3355],{"emptyLinePlaceholder":1029},[87,60222,60223],{"class":89,"line":3554},[87,60224,60225],{"class":97},"    .slider-footer {\n",[87,60227,60228],{"class":89,"line":3559},[87,60229,60230],{"class":97},"      height: 80px;\n",[87,60232,60233],{"class":89,"line":3565},[87,60234,60235],{"class":97},"      background-color: rgb(100, 67, 68);\n",[87,60237,60238],{"class":89,"line":3571},[87,60239,60240],{"class":97},"      padding: 12px 12px 0 12px;\n",[87,60242,60243],{"class":89,"line":3576},[87,60244,60245],{"class":97},"      position: relative;\n",[87,60247,60248],{"class":89,"line":8898},[87,60249,3142],{"class":97},[87,60251,60252],{"class":89,"line":8922},[87,60253,3355],{"emptyLinePlaceholder":1029},[87,60255,60256],{"class":89,"line":8927},[87,60257,60258],{"class":97},"    .slider-footer .toggle {\n",[87,60260,60261],{"class":89,"line":8933},[87,60262,60263],{"class":97},"      position: absolute;\n",[87,60265,60266],{"class":89,"line":8960},[87,60267,60268],{"class":97},"      right: 0;\n",[87,60270,60271],{"class":89,"line":8965},[87,60272,60273],{"class":97},"      top: 12px;\n",[87,60275,60276],{"class":89,"line":8971},[87,60277,60278],{"class":97},"      display: flex;\n",[87,60280,60281],{"class":89,"line":8983},[87,60282,3142],{"class":97},[87,60284,60285],{"class":89,"line":8995},[87,60286,3355],{"emptyLinePlaceholder":1029},[87,60288,60289],{"class":89,"line":9007},[87,60290,60291],{"class":97},"    .slider-footer .toggle button {\n",[87,60293,60294],{"class":89,"line":10666},[87,60295,60296],{"class":97},"      margin-right: 12px;\n",[87,60298,60299],{"class":89,"line":10691},[87,60300,60301],{"class":97},"      width: 28px;\n",[87,60303,60304],{"class":89,"line":10714},[87,60305,60306],{"class":97},"      height: 28px;\n",[87,60308,60309],{"class":89,"line":10738},[87,60310,60311],{"class":97},"      appearance: none;\n",[87,60313,60314],{"class":89,"line":10743},[87,60315,60316],{"class":97},"      border: none;\n",[87,60318,60319],{"class":89,"line":10748},[87,60320,60321],{"class":97},"      background: rgba(255, 255, 255, 0.1);\n",[87,60323,60324],{"class":89,"line":10753},[87,60325,60326],{"class":97},"      color: #fff;\n",[87,60328,60329],{"class":89,"line":10762},[87,60330,60331],{"class":97},"      border-radius: 4px;\n",[87,60333,60334],{"class":89,"line":10767},[87,60335,60336],{"class":97},"      cursor: pointer;\n",[87,60338,60339],{"class":89,"line":10773},[87,60340,3142],{"class":97},[87,60342,60343],{"class":89,"line":10794},[87,60344,3355],{"emptyLinePlaceholder":1029},[87,60346,60347],{"class":89,"line":10800},[87,60348,60349],{"class":97},"    .slider-footer .toggle button:hover {\n",[87,60351,60352],{"class":89,"line":10814},[87,60353,60354],{"class":97},"      background: rgba(255, 255, 255, 0.2);\n",[87,60356,60357],{"class":89,"line":10820},[87,60358,3142],{"class":97},[87,60360,60361],{"class":89,"line":10847},[87,60362,3355],{"emptyLinePlaceholder":1029},[87,60364,60365],{"class":89,"line":10856},[87,60366,60367],{"class":97},"    .slider-footer p {\n",[87,60369,60370],{"class":89,"line":10862},[87,60371,60372],{"class":97},"      margin: 0;\n",[87,60374,60375],{"class":89,"line":10870},[87,60376,60326],{"class":97},[87,60378,60379],{"class":89,"line":10875},[87,60380,60381],{"class":97},"      font-size: 18px;\n",[87,60383,60384],{"class":89,"line":17553},[87,60385,60386],{"class":97},"      margin-bottom: 10px;\n",[87,60388,60389],{"class":89,"line":17559},[87,60390,3142],{"class":97},[87,60392,60393],{"class":89,"line":17582},[87,60394,3355],{"emptyLinePlaceholder":1029},[87,60396,60397],{"class":89,"line":17588},[87,60398,60399],{"class":97},"    .slider-indicator {\n",[87,60401,60402],{"class":89,"line":17611},[87,60403,60372],{"class":97},[87,60405,60406],{"class":89,"line":17625},[87,60407,60408],{"class":97},"      padding: 0;\n",[87,60410,60411],{"class":89,"line":17645},[87,60412,60413],{"class":97},"      list-style: none;\n",[87,60415,60416],{"class":89,"line":17651},[87,60417,60278],{"class":97},[87,60419,60420],{"class":89,"line":17662},[87,60421,60422],{"class":97},"      align-items: center;\n",[87,60424,60425],{"class":89,"line":17685},[87,60426,3142],{"class":97},[87,60428,60429],{"class":89,"line":17707},[87,60430,3355],{"emptyLinePlaceholder":1029},[87,60432,60433],{"class":89,"line":17712},[87,60434,60435],{"class":97},"    .slider-indicator li {\n",[87,60437,60438],{"class":89,"line":17718},[87,60439,60440],{"class":97},"      width: 8px;\n",[87,60442,60443],{"class":89,"line":17732},[87,60444,60445],{"class":97},"      height: 8px;\n",[87,60447,60448],{"class":89,"line":17745},[87,60449,60450],{"class":97},"      margin: 4px;\n",[87,60452,60453],{"class":89,"line":17750},[87,60454,60455],{"class":97},"      border-radius: 50%;\n",[87,60457,60458],{"class":89,"line":17764},[87,60459,60460],{"class":97},"      background: #fff;\n",[87,60462,60463],{"class":89,"line":17769},[87,60464,60465],{"class":97},"      opacity: 0.4;\n",[87,60467,60468],{"class":89,"line":17775},[87,60469,60336],{"class":97},[87,60471,60472],{"class":89,"line":17780},[87,60473,3142],{"class":97},[87,60475,60476],{"class":89,"line":17794},[87,60477,3355],{"emptyLinePlaceholder":1029},[87,60479,60480],{"class":89,"line":17799},[87,60481,60482],{"class":97},"    .slider-indicator li.active {\n",[87,60484,60485],{"class":89,"line":17804},[87,60486,60487],{"class":97},"      width: 12px;\n",[87,60489,60490],{"class":89,"line":17818},[87,60491,60492],{"class":97},"      height: 12px;\n",[87,60494,60495],{"class":89,"line":17830},[87,60496,60497],{"class":97},"      opacity: 1;\n",[87,60499,60500],{"class":89,"line":17835},[87,60501,3142],{"class":97},[87,60503,60504,60506,60508],{"class":89,"line":17848},[87,60505,53354],{"class":97},[87,60507,1006],{"class":93},[87,60509,953],{"class":97},[87,60511,60512,60514,60516],{"class":89,"line":17853},[87,60513,963],{"class":97},[87,60515,52278],{"class":93},[87,60517,953],{"class":97},[87,60519,60520],{"class":89,"line":17858},[87,60521,3355],{"emptyLinePlaceholder":1029},[87,60523,60524,60526,60528],{"class":89,"line":17863},[87,60525,938],{"class":97},[87,60527,52737],{"class":93},[87,60529,953],{"class":97},[87,60531,60532,60534,60536,60538,60540,60543],{"class":89,"line":17876},[87,60533,53081],{"class":97},[87,60535,94],{"class":93},[87,60537,943],{"class":205},[87,60539,946],{"class":97},[87,60541,60542],{"class":949},"\"slider\"",[87,60544,953],{"class":97},[87,60546,60547,60549,60551,60553,60555,60557],{"class":89,"line":17881},[87,60548,52285],{"class":97},[87,60550,94],{"class":93},[87,60552,943],{"class":205},[87,60554,946],{"class":97},[87,60556,56163],{"class":949},[87,60558,953],{"class":97},[87,60560,60561,60563,60565,60567,60569,60572,60574,60576,60578],{"class":89,"line":33580},[87,60562,56170],{"class":97},[87,60564,39],{"class":93},[87,60566,56175],{"class":205},[87,60568,946],{"class":97},[87,60570,60571],{"class":949},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[87,60573,56183],{"class":205},[87,60575,946],{"class":97},[87,60577,8602],{"class":949},[87,60579,60063],{"class":97},[87,60581,60582,60584,60586],{"class":89,"line":33586},[87,60583,52714],{"class":97},[87,60585,94],{"class":93},[87,60587,953],{"class":97},[87,60589,60590,60592,60594,60596,60598,60600],{"class":89,"line":33592},[87,60591,52285],{"class":97},[87,60593,94],{"class":93},[87,60595,943],{"class":205},[87,60597,946],{"class":97},[87,60599,56210],{"class":949},[87,60601,953],{"class":97},[87,60603,60604,60606,60608,60611,60613],{"class":89,"line":33598},[87,60605,56170],{"class":97},[87,60607,19],{"class":93},[87,60609,60610],{"class":97},">对人类来说会不会太超前了？\u003C\u002F",[87,60612,19],{"class":93},[87,60614,953],{"class":97},[87,60616,60617,60619,60621,60623,60625,60628],{"class":89,"line":33604},[87,60618,56170],{"class":97},[87,60620,26],{"class":93},[87,60622,943],{"class":205},[87,60624,946],{"class":97},[87,60626,60627],{"class":949},"\"slider-indicator\"",[87,60629,953],{"class":97},[87,60631,60632,60634,60636,60638,60640,60643,60645,60647],{"class":89,"line":33615},[87,60633,56238],{"class":97},[87,60635,29],{"class":93},[87,60637,943],{"class":205},[87,60639,946],{"class":97},[87,60641,60642],{"class":949},"\"active\"",[87,60644,56250],{"class":97},[87,60646,29],{"class":93},[87,60648,953],{"class":97},[87,60650,60651,60653,60655,60657,60659],{"class":89,"line":33621},[87,60652,56238],{"class":97},[87,60654,29],{"class":93},[87,60656,56250],{"class":97},[87,60658,29],{"class":93},[87,60660,953],{"class":97},[87,60662,60663,60665,60667,60669,60671],{"class":89,"line":33641},[87,60664,56238],{"class":97},[87,60666,29],{"class":93},[87,60668,56250],{"class":97},[87,60670,29],{"class":93},[87,60672,953],{"class":97},[87,60674,60675,60677,60679,60681,60683],{"class":89,"line":33647},[87,60676,56238],{"class":97},[87,60678,29],{"class":93},[87,60680,56250],{"class":97},[87,60682,29],{"class":93},[87,60684,953],{"class":97},[87,60686,60687,60689,60691,60693,60695],{"class":89,"line":33658},[87,60688,56238],{"class":97},[87,60690,29],{"class":93},[87,60692,56250],{"class":97},[87,60694,29],{"class":93},[87,60696,953],{"class":97},[87,60698,60699,60701,60703,60705,60707],{"class":89,"line":33664},[87,60700,56238],{"class":97},[87,60702,29],{"class":93},[87,60704,56250],{"class":97},[87,60706,29],{"class":93},[87,60708,953],{"class":97},[87,60710,60711,60713,60715,60717,60719],{"class":89,"line":33670},[87,60712,56238],{"class":97},[87,60714,29],{"class":93},[87,60716,56250],{"class":97},[87,60718,29],{"class":93},[87,60720,953],{"class":97},[87,60722,60723,60725,60727,60729,60731],{"class":89,"line":33676},[87,60724,56238],{"class":97},[87,60726,29],{"class":93},[87,60728,56250],{"class":97},[87,60730,29],{"class":93},[87,60732,953],{"class":97},[87,60734,60735,60737,60739],{"class":89,"line":33682},[87,60736,56343],{"class":97},[87,60738,26],{"class":93},[87,60740,953],{"class":97},[87,60742,60743,60745,60747,60749,60751,60754],{"class":89,"line":33688},[87,60744,56170],{"class":97},[87,60746,94],{"class":93},[87,60748,943],{"class":205},[87,60750,946],{"class":97},[87,60752,60753],{"class":949},"\"toggle\"",[87,60755,953],{"class":97},[87,60757,60758,60760,60762,60764,60766,60769,60771,60774,60776,60778],{"class":89,"line":33694},[87,60759,56238],{"class":97},[87,60761,54823],{"class":93},[87,60763,943],{"class":205},[87,60765,946],{"class":97},[87,60767,60768],{"class":949},"\"prev\"",[87,60770,2051],{"class":97},[87,60772,60773],{"class":104},"&lt;",[87,60775,963],{"class":97},[87,60777,54823],{"class":93},[87,60779,953],{"class":97},[87,60781,60782,60784,60786,60788,60790,60793,60795,60798,60800,60802],{"class":89,"line":33700},[87,60783,56238],{"class":97},[87,60785,54823],{"class":93},[87,60787,943],{"class":205},[87,60789,946],{"class":97},[87,60791,60792],{"class":949},"\"next\"",[87,60794,2051],{"class":97},[87,60796,60797],{"class":104},"&gt;",[87,60799,963],{"class":97},[87,60801,54823],{"class":93},[87,60803,953],{"class":97},[87,60805,60806,60808,60810],{"class":89,"line":33720},[87,60807,56343],{"class":97},[87,60809,94],{"class":93},[87,60811,953],{"class":97},[87,60813,60814,60816,60818],{"class":89,"line":33726},[87,60815,52714],{"class":97},[87,60817,94],{"class":93},[87,60819,953],{"class":97},[87,60821,60822,60824,60826],{"class":89,"line":33742},[87,60823,53354],{"class":97},[87,60825,94],{"class":93},[87,60827,953],{"class":97},[87,60829,60830,60832,60834],{"class":89,"line":33748},[87,60831,53081],{"class":97},[87,60833,52750],{"class":93},[87,60835,953],{"class":97},[87,60837,60838],{"class":89,"line":33762},[87,60839,60840],{"class":97},"    \u002F\u002F 1. 初始数据\n",[87,60842,60843],{"class":89,"line":33768},[87,60844,60845],{"class":97},"    const data = [\n",[87,60847,60848],{"class":89,"line":33783},[87,60849,60850],{"class":97},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[87,60852,60853],{"class":89,"line":33789},[87,60854,60855],{"class":97},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[87,60857,60858],{"class":89,"line":33798},[87,60859,60860],{"class":97},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[87,60862,60863],{"class":89,"line":33804},[87,60864,60865],{"class":97},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[87,60867,60868],{"class":89,"line":33813},[87,60869,60870],{"class":97},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[87,60872,60873],{"class":89,"line":33819},[87,60874,60875],{"class":97},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[87,60877,60878],{"class":89,"line":33825},[87,60879,60880],{"class":97},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[87,60882,60883],{"class":89,"line":33834},[87,60884,60885],{"class":97},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[87,60887,60888],{"class":89,"line":33840},[87,60889,54046],{"class":97},[87,60891,60892],{"class":89,"line":33851},[87,60893,60894],{"class":97},"    \u002F\u002F 获取元素\n",[87,60896,60897],{"class":89,"line":33857},[87,60898,60899],{"class":97},"    const img = document.querySelector('.slider-wrapper img')\n",[87,60901,60902],{"class":89,"line":33876},[87,60903,60904],{"class":97},"    const p = document.querySelector('.slider-footer p')\n",[87,60906,60907],{"class":89,"line":33882},[87,60908,60909],{"class":97},"    const footer = document.querySelector('.slider-footer')\n",[87,60911,60912],{"class":89,"line":33893},[87,60913,60914],{"class":97},"    \u002F\u002F 1. 右按钮业务\n",[87,60916,60917],{"class":89,"line":33899},[87,60918,60919],{"class":97},"    \u002F\u002F 1.1 获取右侧按钮 \n",[87,60921,60922],{"class":89,"line":33919},[87,60923,60924],{"class":97},"    const next = document.querySelector('.next')\n",[87,60926,60927],{"class":89,"line":33935},[87,60928,60929],{"class":97},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[87,60931,60932],{"class":89,"line":33941},[87,60933,60934],{"class":97},"    \u002F\u002F 1.2 注册点击事件\n",[87,60936,60937],{"class":89,"line":33955},[87,60938,3355],{"emptyLinePlaceholder":1029},[87,60940,60941],{"class":89,"line":33961},[87,60942,60943],{"class":97},"    next.addEventListener('click', function () {\n",[87,60945,60946],{"class":89,"line":33967},[87,60947,60948],{"class":97},"      \u002F\u002F console.log(11)\n",[87,60950,60951],{"class":89,"line":33978},[87,60952,60953],{"class":97},"      i++\n",[87,60955,60956],{"class":89,"line":33984},[87,60957,60958],{"class":97},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[87,60960,60961],{"class":89,"line":33990},[87,60962,60963],{"class":97},"      \u002F\u002F if (i >= 8) {\n",[87,60965,60966],{"class":89,"line":34000},[87,60967,60968],{"class":97},"      \u002F\u002F   i = 0\n",[87,60970,60971],{"class":89,"line":34006},[87,60972,60973],{"class":97},"      \u002F\u002F }\n",[87,60975,60976],{"class":89,"line":34017},[87,60977,60978],{"class":97},"      i = i >= data.length ? 0 : i\n",[87,60980,60981],{"class":89,"line":34023},[87,60982,60983],{"class":97},"      \u002F\u002F 1.3 得到对应的对象\n",[87,60985,60986],{"class":89,"line":34033},[87,60987,60988],{"class":97},"      \u002F\u002F console.log(data[i])\n",[87,60990,60991],{"class":89,"line":34038},[87,60992,60993],{"class":97},"      \u002F\u002F 调用函数\n",[87,60995,60996],{"class":89,"line":34044},[87,60997,60998],{"class":97},"      toggle()\n",[87,61000,61001],{"class":89,"line":34093},[87,61002,34408],{"class":97},[87,61004,61005],{"class":89,"line":34140},[87,61006,3355],{"emptyLinePlaceholder":1029},[87,61008,61009],{"class":89,"line":34145},[87,61010,61011],{"class":97},"    \u002F\u002F 2. 左侧按钮业务\n",[87,61013,61014],{"class":89,"line":34151},[87,61015,61016],{"class":97},"    \u002F\u002F 2.1 获取左侧按钮 \n",[87,61018,61019],{"class":89,"line":34170},[87,61020,61021],{"class":97},"    const prev = document.querySelector('.prev')\n",[87,61023,61024],{"class":89,"line":34176},[87,61025,60934],{"class":97},[87,61027,61028],{"class":89,"line":34196},[87,61029,61030],{"class":97},"    prev.addEventListener('click', function () {\n",[87,61032,61033],{"class":89,"line":34202},[87,61034,61035],{"class":97},"      i--\n",[87,61037,61038],{"class":89,"line":34208},[87,61039,61040],{"class":97},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[87,61042,61043],{"class":89,"line":34218},[87,61044,61045],{"class":97},"      \u002F\u002F if (i \u003C 0) {\n",[87,61047,61048],{"class":89,"line":34223},[87,61049,61050],{"class":97},"      \u002F\u002F   i = 7\n",[87,61052,61053],{"class":89,"line":34229},[87,61054,60973],{"class":97},[87,61056,61057],{"class":89,"line":34245},[87,61058,61059],{"class":97},"      i = i \u003C 0 ? data.length - 1 : i\n",[87,61061,61062],{"class":89,"line":34290},[87,61063,60983],{"class":97},[87,61065,61066],{"class":89,"line":34296},[87,61067,60988],{"class":97},[87,61069,61070],{"class":89,"line":34302},[87,61071,60993],{"class":97},[87,61073,61074],{"class":89,"line":34308},[87,61075,60998],{"class":97},[87,61077,61078],{"class":89,"line":34319},[87,61079,34408],{"class":97},[87,61081,61082],{"class":89,"line":34325},[87,61083,3355],{"emptyLinePlaceholder":1029},[87,61085,61086],{"class":89,"line":34331},[87,61087,61088],{"class":97},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[87,61090,61091],{"class":89,"line":34337},[87,61092,61093],{"class":97},"    function toggle() {\n",[87,61095,61096],{"class":89,"line":34355},[87,61097,61098],{"class":97},"      \u002F\u002F 1.4 渲染对应的数据\n",[87,61100,61101],{"class":89,"line":34369},[87,61102,61103],{"class":97},"      img.src = data[i].url\n",[87,61105,61106],{"class":89,"line":34378},[87,61107,61108],{"class":97},"      p.innerHTML = data[i].title\n",[87,61110,61111],{"class":89,"line":34387},[87,61112,61113],{"class":97},"      footer.style.backgroundColor = data[i].color\n",[87,61115,61116],{"class":89,"line":34396},[87,61117,61118],{"class":97},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[87,61120,61121],{"class":89,"line":34405},[87,61122,61123],{"class":97},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[87,61125,61126],{"class":89,"line":34411},[87,61127,61128],{"class":97},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[87,61130,61131],{"class":89,"line":34417},[87,61132,3142],{"class":97},[87,61134,61135],{"class":89,"line":34425},[87,61136,3355],{"emptyLinePlaceholder":1029},[87,61138,61139],{"class":89,"line":34430},[87,61140,61141],{"class":97},"    \u002F\u002F 3. 自动播放模块\n",[87,61143,61144],{"class":89,"line":34436},[87,61145,61146],{"class":97},"    let timerId = setInterval(function () {\n",[87,61148,61149],{"class":89,"line":34447},[87,61150,61151],{"class":97},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[87,61153,61154],{"class":89,"line":34453},[87,61155,61156],{"class":97},"      next.click()\n",[87,61158,61159],{"class":89,"line":34473},[87,61160,61161],{"class":97},"    }, 1000)\n",[87,61163,61164],{"class":89,"line":34479},[87,61165,3355],{"emptyLinePlaceholder":1029},[87,61167,61168],{"class":89,"line":34485},[87,61169,61170],{"class":97},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[87,61172,61173],{"class":89,"line":34491},[87,61174,61175],{"class":97},"    const slider = document.querySelector('.slider')\n",[87,61177,61178],{"class":89,"line":34508},[87,61179,61180],{"class":97},"    \u002F\u002F 注册事件\n",[87,61182,61183],{"class":89,"line":34514},[87,61184,61185],{"class":97},"    slider.addEventListener('mouseenter', function () {\n",[87,61187,61188],{"class":89,"line":34520},[87,61189,61190],{"class":97},"      \u002F\u002F 停止定时器\n",[87,61192,61193],{"class":89,"line":34526},[87,61194,61195],{"class":97},"      clearInterval(timerId)\n",[87,61197,61198],{"class":89,"line":34532},[87,61199,34408],{"class":97},[87,61201,61202],{"class":89,"line":34538},[87,61203,3355],{"emptyLinePlaceholder":1029},[87,61205,61206],{"class":89,"line":34565},[87,61207,61208],{"class":97},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[87,61210,61211],{"class":89,"line":34589},[87,61212,61180],{"class":97},[87,61214,61215],{"class":89,"line":34595},[87,61216,61217],{"class":97},"    slider.addEventListener('mouseleave', function () {\n",[87,61219,61220],{"class":89,"line":34601},[87,61221,61190],{"class":97},[87,61223,61224],{"class":89,"line":34607},[87,61225,61226],{"class":97},"      if (timerId) clearInterval(timerId)\n",[87,61228,61229],{"class":89,"line":34618},[87,61230,61231],{"class":97},"      \u002F\u002F 开启定时器\n",[87,61233,61234],{"class":89,"line":34629},[87,61235,61236],{"class":97},"      timerId = setInterval(function () {\n",[87,61238,61239],{"class":89,"line":34635},[87,61240,61241],{"class":97},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[87,61243,61244],{"class":89,"line":34652},[87,61245,61246],{"class":97},"        next.click()\n",[87,61248,61249],{"class":89,"line":34675},[87,61250,61251],{"class":97},"      }, 1000)\n",[87,61253,61254],{"class":89,"line":34698},[87,61255,34408],{"class":97},[87,61257,61258,61260,61262],{"class":89,"line":34704},[87,61259,53354],{"class":97},[87,61261,52750],{"class":93},[87,61263,953],{"class":97},[87,61265,61266,61268,61270],{"class":89,"line":34709},[87,61267,963],{"class":97},[87,61269,52737],{"class":93},[87,61271,953],{"class":97},[87,61273,61274],{"class":89,"line":34718},[87,61275,3355],{"emptyLinePlaceholder":1029},[87,61277,61278,61280,61282],{"class":89,"line":34728},[87,61279,963],{"class":97},[87,61281,51581],{"class":93},[87,61283,953],{"class":97},[49,61285,61287],{"id":61286},"_3252-焦点事件","3.2.5.2 焦点事件",[19,61289,61290],{},"小米搜索框案例：",[77,61292,61294],{"className":51579,"code":61293,"language":51581,"meta":82,"style":82},"\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",[84,61295,61296,61306,61320,61324,61332,61346,61366,61386,61398,61406,61412,61422,61432,61444,61448,61452,61459,61463,61474,61478,61482,61489,61500,61513,61527,61531,61535,61544,61556,61568,61582,61595,61608,61626,61637,61641,61645,61654,61671,61675,61679,61686,61696,61706,61717,61730,61742,61758,61769,61781,61785,61789,61797,61808,61825,61837,61849,61860,61864,61868,61879,61890,61894,61902,61906,61914,61918,61926,61941,61964,61979,62010,62037,62064,62091,62118,62145,62172,62181,62189,62197,62202,62222,62242,62247,62252,62270,62275,62285,62290,62304,62309,62314,62331,62340,62352,62356,62364,62372,62376],{"__ignoreMap":82},[87,61297,61298,61300,61302,61304],{"class":89,"line":90},[87,61299,52243],{"class":97},[87,61301,52246],{"class":93},[87,61303,52249],{"class":205},[87,61305,953],{"class":97},[87,61307,61308,61310,61312,61314,61316,61318],{"class":89,"line":101},[87,61309,938],{"class":97},[87,61311,51581],{"class":93},[87,61313,52260],{"class":205},[87,61315,946],{"class":97},[87,61317,52265],{"class":949},[87,61319,953],{"class":97},[87,61321,61322],{"class":89,"line":120},[87,61323,3355],{"emptyLinePlaceholder":1029},[87,61325,61326,61328,61330],{"class":89,"line":222},[87,61327,938],{"class":97},[87,61329,52278],{"class":93},[87,61331,953],{"class":97},[87,61333,61334,61336,61338,61340,61342,61344],{"class":89,"line":234},[87,61335,52285],{"class":97},[87,61337,52288],{"class":93},[87,61339,52291],{"class":205},[87,61341,946],{"class":97},[87,61343,52296],{"class":949},[87,61345,953],{"class":97},[87,61347,61348,61350,61352,61354,61356,61358,61360,61362,61364],{"class":89,"line":256},[87,61349,52285],{"class":97},[87,61351,52288],{"class":93},[87,61353,52307],{"class":205},[87,61355,946],{"class":97},[87,61357,52312],{"class":949},[87,61359,52315],{"class":205},[87,61361,946],{"class":97},[87,61363,52320],{"class":949},[87,61365,953],{"class":97},[87,61367,61368,61370,61372,61374,61376,61378,61380,61382,61384],{"class":89,"line":269},[87,61369,52285],{"class":97},[87,61371,52288],{"class":93},[87,61373,15870],{"class":205},[87,61375,946],{"class":97},[87,61377,52335],{"class":949},[87,61379,52315],{"class":205},[87,61381,946],{"class":97},[87,61383,52342],{"class":949},[87,61385,953],{"class":97},[87,61387,61388,61390,61392,61394,61396],{"class":89,"line":463},[87,61389,52285],{"class":97},[87,61391,52351],{"class":93},[87,61393,52354],{"class":97},[87,61395,52351],{"class":93},[87,61397,953],{"class":97},[87,61399,61400,61402,61404],{"class":89,"line":469},[87,61401,52285],{"class":97},[87,61403,1006],{"class":93},[87,61405,953],{"class":97},[87,61407,61408,61410],{"class":89,"line":2287},[87,61409,52371],{"class":93},[87,61411,98],{"class":97},[87,61413,61414,61416,61418,61420],{"class":89,"line":2568},[87,61415,52378],{"class":104},[87,61417,108],{"class":97},[87,61419,111],{"class":104},[87,61421,117],{"class":97},[87,61423,61424,61426,61428,61430],{"class":89,"line":2573},[87,61425,52389],{"class":104},[87,61427,108],{"class":97},[87,61429,111],{"class":104},[87,61431,117],{"class":97},[87,61433,61434,61437,61439,61442],{"class":89,"line":2579},[87,61435,61436],{"class":104},"            box-sizing",[87,61438,108],{"class":97},[87,61440,61441],{"class":104},"border-box",[87,61443,117],{"class":97},[87,61445,61446],{"class":89,"line":2584},[87,61447,3484],{"class":97},[87,61449,61450],{"class":89,"line":2598},[87,61451,3355],{"emptyLinePlaceholder":1029},[87,61453,61454,61457],{"class":89,"line":2603},[87,61455,61456],{"class":93},"        ul",[87,61458,98],{"class":97},[87,61460,61461],{"class":89,"line":2609},[87,61462,3355],{"emptyLinePlaceholder":1029},[87,61464,61465,61468,61470,61472],{"class":89,"line":2630},[87,61466,61467],{"class":104},"            list-style",[87,61469,108],{"class":97},[87,61471,55673],{"class":104},[87,61473,117],{"class":97},[87,61475,61476],{"class":89,"line":2635},[87,61477,3484],{"class":97},[87,61479,61480],{"class":89,"line":2649},[87,61481,3355],{"emptyLinePlaceholder":1029},[87,61483,61484,61487],{"class":89,"line":2654},[87,61485,61486],{"class":205},"        .mi",[87,61488,98],{"class":97},[87,61490,61491,61494,61496,61498],{"class":89,"line":2683},[87,61492,61493],{"class":104},"            position",[87,61495,108],{"class":97},[87,61497,55700],{"class":104},[87,61499,117],{"class":97},[87,61501,61502,61504,61506,61509,61511],{"class":89,"line":2688},[87,61503,52427],{"class":104},[87,61505,108],{"class":97},[87,61507,61508],{"class":104},"223",[87,61510,245],{"class":171},[87,61512,117],{"class":97},[87,61514,61515,61517,61519,61521,61523,61525],{"class":89,"line":2705},[87,61516,52378],{"class":104},[87,61518,108],{"class":97},[87,61520,536],{"class":104},[87,61522,245],{"class":171},[87,61524,114],{"class":104},[87,61526,117],{"class":97},[87,61528,61529],{"class":89,"line":2710},[87,61530,3484],{"class":97},[87,61532,61533],{"class":89,"line":2715},[87,61534,3355],{"emptyLinePlaceholder":1029},[87,61536,61537,61539,61542],{"class":89,"line":2720},[87,61538,61486],{"class":205},[87,61540,61541],{"class":93}," input",[87,61543,98],{"class":97},[87,61545,61546,61548,61550,61552,61554],{"class":89,"line":2734},[87,61547,52427],{"class":104},[87,61549,108],{"class":97},[87,61551,61508],{"class":104},[87,61553,245],{"class":171},[87,61555,117],{"class":97},[87,61557,61558,61560,61562,61564,61566],{"class":89,"line":2739},[87,61559,52441],{"class":104},[87,61561,108],{"class":97},[87,61563,1700],{"class":104},[87,61565,245],{"class":171},[87,61567,117],{"class":97},[87,61569,61570,61572,61574,61576,61578,61580],{"class":89,"line":3532},[87,61571,52389],{"class":104},[87,61573,108],{"class":97},[87,61575,111],{"class":104},[87,61577,2993],{"class":104},[87,61579,245],{"class":171},[87,61581,117],{"class":97},[87,61583,61584,61587,61589,61591,61593],{"class":89,"line":3546},[87,61585,61586],{"class":104},"            font-size",[87,61588,108],{"class":97},[87,61590,1642],{"class":104},[87,61592,245],{"class":171},[87,61594,117],{"class":97},[87,61596,61597,61600,61602,61604,61606],{"class":89,"line":3554},[87,61598,61599],{"class":104},"            line-height",[87,61601,108],{"class":97},[87,61603,1700],{"class":104},[87,61605,245],{"class":171},[87,61607,117],{"class":97},[87,61609,61610,61613,61615,61617,61619,61621,61624],{"class":89,"line":3559},[87,61611,61612],{"class":104},"            border",[87,61614,108],{"class":97},[87,61616,1313],{"class":104},[87,61618,245],{"class":171},[87,61620,248],{"class":104},[87,61622,61623],{"class":104}," #e0e0e0",[87,61625,117],{"class":97},[87,61627,61628,61631,61633,61635],{"class":89,"line":3565},[87,61629,61630],{"class":104},"            outline",[87,61632,108],{"class":97},[87,61634,55673],{"class":104},[87,61636,117],{"class":97},[87,61638,61639],{"class":89,"line":3571},[87,61640,3484],{"class":97},[87,61642,61643],{"class":89,"line":3576},[87,61644,3355],{"emptyLinePlaceholder":1029},[87,61646,61647,61649,61652],{"class":89,"line":8898},[87,61648,61486],{"class":205},[87,61650,61651],{"class":205}," .search",[87,61653,98],{"class":97},[87,61655,61656,61658,61660,61662,61664,61666,61669],{"class":89,"line":8922},[87,61657,61612],{"class":104},[87,61659,108],{"class":97},[87,61661,1313],{"class":104},[87,61663,245],{"class":171},[87,61665,248],{"class":104},[87,61667,61668],{"class":104}," #ff6700",[87,61670,117],{"class":97},[87,61672,61673],{"class":89,"line":8927},[87,61674,3484],{"class":97},[87,61676,61677],{"class":89,"line":8933},[87,61678,3355],{"emptyLinePlaceholder":1029},[87,61680,61681,61684],{"class":89,"line":8960},[87,61682,61683],{"class":205},"        .result-list",[87,61685,98],{"class":97},[87,61687,61688,61690,61692,61694],{"class":89,"line":8965},[87,61689,52415],{"class":104},[87,61691,108],{"class":97},[87,61693,55673],{"class":104},[87,61695,117],{"class":97},[87,61697,61698,61700,61702,61704],{"class":89,"line":8971},[87,61699,61493],{"class":104},[87,61701,108],{"class":97},[87,61703,55767],{"class":104},[87,61705,117],{"class":97},[87,61707,61708,61711,61713,61715],{"class":89,"line":8983},[87,61709,61710],{"class":104},"            left",[87,61712,108],{"class":97},[87,61714,111],{"class":104},[87,61716,117],{"class":97},[87,61718,61719,61722,61724,61726,61728],{"class":89,"line":8995},[87,61720,61721],{"class":104},"            top",[87,61723,108],{"class":97},[87,61725,1700],{"class":104},[87,61727,245],{"class":171},[87,61729,117],{"class":97},[87,61731,61732,61734,61736,61738,61740],{"class":89,"line":9007},[87,61733,52427],{"class":104},[87,61735,108],{"class":97},[87,61737,61508],{"class":104},[87,61739,245],{"class":171},[87,61741,117],{"class":97},[87,61743,61744,61746,61748,61750,61752,61754,61756],{"class":89,"line":10666},[87,61745,61612],{"class":104},[87,61747,108],{"class":97},[87,61749,1313],{"class":104},[87,61751,245],{"class":171},[87,61753,248],{"class":104},[87,61755,61668],{"class":104},[87,61757,117],{"class":97},[87,61759,61760,61763,61765,61767],{"class":89,"line":10691},[87,61761,61762],{"class":104},"            border-top",[87,61764,108],{"class":97},[87,61766,111],{"class":104},[87,61768,117],{"class":97},[87,61770,61771,61774,61776,61779],{"class":89,"line":10714},[87,61772,61773],{"class":104},"            background",[87,61775,108],{"class":97},[87,61777,61778],{"class":104},"#fff",[87,61780,117],{"class":97},[87,61782,61783],{"class":89,"line":10738},[87,61784,3484],{"class":97},[87,61786,61787],{"class":89,"line":10743},[87,61788,3355],{"emptyLinePlaceholder":1029},[87,61790,61791,61793,61795],{"class":89,"line":10748},[87,61792,61683],{"class":205},[87,61794,2356],{"class":93},[87,61796,98],{"class":97},[87,61798,61799,61801,61803,61806],{"class":89,"line":10753},[87,61800,52415],{"class":104},[87,61802,108],{"class":97},[87,61804,61805],{"class":104},"block",[87,61807,117],{"class":97},[87,61809,61810,61812,61814,61816,61818,61821,61823],{"class":89,"line":10762},[87,61811,52389],{"class":104},[87,61813,108],{"class":97},[87,61815,1439],{"class":104},[87,61817,245],{"class":171},[87,61819,61820],{"class":104}," 15",[87,61822,245],{"class":171},[87,61824,117],{"class":97},[87,61826,61827,61829,61831,61833,61835],{"class":89,"line":10767},[87,61828,61586],{"class":104},[87,61830,108],{"class":97},[87,61832,1592],{"class":104},[87,61834,245],{"class":171},[87,61836,117],{"class":97},[87,61838,61839,61842,61844,61847],{"class":89,"line":10773},[87,61840,61841],{"class":104},"            color",[87,61843,108],{"class":97},[87,61845,61846],{"class":104},"#424242",[87,61848,117],{"class":97},[87,61850,61851,61854,61856,61858],{"class":89,"line":10794},[87,61852,61853],{"class":104},"            text-decoration",[87,61855,108],{"class":97},[87,61857,55673],{"class":104},[87,61859,117],{"class":97},[87,61861,61862],{"class":89,"line":10800},[87,61863,3484],{"class":97},[87,61865,61866],{"class":89,"line":10814},[87,61867,3355],{"emptyLinePlaceholder":1029},[87,61869,61870,61872,61874,61877],{"class":89,"line":10820},[87,61871,61683],{"class":205},[87,61873,2356],{"class":93},[87,61875,61876],{"class":205},":hover",[87,61878,98],{"class":97},[87,61880,61881,61883,61885,61888],{"class":89,"line":10847},[87,61882,52578],{"class":104},[87,61884,108],{"class":97},[87,61886,61887],{"class":104},"#eee",[87,61889,117],{"class":97},[87,61891,61892],{"class":89,"line":10856},[87,61893,3484],{"class":97},[87,61895,61896,61898,61900],{"class":89,"line":10862},[87,61897,52714],{"class":97},[87,61899,1006],{"class":93},[87,61901,953],{"class":97},[87,61903,61904],{"class":89,"line":10870},[87,61905,3355],{"emptyLinePlaceholder":1029},[87,61907,61908,61910,61912],{"class":89,"line":10875},[87,61909,963],{"class":97},[87,61911,52278],{"class":93},[87,61913,953],{"class":97},[87,61915,61916],{"class":89,"line":17553},[87,61917,3355],{"emptyLinePlaceholder":1029},[87,61919,61920,61922,61924],{"class":89,"line":17559},[87,61921,938],{"class":97},[87,61923,52737],{"class":93},[87,61925,953],{"class":97},[87,61927,61928,61930,61932,61934,61936,61939],{"class":89,"line":17582},[87,61929,52285],{"class":97},[87,61931,94],{"class":93},[87,61933,943],{"class":205},[87,61935,946],{"class":97},[87,61937,61938],{"class":949},"\"mi\"",[87,61940,953],{"class":97},[87,61942,61943,61945,61947,61949,61951,61954,61957,61959,61962],{"class":89,"line":17588},[87,61944,56238],{"class":97},[87,61946,54757],{"class":93},[87,61948,54760],{"class":205},[87,61950,946],{"class":97},[87,61952,61953],{"class":949},"\"search\"",[87,61955,61956],{"class":205}," placeholder",[87,61958,946],{"class":97},[87,61960,61961],{"class":949},"\"小米笔记本\"",[87,61963,953],{"class":97},[87,61965,61966,61968,61970,61972,61974,61977],{"class":89,"line":17611},[87,61967,56238],{"class":97},[87,61969,26],{"class":93},[87,61971,943],{"class":205},[87,61973,946],{"class":97},[87,61975,61976],{"class":949},"\"result-list\"",[87,61978,953],{"class":97},[87,61980,61981,61984,61986,61989,61991,61994,61996,61999,62002,62004,62006,62008],{"class":89,"line":17625},[87,61982,61983],{"class":97},"            \u003C",[87,61985,29],{"class":93},[87,61987,61988],{"class":97},">\u003C",[87,61990,1334],{"class":93},[87,61992,61993],{"class":205}," href",[87,61995,946],{"class":97},[87,61997,61998],{"class":949},"\"#\"",[87,62000,62001],{"class":97},">全部商品\u003C\u002F",[87,62003,1334],{"class":93},[87,62005,56250],{"class":97},[87,62007,29],{"class":93},[87,62009,953],{"class":97},[87,62011,62012,62014,62016,62018,62020,62022,62024,62026,62029,62031,62033,62035],{"class":89,"line":17645},[87,62013,61983],{"class":97},[87,62015,29],{"class":93},[87,62017,61988],{"class":97},[87,62019,1334],{"class":93},[87,62021,61993],{"class":205},[87,62023,946],{"class":97},[87,62025,61998],{"class":949},[87,62027,62028],{"class":97},">小米11\u003C\u002F",[87,62030,1334],{"class":93},[87,62032,56250],{"class":97},[87,62034,29],{"class":93},[87,62036,953],{"class":97},[87,62038,62039,62041,62043,62045,62047,62049,62051,62053,62056,62058,62060,62062],{"class":89,"line":17651},[87,62040,61983],{"class":97},[87,62042,29],{"class":93},[87,62044,61988],{"class":97},[87,62046,1334],{"class":93},[87,62048,61993],{"class":205},[87,62050,946],{"class":97},[87,62052,61998],{"class":949},[87,62054,62055],{"class":97},">小米10S\u003C\u002F",[87,62057,1334],{"class":93},[87,62059,56250],{"class":97},[87,62061,29],{"class":93},[87,62063,953],{"class":97},[87,62065,62066,62068,62070,62072,62074,62076,62078,62080,62083,62085,62087,62089],{"class":89,"line":17662},[87,62067,61983],{"class":97},[87,62069,29],{"class":93},[87,62071,61988],{"class":97},[87,62073,1334],{"class":93},[87,62075,61993],{"class":205},[87,62077,946],{"class":97},[87,62079,61998],{"class":949},[87,62081,62082],{"class":97},">小米笔记本\u003C\u002F",[87,62084,1334],{"class":93},[87,62086,56250],{"class":97},[87,62088,29],{"class":93},[87,62090,953],{"class":97},[87,62092,62093,62095,62097,62099,62101,62103,62105,62107,62110,62112,62114,62116],{"class":89,"line":17685},[87,62094,61983],{"class":97},[87,62096,29],{"class":93},[87,62098,61988],{"class":97},[87,62100,1334],{"class":93},[87,62102,61993],{"class":205},[87,62104,946],{"class":97},[87,62106,61998],{"class":949},[87,62108,62109],{"class":97},">小米手机\u003C\u002F",[87,62111,1334],{"class":93},[87,62113,56250],{"class":97},[87,62115,29],{"class":93},[87,62117,953],{"class":97},[87,62119,62120,62122,62124,62126,62128,62130,62132,62134,62137,62139,62141,62143],{"class":89,"line":17707},[87,62121,61983],{"class":97},[87,62123,29],{"class":93},[87,62125,61988],{"class":97},[87,62127,1334],{"class":93},[87,62129,61993],{"class":205},[87,62131,946],{"class":97},[87,62133,61998],{"class":949},[87,62135,62136],{"class":97},">黑鲨4\u003C\u002F",[87,62138,1334],{"class":93},[87,62140,56250],{"class":97},[87,62142,29],{"class":93},[87,62144,953],{"class":97},[87,62146,62147,62149,62151,62153,62155,62157,62159,62161,62164,62166,62168,62170],{"class":89,"line":17712},[87,62148,61983],{"class":97},[87,62150,29],{"class":93},[87,62152,61988],{"class":97},[87,62154,1334],{"class":93},[87,62156,61993],{"class":205},[87,62158,946],{"class":97},[87,62160,61998],{"class":949},[87,62162,62163],{"class":97},">空调\u003C\u002F",[87,62165,1334],{"class":93},[87,62167,56250],{"class":97},[87,62169,29],{"class":93},[87,62171,953],{"class":97},[87,62173,62174,62177,62179],{"class":89,"line":17718},[87,62175,62176],{"class":97},"        \u003C\u002F",[87,62178,26],{"class":93},[87,62180,953],{"class":97},[87,62182,62183,62185,62187],{"class":89,"line":17732},[87,62184,52714],{"class":97},[87,62186,94],{"class":93},[87,62188,953],{"class":97},[87,62190,62191,62193,62195],{"class":89,"line":17745},[87,62192,52285],{"class":97},[87,62194,52750],{"class":93},[87,62196,953],{"class":97},[87,62198,62199],{"class":89,"line":17750},[87,62200,62201],{"class":199},"        \u002F\u002F 1. 获取元素\n",[87,62203,62204,62207,62209,62211,62213,62215,62217,62220],{"class":89,"line":17764},[87,62205,62206],{"class":171},"        const",[87,62208,61541],{"class":104},[87,62210,14514],{"class":171},[87,62212,55332],{"class":97},[87,62214,55335],{"class":205},[87,62216,165],{"class":97},[87,62218,62219],{"class":949},"'[type=search]'",[87,62221,1108],{"class":97},[87,62223,62224,62226,62229,62231,62233,62235,62237,62240],{"class":89,"line":17769},[87,62225,62206],{"class":171},[87,62227,62228],{"class":104}," ul",[87,62230,14514],{"class":171},[87,62232,55332],{"class":97},[87,62234,55335],{"class":205},[87,62236,165],{"class":97},[87,62238,62239],{"class":949},"'.result-list'",[87,62241,1108],{"class":97},[87,62243,62244],{"class":89,"line":17775},[87,62245,62246],{"class":199},"        \u002F\u002F console.log(input)\n",[87,62248,62249],{"class":89,"line":17780},[87,62250,62251],{"class":199},"        \u002F\u002F 2. 监听事件 获得焦点\n",[87,62253,62254,62257,62259,62261,62264,62266,62268],{"class":89,"line":17794},[87,62255,62256],{"class":97},"        input.",[87,62258,58749],{"class":205},[87,62260,165],{"class":97},[87,62262,62263],{"class":949},"'focus'",[87,62265,13385],{"class":97},[87,62267,55385],{"class":171},[87,62269,55388],{"class":97},[87,62271,62272],{"class":89,"line":17799},[87,62273,62274],{"class":199},"            \u002F\u002F ul显示\n",[87,62276,62277,62280,62282],{"class":89,"line":17804},[87,62278,62279],{"class":97},"            ul.style.display ",[87,62281,946],{"class":171},[87,62283,62284],{"class":949}," 'block'\n",[87,62286,62287],{"class":89,"line":17818},[87,62288,62289],{"class":199},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[87,62291,62292,62295,62297,62299,62302],{"class":89,"line":17830},[87,62293,62294],{"class":97},"            input.classList.",[87,62296,6284],{"class":205},[87,62298,165],{"class":97},[87,62300,62301],{"class":949},"'search'",[87,62303,1108],{"class":97},[87,62305,62306],{"class":89,"line":17835},[87,62307,62308],{"class":97},"        })\n",[87,62310,62311],{"class":89,"line":17848},[87,62312,62313],{"class":199},"        \u002F\u002F 3. 监听事件 失去焦点\n",[87,62315,62316,62318,62320,62322,62325,62327,62329],{"class":89,"line":17853},[87,62317,62256],{"class":97},[87,62319,58749],{"class":205},[87,62321,165],{"class":97},[87,62323,62324],{"class":949},"'blur'",[87,62326,13385],{"class":97},[87,62328,55385],{"class":171},[87,62330,55388],{"class":97},[87,62332,62333,62335,62337],{"class":89,"line":17858},[87,62334,62279],{"class":97},[87,62336,946],{"class":171},[87,62338,62339],{"class":949}," 'none'\n",[87,62341,62342,62344,62346,62348,62350],{"class":89,"line":17863},[87,62343,62294],{"class":97},[87,62345,57942],{"class":205},[87,62347,165],{"class":97},[87,62349,62301],{"class":949},[87,62351,1108],{"class":97},[87,62353,62354],{"class":89,"line":17876},[87,62355,62308],{"class":97},[87,62357,62358,62360,62362],{"class":89,"line":17881},[87,62359,52714],{"class":97},[87,62361,52750],{"class":93},[87,62363,953],{"class":97},[87,62365,62366,62368,62370],{"class":89,"line":33580},[87,62367,963],{"class":97},[87,62369,52737],{"class":93},[87,62371,953],{"class":97},[87,62373,62374],{"class":89,"line":33586},[87,62375,3355],{"emptyLinePlaceholder":1029},[87,62377,62378,62380,62382],{"class":89,"line":33592},[87,62379,963],{"class":97},[87,62381,51581],{"class":93},[87,62383,953],{"class":97},[49,62385,62387],{"id":62386},"_3253-键盘事件","3.2.5.3 键盘事件",[19,62389,62390],{},"评论字数统计案例",[19,62392,62393],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,62395,62396],{},"牢记focus伪类选择器",[52288,62398],{"charSet":62399},"UTF-8",[52288,62401],{"name":62402,"content":62403},"viewport","width=device-width, initial-scale=1.0",[52351,62405,62406],{},"Document",[1006,62408,62409],{},"\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",[54757,62411],{"type":599},[26,62413,62414,62417],{},[29,62415,62416],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[29,62418,62419],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[77,62421,62423],{"className":51579,"code":62422,"language":51581,"meta":82,"style":82},"\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",[84,62424,62425,62435,62449,62453,62461,62475,62495,62515,62528,62536,62543,62556,62570,62580,62590,62594,62598,62605,62617,62629,62641,62653,62681,62694,62698,62702,62711,62722,62734,62745,62756,62768,62779,62791,62807,62819,62823,62827,62838,62849,62859,62871,62875,62879,62887,62898,62908,62919,62931,62944,62956,62968,62972,62976,62985,62997,63008,63021,63032,63046,63050,63054,63061,63073,63085,63095,63099,63103,63112,63124,63134,63138,63142,63153,63163,63182,63195,63199,63203,63213,63223,63227,63231,63242,63253,63265,63277,63281,63285,63296,63306,63320,63324,63328,63339,63349,63361,63365,63373,63381,63385,63393,63408,63427,63467,63480,63488,63502,63522,63530,63545,63568,63586,63601,63621,63641,63661,63669,63677,63685,63693,63713,63733,63738,63755,63764,63768,63773,63789,63797,63801,63806,63823,63828,63853,63857,63861,63866,63871,63879,63887,63891],{"__ignoreMap":82},[87,62426,62427,62429,62431,62433],{"class":89,"line":90},[87,62428,52243],{"class":97},[87,62430,52246],{"class":93},[87,62432,52249],{"class":205},[87,62434,953],{"class":97},[87,62436,62437,62439,62441,62443,62445,62447],{"class":89,"line":101},[87,62438,938],{"class":97},[87,62440,51581],{"class":93},[87,62442,52260],{"class":205},[87,62444,946],{"class":97},[87,62446,52265],{"class":949},[87,62448,953],{"class":97},[87,62450,62451],{"class":89,"line":120},[87,62452,3355],{"emptyLinePlaceholder":1029},[87,62454,62455,62457,62459],{"class":89,"line":222},[87,62456,938],{"class":97},[87,62458,52278],{"class":93},[87,62460,953],{"class":97},[87,62462,62463,62465,62467,62469,62471,62473],{"class":89,"line":234},[87,62464,53081],{"class":97},[87,62466,52288],{"class":93},[87,62468,52291],{"class":205},[87,62470,946],{"class":97},[87,62472,52296],{"class":949},[87,62474,953],{"class":97},[87,62476,62477,62479,62481,62483,62485,62487,62489,62491,62493],{"class":89,"line":256},[87,62478,53081],{"class":97},[87,62480,52288],{"class":93},[87,62482,52307],{"class":205},[87,62484,946],{"class":97},[87,62486,52312],{"class":949},[87,62488,52315],{"class":205},[87,62490,946],{"class":97},[87,62492,52320],{"class":949},[87,62494,953],{"class":97},[87,62496,62497,62499,62501,62503,62505,62507,62509,62511,62513],{"class":89,"line":269},[87,62498,53081],{"class":97},[87,62500,52288],{"class":93},[87,62502,15870],{"class":205},[87,62504,946],{"class":97},[87,62506,52335],{"class":949},[87,62508,52315],{"class":205},[87,62510,946],{"class":97},[87,62512,52342],{"class":949},[87,62514,953],{"class":97},[87,62516,62517,62519,62521,62524,62526],{"class":89,"line":463},[87,62518,53081],{"class":97},[87,62520,52351],{"class":93},[87,62522,62523],{"class":97},">评论回车发布\u003C\u002F",[87,62525,52351],{"class":93},[87,62527,953],{"class":97},[87,62529,62530,62532,62534],{"class":89,"line":469},[87,62531,53081],{"class":97},[87,62533,1006],{"class":93},[87,62535,953],{"class":97},[87,62537,62538,62541],{"class":89,"line":2287},[87,62539,62540],{"class":205},"    .wrapper",[87,62542,98],{"class":97},[87,62544,62545,62548,62550,62552,62554],{"class":89,"line":2568},[87,62546,62547],{"class":104},"      min-width",[87,62549,108],{"class":97},[87,62551,4941],{"class":104},[87,62553,245],{"class":171},[87,62555,117],{"class":97},[87,62557,62558,62561,62563,62566,62568],{"class":89,"line":2573},[87,62559,62560],{"class":104},"      max-width",[87,62562,108],{"class":97},[87,62564,62565],{"class":104},"800",[87,62567,245],{"class":171},[87,62569,117],{"class":97},[87,62571,62572,62574,62576,62578],{"class":89,"line":2579},[87,62573,55945],{"class":104},[87,62575,108],{"class":97},[87,62577,52420],{"class":104},[87,62579,117],{"class":97},[87,62581,62582,62584,62586,62588],{"class":89,"line":2584},[87,62583,55956],{"class":104},[87,62585,108],{"class":97},[87,62587,52520],{"class":104},[87,62589,117],{"class":97},[87,62591,62592],{"class":89,"line":2598},[87,62593,3142],{"class":97},[87,62595,62596],{"class":89,"line":2603},[87,62597,3355],{"emptyLinePlaceholder":1029},[87,62599,62600,62603],{"class":89,"line":2609},[87,62601,62602],{"class":205},"    .avatar",[87,62604,98],{"class":97},[87,62606,62607,62609,62611,62613,62615],{"class":89,"line":2630},[87,62608,55707],{"class":104},[87,62610,108],{"class":97},[87,62612,1700],{"class":104},[87,62614,245],{"class":171},[87,62616,117],{"class":97},[87,62618,62619,62621,62623,62625,62627],{"class":89,"line":2635},[87,62620,55721],{"class":104},[87,62622,108],{"class":97},[87,62624,1700],{"class":104},[87,62626,245],{"class":171},[87,62628,117],{"class":97},[87,62630,62631,62633,62635,62637,62639],{"class":89,"line":2649},[87,62632,56070],{"class":104},[87,62634,108],{"class":97},[87,62636,1749],{"class":104},[87,62638,1423],{"class":171},[87,62640,117],{"class":97},[87,62642,62643,62646,62648,62651],{"class":89,"line":2654},[87,62644,62645],{"class":104},"      overflow",[87,62647,108],{"class":97},[87,62649,62650],{"class":104},"hidden",[87,62652,117],{"class":97},[87,62654,62655,62658,62660,62663,62665,62668,62670,62672,62674,62676,62679],{"class":89,"line":2683},[87,62656,62657],{"class":104},"      background",[87,62659,108],{"class":97},[87,62661,62662],{"class":104},"url",[87,62664,165],{"class":97},[87,62666,62667],{"class":492},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[87,62669,14664],{"class":97},[87,62671,735],{"class":104},[87,62673,321],{"class":104},[87,62675,25926],{"class":97},[87,62677,62678],{"class":104},"cover",[87,62680,117],{"class":97},[87,62682,62683,62686,62688,62690,62692],{"class":89,"line":2688},[87,62684,62685],{"class":104},"      margin-right",[87,62687,108],{"class":97},[87,62689,1792],{"class":104},[87,62691,245],{"class":171},[87,62693,117],{"class":97},[87,62695,62696],{"class":89,"line":2705},[87,62697,3142],{"class":97},[87,62699,62700],{"class":89,"line":2710},[87,62701,3355],{"emptyLinePlaceholder":1029},[87,62703,62704,62706,62709],{"class":89,"line":2715},[87,62705,62540],{"class":205},[87,62707,62708],{"class":93}," textarea",[87,62710,98],{"class":97},[87,62712,62713,62716,62718,62720],{"class":89,"line":2720},[87,62714,62715],{"class":104},"      outline",[87,62717,108],{"class":97},[87,62719,55673],{"class":104},[87,62721,117],{"class":97},[87,62723,62724,62727,62729,62732],{"class":89,"line":2734},[87,62725,62726],{"class":104},"      border-color",[87,62728,108],{"class":97},[87,62730,62731],{"class":104},"transparent",[87,62733,117],{"class":97},[87,62735,62736,62739,62741,62743],{"class":89,"line":2739},[87,62737,62738],{"class":104},"      resize",[87,62740,108],{"class":97},[87,62742,55673],{"class":104},[87,62744,117],{"class":97},[87,62746,62747,62749,62751,62754],{"class":89,"line":3532},[87,62748,62657],{"class":104},[87,62750,108],{"class":97},[87,62752,62753],{"class":104},"#f5f5f5",[87,62755,117],{"class":97},[87,62757,62758,62760,62762,62764,62766],{"class":89,"line":3546},[87,62759,56070],{"class":104},[87,62761,108],{"class":97},[87,62763,1389],{"class":104},[87,62765,245],{"class":171},[87,62767,117],{"class":97},[87,62769,62770,62773,62775,62777],{"class":89,"line":3554},[87,62771,62772],{"class":104},"      flex",[87,62774,108],{"class":97},[87,62776,1313],{"class":104},[87,62778,117],{"class":97},[87,62780,62781,62783,62785,62787,62789],{"class":89,"line":3559},[87,62782,55631],{"class":104},[87,62784,108],{"class":97},[87,62786,242],{"class":104},[87,62788,245],{"class":171},[87,62790,117],{"class":97},[87,62792,62793,62796,62798,62800,62803,62805],{"class":89,"line":3565},[87,62794,62795],{"class":104},"      transition",[87,62797,108],{"class":97},[87,62799,29068],{"class":104},[87,62801,62802],{"class":104}," 0.5",[87,62804,571],{"class":171},[87,62806,117],{"class":97},[87,62808,62809,62811,62813,62815,62817],{"class":89,"line":3571},[87,62810,55721],{"class":104},[87,62812,108],{"class":97},[87,62814,2042],{"class":104},[87,62816,245],{"class":171},[87,62818,117],{"class":97},[87,62820,62821],{"class":89,"line":3576},[87,62822,3142],{"class":97},[87,62824,62825],{"class":89,"line":8898},[87,62826,3355],{"emptyLinePlaceholder":1029},[87,62828,62829,62831,62833,62836],{"class":89,"line":8922},[87,62830,62540],{"class":205},[87,62832,62708],{"class":93},[87,62834,62835],{"class":205},":focus",[87,62837,98],{"class":97},[87,62839,62840,62842,62844,62847],{"class":89,"line":8927},[87,62841,62726],{"class":104},[87,62843,108],{"class":97},[87,62845,62846],{"class":104},"#e4e4e4",[87,62848,117],{"class":97},[87,62850,62851,62853,62855,62857],{"class":89,"line":8933},[87,62852,62657],{"class":104},[87,62854,108],{"class":97},[87,62856,61778],{"class":104},[87,62858,117],{"class":97},[87,62860,62861,62863,62865,62867,62869],{"class":89,"line":8960},[87,62862,55721],{"class":104},[87,62864,108],{"class":97},[87,62866,1749],{"class":104},[87,62868,245],{"class":171},[87,62870,117],{"class":97},[87,62872,62873],{"class":89,"line":8965},[87,62874,3142],{"class":97},[87,62876,62877],{"class":89,"line":8971},[87,62878,3355],{"emptyLinePlaceholder":1029},[87,62880,62881,62883,62885],{"class":89,"line":8983},[87,62882,62540],{"class":205},[87,62884,58403],{"class":93},[87,62886,98],{"class":97},[87,62888,62889,62891,62893,62896],{"class":89,"line":8995},[87,62890,62657],{"class":104},[87,62892,108],{"class":97},[87,62894,62895],{"class":104},"#00aeec",[87,62897,117],{"class":97},[87,62899,62900,62902,62904,62906],{"class":89,"line":9007},[87,62901,58352],{"class":104},[87,62903,108],{"class":97},[87,62905,61778],{"class":104},[87,62907,117],{"class":97},[87,62909,62910,62913,62915,62917],{"class":89,"line":10666},[87,62911,62912],{"class":104},"      border",[87,62914,108],{"class":97},[87,62916,55673],{"class":104},[87,62918,117],{"class":97},[87,62920,62921,62923,62925,62927,62929],{"class":89,"line":10691},[87,62922,56070],{"class":104},[87,62924,108],{"class":97},[87,62926,1389],{"class":104},[87,62928,245],{"class":171},[87,62930,117],{"class":97},[87,62932,62933,62936,62938,62940,62942],{"class":89,"line":10714},[87,62934,62935],{"class":104},"      margin-left",[87,62937,108],{"class":97},[87,62939,242],{"class":104},[87,62941,245],{"class":171},[87,62943,117],{"class":97},[87,62945,62946,62948,62950,62952,62954],{"class":89,"line":10738},[87,62947,55707],{"class":104},[87,62949,108],{"class":97},[87,62951,1451],{"class":104},[87,62953,245],{"class":171},[87,62955,117],{"class":97},[87,62957,62958,62961,62963,62966],{"class":89,"line":10743},[87,62959,62960],{"class":104},"      cursor",[87,62962,108],{"class":97},[87,62964,62965],{"class":104},"pointer",[87,62967,117],{"class":97},[87,62969,62970],{"class":89,"line":10748},[87,62971,3142],{"class":97},[87,62973,62974],{"class":89,"line":10753},[87,62975,3355],{"emptyLinePlaceholder":1029},[87,62977,62978,62980,62983],{"class":89,"line":10762},[87,62979,62540],{"class":205},[87,62981,62982],{"class":205}," .total",[87,62984,98],{"class":97},[87,62986,62987,62989,62991,62993,62995],{"class":89,"line":10767},[87,62988,62685],{"class":104},[87,62990,108],{"class":97},[87,62992,1705],{"class":104},[87,62994,245],{"class":171},[87,62996,117],{"class":97},[87,62998,62999,63001,63003,63006],{"class":89,"line":10773},[87,63000,58352],{"class":104},[87,63002,108],{"class":97},[87,63004,63005],{"class":104},"#999",[87,63007,117],{"class":97},[87,63009,63010,63013,63015,63017,63019],{"class":89,"line":10794},[87,63011,63012],{"class":104},"      margin-top",[87,63014,108],{"class":97},[87,63016,1414],{"class":104},[87,63018,245],{"class":171},[87,63020,117],{"class":97},[87,63022,63023,63026,63028,63030],{"class":89,"line":10800},[87,63024,63025],{"class":104},"      opacity",[87,63027,108],{"class":97},[87,63029,111],{"class":104},[87,63031,117],{"class":97},[87,63033,63034,63036,63038,63040,63042,63044],{"class":89,"line":10814},[87,63035,62795],{"class":104},[87,63037,108],{"class":97},[87,63039,29068],{"class":104},[87,63041,62802],{"class":104},[87,63043,571],{"class":171},[87,63045,117],{"class":97},[87,63047,63048],{"class":89,"line":10820},[87,63049,3142],{"class":97},[87,63051,63052],{"class":89,"line":10847},[87,63053,3355],{"emptyLinePlaceholder":1029},[87,63055,63056,63059],{"class":89,"line":10856},[87,63057,63058],{"class":205},"    .list",[87,63060,98],{"class":97},[87,63062,63063,63065,63067,63069,63071],{"class":89,"line":10862},[87,63064,62547],{"class":104},[87,63066,108],{"class":97},[87,63068,4941],{"class":104},[87,63070,245],{"class":171},[87,63072,117],{"class":97},[87,63074,63075,63077,63079,63081,63083],{"class":89,"line":10870},[87,63076,62560],{"class":104},[87,63078,108],{"class":97},[87,63080,62565],{"class":104},[87,63082,245],{"class":171},[87,63084,117],{"class":97},[87,63086,63087,63089,63091,63093],{"class":89,"line":10875},[87,63088,55945],{"class":104},[87,63090,108],{"class":97},[87,63092,52420],{"class":104},[87,63094,117],{"class":97},[87,63096,63097],{"class":89,"line":17553},[87,63098,3142],{"class":97},[87,63100,63101],{"class":89,"line":17559},[87,63102,3355],{"emptyLinePlaceholder":1029},[87,63104,63105,63107,63110],{"class":89,"line":17582},[87,63106,63058],{"class":205},[87,63108,63109],{"class":205}," .item",[87,63111,98],{"class":97},[87,63113,63114,63116,63118,63120,63122],{"class":89,"line":17588},[87,63115,55707],{"class":104},[87,63117,108],{"class":97},[87,63119,536],{"class":104},[87,63121,1423],{"class":171},[87,63123,117],{"class":97},[87,63125,63126,63128,63130,63132],{"class":89,"line":17611},[87,63127,55945],{"class":104},[87,63129,108],{"class":97},[87,63131,52420],{"class":104},[87,63133,117],{"class":97},[87,63135,63136],{"class":89,"line":17625},[87,63137,3142],{"class":97},[87,63139,63140],{"class":89,"line":17645},[87,63141,3355],{"emptyLinePlaceholder":1029},[87,63143,63144,63146,63148,63151],{"class":89,"line":17651},[87,63145,63058],{"class":205},[87,63147,63109],{"class":205},[87,63149,63150],{"class":205}," .info",[87,63152,98],{"class":97},[87,63154,63155,63157,63159,63161],{"class":89,"line":17662},[87,63156,62772],{"class":104},[87,63158,108],{"class":97},[87,63160,1313],{"class":104},[87,63162,117],{"class":97},[87,63164,63165,63168,63170,63172,63174,63177,63180],{"class":89,"line":17685},[87,63166,63167],{"class":104},"      border-bottom",[87,63169,108],{"class":97},[87,63171,1313],{"class":104},[87,63173,245],{"class":171},[87,63175,63176],{"class":104}," dashed",[87,63178,63179],{"class":104}," #e4e4e4",[87,63181,117],{"class":97},[87,63183,63184,63187,63189,63191,63193],{"class":89,"line":17707},[87,63185,63186],{"class":104},"      padding-bottom",[87,63188,108],{"class":97},[87,63190,242],{"class":104},[87,63192,245],{"class":171},[87,63194,117],{"class":97},[87,63196,63197],{"class":89,"line":17712},[87,63198,3142],{"class":97},[87,63200,63201],{"class":89,"line":17718},[87,63202,3355],{"emptyLinePlaceholder":1029},[87,63204,63205,63207,63209,63211],{"class":89,"line":17732},[87,63206,63058],{"class":205},[87,63208,63109],{"class":205},[87,63210,7775],{"class":93},[87,63212,98],{"class":97},[87,63214,63215,63217,63219,63221],{"class":89,"line":17745},[87,63216,55642],{"class":104},[87,63218,108],{"class":97},[87,63220,111],{"class":104},[87,63222,117],{"class":97},[87,63224,63225],{"class":89,"line":17750},[87,63226,3142],{"class":97},[87,63228,63229],{"class":89,"line":17764},[87,63230,3355],{"emptyLinePlaceholder":1029},[87,63232,63233,63235,63237,63240],{"class":89,"line":17769},[87,63234,63058],{"class":205},[87,63236,63109],{"class":205},[87,63238,63239],{"class":205}," .name",[87,63241,98],{"class":97},[87,63243,63244,63246,63248,63251],{"class":89,"line":17775},[87,63245,58352],{"class":104},[87,63247,108],{"class":97},[87,63249,63250],{"class":104},"#FB7299",[87,63252,117],{"class":97},[87,63254,63255,63257,63259,63261,63263],{"class":89,"line":17780},[87,63256,55858],{"class":104},[87,63258,108],{"class":97},[87,63260,1642],{"class":104},[87,63262,245],{"class":171},[87,63264,117],{"class":97},[87,63266,63267,63270,63272,63275],{"class":89,"line":17794},[87,63268,63269],{"class":104},"      font-weight",[87,63271,108],{"class":97},[87,63273,63274],{"class":104},"bold",[87,63276,117],{"class":97},[87,63278,63279],{"class":89,"line":17799},[87,63280,3142],{"class":97},[87,63282,63283],{"class":89,"line":17804},[87,63284,3355],{"emptyLinePlaceholder":1029},[87,63286,63287,63289,63291,63294],{"class":89,"line":17818},[87,63288,63058],{"class":205},[87,63290,63109],{"class":205},[87,63292,63293],{"class":205}," .text",[87,63295,98],{"class":97},[87,63297,63298,63300,63302,63304],{"class":89,"line":17830},[87,63299,58352],{"class":104},[87,63301,108],{"class":97},[87,63303,264],{"class":104},[87,63305,117],{"class":97},[87,63307,63308,63310,63312,63314,63316,63318],{"class":89,"line":17835},[87,63309,55631],{"class":104},[87,63311,108],{"class":97},[87,63313,242],{"class":104},[87,63315,245],{"class":171},[87,63317,577],{"class":104},[87,63319,117],{"class":97},[87,63321,63322],{"class":89,"line":17848},[87,63323,3142],{"class":97},[87,63325,63326],{"class":89,"line":17853},[87,63327,3355],{"emptyLinePlaceholder":1029},[87,63329,63330,63332,63334,63337],{"class":89,"line":17858},[87,63331,63058],{"class":205},[87,63333,63109],{"class":205},[87,63335,63336],{"class":205}," .time",[87,63338,98],{"class":97},[87,63340,63341,63343,63345,63347],{"class":89,"line":17863},[87,63342,58352],{"class":104},[87,63344,108],{"class":97},[87,63346,63005],{"class":104},[87,63348,117],{"class":97},[87,63350,63351,63353,63355,63357,63359],{"class":89,"line":17876},[87,63352,55858],{"class":104},[87,63354,108],{"class":97},[87,63356,1592],{"class":104},[87,63358,245],{"class":171},[87,63360,117],{"class":97},[87,63362,63363],{"class":89,"line":17881},[87,63364,3142],{"class":97},[87,63366,63367,63369,63371],{"class":89,"line":33580},[87,63368,53354],{"class":97},[87,63370,1006],{"class":93},[87,63372,953],{"class":97},[87,63374,63375,63377,63379],{"class":89,"line":33586},[87,63376,963],{"class":97},[87,63378,52278],{"class":93},[87,63380,953],{"class":97},[87,63382,63383],{"class":89,"line":33592},[87,63384,3355],{"emptyLinePlaceholder":1029},[87,63386,63387,63389,63391],{"class":89,"line":33598},[87,63388,938],{"class":97},[87,63390,52737],{"class":93},[87,63392,953],{"class":97},[87,63394,63395,63397,63399,63401,63403,63406],{"class":89,"line":33604},[87,63396,53081],{"class":97},[87,63398,94],{"class":93},[87,63400,943],{"class":205},[87,63402,946],{"class":97},[87,63404,63405],{"class":949},"\"wrapper\"",[87,63407,953],{"class":97},[87,63409,63410,63412,63414,63416,63418,63421,63423,63425],{"class":89,"line":33615},[87,63411,52285],{"class":97},[87,63413,1536],{"class":93},[87,63415,943],{"class":205},[87,63417,946],{"class":97},[87,63419,63420],{"class":949},"\"avatar\"",[87,63422,56250],{"class":97},[87,63424,1536],{"class":93},[87,63426,953],{"class":97},[87,63428,63429,63431,63433,63435,63437,63440,63442,63444,63447,63449,63451,63453,63456,63458,63461,63463,63465],{"class":89,"line":33621},[87,63430,52285],{"class":97},[87,63432,55224],{"class":93},[87,63434,15909],{"class":205},[87,63436,946],{"class":97},[87,63438,63439],{"class":949},"\"tx\"",[87,63441,61956],{"class":205},[87,63443,946],{"class":97},[87,63445,63446],{"class":949},"\"发一条友善的评论\"",[87,63448,55247],{"class":205},[87,63450,946],{"class":97},[87,63452,4655],{"class":949},[87,63454,63455],{"class":205}," maxlength",[87,63457,946],{"class":97},[87,63459,63460],{"class":949},"\"200\"",[87,63462,56250],{"class":97},[87,63464,55224],{"class":93},[87,63466,953],{"class":97},[87,63468,63469,63471,63473,63476,63478],{"class":89,"line":33641},[87,63470,52285],{"class":97},[87,63472,54823],{"class":93},[87,63474,63475],{"class":97},">发布\u003C\u002F",[87,63477,54823],{"class":93},[87,63479,953],{"class":97},[87,63481,63482,63484,63486],{"class":89,"line":33647},[87,63483,53354],{"class":97},[87,63485,94],{"class":93},[87,63487,953],{"class":97},[87,63489,63490,63492,63494,63496,63498,63500],{"class":89,"line":33658},[87,63491,53081],{"class":97},[87,63493,94],{"class":93},[87,63495,943],{"class":205},[87,63497,946],{"class":97},[87,63499,63405],{"class":949},[87,63501,953],{"class":97},[87,63503,63504,63506,63508,63510,63512,63515,63518,63520],{"class":89,"line":33664},[87,63505,52285],{"class":97},[87,63507,87],{"class":93},[87,63509,943],{"class":205},[87,63511,946],{"class":97},[87,63513,63514],{"class":949},"\"total\"",[87,63516,63517],{"class":97},">0\u002F200字\u003C\u002F",[87,63519,87],{"class":93},[87,63521,953],{"class":97},[87,63523,63524,63526,63528],{"class":89,"line":33670},[87,63525,53354],{"class":97},[87,63527,94],{"class":93},[87,63529,953],{"class":97},[87,63531,63532,63534,63536,63538,63540,63543],{"class":89,"line":33676},[87,63533,53081],{"class":97},[87,63535,94],{"class":93},[87,63537,943],{"class":205},[87,63539,946],{"class":97},[87,63541,63542],{"class":949},"\"list\"",[87,63544,953],{"class":97},[87,63546,63547,63549,63551,63553,63555,63558,63561,63563,63566],{"class":89,"line":33682},[87,63548,52285],{"class":97},[87,63550,94],{"class":93},[87,63552,943],{"class":205},[87,63554,946],{"class":97},[87,63556,63557],{"class":949},"\"item\"",[87,63559,63560],{"class":205}," style",[87,63562,946],{"class":97},[87,63564,63565],{"class":949},"\"display: none;\"",[87,63567,953],{"class":97},[87,63569,63570,63572,63574,63576,63578,63580,63582,63584],{"class":89,"line":33688},[87,63571,56170],{"class":97},[87,63573,1536],{"class":93},[87,63575,943],{"class":205},[87,63577,946],{"class":97},[87,63579,63420],{"class":949},[87,63581,56250],{"class":97},[87,63583,1536],{"class":93},[87,63585,953],{"class":97},[87,63587,63588,63590,63592,63594,63596,63599],{"class":89,"line":33694},[87,63589,56170],{"class":97},[87,63591,94],{"class":93},[87,63593,943],{"class":205},[87,63595,946],{"class":97},[87,63597,63598],{"class":949},"\"info\"",[87,63600,953],{"class":97},[87,63602,63603,63605,63607,63609,63611,63614,63617,63619],{"class":89,"line":33700},[87,63604,56238],{"class":97},[87,63606,19],{"class":93},[87,63608,943],{"class":205},[87,63610,946],{"class":97},[87,63612,63613],{"class":949},"\"name\"",[87,63615,63616],{"class":97},">清风徐来\u003C\u002F",[87,63618,19],{"class":93},[87,63620,953],{"class":97},[87,63622,63623,63625,63627,63629,63631,63634,63637,63639],{"class":89,"line":33720},[87,63624,56238],{"class":97},[87,63626,19],{"class":93},[87,63628,943],{"class":205},[87,63630,946],{"class":97},[87,63632,63633],{"class":949},"\"text\"",[87,63635,63636],{"class":97},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[87,63638,19],{"class":93},[87,63640,953],{"class":97},[87,63642,63643,63645,63647,63649,63651,63654,63657,63659],{"class":89,"line":33726},[87,63644,56238],{"class":97},[87,63646,19],{"class":93},[87,63648,943],{"class":205},[87,63650,946],{"class":97},[87,63652,63653],{"class":949},"\"time\"",[87,63655,63656],{"class":97},">2022-10-10 20:29:21\u003C\u002F",[87,63658,19],{"class":93},[87,63660,953],{"class":97},[87,63662,63663,63665,63667],{"class":89,"line":33742},[87,63664,56343],{"class":97},[87,63666,94],{"class":93},[87,63668,953],{"class":97},[87,63670,63671,63673,63675],{"class":89,"line":33748},[87,63672,52714],{"class":97},[87,63674,94],{"class":93},[87,63676,953],{"class":97},[87,63678,63679,63681,63683],{"class":89,"line":33762},[87,63680,53354],{"class":97},[87,63682,94],{"class":93},[87,63684,953],{"class":97},[87,63686,63687,63689,63691],{"class":89,"line":33768},[87,63688,53081],{"class":97},[87,63690,52750],{"class":93},[87,63692,953],{"class":97},[87,63694,63695,63697,63700,63702,63704,63706,63708,63711],{"class":89,"line":33783},[87,63696,12171],{"class":171},[87,63698,63699],{"class":104}," tx",[87,63701,14514],{"class":171},[87,63703,55332],{"class":97},[87,63705,55335],{"class":205},[87,63707,165],{"class":97},[87,63709,63710],{"class":949},"'#tx'",[87,63712,1108],{"class":97},[87,63714,63715,63717,63720,63722,63724,63726,63728,63731],{"class":89,"line":33789},[87,63716,12171],{"class":171},[87,63718,63719],{"class":104}," total",[87,63721,14514],{"class":171},[87,63723,55332],{"class":97},[87,63725,55335],{"class":205},[87,63727,165],{"class":97},[87,63729,63730],{"class":949},"'.total'",[87,63732,1108],{"class":97},[87,63734,63735],{"class":89,"line":33798},[87,63736,63737],{"class":199},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[87,63739,63740,63743,63745,63747,63749,63751,63753],{"class":89,"line":33804},[87,63741,63742],{"class":97},"    tx.",[87,63744,58749],{"class":205},[87,63746,165],{"class":97},[87,63748,62263],{"class":949},[87,63750,13385],{"class":97},[87,63752,55385],{"class":171},[87,63754,55388],{"class":97},[87,63756,63757,63760,63762],{"class":89,"line":33813},[87,63758,63759],{"class":97},"      total.style.opacity ",[87,63761,946],{"class":171},[87,63763,56635],{"class":104},[87,63765,63766],{"class":89,"line":33819},[87,63767,34408],{"class":97},[87,63769,63770],{"class":89,"line":33825},[87,63771,63772],{"class":199},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[87,63774,63775,63777,63779,63781,63783,63785,63787],{"class":89,"line":33834},[87,63776,63742],{"class":97},[87,63778,58749],{"class":205},[87,63780,165],{"class":97},[87,63782,62324],{"class":949},[87,63784,13385],{"class":97},[87,63786,55385],{"class":171},[87,63788,55388],{"class":97},[87,63790,63791,63793,63795],{"class":89,"line":33840},[87,63792,63759],{"class":97},[87,63794,946],{"class":171},[87,63796,48280],{"class":104},[87,63798,63799],{"class":89,"line":33851},[87,63800,34408],{"class":97},[87,63802,63803],{"class":89,"line":33857},[87,63804,63805],{"class":199},"    \u002F\u002F 3. 检测用户输入\n",[87,63807,63808,63810,63812,63814,63817,63819,63821],{"class":89,"line":33876},[87,63809,63742],{"class":97},[87,63811,58749],{"class":205},[87,63813,165],{"class":97},[87,63815,63816],{"class":949},"'input'",[87,63818,13385],{"class":97},[87,63820,55385],{"class":171},[87,63822,55388],{"class":97},[87,63824,63825],{"class":89,"line":33882},[87,63826,63827],{"class":199},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[87,63829,63830,63833,63835,63838,63841,63843,63846,63848,63850],{"class":89,"line":33893},[87,63831,63832],{"class":97},"      total.innerHTML ",[87,63834,946],{"class":171},[87,63836,63837],{"class":949}," `${",[87,63839,63840],{"class":97},"tx",[87,63842,1651],{"class":949},[87,63844,63845],{"class":97},"value",[87,63847,1651],{"class":949},[87,63849,52905],{"class":104},[87,63851,63852],{"class":949},"}\u002F200字`\n",[87,63854,63855],{"class":89,"line":33899},[87,63856,34408],{"class":97},[87,63858,63859],{"class":89,"line":33919},[87,63860,3355],{"emptyLinePlaceholder":1029},[87,63862,63863],{"class":89,"line":33935},[87,63864,63865],{"class":199},"    \u002F\u002F const str = 'andy'\n",[87,63867,63868],{"class":89,"line":33941},[87,63869,63870],{"class":199},"    \u002F\u002F console.log(str.length)\n",[87,63872,63873,63875,63877],{"class":89,"line":33955},[87,63874,53354],{"class":97},[87,63876,52750],{"class":93},[87,63878,953],{"class":97},[87,63880,63881,63883,63885],{"class":89,"line":33961},[87,63882,963],{"class":97},[87,63884,52737],{"class":93},[87,63886,953],{"class":97},[87,63888,63889],{"class":89,"line":33967},[87,63890,3355],{"emptyLinePlaceholder":1029},[87,63892,63893,63895,63897],{"class":89,"line":33978},[87,63894,963],{"class":97},[87,63896,51581],{"class":93},[87,63898,953],{"class":97},[49,63900,63902],{"id":63901},"_3254-change事件","3.2.5.4 change事件",[19,63904,63905],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63907,63908],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63910,63911],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[77,63913,63915],{"className":51579,"code":63914,"language":51581,"meta":82,"style":82},"\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",[84,63916,63917,63927,63941,63945,63953,63967,63987,63999,64007,64011,64019,64033,64041,64059,64077,64089,64093,64101,64109,64113],{"__ignoreMap":82},[87,63918,63919,63921,63923,63925],{"class":89,"line":90},[87,63920,52243],{"class":97},[87,63922,52246],{"class":93},[87,63924,52249],{"class":205},[87,63926,953],{"class":97},[87,63928,63929,63931,63933,63935,63937,63939],{"class":89,"line":101},[87,63930,938],{"class":97},[87,63932,51581],{"class":93},[87,63934,52260],{"class":205},[87,63936,946],{"class":97},[87,63938,52265],{"class":949},[87,63940,953],{"class":97},[87,63942,63943],{"class":89,"line":120},[87,63944,3355],{"emptyLinePlaceholder":1029},[87,63946,63947,63949,63951],{"class":89,"line":222},[87,63948,938],{"class":97},[87,63950,52278],{"class":93},[87,63952,953],{"class":97},[87,63954,63955,63957,63959,63961,63963,63965],{"class":89,"line":234},[87,63956,53081],{"class":97},[87,63958,52288],{"class":93},[87,63960,52291],{"class":205},[87,63962,946],{"class":97},[87,63964,52296],{"class":949},[87,63966,953],{"class":97},[87,63968,63969,63971,63973,63975,63977,63979,63981,63983,63985],{"class":89,"line":256},[87,63970,53081],{"class":97},[87,63972,52288],{"class":93},[87,63974,15870],{"class":205},[87,63976,946],{"class":97},[87,63978,52335],{"class":949},[87,63980,52315],{"class":205},[87,63982,946],{"class":97},[87,63984,52342],{"class":949},[87,63986,953],{"class":97},[87,63988,63989,63991,63993,63995,63997],{"class":89,"line":269},[87,63990,53081],{"class":97},[87,63992,52351],{"class":93},[87,63994,52354],{"class":97},[87,63996,52351],{"class":93},[87,63998,953],{"class":97},[87,64000,64001,64003,64005],{"class":89,"line":463},[87,64002,963],{"class":97},[87,64004,52278],{"class":93},[87,64006,953],{"class":97},[87,64008,64009],{"class":89,"line":469},[87,64010,3355],{"emptyLinePlaceholder":1029},[87,64012,64013,64015,64017],{"class":89,"line":2287},[87,64014,938],{"class":97},[87,64016,52737],{"class":93},[87,64018,953],{"class":97},[87,64020,64021,64023,64025,64027,64029,64031],{"class":89,"line":2568},[87,64022,53081],{"class":97},[87,64024,54757],{"class":93},[87,64026,54760],{"class":205},[87,64028,946],{"class":97},[87,64030,63633],{"class":949},[87,64032,953],{"class":97},[87,64034,64035,64037,64039],{"class":89,"line":2573},[87,64036,53081],{"class":97},[87,64038,52750],{"class":93},[87,64040,953],{"class":97},[87,64042,64043,64045,64047,64049,64051,64053,64055,64057],{"class":89,"line":2579},[87,64044,12171],{"class":171},[87,64046,61541],{"class":104},[87,64048,14514],{"class":171},[87,64050,55332],{"class":97},[87,64052,55335],{"class":205},[87,64054,165],{"class":97},[87,64056,63816],{"class":949},[87,64058,1108],{"class":97},[87,64060,64061,64064,64066,64068,64071,64073,64075],{"class":89,"line":2584},[87,64062,64063],{"class":97},"    input.",[87,64065,58749],{"class":205},[87,64067,165],{"class":97},[87,64069,64070],{"class":949},"'change'",[87,64072,13385],{"class":97},[87,64074,55385],{"class":171},[87,64076,55388],{"class":97},[87,64078,64079,64081,64083,64085,64087],{"class":89,"line":2598},[87,64080,59180],{"class":97},[87,64082,59183],{"class":205},[87,64084,165],{"class":97},[87,64086,1686],{"class":104},[87,64088,1108],{"class":97},[87,64090,64091],{"class":89,"line":2603},[87,64092,34408],{"class":97},[87,64094,64095,64097,64099],{"class":89,"line":2609},[87,64096,53354],{"class":97},[87,64098,52750],{"class":93},[87,64100,953],{"class":97},[87,64102,64103,64105,64107],{"class":89,"line":2630},[87,64104,963],{"class":97},[87,64106,52737],{"class":93},[87,64108,953],{"class":97},[87,64110,64111],{"class":89,"line":2635},[87,64112,3355],{"emptyLinePlaceholder":1029},[87,64114,64115,64117,64119],{"class":89,"line":2649},[87,64116,963],{"class":97},[87,64118,51581],{"class":93},[87,64120,953],{"class":97},[19,64122,64123],{},"总结：内容发生改变才回去触发",[44,64125,64127],{"id":64126},"_326-事件对象","3.2.6 事件对象",[49,64129,64131],{"id":64130},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,64133,64134],{},[39,64135],{"alt":82,"src":64136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,64138,64139],{},[39,64140],{"alt":82,"src":64141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,64143,64144],{},"点击一次，就输出了事件对象，它是个对象",[19,64146,64147],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,64149,64150],{},[39,64151],{"alt":82,"src":64152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[49,64154,64156],{"id":64155},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,64158,64159],{},[39,64160],{"alt":82,"src":64161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,64163,64164],{},"实现按特殊字符才是实现打印输出效果：",[77,64166,64168],{"className":54004,"code":64167,"language":54006,"meta":82,"style":82},"\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",[84,64169,64170,64178,64183,64197,64205,64210,64215,64220,64225,64230,64235,64240,64245,64250,64254,64258,64266],{"__ignoreMap":82},[87,64171,64172,64174,64176],{"class":89,"line":90},[87,64173,938],{"class":97},[87,64175,52737],{"class":93},[87,64177,953],{"class":97},[87,64179,64180],{"class":89,"line":101},[87,64181,64182],{"class":199},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[87,64184,64185,64187,64189,64191,64193,64195],{"class":89,"line":120},[87,64186,53081],{"class":97},[87,64188,54757],{"class":93},[87,64190,54760],{"class":205},[87,64192,946],{"class":97},[87,64194,63633],{"class":949},[87,64196,953],{"class":97},[87,64198,64199,64201,64203],{"class":89,"line":222},[87,64200,53081],{"class":97},[87,64202,52750],{"class":93},[87,64204,953],{"class":97},[87,64206,64207],{"class":89,"line":234},[87,64208,64209],{"class":97},"    \u002F\u002F const btn = document.querySelector('button')\n",[87,64211,64212],{"class":89,"line":256},[87,64213,64214],{"class":97},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[87,64216,64217],{"class":89,"line":269},[87,64218,64219],{"class":97},"    \u002F\u002F   console.log(e);\n",[87,64221,64222],{"class":89,"line":463},[87,64223,64224],{"class":97},"    \u002F\u002F })\n",[87,64226,64227],{"class":89,"line":469},[87,64228,64229],{"class":97},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[87,64231,64232],{"class":89,"line":2287},[87,64233,64234],{"class":97},"    const input = document.querySelector('input')\n",[87,64236,64237],{"class":89,"line":2568},[87,64238,64239],{"class":97},"    input.addEventListener('keyup', function (e) {\n",[87,64241,64242],{"class":89,"line":2573},[87,64243,64244],{"class":97},"      if (e.key === 'Enter') {\n",[87,64246,64247],{"class":89,"line":2579},[87,64248,64249],{"class":97},"        console.log('我按下了回车键')\n",[87,64251,64252],{"class":89,"line":2584},[87,64253,53335],{"class":97},[87,64255,64256],{"class":89,"line":2598},[87,64257,34408],{"class":97},[87,64259,64260,64262,64264],{"class":89,"line":2603},[87,64261,53354],{"class":97},[87,64263,52750],{"class":93},[87,64265,953],{"class":97},[87,64267,64268,64270,64272],{"class":89,"line":2609},[87,64269,963],{"class":97},[87,64271,52737],{"class":93},[87,64273,953],{"class":97},[49,64275,64277],{"id":64276},"_3263-trim方法","3.2.6.3 trim方法",[19,64279,64280],{},[39,64281],{"alt":82,"src":64282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,64284,64285],{},[39,64286],{"alt":82,"src":64287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,64289,64290],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,64292,64293],{},"str.trim()",[44,64295,64297],{"id":64296},"_327-环境对象","3.2.7 环境对象",[19,64299,64300],{},[39,64301],{"alt":82,"src":64302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,64304,64305],{},[39,64306],{"alt":82,"src":64307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,64309,64310],{},[39,64311],{"alt":82,"src":64312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,64314,64315],{},"实际函数调用是window.fn()",[19,64317,64318],{},"普通函数里面this指向的是window",[26,64320,64321,64324,64327],{},[29,64322,64323],{},"在普通函数下，this指向的是window",[29,64325,64326],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[29,64328,64329],{},"箭头函数没有this",[19,64331,64332],{},"粗略记法就是：谁调用，this就指向谁",[19,64334,64335],{},[39,64336],{"alt":82,"src":64337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,64339,64340],{},[39,64341],{"alt":82,"src":64342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,64344,64345],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,64347,64348],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[77,64350,64352],{"className":54004,"code":64351,"language":54006,"meta":82,"style":82},"\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",[84,64353,64354,64362,64374,64382,64387,64392,64397,64402,64406,64414],{"__ignoreMap":82},[87,64355,64356,64358,64360],{"class":89,"line":90},[87,64357,938],{"class":97},[87,64359,52737],{"class":93},[87,64361,953],{"class":97},[87,64363,64364,64366,64368,64370,64372],{"class":89,"line":101},[87,64365,53081],{"class":97},[87,64367,54823],{"class":93},[87,64369,54829],{"class":97},[87,64371,54823],{"class":93},[87,64373,953],{"class":97},[87,64375,64376,64378,64380],{"class":89,"line":120},[87,64377,53081],{"class":97},[87,64379,52750],{"class":93},[87,64381,953],{"class":97},[87,64383,64384],{"class":89,"line":222},[87,64385,64386],{"class":97},"    const button = document.querySelector('button')\n",[87,64388,64389],{"class":89,"line":234},[87,64390,64391],{"class":97},"    button.addEventListener('click', function () {\n",[87,64393,64394],{"class":89,"line":256},[87,64395,64396],{"class":97},"      \u002F\u002F console.log(this);\n",[87,64398,64399],{"class":89,"line":269},[87,64400,64401],{"class":97},"      this.style.color = 'pink'\n",[87,64403,64404],{"class":89,"line":463},[87,64405,34408],{"class":97},[87,64407,64408,64410,64412],{"class":89,"line":469},[87,64409,53354],{"class":97},[87,64411,52750],{"class":93},[87,64413,953],{"class":97},[87,64415,64416,64418,64420],{"class":89,"line":2287},[87,64417,963],{"class":97},[87,64419,52737],{"class":93},[87,64421,953],{"class":97},[44,64423,64425],{"id":64424},"_328-回调函数","3.2.8 回调函数",[19,64427,64428],{},[39,64429],{"alt":82,"src":64430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,64432,64433],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,64435,12282],{},[26,64437,64438,64441,64444],{},[29,64439,64440],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[29,64442,64443],{},"回调函数本质还是函数，只不过把它当成参数使用",[29,64445,64446],{},"使用匿名函数做为回调函数比较常见",[44,64448,64450],{"id":64449},"_329-tab栏切换","3.2.9 tab栏切换",[19,64452,64453],{},[39,64454],{"alt":82,"src":64455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[77,64457,64459],{"className":51579,"code":64458,"language":51581,"meta":82,"style":82},"\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",[84,64460,64461,64471,64485,64489,64497,64511,64531,64551,64564,64572,64578,64588,64598,64602,64606,64613,64626,64639,64651,64667,64671,64675,64682,64694,64706,64718,64728,64738,64742,64746,64755,64767,64778,64790,64794,64798,64806,64816,64826,64836,64840,64844,64854,64868,64880,64884,64888,64900,64911,64927,64937,64941,64945,64960,64971,64981,64985,64989,64996,65011,65015,65019,65027,65037,65041,65045,65054,65064,65068,65076,65084,65088,65096,65111,65126,65139,65147,65181,65208,65235,65262,65289,65297,65305,65320,65357,65392,65427,65462,65497,65505,65513,65521,65526,65531,65551,65556,65585,65590,65595,65613,65618,65623,65628,65650,65655,65671,65675,65680,65685,65706,65711,65740,65744,65749,65753,65761,65769,65773],{"__ignoreMap":82},[87,64462,64463,64465,64467,64469],{"class":89,"line":90},[87,64464,52243],{"class":97},[87,64466,52246],{"class":93},[87,64468,52249],{"class":205},[87,64470,953],{"class":97},[87,64472,64473,64475,64477,64479,64481,64483],{"class":89,"line":101},[87,64474,938],{"class":97},[87,64476,51581],{"class":93},[87,64478,52260],{"class":205},[87,64480,946],{"class":97},[87,64482,52265],{"class":949},[87,64484,953],{"class":97},[87,64486,64487],{"class":89,"line":120},[87,64488,3355],{"emptyLinePlaceholder":1029},[87,64490,64491,64493,64495],{"class":89,"line":222},[87,64492,938],{"class":97},[87,64494,52278],{"class":93},[87,64496,953],{"class":97},[87,64498,64499,64501,64503,64505,64507,64509],{"class":89,"line":234},[87,64500,53081],{"class":97},[87,64502,52288],{"class":93},[87,64504,52291],{"class":205},[87,64506,946],{"class":97},[87,64508,52296],{"class":949},[87,64510,60063],{"class":97},[87,64512,64513,64515,64517,64519,64521,64523,64525,64527,64529],{"class":89,"line":256},[87,64514,53081],{"class":97},[87,64516,52288],{"class":93},[87,64518,52307],{"class":205},[87,64520,946],{"class":97},[87,64522,52312],{"class":949},[87,64524,52315],{"class":205},[87,64526,946],{"class":97},[87,64528,52320],{"class":949},[87,64530,60063],{"class":97},[87,64532,64533,64535,64537,64539,64541,64543,64545,64547,64549],{"class":89,"line":269},[87,64534,53081],{"class":97},[87,64536,52288],{"class":93},[87,64538,15870],{"class":205},[87,64540,946],{"class":97},[87,64542,52335],{"class":949},[87,64544,52315],{"class":205},[87,64546,946],{"class":97},[87,64548,52342],{"class":949},[87,64550,60063],{"class":97},[87,64552,64553,64555,64557,64560,64562],{"class":89,"line":463},[87,64554,53081],{"class":97},[87,64556,52351],{"class":93},[87,64558,64559],{"class":97},">tab栏切换\u003C\u002F",[87,64561,52351],{"class":93},[87,64563,953],{"class":97},[87,64565,64566,64568,64570],{"class":89,"line":469},[87,64567,53081],{"class":97},[87,64569,1006],{"class":93},[87,64571,953],{"class":97},[87,64573,64574,64576],{"class":89,"line":2287},[87,64575,7353],{"class":93},[87,64577,98],{"class":97},[87,64579,64580,64582,64584,64586],{"class":89,"line":2568},[87,64581,55642],{"class":104},[87,64583,108],{"class":97},[87,64585,111],{"class":104},[87,64587,117],{"class":97},[87,64589,64590,64592,64594,64596],{"class":89,"line":2573},[87,64591,55631],{"class":104},[87,64593,108],{"class":97},[87,64595,111],{"class":104},[87,64597,117],{"class":97},[87,64599,64600],{"class":89,"line":2579},[87,64601,3142],{"class":97},[87,64603,64604],{"class":89,"line":2584},[87,64605,3355],{"emptyLinePlaceholder":1029},[87,64607,64608,64611],{"class":89,"line":2598},[87,64609,64610],{"class":205},"    .tab",[87,64612,98],{"class":97},[87,64614,64615,64617,64619,64622,64624],{"class":89,"line":2603},[87,64616,55707],{"class":104},[87,64618,108],{"class":97},[87,64620,64621],{"class":104},"590",[87,64623,245],{"class":171},[87,64625,117],{"class":97},[87,64627,64628,64630,64632,64635,64637],{"class":89,"line":2609},[87,64629,55721],{"class":104},[87,64631,108],{"class":97},[87,64633,64634],{"class":104},"340",[87,64636,245],{"class":171},[87,64638,117],{"class":97},[87,64640,64641,64643,64645,64647,64649],{"class":89,"line":2630},[87,64642,55642],{"class":104},[87,64644,108],{"class":97},[87,64646,1792],{"class":104},[87,64648,245],{"class":171},[87,64650,117],{"class":97},[87,64652,64653,64655,64657,64659,64661,64663,64665],{"class":89,"line":2635},[87,64654,62912],{"class":104},[87,64656,108],{"class":97},[87,64658,1313],{"class":104},[87,64660,245],{"class":171},[87,64662,248],{"class":104},[87,64664,63179],{"class":104},[87,64666,117],{"class":97},[87,64668,64669],{"class":89,"line":2649},[87,64670,3142],{"class":97},[87,64672,64673],{"class":89,"line":2654},[87,64674,3355],{"emptyLinePlaceholder":1029},[87,64676,64677,64680],{"class":89,"line":2683},[87,64678,64679],{"class":205},"    .tab-nav",[87,64681,98],{"class":97},[87,64683,64684,64686,64688,64690,64692],{"class":89,"line":2688},[87,64685,55707],{"class":104},[87,64687,108],{"class":97},[87,64689,536],{"class":104},[87,64691,1423],{"class":171},[87,64693,117],{"class":97},[87,64695,64696,64698,64700,64702,64704],{"class":89,"line":2705},[87,64697,55721],{"class":104},[87,64699,108],{"class":97},[87,64701,1999],{"class":104},[87,64703,245],{"class":171},[87,64705,117],{"class":97},[87,64707,64708,64710,64712,64714,64716],{"class":89,"line":2710},[87,64709,58295],{"class":104},[87,64711,108],{"class":97},[87,64713,1999],{"class":104},[87,64715,245],{"class":171},[87,64717,117],{"class":97},[87,64719,64720,64722,64724,64726],{"class":89,"line":2715},[87,64721,55945],{"class":104},[87,64723,108],{"class":97},[87,64725,52420],{"class":104},[87,64727,117],{"class":97},[87,64729,64730,64732,64734,64736],{"class":89,"line":2720},[87,64731,55956],{"class":104},[87,64733,108],{"class":97},[87,64735,52606],{"class":104},[87,64737,117],{"class":97},[87,64739,64740],{"class":89,"line":2734},[87,64741,3142],{"class":97},[87,64743,64744],{"class":89,"line":2739},[87,64745,3355],{"emptyLinePlaceholder":1029},[87,64747,64748,64750,64753],{"class":89,"line":3532},[87,64749,64679],{"class":205},[87,64751,64752],{"class":93}," h3",[87,64754,98],{"class":97},[87,64756,64757,64759,64761,64763,64765],{"class":89,"line":3546},[87,64758,55858],{"class":104},[87,64760,108],{"class":97},[87,64762,1892],{"class":104},[87,64764,245],{"class":171},[87,64766,117],{"class":97},[87,64768,64769,64771,64773,64776],{"class":89,"line":3554},[87,64770,63269],{"class":104},[87,64772,108],{"class":97},[87,64774,64775],{"class":104},"normal",[87,64777,117],{"class":97},[87,64779,64780,64782,64784,64786,64788],{"class":89,"line":3559},[87,64781,62935],{"class":104},[87,64783,108],{"class":97},[87,64785,1792],{"class":104},[87,64787,245],{"class":171},[87,64789,117],{"class":97},[87,64791,64792],{"class":89,"line":3565},[87,64793,3142],{"class":97},[87,64795,64796],{"class":89,"line":3571},[87,64797,3355],{"emptyLinePlaceholder":1029},[87,64799,64800,64802,64804],{"class":89,"line":3576},[87,64801,64679],{"class":205},[87,64803,62228],{"class":93},[87,64805,98],{"class":97},[87,64807,64808,64810,64812,64814],{"class":89,"line":8898},[87,64809,55668],{"class":104},[87,64811,108],{"class":97},[87,64813,55673],{"class":104},[87,64815,117],{"class":97},[87,64817,64818,64820,64822,64824],{"class":89,"line":8922},[87,64819,55945],{"class":104},[87,64821,108],{"class":97},[87,64823,52420],{"class":104},[87,64825,117],{"class":97},[87,64827,64828,64830,64832,64834],{"class":89,"line":8927},[87,64829,55956],{"class":104},[87,64831,108],{"class":97},[87,64833,52520],{"class":104},[87,64835,117],{"class":97},[87,64837,64838],{"class":89,"line":8933},[87,64839,3142],{"class":97},[87,64841,64842],{"class":89,"line":8960},[87,64843,3355],{"emptyLinePlaceholder":1029},[87,64845,64846,64848,64850,64852],{"class":89,"line":8965},[87,64847,64679],{"class":205},[87,64849,62228],{"class":93},[87,64851,56011],{"class":93},[87,64853,98],{"class":97},[87,64855,64856,64858,64860,64862,64864,64866],{"class":89,"line":8971},[87,64857,55642],{"class":104},[87,64859,108],{"class":97},[87,64861,111],{"class":104},[87,64863,9900],{"class":104},[87,64865,245],{"class":171},[87,64867,117],{"class":97},[87,64869,64870,64872,64874,64876,64878],{"class":89,"line":8983},[87,64871,55858],{"class":104},[87,64873,108],{"class":97},[87,64875,1642],{"class":104},[87,64877,245],{"class":171},[87,64879,117],{"class":97},[87,64881,64882],{"class":89,"line":8995},[87,64883,3142],{"class":97},[87,64885,64886],{"class":89,"line":9007},[87,64887,3355],{"emptyLinePlaceholder":1029},[87,64889,64890,64892,64894,64896,64898],{"class":89,"line":10666},[87,64891,64679],{"class":205},[87,64893,62228],{"class":93},[87,64895,56011],{"class":93},[87,64897,2356],{"class":93},[87,64899,98],{"class":97},[87,64901,64902,64905,64907,64909],{"class":89,"line":10691},[87,64903,64904],{"class":104},"      text-decoration",[87,64906,108],{"class":97},[87,64908,55673],{"class":104},[87,64910,117],{"class":97},[87,64912,64913,64915,64917,64919,64921,64923,64925],{"class":89,"line":10714},[87,64914,63167],{"class":104},[87,64916,108],{"class":97},[87,64918,1176],{"class":104},[87,64920,245],{"class":171},[87,64922,248],{"class":104},[87,64924,251],{"class":104},[87,64926,117],{"class":97},[87,64928,64929,64931,64933,64935],{"class":89,"line":10738},[87,64930,58352],{"class":104},[87,64932,108],{"class":97},[87,64934,264],{"class":104},[87,64936,117],{"class":97},[87,64938,64939],{"class":89,"line":10743},[87,64940,3142],{"class":97},[87,64942,64943],{"class":89,"line":10748},[87,64944,3355],{"emptyLinePlaceholder":1029},[87,64946,64947,64949,64951,64953,64955,64958],{"class":89,"line":10753},[87,64948,64679],{"class":205},[87,64950,62228],{"class":93},[87,64952,56011],{"class":93},[87,64954,2356],{"class":93},[87,64956,64957],{"class":205},".active",[87,64959,98],{"class":97},[87,64961,64962,64964,64966,64969],{"class":89,"line":10762},[87,64963,62726],{"class":104},[87,64965,108],{"class":97},[87,64967,64968],{"class":104},"#e1251b",[87,64970,117],{"class":97},[87,64972,64973,64975,64977,64979],{"class":89,"line":10767},[87,64974,58352],{"class":104},[87,64976,108],{"class":97},[87,64978,64968],{"class":104},[87,64980,117],{"class":97},[87,64982,64983],{"class":89,"line":10773},[87,64984,3142],{"class":97},[87,64986,64987],{"class":89,"line":10794},[87,64988,3355],{"emptyLinePlaceholder":1029},[87,64990,64991,64994],{"class":89,"line":10800},[87,64992,64993],{"class":205},"    .tab-content",[87,64995,98],{"class":97},[87,64997,64998,65000,65002,65004,65007,65009],{"class":89,"line":10814},[87,64999,55631],{"class":104},[87,65001,108],{"class":97},[87,65003,111],{"class":104},[87,65005,65006],{"class":104}," 16",[87,65008,245],{"class":171},[87,65010,117],{"class":97},[87,65012,65013],{"class":89,"line":10820},[87,65014,3142],{"class":97},[87,65016,65017],{"class":89,"line":10847},[87,65018,3355],{"emptyLinePlaceholder":1029},[87,65020,65021,65023,65025],{"class":89,"line":10856},[87,65022,64993],{"class":205},[87,65024,63109],{"class":205},[87,65026,98],{"class":97},[87,65028,65029,65031,65033,65035],{"class":89,"line":10862},[87,65030,55945],{"class":104},[87,65032,108],{"class":97},[87,65034,55673],{"class":104},[87,65036,117],{"class":97},[87,65038,65039],{"class":89,"line":10870},[87,65040,3142],{"class":97},[87,65042,65043],{"class":89,"line":10875},[87,65044,3355],{"emptyLinePlaceholder":1029},[87,65046,65047,65049,65052],{"class":89,"line":17553},[87,65048,64993],{"class":205},[87,65050,65051],{"class":205}," .item.active",[87,65053,98],{"class":97},[87,65055,65056,65058,65060,65062],{"class":89,"line":17559},[87,65057,55945],{"class":104},[87,65059,108],{"class":97},[87,65061,61805],{"class":104},[87,65063,117],{"class":97},[87,65065,65066],{"class":89,"line":17582},[87,65067,3142],{"class":97},[87,65069,65070,65072,65074],{"class":89,"line":17588},[87,65071,53354],{"class":97},[87,65073,1006],{"class":93},[87,65075,953],{"class":97},[87,65077,65078,65080,65082],{"class":89,"line":17611},[87,65079,963],{"class":97},[87,65081,52278],{"class":93},[87,65083,953],{"class":97},[87,65085,65086],{"class":89,"line":17625},[87,65087,3355],{"emptyLinePlaceholder":1029},[87,65089,65090,65092,65094],{"class":89,"line":17645},[87,65091,938],{"class":97},[87,65093,52737],{"class":93},[87,65095,953],{"class":97},[87,65097,65098,65100,65102,65104,65106,65109],{"class":89,"line":17651},[87,65099,53081],{"class":97},[87,65101,94],{"class":93},[87,65103,943],{"class":205},[87,65105,946],{"class":97},[87,65107,65108],{"class":949},"\"tab\"",[87,65110,953],{"class":97},[87,65112,65113,65115,65117,65119,65121,65124],{"class":89,"line":17662},[87,65114,52285],{"class":97},[87,65116,94],{"class":93},[87,65118,943],{"class":205},[87,65120,946],{"class":97},[87,65122,65123],{"class":949},"\"tab-nav\"",[87,65125,953],{"class":97},[87,65127,65128,65130,65132,65135,65137],{"class":89,"line":17685},[87,65129,56170],{"class":97},[87,65131,44],{"class":93},[87,65133,65134],{"class":97},">每日特价\u003C\u002F",[87,65136,44],{"class":93},[87,65138,953],{"class":97},[87,65140,65141,65143,65145],{"class":89,"line":17707},[87,65142,56170],{"class":97},[87,65144,26],{"class":93},[87,65146,953],{"class":97},[87,65148,65149,65151,65153,65155,65157,65159,65161,65163,65165,65167,65170,65173,65175,65177,65179],{"class":89,"line":17712},[87,65150,56238],{"class":97},[87,65152,29],{"class":93},[87,65154,61988],{"class":97},[87,65156,1334],{"class":93},[87,65158,943],{"class":205},[87,65160,946],{"class":97},[87,65162,60642],{"class":949},[87,65164,61993],{"class":205},[87,65166,946],{"class":97},[87,65168,65169],{"class":949},"\"javascript:;\"",[87,65171,65172],{"class":97},">精选\u003C\u002F",[87,65174,1334],{"class":93},[87,65176,56250],{"class":97},[87,65178,29],{"class":93},[87,65180,953],{"class":97},[87,65182,65183,65185,65187,65189,65191,65193,65195,65197,65200,65202,65204,65206],{"class":89,"line":17718},[87,65184,56238],{"class":97},[87,65186,29],{"class":93},[87,65188,61988],{"class":97},[87,65190,1334],{"class":93},[87,65192,61993],{"class":205},[87,65194,946],{"class":97},[87,65196,65169],{"class":949},[87,65198,65199],{"class":97},">美食\u003C\u002F",[87,65201,1334],{"class":93},[87,65203,56250],{"class":97},[87,65205,29],{"class":93},[87,65207,953],{"class":97},[87,65209,65210,65212,65214,65216,65218,65220,65222,65224,65227,65229,65231,65233],{"class":89,"line":17732},[87,65211,56238],{"class":97},[87,65213,29],{"class":93},[87,65215,61988],{"class":97},[87,65217,1334],{"class":93},[87,65219,61993],{"class":205},[87,65221,946],{"class":97},[87,65223,65169],{"class":949},[87,65225,65226],{"class":97},">百货\u003C\u002F",[87,65228,1334],{"class":93},[87,65230,56250],{"class":97},[87,65232,29],{"class":93},[87,65234,953],{"class":97},[87,65236,65237,65239,65241,65243,65245,65247,65249,65251,65254,65256,65258,65260],{"class":89,"line":17745},[87,65238,56238],{"class":97},[87,65240,29],{"class":93},[87,65242,61988],{"class":97},[87,65244,1334],{"class":93},[87,65246,61993],{"class":205},[87,65248,946],{"class":97},[87,65250,65169],{"class":949},[87,65252,65253],{"class":97},">个护\u003C\u002F",[87,65255,1334],{"class":93},[87,65257,56250],{"class":97},[87,65259,29],{"class":93},[87,65261,953],{"class":97},[87,65263,65264,65266,65268,65270,65272,65274,65276,65278,65281,65283,65285,65287],{"class":89,"line":17750},[87,65265,56238],{"class":97},[87,65267,29],{"class":93},[87,65269,61988],{"class":97},[87,65271,1334],{"class":93},[87,65273,61993],{"class":205},[87,65275,946],{"class":97},[87,65277,65169],{"class":949},[87,65279,65280],{"class":97},">预告\u003C\u002F",[87,65282,1334],{"class":93},[87,65284,56250],{"class":97},[87,65286,29],{"class":93},[87,65288,953],{"class":97},[87,65290,65291,65293,65295],{"class":89,"line":17764},[87,65292,56343],{"class":97},[87,65294,26],{"class":93},[87,65296,953],{"class":97},[87,65298,65299,65301,65303],{"class":89,"line":17769},[87,65300,52714],{"class":97},[87,65302,94],{"class":93},[87,65304,953],{"class":97},[87,65306,65307,65309,65311,65313,65315,65318],{"class":89,"line":17775},[87,65308,52285],{"class":97},[87,65310,94],{"class":93},[87,65312,943],{"class":205},[87,65314,946],{"class":97},[87,65316,65317],{"class":949},"\"tab-content\"",[87,65319,953],{"class":97},[87,65321,65322,65324,65326,65328,65330,65333,65335,65337,65339,65341,65344,65346,65348,65350,65353,65355],{"class":89,"line":17780},[87,65323,56170],{"class":97},[87,65325,94],{"class":93},[87,65327,943],{"class":205},[87,65329,946],{"class":97},[87,65331,65332],{"class":949},"\"item active\"",[87,65334,61988],{"class":97},[87,65336,39],{"class":93},[87,65338,56175],{"class":205},[87,65340,946],{"class":97},[87,65342,65343],{"class":949},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[87,65345,56183],{"class":205},[87,65347,946],{"class":97},[87,65349,8602],{"class":949},[87,65351,65352],{"class":97}," \u002F>\u003C\u002F",[87,65354,94],{"class":93},[87,65356,953],{"class":97},[87,65358,65359,65361,65363,65365,65367,65369,65371,65373,65375,65377,65380,65382,65384,65386,65388,65390],{"class":89,"line":17794},[87,65360,56170],{"class":97},[87,65362,94],{"class":93},[87,65364,943],{"class":205},[87,65366,946],{"class":97},[87,65368,63557],{"class":949},[87,65370,61988],{"class":97},[87,65372,39],{"class":93},[87,65374,56175],{"class":205},[87,65376,946],{"class":97},[87,65378,65379],{"class":949},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[87,65381,56183],{"class":205},[87,65383,946],{"class":97},[87,65385,8602],{"class":949},[87,65387,65352],{"class":97},[87,65389,94],{"class":93},[87,65391,953],{"class":97},[87,65393,65394,65396,65398,65400,65402,65404,65406,65408,65410,65412,65415,65417,65419,65421,65423,65425],{"class":89,"line":17799},[87,65395,56170],{"class":97},[87,65397,94],{"class":93},[87,65399,943],{"class":205},[87,65401,946],{"class":97},[87,65403,63557],{"class":949},[87,65405,61988],{"class":97},[87,65407,39],{"class":93},[87,65409,56175],{"class":205},[87,65411,946],{"class":97},[87,65413,65414],{"class":949},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[87,65416,56183],{"class":205},[87,65418,946],{"class":97},[87,65420,8602],{"class":949},[87,65422,65352],{"class":97},[87,65424,94],{"class":93},[87,65426,953],{"class":97},[87,65428,65429,65431,65433,65435,65437,65439,65441,65443,65445,65447,65450,65452,65454,65456,65458,65460],{"class":89,"line":17804},[87,65430,56170],{"class":97},[87,65432,94],{"class":93},[87,65434,943],{"class":205},[87,65436,946],{"class":97},[87,65438,63557],{"class":949},[87,65440,61988],{"class":97},[87,65442,39],{"class":93},[87,65444,56175],{"class":205},[87,65446,946],{"class":97},[87,65448,65449],{"class":949},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[87,65451,56183],{"class":205},[87,65453,946],{"class":97},[87,65455,8602],{"class":949},[87,65457,65352],{"class":97},[87,65459,94],{"class":93},[87,65461,953],{"class":97},[87,65463,65464,65466,65468,65470,65472,65474,65476,65478,65480,65482,65485,65487,65489,65491,65493,65495],{"class":89,"line":17818},[87,65465,56170],{"class":97},[87,65467,94],{"class":93},[87,65469,943],{"class":205},[87,65471,946],{"class":97},[87,65473,63557],{"class":949},[87,65475,61988],{"class":97},[87,65477,39],{"class":93},[87,65479,56175],{"class":205},[87,65481,946],{"class":97},[87,65483,65484],{"class":949},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[87,65486,56183],{"class":205},[87,65488,946],{"class":97},[87,65490,8602],{"class":949},[87,65492,65352],{"class":97},[87,65494,94],{"class":93},[87,65496,953],{"class":97},[87,65498,65499,65501,65503],{"class":89,"line":17830},[87,65500,52714],{"class":97},[87,65502,94],{"class":93},[87,65504,953],{"class":97},[87,65506,65507,65509,65511],{"class":89,"line":17835},[87,65508,53354],{"class":97},[87,65510,94],{"class":93},[87,65512,953],{"class":97},[87,65514,65515,65517,65519],{"class":89,"line":17848},[87,65516,53081],{"class":97},[87,65518,52750],{"class":93},[87,65520,953],{"class":97},[87,65522,65523],{"class":89,"line":17853},[87,65524,65525],{"class":199},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[87,65527,65528],{"class":89,"line":17858},[87,65529,65530],{"class":199},"    \u002F\u002F 1.1 获取 a 元素 \n",[87,65532,65533,65535,65538,65540,65542,65544,65546,65549],{"class":89,"line":17863},[87,65534,12171],{"class":171},[87,65536,65537],{"class":104}," as",[87,65539,14514],{"class":171},[87,65541,55332],{"class":97},[87,65543,56617],{"class":205},[87,65545,165],{"class":97},[87,65547,65548],{"class":949},"'.tab-nav a'",[87,65550,1108],{"class":97},[87,65552,65553],{"class":89,"line":17876},[87,65554,65555],{"class":199},"    \u002F\u002F console.log(as) \n",[87,65557,65558,65560,65562,65564,65566,65568,65570,65572,65574,65577,65579,65581,65583],{"class":89,"line":17881},[87,65559,4155],{"class":171},[87,65561,2614],{"class":97},[87,65563,52784],{"class":171},[87,65565,10388],{"class":97},[87,65567,946],{"class":171},[87,65569,577],{"class":104},[87,65571,10395],{"class":97},[87,65573,938],{"class":171},[87,65575,65576],{"class":97}," as.",[87,65578,52905],{"class":104},[87,65580,4168],{"class":97},[87,65582,3247],{"class":171},[87,65584,13392],{"class":97},[87,65586,65587],{"class":89,"line":33580},[87,65588,65589],{"class":199},"      \u002F\u002F console.log(as[i])\n",[87,65591,65592],{"class":89,"line":33586},[87,65593,65594],{"class":199},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[87,65596,65597,65600,65602,65604,65607,65609,65611],{"class":89,"line":33592},[87,65598,65599],{"class":97},"      as[i].",[87,65601,58749],{"class":205},[87,65603,165],{"class":97},[87,65605,65606],{"class":949},"'mouseenter'",[87,65608,13385],{"class":97},[87,65610,55385],{"class":171},[87,65612,55388],{"class":97},[87,65614,65615],{"class":89,"line":33598},[87,65616,65617],{"class":199},"        \u002F\u002F console.log('鼠标经过')\n",[87,65619,65620],{"class":89,"line":33604},[87,65621,65622],{"class":199},"        \u002F\u002F 排他思想  \n",[87,65624,65625],{"class":89,"line":33615},[87,65626,65627],{"class":199},"        \u002F\u002F 干掉别人 移除类active\n",[87,65629,65630,65632,65634,65636,65639,65641,65643,65645,65648],{"class":89,"line":33621},[87,65631,52862],{"class":97},[87,65633,55335],{"class":205},[87,65635,165],{"class":97},[87,65637,65638],{"class":949},"'.tab-nav .active'",[87,65640,57939],{"class":97},[87,65642,57942],{"class":205},[87,65644,165],{"class":97},[87,65646,65647],{"class":949},"'active'",[87,65649,1108],{"class":97},[87,65651,65652],{"class":89,"line":33641},[87,65653,65654],{"class":199},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[87,65656,65657,65660,65663,65665,65667,65669],{"class":89,"line":33647},[87,65658,65659],{"class":104},"        this",[87,65661,65662],{"class":97},".classList.",[87,65664,6284],{"class":205},[87,65666,165],{"class":97},[87,65668,65647],{"class":949},[87,65670,1108],{"class":97},[87,65672,65673],{"class":89,"line":33658},[87,65674,3355],{"emptyLinePlaceholder":1029},[87,65676,65677],{"class":89,"line":33664},[87,65678,65679],{"class":199},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[87,65681,65682],{"class":89,"line":33670},[87,65683,65684],{"class":199},"        \u002F\u002F 干掉别人\n",[87,65686,65687,65689,65691,65693,65696,65698,65700,65702,65704],{"class":89,"line":33676},[87,65688,52862],{"class":97},[87,65690,55335],{"class":205},[87,65692,165],{"class":97},[87,65694,65695],{"class":949},"'.tab-content .active'",[87,65697,57939],{"class":97},[87,65699,57942],{"class":205},[87,65701,165],{"class":97},[87,65703,65647],{"class":949},[87,65705,1108],{"class":97},[87,65707,65708],{"class":89,"line":33682},[87,65709,65710],{"class":199},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[87,65712,65713,65715,65717,65719,65722,65724,65726,65728,65730,65732,65734,65736,65738],{"class":89,"line":33688},[87,65714,52862],{"class":97},[87,65716,55335],{"class":205},[87,65718,165],{"class":97},[87,65720,65721],{"class":949},"`.tab-content .item:nth-child(${",[87,65723,1536],{"class":97},[87,65725,46513],{"class":171},[87,65727,568],{"class":104},[87,65729,57968],{"class":949},[87,65731,57939],{"class":97},[87,65733,6284],{"class":205},[87,65735,165],{"class":97},[87,65737,65647],{"class":949},[87,65739,1108],{"class":97},[87,65741,65742],{"class":89,"line":33694},[87,65743,3355],{"emptyLinePlaceholder":1029},[87,65745,65746],{"class":89,"line":33700},[87,65747,65748],{"class":97},"      })\n",[87,65750,65751],{"class":89,"line":33720},[87,65752,3142],{"class":97},[87,65754,65755,65757,65759],{"class":89,"line":33726},[87,65756,53354],{"class":97},[87,65758,52750],{"class":93},[87,65760,953],{"class":97},[87,65762,65763,65765,65767],{"class":89,"line":33742},[87,65764,963],{"class":97},[87,65766,52737],{"class":93},[87,65768,953],{"class":97},[87,65770,65771],{"class":89,"line":33748},[87,65772,3355],{"emptyLinePlaceholder":1029},[87,65774,65775,65777,65779],{"class":89,"line":33762},[87,65776,963],{"class":97},[87,65778,51581],{"class":93},[87,65780,953],{"class":97},[19,65782,65783],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,65785,65786],{},"在监听事件中，this指向的就是他的调用者",[19,65788,65789],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,65791,54656],{},[19,65793,65794],{},"(function () {",[19,65796,65797],{},"const list = document.querySelector('.xtx-elevator-list')",[19,65799,65800],{},"list.addEventListener('click', function (e) {",[19,65802,65803],{},"if (e.target.tagName === 'A') {",[19,65805,65806],{},"\u002F\u002F 排他思想",[19,65808,65809],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,65811,65812],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,65814,65815],{},"\u002F\u002F console.log(old);",[19,65817,65818],{},"\u002F\u002F 判断",[19,65820,65821],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,65823,65824],{},"if (old) old.classList.remove('active')",[19,65826,65827],{},"e.target.classList.add('active')",[19,65829,2037],{},[19,65831,53401],{},[19,65833,65834],{},"})();",[44,65836,65838],{"id":65837},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[77,65840,65842],{"className":51579,"code":65841,"language":51581,"meta":82,"style":82},"\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",[84,65843,65844,65854,65858,65866,65870,65884,65898,65910,65918,65924,65934,65944,65948,65952,65959,65971,65982,65999,66011,66025,66035,66039,66043,66050,66061,66079,66089,66101,66105,66109,66116,66133,66144,66156,66160,66164,66171,66183,66187,66195,66203,66207,66215,66223,66231,66246,66290,66298,66311,66324,66337,66345,66353,66361,66389,66397,66409,66422,66435,66443,66451,66459,66485,66493,66506,66518,66531,66539,66547,66555,66581,66589,66602,66614,66627,66635,66643,66651,66656,66676,66681,66701,66706,66723,66728,66736,66741,66770,66783,66787,66791,66796,66800,66828,66833,66850,66855,66860,66865,66870,66896,66900,66904,66912,66920,66924],{"__ignoreMap":82},[87,65845,65846,65848,65850,65852],{"class":89,"line":90},[87,65847,52243],{"class":97},[87,65849,52246],{"class":93},[87,65851,52249],{"class":205},[87,65853,953],{"class":97},[87,65855,65856],{"class":89,"line":101},[87,65857,3355],{"emptyLinePlaceholder":1029},[87,65859,65860,65862,65864],{"class":89,"line":120},[87,65861,938],{"class":97},[87,65863,51581],{"class":93},[87,65865,953],{"class":97},[87,65867,65868],{"class":89,"line":222},[87,65869,3355],{"emptyLinePlaceholder":1029},[87,65871,65872,65874,65876,65878,65880,65882],{"class":89,"line":234},[87,65873,938],{"class":97},[87,65875,52278],{"class":93},[87,65877,52260],{"class":205},[87,65879,946],{"class":97},[87,65881,52265],{"class":949},[87,65883,953],{"class":97},[87,65885,65886,65888,65890,65892,65894,65896],{"class":89,"line":256},[87,65887,53081],{"class":97},[87,65889,52288],{"class":93},[87,65891,52291],{"class":205},[87,65893,946],{"class":97},[87,65895,52296],{"class":949},[87,65897,953],{"class":97},[87,65899,65900,65902,65904,65906,65908],{"class":89,"line":269},[87,65901,53081],{"class":97},[87,65903,52351],{"class":93},[87,65905,56250],{"class":97},[87,65907,52351],{"class":93},[87,65909,953],{"class":97},[87,65911,65912,65914,65916],{"class":89,"line":463},[87,65913,53081],{"class":97},[87,65915,1006],{"class":93},[87,65917,953],{"class":97},[87,65919,65920,65922],{"class":89,"line":469},[87,65921,7353],{"class":93},[87,65923,98],{"class":97},[87,65925,65926,65928,65930,65932],{"class":89,"line":2287},[87,65927,55642],{"class":104},[87,65929,108],{"class":97},[87,65931,111],{"class":104},[87,65933,117],{"class":97},[87,65935,65936,65938,65940,65942],{"class":89,"line":2568},[87,65937,55631],{"class":104},[87,65939,108],{"class":97},[87,65941,111],{"class":104},[87,65943,117],{"class":97},[87,65945,65946],{"class":89,"line":2573},[87,65947,3142],{"class":97},[87,65949,65950],{"class":89,"line":2579},[87,65951,3355],{"emptyLinePlaceholder":1029},[87,65953,65954,65957],{"class":89,"line":2584},[87,65955,65956],{"class":93},"    table",[87,65958,98],{"class":97},[87,65960,65961,65964,65966,65969],{"class":89,"line":2598},[87,65962,65963],{"class":104},"      border-collapse",[87,65965,108],{"class":97},[87,65967,65968],{"class":104},"collapse",[87,65970,117],{"class":97},[87,65972,65973,65976,65978,65980],{"class":89,"line":2603},[87,65974,65975],{"class":104},"      border-spacing",[87,65977,108],{"class":97},[87,65979,111],{"class":104},[87,65981,117],{"class":97},[87,65983,65984,65986,65988,65990,65992,65994,65997],{"class":89,"line":2609},[87,65985,62912],{"class":104},[87,65987,108],{"class":97},[87,65989,1313],{"class":104},[87,65991,245],{"class":171},[87,65993,248],{"class":104},[87,65995,65996],{"class":104}," #c0c0c0",[87,65998,117],{"class":97},[87,66000,66001,66003,66005,66007,66009],{"class":89,"line":2630},[87,66002,55707],{"class":104},[87,66004,108],{"class":97},[87,66006,839],{"class":104},[87,66008,245],{"class":171},[87,66010,117],{"class":97},[87,66012,66013,66015,66017,66019,66021,66023],{"class":89,"line":2635},[87,66014,55642],{"class":104},[87,66016,108],{"class":97},[87,66018,536],{"class":104},[87,66020,245],{"class":171},[87,66022,114],{"class":104},[87,66024,117],{"class":97},[87,66026,66027,66029,66031,66033],{"class":89,"line":2649},[87,66028,58222],{"class":104},[87,66030,108],{"class":97},[87,66032,318],{"class":104},[87,66034,117],{"class":97},[87,66036,66037],{"class":89,"line":2654},[87,66038,3142],{"class":97},[87,66040,66041],{"class":89,"line":2683},[87,66042,3355],{"emptyLinePlaceholder":1029},[87,66044,66045,66048],{"class":89,"line":2688},[87,66046,66047],{"class":93},"    th",[87,66049,98],{"class":97},[87,66051,66052,66054,66056,66059],{"class":89,"line":2705},[87,66053,55820],{"class":104},[87,66055,108],{"class":97},[87,66057,66058],{"class":104},"#09c",[87,66060,117],{"class":97},[87,66062,66063,66066,66068,66070,66072,66074,66077],{"class":89,"line":2710},[87,66064,66065],{"class":104},"      font",[87,66067,108],{"class":97},[87,66069,63274],{"class":104},[87,66071,65006],{"class":104},[87,66073,245],{"class":171},[87,66075,66076],{"class":949}," \"微软雅黑\"",[87,66078,117],{"class":97},[87,66080,66081,66083,66085,66087],{"class":89,"line":2715},[87,66082,58352],{"class":104},[87,66084,108],{"class":97},[87,66086,61778],{"class":104},[87,66088,117],{"class":97},[87,66090,66091,66093,66095,66097,66099],{"class":89,"line":2720},[87,66092,55721],{"class":104},[87,66094,108],{"class":97},[87,66096,1892],{"class":104},[87,66098,245],{"class":171},[87,66100,117],{"class":97},[87,66102,66103],{"class":89,"line":2734},[87,66104,3142],{"class":97},[87,66106,66107],{"class":89,"line":2739},[87,66108,3355],{"emptyLinePlaceholder":1029},[87,66110,66111,66114],{"class":89,"line":3532},[87,66112,66113],{"class":93},"    td",[87,66115,98],{"class":97},[87,66117,66118,66120,66122,66124,66126,66128,66131],{"class":89,"line":3546},[87,66119,62912],{"class":104},[87,66121,108],{"class":97},[87,66123,1313],{"class":104},[87,66125,245],{"class":171},[87,66127,248],{"class":104},[87,66129,66130],{"class":104}," #d0d0d0",[87,66132,117],{"class":97},[87,66134,66135,66137,66139,66142],{"class":89,"line":3554},[87,66136,58352],{"class":104},[87,66138,108],{"class":97},[87,66140,66141],{"class":104},"#404060",[87,66143,117],{"class":97},[87,66145,66146,66148,66150,66152,66154],{"class":89,"line":3559},[87,66147,55631],{"class":104},[87,66149,108],{"class":97},[87,66151,242],{"class":104},[87,66153,245],{"class":171},[87,66155,117],{"class":97},[87,66157,66158],{"class":89,"line":3565},[87,66159,3142],{"class":97},[87,66161,66162],{"class":89,"line":3571},[87,66163,3355],{"emptyLinePlaceholder":1029},[87,66165,66166,66169],{"class":89,"line":3576},[87,66167,66168],{"class":205},"    .allCheck",[87,66170,98],{"class":97},[87,66172,66173,66175,66177,66179,66181],{"class":89,"line":8898},[87,66174,55707],{"class":104},[87,66176,108],{"class":97},[87,66178,1705],{"class":104},[87,66180,245],{"class":171},[87,66182,117],{"class":97},[87,66184,66185],{"class":89,"line":8922},[87,66186,3142],{"class":97},[87,66188,66189,66191,66193],{"class":89,"line":8927},[87,66190,53354],{"class":97},[87,66192,1006],{"class":93},[87,66194,953],{"class":97},[87,66196,66197,66199,66201],{"class":89,"line":8933},[87,66198,963],{"class":97},[87,66200,52278],{"class":93},[87,66202,953],{"class":97},[87,66204,66205],{"class":89,"line":8960},[87,66206,3355],{"emptyLinePlaceholder":1029},[87,66208,66209,66211,66213],{"class":89,"line":8965},[87,66210,938],{"class":97},[87,66212,52737],{"class":93},[87,66214,953],{"class":97},[87,66216,66217,66219,66221],{"class":89,"line":8971},[87,66218,53081],{"class":97},[87,66220,1235],{"class":93},[87,66222,953],{"class":97},[87,66224,66225,66227,66229],{"class":89,"line":8983},[87,66226,52285],{"class":97},[87,66228,1241],{"class":93},[87,66230,953],{"class":97},[87,66232,66233,66235,66237,66239,66241,66244],{"class":89,"line":8995},[87,66234,56170],{"class":97},[87,66236,1244],{"class":93},[87,66238,943],{"class":205},[87,66240,946],{"class":97},[87,66242,66243],{"class":949},"\"allCheck\"",[87,66245,953],{"class":97},[87,66247,66248,66250,66252,66254,66256,66258,66260,66262,66264,66266,66268,66271,66274,66276,66278,66280,66283,66286,66288],{"class":89,"line":9007},[87,66249,56238],{"class":97},[87,66251,54757],{"class":93},[87,66253,54760],{"class":205},[87,66255,946],{"class":97},[87,66257,54765],{"class":949},[87,66259,15870],{"class":205},[87,66261,946],{"class":97},[87,66263,8602],{"class":949},[87,66265,15909],{"class":205},[87,66267,946],{"class":97},[87,66269,66270],{"class":949},"\"checkAll\"",[87,66272,66273],{"class":97},"> \u003C",[87,66275,87],{"class":93},[87,66277,943],{"class":205},[87,66279,946],{"class":97},[87,66281,66282],{"class":949},"\"all\"",[87,66284,66285],{"class":97},">全选\u003C\u002F",[87,66287,87],{"class":93},[87,66289,953],{"class":97},[87,66291,66292,66294,66296],{"class":89,"line":10666},[87,66293,56343],{"class":97},[87,66295,1244],{"class":93},[87,66297,953],{"class":97},[87,66299,66300,66302,66304,66307,66309],{"class":89,"line":10691},[87,66301,56170],{"class":97},[87,66303,1244],{"class":93},[87,66305,66306],{"class":97},">商品\u003C\u002F",[87,66308,1244],{"class":93},[87,66310,953],{"class":97},[87,66312,66313,66315,66317,66320,66322],{"class":89,"line":10714},[87,66314,56170],{"class":97},[87,66316,1244],{"class":93},[87,66318,66319],{"class":97},">商家\u003C\u002F",[87,66321,1244],{"class":93},[87,66323,953],{"class":97},[87,66325,66326,66328,66330,66333,66335],{"class":89,"line":10738},[87,66327,56170],{"class":97},[87,66329,1244],{"class":93},[87,66331,66332],{"class":97},">价格\u003C\u002F",[87,66334,1244],{"class":93},[87,66336,953],{"class":97},[87,66338,66339,66341,66343],{"class":89,"line":10743},[87,66340,52714],{"class":97},[87,66342,1241],{"class":93},[87,66344,953],{"class":97},[87,66346,66347,66349,66351],{"class":89,"line":10748},[87,66348,52285],{"class":97},[87,66350,1241],{"class":93},[87,66352,953],{"class":97},[87,66354,66355,66357,66359],{"class":89,"line":10753},[87,66356,56170],{"class":97},[87,66358,1286],{"class":93},[87,66360,953],{"class":97},[87,66362,66363,66365,66367,66369,66371,66373,66375,66377,66380,66382,66384,66387],{"class":89,"line":10762},[87,66364,56238],{"class":97},[87,66366,54757],{"class":93},[87,66368,54760],{"class":205},[87,66370,946],{"class":97},[87,66372,54765],{"class":949},[87,66374,15870],{"class":205},[87,66376,946],{"class":97},[87,66378,66379],{"class":949},"\"check\"",[87,66381,943],{"class":205},[87,66383,946],{"class":97},[87,66385,66386],{"class":949},"\"ck\"",[87,66388,953],{"class":97},[87,66390,66391,66393,66395],{"class":89,"line":10767},[87,66392,56343],{"class":97},[87,66394,1286],{"class":93},[87,66396,953],{"class":97},[87,66398,66399,66401,66403,66405,66407],{"class":89,"line":10773},[87,66400,56170],{"class":97},[87,66402,1286],{"class":93},[87,66404,62109],{"class":97},[87,66406,1286],{"class":93},[87,66408,953],{"class":97},[87,66410,66411,66413,66415,66418,66420],{"class":89,"line":10794},[87,66412,56170],{"class":97},[87,66414,1286],{"class":93},[87,66416,66417],{"class":97},">小米\u003C\u002F",[87,66419,1286],{"class":93},[87,66421,953],{"class":97},[87,66423,66424,66426,66428,66431,66433],{"class":89,"line":10800},[87,66425,56170],{"class":97},[87,66427,1286],{"class":93},[87,66429,66430],{"class":97},">￥1999\u003C\u002F",[87,66432,1286],{"class":93},[87,66434,953],{"class":97},[87,66436,66437,66439,66441],{"class":89,"line":10814},[87,66438,52714],{"class":97},[87,66440,1241],{"class":93},[87,66442,953],{"class":97},[87,66444,66445,66447,66449],{"class":89,"line":10820},[87,66446,52285],{"class":97},[87,66448,1241],{"class":93},[87,66450,953],{"class":97},[87,66452,66453,66455,66457],{"class":89,"line":10847},[87,66454,56170],{"class":97},[87,66456,1286],{"class":93},[87,66458,953],{"class":97},[87,66460,66461,66463,66465,66467,66469,66471,66473,66475,66477,66479,66481,66483],{"class":89,"line":10856},[87,66462,56238],{"class":97},[87,66464,54757],{"class":93},[87,66466,54760],{"class":205},[87,66468,946],{"class":97},[87,66470,54765],{"class":949},[87,66472,15870],{"class":205},[87,66474,946],{"class":97},[87,66476,66379],{"class":949},[87,66478,943],{"class":205},[87,66480,946],{"class":97},[87,66482,66386],{"class":949},[87,66484,953],{"class":97},[87,66486,66487,66489,66491],{"class":89,"line":10862},[87,66488,56343],{"class":97},[87,66490,1286],{"class":93},[87,66492,953],{"class":97},[87,66494,66495,66497,66499,66502,66504],{"class":89,"line":10870},[87,66496,56170],{"class":97},[87,66498,1286],{"class":93},[87,66500,66501],{"class":97},">小米净水器\u003C\u002F",[87,66503,1286],{"class":93},[87,66505,953],{"class":97},[87,66507,66508,66510,66512,66514,66516],{"class":89,"line":10875},[87,66509,56170],{"class":97},[87,66511,1286],{"class":93},[87,66513,66417],{"class":97},[87,66515,1286],{"class":93},[87,66517,953],{"class":97},[87,66519,66520,66522,66524,66527,66529],{"class":89,"line":17553},[87,66521,56170],{"class":97},[87,66523,1286],{"class":93},[87,66525,66526],{"class":97},">￥4999\u003C\u002F",[87,66528,1286],{"class":93},[87,66530,953],{"class":97},[87,66532,66533,66535,66537],{"class":89,"line":17559},[87,66534,52714],{"class":97},[87,66536,1241],{"class":93},[87,66538,953],{"class":97},[87,66540,66541,66543,66545],{"class":89,"line":17582},[87,66542,52285],{"class":97},[87,66544,1241],{"class":93},[87,66546,953],{"class":97},[87,66548,66549,66551,66553],{"class":89,"line":17588},[87,66550,56170],{"class":97},[87,66552,1286],{"class":93},[87,66554,953],{"class":97},[87,66556,66557,66559,66561,66563,66565,66567,66569,66571,66573,66575,66577,66579],{"class":89,"line":17611},[87,66558,56238],{"class":97},[87,66560,54757],{"class":93},[87,66562,54760],{"class":205},[87,66564,946],{"class":97},[87,66566,54765],{"class":949},[87,66568,15870],{"class":205},[87,66570,946],{"class":97},[87,66572,66379],{"class":949},[87,66574,943],{"class":205},[87,66576,946],{"class":97},[87,66578,66386],{"class":949},[87,66580,953],{"class":97},[87,66582,66583,66585,66587],{"class":89,"line":17625},[87,66584,56343],{"class":97},[87,66586,1286],{"class":93},[87,66588,953],{"class":97},[87,66590,66591,66593,66595,66598,66600],{"class":89,"line":17645},[87,66592,56170],{"class":97},[87,66594,1286],{"class":93},[87,66596,66597],{"class":97},">小米电视\u003C\u002F",[87,66599,1286],{"class":93},[87,66601,953],{"class":97},[87,66603,66604,66606,66608,66610,66612],{"class":89,"line":17651},[87,66605,56170],{"class":97},[87,66607,1286],{"class":93},[87,66609,66417],{"class":97},[87,66611,1286],{"class":93},[87,66613,953],{"class":97},[87,66615,66616,66618,66620,66623,66625],{"class":89,"line":17662},[87,66617,56170],{"class":97},[87,66619,1286],{"class":93},[87,66621,66622],{"class":97},">￥5999\u003C\u002F",[87,66624,1286],{"class":93},[87,66626,953],{"class":97},[87,66628,66629,66631,66633],{"class":89,"line":17685},[87,66630,52714],{"class":97},[87,66632,1241],{"class":93},[87,66634,953],{"class":97},[87,66636,66637,66639,66641],{"class":89,"line":17707},[87,66638,53354],{"class":97},[87,66640,1235],{"class":93},[87,66642,953],{"class":97},[87,66644,66645,66647,66649],{"class":89,"line":17712},[87,66646,53081],{"class":97},[87,66648,52750],{"class":93},[87,66650,953],{"class":97},[87,66652,66653],{"class":89,"line":17718},[87,66654,66655],{"class":199},"    \u002F\u002F 1. 获取大复选框\n",[87,66657,66658,66660,66663,66665,66667,66669,66671,66674],{"class":89,"line":17732},[87,66659,12171],{"class":171},[87,66661,66662],{"class":104}," checkAll",[87,66664,14514],{"class":171},[87,66666,55332],{"class":97},[87,66668,55335],{"class":205},[87,66670,165],{"class":97},[87,66672,66673],{"class":949},"'#checkAll'",[87,66675,1108],{"class":97},[87,66677,66678],{"class":89,"line":17745},[87,66679,66680],{"class":199},"    \u002F\u002F 2. 获取所有的小复选框\n",[87,66682,66683,66685,66688,66690,66692,66694,66696,66699],{"class":89,"line":17750},[87,66684,12171],{"class":171},[87,66686,66687],{"class":104}," cks",[87,66689,14514],{"class":171},[87,66691,55332],{"class":97},[87,66693,56617],{"class":205},[87,66695,165],{"class":97},[87,66697,66698],{"class":949},"'.ck'",[87,66700,1108],{"class":97},[87,66702,66703],{"class":89,"line":17764},[87,66704,66705],{"class":199},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[87,66707,66708,66711,66713,66715,66717,66719,66721],{"class":89,"line":17769},[87,66709,66710],{"class":97},"    checkAll.",[87,66712,58749],{"class":205},[87,66714,165],{"class":97},[87,66716,58754],{"class":949},[87,66718,13385],{"class":97},[87,66720,55385],{"class":171},[87,66722,55388],{"class":97},[87,66724,66725],{"class":89,"line":17775},[87,66726,66727],{"class":199},"      \u002F\u002F 得到当前大复选框的选中状态\n",[87,66729,66730,66733],{"class":89,"line":17780},[87,66731,66732],{"class":199},"      \u002F\u002F console.log(checkAll.checked)",[87,66734,66735],{"class":199},"  \u002F\u002F 得到 是 true 或者是 false\n",[87,66737,66738],{"class":89,"line":17794},[87,66739,66740],{"class":199},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[87,66742,66743,66745,66747,66749,66751,66753,66755,66757,66759,66762,66764,66766,66768],{"class":89,"line":17799},[87,66744,53221],{"class":171},[87,66746,2614],{"class":97},[87,66748,52784],{"class":171},[87,66750,10388],{"class":97},[87,66752,946],{"class":171},[87,66754,577],{"class":104},[87,66756,10395],{"class":97},[87,66758,938],{"class":171},[87,66760,66761],{"class":97}," cks.",[87,66763,52905],{"class":104},[87,66765,4168],{"class":97},[87,66767,3247],{"class":171},[87,66769,13392],{"class":97},[87,66771,66772,66775,66777,66780],{"class":89,"line":17804},[87,66773,66774],{"class":97},"        cks[i].checked ",[87,66776,946],{"class":171},[87,66778,66779],{"class":104}," this",[87,66781,66782],{"class":97},".checked\n",[87,66784,66785],{"class":89,"line":17818},[87,66786,53335],{"class":97},[87,66788,66789],{"class":89,"line":17830},[87,66790,34408],{"class":97},[87,66792,66793],{"class":89,"line":17835},[87,66794,66795],{"class":199},"    \u002F\u002F 5. 小复选框控制大复选框\n",[87,66797,66798],{"class":89,"line":17848},[87,66799,3355],{"emptyLinePlaceholder":1029},[87,66801,66802,66804,66806,66808,66810,66812,66814,66816,66818,66820,66822,66824,66826],{"class":89,"line":17853},[87,66803,4155],{"class":171},[87,66805,2614],{"class":97},[87,66807,52784],{"class":171},[87,66809,10388],{"class":97},[87,66811,946],{"class":171},[87,66813,577],{"class":104},[87,66815,10395],{"class":97},[87,66817,938],{"class":171},[87,66819,66761],{"class":97},[87,66821,52905],{"class":104},[87,66823,4168],{"class":97},[87,66825,3247],{"class":171},[87,66827,13392],{"class":97},[87,66829,66830],{"class":89,"line":17858},[87,66831,66832],{"class":199},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[87,66834,66835,66838,66840,66842,66844,66846,66848],{"class":89,"line":17863},[87,66836,66837],{"class":97},"      cks[i].",[87,66839,58749],{"class":205},[87,66841,165],{"class":97},[87,66843,58754],{"class":949},[87,66845,13385],{"class":97},[87,66847,55385],{"class":171},[87,66849,55388],{"class":97},[87,66851,66852],{"class":89,"line":17876},[87,66853,66854],{"class":199},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[87,66856,66857],{"class":89,"line":17881},[87,66858,66859],{"class":199},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[87,66861,66862],{"class":89,"line":33580},[87,66863,66864],{"class":199},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[87,66866,66867],{"class":89,"line":33586},[87,66868,66869],{"class":199},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[87,66871,66872,66875,66877,66879,66881,66883,66886,66888,66890,66892,66894],{"class":89,"line":33592},[87,66873,66874],{"class":97},"        checkAll.checked ",[87,66876,946],{"class":171},[87,66878,55332],{"class":97},[87,66880,56617],{"class":205},[87,66882,165],{"class":97},[87,66884,66885],{"class":949},"'.ck:checked'",[87,66887,31773],{"class":97},[87,66889,52905],{"class":104},[87,66891,58842],{"class":171},[87,66893,66761],{"class":97},[87,66895,56767],{"class":104},[87,66897,66898],{"class":89,"line":33598},[87,66899,65748],{"class":97},[87,66901,66902],{"class":89,"line":33604},[87,66903,3142],{"class":97},[87,66905,66906,66908,66910],{"class":89,"line":33615},[87,66907,53354],{"class":97},[87,66909,52750],{"class":93},[87,66911,953],{"class":97},[87,66913,66914,66916,66918],{"class":89,"line":33621},[87,66915,963],{"class":97},[87,66917,52737],{"class":93},[87,66919,953],{"class":97},[87,66921,66922],{"class":89,"line":33641},[87,66923,3355],{"emptyLinePlaceholder":1029},[87,66925,66926,66928,66930],{"class":89,"line":33647},[87,66927,963],{"class":97},[87,66929,51581],{"class":93},[87,66931,953],{"class":97},[19,66933,66934],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66936,66937],{},"用好之间比较得到的布尔值！！！",[19,66939,66940,66941,66944,66945,2614,66948,1677,66950,66953],{},"在 JS 里访问的时候，",[84,66942,66943],{},"checkbox.checked"," 是一个 ",[57,66946,66947],{},"布尔值",[84,66949,2320],{},[84,66951,66952],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66955,66956,66957,66960,66961],{},"HTML 的 ",[84,66958,66959],{},"checked=\"checked\""," 只是 ",[57,66962,66963,66964,66967],{},"初始值；JS 的 ",[84,66965,66966],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66969,66970],{},"：checked是一个伪类选择器",[19,66972,66973],{},[39,66974],{"alt":82,"src":66975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66977,66978,66981],{},[66979,66980],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66983,66984],{},[39,66985],{"alt":82,"src":66986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66988,66990],{"id":66989},"_33-dom事件进阶","3.3 DOM事件进阶",[44,66992,66994],{"id":66993},"_331-事件流","3.3.1 事件流",[19,66996,66997],{},[39,66998],{"alt":82,"src":66999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[49,67001,67003],{"id":67002},"_3311-事件捕获","3.3.1.1 事件捕获",[19,67005,67006],{},[39,67007],{"alt":82,"src":67008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[77,67010,67012],{"className":51579,"code":67011,"language":51581,"meta":82,"style":82},"\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",[84,67013,67014,67024,67038,67042,67050,67064,67084,67096,67104,67111,67123,67135,67145,67149,67153,67160,67172,67184,67194,67198,67206,67214,67218,67226,67241,67260,67268,67276,67296,67316,67332,67343,67351,67368,67379,67387,67404,67415,67423,67431,67439,67443],{"__ignoreMap":82},[87,67015,67016,67018,67020,67022],{"class":89,"line":90},[87,67017,52243],{"class":97},[87,67019,52246],{"class":93},[87,67021,52249],{"class":205},[87,67023,953],{"class":97},[87,67025,67026,67028,67030,67032,67034,67036],{"class":89,"line":101},[87,67027,938],{"class":97},[87,67029,51581],{"class":93},[87,67031,52260],{"class":205},[87,67033,946],{"class":97},[87,67035,52265],{"class":949},[87,67037,953],{"class":97},[87,67039,67040],{"class":89,"line":120},[87,67041,3355],{"emptyLinePlaceholder":1029},[87,67043,67044,67046,67048],{"class":89,"line":222},[87,67045,938],{"class":97},[87,67047,52278],{"class":93},[87,67049,953],{"class":97},[87,67051,67052,67054,67056,67058,67060,67062],{"class":89,"line":234},[87,67053,53081],{"class":97},[87,67055,52288],{"class":93},[87,67057,52291],{"class":205},[87,67059,946],{"class":97},[87,67061,52296],{"class":949},[87,67063,953],{"class":97},[87,67065,67066,67068,67070,67072,67074,67076,67078,67080,67082],{"class":89,"line":256},[87,67067,53081],{"class":97},[87,67069,52288],{"class":93},[87,67071,15870],{"class":205},[87,67073,946],{"class":97},[87,67075,52335],{"class":949},[87,67077,52315],{"class":205},[87,67079,946],{"class":97},[87,67081,52342],{"class":949},[87,67083,953],{"class":97},[87,67085,67086,67088,67090,67092,67094],{"class":89,"line":269},[87,67087,53081],{"class":97},[87,67089,52351],{"class":93},[87,67091,52354],{"class":97},[87,67093,52351],{"class":93},[87,67095,953],{"class":97},[87,67097,67098,67100,67102],{"class":89,"line":463},[87,67099,53081],{"class":97},[87,67101,1006],{"class":93},[87,67103,953],{"class":97},[87,67105,67106,67109],{"class":89,"line":469},[87,67107,67108],{"class":205},"    .father",[87,67110,98],{"class":97},[87,67112,67113,67115,67117,67119,67121],{"class":89,"line":2287},[87,67114,55707],{"class":104},[87,67116,108],{"class":97},[87,67118,839],{"class":104},[87,67120,245],{"class":171},[87,67122,117],{"class":97},[87,67124,67125,67127,67129,67131,67133],{"class":89,"line":2568},[87,67126,55721],{"class":104},[87,67128,108],{"class":97},[87,67130,839],{"class":104},[87,67132,245],{"class":171},[87,67134,117],{"class":97},[87,67136,67137,67139,67141,67143],{"class":89,"line":2573},[87,67138,55820],{"class":104},[87,67140,108],{"class":97},[87,67142,52583],{"class":104},[87,67144,117],{"class":97},[87,67146,67147],{"class":89,"line":2579},[87,67148,3142],{"class":97},[87,67150,67151],{"class":89,"line":2584},[87,67152,3355],{"emptyLinePlaceholder":1029},[87,67154,67155,67158],{"class":89,"line":2598},[87,67156,67157],{"class":205},"    .son",[87,67159,98],{"class":97},[87,67161,67162,67164,67166,67168,67170],{"class":89,"line":2603},[87,67163,55707],{"class":104},[87,67165,108],{"class":97},[87,67167,2678],{"class":104},[87,67169,245],{"class":171},[87,67171,117],{"class":97},[87,67173,67174,67176,67178,67180,67182],{"class":89,"line":2609},[87,67175,55721],{"class":104},[87,67177,108],{"class":97},[87,67179,2678],{"class":104},[87,67181,245],{"class":171},[87,67183,117],{"class":97},[87,67185,67186,67188,67190,67192],{"class":89,"line":2630},[87,67187,55820],{"class":104},[87,67189,108],{"class":97},[87,67191,55825],{"class":104},[87,67193,117],{"class":97},[87,67195,67196],{"class":89,"line":2635},[87,67197,3142],{"class":97},[87,67199,67200,67202,67204],{"class":89,"line":2649},[87,67201,53354],{"class":97},[87,67203,1006],{"class":93},[87,67205,953],{"class":97},[87,67207,67208,67210,67212],{"class":89,"line":2654},[87,67209,963],{"class":97},[87,67211,52278],{"class":93},[87,67213,953],{"class":97},[87,67215,67216],{"class":89,"line":2683},[87,67217,3355],{"emptyLinePlaceholder":1029},[87,67219,67220,67222,67224],{"class":89,"line":2688},[87,67221,938],{"class":97},[87,67223,52737],{"class":93},[87,67225,953],{"class":97},[87,67227,67228,67230,67232,67234,67236,67239],{"class":89,"line":2705},[87,67229,53081],{"class":97},[87,67231,94],{"class":93},[87,67233,943],{"class":205},[87,67235,946],{"class":97},[87,67237,67238],{"class":949},"\"father\"",[87,67240,953],{"class":97},[87,67242,67243,67245,67247,67249,67251,67254,67256,67258],{"class":89,"line":2710},[87,67244,52285],{"class":97},[87,67246,94],{"class":93},[87,67248,943],{"class":205},[87,67250,946],{"class":97},[87,67252,67253],{"class":949},"\"son\"",[87,67255,56250],{"class":97},[87,67257,94],{"class":93},[87,67259,953],{"class":97},[87,67261,67262,67264,67266],{"class":89,"line":2715},[87,67263,53354],{"class":97},[87,67265,94],{"class":93},[87,67267,953],{"class":97},[87,67269,67270,67272,67274],{"class":89,"line":2720},[87,67271,53081],{"class":97},[87,67273,52750],{"class":93},[87,67275,953],{"class":97},[87,67277,67278,67280,67283,67285,67287,67289,67291,67294],{"class":89,"line":2734},[87,67279,12171],{"class":171},[87,67281,67282],{"class":104}," fa",[87,67284,14514],{"class":171},[87,67286,55332],{"class":97},[87,67288,55335],{"class":205},[87,67290,165],{"class":97},[87,67292,67293],{"class":949},"'.father'",[87,67295,1108],{"class":97},[87,67297,67298,67300,67303,67305,67307,67309,67311,67314],{"class":89,"line":2739},[87,67299,12171],{"class":171},[87,67301,67302],{"class":104}," son",[87,67304,14514],{"class":171},[87,67306,55332],{"class":97},[87,67308,55335],{"class":205},[87,67310,165],{"class":97},[87,67312,67313],{"class":949},"'.son'",[87,67315,1108],{"class":97},[87,67317,67318,67320,67322,67324,67326,67328,67330],{"class":89,"line":3532},[87,67319,53344],{"class":97},[87,67321,58749],{"class":205},[87,67323,165],{"class":97},[87,67325,58754],{"class":949},[87,67327,13385],{"class":97},[87,67329,55385],{"class":171},[87,67331,55388],{"class":97},[87,67333,67334,67336,67338,67341],{"class":89,"line":3546},[87,67335,59861],{"class":205},[87,67337,165],{"class":97},[87,67339,67340],{"class":949},"'woshiu1'",[87,67342,1108],{"class":97},[87,67344,67345,67347,67349],{"class":89,"line":3554},[87,67346,55471],{"class":97},[87,67348,2320],{"class":104},[87,67350,1108],{"class":97},[87,67352,67353,67356,67358,67360,67362,67364,67366],{"class":89,"line":3559},[87,67354,67355],{"class":97},"    fa.",[87,67357,58749],{"class":205},[87,67359,165],{"class":97},[87,67361,58754],{"class":949},[87,67363,13385],{"class":97},[87,67365,55385],{"class":171},[87,67367,55388],{"class":97},[87,67369,67370,67372,67374,67377],{"class":89,"line":3565},[87,67371,59861],{"class":205},[87,67373,165],{"class":97},[87,67375,67376],{"class":949},"'1'",[87,67378,1108],{"class":97},[87,67380,67381,67383,67385],{"class":89,"line":3571},[87,67382,55471],{"class":97},[87,67384,2320],{"class":104},[87,67386,1108],{"class":97},[87,67388,67389,67392,67394,67396,67398,67400,67402],{"class":89,"line":3576},[87,67390,67391],{"class":97},"    son.",[87,67393,58749],{"class":205},[87,67395,165],{"class":97},[87,67397,58754],{"class":949},[87,67399,13385],{"class":97},[87,67401,55385],{"class":171},[87,67403,55388],{"class":97},[87,67405,67406,67408,67410,67413],{"class":89,"line":8898},[87,67407,59861],{"class":205},[87,67409,165],{"class":97},[87,67411,67412],{"class":949},"'2'",[87,67414,1108],{"class":97},[87,67416,67417,67419,67421],{"class":89,"line":8922},[87,67418,55471],{"class":97},[87,67420,2320],{"class":104},[87,67422,1108],{"class":97},[87,67424,67425,67427,67429],{"class":89,"line":8927},[87,67426,53354],{"class":97},[87,67428,52750],{"class":93},[87,67430,953],{"class":97},[87,67432,67433,67435,67437],{"class":89,"line":8933},[87,67434,963],{"class":97},[87,67436,52737],{"class":93},[87,67438,953],{"class":97},[87,67440,67441],{"class":89,"line":8960},[87,67442,3355],{"emptyLinePlaceholder":1029},[87,67444,67445,67447,67449],{"class":89,"line":8965},[87,67446,963],{"class":97},[87,67448,51581],{"class":93},[87,67450,953],{"class":97},[19,67452,67453],{},[39,67454],{"alt":82,"src":67455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,67457,67458],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[49,67460,67462],{"id":67461},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,67464,67465],{},[39,67466],{"alt":82,"src":67467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,67469,67470],{},"反着来",[19,67472,67473],{},"注意是同名事件，比如都是‘click’",[49,67475,67477],{"id":67476},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,67479,67480],{},[39,67481],{"alt":82,"src":67482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[49,67484,67486],{"id":67485},"_3314-解绑事件","3.3.1.4 解绑事件",[19,67488,67489],{},[39,67490],{"alt":82,"src":67491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,67493,67494],{},[39,67495],{"alt":82,"src":67496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[49,67498,67500],{"id":67499},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[1055,67502,67503],{},[29,67504,67505],{},"事件类型的区别",[19,67507,67508],{},[39,67509],{"alt":82,"src":67510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,67512,67513],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[1055,67515,67516],{"start":101},[29,67517,67518],{},"注册事件的区别",[19,67520,67521],{},[39,67522],{"alt":82,"src":67523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[49,67525,67527],{"id":67526},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,67529,67530],{},[39,67531],{"alt":82,"src":67532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,67534,67535],{},[39,67536],{"alt":82,"src":67537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[77,67539,67541],{"className":54004,"code":67540,"language":54006,"meta":82,"style":82},"\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",[84,67542,67543,67551,67568,67591,67599,67604,67609,67614,67618,67626,67634],{"__ignoreMap":82},[87,67544,67545,67547,67549],{"class":89,"line":90},[87,67546,938],{"class":97},[87,67548,52737],{"class":93},[87,67550,953],{"class":97},[87,67552,67553,67555,67558,67561,67563,67566],{"class":89,"line":101},[87,67554,53081],{"class":97},[87,67556,67557],{"class":93},"form",[87,67559,67560],{"class":205}," action",[87,67562,946],{"class":97},[87,67564,67565],{"class":949},"\"http:\u002F\u002Fwww.itcast.cn\"",[87,67567,953],{"class":97},[87,67569,67570,67572,67574,67576,67578,67581,67584,67586,67589],{"class":89,"line":120},[87,67571,52285],{"class":97},[87,67573,54757],{"class":93},[87,67575,54760],{"class":205},[87,67577,946],{"class":97},[87,67579,67580],{"class":949},"\"submit\"",[87,67582,67583],{"class":205}," value",[87,67585,946],{"class":97},[87,67587,67588],{"class":949},"\"免费注册\"",[87,67590,953],{"class":97},[87,67592,67593,67595,67597],{"class":89,"line":222},[87,67594,52285],{"class":97},[87,67596,52750],{"class":93},[87,67598,953],{"class":97},[87,67600,67601],{"class":89,"line":234},[87,67602,67603],{"class":97},"      const form = document.querySelector('form')\n",[87,67605,67606],{"class":89,"line":256},[87,67607,67608],{"class":97},"      form.addEventListener('submit', function (e) {\n",[87,67610,67611],{"class":89,"line":269},[87,67612,67613],{"class":97},"        e.preventDefault()\n",[87,67615,67616],{"class":89,"line":463},[87,67617,65748],{"class":97},[87,67619,67620,67622,67624],{"class":89,"line":469},[87,67621,52714],{"class":97},[87,67623,52750],{"class":93},[87,67625,953],{"class":97},[87,67627,67628,67630,67632],{"class":89,"line":2287},[87,67629,53354],{"class":97},[87,67631,67557],{"class":93},[87,67633,953],{"class":97},[87,67635,67636,67638,67640],{"class":89,"line":2568},[87,67637,963],{"class":97},[87,67639,52737],{"class":93},[87,67641,953],{"class":97},[19,67643,67644],{},"点击不在跳转！！！",[44,67646,67648],{"id":67647},"_332-事件委托","3.3.2 事件委托",[19,67650,67651],{},[39,67652],{"alt":82,"src":67653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[77,67655,67657],{"className":51579,"code":67656,"language":51581,"meta":82,"style":82},"\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",[84,67658,67659,67669,67683,67687,67695,67709,67729,67741,67749,67753,67761,67769,67781,67793,67805,67817,67829,67842,67850,67858,67863,67882,67903,67908,67913,67918,67923,67932,67936,67946,67950,67955,67960,67974,67984,67988,67992,68000,68008,68012],{"__ignoreMap":82},[87,67660,67661,67663,67665,67667],{"class":89,"line":90},[87,67662,52243],{"class":97},[87,67664,52246],{"class":93},[87,67666,52249],{"class":205},[87,67668,953],{"class":97},[87,67670,67671,67673,67675,67677,67679,67681],{"class":89,"line":101},[87,67672,938],{"class":97},[87,67674,51581],{"class":93},[87,67676,52260],{"class":205},[87,67678,946],{"class":97},[87,67680,52265],{"class":949},[87,67682,953],{"class":97},[87,67684,67685],{"class":89,"line":120},[87,67686,3355],{"emptyLinePlaceholder":1029},[87,67688,67689,67691,67693],{"class":89,"line":222},[87,67690,938],{"class":97},[87,67692,52278],{"class":93},[87,67694,953],{"class":97},[87,67696,67697,67699,67701,67703,67705,67707],{"class":89,"line":234},[87,67698,53081],{"class":97},[87,67700,52288],{"class":93},[87,67702,52291],{"class":205},[87,67704,946],{"class":97},[87,67706,52296],{"class":949},[87,67708,953],{"class":97},[87,67710,67711,67713,67715,67717,67719,67721,67723,67725,67727],{"class":89,"line":256},[87,67712,53081],{"class":97},[87,67714,52288],{"class":93},[87,67716,15870],{"class":205},[87,67718,946],{"class":97},[87,67720,52335],{"class":949},[87,67722,52315],{"class":205},[87,67724,946],{"class":97},[87,67726,52342],{"class":949},[87,67728,953],{"class":97},[87,67730,67731,67733,67735,67737,67739],{"class":89,"line":269},[87,67732,53081],{"class":97},[87,67734,52351],{"class":93},[87,67736,52354],{"class":97},[87,67738,52351],{"class":93},[87,67740,953],{"class":97},[87,67742,67743,67745,67747],{"class":89,"line":463},[87,67744,963],{"class":97},[87,67746,52278],{"class":93},[87,67748,953],{"class":97},[87,67750,67751],{"class":89,"line":469},[87,67752,3355],{"emptyLinePlaceholder":1029},[87,67754,67755,67757,67759],{"class":89,"line":2287},[87,67756,938],{"class":97},[87,67758,52737],{"class":93},[87,67760,953],{"class":97},[87,67762,67763,67765,67767],{"class":89,"line":2568},[87,67764,53081],{"class":97},[87,67766,26],{"class":93},[87,67768,953],{"class":97},[87,67770,67771,67773,67775,67777,67779],{"class":89,"line":2573},[87,67772,52285],{"class":97},[87,67774,29],{"class":93},[87,67776,54902],{"class":97},[87,67778,29],{"class":93},[87,67780,953],{"class":97},[87,67782,67783,67785,67787,67789,67791],{"class":89,"line":2579},[87,67784,52285],{"class":97},[87,67786,29],{"class":93},[87,67788,54921],{"class":97},[87,67790,29],{"class":93},[87,67792,953],{"class":97},[87,67794,67795,67797,67799,67801,67803],{"class":89,"line":2584},[87,67796,52285],{"class":97},[87,67798,29],{"class":93},[87,67800,54940],{"class":97},[87,67802,29],{"class":93},[87,67804,953],{"class":97},[87,67806,67807,67809,67811,67813,67815],{"class":89,"line":2598},[87,67808,52285],{"class":97},[87,67810,29],{"class":93},[87,67812,54959],{"class":97},[87,67814,29],{"class":93},[87,67816,953],{"class":97},[87,67818,67819,67821,67823,67825,67827],{"class":89,"line":2603},[87,67820,52285],{"class":97},[87,67822,29],{"class":93},[87,67824,54978],{"class":97},[87,67826,29],{"class":93},[87,67828,953],{"class":97},[87,67830,67831,67833,67835,67838,67840],{"class":89,"line":2609},[87,67832,52285],{"class":97},[87,67834,19],{"class":93},[87,67836,67837],{"class":97},">我不需要变色\u003C\u002F",[87,67839,19],{"class":93},[87,67841,953],{"class":97},[87,67843,67844,67846,67848],{"class":89,"line":2630},[87,67845,53354],{"class":97},[87,67847,26],{"class":93},[87,67849,953],{"class":97},[87,67851,67852,67854,67856],{"class":89,"line":2635},[87,67853,53081],{"class":97},[87,67855,52750],{"class":93},[87,67857,953],{"class":97},[87,67859,67860],{"class":89,"line":2649},[87,67861,67862],{"class":199},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[87,67864,67865,67867,67869,67871,67873,67875,67877,67880],{"class":89,"line":2654},[87,67866,12171],{"class":171},[87,67868,62228],{"class":104},[87,67870,14514],{"class":171},[87,67872,55332],{"class":97},[87,67874,55335],{"class":205},[87,67876,165],{"class":97},[87,67878,67879],{"class":949},"'ul'",[87,67881,1108],{"class":97},[87,67883,67884,67887,67889,67891,67893,67895,67897,67899,67901],{"class":89,"line":2683},[87,67885,67886],{"class":97},"    ul.",[87,67888,58749],{"class":205},[87,67890,165],{"class":97},[87,67892,58754],{"class":949},[87,67894,13385],{"class":97},[87,67896,55385],{"class":171},[87,67898,2614],{"class":97},[87,67900,1173],{"class":492},[87,67902,13392],{"class":97},[87,67904,67905],{"class":89,"line":2688},[87,67906,67907],{"class":199},"      \u002F\u002F alert(1)\n",[87,67909,67910],{"class":89,"line":2705},[87,67911,67912],{"class":199},"      \u002F\u002F e.target就是我们点击的对象\n",[87,67914,67915],{"class":89,"line":2710},[87,67916,67917],{"class":199},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[87,67919,67920],{"class":89,"line":2715},[87,67921,67922],{"class":199},"      \u002F\u002F e.target.style.color = 'red'\n",[87,67924,67925,67927,67929],{"class":89,"line":2720},[87,67926,59180],{"class":97},[87,67928,59183],{"class":205},[87,67930,67931],{"class":97},"(e)\n",[87,67933,67934],{"class":89,"line":2734},[87,67935,3355],{"emptyLinePlaceholder":1029},[87,67937,67938,67940,67943],{"class":89,"line":2739},[87,67939,59180],{"class":97},[87,67941,67942],{"class":205},"dir",[87,67944,67945],{"class":97},"(e.target)\n",[87,67947,67948],{"class":89,"line":3532},[87,67949,3355],{"emptyLinePlaceholder":1029},[87,67951,67952],{"class":89,"line":3546},[87,67953,67954],{"class":199},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[87,67956,67957],{"class":89,"line":3554},[87,67958,67959],{"class":199},"      \u002F\u002F 通过tagName来进行判断\n",[87,67961,67962,67964,67967,67969,67972],{"class":89,"line":3559},[87,67963,55416],{"class":171},[87,67965,67966],{"class":97}," (e.target.tagName ",[87,67968,55422],{"class":171},[87,67970,67971],{"class":949}," 'LI'",[87,67973,13392],{"class":97},[87,67975,67976,67979,67981],{"class":89,"line":3565},[87,67977,67978],{"class":97},"        e.target.style.color ",[87,67980,946],{"class":171},[87,67982,67983],{"class":949}," 'red'\n",[87,67985,67986],{"class":89,"line":3571},[87,67987,53335],{"class":97},[87,67989,67990],{"class":89,"line":3576},[87,67991,34408],{"class":97},[87,67993,67994,67996,67998],{"class":89,"line":8898},[87,67995,53354],{"class":97},[87,67997,52750],{"class":93},[87,67999,953],{"class":97},[87,68001,68002,68004,68006],{"class":89,"line":8922},[87,68003,963],{"class":97},[87,68005,52737],{"class":93},[87,68007,953],{"class":97},[87,68009,68010],{"class":89,"line":8927},[87,68011,3355],{"emptyLinePlaceholder":1029},[87,68013,68014,68016,68018],{"class":89,"line":8933},[87,68015,963],{"class":97},[87,68017,51581],{"class":93},[87,68019,953],{"class":97},[19,68021,68022],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,68024,68025],{},"if(e.target.ragName==='P') {}",[19,68027,68028],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,68030,68031],{},"通过事件委托的方式实现tab栏切换改造：",[19,68033,68034],{},"一定要记住自定义属性！！！！！！",[19,68036,68037],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,68039,68040],{},"id是自定义的属性名",[19,68042,68043],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[77,68045,68047],{"className":51579,"code":68046,"language":51581,"meta":82,"style":82},"\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",[84,68048,68049,68059,68073,68077,68085,68099,68119,68139,68151,68159,68165,68175,68185,68189,68193,68199,68211,68223,68235,68251,68255,68259,68265,68277,68289,68301,68311,68321,68325,68329,68337,68349,68359,68371,68375,68379,68387,68397,68407,68417,68421,68425,68435,68449,68461,68465,68469,68481,68491,68507,68517,68521,68525,68539,68549,68559,68563,68567,68573,68587,68591,68595,68603,68613,68617,68621,68630,68640,68644,68652,68660,68664,68672,68686,68700,68712,68720,68759,68791,68823,68855,68887,68895,68903,68917,68951,68985,69019,69053,69087,69095,69103,69111,69116,69121,69140,69145,69165,69173,69178,69191,69212,69225,69229,69234,69239,69252,69272,69300,69304,69308,69312,69320,69328,69332],{"__ignoreMap":82},[87,68050,68051,68053,68055,68057],{"class":89,"line":90},[87,68052,52243],{"class":97},[87,68054,52246],{"class":93},[87,68056,52249],{"class":205},[87,68058,953],{"class":97},[87,68060,68061,68063,68065,68067,68069,68071],{"class":89,"line":101},[87,68062,938],{"class":97},[87,68064,51581],{"class":93},[87,68066,52260],{"class":205},[87,68068,946],{"class":97},[87,68070,52265],{"class":949},[87,68072,953],{"class":97},[87,68074,68075],{"class":89,"line":120},[87,68076,3355],{"emptyLinePlaceholder":1029},[87,68078,68079,68081,68083],{"class":89,"line":222},[87,68080,938],{"class":97},[87,68082,52278],{"class":93},[87,68084,953],{"class":97},[87,68086,68087,68089,68091,68093,68095,68097],{"class":89,"line":234},[87,68088,53081],{"class":97},[87,68090,52288],{"class":93},[87,68092,52291],{"class":205},[87,68094,946],{"class":97},[87,68096,52296],{"class":949},[87,68098,60063],{"class":97},[87,68100,68101,68103,68105,68107,68109,68111,68113,68115,68117],{"class":89,"line":256},[87,68102,53081],{"class":97},[87,68104,52288],{"class":93},[87,68106,52307],{"class":205},[87,68108,946],{"class":97},[87,68110,52312],{"class":949},[87,68112,52315],{"class":205},[87,68114,946],{"class":97},[87,68116,52320],{"class":949},[87,68118,60063],{"class":97},[87,68120,68121,68123,68125,68127,68129,68131,68133,68135,68137],{"class":89,"line":269},[87,68122,53081],{"class":97},[87,68124,52288],{"class":93},[87,68126,15870],{"class":205},[87,68128,946],{"class":97},[87,68130,52335],{"class":949},[87,68132,52315],{"class":205},[87,68134,946],{"class":97},[87,68136,52342],{"class":949},[87,68138,60063],{"class":97},[87,68140,68141,68143,68145,68147,68149],{"class":89,"line":463},[87,68142,53081],{"class":97},[87,68144,52351],{"class":93},[87,68146,64559],{"class":97},[87,68148,52351],{"class":93},[87,68150,953],{"class":97},[87,68152,68153,68155,68157],{"class":89,"line":469},[87,68154,53081],{"class":97},[87,68156,1006],{"class":93},[87,68158,953],{"class":97},[87,68160,68161,68163],{"class":89,"line":2287},[87,68162,7353],{"class":93},[87,68164,98],{"class":97},[87,68166,68167,68169,68171,68173],{"class":89,"line":2568},[87,68168,55642],{"class":104},[87,68170,108],{"class":97},[87,68172,111],{"class":104},[87,68174,117],{"class":97},[87,68176,68177,68179,68181,68183],{"class":89,"line":2573},[87,68178,55631],{"class":104},[87,68180,108],{"class":97},[87,68182,111],{"class":104},[87,68184,117],{"class":97},[87,68186,68187],{"class":89,"line":2579},[87,68188,3142],{"class":97},[87,68190,68191],{"class":89,"line":2584},[87,68192,3355],{"emptyLinePlaceholder":1029},[87,68194,68195,68197],{"class":89,"line":2598},[87,68196,64610],{"class":205},[87,68198,98],{"class":97},[87,68200,68201,68203,68205,68207,68209],{"class":89,"line":2603},[87,68202,55707],{"class":104},[87,68204,108],{"class":97},[87,68206,64621],{"class":104},[87,68208,245],{"class":171},[87,68210,117],{"class":97},[87,68212,68213,68215,68217,68219,68221],{"class":89,"line":2609},[87,68214,55721],{"class":104},[87,68216,108],{"class":97},[87,68218,64634],{"class":104},[87,68220,245],{"class":171},[87,68222,117],{"class":97},[87,68224,68225,68227,68229,68231,68233],{"class":89,"line":2630},[87,68226,55642],{"class":104},[87,68228,108],{"class":97},[87,68230,1792],{"class":104},[87,68232,245],{"class":171},[87,68234,117],{"class":97},[87,68236,68237,68239,68241,68243,68245,68247,68249],{"class":89,"line":2635},[87,68238,62912],{"class":104},[87,68240,108],{"class":97},[87,68242,1313],{"class":104},[87,68244,245],{"class":171},[87,68246,248],{"class":104},[87,68248,63179],{"class":104},[87,68250,117],{"class":97},[87,68252,68253],{"class":89,"line":2649},[87,68254,3142],{"class":97},[87,68256,68257],{"class":89,"line":2654},[87,68258,3355],{"emptyLinePlaceholder":1029},[87,68260,68261,68263],{"class":89,"line":2683},[87,68262,64679],{"class":205},[87,68264,98],{"class":97},[87,68266,68267,68269,68271,68273,68275],{"class":89,"line":2688},[87,68268,55707],{"class":104},[87,68270,108],{"class":97},[87,68272,536],{"class":104},[87,68274,1423],{"class":171},[87,68276,117],{"class":97},[87,68278,68279,68281,68283,68285,68287],{"class":89,"line":2705},[87,68280,55721],{"class":104},[87,68282,108],{"class":97},[87,68284,1999],{"class":104},[87,68286,245],{"class":171},[87,68288,117],{"class":97},[87,68290,68291,68293,68295,68297,68299],{"class":89,"line":2710},[87,68292,58295],{"class":104},[87,68294,108],{"class":97},[87,68296,1999],{"class":104},[87,68298,245],{"class":171},[87,68300,117],{"class":97},[87,68302,68303,68305,68307,68309],{"class":89,"line":2715},[87,68304,55945],{"class":104},[87,68306,108],{"class":97},[87,68308,52420],{"class":104},[87,68310,117],{"class":97},[87,68312,68313,68315,68317,68319],{"class":89,"line":2720},[87,68314,55956],{"class":104},[87,68316,108],{"class":97},[87,68318,52606],{"class":104},[87,68320,117],{"class":97},[87,68322,68323],{"class":89,"line":2734},[87,68324,3142],{"class":97},[87,68326,68327],{"class":89,"line":2739},[87,68328,3355],{"emptyLinePlaceholder":1029},[87,68330,68331,68333,68335],{"class":89,"line":3532},[87,68332,64679],{"class":205},[87,68334,64752],{"class":93},[87,68336,98],{"class":97},[87,68338,68339,68341,68343,68345,68347],{"class":89,"line":3546},[87,68340,55858],{"class":104},[87,68342,108],{"class":97},[87,68344,1892],{"class":104},[87,68346,245],{"class":171},[87,68348,117],{"class":97},[87,68350,68351,68353,68355,68357],{"class":89,"line":3554},[87,68352,63269],{"class":104},[87,68354,108],{"class":97},[87,68356,64775],{"class":104},[87,68358,117],{"class":97},[87,68360,68361,68363,68365,68367,68369],{"class":89,"line":3559},[87,68362,62935],{"class":104},[87,68364,108],{"class":97},[87,68366,1792],{"class":104},[87,68368,245],{"class":171},[87,68370,117],{"class":97},[87,68372,68373],{"class":89,"line":3565},[87,68374,3142],{"class":97},[87,68376,68377],{"class":89,"line":3571},[87,68378,3355],{"emptyLinePlaceholder":1029},[87,68380,68381,68383,68385],{"class":89,"line":3576},[87,68382,64679],{"class":205},[87,68384,62228],{"class":93},[87,68386,98],{"class":97},[87,68388,68389,68391,68393,68395],{"class":89,"line":8898},[87,68390,55668],{"class":104},[87,68392,108],{"class":97},[87,68394,55673],{"class":104},[87,68396,117],{"class":97},[87,68398,68399,68401,68403,68405],{"class":89,"line":8922},[87,68400,55945],{"class":104},[87,68402,108],{"class":97},[87,68404,52420],{"class":104},[87,68406,117],{"class":97},[87,68408,68409,68411,68413,68415],{"class":89,"line":8927},[87,68410,55956],{"class":104},[87,68412,108],{"class":97},[87,68414,52520],{"class":104},[87,68416,117],{"class":97},[87,68418,68419],{"class":89,"line":8933},[87,68420,3142],{"class":97},[87,68422,68423],{"class":89,"line":8960},[87,68424,3355],{"emptyLinePlaceholder":1029},[87,68426,68427,68429,68431,68433],{"class":89,"line":8965},[87,68428,64679],{"class":205},[87,68430,62228],{"class":93},[87,68432,56011],{"class":93},[87,68434,98],{"class":97},[87,68436,68437,68439,68441,68443,68445,68447],{"class":89,"line":8971},[87,68438,55642],{"class":104},[87,68440,108],{"class":97},[87,68442,111],{"class":104},[87,68444,9900],{"class":104},[87,68446,245],{"class":171},[87,68448,117],{"class":97},[87,68450,68451,68453,68455,68457,68459],{"class":89,"line":8983},[87,68452,55858],{"class":104},[87,68454,108],{"class":97},[87,68456,1642],{"class":104},[87,68458,245],{"class":171},[87,68460,117],{"class":97},[87,68462,68463],{"class":89,"line":8995},[87,68464,3142],{"class":97},[87,68466,68467],{"class":89,"line":9007},[87,68468,3355],{"emptyLinePlaceholder":1029},[87,68470,68471,68473,68475,68477,68479],{"class":89,"line":10666},[87,68472,64679],{"class":205},[87,68474,62228],{"class":93},[87,68476,56011],{"class":93},[87,68478,2356],{"class":93},[87,68480,98],{"class":97},[87,68482,68483,68485,68487,68489],{"class":89,"line":10691},[87,68484,64904],{"class":104},[87,68486,108],{"class":97},[87,68488,55673],{"class":104},[87,68490,117],{"class":97},[87,68492,68493,68495,68497,68499,68501,68503,68505],{"class":89,"line":10714},[87,68494,63167],{"class":104},[87,68496,108],{"class":97},[87,68498,1176],{"class":104},[87,68500,245],{"class":171},[87,68502,248],{"class":104},[87,68504,251],{"class":104},[87,68506,117],{"class":97},[87,68508,68509,68511,68513,68515],{"class":89,"line":10738},[87,68510,58352],{"class":104},[87,68512,108],{"class":97},[87,68514,264],{"class":104},[87,68516,117],{"class":97},[87,68518,68519],{"class":89,"line":10743},[87,68520,3142],{"class":97},[87,68522,68523],{"class":89,"line":10748},[87,68524,3355],{"emptyLinePlaceholder":1029},[87,68526,68527,68529,68531,68533,68535,68537],{"class":89,"line":10753},[87,68528,64679],{"class":205},[87,68530,62228],{"class":93},[87,68532,56011],{"class":93},[87,68534,2356],{"class":93},[87,68536,64957],{"class":205},[87,68538,98],{"class":97},[87,68540,68541,68543,68545,68547],{"class":89,"line":10762},[87,68542,62726],{"class":104},[87,68544,108],{"class":97},[87,68546,64968],{"class":104},[87,68548,117],{"class":97},[87,68550,68551,68553,68555,68557],{"class":89,"line":10767},[87,68552,58352],{"class":104},[87,68554,108],{"class":97},[87,68556,64968],{"class":104},[87,68558,117],{"class":97},[87,68560,68561],{"class":89,"line":10773},[87,68562,3142],{"class":97},[87,68564,68565],{"class":89,"line":10794},[87,68566,3355],{"emptyLinePlaceholder":1029},[87,68568,68569,68571],{"class":89,"line":10800},[87,68570,64993],{"class":205},[87,68572,98],{"class":97},[87,68574,68575,68577,68579,68581,68583,68585],{"class":89,"line":10814},[87,68576,55631],{"class":104},[87,68578,108],{"class":97},[87,68580,111],{"class":104},[87,68582,65006],{"class":104},[87,68584,245],{"class":171},[87,68586,117],{"class":97},[87,68588,68589],{"class":89,"line":10820},[87,68590,3142],{"class":97},[87,68592,68593],{"class":89,"line":10847},[87,68594,3355],{"emptyLinePlaceholder":1029},[87,68596,68597,68599,68601],{"class":89,"line":10856},[87,68598,64993],{"class":205},[87,68600,63109],{"class":205},[87,68602,98],{"class":97},[87,68604,68605,68607,68609,68611],{"class":89,"line":10862},[87,68606,55945],{"class":104},[87,68608,108],{"class":97},[87,68610,55673],{"class":104},[87,68612,117],{"class":97},[87,68614,68615],{"class":89,"line":10870},[87,68616,3142],{"class":97},[87,68618,68619],{"class":89,"line":10875},[87,68620,3355],{"emptyLinePlaceholder":1029},[87,68622,68623,68625,68628],{"class":89,"line":17553},[87,68624,64993],{"class":205},[87,68626,68627],{"class":205}," .active",[87,68629,98],{"class":97},[87,68631,68632,68634,68636,68638],{"class":89,"line":17559},[87,68633,55945],{"class":104},[87,68635,108],{"class":97},[87,68637,61805],{"class":104},[87,68639,117],{"class":97},[87,68641,68642],{"class":89,"line":17582},[87,68643,3142],{"class":97},[87,68645,68646,68648,68650],{"class":89,"line":17588},[87,68647,53354],{"class":97},[87,68649,1006],{"class":93},[87,68651,953],{"class":97},[87,68653,68654,68656,68658],{"class":89,"line":17611},[87,68655,963],{"class":97},[87,68657,52278],{"class":93},[87,68659,953],{"class":97},[87,68661,68662],{"class":89,"line":17625},[87,68663,3355],{"emptyLinePlaceholder":1029},[87,68665,68666,68668,68670],{"class":89,"line":17645},[87,68667,938],{"class":97},[87,68669,52737],{"class":93},[87,68671,953],{"class":97},[87,68673,68674,68676,68678,68680,68682,68684],{"class":89,"line":17651},[87,68675,53081],{"class":97},[87,68677,94],{"class":93},[87,68679,943],{"class":205},[87,68681,946],{"class":97},[87,68683,65108],{"class":949},[87,68685,953],{"class":97},[87,68687,68688,68690,68692,68694,68696,68698],{"class":89,"line":17662},[87,68689,52285],{"class":97},[87,68691,94],{"class":93},[87,68693,943],{"class":205},[87,68695,946],{"class":97},[87,68697,65123],{"class":949},[87,68699,953],{"class":97},[87,68701,68702,68704,68706,68708,68710],{"class":89,"line":17685},[87,68703,56170],{"class":97},[87,68705,44],{"class":93},[87,68707,65134],{"class":97},[87,68709,44],{"class":93},[87,68711,953],{"class":97},[87,68713,68714,68716,68718],{"class":89,"line":17707},[87,68715,56170],{"class":97},[87,68717,26],{"class":93},[87,68719,953],{"class":97},[87,68721,68722,68724,68726,68728,68730,68732,68734,68736,68738,68740,68742,68744,68746,68749,68751,68753,68755,68757],{"class":89,"line":17712},[87,68723,56238],{"class":97},[87,68725,29],{"class":93},[87,68727,61988],{"class":97},[87,68729,1334],{"class":93},[87,68731,943],{"class":205},[87,68733,946],{"class":97},[87,68735,60642],{"class":949},[87,68737,61993],{"class":205},[87,68739,946],{"class":97},[87,68741,65169],{"class":949},[87,68743,54887],{"class":205},[87,68745,946],{"class":97},[87,68747,68748],{"class":949},"\"0\"",[87,68750,65172],{"class":97},[87,68752,1334],{"class":93},[87,68754,56250],{"class":97},[87,68756,29],{"class":93},[87,68758,953],{"class":97},[87,68760,68761,68763,68765,68767,68769,68771,68773,68775,68777,68779,68781,68783,68785,68787,68789],{"class":89,"line":17718},[87,68762,56238],{"class":97},[87,68764,29],{"class":93},[87,68766,61988],{"class":97},[87,68768,1334],{"class":93},[87,68770,61993],{"class":205},[87,68772,946],{"class":97},[87,68774,65169],{"class":949},[87,68776,54887],{"class":205},[87,68778,946],{"class":97},[87,68780,4632],{"class":949},[87,68782,65199],{"class":97},[87,68784,1334],{"class":93},[87,68786,56250],{"class":97},[87,68788,29],{"class":93},[87,68790,953],{"class":97},[87,68792,68793,68795,68797,68799,68801,68803,68805,68807,68809,68811,68813,68815,68817,68819,68821],{"class":89,"line":17732},[87,68794,56238],{"class":97},[87,68796,29],{"class":93},[87,68798,61988],{"class":97},[87,68800,1334],{"class":93},[87,68802,61993],{"class":205},[87,68804,946],{"class":97},[87,68806,65169],{"class":949},[87,68808,54887],{"class":205},[87,68810,946],{"class":97},[87,68812,4655],{"class":949},[87,68814,65226],{"class":97},[87,68816,1334],{"class":93},[87,68818,56250],{"class":97},[87,68820,29],{"class":93},[87,68822,953],{"class":97},[87,68824,68825,68827,68829,68831,68833,68835,68837,68839,68841,68843,68845,68847,68849,68851,68853],{"class":89,"line":17745},[87,68826,56238],{"class":97},[87,68828,29],{"class":93},[87,68830,61988],{"class":97},[87,68832,1334],{"class":93},[87,68834,61993],{"class":205},[87,68836,946],{"class":97},[87,68838,65169],{"class":949},[87,68840,54887],{"class":205},[87,68842,946],{"class":97},[87,68844,4668],{"class":949},[87,68846,65253],{"class":97},[87,68848,1334],{"class":93},[87,68850,56250],{"class":97},[87,68852,29],{"class":93},[87,68854,953],{"class":97},[87,68856,68857,68859,68861,68863,68865,68867,68869,68871,68873,68875,68877,68879,68881,68883,68885],{"class":89,"line":17750},[87,68858,56238],{"class":97},[87,68860,29],{"class":93},[87,68862,61988],{"class":97},[87,68864,1334],{"class":93},[87,68866,61993],{"class":205},[87,68868,946],{"class":97},[87,68870,65169],{"class":949},[87,68872,54887],{"class":205},[87,68874,946],{"class":97},[87,68876,4681],{"class":949},[87,68878,65280],{"class":97},[87,68880,1334],{"class":93},[87,68882,56250],{"class":97},[87,68884,29],{"class":93},[87,68886,953],{"class":97},[87,68888,68889,68891,68893],{"class":89,"line":17764},[87,68890,56343],{"class":97},[87,68892,26],{"class":93},[87,68894,953],{"class":97},[87,68896,68897,68899,68901],{"class":89,"line":17769},[87,68898,52714],{"class":97},[87,68900,94],{"class":93},[87,68902,953],{"class":97},[87,68904,68905,68907,68909,68911,68913,68915],{"class":89,"line":17775},[87,68906,52285],{"class":97},[87,68908,94],{"class":93},[87,68910,943],{"class":205},[87,68912,946],{"class":97},[87,68914,65317],{"class":949},[87,68916,953],{"class":97},[87,68918,68919,68921,68923,68925,68927,68929,68931,68933,68935,68937,68939,68941,68943,68945,68947,68949],{"class":89,"line":17780},[87,68920,56170],{"class":97},[87,68922,94],{"class":93},[87,68924,943],{"class":205},[87,68926,946],{"class":97},[87,68928,65332],{"class":949},[87,68930,61988],{"class":97},[87,68932,39],{"class":93},[87,68934,56175],{"class":205},[87,68936,946],{"class":97},[87,68938,65343],{"class":949},[87,68940,56183],{"class":205},[87,68942,946],{"class":97},[87,68944,8602],{"class":949},[87,68946,65352],{"class":97},[87,68948,94],{"class":93},[87,68950,953],{"class":97},[87,68952,68953,68955,68957,68959,68961,68963,68965,68967,68969,68971,68973,68975,68977,68979,68981,68983],{"class":89,"line":17794},[87,68954,56170],{"class":97},[87,68956,94],{"class":93},[87,68958,943],{"class":205},[87,68960,946],{"class":97},[87,68962,63557],{"class":949},[87,68964,61988],{"class":97},[87,68966,39],{"class":93},[87,68968,56175],{"class":205},[87,68970,946],{"class":97},[87,68972,65379],{"class":949},[87,68974,56183],{"class":205},[87,68976,946],{"class":97},[87,68978,8602],{"class":949},[87,68980,65352],{"class":97},[87,68982,94],{"class":93},[87,68984,953],{"class":97},[87,68986,68987,68989,68991,68993,68995,68997,68999,69001,69003,69005,69007,69009,69011,69013,69015,69017],{"class":89,"line":17799},[87,68988,56170],{"class":97},[87,68990,94],{"class":93},[87,68992,943],{"class":205},[87,68994,946],{"class":97},[87,68996,63557],{"class":949},[87,68998,61988],{"class":97},[87,69000,39],{"class":93},[87,69002,56175],{"class":205},[87,69004,946],{"class":97},[87,69006,65414],{"class":949},[87,69008,56183],{"class":205},[87,69010,946],{"class":97},[87,69012,8602],{"class":949},[87,69014,65352],{"class":97},[87,69016,94],{"class":93},[87,69018,953],{"class":97},[87,69020,69021,69023,69025,69027,69029,69031,69033,69035,69037,69039,69041,69043,69045,69047,69049,69051],{"class":89,"line":17804},[87,69022,56170],{"class":97},[87,69024,94],{"class":93},[87,69026,943],{"class":205},[87,69028,946],{"class":97},[87,69030,63557],{"class":949},[87,69032,61988],{"class":97},[87,69034,39],{"class":93},[87,69036,56175],{"class":205},[87,69038,946],{"class":97},[87,69040,65449],{"class":949},[87,69042,56183],{"class":205},[87,69044,946],{"class":97},[87,69046,8602],{"class":949},[87,69048,65352],{"class":97},[87,69050,94],{"class":93},[87,69052,953],{"class":97},[87,69054,69055,69057,69059,69061,69063,69065,69067,69069,69071,69073,69075,69077,69079,69081,69083,69085],{"class":89,"line":17818},[87,69056,56170],{"class":97},[87,69058,94],{"class":93},[87,69060,943],{"class":205},[87,69062,946],{"class":97},[87,69064,63557],{"class":949},[87,69066,61988],{"class":97},[87,69068,39],{"class":93},[87,69070,56175],{"class":205},[87,69072,946],{"class":97},[87,69074,65484],{"class":949},[87,69076,56183],{"class":205},[87,69078,946],{"class":97},[87,69080,8602],{"class":949},[87,69082,65352],{"class":97},[87,69084,94],{"class":93},[87,69086,953],{"class":97},[87,69088,69089,69091,69093],{"class":89,"line":17830},[87,69090,52714],{"class":97},[87,69092,94],{"class":93},[87,69094,953],{"class":97},[87,69096,69097,69099,69101],{"class":89,"line":17835},[87,69098,53354],{"class":97},[87,69100,94],{"class":93},[87,69102,953],{"class":97},[87,69104,69105,69107,69109],{"class":89,"line":17848},[87,69106,53081],{"class":97},[87,69108,52750],{"class":93},[87,69110,953],{"class":97},[87,69112,69113],{"class":89,"line":17853},[87,69114,69115],{"class":199},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[87,69117,69118],{"class":89,"line":17858},[87,69119,69120],{"class":199},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[87,69122,69123,69125,69127,69129,69131,69133,69135,69138],{"class":89,"line":17863},[87,69124,12171],{"class":171},[87,69126,62228],{"class":104},[87,69128,14514],{"class":171},[87,69130,55332],{"class":97},[87,69132,55335],{"class":205},[87,69134,165],{"class":97},[87,69136,69137],{"class":949},"'.tab-nav ul'",[87,69139,1108],{"class":97},[87,69141,69142],{"class":89,"line":17876},[87,69143,69144],{"class":199},"    \u002F\u002F 2.添加事件\n",[87,69146,69147,69149,69151,69153,69155,69157,69159,69161,69163],{"class":89,"line":17881},[87,69148,67886],{"class":97},[87,69150,58749],{"class":205},[87,69152,165],{"class":97},[87,69154,58754],{"class":949},[87,69156,13385],{"class":97},[87,69158,55385],{"class":171},[87,69160,2614],{"class":97},[87,69162,1173],{"class":492},[87,69164,13392],{"class":97},[87,69166,69167,69169,69171],{"class":89,"line":33580},[87,69168,59180],{"class":97},[87,69170,67942],{"class":205},[87,69172,67945],{"class":97},[87,69174,69175],{"class":89,"line":33586},[87,69176,69177],{"class":199},"      \u002F\u002Fe.targer是我们点击的对象\n",[87,69179,69180,69182,69184,69186,69189],{"class":89,"line":33592},[87,69181,55416],{"class":171},[87,69183,67966],{"class":97},[87,69185,55422],{"class":171},[87,69187,69188],{"class":949}," 'A'",[87,69190,13392],{"class":97},[87,69192,69193,69195,69197,69199,69202,69204,69206,69208,69210],{"class":89,"line":33598},[87,69194,52862],{"class":97},[87,69196,55335],{"class":205},[87,69198,165],{"class":97},[87,69200,69201],{"class":949},"'.active'",[87,69203,57939],{"class":97},[87,69205,57942],{"class":205},[87,69207,165],{"class":97},[87,69209,65647],{"class":949},[87,69211,1108],{"class":97},[87,69213,69214,69217,69219,69221,69223],{"class":89,"line":33604},[87,69215,69216],{"class":97},"        e.target.classList.",[87,69218,6284],{"class":205},[87,69220,165],{"class":97},[87,69222,65647],{"class":949},[87,69224,1108],{"class":97},[87,69226,69227],{"class":89,"line":33615},[87,69228,3355],{"emptyLinePlaceholder":1029},[87,69230,69231],{"class":89,"line":33621},[87,69232,69233],{"class":199},"        \u002F\u002F 下面大盒子模块\n",[87,69235,69236],{"class":89,"line":33641},[87,69237,69238],{"class":199},"        \u002F\u002F console.log(e.target.dataset.id)\n",[87,69240,69241,69243,69245,69247,69249],{"class":89,"line":33647},[87,69242,62206],{"class":171},[87,69244,3986],{"class":104},[87,69246,14514],{"class":171},[87,69248,46513],{"class":171},[87,69250,69251],{"class":97},"e.target.dataset.id\n",[87,69253,69254,69256,69258,69260,69262,69264,69266,69268,69270],{"class":89,"line":33658},[87,69255,52862],{"class":97},[87,69257,55335],{"class":205},[87,69259,165],{"class":97},[87,69261,65695],{"class":949},[87,69263,57939],{"class":97},[87,69265,57942],{"class":205},[87,69267,165],{"class":97},[87,69269,65647],{"class":949},[87,69271,1108],{"class":97},[87,69273,69274,69276,69278,69280,69282,69284,69286,69288,69290,69292,69294,69296,69298],{"class":89,"line":33664},[87,69275,52862],{"class":97},[87,69277,55335],{"class":205},[87,69279,165],{"class":97},[87,69281,65721],{"class":949},[87,69283,1536],{"class":97},[87,69285,46513],{"class":171},[87,69287,568],{"class":104},[87,69289,57968],{"class":949},[87,69291,57939],{"class":97},[87,69293,6284],{"class":205},[87,69295,165],{"class":97},[87,69297,65647],{"class":949},[87,69299,1108],{"class":97},[87,69301,69302],{"class":89,"line":33670},[87,69303,3355],{"emptyLinePlaceholder":1029},[87,69305,69306],{"class":89,"line":33676},[87,69307,53335],{"class":97},[87,69309,69310],{"class":89,"line":33682},[87,69311,34408],{"class":97},[87,69313,69314,69316,69318],{"class":89,"line":33688},[87,69315,53354],{"class":97},[87,69317,52750],{"class":93},[87,69319,953],{"class":97},[87,69321,69322,69324,69326],{"class":89,"line":33694},[87,69323,963],{"class":97},[87,69325,52737],{"class":93},[87,69327,953],{"class":97},[87,69329,69330],{"class":89,"line":33700},[87,69331,3355],{"emptyLinePlaceholder":1029},[87,69333,69334,69336,69338],{"class":89,"line":33720},[87,69335,963],{"class":97},[87,69337,51581],{"class":93},[87,69339,953],{"class":97},[44,69341,69343],{"id":69342},"_333-页面加载事件","3.3.3 页面加载事件",[1055,69345,69346],{},[29,69347,69348],{},"load",[19,69350,69351],{},[39,69352],{"alt":82,"src":69353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,69355,69356],{},"window代表整个窗口，比document还要大",[19,69358,69359],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,69361,69362],{},"img.addEventListener('load', function () {",[19,69364,69365],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,69367,53401],{},[1055,69369,69370],{"start":101},[29,69371,69372],{},"DOMContentLoaded",[19,69374,69375],{},[39,69376],{"alt":82,"src":69377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,69379,69380],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[44,69382,69384],{"id":69383},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,69386,69387],{},[39,69388],{"alt":82,"src":69389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,69391,69392],{},[39,69393],{"alt":82,"src":69394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,69396,69397],{},[39,69398],{"alt":82,"src":69399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,69401,69402],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,69404,69405],{},"获得的是数字型数据，不带单位",[19,69407,69408],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,69410,69411],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,69413,69414],{},"它是通过document.documentElement来获取",[19,69416,69417],{},[39,69418],{"alt":82,"src":69419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,69421,69422],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[44,69424,69426],{"id":69425},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,69428,69429],{},[39,69430],{"alt":82,"src":69431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,69433,69434],{},[39,69435],{"alt":82,"src":69436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[44,69438,69440],{"id":69439},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,69442,69443],{},[39,69444],{"alt":82,"src":69445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,69447,69448],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,69450,69451],{},[39,69452],{"alt":82,"src":69453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,69455,69456],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,69458,69459],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,69461,69462],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,69464,69465],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,69467,69468],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,69470,69471],{},[39,69472],{"alt":82,"src":69473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,69475,69476],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,69478,69479],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,69481,69482],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,69484,69485],{},"e.pageX-box.getBoundingClientRect()",[44,69487,69489],{"id":69488},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,69491,69492],{},[39,69493],{"alt":82,"src":69494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,69496,69497],{},"这个是相对于视口来说的，它是个方法，不是属性值",[44,69499,69501],{"id":69500},"_338-总结","3.3.8 总结",[19,69503,69504],{},[39,69505],{"alt":82,"src":69506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,69508,69509],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,69511,69512],{},"修改盒子的宽高只能通过width和height来实现",[44,69514,69516],{"id":69515},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[77,69518,69520],{"className":51579,"code":69519,"language":51581,"meta":82,"style":82},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[84,69521,69522,69527,69532,69537,69542],{"__ignoreMap":82},[87,69523,69524],{"class":89,"line":90},[87,69525,69526],{"class":97},"\u002F* 页面滑动 *\u002F\n",[87,69528,69529],{"class":89,"line":101},[87,69530,69531],{"class":97},"html {\n",[87,69533,69534],{"class":89,"line":120},[87,69535,69536],{"class":97},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[87,69538,69539],{"class":89,"line":222},[87,69540,69541],{"class":97},"  scroll-behavior: smooth;\n",[87,69543,69544],{"class":89,"line":234},[87,69545,123],{"class":97},[19,69547,69548],{},"默认是auto",[44,69550,69552],{"id":69551},"_3310-日期对象","3.3.10 日期对象",[49,69554,69556],{"id":69555},"_33101-实例化","3.3.10.1 实例化",[19,69558,69559],{},[39,69560],{"alt":82,"src":69561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[49,69563,69565],{"id":69564},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,69567,69568],{},[39,69569],{"alt":82,"src":69570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,69572,69573],{},"月份+1",[19,69575,69576],{},"老外认为第一天为0，星期天",[19,69578,69579],{},"方法使用的时候必须要跟括号",[19,69581,69582],{},"快速获得日期",[19,69584,69585],{},"\u002F\u002F 得到年月日",[19,69587,69588],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,69590,69591],{},"\u002F\u002F 得到当地日期",[19,69593,69594],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,69596,69597],{},"\u002F\u002F 得到当地时间",[19,69599,69600],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,69602,69603],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,69605,69606],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52750,69608,69609],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[19,69611,69612],{},"学会去封装函数！",[49,69614,69616],{"id":69615},"_33103-时间戳","3.3.10.3 时间戳",[19,69618,69619],{},[39,69620],{"alt":82,"src":69621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,69623,69624],{},[39,69625],{"alt":82,"src":69626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,69628,69629],{},"三种方法记住一个就可以",[44,69631,69633],{"id":69632},"_3311-节点操作","3.3.11 节点操作",[49,69635,69637],{"id":69636},"_33111-dom节点","3.3.11.1 DOM节点",[19,69639,69640],{},[39,69641],{"alt":82,"src":69642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,69644,69645],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[49,69647,69649],{"id":69648},"_33112-查找节点","3.3.11.2 查找节点",[19,69651,69652],{},"前边的document.querySelector()是获取的元素",[19,69654,69655],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,69657,69658],{},[39,69659],{"alt":82,"src":69660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[1055,69662,69663],{},[29,69664,69665],{},"父节点",[19,69667,69668],{},[39,69669],{"alt":82,"src":69670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[1055,69672,69673],{"start":101},[29,69674,69675],{},"子节点",[19,69677,69678],{},[39,69679],{"alt":82,"src":69680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,69682,69683],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,69685,69686],{},"children获得的是伪数组，是亲儿子",[1055,69688,69689],{"start":120},[29,69690,69691],{},"兄弟节点",[19,69693,69694],{},[39,69695],{"alt":82,"src":69696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[49,69698,69700],{"id":69699},"_33113-增加节点","3.3.11.3 增加节点",[19,69702,69703],{},[39,69704],{"alt":82,"src":69705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,69707,69708],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,69710,69711],{},[39,69712],{"alt":82,"src":69713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,69715,69716],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,69718,69719],{},"下面是写法的部分展示，就按照下边的格式来写",[19,69721,69722],{},"例：",[52750,69724,69725],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[19,69727,69728],{},[39,69729],{"alt":82,"src":69730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,69732,69733],{},"false只克隆标签，里边的内容不会克隆过来",[77,69735,69737],{"className":51579,"code":69736,"language":51581,"meta":82,"style":82},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[84,69738,69739],{"__ignoreMap":82},[87,69740,69741],{"class":89,"line":90},[87,69742,69736],{"class":97},[49,69744,69746],{"id":69745},"_33114-删除节点","3.3.11.4 删除节点",[19,69748,69749],{},[39,69750],{"alt":82,"src":69751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,69753,69754],{},"父亲删儿子",[19,69756,69757],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[44,69759,69761],{"id":69760},"_3312-m端事件","3.3.12 M端事件",[19,69763,69764],{},"M端就是移动端",[19,69766,69767],{},[39,69768],{"alt":82,"src":69769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[44,69771,69773],{"id":69772},"_3313-插件","3.3.13 插件",[19,69775,69776],{},"要熟悉官网！！！",[19,69778,69779],{},[1334,69780,69781],{"href":69781,"rel":69782},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24812],[19,69784,69785],{},[1334,69786,69787],{"href":69787,"rel":69788},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24812],[44,69790,69792],{"id":69791},"_3314-学生信息表","3.3.14 学生信息表",[1055,69794,69795,69798,69801,69804,69807,69810,69813,69816],{},[29,69796,69797],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[29,69799,69800],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[29,69802,69803],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[29,69805,69806],{},"用好表单元素自带的属性，value,name等",[29,69808,69809],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[29,69811,69812],{},"不要忘记事件对象",[29,69814,69815],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[29,69817,69818],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,69820,69821],{},"结构：",[77,69823,69825],{"className":51579,"code":69824,"language":51581,"meta":82,"style":82},"\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",[84,69826,69827,69837,69851,69855,69863,69877,69897,69918,69931,69955,69963,69967,69975,69988,70009,70037,70065,70070,70092,70112,70131,70139,70167,70189,70209,70229,70249,70269,70289,70297,70317,70325,70329,70342,70350,70358,70366,70379,70392,70405,70418,70431,70444,70457,70465,70473,70481,70486,70491,70496,70501,70506,70511,70516,70521,70526,70531,70536,70541,70546,70554,70562,70570,70574,70594,70613,70633,70653,70673,70693,70697,70702,70722,70727,70737,70742,70747,70767,70789,70794,70804,70808,70812,70817,70822,70851,70865,70880,70884,70888,70892,70897,70908,70921,70926,70931,70936,70941,70946,70950,70955,70960,70969,70974,70979,70991,70996,71003,71007,71012,71022,71027,71037,71042,71070,71091,71101,71121,71139,71156,71173,71190,71207,71211,71221,71226,71231,71236,71247,71251,71255,71259,71264,71269,71290,71302,71307,71312,71317,71331,71336,71343,71347,71351,71359,71363,71371,71375],{"__ignoreMap":82},[87,69828,69829,69831,69833,69835],{"class":89,"line":90},[87,69830,52243],{"class":97},[87,69832,52246],{"class":93},[87,69834,52249],{"class":205},[87,69836,953],{"class":97},[87,69838,69839,69841,69843,69845,69847,69849],{"class":89,"line":101},[87,69840,938],{"class":97},[87,69842,51581],{"class":93},[87,69844,52260],{"class":205},[87,69846,946],{"class":97},[87,69848,52265],{"class":949},[87,69850,953],{"class":97},[87,69852,69853],{"class":89,"line":120},[87,69854,3355],{"emptyLinePlaceholder":1029},[87,69856,69857,69859,69861],{"class":89,"line":222},[87,69858,938],{"class":97},[87,69860,52278],{"class":93},[87,69862,953],{"class":97},[87,69864,69865,69867,69869,69871,69873,69875],{"class":89,"line":234},[87,69866,53081],{"class":97},[87,69868,52288],{"class":93},[87,69870,52291],{"class":205},[87,69872,946],{"class":97},[87,69874,52296],{"class":949},[87,69876,60063],{"class":97},[87,69878,69879,69881,69883,69885,69887,69889,69891,69893,69895],{"class":89,"line":256},[87,69880,53081],{"class":97},[87,69882,52288],{"class":93},[87,69884,15870],{"class":205},[87,69886,946],{"class":97},[87,69888,52335],{"class":949},[87,69890,52315],{"class":205},[87,69892,946],{"class":97},[87,69894,52342],{"class":949},[87,69896,60063],{"class":97},[87,69898,69899,69901,69903,69905,69907,69909,69911,69913,69916],{"class":89,"line":269},[87,69900,53081],{"class":97},[87,69902,52288],{"class":93},[87,69904,52307],{"class":205},[87,69906,946],{"class":97},[87,69908,52312],{"class":949},[87,69910,52315],{"class":205},[87,69912,946],{"class":97},[87,69914,69915],{"class":949},"\"ie=edge\"",[87,69917,60063],{"class":97},[87,69919,69920,69922,69924,69927,69929],{"class":89,"line":463},[87,69921,53081],{"class":97},[87,69923,52351],{"class":93},[87,69925,69926],{"class":97},">学生信息管理\u003C\u002F",[87,69928,52351],{"class":93},[87,69930,953],{"class":97},[87,69932,69933,69935,69938,69941,69943,69946,69948,69950,69953],{"class":89,"line":469},[87,69934,53081],{"class":97},[87,69936,69937],{"class":93},"link",[87,69939,69940],{"class":205}," rel",[87,69942,946],{"class":97},[87,69944,69945],{"class":949},"\"stylesheet\"",[87,69947,61993],{"class":205},[87,69949,946],{"class":97},[87,69951,69952],{"class":949},"\"css\u002Findex.css\"",[87,69954,60063],{"class":97},[87,69956,69957,69959,69961],{"class":89,"line":2287},[87,69958,963],{"class":97},[87,69960,52278],{"class":93},[87,69962,953],{"class":97},[87,69964,69965],{"class":89,"line":2568},[87,69966,3355],{"emptyLinePlaceholder":1029},[87,69968,69969,69971,69973],{"class":89,"line":2573},[87,69970,938],{"class":97},[87,69972,52737],{"class":93},[87,69974,953],{"class":97},[87,69976,69977,69979,69981,69984,69986],{"class":89,"line":2579},[87,69978,53081],{"class":97},[87,69980,10],{"class":93},[87,69982,69983],{"class":97},">新增学员\u003C\u002F",[87,69985,10],{"class":93},[87,69987,953],{"class":97},[87,69989,69990,69992,69994,69996,69998,70000,70003,70005,70007],{"class":89,"line":2584},[87,69991,53081],{"class":97},[87,69993,67557],{"class":93},[87,69995,943],{"class":205},[87,69997,946],{"class":97},[87,69999,63598],{"class":949},[87,70001,70002],{"class":205}," autocomplete",[87,70004,946],{"class":97},[87,70006,32723],{"class":949},[87,70008,953],{"class":97},[87,70010,70011,70014,70016,70018,70020,70022,70024,70026,70029,70031,70033,70035],{"class":89,"line":2598},[87,70012,70013],{"class":97},"    姓名：\u003C",[87,70015,54757],{"class":93},[87,70017,54760],{"class":205},[87,70019,946],{"class":97},[87,70021,63633],{"class":949},[87,70023,943],{"class":205},[87,70025,946],{"class":97},[87,70027,70028],{"class":949},"\"uname\"",[87,70030,15870],{"class":205},[87,70032,946],{"class":97},[87,70034,70028],{"class":949},[87,70036,60063],{"class":97},[87,70038,70039,70042,70044,70046,70048,70050,70052,70054,70057,70059,70061,70063],{"class":89,"line":2603},[87,70040,70041],{"class":97},"    年龄：\u003C",[87,70043,54757],{"class":93},[87,70045,54760],{"class":205},[87,70047,946],{"class":97},[87,70049,63633],{"class":949},[87,70051,943],{"class":205},[87,70053,946],{"class":97},[87,70055,70056],{"class":949},"\"age\"",[87,70058,15870],{"class":205},[87,70060,946],{"class":97},[87,70062,70056],{"class":949},[87,70064,60063],{"class":97},[87,70066,70067],{"class":89,"line":2609},[87,70068,70069],{"class":97},"    性别:\n",[87,70071,70072,70074,70077,70079,70081,70084,70086,70088,70090],{"class":89,"line":2630},[87,70073,52285],{"class":97},[87,70075,70076],{"class":93},"select",[87,70078,15870],{"class":205},[87,70080,946],{"class":97},[87,70082,70083],{"class":949},"\"gender\"",[87,70085,943],{"class":205},[87,70087,946],{"class":97},[87,70089,70083],{"class":949},[87,70091,953],{"class":97},[87,70093,70094,70096,70099,70101,70103,70105,70108,70110],{"class":89,"line":2635},[87,70095,56170],{"class":97},[87,70097,70098],{"class":93},"option",[87,70100,67583],{"class":205},[87,70102,946],{"class":97},[87,70104,10911],{"class":949},[87,70106,70107],{"class":97},">男\u003C\u002F",[87,70109,70098],{"class":93},[87,70111,953],{"class":97},[87,70113,70114,70116,70118,70120,70122,70124,70127,70129],{"class":89,"line":2649},[87,70115,56170],{"class":97},[87,70117,70098],{"class":93},[87,70119,67583],{"class":205},[87,70121,946],{"class":97},[87,70123,10980],{"class":949},[87,70125,70126],{"class":97},">女\u003C\u002F",[87,70128,70098],{"class":93},[87,70130,953],{"class":97},[87,70132,70133,70135,70137],{"class":89,"line":2654},[87,70134,52714],{"class":97},[87,70136,70076],{"class":93},[87,70138,953],{"class":97},[87,70140,70141,70144,70146,70148,70150,70152,70154,70156,70159,70161,70163,70165],{"class":89,"line":2683},[87,70142,70143],{"class":97},"    薪资：\u003C",[87,70145,54757],{"class":93},[87,70147,54760],{"class":205},[87,70149,946],{"class":97},[87,70151,63633],{"class":949},[87,70153,943],{"class":205},[87,70155,946],{"class":97},[87,70157,70158],{"class":949},"\"salary\"",[87,70160,15870],{"class":205},[87,70162,946],{"class":97},[87,70164,70158],{"class":949},[87,70166,60063],{"class":97},[87,70168,70169,70172,70174,70176,70178,70181,70183,70185,70187],{"class":89,"line":2688},[87,70170,70171],{"class":97},"    就业城市：\u003C",[87,70173,70076],{"class":93},[87,70175,15870],{"class":205},[87,70177,946],{"class":97},[87,70179,70180],{"class":949},"\"city\"",[87,70182,943],{"class":205},[87,70184,946],{"class":97},[87,70186,70180],{"class":949},[87,70188,953],{"class":97},[87,70190,70191,70193,70195,70197,70199,70202,70205,70207],{"class":89,"line":2705},[87,70192,56170],{"class":97},[87,70194,70098],{"class":93},[87,70196,67583],{"class":205},[87,70198,946],{"class":97},[87,70200,70201],{"class":949},"\"北京\"",[87,70203,70204],{"class":97},">北京\u003C\u002F",[87,70206,70098],{"class":93},[87,70208,953],{"class":97},[87,70210,70211,70213,70215,70217,70219,70222,70225,70227],{"class":89,"line":2710},[87,70212,56170],{"class":97},[87,70214,70098],{"class":93},[87,70216,67583],{"class":205},[87,70218,946],{"class":97},[87,70220,70221],{"class":949},"\"上海\"",[87,70223,70224],{"class":97},">上海\u003C\u002F",[87,70226,70098],{"class":93},[87,70228,953],{"class":97},[87,70230,70231,70233,70235,70237,70239,70242,70245,70247],{"class":89,"line":2715},[87,70232,56170],{"class":97},[87,70234,70098],{"class":93},[87,70236,67583],{"class":205},[87,70238,946],{"class":97},[87,70240,70241],{"class":949},"\"广州\"",[87,70243,70244],{"class":97},">广州\u003C\u002F",[87,70246,70098],{"class":93},[87,70248,953],{"class":97},[87,70250,70251,70253,70255,70257,70259,70262,70265,70267],{"class":89,"line":2720},[87,70252,56170],{"class":97},[87,70254,70098],{"class":93},[87,70256,67583],{"class":205},[87,70258,946],{"class":97},[87,70260,70261],{"class":949},"\"深圳\"",[87,70263,70264],{"class":97},">深圳\u003C\u002F",[87,70266,70098],{"class":93},[87,70268,953],{"class":97},[87,70270,70271,70273,70275,70277,70279,70282,70285,70287],{"class":89,"line":2734},[87,70272,56170],{"class":97},[87,70274,70098],{"class":93},[87,70276,67583],{"class":205},[87,70278,946],{"class":97},[87,70280,70281],{"class":949},"\"曹县\"",[87,70283,70284],{"class":97},">曹县\u003C\u002F",[87,70286,70098],{"class":93},[87,70288,953],{"class":97},[87,70290,70291,70293,70295],{"class":89,"line":2739},[87,70292,52714],{"class":97},[87,70294,70076],{"class":93},[87,70296,953],{"class":97},[87,70298,70299,70301,70303,70305,70307,70310,70313,70315],{"class":89,"line":3532},[87,70300,52285],{"class":97},[87,70302,54823],{"class":93},[87,70304,943],{"class":205},[87,70306,946],{"class":97},[87,70308,70309],{"class":949},"\"add\"",[87,70311,70312],{"class":97},">录入\u003C\u002F",[87,70314,54823],{"class":93},[87,70316,953],{"class":97},[87,70318,70319,70321,70323],{"class":89,"line":3546},[87,70320,53354],{"class":97},[87,70322,67557],{"class":93},[87,70324,953],{"class":97},[87,70326,70327],{"class":89,"line":3554},[87,70328,3355],{"emptyLinePlaceholder":1029},[87,70330,70331,70333,70335,70338,70340],{"class":89,"line":3559},[87,70332,53081],{"class":97},[87,70334,10],{"class":93},[87,70336,70337],{"class":97},">就业榜\u003C\u002F",[87,70339,10],{"class":93},[87,70341,953],{"class":97},[87,70343,70344,70346,70348],{"class":89,"line":3565},[87,70345,53081],{"class":97},[87,70347,1235],{"class":93},[87,70349,953],{"class":97},[87,70351,70352,70354,70356],{"class":89,"line":3571},[87,70353,52285],{"class":97},[87,70355,1238],{"class":93},[87,70357,953],{"class":97},[87,70359,70360,70362,70364],{"class":89,"line":3576},[87,70361,56170],{"class":97},[87,70363,1241],{"class":93},[87,70365,953],{"class":97},[87,70367,70368,70370,70372,70375,70377],{"class":89,"line":8898},[87,70369,56238],{"class":97},[87,70371,1244],{"class":93},[87,70373,70374],{"class":97},">序号\u003C\u002F",[87,70376,1244],{"class":93},[87,70378,953],{"class":97},[87,70380,70381,70383,70385,70388,70390],{"class":89,"line":8922},[87,70382,56238],{"class":97},[87,70384,1244],{"class":93},[87,70386,70387],{"class":97},">姓名\u003C\u002F",[87,70389,1244],{"class":93},[87,70391,953],{"class":97},[87,70393,70394,70396,70398,70401,70403],{"class":89,"line":8927},[87,70395,56238],{"class":97},[87,70397,1244],{"class":93},[87,70399,70400],{"class":97},">年龄\u003C\u002F",[87,70402,1244],{"class":93},[87,70404,953],{"class":97},[87,70406,70407,70409,70411,70414,70416],{"class":89,"line":8933},[87,70408,56238],{"class":97},[87,70410,1244],{"class":93},[87,70412,70413],{"class":97},">性别\u003C\u002F",[87,70415,1244],{"class":93},[87,70417,953],{"class":97},[87,70419,70420,70422,70424,70427,70429],{"class":89,"line":8960},[87,70421,56238],{"class":97},[87,70423,1244],{"class":93},[87,70425,70426],{"class":97},">薪资\u003C\u002F",[87,70428,1244],{"class":93},[87,70430,953],{"class":97},[87,70432,70433,70435,70437,70440,70442],{"class":89,"line":8965},[87,70434,56238],{"class":97},[87,70436,1244],{"class":93},[87,70438,70439],{"class":97},">就业城市\u003C\u002F",[87,70441,1244],{"class":93},[87,70443,953],{"class":97},[87,70445,70446,70448,70450,70453,70455],{"class":89,"line":8971},[87,70447,56238],{"class":97},[87,70449,1244],{"class":93},[87,70451,70452],{"class":97},">操作\u003C\u002F",[87,70454,1244],{"class":93},[87,70456,953],{"class":97},[87,70458,70459,70461,70463],{"class":89,"line":8983},[87,70460,56343],{"class":97},[87,70462,1241],{"class":93},[87,70464,953],{"class":97},[87,70466,70467,70469,70471],{"class":89,"line":8995},[87,70468,52714],{"class":97},[87,70470,1238],{"class":93},[87,70472,953],{"class":97},[87,70474,70475,70477,70479],{"class":89,"line":9007},[87,70476,52285],{"class":97},[87,70478,1281],{"class":93},[87,70480,953],{"class":97},[87,70482,70483],{"class":89,"line":10666},[87,70484,70485],{"class":199},"      \u003C!-- \n",[87,70487,70488],{"class":89,"line":10691},[87,70489,70490],{"class":199},"        \u003Ctr>\n",[87,70492,70493],{"class":89,"line":10714},[87,70494,70495],{"class":199},"          \u003Ctd>1001\u003C\u002Ftd>\n",[87,70497,70498],{"class":89,"line":10738},[87,70499,70500],{"class":199},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[87,70502,70503],{"class":89,"line":10743},[87,70504,70505],{"class":199},"          \u003Ctd>19\u003C\u002Ftd>\n",[87,70507,70508],{"class":89,"line":10748},[87,70509,70510],{"class":199},"          \u003Ctd>男\u003C\u002Ftd>\n",[87,70512,70513],{"class":89,"line":10753},[87,70514,70515],{"class":199},"          \u003Ctd>15000\u003C\u002Ftd>\n",[87,70517,70518],{"class":89,"line":10762},[87,70519,70520],{"class":199},"          \u003Ctd>上海\u003C\u002Ftd>\n",[87,70522,70523],{"class":89,"line":10767},[87,70524,70525],{"class":199},"          \u003Ctd>\n",[87,70527,70528],{"class":89,"line":10773},[87,70529,70530],{"class":199},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[87,70532,70533],{"class":89,"line":10794},[87,70534,70535],{"class":199},"          \u003C\u002Ftd>\n",[87,70537,70538],{"class":89,"line":10800},[87,70539,70540],{"class":199},"        \u003C\u002Ftr> \n",[87,70542,70543],{"class":89,"line":10814},[87,70544,70545],{"class":199},"        -->\n",[87,70547,70548,70550,70552],{"class":89,"line":10820},[87,70549,52714],{"class":97},[87,70551,1281],{"class":93},[87,70553,953],{"class":97},[87,70555,70556,70558,70560],{"class":89,"line":10847},[87,70557,53354],{"class":97},[87,70559,1235],{"class":93},[87,70561,953],{"class":97},[87,70563,70564,70566,70568],{"class":89,"line":10856},[87,70565,53081],{"class":97},[87,70567,52750],{"class":93},[87,70569,953],{"class":97},[87,70571,70572],{"class":89,"line":10862},[87,70573,60894],{"class":199},[87,70575,70576,70578,70581,70583,70585,70587,70589,70592],{"class":89,"line":10870},[87,70577,12171],{"class":171},[87,70579,70580],{"class":104}," uname",[87,70582,14514],{"class":171},[87,70584,55332],{"class":97},[87,70586,55335],{"class":205},[87,70588,165],{"class":97},[87,70590,70591],{"class":949},"'.uname'",[87,70593,1108],{"class":97},[87,70595,70596,70598,70600,70602,70604,70606,70608,70611],{"class":89,"line":10875},[87,70597,12171],{"class":171},[87,70599,16638],{"class":104},[87,70601,14514],{"class":171},[87,70603,55332],{"class":97},[87,70605,55335],{"class":205},[87,70607,165],{"class":97},[87,70609,70610],{"class":949},"'.age'",[87,70612,1108],{"class":97},[87,70614,70615,70617,70620,70622,70624,70626,70628,70631],{"class":89,"line":17553},[87,70616,12171],{"class":171},[87,70618,70619],{"class":104}," gender",[87,70621,14514],{"class":171},[87,70623,55332],{"class":97},[87,70625,55335],{"class":205},[87,70627,165],{"class":97},[87,70629,70630],{"class":949},"'.gender'",[87,70632,1108],{"class":97},[87,70634,70635,70637,70640,70642,70644,70646,70648,70651],{"class":89,"line":17559},[87,70636,12171],{"class":171},[87,70638,70639],{"class":104}," salary",[87,70641,14514],{"class":171},[87,70643,55332],{"class":97},[87,70645,55335],{"class":205},[87,70647,165],{"class":97},[87,70649,70650],{"class":949},"'.salary'",[87,70652,1108],{"class":97},[87,70654,70655,70657,70660,70662,70664,70666,70668,70671],{"class":89,"line":17582},[87,70656,12171],{"class":171},[87,70658,70659],{"class":104}," city",[87,70661,14514],{"class":171},[87,70663,55332],{"class":97},[87,70665,55335],{"class":205},[87,70667,165],{"class":97},[87,70669,70670],{"class":949},"'.city'",[87,70672,1108],{"class":97},[87,70674,70675,70677,70680,70682,70684,70686,70688,70691],{"class":89,"line":17588},[87,70676,12171],{"class":171},[87,70678,70679],{"class":104}," tbody",[87,70681,14514],{"class":171},[87,70683,55332],{"class":97},[87,70685,55335],{"class":205},[87,70687,165],{"class":97},[87,70689,70690],{"class":949},"'tbody'",[87,70692,1108],{"class":97},[87,70694,70695],{"class":89,"line":17611},[87,70696,3355],{"emptyLinePlaceholder":1029},[87,70698,70699],{"class":89,"line":17625},[87,70700,70701],{"class":199},"    \u002F\u002F 获取所有带有name属性的元素\n",[87,70703,70704,70706,70709,70711,70713,70715,70717,70720],{"class":89,"line":17645},[87,70705,12171],{"class":171},[87,70707,70708],{"class":104}," items",[87,70710,14514],{"class":171},[87,70712,55332],{"class":97},[87,70714,56617],{"class":205},[87,70716,165],{"class":97},[87,70718,70719],{"class":949},"'[name]'",[87,70721,1108],{"class":97},[87,70723,70724],{"class":89,"line":17651},[87,70725,70726],{"class":199},"    \u002F\u002F 声明一个空的数组\n",[87,70728,70729,70731,70733,70735],{"class":89,"line":17662},[87,70730,12171],{"class":171},[87,70732,58631],{"class":104},[87,70734,14514],{"class":171},[87,70736,52775],{"class":97},[87,70738,70739],{"class":89,"line":17685},[87,70740,70741],{"class":199},"    \u002F\u002F 1.录入模块\n",[87,70743,70744],{"class":89,"line":17707},[87,70745,70746],{"class":199},"    \u002F\u002F 1.1这是一个表单提交事件\n",[87,70748,70749,70751,70754,70756,70758,70760,70762,70765],{"class":89,"line":17712},[87,70750,12171],{"class":171},[87,70752,70753],{"class":104}," info",[87,70755,14514],{"class":171},[87,70757,55332],{"class":97},[87,70759,55335],{"class":205},[87,70761,165],{"class":97},[87,70763,70764],{"class":949},"'.info'",[87,70766,1108],{"class":97},[87,70768,70769,70772,70774,70776,70779,70781,70783,70785,70787],{"class":89,"line":17718},[87,70770,70771],{"class":97},"    info.",[87,70773,58749],{"class":205},[87,70775,165],{"class":97},[87,70777,70778],{"class":949},"'submit'",[87,70780,13385],{"class":97},[87,70782,55385],{"class":171},[87,70784,2614],{"class":97},[87,70786,1173],{"class":492},[87,70788,13392],{"class":97},[87,70790,70791],{"class":89,"line":17732},[87,70792,70793],{"class":199},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[87,70795,70796,70799,70802],{"class":89,"line":17745},[87,70797,70798],{"class":97},"      e.",[87,70800,70801],{"class":205},"preventDefault",[87,70803,2931],{"class":97},[87,70805,70806],{"class":89,"line":17750},[87,70807,60948],{"class":199},[87,70809,70810],{"class":89,"line":17764},[87,70811,3355],{"emptyLinePlaceholder":1029},[87,70813,70814],{"class":89,"line":17769},[87,70815,70816],{"class":199},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[87,70818,70819],{"class":89,"line":17775},[87,70820,70821],{"class":199},"      \u002F\u002F 先遍历循环\n",[87,70823,70824,70826,70828,70830,70832,70834,70836,70838,70840,70843,70845,70847,70849],{"class":89,"line":17780},[87,70825,53221],{"class":171},[87,70827,2614],{"class":97},[87,70829,52784],{"class":171},[87,70831,10388],{"class":97},[87,70833,946],{"class":171},[87,70835,577],{"class":104},[87,70837,10395],{"class":97},[87,70839,938],{"class":171},[87,70841,70842],{"class":97}," items.",[87,70844,52905],{"class":104},[87,70846,4168],{"class":97},[87,70848,3247],{"class":171},[87,70850,13392],{"class":97},[87,70852,70853,70855,70858,70860,70863],{"class":89,"line":17794},[87,70854,3452],{"class":171},[87,70856,70857],{"class":97}," (items[i].value ",[87,70859,55422],{"class":171},[87,70861,70862],{"class":949}," ''",[87,70864,13392],{"class":97},[87,70866,70867,70870,70873,70875,70878],{"class":89,"line":17799},[87,70868,70869],{"class":171},"          return",[87,70871,70872],{"class":205}," alert",[87,70874,165],{"class":97},[87,70876,70877],{"class":949},"'输入内容不能为空'",[87,70879,1108],{"class":97},[87,70881,70882],{"class":89,"line":17804},[87,70883,3484],{"class":97},[87,70885,70886],{"class":89,"line":17818},[87,70887,53335],{"class":97},[87,70889,70890],{"class":89,"line":17830},[87,70891,3355],{"emptyLinePlaceholder":1029},[87,70893,70894],{"class":89,"line":17835},[87,70895,70896],{"class":199},"      \u002F\u002F 创建新的对象\n",[87,70898,70899,70901,70904,70906],{"class":89,"line":17848},[87,70900,59164],{"class":171},[87,70902,70903],{"class":104}," obj",[87,70905,14514],{"class":171},[87,70907,98],{"class":97},[87,70909,70910,70913,70915,70917,70919],{"class":89,"line":17853},[87,70911,70912],{"class":97},"        stuID: arr.",[87,70914,52905],{"class":104},[87,70916,46513],{"class":171},[87,70918,568],{"class":104},[87,70920,32413],{"class":97},[87,70922,70923],{"class":89,"line":17858},[87,70924,70925],{"class":97},"        uname: uname.value,\n",[87,70927,70928],{"class":89,"line":17863},[87,70929,70930],{"class":97},"        age: age.value,\n",[87,70932,70933],{"class":89,"line":17876},[87,70934,70935],{"class":97},"        gender: gender.value,\n",[87,70937,70938],{"class":89,"line":17881},[87,70939,70940],{"class":97},"        salary: salary.value,\n",[87,70942,70943],{"class":89,"line":33580},[87,70944,70945],{"class":97},"        city: city.value\n",[87,70947,70948],{"class":89,"line":33586},[87,70949,53335],{"class":97},[87,70951,70952],{"class":89,"line":33592},[87,70953,70954],{"class":199},"      \u002F\u002F console.log(obj);\n",[87,70956,70957],{"class":89,"line":33598},[87,70958,70959],{"class":199},"      \u002F\u002F 追加到数组里面\n",[87,70961,70962,70964,70966],{"class":89,"line":33604},[87,70963,58943],{"class":97},[87,70965,52821],{"class":205},[87,70967,70968],{"class":97},"(obj)\n",[87,70970,70971],{"class":89,"line":33615},[87,70972,70973],{"class":199},"      \u002F\u002F console.log(arr);\n",[87,70975,70976],{"class":89,"line":33621},[87,70977,70978],{"class":199},"      \u002F\u002F 清空表单  reset重置表单\n",[87,70980,70981,70984,70986,70989],{"class":89,"line":33641},[87,70982,70983],{"class":104},"      this",[87,70985,1651],{"class":97},[87,70987,70988],{"class":205},"reset",[87,70990,2931],{"class":97},[87,70992,70993],{"class":89,"line":33647},[87,70994,70995],{"class":199},"      \u002F\u002F 调用渲染函数\n",[87,70997,70998,71001],{"class":89,"line":33658},[87,70999,71000],{"class":205},"      render",[87,71002,2931],{"class":97},[87,71004,71005],{"class":89,"line":33664},[87,71006,34408],{"class":97},[87,71008,71009],{"class":89,"line":33670},[87,71010,71011],{"class":199},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[87,71013,71014,71017,71020],{"class":89,"line":33676},[87,71015,71016],{"class":171},"    function",[87,71018,71019],{"class":205}," render",[87,71021,11803],{"class":97},[87,71023,71024],{"class":89,"line":33682},[87,71025,71026],{"class":199},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[87,71028,71029,71032,71034],{"class":89,"line":33688},[87,71030,71031],{"class":97},"      tbody.innerHTML ",[87,71033,946],{"class":171},[87,71035,71036],{"class":949}," ''\n",[87,71038,71039],{"class":89,"line":33694},[87,71040,71041],{"class":199},"      \u002F\u002F 遍历数组\n",[87,71043,71044,71046,71048,71050,71052,71054,71056,71058,71060,71062,71064,71066,71068],{"class":89,"line":33700},[87,71045,53221],{"class":171},[87,71047,2614],{"class":97},[87,71049,52784],{"class":171},[87,71051,10388],{"class":97},[87,71053,946],{"class":171},[87,71055,577],{"class":104},[87,71057,10395],{"class":97},[87,71059,938],{"class":171},[87,71061,52902],{"class":97},[87,71063,52905],{"class":104},[87,71065,4168],{"class":97},[87,71067,3247],{"class":171},[87,71069,13392],{"class":97},[87,71071,71072,71074,71077,71079,71081,71084,71086,71089],{"class":89,"line":33720},[87,71073,62206],{"class":171},[87,71075,71076],{"class":104}," tr",[87,71078,14514],{"class":171},[87,71080,55332],{"class":97},[87,71082,71083],{"class":205},"createElement",[87,71085,165],{"class":97},[87,71087,71088],{"class":949},"'tr'",[87,71090,1108],{"class":97},[87,71092,71093,71096,71098],{"class":89,"line":33726},[87,71094,71095],{"class":97},"        tr.innerHTML ",[87,71097,946],{"class":171},[87,71099,71100],{"class":949}," `\n",[87,71102,71103,71106,71108,71110,71112,71115,71118],{"class":89,"line":33742},[87,71104,71105],{"class":949},"        \u003Ctd>${",[87,71107,4834],{"class":97},[87,71109,1982],{"class":949},[87,71111,1536],{"class":97},[87,71113,71114],{"class":949},"].",[87,71116,71117],{"class":97},"stuID",[87,71119,71120],{"class":949},"}\u003C\u002Ftd>\n",[87,71122,71123,71126,71128,71130,71132,71134,71137],{"class":89,"line":33748},[87,71124,71125],{"class":949},"          \u003Ctd>${",[87,71127,4834],{"class":97},[87,71129,1982],{"class":949},[87,71131,1536],{"class":97},[87,71133,71114],{"class":949},[87,71135,71136],{"class":97},"uname",[87,71138,71120],{"class":949},[87,71140,71141,71143,71145,71147,71149,71151,71154],{"class":89,"line":33762},[87,71142,71125],{"class":949},[87,71144,4834],{"class":97},[87,71146,1982],{"class":949},[87,71148,1536],{"class":97},[87,71150,71114],{"class":949},[87,71152,71153],{"class":97},"age",[87,71155,71120],{"class":949},[87,71157,71158,71160,71162,71164,71166,71168,71171],{"class":89,"line":33768},[87,71159,71125],{"class":949},[87,71161,4834],{"class":97},[87,71163,1982],{"class":949},[87,71165,1536],{"class":97},[87,71167,71114],{"class":949},[87,71169,71170],{"class":97},"gender",[87,71172,71120],{"class":949},[87,71174,71175,71177,71179,71181,71183,71185,71188],{"class":89,"line":33783},[87,71176,71125],{"class":949},[87,71178,4834],{"class":97},[87,71180,1982],{"class":949},[87,71182,1536],{"class":97},[87,71184,71114],{"class":949},[87,71186,71187],{"class":97},"salary",[87,71189,71120],{"class":949},[87,71191,71192,71194,71196,71198,71200,71202,71205],{"class":89,"line":33789},[87,71193,71125],{"class":949},[87,71195,4834],{"class":97},[87,71197,1982],{"class":949},[87,71199,1536],{"class":97},[87,71201,71114],{"class":949},[87,71203,71204],{"class":97},"city",[87,71206,71120],{"class":949},[87,71208,71209],{"class":89,"line":33798},[87,71210,70525],{"class":949},[87,71212,71213,71216,71218],{"class":89,"line":33804},[87,71214,71215],{"class":949},"            \u003Ca href=\"javascript:\" data-id=${",[87,71217,1536],{"class":97},[87,71219,71220],{"class":949},"}>删除\u003C\u002Fa>\n",[87,71222,71223],{"class":89,"line":33813},[87,71224,71225],{"class":949},"          \u003C\u002Ftd> \n",[87,71227,71228],{"class":89,"line":33819},[87,71229,71230],{"class":949},"          `\n",[87,71232,71233],{"class":89,"line":33825},[87,71234,71235],{"class":199},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[87,71237,71238,71241,71244],{"class":89,"line":33834},[87,71239,71240],{"class":97},"        tbody.",[87,71242,71243],{"class":205},"appendChild",[87,71245,71246],{"class":97},"(tr)\n",[87,71248,71249],{"class":89,"line":33840},[87,71250,53335],{"class":97},[87,71252,71253],{"class":89,"line":33851},[87,71254,3142],{"class":97},[87,71256,71257],{"class":89,"line":33857},[87,71258,3355],{"emptyLinePlaceholder":1029},[87,71260,71261],{"class":89,"line":33876},[87,71262,71263],{"class":199},"    \u002F\u002F 3.删除委托\n",[87,71265,71266],{"class":89,"line":33882},[87,71267,71268],{"class":199},"    \u002F\u002F 3.1 事件委托 tbody\n",[87,71270,71271,71274,71276,71278,71280,71282,71284,71286,71288],{"class":89,"line":33893},[87,71272,71273],{"class":97},"    tbody.",[87,71275,58749],{"class":205},[87,71277,165],{"class":97},[87,71279,58754],{"class":949},[87,71281,13385],{"class":97},[87,71283,55385],{"class":171},[87,71285,2614],{"class":97},[87,71287,1173],{"class":492},[87,71289,13392],{"class":97},[87,71291,71292,71294,71296,71298,71300],{"class":89,"line":33899},[87,71293,55416],{"class":171},[87,71295,67966],{"class":97},[87,71297,55422],{"class":171},[87,71299,69188],{"class":949},[87,71301,13392],{"class":97},[87,71303,71304],{"class":89,"line":33919},[87,71305,71306],{"class":199},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[87,71308,71309],{"class":89,"line":33935},[87,71310,71311],{"class":199},"        \u002F\u002F console.log(e.target.dataset.id);\n",[87,71313,71314],{"class":89,"line":33941},[87,71315,71316],{"class":199},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[87,71318,71319,71322,71324,71327,71329],{"class":89,"line":33955},[87,71320,71321],{"class":97},"        arr.",[87,71323,58946],{"class":205},[87,71325,71326],{"class":97},"(e.target.dataset.id, ",[87,71328,1313],{"class":104},[87,71330,1108],{"class":97},[87,71332,71333],{"class":89,"line":33961},[87,71334,71335],{"class":199},"        \u002F\u002F 重新渲染一次\n",[87,71337,71338,71341],{"class":89,"line":33967},[87,71339,71340],{"class":205},"        render",[87,71342,2931],{"class":97},[87,71344,71345],{"class":89,"line":33978},[87,71346,53335],{"class":97},[87,71348,71349],{"class":89,"line":33984},[87,71350,34408],{"class":97},[87,71352,71353,71355,71357],{"class":89,"line":33990},[87,71354,53354],{"class":97},[87,71356,52750],{"class":93},[87,71358,953],{"class":97},[87,71360,71361],{"class":89,"line":34000},[87,71362,3355],{"emptyLinePlaceholder":1029},[87,71364,71365,71367,71369],{"class":89,"line":34006},[87,71366,963],{"class":97},[87,71368,52737],{"class":93},[87,71370,953],{"class":97},[87,71372,71373],{"class":89,"line":34017},[87,71374,3355],{"emptyLinePlaceholder":1029},[87,71376,71377,71379,71381],{"class":89,"line":34023},[87,71378,963],{"class":97},[87,71380,51581],{"class":93},[87,71382,953],{"class":97},[19,71384,71385],{},"样式：",[77,71387,71391],{"className":71388,"code":71389,"language":71390,"meta":82,"style":82},"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",[84,71392,71393,71398,71407,71416,71420,71424,71429,71439,71444,71448,71453,71463,71468,71477,71481,71485,71490,71495,71504,71514,71519,71523,71528,71537,71547,71552,71562,71572,71576,71581,71589,71593,71598,71603,71608,71616,71625,71629,71634,71643,71647,71652,71661,71665,71670,71679,71688,71696,71700,71705,71714,71723,71732,71742,71748,71757,71767,71777,71781,71786,71795,71803,71813,71821,71829,71838,71848,71856,71860,71865,71874],{"__ignoreMap":82},[87,71394,71395],{"class":89,"line":90},[87,71396,71397],{"class":97},"* {\n",[87,71399,71400,71402,71404],{"class":89,"line":101},[87,71401,105],{"class":93},[87,71403,108],{"class":97},[87,71405,71406],{"class":949},"0;\n",[87,71408,71409,71412,71414],{"class":89,"line":120},[87,71410,71411],{"class":949},"  padding",[87,71413,108],{"class":97},[87,71415,71406],{"class":949},[87,71417,71418],{"class":89,"line":222},[87,71419,123],{"class":97},[87,71421,71422],{"class":89,"line":234},[87,71423,3355],{"emptyLinePlaceholder":1029},[87,71425,71426],{"class":89,"line":256},[87,71427,71428],{"class":949},"a {\n",[87,71430,71431,71434,71436],{"class":89,"line":269},[87,71432,71433],{"class":93},"  text-decoration",[87,71435,108],{"class":97},[87,71437,71438],{"class":949},"none;\n",[87,71440,71441],{"class":89,"line":463},[87,71442,71443],{"class":949},"  color:#721c24;\n",[87,71445,71446],{"class":89,"line":469},[87,71447,123],{"class":97},[87,71449,71450],{"class":89,"line":2287},[87,71451,71452],{"class":949},"h1 {\n",[87,71454,71455,71458,71460],{"class":89,"line":2568},[87,71456,71457],{"class":93},"  text-align",[87,71459,108],{"class":97},[87,71461,71462],{"class":949},"center;\n",[87,71464,71465],{"class":89,"line":2573},[87,71466,71467],{"class":949},"  color:#333;\n",[87,71469,71470,71472,71474],{"class":89,"line":2579},[87,71471,105],{"class":93},[87,71473,108],{"class":97},[87,71475,71476],{"class":949},"20px 0;\n",[87,71478,71479],{"class":89,"line":2584},[87,71480,3629],{"class":97},[87,71482,71483],{"class":89,"line":2598},[87,71484,123],{"class":97},[87,71486,71487],{"class":89,"line":2603},[87,71488,71489],{"class":949},"table {\n",[87,71491,71492],{"class":89,"line":2609},[87,71493,71494],{"class":949},"  margin:0 auto;\n",[87,71496,71497,71499,71501],{"class":89,"line":2630},[87,71498,213],{"class":93},[87,71500,108],{"class":97},[87,71502,71503],{"class":949},"800px;\n",[87,71505,71506,71509,71511],{"class":89,"line":2635},[87,71507,71508],{"class":93},"  border-collapse",[87,71510,108],{"class":97},[87,71512,71513],{"class":949},"collapse;\n",[87,71515,71516],{"class":89,"line":2649},[87,71517,71518],{"class":949},"  color:#004085;\n",[87,71520,71521],{"class":89,"line":2654},[87,71522,123],{"class":97},[87,71524,71525],{"class":89,"line":2683},[87,71526,71527],{"class":949},"th {\n",[87,71529,71530,71532,71534],{"class":89,"line":2688},[87,71531,71411],{"class":93},[87,71533,108],{"class":97},[87,71535,71536],{"class":949},"10px;\n",[87,71538,71539,71542,71544],{"class":89,"line":2705},[87,71540,71541],{"class":93},"  background",[87,71543,108],{"class":97},[87,71545,71546],{"class":199},"#cfe5ff;\n",[87,71548,71549],{"class":89,"line":2710},[87,71550,71551],{"class":97},"  \n",[87,71553,71554,71557,71559],{"class":89,"line":2715},[87,71555,71556],{"class":93},"  font-size",[87,71558,108],{"class":97},[87,71560,71561],{"class":949},"20px;\n",[87,71563,71564,71567,71569],{"class":89,"line":2720},[87,71565,71566],{"class":93},"  font-weight",[87,71568,108],{"class":97},[87,71570,71571],{"class":949},"400;\n",[87,71573,71574],{"class":89,"line":2734},[87,71575,123],{"class":97},[87,71577,71578],{"class":89,"line":2739},[87,71579,71580],{"class":949},"td,th {\n",[87,71582,71583,71586],{"class":89,"line":3532},[87,71584,71585],{"class":949},"  border:1px solid",[87,71587,71588],{"class":199}," #b8daff;\n",[87,71590,71591],{"class":89,"line":3546},[87,71592,123],{"class":97},[87,71594,71595],{"class":89,"line":3554},[87,71596,71597],{"class":949},"td {\n",[87,71599,71600],{"class":89,"line":3559},[87,71601,71602],{"class":949},"  padding:10px;\n",[87,71604,71605],{"class":89,"line":3565},[87,71606,71607],{"class":949},"  color:#666;\n",[87,71609,71610,71612,71614],{"class":89,"line":3571},[87,71611,71457],{"class":93},[87,71613,108],{"class":97},[87,71615,71462],{"class":949},[87,71617,71618,71620,71622],{"class":89,"line":3576},[87,71619,71556],{"class":93},[87,71621,108],{"class":97},[87,71623,71624],{"class":949},"16px;\n",[87,71626,71627],{"class":89,"line":8898},[87,71628,123],{"class":97},[87,71630,71631],{"class":89,"line":8922},[87,71632,71633],{"class":949},"tbody tr {\n",[87,71635,71636,71638,71640],{"class":89,"line":8927},[87,71637,71541],{"class":93},[87,71639,108],{"class":97},[87,71641,71642],{"class":199},"#fff;\n",[87,71644,71645],{"class":89,"line":8933},[87,71646,123],{"class":97},[87,71648,71649],{"class":89,"line":8960},[87,71650,71651],{"class":949},"tbody tr:hover {\n",[87,71653,71654,71656,71658],{"class":89,"line":8965},[87,71655,71541],{"class":93},[87,71657,108],{"class":97},[87,71659,71660],{"class":199},"#e1ecf8;\n",[87,71662,71663],{"class":89,"line":8971},[87,71664,123],{"class":97},[87,71666,71667],{"class":89,"line":8983},[87,71668,71669],{"class":949},".info {\n",[87,71671,71672,71674,71676],{"class":89,"line":8995},[87,71673,213],{"class":93},[87,71675,108],{"class":97},[87,71677,71678],{"class":949},"900px;\n",[87,71680,71681,71683,71685],{"class":89,"line":9007},[87,71682,105],{"class":93},[87,71684,108],{"class":97},[87,71686,71687],{"class":949},"50px auto;\n",[87,71689,71690,71692,71694],{"class":89,"line":10666},[87,71691,71457],{"class":93},[87,71693,108],{"class":97},[87,71695,71462],{"class":949},[87,71697,71698],{"class":89,"line":10691},[87,71699,123],{"class":97},[87,71701,71702],{"class":89,"line":10714},[87,71703,71704],{"class":949},".info  input, .info select {\n",[87,71706,71707,71709,71711],{"class":89,"line":10738},[87,71708,213],{"class":93},[87,71710,108],{"class":97},[87,71712,71713],{"class":949},"80px;\n",[87,71715,71716,71718,71720],{"class":89,"line":10743},[87,71717,225],{"class":93},[87,71719,108],{"class":97},[87,71721,71722],{"class":949},"27px;\n",[87,71724,71725,71728,71730],{"class":89,"line":10748},[87,71726,71727],{"class":93},"  outline",[87,71729,108],{"class":97},[87,71731,71438],{"class":949},[87,71733,71734,71737,71739],{"class":89,"line":10753},[87,71735,71736],{"class":93},"  border-radius",[87,71738,108],{"class":97},[87,71740,71741],{"class":949},"5px;\n",[87,71743,71744,71746],{"class":89,"line":10762},[87,71745,71585],{"class":949},[87,71747,71588],{"class":199},[87,71749,71750,71753,71755],{"class":89,"line":10767},[87,71751,71752],{"class":93},"  padding-left",[87,71754,108],{"class":97},[87,71756,71741],{"class":949},[87,71758,71759,71762,71764],{"class":89,"line":10773},[87,71760,71761],{"class":93},"  box-sizing",[87,71763,108],{"class":97},[87,71765,71766],{"class":949},"border-box;\n",[87,71768,71769,71772,71774],{"class":89,"line":10794},[87,71770,71771],{"class":93},"  margin-right",[87,71773,108],{"class":97},[87,71775,71776],{"class":949},"15px;\n",[87,71778,71779],{"class":89,"line":10800},[87,71780,123],{"class":97},[87,71782,71783],{"class":89,"line":10814},[87,71784,71785],{"class":949},".info button {\n",[87,71787,71788,71790,71792],{"class":89,"line":10820},[87,71789,213],{"class":93},[87,71791,108],{"class":97},[87,71793,71794],{"class":949},"60px;\n",[87,71796,71797,71799,71801],{"class":89,"line":10847},[87,71798,225],{"class":93},[87,71800,108],{"class":97},[87,71802,71722],{"class":949},[87,71804,71805,71808,71810],{"class":89,"line":10856},[87,71806,71807],{"class":93},"  background-color",[87,71809,108],{"class":97},[87,71811,71812],{"class":199},"#004085;\n",[87,71814,71815,71817,71819],{"class":89,"line":10862},[87,71816,71727],{"class":93},[87,71818,108],{"class":97},[87,71820,71438],{"class":949},[87,71822,71823,71825,71827],{"class":89,"line":10870},[87,71824,237],{"class":93},[87,71826,108],{"class":97},[87,71828,71406],{"class":949},[87,71830,71831,71834,71836],{"class":89,"line":10875},[87,71832,71833],{"class":93},"  color",[87,71835,108],{"class":97},[87,71837,71642],{"class":199},[87,71839,71840,71843,71845],{"class":89,"line":17553},[87,71841,71842],{"class":93},"  cursor",[87,71844,108],{"class":97},[87,71846,71847],{"class":949},"pointer;\n",[87,71849,71850,71852,71854],{"class":89,"line":17559},[87,71851,71736],{"class":93},[87,71853,108],{"class":97},[87,71855,71741],{"class":949},[87,71857,71858],{"class":89,"line":17582},[87,71859,123],{"class":97},[87,71861,71862],{"class":89,"line":17588},[87,71863,71864],{"class":949},".info .age {\n",[87,71866,71867,71869,71871],{"class":89,"line":17611},[87,71868,213],{"class":93},[87,71870,108],{"class":97},[87,71872,71873],{"class":949},"50px;\n",[87,71875,71876],{"class":89,"line":17625},[87,71877,123],{"class":97},[19,71879,71880],{},"思路：",[19,71882,71883],{},[39,71884],{"alt":82,"src":71885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71887,71888],{},[39,71889],{"alt":82,"src":71890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71892,71893],{},[39,71894],{"alt":82,"src":71895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[44,71897,71899],{"id":71898},"_3315-重绘回流","3.3.15 重绘回流",[19,71901,71902],{},[39,71903],{"alt":82,"src":71904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71906,71907],{},[39,71908],{"alt":82,"src":71909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71911,71912],{},[39,71913],{"alt":82,"src":71914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71916,71918],{"id":71917},"_34-bom","3.4 BOM",[19,71920,71921],{},[39,71922],{"alt":82,"src":71923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71925,71926],{},"平时写的document省略了window而已，实际上是window.document",[19,71928,71929],{},"函数也是这样，调用的时候实际为window.fn()",[19,71931,71932],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71934,71935],{},"window大部分情况下可以省略",[44,71937,71939],{"id":71938},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71941,71942],{},"只执行一次",[19,71944,71945],{},[39,71946],{"alt":82,"src":71947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71949,71950],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71952,71953],{},[39,71954],{"alt":82,"src":71955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[44,71957,71959],{"id":71958},"_342-js执行机制","3.4.2 JS执行机制",[19,71961,71962],{},[39,71963],{"alt":82,"src":71964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71966,71967],{},"两个的结果都是1111 3333 2222",[19,71969,71970],{},[39,71971],{"alt":82,"src":71972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71974,71975],{},[39,71976],{"alt":82,"src":71977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71979,71980],{},[39,71981],{"alt":82,"src":71982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71984,71985],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71987,71988],{},"工作流程：",[19,71990,71991],{},[39,71992],{"alt":82,"src":71993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71995,71996],{},[39,71997],{"alt":82,"src":71998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,72000,72001],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,72003,72004],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[44,72006,72008],{"id":72007},"_343-location对象","3.4.3 location对象",[19,72010,72011],{},"location对象属于window这个全局对象下的，可以 省略window",[19,72013,72014],{},[39,72015],{"alt":82,"src":72016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,72018,72019],{},"href可以跳转页面",[1055,72021,72022],{},[29,72023,72024],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,72026,72027],{},"search得到提交信息之后网站后边的地址",[19,72029,72030],{},[39,72031],{"alt":82,"src":72032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,72034,72035],{},[39,72036],{"alt":82,"src":72037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[1055,72039,72040],{"start":101},[29,72041,72042],{},"hash:这个获取单页面应用#后边的地址",[19,72044,72045],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,72047,72048],{},[39,72049],{"alt":82,"src":72050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[77,72052,72054],{"className":54004,"code":72053,"language":54006,"meta":82,"style":82},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[84,72055,72056,72076,72096],{"__ignoreMap":82},[87,72057,72058,72060,72062,72064,72066,72069,72072,72074],{"class":89,"line":90},[87,72059,53081],{"class":97},[87,72061,1334],{"class":93},[87,72063,61993],{"class":205},[87,72065,946],{"class":97},[87,72067,72068],{"class":949},"\"#\u002Fmy\"",[87,72070,72071],{"class":97},">我的\u003C\u002F",[87,72073,1334],{"class":93},[87,72075,953],{"class":97},[87,72077,72078,72080,72082,72084,72086,72089,72092,72094],{"class":89,"line":101},[87,72079,53081],{"class":97},[87,72081,1334],{"class":93},[87,72083,61993],{"class":205},[87,72085,946],{"class":97},[87,72087,72088],{"class":949},"\"#\u002Ffriend\"",[87,72090,72091],{"class":97},">关注\u003C\u002F",[87,72093,1334],{"class":93},[87,72095,953],{"class":97},[87,72097,72098,72100,72102,72104,72106,72109,72112,72114],{"class":89,"line":120},[87,72099,53081],{"class":97},[87,72101,1334],{"class":93},[87,72103,61993],{"class":205},[87,72105,946],{"class":97},[87,72107,72108],{"class":949},"\"#\u002Fdownload\"",[87,72110,72111],{"class":97},">下载\u003C\u002F",[87,72113,1334],{"class":93},[87,72115,953],{"class":97},[19,72117,72118],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[1055,72120,72121],{"start":120},[29,72122,72123,72124,72126,72127,72129],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54652,72125],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54652,72128],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[44,72131,72133],{"id":72132},"_345-navigator对象","3.4.5 navigator对象",[19,72135,72136],{},[39,72137],{"alt":82,"src":72138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[77,72140,72144],{"className":72141,"code":72142,"language":72143,"meta":82,"style":82},"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",[84,72145,72146,72151,72162,72174,72179,72230,72271,72276,72289,72301,72306],{"__ignoreMap":82},[87,72147,72148],{"class":89,"line":90},[87,72149,72150],{"class":199},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[87,72152,72153,72155,72157,72159],{"class":89,"line":101},[87,72154,1322],{"class":171},[87,72156,165],{"class":97},[87,72158,55385],{"class":171},[87,72160,72161],{"class":97}," () { \n",[87,72163,72164,72166,72169,72171],{"class":89,"line":120},[87,72165,7742],{"class":171},[87,72167,72168],{"class":104}," userAgent",[87,72170,14514],{"class":171},[87,72172,72173],{"class":97}," navigator.userAgent \n",[87,72175,72176],{"class":89,"line":222},[87,72177,72178],{"class":199},"\u002F\u002F 验证是否为Android或iPhone \n",[87,72180,72181,72183,72186,72188,72191,72194,72196,72198,72201,72203,72206,72210,72212,72214,72216,72219,72221,72223,72225,72227],{"class":89,"line":234},[87,72182,7742],{"class":171},[87,72184,72185],{"class":104}," android",[87,72187,14514],{"class":171},[87,72189,72190],{"class":97}," userAgent.",[87,72192,72193],{"class":205},"match",[87,72195,165],{"class":97},[87,72197,1677],{"class":949},[87,72199,72200],{"class":48924},"(Android);",[87,72202,2077],{"class":171},[87,72204,72205],{"class":104},"[\\s",[87,72207,72209],{"class":72208},"snhLl","\\\u002F",[87,72211,2031],{"class":104},[87,72213,1575],{"class":171},[87,72215,165],{"class":48924},[87,72217,72218],{"class":104},"[\\d.]",[87,72220,1575],{"class":171},[87,72222,1524],{"class":48924},[87,72224,2077],{"class":171},[87,72226,1677],{"class":949},[87,72228,72229],{"class":97},") \n",[87,72231,72232,72234,72237,72239,72241,72243,72245,72247,72250,72253,72256,72258,72260,72263,72265,72267,72269],{"class":89,"line":256},[87,72233,7742],{"class":171},[87,72235,72236],{"class":104}," iphone",[87,72238,14514],{"class":171},[87,72240,72190],{"class":97},[87,72242,72193],{"class":205},[87,72244,165],{"class":97},[87,72246,1677],{"class":949},[87,72248,72249],{"class":48924},"(iPhone",[87,72251,72252],{"class":104},"\\s",[87,72254,72255],{"class":48924},"OS)",[87,72257,72252],{"class":104},[87,72259,165],{"class":48924},[87,72261,72262],{"class":104},"[\\d_]",[87,72264,1575],{"class":171},[87,72266,1524],{"class":48924},[87,72268,1677],{"class":949},[87,72270,72229],{"class":97},[87,72272,72273],{"class":89,"line":269},[87,72274,72275],{"class":199},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[87,72277,72278,72280,72283,72286],{"class":89,"line":463},[87,72279,2488],{"class":171},[87,72281,72282],{"class":97}," (android ",[87,72284,72285],{"class":171},"||",[87,72287,72288],{"class":97}," iphone) { \n",[87,72290,72291,72294,72296,72299],{"class":89,"line":469},[87,72292,72293],{"class":97},"location.href ",[87,72295,946],{"class":171},[87,72297,72298],{"class":949}," 'http:\u002F\u002Fm.itcast.cn'",[87,72300,3629],{"class":97},[87,72302,72303],{"class":89,"line":2287},[87,72304,72305],{"class":97},"} \n",[87,72307,72308],{"class":89,"line":2568},[87,72309,72310],{"class":97},"})()\n",[44,72312,72314],{"id":72313},"_346-histroy对象","3.4.6 histroy对象",[19,72316,72317],{},[39,72318],{"alt":82,"src":72319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,72321,72322],{},"浏览器地址的前进与后退!!!",[19,72324,72325],{},"history.back() 等效于 history.go(-1)",[19,72327,72328],{},"history.forward() 等效于 history.go(1)",[14,72330,72332],{"id":72331},"_35-本地存储","3.5 本地存储",[1055,72334,72335,72338,72341],{},[29,72336,72337],{},"数据存储在用户浏览器中",[29,72339,72340],{},"设置、读取方便、甚至页面刷新不丢失数据",[29,72342,72343],{},"容量较大，sessionStorage和localStorage约 5M 左右",[44,72345,72347],{"id":72346},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,72349,72350],{},"只能存储字符串",[19,72352,72353],{},[39,72354],{"alt":82,"src":72355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,72357,72358],{},[39,72359],{"alt":82,"src":72360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,72362,72363],{},"键值对要加引号,不然就会当变量来看了",[19,72365,72366],{},"localStorage.setItem('uname', 'pink')",[19,72368,72369],{},"刷新之后信息不再丢失",[19,72371,72372],{},"操作key,value会跟着变",[19,72374,72375],{},"删除只删除键就可以,即名字",[19,72377,72366],{},[19,72379,72380],{},"改:",[19,72382,72383],{},"localStorage.setItem('uname','red')",[19,72385,72386],{},"有这个键就是改,没有这个键就是改",[19,72388,72389],{},[39,72390],{"alt":82,"src":72391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,72393,72394],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,72396,72397],{},[39,72398],{"alt":82,"src":72399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,72401,72402],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[44,72404,72406],{"id":72405},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,72408,72409],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,72411,72412],{},"特性:",[1055,72414,72415,72418,72421,72424],{},[29,72416,72417],{},"生命周期为关闭浏览器窗口",[29,72419,72420],{},"在同一个窗口(页面)下数据可以共享",[29,72422,72423],{},"以键值对的形式存储使用",[29,72425,72426],{},"用法跟localStorage 基本相同",[44,72428,72430],{"id":72429},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,72432,72433],{},"本地只能存储字符串,无法直接存储复杂数据类型",[77,72435,72437],{"className":54004,"code":72436,"language":54006,"meta":82,"style":82},"\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",[84,72438,72439,72447,72452,72457,72462,72467,72471,72476,72481],{"__ignoreMap":82},[87,72440,72441,72443,72445],{"class":89,"line":90},[87,72442,938],{"class":97},[87,72444,52750],{"class":93},[87,72446,953],{"class":97},[87,72448,72449],{"class":89,"line":101},[87,72450,72451],{"class":97},"    const obj = {\n",[87,72453,72454],{"class":89,"line":120},[87,72455,72456],{"class":97},"      uname: 'pink老师',\n",[87,72458,72459],{"class":89,"line":222},[87,72460,72461],{"class":97},"      age: 18,\n",[87,72463,72464],{"class":89,"line":234},[87,72465,72466],{"class":97},"      gender: '女'\n",[87,72468,72469],{"class":89,"line":256},[87,72470,3142],{"class":97},[87,72472,72473],{"class":89,"line":269},[87,72474,72475],{"class":97},"    \u002F\u002F 存储复杂数据类型\n",[87,72477,72478],{"class":89,"line":463},[87,72479,72480],{"class":97},"    localStorage.setItem('obj', obj)\n",[87,72482,72483,72485,72487],{"class":89,"line":469},[87,72484,53354],{"class":97},[87,72486,52750],{"class":93},[87,72488,953],{"class":97},[19,72490,72491],{},[39,72492],{"alt":82,"src":72493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,72495,72496],{},"如果获取一下数据:",[19,72498,72499],{},"log(localStorage.getItem('obj'))",[19,72501,72502],{},[39,72503],{"alt":82,"src":72504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,72506,72507],{},"发现直接存对象是使用不了的!!!",[49,72509,72511],{"id":72510},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,72513,72514],{},[39,72515],{"alt":82,"src":72516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[77,72518,72520],{"className":51579,"code":72519,"language":51581,"meta":82,"style":82},"\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",[84,72521,72522,72530,72540,72550,72559,72567,72571,72575,72601,72620,72628,72632,72637,72642],{"__ignoreMap":82},[87,72523,72524,72526,72528],{"class":89,"line":90},[87,72525,938],{"class":97},[87,72527,52750],{"class":93},[87,72529,953],{"class":97},[87,72531,72532,72534,72536,72538],{"class":89,"line":101},[87,72533,12171],{"class":171},[87,72535,70903],{"class":104},[87,72537,14514],{"class":171},[87,72539,98],{"class":97},[87,72541,72542,72545,72548],{"class":89,"line":120},[87,72543,72544],{"class":97},"      uname: ",[87,72546,72547],{"class":949},"'pink老师'",[87,72549,32413],{"class":97},[87,72551,72552,72555,72557],{"class":89,"line":222},[87,72553,72554],{"class":97},"      age: ",[87,72556,1743],{"class":104},[87,72558,32413],{"class":97},[87,72560,72561,72564],{"class":89,"line":234},[87,72562,72563],{"class":97},"      gender: ",[87,72565,72566],{"class":949},"'女'\n",[87,72568,72569],{"class":89,"line":256},[87,72570,3142],{"class":97},[87,72572,72573],{"class":89,"line":269},[87,72574,72475],{"class":199},[87,72576,72577,72580,72583,72585,72588,72590,72593,72595,72598],{"class":89,"line":463},[87,72578,72579],{"class":97},"  localStorage.",[87,72581,72582],{"class":205},"setItem",[87,72584,165],{"class":97},[87,72586,72587],{"class":949},"'obj'",[87,72589,13385],{"class":97},[87,72591,72592],{"class":104},"JSON",[87,72594,1651],{"class":97},[87,72596,72597],{"class":205},"stringify",[87,72599,72600],{"class":97},"(obj))\n",[87,72602,72603,72606,72608,72611,72614,72616,72618],{"class":89,"line":469},[87,72604,72605],{"class":97},"  console.",[87,72607,59183],{"class":205},[87,72609,72610],{"class":97},"(localStorage.",[87,72612,72613],{"class":205},"getItem",[87,72615,165],{"class":97},[87,72617,72587],{"class":949},[87,72619,31444],{"class":97},[87,72621,72622,72624,72626],{"class":89,"line":2287},[87,72623,53354],{"class":97},[87,72625,52750],{"class":93},[87,72627,953],{"class":97},[87,72629,72630],{"class":89,"line":2568},[87,72631,71551],{"class":97},[87,72633,72634],{"class":89,"line":2573},[87,72635,72636],{"class":97},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[87,72638,72639],{"class":89,"line":2579},[87,72640,72641],{"class":97},"  类型是字符串的\n",[87,72643,72644],{"class":89,"line":2584},[87,72645,72646],{"class":97},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[49,72648,72650],{"id":72649},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,72652,72653],{},[39,72654],{"alt":82,"src":72655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,72657,72658],{},[39,72659],{"alt":82,"src":72660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[77,72662,72664],{"className":54004,"code":72663,"language":54006,"meta":82,"style":82},"  \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",[84,72665,72666,72674,72678,72682,72686,72690,72694,72699,72704,72709,72714,72719,72724,72729,72734],{"__ignoreMap":82},[87,72667,72668,72670,72672],{"class":89,"line":90},[87,72669,53081],{"class":97},[87,72671,52750],{"class":93},[87,72673,953],{"class":97},[87,72675,72676],{"class":89,"line":101},[87,72677,72451],{"class":97},[87,72679,72680],{"class":89,"line":120},[87,72681,72456],{"class":97},[87,72683,72684],{"class":89,"line":222},[87,72685,72461],{"class":97},[87,72687,72688],{"class":89,"line":234},[87,72689,72466],{"class":97},[87,72691,72692],{"class":89,"line":256},[87,72693,3142],{"class":97},[87,72695,72696],{"class":89,"line":269},[87,72697,72698],{"class":97},"    \u002F\u002F 1.存储复杂数据类型\n",[87,72700,72701],{"class":89,"line":463},[87,72702,72703],{"class":97},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[87,72705,72706],{"class":89,"line":469},[87,72707,72708],{"class":97},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[87,72710,72711],{"class":89,"line":2287},[87,72712,72713],{"class":97},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[87,72715,72716],{"class":89,"line":2568},[87,72717,72718],{"class":97},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[87,72720,72721],{"class":89,"line":2573},[87,72722,72723],{"class":97},"    \u002F\u002F 取\n",[87,72725,72726],{"class":89,"line":2579},[87,72727,72728],{"class":97},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[87,72730,72731],{"class":89,"line":2584},[87,72732,72733],{"class":97},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[87,72735,72736,72738,72740],{"class":89,"line":2598},[87,72737,53354],{"class":97},[87,72739,52750],{"class":93},[87,72741,953],{"class":97},[19,72743,72744],{},[39,72745],{"alt":82,"src":72746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[44,72748,72750],{"id":72749},"_356-数组map方法","3.5.6 数组map方法",[19,72752,72753],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,72755,72756],{},[39,72757],{"alt":82,"src":72758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,72760,72761],{},[39,72762],{"alt":82,"src":72763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,72765,72766,72769],{},[57,72767,72768],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,72771,72772],{},"map有返回值，但是forEach没有返回值",[19,72774,72775],{},"map是个方法。用的时候要加 ()",[19,72777,72778],{},"map返回的是一个数组",[44,72780,72782],{"id":72781},"_357-数组中join方法","3.5.7 数组中join方法",[19,72784,72785],{},[39,72786],{"alt":82,"src":72787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,72789,72790],{},"类似于python中拼接字符串一样！",[1055,72792,72793,72796,72799],{},[29,72794,72795],{},"小括号为空则逗号分开",[29,72797,72798],{},"小括号为空字符串 ''，则元素之间没有分隔符",[29,72800,72801],{},"小括号用啥符号就用进行分割",[44,72803,72805],{"id":72804},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[1055,72807,72808,72811,72814,72817,72820],{},[29,72809,72810],{},"记住本地时间获取快速方式：new Date().toDateString()",[29,72812,72813],{},"尽量减少DOM操作，用好map+join的渲染方式",[29,72815,72816],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[29,72818,72819],{},"return可以实现函数的结束",[29,72821,72822],{},"禁止跳转是 preventDefault() 不要忘记",[77,72824,72826],{"className":51579,"code":72825,"language":51581,"meta":82,"style":82},"\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",[84,72827,72828,72838,72852,72856,72864,72878,72898,72910,72918,72924,72934,72944,72948,72952,72958,72968,72980,72984,72988,72995,73007,73021,73031,73035,73039,73046,73053,73060,73072,73084,73094,73106,73110,73114,73121,73128,73140,73152,73162,73174,73204,73208,73212,73219,73231,73243,73267,73277,73287,73291,73295,73303,73314,73326,73338,73350,73367,73379,73391,73395,73399,73406,73418,73430,73442,73453,73471,73484,73496,73520,73531,73535,73539,73547,73557,73561,73565,73571,73583,73594,73604,73608,73612,73618,73640,73644,73648,73654,73660,73672,73682,73694,73724,73737,73754,73758,73762,73773,73795,73805,73809,73813,73826,73836,73848,73860,73872,73884,73894,73904,73914,73925,73938,73942,73950,73958,73962,73970,73983,74003,74036,74069,74102,74128,74146,74164,74172,74198,74216,74234,74252,74270,74288,74296,74304,74322,74330,74359,74367,74375,74383,74396,74408,74420,74432,74444,74456,74469,74481,74489,74497,74505,74510,74515,74519,74523,74527,74531,74535,74539,74544,74549,74554,74559,74567,74575,74583,74588,74593,74598,74603,74608,74613,74618,74623,74628,74633,74638,74643,74648,74653,74657,74662,74667,74677,74686,74690,74695,74704,74720,74762,74802,74841,74906,74914,74918,74923,74941,74949,74954,74959,74989,74995,75000,75013,75025,75037,75049,75061,75073,75085,75089,75099,75103,75108,75113,75117,75126,75130,75135,75140,75159,75164,75184,75188,75193,75197,75202,75220,75238,75256,75275,75294,75313,75318,75324,75345,75351,75360,75366,75372,75378,75405,75418,75423,75433,75439,75445,75451,75457,75462,75468,75474,75480,75486,75519,75524,75529,75534,75539,75545,75551,75557,75568,75573,75579,75586,75600,75606,75630,75635,75640,75646,75652,75673,75679,75692,75698,75704,75710,75716,75721,75727,75733,75739,75757,75771,75777,75785,75791,75813,75818,75823,75828,75833,75838,75847,75856,75861],{"__ignoreMap":82},[87,72829,72830,72832,72834,72836],{"class":89,"line":90},[87,72831,52243],{"class":97},[87,72833,52246],{"class":93},[87,72835,52249],{"class":205},[87,72837,953],{"class":97},[87,72839,72840,72842,72844,72846,72848,72850],{"class":89,"line":101},[87,72841,938],{"class":97},[87,72843,51581],{"class":93},[87,72845,52260],{"class":205},[87,72847,946],{"class":97},[87,72849,52265],{"class":949},[87,72851,953],{"class":97},[87,72853,72854],{"class":89,"line":120},[87,72855,3355],{"emptyLinePlaceholder":1029},[87,72857,72858,72860,72862],{"class":89,"line":222},[87,72859,938],{"class":97},[87,72861,52278],{"class":93},[87,72863,953],{"class":97},[87,72865,72866,72868,72870,72872,72874,72876],{"class":89,"line":234},[87,72867,53081],{"class":97},[87,72869,52288],{"class":93},[87,72871,52291],{"class":205},[87,72873,946],{"class":97},[87,72875,52296],{"class":949},[87,72877,953],{"class":97},[87,72879,72880,72882,72884,72886,72888,72890,72892,72894,72896],{"class":89,"line":256},[87,72881,53081],{"class":97},[87,72883,52288],{"class":93},[87,72885,15870],{"class":205},[87,72887,946],{"class":97},[87,72889,52335],{"class":949},[87,72891,52315],{"class":205},[87,72893,946],{"class":97},[87,72895,52342],{"class":949},[87,72897,953],{"class":97},[87,72899,72900,72902,72904,72906,72908],{"class":89,"line":269},[87,72901,53081],{"class":97},[87,72903,52351],{"class":93},[87,72905,52354],{"class":97},[87,72907,52351],{"class":93},[87,72909,953],{"class":97},[87,72911,72912,72914,72916],{"class":89,"line":463},[87,72913,53081],{"class":97},[87,72915,1006],{"class":93},[87,72917,953],{"class":97},[87,72919,72920,72922],{"class":89,"line":469},[87,72921,7353],{"class":93},[87,72923,98],{"class":97},[87,72925,72926,72928,72930,72932],{"class":89,"line":2287},[87,72927,55631],{"class":104},[87,72929,108],{"class":97},[87,72931,111],{"class":104},[87,72933,117],{"class":97},[87,72935,72936,72938,72940,72942],{"class":89,"line":2568},[87,72937,55642],{"class":104},[87,72939,108],{"class":97},[87,72941,111],{"class":104},[87,72943,117],{"class":97},[87,72945,72946],{"class":89,"line":2573},[87,72947,3142],{"class":97},[87,72949,72950],{"class":89,"line":2579},[87,72951,3355],{"emptyLinePlaceholder":1029},[87,72953,72954,72956],{"class":89,"line":2584},[87,72955,58215],{"class":93},[87,72957,98],{"class":97},[87,72959,72960,72962,72964,72966],{"class":89,"line":2598},[87,72961,58222],{"class":104},[87,72963,108],{"class":97},[87,72965,318],{"class":104},[87,72967,117],{"class":97},[87,72969,72970,72972,72974,72976,72978],{"class":89,"line":2603},[87,72971,63012],{"class":104},[87,72973,108],{"class":97},[87,72975,1792],{"class":104},[87,72977,245],{"class":171},[87,72979,117],{"class":97},[87,72981,72982],{"class":89,"line":2609},[87,72983,3142],{"class":97},[87,72985,72986],{"class":89,"line":2630},[87,72987,3355],{"emptyLinePlaceholder":1029},[87,72989,72990,72993],{"class":89,"line":2635},[87,72991,72992],{"class":205},"    .info",[87,72994,98],{"class":97},[87,72996,72997,72999,73001,73003,73005],{"class":89,"line":2649},[87,72998,55707],{"class":104},[87,73000,108],{"class":97},[87,73002,52432],{"class":104},[87,73004,245],{"class":171},[87,73006,117],{"class":97},[87,73008,73009,73011,73013,73015,73017,73019],{"class":89,"line":2654},[87,73010,55642],{"class":104},[87,73012,108],{"class":97},[87,73014,242],{"class":104},[87,73016,245],{"class":171},[87,73018,114],{"class":104},[87,73020,117],{"class":97},[87,73022,73023,73025,73027,73029],{"class":89,"line":2683},[87,73024,58222],{"class":104},[87,73026,108],{"class":97},[87,73028,318],{"class":104},[87,73030,117],{"class":97},[87,73032,73033],{"class":89,"line":2688},[87,73034,3142],{"class":97},[87,73036,73037],{"class":89,"line":2705},[87,73038,3355],{"emptyLinePlaceholder":1029},[87,73040,73041,73044],{"class":89,"line":2710},[87,73042,73043],{"class":205},"    .uname",[87,73045,32413],{"class":97},[87,73047,73048,73051],{"class":89,"line":2715},[87,73049,73050],{"class":205},"    .age",[87,73052,32413],{"class":97},[87,73054,73055,73058],{"class":89,"line":2720},[87,73056,73057],{"class":205},"    .salary",[87,73059,98],{"class":97},[87,73061,73062,73064,73066,73068,73070],{"class":89,"line":2734},[87,73063,55707],{"class":104},[87,73065,108],{"class":97},[87,73067,536],{"class":104},[87,73069,245],{"class":171},[87,73071,117],{"class":97},[87,73073,73074,73076,73078,73080,73082],{"class":89,"line":2739},[87,73075,55721],{"class":104},[87,73077,108],{"class":97},[87,73079,1792],{"class":104},[87,73081,245],{"class":171},[87,73083,117],{"class":97},[87,73085,73086,73088,73090,73092],{"class":89,"line":3532},[87,73087,62715],{"class":104},[87,73089,108],{"class":97},[87,73091,55673],{"class":104},[87,73093,117],{"class":97},[87,73095,73096,73098,73100,73102,73104],{"class":89,"line":3546},[87,73097,62685],{"class":104},[87,73099,108],{"class":97},[87,73101,1668],{"class":104},[87,73103,245],{"class":171},[87,73105,117],{"class":97},[87,73107,73108],{"class":89,"line":3554},[87,73109,3142],{"class":97},[87,73111,73112],{"class":89,"line":3559},[87,73113,3355],{"emptyLinePlaceholder":1029},[87,73115,73116,73119],{"class":89,"line":3565},[87,73117,73118],{"class":205},"    .gender",[87,73120,32413],{"class":97},[87,73122,73123,73126],{"class":89,"line":3571},[87,73124,73125],{"class":205},"    .city",[87,73127,98],{"class":97},[87,73129,73130,73132,73134,73136,73138],{"class":89,"line":3576},[87,73131,55707],{"class":104},[87,73133,108],{"class":97},[87,73135,536],{"class":104},[87,73137,245],{"class":171},[87,73139,117],{"class":97},[87,73141,73142,73144,73146,73148,73150],{"class":89,"line":8898},[87,73143,55721],{"class":104},[87,73145,108],{"class":97},[87,73147,1917],{"class":104},[87,73149,245],{"class":171},[87,73151,117],{"class":97},[87,73153,73154,73156,73158,73160],{"class":89,"line":8922},[87,73155,62715],{"class":104},[87,73157,108],{"class":97},[87,73159,55673],{"class":104},[87,73161,117],{"class":97},[87,73163,73164,73166,73168,73170,73172],{"class":89,"line":8927},[87,73165,62685],{"class":104},[87,73167,108],{"class":97},[87,73169,1668],{"class":104},[87,73171,245],{"class":171},[87,73173,117],{"class":97},[87,73175,73176,73178,73180,73182,73184,73186,73189,73191,73193,73195,73198,73200,73202],{"class":89,"line":8933},[87,73177,62912],{"class":104},[87,73179,108],{"class":97},[87,73181,1313],{"class":104},[87,73183,245],{"class":171},[87,73185,248],{"class":104},[87,73187,73188],{"class":104}," rgb",[87,73190,165],{"class":97},[87,73192,2678],{"class":104},[87,73194,13385],{"class":97},[87,73196,73197],{"class":104},"197",[87,73199,13385],{"class":97},[87,73201,73197],{"class":104},[87,73203,175],{"class":97},[87,73205,73206],{"class":89,"line":8960},[87,73207,3142],{"class":97},[87,73209,73210],{"class":89,"line":8965},[87,73211,3355],{"emptyLinePlaceholder":1029},[87,73213,73214,73217],{"class":89,"line":8971},[87,73215,73216],{"class":93},"    button",[87,73218,98],{"class":97},[87,73220,73221,73223,73225,73227,73229],{"class":89,"line":8983},[87,73222,55721],{"class":104},[87,73224,108],{"class":97},[87,73226,1917],{"class":104},[87,73228,245],{"class":171},[87,73230,117],{"class":97},[87,73232,73233,73235,73237,73239,73241],{"class":89,"line":8995},[87,73234,55707],{"class":104},[87,73236,108],{"class":97},[87,73238,1578],{"class":104},[87,73240,245],{"class":171},[87,73242,117],{"class":97},[87,73244,73245,73247,73249,73252,73254,73256,73258,73261,73263,73265],{"class":89,"line":9007},[87,73246,55820],{"class":104},[87,73248,108],{"class":97},[87,73250,73251],{"class":104},"rgb",[87,73253,165],{"class":97},[87,73255,2060],{"class":104},[87,73257,13385],{"class":97},[87,73259,73260],{"class":104},"187",[87,73262,13385],{"class":97},[87,73264,1395],{"class":104},[87,73266,175],{"class":97},[87,73268,73269,73271,73273,73275],{"class":89,"line":10666},[87,73270,58352],{"class":104},[87,73272,108],{"class":97},[87,73274,61778],{"class":104},[87,73276,117],{"class":97},[87,73278,73279,73281,73283,73285],{"class":89,"line":10691},[87,73280,62912],{"class":104},[87,73282,108],{"class":97},[87,73284,111],{"class":104},[87,73286,117],{"class":97},[87,73288,73289],{"class":89,"line":10714},[87,73290,3142],{"class":97},[87,73292,73293],{"class":89,"line":10738},[87,73294,3355],{"emptyLinePlaceholder":1029},[87,73296,73297,73299,73301],{"class":89,"line":10743},[87,73298,73216],{"class":93},[87,73300,52626],{"class":93},[87,73302,98],{"class":97},[87,73304,73305,73307,73309,73312],{"class":89,"line":10748},[87,73306,55945],{"class":104},[87,73308,108],{"class":97},[87,73310,73311],{"class":104},"inline-block",[87,73313,117],{"class":97},[87,73315,73316,73318,73320,73322,73324],{"class":89,"line":10753},[87,73317,55707],{"class":104},[87,73319,108],{"class":97},[87,73321,242],{"class":104},[87,73323,245],{"class":171},[87,73325,117],{"class":97},[87,73327,73328,73330,73332,73334,73336],{"class":89,"line":10762},[87,73329,55721],{"class":104},[87,73331,108],{"class":97},[87,73333,242],{"class":104},[87,73335,245],{"class":171},[87,73337,117],{"class":97},[87,73339,73340,73342,73344,73346,73348],{"class":89,"line":10767},[87,73341,58295],{"class":104},[87,73343,108],{"class":97},[87,73345,1566],{"class":104},[87,73347,245],{"class":171},[87,73349,117],{"class":97},[87,73351,73352,73354,73356,73358,73360,73362,73365],{"class":89,"line":10773},[87,73353,62912],{"class":104},[87,73355,108],{"class":97},[87,73357,1313],{"class":104},[87,73359,245],{"class":171},[87,73361,248],{"class":104},[87,73363,73364],{"class":104}," #fff",[87,73366,117],{"class":97},[87,73368,73369,73371,73373,73375,73377],{"class":89,"line":10794},[87,73370,56070],{"class":104},[87,73372,108],{"class":97},[87,73374,1414],{"class":104},[87,73376,245],{"class":171},[87,73378,117],{"class":97},[87,73380,73381,73383,73385,73387,73389],{"class":89,"line":10800},[87,73382,62685],{"class":104},[87,73384,108],{"class":97},[87,73386,1313],{"class":104},[87,73388,245],{"class":171},[87,73390,117],{"class":97},[87,73392,73393],{"class":89,"line":10814},[87,73394,3142],{"class":97},[87,73396,73397],{"class":89,"line":10820},[87,73398,3355],{"emptyLinePlaceholder":1029},[87,73400,73401,73404],{"class":89,"line":10847},[87,73402,73403],{"class":205},"    .total",[87,73405,98],{"class":97},[87,73407,73408,73410,73412,73414,73416],{"class":89,"line":10856},[87,73409,55707],{"class":104},[87,73411,108],{"class":97},[87,73413,62565],{"class":104},[87,73415,245],{"class":171},[87,73417,117],{"class":97},[87,73419,73420,73422,73424,73426,73428],{"class":89,"line":10862},[87,73421,55721],{"class":104},[87,73423,108],{"class":97},[87,73425,1496],{"class":104},[87,73427,245],{"class":171},[87,73429,117],{"class":97},[87,73431,73432,73434,73436,73438,73440],{"class":89,"line":10870},[87,73433,58295],{"class":104},[87,73435,108],{"class":97},[87,73437,1496],{"class":104},[87,73439,245],{"class":171},[87,73441,117],{"class":97},[87,73443,73444,73446,73448,73451],{"class":89,"line":10875},[87,73445,58222],{"class":104},[87,73447,108],{"class":97},[87,73449,73450],{"class":104},"right",[87,73452,117],{"class":97},[87,73454,73455,73457,73459,73461,73463,73465,73467,73469],{"class":89,"line":17553},[87,73456,55642],{"class":104},[87,73458,108],{"class":97},[87,73460,1496],{"class":104},[87,73462,245],{"class":171},[87,73464,114],{"class":104},[87,73466,2993],{"class":104},[87,73468,245],{"class":171},[87,73470,117],{"class":97},[87,73472,73473,73476,73478,73480,73482],{"class":89,"line":17559},[87,73474,73475],{"class":104},"      padding-right",[87,73477,108],{"class":97},[87,73479,242],{"class":104},[87,73481,245],{"class":171},[87,73483,117],{"class":97},[87,73485,73486,73488,73490,73492,73494],{"class":89,"line":17582},[87,73487,55858],{"class":104},[87,73489,108],{"class":97},[87,73491,1617],{"class":104},[87,73493,245],{"class":171},[87,73495,117],{"class":97},[87,73497,73498,73500,73502,73504,73506,73509,73511,73514,73516,73518],{"class":89,"line":17588},[87,73499,55820],{"class":104},[87,73501,108],{"class":97},[87,73503,73251],{"class":104},[87,73505,165],{"class":97},[87,73507,73508],{"class":104},"237",[87,73510,13385],{"class":97},[87,73512,73513],{"class":104},"235",[87,73515,13385],{"class":97},[87,73517,73513],{"class":104},[87,73519,175],{"class":97},[87,73521,73522,73525,73527,73529],{"class":89,"line":17611},[87,73523,73524],{"class":104},"      box-sizing",[87,73526,108],{"class":97},[87,73528,61441],{"class":104},[87,73530,117],{"class":97},[87,73532,73533],{"class":89,"line":17625},[87,73534,3142],{"class":97},[87,73536,73537],{"class":89,"line":17645},[87,73538,3355],{"emptyLinePlaceholder":1029},[87,73540,73541,73543,73545],{"class":89,"line":17651},[87,73542,73403],{"class":205},[87,73544,52626],{"class":93},[87,73546,98],{"class":97},[87,73548,73549,73551,73553,73555],{"class":89,"line":17662},[87,73550,58352],{"class":104},[87,73552,108],{"class":97},[87,73554,58357],{"class":104},[87,73556,117],{"class":97},[87,73558,73559],{"class":89,"line":17685},[87,73560,3142],{"class":97},[87,73562,73563],{"class":89,"line":17707},[87,73564,3355],{"emptyLinePlaceholder":1029},[87,73566,73567,73569],{"class":89,"line":17712},[87,73568,65956],{"class":93},[87,73570,98],{"class":97},[87,73572,73573,73575,73577,73579,73581],{"class":89,"line":17718},[87,73574,55707],{"class":104},[87,73576,108],{"class":97},[87,73578,62565],{"class":104},[87,73580,245],{"class":171},[87,73582,117],{"class":97},[87,73584,73585,73587,73589,73592],{"class":89,"line":17732},[87,73586,55642],{"class":104},[87,73588,108],{"class":97},[87,73590,73591],{"class":104},"auto",[87,73593,117],{"class":97},[87,73595,73596,73598,73600,73602],{"class":89,"line":17745},[87,73597,65963],{"class":104},[87,73599,108],{"class":97},[87,73601,65968],{"class":104},[87,73603,117],{"class":97},[87,73605,73606],{"class":89,"line":17750},[87,73607,3142],{"class":97},[87,73609,73610],{"class":89,"line":17764},[87,73611,3355],{"emptyLinePlaceholder":1029},[87,73613,73614,73616],{"class":89,"line":17769},[87,73615,66047],{"class":93},[87,73617,98],{"class":97},[87,73619,73620,73622,73624,73626,73628,73630,73632,73634,73636,73638],{"class":89,"line":17775},[87,73621,55820],{"class":104},[87,73623,108],{"class":97},[87,73625,73251],{"class":104},[87,73627,165],{"class":97},[87,73629,73508],{"class":104},[87,73631,13385],{"class":97},[87,73633,73513],{"class":104},[87,73635,13385],{"class":97},[87,73637,73513],{"class":104},[87,73639,175],{"class":97},[87,73641,73642],{"class":89,"line":17780},[87,73643,3142],{"class":97},[87,73645,73646],{"class":89,"line":17794},[87,73647,3355],{"emptyLinePlaceholder":1029},[87,73649,73650,73652],{"class":89,"line":17799},[87,73651,66047],{"class":93},[87,73653,32413],{"class":97},[87,73655,73656,73658],{"class":89,"line":17804},[87,73657,66113],{"class":93},[87,73659,98],{"class":97},[87,73661,73662,73664,73666,73668,73670],{"class":89,"line":17818},[87,73663,55721],{"class":104},[87,73665,108],{"class":97},[87,73667,1369],{"class":104},[87,73669,245],{"class":171},[87,73671,117],{"class":97},[87,73673,73674,73676,73678,73680],{"class":89,"line":17830},[87,73675,58222],{"class":104},[87,73677,108],{"class":97},[87,73679,24683],{"class":104},[87,73681,117],{"class":97},[87,73683,73684,73686,73688,73690,73692],{"class":89,"line":17835},[87,73685,55858],{"class":104},[87,73687,108],{"class":97},[87,73689,1642],{"class":104},[87,73691,245],{"class":171},[87,73693,117],{"class":97},[87,73695,73696,73698,73700,73702,73704,73706,73708,73710,73713,73715,73718,73720,73722],{"class":89,"line":17848},[87,73697,62912],{"class":104},[87,73699,108],{"class":97},[87,73701,1313],{"class":104},[87,73703,245],{"class":171},[87,73705,248],{"class":104},[87,73707,73188],{"class":104},[87,73709,165],{"class":97},[87,73711,73712],{"class":104},"228",[87,73714,13385],{"class":97},[87,73716,73717],{"class":104},"225",[87,73719,13385],{"class":97},[87,73721,73717],{"class":104},[87,73723,175],{"class":97},[87,73725,73726,73729,73731,73733,73735],{"class":89,"line":17853},[87,73727,73728],{"class":104},"      padding-left",[87,73730,108],{"class":97},[87,73732,1414],{"class":104},[87,73734,245],{"class":171},[87,73736,117],{"class":97},[87,73738,73739,73741,73743,73745,73748,73750,73752],{"class":89,"line":17858},[87,73740,62795],{"class":104},[87,73742,108],{"class":97},[87,73744,29068],{"class":104},[87,73746,73747],{"class":104}," linear",[87,73749,62802],{"class":104},[87,73751,571],{"class":171},[87,73753,117],{"class":97},[87,73755,73756],{"class":89,"line":17863},[87,73757,3142],{"class":97},[87,73759,73760],{"class":89,"line":17876},[87,73761,3355],{"emptyLinePlaceholder":1029},[87,73763,73764,73767,73769,73771],{"class":89,"line":17881},[87,73765,73766],{"class":93},"    tbody",[87,73768,71076],{"class":93},[87,73770,61876],{"class":205},[87,73772,98],{"class":97},[87,73774,73775,73777,73779,73781,73783,73785,73787,73789,73791,73793],{"class":89,"line":33580},[87,73776,55820],{"class":104},[87,73778,108],{"class":97},[87,73780,73251],{"class":104},[87,73782,165],{"class":97},[87,73784,73508],{"class":104},[87,73786,13385],{"class":97},[87,73788,73513],{"class":104},[87,73790,13385],{"class":97},[87,73792,73513],{"class":104},[87,73794,175],{"class":97},[87,73796,73797,73799,73801,73803],{"class":89,"line":33586},[87,73798,62960],{"class":104},[87,73800,108],{"class":97},[87,73802,62965],{"class":104},[87,73804,117],{"class":97},[87,73806,73807],{"class":89,"line":33592},[87,73808,3142],{"class":97},[87,73810,73811],{"class":89,"line":33598},[87,73812,3355],{"emptyLinePlaceholder":1029},[87,73814,73815,73817,73819,73822,73824],{"class":89,"line":33604},[87,73816,73766],{"class":93},[87,73818,71076],{"class":93},[87,73820,73821],{"class":93}," td",[87,73823,2356],{"class":93},[87,73825,98],{"class":97},[87,73827,73828,73830,73832,73834],{"class":89,"line":33615},[87,73829,55945],{"class":104},[87,73831,108],{"class":97},[87,73833,61805],{"class":104},[87,73835,117],{"class":97},[87,73837,73838,73840,73842,73844,73846],{"class":89,"line":33621},[87,73839,55707],{"class":104},[87,73841,108],{"class":97},[87,73843,1999],{"class":104},[87,73845,245],{"class":171},[87,73847,117],{"class":97},[87,73849,73850,73852,73854,73856,73858],{"class":89,"line":33641},[87,73851,55721],{"class":104},[87,73853,108],{"class":97},[87,73855,1917],{"class":104},[87,73857,245],{"class":171},[87,73859,117],{"class":97},[87,73861,73862,73864,73866,73868,73870],{"class":89,"line":33647},[87,73863,58295],{"class":104},[87,73865,108],{"class":97},[87,73867,1917],{"class":104},[87,73869,245],{"class":171},[87,73871,117],{"class":97},[87,73873,73874,73876,73878,73880,73882],{"class":89,"line":33658},[87,73875,63012],{"class":104},[87,73877,108],{"class":97},[87,73879,1176],{"class":104},[87,73881,245],{"class":171},[87,73883,117],{"class":97},[87,73885,73886,73888,73890,73892],{"class":89,"line":33664},[87,73887,58352],{"class":104},[87,73889,108],{"class":97},[87,73891,61778],{"class":104},[87,73893,117],{"class":97},[87,73895,73896,73898,73900,73902],{"class":89,"line":33670},[87,73897,58222],{"class":104},[87,73899,108],{"class":97},[87,73901,318],{"class":104},[87,73903,117],{"class":97},[87,73905,73906,73908,73910,73912],{"class":89,"line":33676},[87,73907,64904],{"class":104},[87,73909,108],{"class":97},[87,73911,55673],{"class":104},[87,73913,117],{"class":97},[87,73915,73916,73918,73920,73923],{"class":89,"line":33682},[87,73917,55820],{"class":104},[87,73919,108],{"class":97},[87,73921,73922],{"class":104},"orange",[87,73924,117],{"class":97},[87,73926,73927,73929,73931,73934,73936],{"class":89,"line":33688},[87,73928,56070],{"class":104},[87,73930,108],{"class":97},[87,73932,73933],{"class":104},"12.5",[87,73935,245],{"class":171},[87,73937,117],{"class":97},[87,73939,73940],{"class":89,"line":33694},[87,73941,3142],{"class":97},[87,73943,73944,73946,73948],{"class":89,"line":33700},[87,73945,53354],{"class":97},[87,73947,1006],{"class":93},[87,73949,953],{"class":97},[87,73951,73952,73954,73956],{"class":89,"line":33720},[87,73953,963],{"class":97},[87,73955,52278],{"class":93},[87,73957,953],{"class":97},[87,73959,73960],{"class":89,"line":33726},[87,73961,3355],{"emptyLinePlaceholder":1029},[87,73963,73964,73966,73968],{"class":89,"line":33742},[87,73965,938],{"class":97},[87,73967,52737],{"class":93},[87,73969,953],{"class":97},[87,73971,73972,73974,73976,73979,73981],{"class":89,"line":33748},[87,73973,53081],{"class":97},[87,73975,14],{"class":93},[87,73977,73978],{"class":97},">学生就业统计表\u003C\u002F",[87,73980,14],{"class":93},[87,73982,953],{"class":97},[87,73984,73985,73987,73989,73991,73993,73995,73997,73999,74001],{"class":89,"line":33762},[87,73986,53081],{"class":97},[87,73988,67557],{"class":93},[87,73990,943],{"class":205},[87,73992,946],{"class":97},[87,73994,63598],{"class":949},[87,73996,70002],{"class":205},[87,73998,946],{"class":97},[87,74000,32723],{"class":949},[87,74002,953],{"class":97},[87,74004,74005,74007,74009,74011,74013,74015,74017,74019,74021,74023,74025,74028,74030,74032,74034],{"class":89,"line":33768},[87,74006,52285],{"class":97},[87,74008,54757],{"class":93},[87,74010,54760],{"class":205},[87,74012,946],{"class":97},[87,74014,63633],{"class":949},[87,74016,15870],{"class":205},[87,74018,946],{"class":97},[87,74020,70028],{"class":949},[87,74022,61956],{"class":205},[87,74024,946],{"class":97},[87,74026,74027],{"class":949},"\"姓名\"",[87,74029,943],{"class":205},[87,74031,946],{"class":97},[87,74033,70028],{"class":949},[87,74035,953],{"class":97},[87,74037,74038,74040,74042,74044,74046,74048,74050,74052,74054,74056,74058,74061,74063,74065,74067],{"class":89,"line":33783},[87,74039,52285],{"class":97},[87,74041,54757],{"class":93},[87,74043,54760],{"class":205},[87,74045,946],{"class":97},[87,74047,63633],{"class":949},[87,74049,15870],{"class":205},[87,74051,946],{"class":97},[87,74053,70056],{"class":949},[87,74055,61956],{"class":205},[87,74057,946],{"class":97},[87,74059,74060],{"class":949},"\"年龄\"",[87,74062,943],{"class":205},[87,74064,946],{"class":97},[87,74066,70056],{"class":949},[87,74068,953],{"class":97},[87,74070,74071,74073,74075,74077,74079,74081,74083,74085,74087,74089,74091,74094,74096,74098,74100],{"class":89,"line":33789},[87,74072,52285],{"class":97},[87,74074,54757],{"class":93},[87,74076,54760],{"class":205},[87,74078,946],{"class":97},[87,74080,63633],{"class":949},[87,74082,15870],{"class":205},[87,74084,946],{"class":97},[87,74086,70158],{"class":949},[87,74088,61956],{"class":205},[87,74090,946],{"class":97},[87,74092,74093],{"class":949},"\"薪资\"",[87,74095,943],{"class":205},[87,74097,946],{"class":97},[87,74099,70158],{"class":949},[87,74101,953],{"class":97},[87,74103,74104,74106,74108,74110,74112,74114,74116,74118,74120,74122,74124,74126],{"class":89,"line":33798},[87,74105,52285],{"class":97},[87,74107,70076],{"class":93},[87,74109,15870],{"class":205},[87,74111,946],{"class":97},[87,74113,70083],{"class":949},[87,74115,15909],{"class":205},[87,74117,946],{"class":97},[87,74119,8602],{"class":949},[87,74121,943],{"class":205},[87,74123,946],{"class":97},[87,74125,70083],{"class":949},[87,74127,953],{"class":97},[87,74129,74130,74132,74134,74136,74138,74140,74142,74144],{"class":89,"line":33804},[87,74131,56170],{"class":97},[87,74133,70098],{"class":93},[87,74135,67583],{"class":205},[87,74137,946],{"class":97},[87,74139,10911],{"class":949},[87,74141,70107],{"class":97},[87,74143,70098],{"class":93},[87,74145,953],{"class":97},[87,74147,74148,74150,74152,74154,74156,74158,74160,74162],{"class":89,"line":33813},[87,74149,56170],{"class":97},[87,74151,70098],{"class":93},[87,74153,67583],{"class":205},[87,74155,946],{"class":97},[87,74157,10980],{"class":949},[87,74159,70126],{"class":97},[87,74161,70098],{"class":93},[87,74163,953],{"class":97},[87,74165,74166,74168,74170],{"class":89,"line":33819},[87,74167,52714],{"class":97},[87,74169,70076],{"class":93},[87,74171,953],{"class":97},[87,74173,74174,74176,74178,74180,74182,74184,74186,74188,74190,74192,74194,74196],{"class":89,"line":33825},[87,74175,52285],{"class":97},[87,74177,70076],{"class":93},[87,74179,15870],{"class":205},[87,74181,946],{"class":97},[87,74183,70180],{"class":949},[87,74185,15909],{"class":205},[87,74187,946],{"class":97},[87,74189,8602],{"class":949},[87,74191,943],{"class":205},[87,74193,946],{"class":97},[87,74195,70180],{"class":949},[87,74197,953],{"class":97},[87,74199,74200,74202,74204,74206,74208,74210,74212,74214],{"class":89,"line":33834},[87,74201,56170],{"class":97},[87,74203,70098],{"class":93},[87,74205,67583],{"class":205},[87,74207,946],{"class":97},[87,74209,70201],{"class":949},[87,74211,70204],{"class":97},[87,74213,70098],{"class":93},[87,74215,953],{"class":97},[87,74217,74218,74220,74222,74224,74226,74228,74230,74232],{"class":89,"line":33840},[87,74219,56170],{"class":97},[87,74221,70098],{"class":93},[87,74223,67583],{"class":205},[87,74225,946],{"class":97},[87,74227,70221],{"class":949},[87,74229,70224],{"class":97},[87,74231,70098],{"class":93},[87,74233,953],{"class":97},[87,74235,74236,74238,74240,74242,74244,74246,74248,74250],{"class":89,"line":33851},[87,74237,56170],{"class":97},[87,74239,70098],{"class":93},[87,74241,67583],{"class":205},[87,74243,946],{"class":97},[87,74245,70241],{"class":949},[87,74247,70244],{"class":97},[87,74249,70098],{"class":93},[87,74251,953],{"class":97},[87,74253,74254,74256,74258,74260,74262,74264,74266,74268],{"class":89,"line":33857},[87,74255,56170],{"class":97},[87,74257,70098],{"class":93},[87,74259,67583],{"class":205},[87,74261,946],{"class":97},[87,74263,70261],{"class":949},[87,74265,70264],{"class":97},[87,74267,70098],{"class":93},[87,74269,953],{"class":97},[87,74271,74272,74274,74276,74278,74280,74282,74284,74286],{"class":89,"line":33876},[87,74273,56170],{"class":97},[87,74275,70098],{"class":93},[87,74277,67583],{"class":205},[87,74279,946],{"class":97},[87,74281,70281],{"class":949},[87,74283,70284],{"class":97},[87,74285,70098],{"class":93},[87,74287,953],{"class":97},[87,74289,74290,74292,74294],{"class":89,"line":33882},[87,74291,52714],{"class":97},[87,74293,70076],{"class":93},[87,74295,953],{"class":97},[87,74297,74298,74300,74302],{"class":89,"line":33893},[87,74299,52285],{"class":97},[87,74301,54823],{"class":93},[87,74303,953],{"class":97},[87,74305,74306,74308,74310,74313,74315,74318,74320],{"class":89,"line":33899},[87,74307,56170],{"class":97},[87,74309,87],{"class":93},[87,74311,74312],{"class":97},">+\u003C\u002F",[87,74314,87],{"class":93},[87,74316,74317],{"class":97},">添加\u003C\u002F",[87,74319,54823],{"class":93},[87,74321,953],{"class":97},[87,74323,74324,74326,74328],{"class":89,"line":33919},[87,74325,53354],{"class":97},[87,74327,67557],{"class":93},[87,74329,953],{"class":97},[87,74331,74332,74334,74336,74338,74340,74342,74345,74347,74350,74352,74355,74357],{"class":89,"line":33935},[87,74333,53081],{"class":97},[87,74335,94],{"class":93},[87,74337,943],{"class":205},[87,74339,946],{"class":97},[87,74341,63514],{"class":949},[87,74343,74344],{"class":97},">共有数据 \u003C",[87,74346,87],{"class":93},[87,74348,74349],{"class":97},">0\u003C\u002F",[87,74351,87],{"class":93},[87,74353,74354],{"class":97},"> 条\u003C\u002F",[87,74356,94],{"class":93},[87,74358,953],{"class":97},[87,74360,74361,74363,74365],{"class":89,"line":33941},[87,74362,53081],{"class":97},[87,74364,1235],{"class":93},[87,74366,953],{"class":97},[87,74368,74369,74371,74373],{"class":89,"line":33955},[87,74370,52285],{"class":97},[87,74372,1238],{"class":93},[87,74374,953],{"class":97},[87,74376,74377,74379,74381],{"class":89,"line":33961},[87,74378,56170],{"class":97},[87,74380,1241],{"class":93},[87,74382,953],{"class":97},[87,74384,74385,74387,74389,74392,74394],{"class":89,"line":33967},[87,74386,56238],{"class":97},[87,74388,1244],{"class":93},[87,74390,74391],{"class":97},">ID\u003C\u002F",[87,74393,1244],{"class":93},[87,74395,953],{"class":97},[87,74397,74398,74400,74402,74404,74406],{"class":89,"line":33978},[87,74399,56238],{"class":97},[87,74401,1244],{"class":93},[87,74403,70387],{"class":97},[87,74405,1244],{"class":93},[87,74407,953],{"class":97},[87,74409,74410,74412,74414,74416,74418],{"class":89,"line":33984},[87,74411,56238],{"class":97},[87,74413,1244],{"class":93},[87,74415,70400],{"class":97},[87,74417,1244],{"class":93},[87,74419,953],{"class":97},[87,74421,74422,74424,74426,74428,74430],{"class":89,"line":33990},[87,74423,56238],{"class":97},[87,74425,1244],{"class":93},[87,74427,70413],{"class":97},[87,74429,1244],{"class":93},[87,74431,953],{"class":97},[87,74433,74434,74436,74438,74440,74442],{"class":89,"line":34000},[87,74435,56238],{"class":97},[87,74437,1244],{"class":93},[87,74439,70426],{"class":97},[87,74441,1244],{"class":93},[87,74443,953],{"class":97},[87,74445,74446,74448,74450,74452,74454],{"class":89,"line":34006},[87,74447,56238],{"class":97},[87,74449,1244],{"class":93},[87,74451,70439],{"class":97},[87,74453,1244],{"class":93},[87,74455,953],{"class":97},[87,74457,74458,74460,74462,74465,74467],{"class":89,"line":34017},[87,74459,56238],{"class":97},[87,74461,1244],{"class":93},[87,74463,74464],{"class":97},">录入时间\u003C\u002F",[87,74466,1244],{"class":93},[87,74468,953],{"class":97},[87,74470,74471,74473,74475,74477,74479],{"class":89,"line":34023},[87,74472,56238],{"class":97},[87,74474,1244],{"class":93},[87,74476,70452],{"class":97},[87,74478,1244],{"class":93},[87,74480,953],{"class":97},[87,74482,74483,74485,74487],{"class":89,"line":34033},[87,74484,56343],{"class":97},[87,74486,1241],{"class":93},[87,74488,953],{"class":97},[87,74490,74491,74493,74495],{"class":89,"line":34038},[87,74492,52714],{"class":97},[87,74494,1238],{"class":93},[87,74496,953],{"class":97},[87,74498,74499,74501,74503],{"class":89,"line":34044},[87,74500,52285],{"class":97},[87,74502,1281],{"class":93},[87,74504,953],{"class":97},[87,74506,74507],{"class":89,"line":34093},[87,74508,74509],{"class":199},"      \u003C!-- \u003Ctr>\n",[87,74511,74512],{"class":89,"line":34140},[87,74513,74514],{"class":199},"        \u003Ctd>1\u003C\u002Ftd>\n",[87,74516,74517],{"class":89,"line":34145},[87,74518,74514],{"class":199},[87,74520,74521],{"class":89,"line":34151},[87,74522,74514],{"class":199},[87,74524,74525],{"class":89,"line":34170},[87,74526,74514],{"class":199},[87,74528,74529],{"class":89,"line":34176},[87,74530,74514],{"class":199},[87,74532,74533],{"class":89,"line":34196},[87,74534,74514],{"class":199},[87,74536,74537],{"class":89,"line":34202},[87,74538,74514],{"class":199},[87,74540,74541],{"class":89,"line":34208},[87,74542,74543],{"class":199},"        \u003Ctd>\n",[87,74545,74546],{"class":89,"line":34218},[87,74547,74548],{"class":199},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[87,74550,74551],{"class":89,"line":34223},[87,74552,74553],{"class":199},"        \u003C\u002Ftd>\n",[87,74555,74556],{"class":89,"line":34229},[87,74557,74558],{"class":199},"      \u003C\u002Ftr> -->\n",[87,74560,74561,74563,74565],{"class":89,"line":34245},[87,74562,52714],{"class":97},[87,74564,1281],{"class":93},[87,74566,953],{"class":97},[87,74568,74569,74571,74573],{"class":89,"line":34290},[87,74570,53354],{"class":97},[87,74572,1235],{"class":93},[87,74574,953],{"class":97},[87,74576,74577,74579,74581],{"class":89,"line":34296},[87,74578,53081],{"class":97},[87,74580,52750],{"class":93},[87,74582,953],{"class":97},[87,74584,74585],{"class":89,"line":34302},[87,74586,74587],{"class":199},"    \u002F\u002F const initData = [{\n",[87,74589,74590],{"class":89,"line":34308},[87,74591,74592],{"class":199},"    \u002F\u002F   unameId: 1,\n",[87,74594,74595],{"class":89,"line":34319},[87,74596,74597],{"class":199},"    \u002F\u002F   uname: '华晨宇',\n",[87,74599,74600],{"class":89,"line":34325},[87,74601,74602],{"class":199},"    \u002F\u002F   age: 22,\n",[87,74604,74605],{"class":89,"line":34331},[87,74606,74607],{"class":199},"    \u002F\u002F   salary: 12000,\n",[87,74609,74610],{"class":89,"line":34337},[87,74611,74612],{"class":199},"    \u002F\u002F   gender: '男',\n",[87,74614,74615],{"class":89,"line":34355},[87,74616,74617],{"class":199},"    \u002F\u002F   city: '北京',\n",[87,74619,74620],{"class":89,"line":34369},[87,74621,74622],{"class":199},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[87,74624,74625],{"class":89,"line":34378},[87,74626,74627],{"class":199},"    \u002F\u002F }]\n",[87,74629,74630],{"class":89,"line":34387},[87,74631,74632],{"class":199},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[87,74634,74635],{"class":89,"line":34396},[87,74636,74637],{"class":199},"    \u002F\u002F 1.渲染业务\n",[87,74639,74640],{"class":89,"line":34405},[87,74641,74642],{"class":199},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[87,74644,74645],{"class":89,"line":34411},[87,74646,74647],{"class":199},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[87,74649,74650],{"class":89,"line":34417},[87,74651,74652],{"class":199},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[87,74654,74655],{"class":89,"line":34425},[87,74656,3355],{"emptyLinePlaceholder":1029},[87,74658,74659],{"class":89,"line":34430},[87,74660,74661],{"class":199},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[87,74663,74664],{"class":89,"line":34436},[87,74665,74666],{"class":199},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[87,74668,74669,74671,74673,74675],{"class":89,"line":34447},[87,74670,12171],{"class":171},[87,74672,58631],{"class":104},[87,74674,14514],{"class":171},[87,74676,52775],{"class":97},[87,74678,74679,74682,74684],{"class":89,"line":34453},[87,74680,74681],{"class":97},"    console.",[87,74683,59183],{"class":205},[87,74685,53349],{"class":97},[87,74687,74688],{"class":89,"line":34473},[87,74689,3355],{"emptyLinePlaceholder":1029},[87,74691,74692],{"class":89,"line":34479},[87,74693,74694],{"class":199},"    \u002F\u002F 时间函数\n",[87,74696,74697,74699,74702],{"class":89,"line":34485},[87,74698,71016],{"class":171},[87,74700,74701],{"class":205}," getTime",[87,74703,11803],{"class":97},[87,74705,74706,74708,74711,74713,74715,74718],{"class":89,"line":34491},[87,74707,59164],{"class":171},[87,74709,74710],{"class":104}," date",[87,74712,14514],{"class":171},[87,74714,12528],{"class":171},[87,74716,74717],{"class":205}," Date",[87,74719,2931],{"class":97},[87,74721,74722,74724,74726,74728,74731,74734,74736,74738,74740,74743,74746,74748,74750,74752,74754,74756,74758,74760],{"class":89,"line":34508},[87,74723,59164],{"class":171},[87,74725,17040],{"class":104},[87,74727,14514],{"class":171},[87,74729,74730],{"class":97}," date.",[87,74732,74733],{"class":205},"getHours",[87,74735,14000],{"class":97},[87,74737,938],{"class":171},[87,74739,2993],{"class":104},[87,74741,74742],{"class":171}," ?",[87,74744,74745],{"class":949}," '0'",[87,74747,46513],{"class":171},[87,74749,74730],{"class":97},[87,74751,74733],{"class":205},[87,74753,14000],{"class":97},[87,74755,1951],{"class":171},[87,74757,74730],{"class":97},[87,74759,74733],{"class":205},[87,74761,2931],{"class":97},[87,74763,74764,74766,74769,74771,74773,74776,74778,74780,74782,74784,74786,74788,74790,74792,74794,74796,74798,74800],{"class":89,"line":34514},[87,74765,59164],{"class":171},[87,74767,74768],{"class":104}," m",[87,74770,14514],{"class":171},[87,74772,74730],{"class":97},[87,74774,74775],{"class":205},"getMinutes",[87,74777,14000],{"class":97},[87,74779,938],{"class":171},[87,74781,2993],{"class":104},[87,74783,74742],{"class":171},[87,74785,74745],{"class":949},[87,74787,46513],{"class":171},[87,74789,74730],{"class":97},[87,74791,74775],{"class":205},[87,74793,14000],{"class":97},[87,74795,1951],{"class":171},[87,74797,74730],{"class":97},[87,74799,74775],{"class":205},[87,74801,2931],{"class":97},[87,74803,74804,74806,74808,74810,74812,74815,74817,74819,74821,74823,74825,74827,74829,74831,74833,74835,74837,74839],{"class":89,"line":34520},[87,74805,59164],{"class":171},[87,74807,9378],{"class":104},[87,74809,14514],{"class":171},[87,74811,74730],{"class":97},[87,74813,74814],{"class":205},"getSeconds",[87,74816,14000],{"class":97},[87,74818,938],{"class":171},[87,74820,2993],{"class":104},[87,74822,74742],{"class":171},[87,74824,74745],{"class":949},[87,74826,46513],{"class":171},[87,74828,74730],{"class":97},[87,74830,74814],{"class":205},[87,74832,14000],{"class":97},[87,74834,1951],{"class":171},[87,74836,74730],{"class":97},[87,74838,74814],{"class":205},[87,74840,2931],{"class":97},[87,74842,74843,74845,74848,74850,74852,74855,74857,74860,74862,74865,74867,74869,74872,74874,74876,74878,74880,74882,74884,74887,74889,74892,74894,74897,74899,74901,74903],{"class":89,"line":34526},[87,74844,59164],{"class":171},[87,74846,74847],{"class":104}," str",[87,74849,14514],{"class":171},[87,74851,63837],{"class":949},[87,74853,74854],{"class":97},"date",[87,74856,1651],{"class":949},[87,74858,74859],{"class":205},"getFullYear",[87,74861,3382],{"class":949},[87,74863,74864],{"class":949},"}\u002F${",[87,74866,74854],{"class":97},[87,74868,1651],{"class":949},[87,74870,74871],{"class":205},"getMonth",[87,74873,14000],{"class":949},[87,74875,1575],{"class":171},[87,74877,568],{"class":104},[87,74879,74864],{"class":949},[87,74881,74854],{"class":97},[87,74883,1651],{"class":949},[87,74885,74886],{"class":205},"getDate",[87,74888,3382],{"class":949},[87,74890,74891],{"class":949},"} ${",[87,74893,1510],{"class":97},[87,74895,74896],{"class":949},"}:${",[87,74898,1637],{"class":97},[87,74900,74896],{"class":949},[87,74902,571],{"class":97},[87,74904,74905],{"class":949},"}`\n",[87,74907,74908,74911],{"class":89,"line":34532},[87,74909,74910],{"class":171},"      return",[87,74912,74913],{"class":97}," str\n",[87,74915,74916],{"class":89,"line":34538},[87,74917,3142],{"class":97},[87,74919,74920],{"class":89,"line":34565},[87,74921,74922],{"class":199},"    \u002F\u002F 渲染函数\n",[87,74924,74925,74927,74929,74931,74933,74935,74937,74939],{"class":89,"line":34589},[87,74926,12171],{"class":171},[87,74928,70679],{"class":104},[87,74930,14514],{"class":171},[87,74932,55332],{"class":97},[87,74934,55335],{"class":205},[87,74936,165],{"class":97},[87,74938,70690],{"class":949},[87,74940,1108],{"class":97},[87,74942,74943,74945,74947],{"class":89,"line":34595},[87,74944,71016],{"class":171},[87,74946,71019],{"class":205},[87,74948,11803],{"class":97},[87,74950,74951],{"class":89,"line":34601},[87,74952,74953],{"class":199},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[87,74955,74956],{"class":89,"line":34607},[87,74957,74958],{"class":199},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[87,74960,74961,74963,74966,74968,74970,74973,74975,74977,74979,74982,74984,74987],{"class":89,"line":34618},[87,74962,59164],{"class":171},[87,74964,74965],{"class":104}," trArr",[87,74967,14514],{"class":171},[87,74969,52902],{"class":97},[87,74971,74972],{"class":205},"map",[87,74974,165],{"class":97},[87,74976,55385],{"class":171},[87,74978,2614],{"class":97},[87,74980,74981],{"class":492},"ele",[87,74983,13385],{"class":97},[87,74985,74986],{"class":492},"index",[87,74988,13392],{"class":97},[87,74990,74991,74993],{"class":89,"line":34629},[87,74992,15702],{"class":171},[87,74994,71100],{"class":949},[87,74996,74997],{"class":89,"line":34635},[87,74998,74999],{"class":949},"      \u003Ctr>\n",[87,75001,75002,75004,75006,75008,75011],{"class":89,"line":34652},[87,75003,71105],{"class":949},[87,75005,74981],{"class":97},[87,75007,1651],{"class":949},[87,75009,75010],{"class":97},"unameId",[87,75012,71120],{"class":949},[87,75014,75015,75017,75019,75021,75023],{"class":89,"line":34675},[87,75016,71105],{"class":949},[87,75018,74981],{"class":97},[87,75020,1651],{"class":949},[87,75022,71136],{"class":97},[87,75024,71120],{"class":949},[87,75026,75027,75029,75031,75033,75035],{"class":89,"line":34698},[87,75028,71105],{"class":949},[87,75030,74981],{"class":97},[87,75032,1651],{"class":949},[87,75034,71153],{"class":97},[87,75036,71120],{"class":949},[87,75038,75039,75041,75043,75045,75047],{"class":89,"line":34704},[87,75040,71105],{"class":949},[87,75042,74981],{"class":97},[87,75044,1651],{"class":949},[87,75046,71170],{"class":97},[87,75048,71120],{"class":949},[87,75050,75051,75053,75055,75057,75059],{"class":89,"line":34709},[87,75052,71105],{"class":949},[87,75054,74981],{"class":97},[87,75056,1651],{"class":949},[87,75058,71187],{"class":97},[87,75060,71120],{"class":949},[87,75062,75063,75065,75067,75069,75071],{"class":89,"line":34718},[87,75064,71105],{"class":949},[87,75066,74981],{"class":97},[87,75068,1651],{"class":949},[87,75070,71204],{"class":97},[87,75072,71120],{"class":949},[87,75074,75075,75077,75079,75081,75083],{"class":89,"line":34728},[87,75076,71105],{"class":949},[87,75078,74981],{"class":97},[87,75080,1651],{"class":949},[87,75082,3342],{"class":97},[87,75084,71120],{"class":949},[87,75086,75087],{"class":89,"line":34734},[87,75088,74543],{"class":949},[87,75090,75091,75094,75096],{"class":89,"line":34739},[87,75092,75093],{"class":949},"          \u003Ca href=\"#\" data-id=\"${",[87,75095,74986],{"class":97},[87,75097,75098],{"class":949},"}\">删除\u003C\u002Fa>\n",[87,75100,75101],{"class":89,"line":34745},[87,75102,74553],{"class":949},[87,75104,75105],{"class":89,"line":34758},[87,75106,75107],{"class":949},"      \u003C\u002Ftr>\n",[87,75109,75110],{"class":89,"line":34764},[87,75111,75112],{"class":949},"  `\n",[87,75114,75115],{"class":89,"line":34775},[87,75116,65748],{"class":97},[87,75118,75119,75121,75123],{"class":89,"line":34786},[87,75120,59180],{"class":97},[87,75122,59183],{"class":205},[87,75124,75125],{"class":97},"(trArr)\n",[87,75127,75128],{"class":89,"line":34805},[87,75129,3355],{"emptyLinePlaceholder":1029},[87,75131,75132],{"class":89,"line":50464},[87,75133,75134],{"class":199},"      \u002F\u002F (2) 把数组转换为字符串join\n",[87,75136,75137],{"class":89,"line":50469},[87,75138,75139],{"class":199},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[87,75141,75142,75144,75146,75149,75152,75154,75157],{"class":89,"line":50478},[87,75143,71031],{"class":97},[87,75145,946],{"class":171},[87,75147,75148],{"class":97}," trArr.",[87,75150,75151],{"class":205},"join",[87,75153,165],{"class":97},[87,75155,75156],{"class":949},"''",[87,75158,1108],{"class":97},[87,75160,75161],{"class":89,"line":50487},[87,75162,75163],{"class":199},"      \u002F\u002F 显示共有几条\n",[87,75165,75166,75168,75170,75172,75175,75178,75180,75182],{"class":89,"line":50492},[87,75167,56707],{"class":97},[87,75169,55335],{"class":205},[87,75171,165],{"class":97},[87,75173,75174],{"class":949},"'.total span'",[87,75176,75177],{"class":97},").innerHTML ",[87,75179,946],{"class":171},[87,75181,52902],{"class":97},[87,75183,56767],{"class":104},[87,75185,75186],{"class":89,"line":50497},[87,75187,3142],{"class":97},[87,75189,75190],{"class":89,"line":50502},[87,75191,75192],{"class":199},"    \u002F\u002F render()\n",[87,75194,75195],{"class":89,"line":50515},[87,75196,3355],{"emptyLinePlaceholder":1029},[87,75198,75199],{"class":89,"line":50520},[87,75200,75201],{"class":199},"    \u002F\u002F 获取DOM对象\n",[87,75203,75204,75206,75208,75210,75212,75214,75216,75218],{"class":89,"line":50529},[87,75205,12171],{"class":171},[87,75207,70753],{"class":104},[87,75209,14514],{"class":171},[87,75211,55332],{"class":97},[87,75213,55335],{"class":205},[87,75215,165],{"class":97},[87,75217,70764],{"class":949},[87,75219,1108],{"class":97},[87,75221,75222,75224,75226,75228,75230,75232,75234,75236],{"class":89,"line":50538},[87,75223,12171],{"class":171},[87,75225,70580],{"class":104},[87,75227,14514],{"class":171},[87,75229,55332],{"class":97},[87,75231,55335],{"class":205},[87,75233,165],{"class":97},[87,75235,70591],{"class":949},[87,75237,1108],{"class":97},[87,75239,75240,75242,75244,75246,75248,75250,75252,75254],{"class":89,"line":50555},[87,75241,12171],{"class":171},[87,75243,16638],{"class":104},[87,75245,14514],{"class":171},[87,75247,55332],{"class":97},[87,75249,55335],{"class":205},[87,75251,165],{"class":97},[87,75253,70610],{"class":949},[87,75255,1108],{"class":97},[87,75257,75259,75261,75263,75265,75267,75269,75271,75273],{"class":89,"line":75258},231,[87,75260,12171],{"class":171},[87,75262,70639],{"class":104},[87,75264,14514],{"class":171},[87,75266,55332],{"class":97},[87,75268,55335],{"class":205},[87,75270,165],{"class":97},[87,75272,70650],{"class":949},[87,75274,1108],{"class":97},[87,75276,75278,75280,75282,75284,75286,75288,75290,75292],{"class":89,"line":75277},232,[87,75279,12171],{"class":171},[87,75281,70619],{"class":104},[87,75283,14514],{"class":171},[87,75285,55332],{"class":97},[87,75287,55335],{"class":205},[87,75289,165],{"class":97},[87,75291,70630],{"class":949},[87,75293,1108],{"class":97},[87,75295,75297,75299,75301,75303,75305,75307,75309,75311],{"class":89,"line":75296},233,[87,75298,12171],{"class":171},[87,75300,70659],{"class":104},[87,75302,14514],{"class":171},[87,75304,55332],{"class":97},[87,75306,55335],{"class":205},[87,75308,165],{"class":97},[87,75310,70670],{"class":949},[87,75312,1108],{"class":97},[87,75314,75316],{"class":89,"line":75315},234,[87,75317,3355],{"emptyLinePlaceholder":1029},[87,75319,75321],{"class":89,"line":75320},235,[87,75322,75323],{"class":199},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[87,75325,75327,75329,75331,75333,75335,75337,75339,75341,75343],{"class":89,"line":75326},236,[87,75328,70771],{"class":97},[87,75330,58749],{"class":205},[87,75332,165],{"class":97},[87,75334,70778],{"class":949},[87,75336,13385],{"class":97},[87,75338,55385],{"class":171},[87,75340,2614],{"class":97},[87,75342,1173],{"class":492},[87,75344,13392],{"class":97},[87,75346,75348],{"class":89,"line":75347},237,[87,75349,75350],{"class":199},"      \u002F\u002F 禁止浏览器跳转\n",[87,75352,75354,75356,75358],{"class":89,"line":75353},238,[87,75355,70798],{"class":97},[87,75357,70801],{"class":205},[87,75359,2931],{"class":97},[87,75361,75363],{"class":89,"line":75362},239,[87,75364,75365],{"class":199},"      \u002F\u002F 非空判断\n",[87,75367,75369],{"class":89,"line":75368},240,[87,75370,75371],{"class":199},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[87,75373,75375],{"class":89,"line":75374},241,[87,75376,75377],{"class":199},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[87,75379,75381,75383,75385,75387,75390,75392,75395,75398,75400,75402],{"class":89,"line":75380},242,[87,75382,55416],{"class":171},[87,75384,2614],{"class":97},[87,75386,1322],{"class":171},[87,75388,75389],{"class":97},"uname.value ",[87,75391,72285],{"class":171},[87,75393,75394],{"class":171}," !",[87,75396,75397],{"class":97},"age.value ",[87,75399,72285],{"class":171},[87,75401,75394],{"class":171},[87,75403,75404],{"class":97},"salary.value) {\n",[87,75406,75408,75410,75412,75414,75416],{"class":89,"line":75407},243,[87,75409,15702],{"class":171},[87,75411,70872],{"class":205},[87,75413,165],{"class":97},[87,75415,70877],{"class":949},[87,75417,1108],{"class":97},[87,75419,75421],{"class":89,"line":75420},244,[87,75422,53335],{"class":97},[87,75424,75426,75428,75430],{"class":89,"line":75425},245,[87,75427,58943],{"class":97},[87,75429,52821],{"class":205},[87,75431,75432],{"class":97},"({\n",[87,75434,75436],{"class":89,"line":75435},246,[87,75437,75438],{"class":199},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[87,75440,75442],{"class":89,"line":75441},247,[87,75443,75444],{"class":199},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[87,75446,75448],{"class":89,"line":75447},248,[87,75449,75450],{"class":199},"        \u002F\u002F 对象的序号应为数组长度+1\n",[87,75452,75454],{"class":89,"line":75453},249,[87,75455,75456],{"class":199},"        \u002F\u002F unameId: arr.length + 1,\n",[87,75458,75460],{"class":89,"line":75459},250,[87,75461,3355],{"emptyLinePlaceholder":1029},[87,75463,75465],{"class":89,"line":75464},251,[87,75466,75467],{"class":199},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[87,75469,75471],{"class":89,"line":75470},252,[87,75472,75473],{"class":199},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[87,75475,75477],{"class":89,"line":75476},253,[87,75478,75479],{"class":199},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[87,75481,75483],{"class":89,"line":75482},254,[87,75484,75485],{"class":199},"        \u002F\u002F 0当假看\n",[87,75487,75489,75492,75494,75496,75499,75501,75503,75505,75508,75510,75512,75515,75517],{"class":89,"line":75488},255,[87,75490,75491],{"class":97},"        unameId: arr.",[87,75493,52905],{"class":104},[87,75495,74742],{"class":171},[87,75497,75498],{"class":97}," arr[arr.",[87,75500,52905],{"class":104},[87,75502,53208],{"class":171},[87,75504,568],{"class":104},[87,75506,75507],{"class":97},"].unameId ",[87,75509,1575],{"class":171},[87,75511,568],{"class":104},[87,75513,75514],{"class":171}," :",[87,75516,568],{"class":104},[87,75518,32413],{"class":97},[87,75520,75522],{"class":89,"line":75521},256,[87,75523,70925],{"class":97},[87,75525,75527],{"class":89,"line":75526},257,[87,75528,70930],{"class":97},[87,75530,75532],{"class":89,"line":75531},258,[87,75533,70940],{"class":97},[87,75535,75537],{"class":89,"line":75536},259,[87,75538,70935],{"class":97},[87,75540,75542],{"class":89,"line":75541},260,[87,75543,75544],{"class":97},"        city: city.value,\n",[87,75546,75548],{"class":89,"line":75547},261,[87,75549,75550],{"class":199},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[87,75552,75554],{"class":89,"line":75553},262,[87,75555,75556],{"class":199},"        \u002F\u002F time: new Date().toDateString()\n",[87,75558,75560,75563,75566],{"class":89,"line":75559},263,[87,75561,75562],{"class":97},"        time: ",[87,75564,75565],{"class":205},"getTime",[87,75567,2931],{"class":97},[87,75569,75571],{"class":89,"line":75570},264,[87,75572,65748],{"class":97},[87,75574,75576],{"class":89,"line":75575},265,[87,75577,75578],{"class":199},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[87,75580,75582,75584],{"class":89,"line":75581},266,[87,75583,71000],{"class":205},[87,75585,2931],{"class":97},[87,75587,75589,75591,75593,75595,75597],{"class":89,"line":75588},267,[87,75590,70983],{"class":104},[87,75592,1651],{"class":97},[87,75594,70988],{"class":205},[87,75596,14000],{"class":97},[87,75598,75599],{"class":199},"\u002F\u002F重置表单\n",[87,75601,75603],{"class":89,"line":75602},268,[87,75604,75605],{"class":199},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[87,75607,75609,75612,75614,75616,75619,75621,75623,75625,75627],{"class":89,"line":75608},269,[87,75610,75611],{"class":97},"      localStorage.",[87,75613,72582],{"class":205},[87,75615,165],{"class":97},[87,75617,75618],{"class":949},"'data'",[87,75620,13385],{"class":97},[87,75622,72592],{"class":104},[87,75624,1651],{"class":97},[87,75626,72597],{"class":205},[87,75628,75629],{"class":97},"(arr))\n",[87,75631,75633],{"class":89,"line":75632},270,[87,75634,34408],{"class":97},[87,75636,75638],{"class":89,"line":75637},271,[87,75639,3355],{"emptyLinePlaceholder":1029},[87,75641,75643],{"class":89,"line":75642},272,[87,75644,75645],{"class":199},"    \u002F\u002F 3.删除业务\n",[87,75647,75649],{"class":89,"line":75648},273,[87,75650,75651],{"class":199},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[87,75653,75655,75657,75659,75661,75663,75665,75667,75669,75671],{"class":89,"line":75654},274,[87,75656,71273],{"class":97},[87,75658,58749],{"class":205},[87,75660,165],{"class":97},[87,75662,58754],{"class":949},[87,75664,13385],{"class":97},[87,75666,55385],{"class":171},[87,75668,2614],{"class":97},[87,75670,1173],{"class":492},[87,75672,13392],{"class":97},[87,75674,75676],{"class":89,"line":75675},275,[87,75677,75678],{"class":199},"      \u002F\u002F 判断是否点击的是删除按钮\n",[87,75680,75682,75684,75686,75688,75690],{"class":89,"line":75681},276,[87,75683,55416],{"class":171},[87,75685,67966],{"class":97},[87,75687,55422],{"class":171},[87,75689,69188],{"class":949},[87,75691,13392],{"class":97},[87,75693,75695],{"class":89,"line":75694},277,[87,75696,75697],{"class":199},"        \u002F\u002F alert(1)\n",[87,75699,75701],{"class":89,"line":75700},278,[87,75702,75703],{"class":199},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[87,75705,75707],{"class":89,"line":75706},279,[87,75708,75709],{"class":199},"        \u002F\u002F console.log(e.target)\n",[87,75711,75713],{"class":89,"line":75712},280,[87,75714,75715],{"class":199},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[87,75717,75719],{"class":89,"line":75718},281,[87,75720,3355],{"emptyLinePlaceholder":1029},[87,75722,75724],{"class":89,"line":75723},282,[87,75725,75726],{"class":199},"        \u002F\u002F 确认框，确然是否真的要删除\n",[87,75728,75730],{"class":89,"line":75729},283,[87,75731,75732],{"class":199},"        \u002F\u002F confirm()为确认框\n",[87,75734,75736],{"class":89,"line":75735},284,[87,75737,75738],{"class":199},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[87,75740,75742,75744,75746,75749,75751,75754],{"class":89,"line":75741},285,[87,75743,3452],{"class":171},[87,75745,2614],{"class":97},[87,75747,75748],{"class":205},"confirm",[87,75750,165],{"class":97},[87,75752,75753],{"class":949},"'您确定要删除这条数据吗？'",[87,75755,75756],{"class":97},")) {\n",[87,75758,75760,75763,75765,75767,75769],{"class":89,"line":75759},286,[87,75761,75762],{"class":97},"          arr.",[87,75764,58946],{"class":205},[87,75766,71326],{"class":97},[87,75768,1313],{"class":104},[87,75770,1108],{"class":97},[87,75772,75774],{"class":89,"line":75773},287,[87,75775,75776],{"class":199},"          \u002F\u002F 3.4 重新渲染页面\n",[87,75778,75780,75783],{"class":89,"line":75779},288,[87,75781,75782],{"class":205},"          render",[87,75784,2931],{"class":97},[87,75786,75788],{"class":89,"line":75787},289,[87,75789,75790],{"class":199},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[87,75792,75794,75797,75799,75801,75803,75805,75807,75809,75811],{"class":89,"line":75793},290,[87,75795,75796],{"class":97},"          localStorage.",[87,75798,72582],{"class":205},[87,75800,165],{"class":97},[87,75802,75618],{"class":949},[87,75804,13385],{"class":97},[87,75806,72592],{"class":104},[87,75808,1651],{"class":97},[87,75810,72597],{"class":205},[87,75812,75629],{"class":97},[87,75814,75816],{"class":89,"line":75815},291,[87,75817,3484],{"class":97},[87,75819,75821],{"class":89,"line":75820},292,[87,75822,53335],{"class":97},[87,75824,75826],{"class":89,"line":75825},293,[87,75827,3355],{"emptyLinePlaceholder":1029},[87,75829,75831],{"class":89,"line":75830},294,[87,75832,34408],{"class":97},[87,75834,75836],{"class":89,"line":75835},295,[87,75837,3355],{"emptyLinePlaceholder":1029},[87,75839,75841,75843,75845],{"class":89,"line":75840},296,[87,75842,53354],{"class":97},[87,75844,52750],{"class":93},[87,75846,953],{"class":97},[87,75848,75850,75852,75854],{"class":89,"line":75849},297,[87,75851,963],{"class":97},[87,75853,52737],{"class":93},[87,75855,953],{"class":97},[87,75857,75859],{"class":89,"line":75858},298,[87,75860,3355],{"emptyLinePlaceholder":1029},[87,75862,75864,75866,75868],{"class":89,"line":75863},299,[87,75865,963],{"class":97},[87,75867,51581],{"class":93},[87,75869,953],{"class":97},[14,75871,75873],{"id":75872},"_36-正则表达式","3.6 正则表达式",[19,75875,75876],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75878,75879],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75881,75882],{},"正则表达式的作用：",[26,75884,75885,75892,75898],{},[29,75886,75887,75888,75891],{},"表单验证（ ",[57,75889,75890],{},"匹配"," ）",[29,75893,75894,75895,75891],{},"过滤敏感词（ ",[57,75896,75897],{},"替换",[29,75899,75900,75901,75891],{},"字符串中提取我们想要的部分（ ",[57,75902,75903],{},"提取",[44,75905,75907],{"id":75906},"_361-语法","3.6.1 语法",[19,75909,75910],{},"正则表达式使用步骤：",[1055,75912,75913,75916],{},[29,75914,75915],{},"定义规则",[29,75917,75918],{},"查找是否匹配",[19,75920,75921],{},"正则表达式里边不需要写引号",[19,75923,75924],{},[39,75925],{"alt":82,"src":75926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75928,75929],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75931,75932],{},"reg.test(str)",[19,75934,75935],{},[39,75936],{"alt":82,"src":75937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75939,75940],{},[39,75941],{"alt":82,"src":75942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[44,75944,75946],{"id":75945},"_362-元字符","3.6.2 元字符",[1055,75948,75949,75952,75955,75958,75965],{},[29,75950,75951],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[29,75953,75954],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[29,75956,75957],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[29,75959,75960,75961],{},"正则验证工具：",[1334,75962,75963],{"href":75963,"rel":75964},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24812],[29,75966,75967],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[49,75969,75971],{"id":75970},"_3621-边界符","3.6.2.1 边界符",[19,75973,75974],{},[39,75975],{"alt":82,"src":75976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75978,75979],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75981,75982],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75984,75985],{},"只匹配一次",[19,75987,75988],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[49,75990,75992],{"id":75991},"_3622-量词","3.6.2.2 量词",[19,75994,75995],{},[39,75996],{"alt":82,"src":75997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75999,76000],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[49,76002,76004],{"id":76003},"_3623-元字符","3.6.2.3 元字符",[19,76006,76007],{},[39,76008],{"alt":82,"src":76009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,76011,76012],{},"匹配的是a或b或c []只选一个",[19,76014,76015],{},[39,76016],{"alt":82,"src":76017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,76019,76020],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,76022,76023],{},[39,76024],{"alt":82,"src":76025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,76027,76028],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,76030,76031],{},[39,76032],{"alt":82,"src":76033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[77,76035,76037],{"className":51579,"code":76036,"language":51581,"meta":82,"style":82},"\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",[84,76038,76039,76049,76063,76067,76075,76089,76109,76121,76129,76133,76141,76149,76154,76185,76212,76240,76244,76249,76277,76308,76313,76318,76349,76381,76413,76417,76422,76453,76483,76513,76517,76522,76553,76584,76614,76644,76648,76653,76686,76690,76695,76726,76757,76761,76766,76797,76827,76858,76862,76867,76899,76930,76961,76988,77019,77051,77084,77115,77146,77178,77209,77217,77225,77229],{"__ignoreMap":82},[87,76040,76041,76043,76045,76047],{"class":89,"line":90},[87,76042,52243],{"class":97},[87,76044,52246],{"class":93},[87,76046,52249],{"class":205},[87,76048,953],{"class":97},[87,76050,76051,76053,76055,76057,76059,76061],{"class":89,"line":101},[87,76052,938],{"class":97},[87,76054,51581],{"class":93},[87,76056,52260],{"class":205},[87,76058,946],{"class":97},[87,76060,52265],{"class":949},[87,76062,953],{"class":97},[87,76064,76065],{"class":89,"line":120},[87,76066,3355],{"emptyLinePlaceholder":1029},[87,76068,76069,76071,76073],{"class":89,"line":222},[87,76070,938],{"class":97},[87,76072,52278],{"class":93},[87,76074,953],{"class":97},[87,76076,76077,76079,76081,76083,76085,76087],{"class":89,"line":234},[87,76078,53081],{"class":97},[87,76080,52288],{"class":93},[87,76082,52291],{"class":205},[87,76084,946],{"class":97},[87,76086,52296],{"class":949},[87,76088,953],{"class":97},[87,76090,76091,76093,76095,76097,76099,76101,76103,76105,76107],{"class":89,"line":256},[87,76092,53081],{"class":97},[87,76094,52288],{"class":93},[87,76096,15870],{"class":205},[87,76098,946],{"class":97},[87,76100,52335],{"class":949},[87,76102,52315],{"class":205},[87,76104,946],{"class":97},[87,76106,52342],{"class":949},[87,76108,953],{"class":97},[87,76110,76111,76113,76115,76117,76119],{"class":89,"line":269},[87,76112,53081],{"class":97},[87,76114,52351],{"class":93},[87,76116,52354],{"class":97},[87,76118,52351],{"class":93},[87,76120,953],{"class":97},[87,76122,76123,76125,76127],{"class":89,"line":463},[87,76124,963],{"class":97},[87,76126,52278],{"class":93},[87,76128,953],{"class":97},[87,76130,76131],{"class":89,"line":469},[87,76132,3355],{"emptyLinePlaceholder":1029},[87,76134,76135,76137,76139],{"class":89,"line":2287},[87,76136,938],{"class":97},[87,76138,52737],{"class":93},[87,76140,953],{"class":97},[87,76142,76143,76145,76147],{"class":89,"line":2568},[87,76144,53081],{"class":97},[87,76146,52750],{"class":93},[87,76148,953],{"class":97},[87,76150,76151],{"class":89,"line":2573},[87,76152,76153],{"class":199},"    \u002F\u002F 元字符中\n",[87,76155,76156,76158,76160,76162,76164,76167,76169,76171,76174,76176,76179,76182],{"class":89,"line":2579},[87,76157,74681],{"class":97},[87,76159,59183],{"class":205},[87,76161,165],{"class":97},[87,76163,1677],{"class":949},[87,76165,76166],{"class":48924},"哈",[87,76168,1677],{"class":949},[87,76170,1651],{"class":97},[87,76172,76173],{"class":205},"test",[87,76175,165],{"class":97},[87,76177,76178],{"class":949},"'哈'",[87,76180,76181],{"class":97},"))  ",[87,76183,76184],{"class":199},"\u002F\u002Ftrue\n",[87,76186,76187,76189,76191,76193,76195,76197,76199,76201,76203,76205,76208,76210],{"class":89,"line":2584},[87,76188,74681],{"class":97},[87,76190,59183],{"class":205},[87,76192,165],{"class":97},[87,76194,1677],{"class":949},[87,76196,76166],{"class":48924},[87,76198,1677],{"class":949},[87,76200,1651],{"class":97},[87,76202,76173],{"class":205},[87,76204,165],{"class":97},[87,76206,76207],{"class":949},"'哈哈'",[87,76209,76181],{"class":97},[87,76211,76184],{"class":199},[87,76213,76214,76216,76218,76220,76222,76224,76226,76228,76230,76232,76235,76238],{"class":89,"line":2598},[87,76215,74681],{"class":97},[87,76217,59183],{"class":205},[87,76219,165],{"class":97},[87,76221,1677],{"class":949},[87,76223,76166],{"class":48924},[87,76225,1677],{"class":949},[87,76227,1651],{"class":97},[87,76229,76173],{"class":205},[87,76231,165],{"class":97},[87,76233,76234],{"class":949},"'二哈'",[87,76236,76237],{"class":97},"))   ",[87,76239,76184],{"class":199},[87,76241,76242],{"class":89,"line":2603},[87,76243,3355],{"emptyLinePlaceholder":1029},[87,76245,76246],{"class":89,"line":2609},[87,76247,76248],{"class":199},"    \u002F\u002F 1.边界符\n",[87,76250,76251,76253,76255,76257,76259,76261,76263,76265,76267,76269,76271,76273,76275],{"class":89,"line":2630},[87,76252,74681],{"class":97},[87,76254,59183],{"class":205},[87,76256,165],{"class":97},[87,76258,1677],{"class":949},[87,76260,2057],{"class":171},[87,76262,76166],{"class":48924},[87,76264,1677],{"class":949},[87,76266,1651],{"class":97},[87,76268,76173],{"class":205},[87,76270,165],{"class":97},[87,76272,76178],{"class":949},[87,76274,76181],{"class":97},[87,76276,76184],{"class":199},[87,76278,76279,76281,76283,76285,76287,76289,76291,76293,76295,76297,76299,76301,76303,76305],{"class":89,"line":2635},[87,76280,74681],{"class":97},[87,76282,59183],{"class":205},[87,76284,165],{"class":97},[87,76286,1677],{"class":949},[87,76288,2057],{"class":171},[87,76290,76166],{"class":48924},[87,76292,1398],{"class":171},[87,76294,1677],{"class":949},[87,76296,1651],{"class":97},[87,76298,76173],{"class":205},[87,76300,165],{"class":97},[87,76302,76207],{"class":949},[87,76304,76181],{"class":97},[87,76306,76307],{"class":199},"\u002F\u002Ffalse\n",[87,76309,76310],{"class":89,"line":2649},[87,76311,76312],{"class":199},"    \u002F\u002F 2.量词\n",[87,76314,76315],{"class":89,"line":2654},[87,76316,76317],{"class":199},"    \u002F\u002F 量词 * 类似于 >= 0\n",[87,76319,76320,76322,76324,76326,76328,76330,76332,76335,76337,76339,76341,76343,76345,76347],{"class":89,"line":2683},[87,76321,74681],{"class":97},[87,76323,59183],{"class":205},[87,76325,165],{"class":97},[87,76327,1677],{"class":949},[87,76329,2057],{"class":171},[87,76331,76166],{"class":48924},[87,76333,76334],{"class":171},"*$",[87,76336,1677],{"class":949},[87,76338,1651],{"class":97},[87,76340,76173],{"class":205},[87,76342,165],{"class":97},[87,76344,76207],{"class":949},[87,76346,76181],{"class":97},[87,76348,76184],{"class":199},[87,76350,76351,76353,76355,76357,76359,76361,76363,76365,76367,76369,76371,76373,76376,76378],{"class":89,"line":2688},[87,76352,74681],{"class":97},[87,76354,59183],{"class":205},[87,76356,165],{"class":97},[87,76358,1677],{"class":949},[87,76360,2057],{"class":171},[87,76362,76166],{"class":48924},[87,76364,76334],{"class":171},[87,76366,1677],{"class":949},[87,76368,1651],{"class":97},[87,76370,76173],{"class":205},[87,76372,165],{"class":97},[87,76374,76375],{"class":949},"'二哈好傻'",[87,76377,76181],{"class":97},[87,76379,76380],{"class":199},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[87,76382,76383,76385,76387,76389,76391,76393,76395,76397,76399,76401,76403,76405,76408,76410],{"class":89,"line":2705},[87,76384,74681],{"class":97},[87,76386,59183],{"class":205},[87,76388,165],{"class":97},[87,76390,1677],{"class":949},[87,76392,2057],{"class":171},[87,76394,76166],{"class":48924},[87,76396,76334],{"class":171},[87,76398,1677],{"class":949},[87,76400,1651],{"class":97},[87,76402,76173],{"class":205},[87,76404,165],{"class":97},[87,76406,76407],{"class":949},"'哈好哈'",[87,76409,76237],{"class":97},[87,76411,76412],{"class":199},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[87,76414,76415],{"class":89,"line":2710},[87,76416,3355],{"emptyLinePlaceholder":1029},[87,76418,76419],{"class":89,"line":2715},[87,76420,76421],{"class":199},"    \u002F\u002F +类似于>=1\n",[87,76423,76424,76426,76428,76430,76432,76434,76436,76439,76441,76443,76445,76447,76449,76451],{"class":89,"line":2720},[87,76425,74681],{"class":97},[87,76427,59183],{"class":205},[87,76429,165],{"class":97},[87,76431,1677],{"class":949},[87,76433,2057],{"class":171},[87,76435,76166],{"class":48924},[87,76437,76438],{"class":171},"+$",[87,76440,1677],{"class":949},[87,76442,1651],{"class":97},[87,76444,76173],{"class":205},[87,76446,165],{"class":97},[87,76448,76207],{"class":949},[87,76450,76181],{"class":97},[87,76452,76184],{"class":199},[87,76454,76455,76457,76459,76461,76463,76465,76467,76469,76471,76473,76475,76477,76479,76481],{"class":89,"line":2734},[87,76456,74681],{"class":97},[87,76458,59183],{"class":205},[87,76460,165],{"class":97},[87,76462,1677],{"class":949},[87,76464,2057],{"class":171},[87,76466,76166],{"class":48924},[87,76468,76438],{"class":171},[87,76470,1677],{"class":949},[87,76472,1651],{"class":97},[87,76474,76173],{"class":205},[87,76476,165],{"class":97},[87,76478,76375],{"class":949},[87,76480,76181],{"class":97},[87,76482,76380],{"class":199},[87,76484,76485,76487,76489,76491,76493,76495,76497,76499,76501,76503,76505,76507,76509,76511],{"class":89,"line":2739},[87,76486,74681],{"class":97},[87,76488,59183],{"class":205},[87,76490,165],{"class":97},[87,76492,1677],{"class":949},[87,76494,2057],{"class":171},[87,76496,76166],{"class":48924},[87,76498,76438],{"class":171},[87,76500,1677],{"class":949},[87,76502,1651],{"class":97},[87,76504,76173],{"class":205},[87,76506,165],{"class":97},[87,76508,76407],{"class":949},[87,76510,76237],{"class":97},[87,76512,76307],{"class":199},[87,76514,76515],{"class":89,"line":3532},[87,76516,3355],{"emptyLinePlaceholder":1029},[87,76518,76519],{"class":89,"line":3546},[87,76520,76521],{"class":199},"    \u002F\u002F ?类似于0次或一次\n",[87,76523,76524,76526,76528,76530,76532,76534,76537,76539,76541,76543,76545,76547,76549,76551],{"class":89,"line":3554},[87,76525,74681],{"class":97},[87,76527,59183],{"class":205},[87,76529,165],{"class":97},[87,76531,1677],{"class":949},[87,76533,2057],{"class":171},[87,76535,76536],{"class":48924},"哈？",[87,76538,1398],{"class":171},[87,76540,1677],{"class":949},[87,76542,1651],{"class":97},[87,76544,76173],{"class":205},[87,76546,165],{"class":97},[87,76548,75156],{"class":949},[87,76550,76237],{"class":97},[87,76552,76184],{"class":199},[87,76554,76555,76557,76559,76561,76563,76565,76567,76570,76572,76574,76576,76578,76580,76582],{"class":89,"line":3559},[87,76556,74681],{"class":97},[87,76558,59183],{"class":205},[87,76560,165],{"class":97},[87,76562,1677],{"class":949},[87,76564,2057],{"class":171},[87,76566,76166],{"class":48924},[87,76568,76569],{"class":171},"?$",[87,76571,1677],{"class":949},[87,76573,1651],{"class":97},[87,76575,76173],{"class":205},[87,76577,165],{"class":97},[87,76579,76207],{"class":949},[87,76581,76181],{"class":97},[87,76583,76307],{"class":199},[87,76585,76586,76588,76590,76592,76594,76596,76598,76600,76602,76604,76606,76608,76610,76612],{"class":89,"line":3565},[87,76587,74681],{"class":97},[87,76589,59183],{"class":205},[87,76591,165],{"class":97},[87,76593,1677],{"class":949},[87,76595,2057],{"class":171},[87,76597,76166],{"class":48924},[87,76599,76569],{"class":171},[87,76601,1677],{"class":949},[87,76603,1651],{"class":97},[87,76605,76173],{"class":205},[87,76607,165],{"class":97},[87,76609,76375],{"class":949},[87,76611,76181],{"class":97},[87,76613,76380],{"class":199},[87,76615,76616,76618,76620,76622,76624,76626,76628,76630,76632,76634,76636,76638,76640,76642],{"class":89,"line":3571},[87,76617,74681],{"class":97},[87,76619,59183],{"class":205},[87,76621,165],{"class":97},[87,76623,1677],{"class":949},[87,76625,2057],{"class":171},[87,76627,76166],{"class":48924},[87,76629,76569],{"class":171},[87,76631,1677],{"class":949},[87,76633,1651],{"class":97},[87,76635,76173],{"class":205},[87,76637,165],{"class":97},[87,76639,76407],{"class":949},[87,76641,76181],{"class":97},[87,76643,76307],{"class":199},[87,76645,76646],{"class":89,"line":3576},[87,76647,3355],{"emptyLinePlaceholder":1029},[87,76649,76650],{"class":89,"line":8898},[87,76651,76652],{"class":199},"    \u002F\u002F {n}写几，就必须出现几次\n",[87,76654,76655,76657,76659,76661,76663,76665,76667,76670,76672,76674,76676,76678,76681,76684],{"class":89,"line":8922},[87,76656,74681],{"class":97},[87,76658,59183],{"class":205},[87,76660,165],{"class":97},[87,76662,1677],{"class":949},[87,76664,2057],{"class":171},[87,76666,76166],{"class":48924},[87,76668,76669],{"class":171},"{4}$",[87,76671,1677],{"class":949},[87,76673,1651],{"class":97},[87,76675,76173],{"class":205},[87,76677,165],{"class":97},[87,76679,76680],{"class":949},"'哈哈哈哈'",[87,76682,76683],{"class":97},")) ",[87,76685,76184],{"class":199},[87,76687,76688],{"class":89,"line":8927},[87,76689,3355],{"emptyLinePlaceholder":1029},[87,76691,76692],{"class":89,"line":8933},[87,76693,76694],{"class":199},"    \u002F\u002F {n,}大于等于n次\n",[87,76696,76697,76699,76701,76703,76705,76707,76709,76712,76714,76716,76718,76720,76722,76724],{"class":89,"line":8960},[87,76698,74681],{"class":97},[87,76700,59183],{"class":205},[87,76702,165],{"class":97},[87,76704,1677],{"class":949},[87,76706,2057],{"class":171},[87,76708,76166],{"class":48924},[87,76710,76711],{"class":171},"{4,}$",[87,76713,1677],{"class":949},[87,76715,1651],{"class":97},[87,76717,76173],{"class":205},[87,76719,165],{"class":97},[87,76721,76680],{"class":949},[87,76723,76683],{"class":97},[87,76725,76184],{"class":199},[87,76727,76728,76730,76732,76734,76736,76738,76740,76742,76744,76746,76748,76750,76753,76755],{"class":89,"line":8965},[87,76729,74681],{"class":97},[87,76731,59183],{"class":205},[87,76733,165],{"class":97},[87,76735,1677],{"class":949},[87,76737,2057],{"class":171},[87,76739,76166],{"class":48924},[87,76741,76711],{"class":171},[87,76743,1677],{"class":949},[87,76745,1651],{"class":97},[87,76747,76173],{"class":205},[87,76749,165],{"class":97},[87,76751,76752],{"class":949},"'哈哈哈哈哈'",[87,76754,76683],{"class":97},[87,76756,76184],{"class":199},[87,76758,76759],{"class":89,"line":8971},[87,76760,3355],{"emptyLinePlaceholder":1029},[87,76762,76763],{"class":89,"line":8983},[87,76764,76765],{"class":199},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[87,76767,76768,76770,76772,76774,76776,76778,76780,76783,76785,76787,76789,76791,76793,76795],{"class":89,"line":8995},[87,76769,74681],{"class":97},[87,76771,59183],{"class":205},[87,76773,165],{"class":97},[87,76775,1677],{"class":949},[87,76777,2057],{"class":171},[87,76779,76166],{"class":48924},[87,76781,76782],{"class":171},"{4,6}$",[87,76784,1677],{"class":949},[87,76786,1651],{"class":97},[87,76788,76173],{"class":205},[87,76790,165],{"class":97},[87,76792,76680],{"class":949},[87,76794,76683],{"class":97},[87,76796,76184],{"class":199},[87,76798,76799,76801,76803,76805,76807,76809,76811,76813,76815,76817,76819,76821,76823,76825],{"class":89,"line":9007},[87,76800,74681],{"class":97},[87,76802,59183],{"class":205},[87,76804,165],{"class":97},[87,76806,1677],{"class":949},[87,76808,2057],{"class":171},[87,76810,76166],{"class":48924},[87,76812,76782],{"class":171},[87,76814,1677],{"class":949},[87,76816,1651],{"class":97},[87,76818,76173],{"class":205},[87,76820,165],{"class":97},[87,76822,76752],{"class":949},[87,76824,76683],{"class":97},[87,76826,76184],{"class":199},[87,76828,76829,76831,76833,76835,76837,76839,76841,76843,76845,76847,76849,76851,76854,76856],{"class":89,"line":10666},[87,76830,74681],{"class":97},[87,76832,59183],{"class":205},[87,76834,165],{"class":97},[87,76836,1677],{"class":949},[87,76838,2057],{"class":171},[87,76840,76166],{"class":48924},[87,76842,76782],{"class":171},[87,76844,1677],{"class":949},[87,76846,1651],{"class":97},[87,76848,76173],{"class":205},[87,76850,165],{"class":97},[87,76852,76853],{"class":949},"'哈哈哈哈哈哈哈'",[87,76855,76683],{"class":97},[87,76857,76307],{"class":199},[87,76859,76860],{"class":89,"line":10691},[87,76861,3355],{"emptyLinePlaceholder":1029},[87,76863,76864],{"class":89,"line":10714},[87,76865,76866],{"class":199},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[87,76868,76869,76871,76873,76875,76877,76879,76882,76884,76886,76888,76890,76892,76895,76897],{"class":89,"line":10738},[87,76870,74681],{"class":97},[87,76872,59183],{"class":205},[87,76874,165],{"class":97},[87,76876,1677],{"class":949},[87,76878,2057],{"class":171},[87,76880,76881],{"class":104},"[abc]",[87,76883,1398],{"class":171},[87,76885,1677],{"class":949},[87,76887,1651],{"class":97},[87,76889,76173],{"class":205},[87,76891,165],{"class":97},[87,76893,76894],{"class":949},"'a'",[87,76896,76181],{"class":97},[87,76898,76184],{"class":199},[87,76900,76901,76903,76905,76907,76909,76911,76913,76915,76917,76919,76921,76923,76926,76928],{"class":89,"line":10743},[87,76902,74681],{"class":97},[87,76904,59183],{"class":205},[87,76906,165],{"class":97},[87,76908,1677],{"class":949},[87,76910,2057],{"class":171},[87,76912,76881],{"class":104},[87,76914,1398],{"class":171},[87,76916,1677],{"class":949},[87,76918,1651],{"class":97},[87,76920,76173],{"class":205},[87,76922,165],{"class":97},[87,76924,76925],{"class":949},"'b'",[87,76927,76181],{"class":97},[87,76929,76184],{"class":199},[87,76931,76932,76934,76936,76938,76940,76942,76944,76946,76948,76950,76952,76954,76957,76959],{"class":89,"line":10748},[87,76933,74681],{"class":97},[87,76935,59183],{"class":205},[87,76937,165],{"class":97},[87,76939,1677],{"class":949},[87,76941,2057],{"class":171},[87,76943,76881],{"class":104},[87,76945,1398],{"class":171},[87,76947,1677],{"class":949},[87,76949,1651],{"class":97},[87,76951,76173],{"class":205},[87,76953,165],{"class":97},[87,76955,76956],{"class":949},"'c'",[87,76958,76181],{"class":97},[87,76960,76184],{"class":199},[87,76962,76963,76965,76967,76969,76971,76973,76975,76977,76979,76981,76984,76986],{"class":89,"line":10753},[87,76964,74681],{"class":97},[87,76966,59183],{"class":205},[87,76968,165],{"class":97},[87,76970,1677],{"class":949},[87,76972,76881],{"class":104},[87,76974,1677],{"class":949},[87,76976,1651],{"class":97},[87,76978,76173],{"class":205},[87,76980,165],{"class":97},[87,76982,76983],{"class":949},"'ab'",[87,76985,76181],{"class":97},[87,76987,76184],{"class":199},[87,76989,76990,76992,76994,76996,76998,77000,77002,77004,77006,77008,77010,77012,77014,77016],{"class":89,"line":10762},[87,76991,74681],{"class":97},[87,76993,59183],{"class":205},[87,76995,165],{"class":97},[87,76997,1677],{"class":949},[87,76999,2057],{"class":171},[87,77001,76881],{"class":104},[87,77003,1398],{"class":171},[87,77005,1677],{"class":949},[87,77007,1651],{"class":97},[87,77009,76173],{"class":205},[87,77011,165],{"class":97},[87,77013,76983],{"class":949},[87,77015,76181],{"class":97},[87,77017,77018],{"class":199},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[87,77020,77021,77023,77025,77027,77029,77031,77033,77036,77038,77040,77042,77044,77046,77048],{"class":89,"line":10767},[87,77022,74681],{"class":97},[87,77024,59183],{"class":205},[87,77026,165],{"class":97},[87,77028,1677],{"class":949},[87,77030,2057],{"class":171},[87,77032,76881],{"class":104},[87,77034,77035],{"class":171},"{2}$",[87,77037,1677],{"class":949},[87,77039,1651],{"class":97},[87,77041,76173],{"class":205},[87,77043,165],{"class":97},[87,77045,76983],{"class":949},[87,77047,76181],{"class":97},[87,77049,77050],{"class":199},"\u002F\u002Ftrue   可以选两个\n",[87,77052,77053,77055,77057,77059,77061,77063,77066,77068,77070,77072,77074,77076,77079,77081],{"class":89,"line":10773},[87,77054,74681],{"class":97},[87,77056,59183],{"class":205},[87,77058,165],{"class":97},[87,77060,1677],{"class":949},[87,77062,2057],{"class":171},[87,77064,77065],{"class":104},"[a-z]",[87,77067,1398],{"class":171},[87,77069,1677],{"class":949},[87,77071,1651],{"class":97},[87,77073,76173],{"class":205},[87,77075,165],{"class":97},[87,77077,77078],{"class":949},"'p'",[87,77080,76237],{"class":97},[87,77082,77083],{"class":199},"\u002F\u002Ftrue   依然只能选一个\n",[87,77085,77086,77088,77090,77092,77094,77096,77099,77101,77103,77105,77107,77109,77111,77113],{"class":89,"line":10794},[87,77087,74681],{"class":97},[87,77089,59183],{"class":205},[87,77091,165],{"class":97},[87,77093,1677],{"class":949},[87,77095,2057],{"class":171},[87,77097,77098],{"class":104},"[A-Z]",[87,77100,1398],{"class":171},[87,77102,1677],{"class":949},[87,77104,1651],{"class":97},[87,77106,76173],{"class":205},[87,77108,165],{"class":97},[87,77110,77078],{"class":949},[87,77112,76237],{"class":97},[87,77114,76307],{"class":199},[87,77116,77117,77119,77121,77123,77125,77127,77129,77131,77133,77135,77137,77139,77142,77144],{"class":89,"line":10800},[87,77118,74681],{"class":97},[87,77120,59183],{"class":205},[87,77122,165],{"class":97},[87,77124,1677],{"class":949},[87,77126,2057],{"class":171},[87,77128,77098],{"class":104},[87,77130,1398],{"class":171},[87,77132,1677],{"class":949},[87,77134,1651],{"class":97},[87,77136,76173],{"class":205},[87,77138,165],{"class":97},[87,77140,77141],{"class":949},"'P'",[87,77143,76237],{"class":97},[87,77145,76184],{"class":199},[87,77147,77148,77150,77152,77154,77156,77158,77161,77163,77165,77167,77169,77171,77174,77176],{"class":89,"line":10814},[87,77149,74681],{"class":97},[87,77151,59183],{"class":205},[87,77153,165],{"class":97},[87,77155,1677],{"class":949},[87,77157,2057],{"class":171},[87,77159,77160],{"class":104},"[0-9]",[87,77162,1398],{"class":171},[87,77164,1677],{"class":949},[87,77166,1651],{"class":97},[87,77168,76173],{"class":205},[87,77170,165],{"class":97},[87,77172,77173],{"class":949},"'0'",[87,77175,76237],{"class":97},[87,77177,76184],{"class":199},[87,77179,77180,77182,77184,77186,77188,77190,77193,77195,77197,77199,77201,77203,77205,77207],{"class":89,"line":10820},[87,77181,74681],{"class":97},[87,77183,59183],{"class":205},[87,77185,165],{"class":97},[87,77187,1677],{"class":949},[87,77189,2057],{"class":171},[87,77191,77192],{"class":104},"[a-zA-Z0-9]",[87,77194,1398],{"class":171},[87,77196,1677],{"class":949},[87,77198,1651],{"class":97},[87,77200,76173],{"class":205},[87,77202,165],{"class":97},[87,77204,77078],{"class":949},[87,77206,76181],{"class":97},[87,77208,76184],{"class":199},[87,77210,77211,77213,77215],{"class":89,"line":10847},[87,77212,53354],{"class":97},[87,77214,52750],{"class":93},[87,77216,953],{"class":97},[87,77218,77219,77221,77223],{"class":89,"line":10856},[87,77220,963],{"class":97},[87,77222,52737],{"class":93},[87,77224,953],{"class":97},[87,77226,77227],{"class":89,"line":10862},[87,77228,3355],{"emptyLinePlaceholder":1029},[87,77230,77231,77233,77235],{"class":89,"line":10870},[87,77232,963],{"class":97},[87,77234,51581],{"class":93},[87,77236,953],{"class":97},[49,77238,77240],{"id":77239},"_3624-修饰符","3.6.2.4 修饰符",[19,77242,77243],{},[39,77244],{"alt":82,"src":77245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,77247,77248],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,77250,77251],{},[39,77252],{"alt":82,"src":77253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[77,77255,77257],{"className":51579,"code":77256,"language":51581,"meta":82,"style":82},"\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",[84,77258,77259,77269,77283,77291,77305,77325,77337,77345,77353,77361,77393,77424,77429,77461,77472,77505,77514,77522,77530],{"__ignoreMap":82},[87,77260,77261,77263,77265,77267],{"class":89,"line":90},[87,77262,52243],{"class":97},[87,77264,52246],{"class":93},[87,77266,52249],{"class":205},[87,77268,953],{"class":97},[87,77270,77271,77273,77275,77277,77279,77281],{"class":89,"line":101},[87,77272,938],{"class":97},[87,77274,51581],{"class":93},[87,77276,52260],{"class":205},[87,77278,946],{"class":97},[87,77280,52265],{"class":949},[87,77282,953],{"class":97},[87,77284,77285,77287,77289],{"class":89,"line":120},[87,77286,938],{"class":97},[87,77288,52278],{"class":93},[87,77290,953],{"class":97},[87,77292,77293,77295,77297,77299,77301,77303],{"class":89,"line":222},[87,77294,53081],{"class":97},[87,77296,52288],{"class":93},[87,77298,52291],{"class":205},[87,77300,946],{"class":97},[87,77302,52296],{"class":949},[87,77304,953],{"class":97},[87,77306,77307,77309,77311,77313,77315,77317,77319,77321,77323],{"class":89,"line":234},[87,77308,53081],{"class":97},[87,77310,52288],{"class":93},[87,77312,15870],{"class":205},[87,77314,946],{"class":97},[87,77316,52335],{"class":949},[87,77318,52315],{"class":205},[87,77320,946],{"class":97},[87,77322,52342],{"class":949},[87,77324,953],{"class":97},[87,77326,77327,77329,77331,77333,77335],{"class":89,"line":256},[87,77328,53081],{"class":97},[87,77330,52351],{"class":93},[87,77332,52354],{"class":97},[87,77334,52351],{"class":93},[87,77336,953],{"class":97},[87,77338,77339,77341,77343],{"class":89,"line":269},[87,77340,963],{"class":97},[87,77342,52278],{"class":93},[87,77344,953],{"class":97},[87,77346,77347,77349,77351],{"class":89,"line":463},[87,77348,938],{"class":97},[87,77350,52737],{"class":93},[87,77352,953],{"class":97},[87,77354,77355,77357,77359],{"class":89,"line":469},[87,77356,53081],{"class":97},[87,77358,52750],{"class":93},[87,77360,953],{"class":97},[87,77362,77363,77365,77367,77369,77371,77373,77376,77378,77380,77382,77384,77386,77389,77391],{"class":89,"line":2287},[87,77364,74681],{"class":97},[87,77366,59183],{"class":205},[87,77368,165],{"class":97},[87,77370,1677],{"class":949},[87,77372,2057],{"class":171},[87,77374,77375],{"class":48924},"java",[87,77377,1398],{"class":171},[87,77379,1677],{"class":949},[87,77381,1651],{"class":97},[87,77383,76173],{"class":205},[87,77385,165],{"class":97},[87,77387,77388],{"class":949},"'java'",[87,77390,76683],{"class":97},[87,77392,76184],{"class":199},[87,77394,77395,77397,77399,77401,77403,77405,77407,77409,77411,77413,77415,77417,77420,77422],{"class":89,"line":2568},[87,77396,74681],{"class":97},[87,77398,59183],{"class":205},[87,77400,165],{"class":97},[87,77402,1677],{"class":949},[87,77404,2057],{"class":171},[87,77406,77375],{"class":48924},[87,77408,1398],{"class":171},[87,77410,1677],{"class":949},[87,77412,1651],{"class":97},[87,77414,76173],{"class":205},[87,77416,165],{"class":97},[87,77418,77419],{"class":949},"'Java'",[87,77421,76683],{"class":97},[87,77423,76307],{"class":199},[87,77425,77426],{"class":89,"line":2573},[87,77427,77428],{"class":199},"    \u002F\u002F 不区分大小写、\n",[87,77430,77431,77433,77435,77437,77439,77441,77443,77445,77447,77449,77451,77453,77455,77457,77459],{"class":89,"line":2579},[87,77432,74681],{"class":97},[87,77434,59183],{"class":205},[87,77436,165],{"class":97},[87,77438,1677],{"class":949},[87,77440,2057],{"class":171},[87,77442,77375],{"class":48924},[87,77444,1398],{"class":171},[87,77446,1677],{"class":949},[87,77448,1536],{"class":171},[87,77450,1651],{"class":97},[87,77452,76173],{"class":205},[87,77454,165],{"class":97},[87,77456,77419],{"class":949},[87,77458,76683],{"class":97},[87,77460,76184],{"class":199},[87,77462,77463,77465,77467,77469],{"class":89,"line":2584},[87,77464,12171],{"class":171},[87,77466,74847],{"class":104},[87,77468,14514],{"class":171},[87,77470,77471],{"class":949}," 'java是一门编程语言，学完java工资很高'\n",[87,77473,77474,77476,77479,77481,77484,77487,77489,77491,77493,77495,77498,77500,77503],{"class":89,"line":2598},[87,77475,12171],{"class":171},[87,77477,77478],{"class":104}," result",[87,77480,14514],{"class":171},[87,77482,77483],{"class":97}," str.",[87,77485,77486],{"class":205},"replace",[87,77488,165],{"class":97},[87,77490,1677],{"class":949},[87,77492,77375],{"class":48924},[87,77494,1677],{"class":949},[87,77496,77497],{"class":171},"ig",[87,77499,13385],{"class":97},[87,77501,77502],{"class":949},"'前端'",[87,77504,1108],{"class":97},[87,77506,77507,77509,77511],{"class":89,"line":2603},[87,77508,74681],{"class":97},[87,77510,59183],{"class":205},[87,77512,77513],{"class":97},"(result)\n",[87,77515,77516,77518,77520],{"class":89,"line":2609},[87,77517,53354],{"class":97},[87,77519,52750],{"class":93},[87,77521,953],{"class":97},[87,77523,77524,77526,77528],{"class":89,"line":2630},[87,77525,963],{"class":97},[87,77527,52737],{"class":93},[87,77529,953],{"class":97},[87,77531,77532,77534,77536],{"class":89,"line":2635},[87,77533,963],{"class":97},[87,77535,51581],{"class":93},[87,77537,953],{"class":97},[1006,77539,77540],{},"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":82,"searchDepth":101,"depth":101,"links":77542},[77543,77553,77565,77582,77589,77597],{"id":54297,"depth":101,"text":54298,"children":77544},[77545,77546,77547,77548,77549,77550,77551,77552],{"id":54301,"depth":120,"text":54302},{"id":54334,"depth":120,"text":54335},{"id":54373,"depth":120,"text":54374},{"id":54530,"depth":120,"text":54531},{"id":54578,"depth":120,"text":54579},{"id":54715,"depth":120,"text":54716},{"id":55037,"depth":120,"text":55038},{"id":58025,"depth":120,"text":58026},{"id":58053,"depth":101,"text":58054,"children":77554},[77555,77556,77557,77558,77559,77560,77561,77562,77563,77564],{"id":58057,"depth":120,"text":58058},{"id":58080,"depth":120,"text":58081},{"id":58995,"depth":120,"text":58996},{"id":59685,"depth":120,"text":59686},{"id":59967,"depth":120,"text":59968},{"id":64126,"depth":120,"text":64127},{"id":64296,"depth":120,"text":64297},{"id":64424,"depth":120,"text":64425},{"id":64449,"depth":120,"text":64450},{"id":65837,"depth":120,"text":65838},{"id":66989,"depth":101,"text":66990,"children":77566},[77567,77568,77569,77570,77571,77572,77573,77574,77575,77576,77577,77578,77579,77580,77581],{"id":66993,"depth":120,"text":66994},{"id":67647,"depth":120,"text":67648},{"id":69342,"depth":120,"text":69343},{"id":69383,"depth":120,"text":69384},{"id":69425,"depth":120,"text":69426},{"id":69439,"depth":120,"text":69440},{"id":69488,"depth":120,"text":69489},{"id":69500,"depth":120,"text":69501},{"id":69515,"depth":120,"text":69516},{"id":69551,"depth":120,"text":69552},{"id":69632,"depth":120,"text":69633},{"id":69760,"depth":120,"text":69761},{"id":69772,"depth":120,"text":69773},{"id":69791,"depth":120,"text":69792},{"id":71898,"depth":120,"text":71899},{"id":71917,"depth":101,"text":71918,"children":77583},[77584,77585,77586,77587,77588],{"id":71938,"depth":120,"text":71939},{"id":71958,"depth":120,"text":71959},{"id":72007,"depth":120,"text":72008},{"id":72132,"depth":120,"text":72133},{"id":72313,"depth":120,"text":72314},{"id":72331,"depth":101,"text":72332,"children":77590},[77591,77592,77593,77594,77595,77596],{"id":72346,"depth":120,"text":72347},{"id":72405,"depth":120,"text":72406},{"id":72429,"depth":120,"text":72430},{"id":72749,"depth":120,"text":72750},{"id":72781,"depth":120,"text":72782},{"id":72804,"depth":120,"text":72805},{"id":75872,"depth":101,"text":75873,"children":77598},[77599,77600],{"id":75906,"depth":120,"text":75907},{"id":75945,"depth":120,"text":75946},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54269,"description":1026},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77607,"title":77608,"body":77609,"description":1026,"extension":1027,"meta":93744,"navigation":1029,"path":93745,"seo":93746,"stem":93747,"__hash__":93748},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77610,"toc":93680},[77611,77614,77617,77621,77625,77630,77635,77646,77650,77655,77658,77662,77665,77670,77674,77678,77681,77686,77689,77693,77696,77704,77707,77711,77716,77721,77724,77728,77733,77738,77741,77745,77750,77753,77758,77761,77766,77769,77774,77779,77782,77785,77789,77794,77799,77802,77806,77810,77813,77816,77819,77823,77827,77832,77837,77840,77844,77849,77854,77857,77860,77863,77866,77869,77872,77875,77878,77881,77886,77890,77895,77900,77903,77906,77909,77912,77915,77918,77921,77924,77928,77932,77935,77938,77941,77946,77948,77951,77954,77957,77960,77963,77966,77969,77972,77975,77978,77981,77984,77987,77992,77997,78002,78005,78009,78012,78017,78021,78023,78034,78039,78140,78143,78146,78149,78152,78155,78158,78161,78164,78166,78169,78172,78175,78178,78181,78183,78186,78189,78192,78195,78198,78201,78203,78206,78208,78210,78213,78217,78221,78224,78227,78230,78233,78236,78239,78242,78245,78248,78253,78373,78376,78379,78384,78387,78390,78393,78396,78401,78404,78407,78410,78413,78418,78421,78521,78586,78660,78664,78667,78670,78674,78677,78691,78720,78723,78726,78729,78732,78735,78738,78741,78743,78746,78749,78752,78755,78759,78764,78768,78773,78848,78851,79034,79037,79040,79043,79046,79049,79051,79054,79057,79060,79063,79066,79069,79071,79075,79078,79083,79086,79089,79092,79095,79097,79102,79105,79108,79111,79114,79116,79121,79124,79127,79129,79131,79134,79138,79141,79144,79149,79152,79155,79158,79208,79213,79217,79222,79225,79294,79297,79306,79310,79315,79318,79321,79329,79332,79349,81149,81153,81157,81162,81165,81169,81175,81181,81333,81338,81343,81346,81349,81352,81355,81358,81361,81364,81367,81370,81373,81376,81379,81384,81388,81391,81402,81406,81411,81414,81417,81420,81423,81426,81428,81431,81434,81437,81440,81442,81459,81462,81466,81469,81474,81479,81482,81485,81489,81492,81495,81504,81507,81511,81514,81519,81524,81591,81595,81598,81601,81606,81611,81697,81702,81706,81709,81712,81727,81730,81735,81739,81744,81853,81856,81867,82017,82021,82026,82135,82139,82144,82149,82154,82157,82164,82184,82220,82384,82389,82392,82397,82404,82407,82410,82413,82472,82528,82584,82588,82593,82908,82911,82915,82918,82923,83032,83037,83041,83046,83050,83121,83125,83127,83130,83133,83171,83447,83451,83468,83534,83568,83572,83575,83580,83609,83616,83625,83630,83645,83650,83659,83662,83799,83803,83865,83869,83874,84119,84123,84128,84131,84134,84137,84140,84144,84149,85730,85734,85738,85744,85747,85752,85756,85759,85764,85767,85778,85782,85787,85791,85796,85801,85804,85809,85813,85817,85820,85825,85830,85833,85836,85839,85961,85966,86068,86071,86074,86078,86083,86255,86260,86264,86267,86272,86338,86343,86346,86477,86480,86485,86488,86491,86582,86587,86590,86593,86596,86599,86604,86609,86612,86617,86622,86627,86631,86634,86637,86642,86647,86652,86657,86711,86714,86717,86722,86725,86728,86733,86738,86743,86747,86752,86766,86771,86774,86779,86783,86788,86793,86798,86803,86808,86813,86818,86823,86826,86830,86835,86838,86841,86844,86849,86854,86857,86860,86864,86867,86870,86875,86880,86885,86890,86893,86898,86903,86964,86969,86972,86977,88218,88223,88227,88231,88236,88239,88244,88249,88252,88257,88259,88264,88268,88271,88274,88285,88289,88294,88299,88354,88359,88364,88369,88580,88585,88589,88594,88597,88599,88602,88605,89052,89057,89064,89070,89073,89076,89340,89345,89349,89614,89619,89623,89628,89633,89638,89643,89974,89977,89982,89987,89990,89994,89998,90003,90008,90013,90018,90023,90028,90032,90035,90040,90045,90048,90122,90127,90132,90137,90139,90142,90512,90517,90522,90527,90530,90533,90635,90640,90645,90748,90752,90757,90761,90765,90770,90775,90778,90783,90786,90789,91182,91187,91190,91193,91196,91199,91719,91723,91728,91733,91738,91741,91746,91749,91752,92134,92139,92141,92143,92146,92149,92661,92665,92726,92729,92732,92735,92739,92742,92747,92752,93677],[10,77612,77608],{"id":77613},"_4js进阶",[19,77615,77616],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,77618,77620],{"id":77619},"_41-作用域","4.1 作用域",[44,77622,77624],{"id":77623},"_411-局部作用域","4.1.1 局部作用域",[19,77626,77627],{},[39,77628],{"alt":82,"src":77629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,77631,77632],{},[39,77633],{"alt":82,"src":77634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[26,77636,77637,77640,77643],{},[29,77638,77639],{},"函数作用域在函数内部",[29,77641,77642],{},"块级作用域在{}",[29,77644,77645],{},"对象的那个{}不是作用域，不是块作用域",[44,77647,77649],{"id":77648},"_412-全局作用域","4.1.2 全局作用域",[19,77651,77652],{},[39,77653],{"alt":82,"src":77654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,77656,77657],{},"window.a=10不要这样写",[44,77659,77661],{"id":77660},"_413-作用域链","4.1.3 作用域链",[19,77663,77664],{},"变量查找机制",[19,77666,77667],{},[39,77668],{"alt":82,"src":77669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77671,77673],{"id":77672},"_42-垃圾回收机制","4.2 垃圾回收机制",[44,77675,77677],{"id":77676},"_421-大体介绍","4.2.1 大体介绍",[19,77679,77680],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,77682,77683],{},[39,77684],{"alt":82,"src":77685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,77687,77688],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[44,77690,77692],{"id":77691},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,77694,77695],{},"堆栈空间分配区别：",[1055,77697,77698,77701],{},[29,77699,77700],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[29,77702,77703],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,77705,77706],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[49,77708,77710],{"id":77709},"_4221-引用计数","4.2.2.1 引用计数",[19,77712,77713],{},[39,77714],{"alt":82,"src":77715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,77717,77718],{},[39,77719],{"alt":82,"src":77720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,77722,77723],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[49,77725,77727],{"id":77726},"_4222-标记清除法","4.2.2.2 标记清除法",[19,77729,77730],{},[39,77731],{"alt":82,"src":77732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,77734,77735],{},[39,77736],{"alt":82,"src":77737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,77739,77740],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,77742,77744],{"id":77743},"_43-闭包","4.3 闭包",[19,77746,77747],{},[39,77748],{"alt":82,"src":77749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,77751,77752],{},"闭包：内层函数+外层函数的变量",[19,77754,77755],{},[39,77756],{"alt":82,"src":77757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,77759,77760],{},"closure就是闭包",[19,77762,77763],{},[39,77764],{"alt":82,"src":77765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,77767,77768],{},"内层函数必须包含外层函数的变量才是闭包",[19,77770,77771],{},[39,77772],{"alt":82,"src":77773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,77775,77776],{},[39,77777],{"alt":82,"src":77778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,77780,77781],{},"闭包可能会引起内存泄漏",[19,77783,77784],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77786,77788],{"id":77787},"_44-变量提升","4.4 变量提升",[19,77790,77791],{},[39,77792],{"alt":82,"src":77793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,77795,77796],{},[39,77797],{"alt":82,"src":77798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,77800,77801],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77803,77805],{"id":77804},"_45-函数进阶","4.5 函数进阶",[44,77807,77809],{"id":77808},"_451-函数提升","4.5.1 函数提升",[19,77811,77812],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,77814,77815],{},"只提升函数声明，不提升函数调用",[52750,77817,77818],{},"\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",[44,77820,77822],{"id":77821},"_452-函数参数","4.5.2 函数参数",[49,77824,77826],{"id":77825},"_4521-动态参数","4.5.2.1 动态参数",[19,77828,77829],{},[39,77830],{"alt":82,"src":77831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,77833,77834],{},[39,77835],{"alt":82,"src":77836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,77838,77839],{},"箭头函数里边没有arguments",[49,77841,77843],{"id":77842},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77845,77846],{},[39,77847],{"alt":82,"src":77848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77850,77851],{},[39,77852],{"alt":82,"src":77853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77855,77856],{},"剩余参数使用的时候不需要写...",[19,77858,77859],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77861,77862],{},"  function getSum(a,b,...arr) {",[19,77864,77865],{},"  console.log(11)",[19,77867,77868],{},"  }",[19,77870,77871],{},"  getSum(1,2,3,4)",[19,77873,77874],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77876,77877],{},"  getSum(1,2)",[19,77879,77880],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77882,77883],{},[39,77884],{"alt":82,"src":77885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[49,77887,77889],{"id":77888},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77891,77892],{},[39,77893],{"alt":82,"src":77894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77896,77897],{},[39,77898],{"alt":82,"src":77899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77901,77902],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77904,77905],{},"展开运算符可以用于数组之间的合并：",[19,77907,77908],{},"const arr1 = [1, 2, 3]",[19,77910,77911],{},"const arr2 = [3, 4, 5]",[19,77913,77914],{},"const arr = [...arr1, ...arr2]",[19,77916,77917],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77919,77920],{},"剩余参数：函数参数使用，得到真数组",[19,77922,77923],{},"展开运算符：数组中使用，数组展开",[44,77925,77927],{"id":77926},"_453-箭头函数","4.5.3 箭头函数",[49,77929,77931],{"id":77930},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77933,77934],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77936,77937],{},"它不是万能的！！！",[19,77939,77940],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77942,77943],{},[39,77944],{"alt":82,"src":77945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77947,1131],{},[19,77949,77950],{},"① 只有一个形参的时候，可以省略小括号：",[19,77952,77953],{},"const fn=x=>{console.log(x)}",[19,77955,77956],{},"② 只有一行代码时可以省略大括号：",[19,77958,77959],{},"const fn=x=>console.log(11)",[19,77961,77962],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77964,77965],{},"const fn=x=>x+x",[19,77967,77968],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77970,77971],{},"⑤ 阻止表单默认提交：",[19,77973,77974],{},"const form = document.querySelector('form')",[19,77976,77977],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77979,77980],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77982,77983],{},"const fn=uname=>({uname:uname})",[19,77985,77986],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77988,77989],{},[39,77990],{"alt":82,"src":77991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77993,77994],{},[39,77995],{"alt":82,"src":77996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77998,77999],{},[39,78000],{"alt":82,"src":78001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,78003,78004],{},"一定不要忘记用()，有()就理解为自带return",[49,78006,78008],{"id":78007},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,78010,78011],{},"箭头函数是没有动态参数的arguments",[19,78013,78014],{},[39,78015],{"alt":82,"src":78016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[49,78018,78020],{"id":78019},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,78022,12282],{},[1055,78024,78025,78028,78031],{},[29,78026,78027],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[29,78029,78030],{},"事件回调函数使用箭头函数时，this 为全局的 window",[29,78032,78033],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,78035,78036],{},[39,78037],{"alt":82,"src":78038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[77,78040,78042],{"className":54004,"code":78041,"language":54006,"meta":82,"style":82},"  \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",[84,78043,78044,78052,78057,78062,78067,78072,78077,78081,78086,78090,78094,78099,78104,78109,78113,78117,78122,78127,78132],{"__ignoreMap":82},[87,78045,78046,78048,78050],{"class":89,"line":90},[87,78047,53081],{"class":97},[87,78049,52750],{"class":93},[87,78051,953],{"class":97},[87,78053,78054],{"class":89,"line":101},[87,78055,78056],{"class":97},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[87,78058,78059],{"class":89,"line":120},[87,78060,78061],{"class":97},"    console.log(this) \u002F\u002F指向window\n",[87,78063,78064],{"class":89,"line":222},[87,78065,78066],{"class":97},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[87,78068,78069],{"class":89,"line":234},[87,78070,78071],{"class":97},"    function fn() {\n",[87,78073,78074],{"class":89,"line":256},[87,78075,78076],{"class":97},"      console.log(this)  \u002F\u002F指向window\n",[87,78078,78079],{"class":89,"line":269},[87,78080,3142],{"class":97},[87,78082,78083],{"class":89,"line":463},[87,78084,78085],{"class":97},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[87,78087,78088],{"class":89,"line":469},[87,78089,3355],{"emptyLinePlaceholder":1029},[87,78091,78092],{"class":89,"line":2287},[87,78093,72451],{"class":97},[87,78095,78096],{"class":89,"line":2568},[87,78097,78098],{"class":97},"      name: 'andy',\n",[87,78100,78101],{"class":89,"line":2573},[87,78102,78103],{"class":97},"      sayHai: function () {\n",[87,78105,78106],{"class":89,"line":2579},[87,78107,78108],{"class":97},"        console.log(this)\n",[87,78110,78111],{"class":89,"line":2584},[87,78112,53335],{"class":97},[87,78114,78115],{"class":89,"line":2598},[87,78116,3142],{"class":97},[87,78118,78119],{"class":89,"line":2603},[87,78120,78121],{"class":97},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[87,78123,78124],{"class":89,"line":2609},[87,78125,78126],{"class":97},"    \u002F\u002F 2.箭头函数的this\n",[87,78128,78129],{"class":89,"line":2630},[87,78130,78131],{"class":97},"    const fn = () => console.log(this)\n",[87,78133,78134,78136,78138],{"class":89,"line":2635},[87,78135,53354],{"class":97},[87,78137,52750],{"class":93},[87,78139,953],{"class":97},[19,78141,78142],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,78144,78145],{},"const fn = () => console.log(this)",[19,78147,78148],{},"fn() \u002F\u002F指向window",[19,78150,78151],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,78153,78154],{},"①",[19,78156,78157],{},"const obj = {",[19,78159,78160],{},"uname: 'pink老师',",[19,78162,78163],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,78165,2037],{},[19,78167,78168],{},"调用对象里边的函数",[19,78170,78171],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,78173,78174],{},"obj.sayHai()",[19,78176,78177],{},"②",[19,78179,78180],{},"const obj1 = {",[19,78182,78160],{},[19,78184,78185],{},"sayHai: function () {",[19,78187,78188],{},"let i = 10",[19,78190,78191],{},"const count = () => {",[19,78193,78194],{},"console.log(this)",[19,78196,78197],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,78199,78200],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,78202,2037],{},[19,78204,78205],{},"count()",[19,78207,2037],{},[19,78209,2037],{},[19,78211,78212],{},"obj1.sayHai()",[14,78214,78216],{"id":78215},"_46-解构赋值","4.6 解构赋值",[44,78218,78220],{"id":78219},"_461-数组解构","4.6.1 数组解构",[19,78222,78223],{},"以前要是使用数组中的值的话：",[19,78225,78226],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,78228,78229],{},"const arr=[100,60,80]",[19,78231,78232],{},"const max=arr[0]",[19,78234,78235],{},"const min=arr[1]",[19,78237,78238],{},"const avg=arr[2]",[19,78240,78241],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,78243,78244],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,78246,78247],{},"这个写法就类似于上边的那种用很多const的方法",[19,78249,78250],{},[39,78251],{"alt":82,"src":78252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[77,78254,78256],{"className":51579,"code":78255,"language":51581,"meta":82,"style":82},"①变量之间交换值:\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",[84,78257,78258,78263,78268,78273,78278,78283,78287,78291,78296,78300,78305,78310,78314,78319,78324,78335,78345,78350,78355,78360,78364,78368],{"__ignoreMap":82},[87,78259,78260],{"class":89,"line":90},[87,78261,78262],{"class":97},"①变量之间交换值:\n",[87,78264,78265],{"class":89,"line":101},[87,78266,78267],{"class":97},"let a=1\n",[87,78269,78270],{"class":89,"line":120},[87,78271,78272],{"class":97},"let b=2;\n",[87,78274,78275],{"class":89,"line":222},[87,78276,78277],{"class":97},"必须加这行代码，不然就会报错\n",[87,78279,78280],{"class":89,"line":234},[87,78281,78282],{"class":97},"[b,a]=[a,b]\n",[87,78284,78285],{"class":89,"line":256},[87,78286,3355],{"emptyLinePlaceholder":1029},[87,78288,78289],{"class":89,"line":269},[87,78290,3355],{"emptyLinePlaceholder":1029},[87,78292,78293],{"class":89,"line":463},[87,78294,78295],{"class":97},"可以写成下面的方式：\n",[87,78297,78298],{"class":89,"line":469},[87,78299,78267],{"class":97},[87,78301,78302],{"class":89,"line":2287},[87,78303,78304],{"class":97},"let b=2\n",[87,78306,78307],{"class":89,"line":2568},[87,78308,78309],{"class":97},";[b,a]=[a,b]\n",[87,78311,78312],{"class":89,"line":2573},[87,78313,3355],{"emptyLinePlaceholder":1029},[87,78315,78316],{"class":89,"line":2579},[87,78317,78318],{"class":97},"②排序\n",[87,78320,78321],{"class":89,"line":2584},[87,78322,78323],{"class":97},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[87,78325,78326,78329,78332],{"class":89,"line":2598},[87,78327,78328],{"class":97},"for (let i = 0; i ",[87,78330,938],{"class":78331},"s7hpK",[87,78333,78334],{"class":97}," arr1.length; i++) {\n",[87,78336,78337,78340,78342],{"class":89,"line":2603},[87,78338,78339],{"class":97},"   for (let j = 0; j ",[87,78341,938],{"class":78331},[87,78343,78344],{"class":97}," arr1.length - 1; j++) {\n",[87,78346,78347],{"class":89,"line":2609},[87,78348,78349],{"class":97},"      if (arr1[j] > arr1[j + 1]) {\n",[87,78351,78352],{"class":89,"line":2630},[87,78353,78354],{"class":97},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[87,78356,78357],{"class":89,"line":2635},[87,78358,78359],{"class":97},"       }\n",[87,78361,78362],{"class":89,"line":2649},[87,78363,5262],{"class":97},[87,78365,78366],{"class":89,"line":2654},[87,78367,123],{"class":97},[87,78369,78370],{"class":89,"line":2683},[87,78371,78372],{"class":97},"console.log(arr1)\n",[19,78374,78375],{},"数组解构的细节：",[19,78377,78378],{},"①变量多，单元值少",[19,78380,78381],{},[39,78382],{"alt":82,"src":78383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,78385,78386],{},"防止出现undefined的方法：",[19,78388,78389],{},"const [a=0,b=0] =[1]",[19,78391,78392],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,78394,78395],{},"②变量少，单元值多",[19,78397,78398],{},[39,78399],{"alt":82,"src":78400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,78402,78403],{},"此时可以使用剩余参数来接收多余的值",[19,78405,78406],{},"const [a,b,...c]=[1,2,3,4]",[19,78408,78409],{},"console.log(c) 输出[3,4]",[19,78411,78412],{},"③可以按需导入，忽略某些返回值",[19,78414,78415],{},[39,78416],{"alt":82,"src":78417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,78419,78420],{},"④支持多维数组的结构",[77,78422,78426],{"className":78423,"code":78424,"language":78425,"meta":82,"style":82},"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",[84,78427,78428,78456,78472,78487,78502],{"__ignoreMap":82},[87,78429,78430,78432,78434,78436,78438,78440,78442,78444,78447,78449,78451,78453],{"class":89,"line":90},[87,78431,7742],{"class":171},[87,78433,52770],{"class":97},[87,78435,946],{"class":171},[87,78437,53163],{"class":97},[87,78439,1313],{"class":104},[87,78441,13385],{"class":97},[87,78443,1176],{"class":104},[87,78445,78446],{"class":97},", [",[87,78448,1170],{"class":104},[87,78450,13385],{"class":97},[87,78452,1389],{"class":104},[87,78454,78455],{"class":97},"]]\n",[87,78457,78458,78461,78463,78465,78467,78469],{"class":89,"line":101},[87,78459,78460],{"class":97},"console.",[87,78462,59183],{"class":205},[87,78464,4805],{"class":97},[87,78466,111],{"class":104},[87,78468,5169],{"class":97},[87,78470,78471],{"class":199},"  \u002F\u002F1\n",[87,78473,78474,78476,78478,78480,78482,78484],{"class":89,"line":120},[87,78475,78460],{"class":97},[87,78477,59183],{"class":205},[87,78479,4805],{"class":97},[87,78481,1313],{"class":104},[87,78483,5169],{"class":97},[87,78485,78486],{"class":199},"  \u002F\u002F2\n",[87,78488,78489,78491,78493,78495,78497,78499],{"class":89,"line":222},[87,78490,78460],{"class":97},[87,78492,59183],{"class":205},[87,78494,4805],{"class":97},[87,78496,1176],{"class":104},[87,78498,5169],{"class":97},[87,78500,78501],{"class":199},"  \u002F\u002F[3,4]\n",[87,78503,78504,78506,78508,78510,78512,78514,78516,78518],{"class":89,"line":234},[87,78505,78460],{"class":97},[87,78507,59183],{"class":205},[87,78509,4805],{"class":97},[87,78511,1176],{"class":104},[87,78513,5854],{"class":97},[87,78515,111],{"class":104},[87,78517,5169],{"class":97},[87,78519,78520],{"class":199},"  \u002F\u002F3\n",[77,78522,78524],{"className":78423,"code":78523,"language":78425,"meta":82,"style":82},"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",[84,78525,78526,78553,78564,78575],{"__ignoreMap":82},[87,78527,78528,78530,78533,78535,78537,78539,78541,78543,78545,78547,78549,78551],{"class":89,"line":90},[87,78529,7742],{"class":171},[87,78531,78532],{"class":97}," [a, b, c] ",[87,78534,946],{"class":171},[87,78536,53163],{"class":97},[87,78538,1313],{"class":104},[87,78540,13385],{"class":97},[87,78542,1176],{"class":104},[87,78544,78446],{"class":97},[87,78546,1170],{"class":104},[87,78548,13385],{"class":97},[87,78550,1389],{"class":104},[87,78552,78455],{"class":97},[87,78554,78555,78557,78559,78562],{"class":89,"line":101},[87,78556,78460],{"class":97},[87,78558,59183],{"class":205},[87,78560,78561],{"class":97},"(a)",[87,78563,78471],{"class":199},[87,78565,78566,78568,78570,78573],{"class":89,"line":120},[87,78567,78460],{"class":97},[87,78569,59183],{"class":205},[87,78571,78572],{"class":97},"(b)",[87,78574,78486],{"class":199},[87,78576,78577,78579,78581,78584],{"class":89,"line":222},[87,78578,78460],{"class":97},[87,78580,59183],{"class":205},[87,78582,78583],{"class":97},"(c)",[87,78585,78501],{"class":199},[77,78587,78589],{"className":78423,"code":78588,"language":78425,"meta":82,"style":82},"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",[84,78590,78591,78618,78628,78638,78648],{"__ignoreMap":82},[87,78592,78593,78595,78598,78600,78602,78604,78606,78608,78610,78612,78614,78616],{"class":89,"line":90},[87,78594,7742],{"class":171},[87,78596,78597],{"class":97}," [a, b, [c, d]] ",[87,78599,946],{"class":171},[87,78601,53163],{"class":97},[87,78603,1313],{"class":104},[87,78605,13385],{"class":97},[87,78607,1176],{"class":104},[87,78609,78446],{"class":97},[87,78611,1170],{"class":104},[87,78613,13385],{"class":97},[87,78615,1389],{"class":104},[87,78617,78455],{"class":97},[87,78619,78620,78622,78624,78626],{"class":89,"line":101},[87,78621,78460],{"class":97},[87,78623,59183],{"class":205},[87,78625,78561],{"class":97},[87,78627,78471],{"class":199},[87,78629,78630,78632,78634,78636],{"class":89,"line":120},[87,78631,78460],{"class":97},[87,78633,59183],{"class":205},[87,78635,78572],{"class":97},[87,78637,78486],{"class":199},[87,78639,78640,78642,78644,78646],{"class":89,"line":222},[87,78641,78460],{"class":97},[87,78643,59183],{"class":205},[87,78645,78583],{"class":97},[87,78647,78520],{"class":199},[87,78649,78650,78652,78654,78657],{"class":89,"line":234},[87,78651,78460],{"class":97},[87,78653,59183],{"class":205},[87,78655,78656],{"class":97},"(d)",[87,78658,78659],{"class":199},"  \u002F\u002F4\n",[44,78661,78663],{"id":78662},"_462-对象解构","4.6.2 对象解构",[19,78665,78666],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,78668,78669],{},"用的非常非常多！！！！！！",[49,78671,78673],{"id":78672},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,78675,78676],{},"基本语法：",[1055,78678,78679,78682,78685,78688],{},[29,78680,78681],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[29,78683,78684],{},"对象属性的值将被赋值给与属性名相同的变量",[29,78686,78687],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[29,78689,78690],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[77,78692,78694],{"className":51579,"code":78693,"language":51581,"meta":82,"style":82},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[84,78695,78696,78701,78706,78711,78715],{"__ignoreMap":82},[87,78697,78698],{"class":89,"line":90},[87,78699,78700],{"class":97},"const obj = {\n",[87,78702,78703],{"class":89,"line":101},[87,78704,78705],{"class":97},"   uname: 'pink老师',\n",[87,78707,78708],{"class":89,"line":120},[87,78709,78710],{"class":97},"   age: 18,\n",[87,78712,78713],{"class":89,"line":222},[87,78714,123],{"class":97},[87,78716,78717],{"class":89,"line":234},[87,78718,78719],{"class":97},"const { uname, age } = obj\n",[19,78721,78722],{},"上方代码这样写等价于：",[19,78724,78725],{},"const uname等价于obj.uname",[19,78727,78728],{},"变量名可以重新改名：",[19,78730,78731],{},"const uname='red老师'",[19,78733,78734],{},"const user={",[19,78736,78737],{},"  uname:'pink老师',",[19,78739,78740],{},"  age:18",[19,78742,2037],{},[19,78744,78745],{},"const {uname,age}=user",[19,78747,78748],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,78750,78751],{},"const {旧变量名：新变量名}=对象",[19,78753,78754],{},"const {uname:username,age}=user",[49,78756,78758],{"id":78757},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,78760,78761],{},[39,78762],{"alt":82,"src":78763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[49,78765,78767],{"id":78766},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,78769,78770],{},[39,78771],{"alt":82,"src":78772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[77,78774,78776],{"className":54004,"code":78775,"language":54006,"meta":82,"style":82},"  \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",[84,78777,78778,78786,78791,78796,78801,78806,78811,78816,78821,78826,78830,78835,78840],{"__ignoreMap":82},[87,78779,78780,78782,78784],{"class":89,"line":90},[87,78781,53081],{"class":97},[87,78783,52750],{"class":93},[87,78785,953],{"class":97},[87,78787,78788],{"class":89,"line":101},[87,78789,78790],{"class":97},"    const pig = {\n",[87,78792,78793],{"class":89,"line":120},[87,78794,78795],{"class":97},"      name: '佩奇',\n",[87,78797,78798],{"class":89,"line":222},[87,78799,78800],{"class":97},"      family: {\n",[87,78802,78803],{"class":89,"line":234},[87,78804,78805],{"class":97},"        mother: '猪妈妈',\n",[87,78807,78808],{"class":89,"line":256},[87,78809,78810],{"class":97},"        father: '猪爸爸',\n",[87,78812,78813],{"class":89,"line":269},[87,78814,78815],{"class":97},"        sister: '乔治'\n",[87,78817,78818],{"class":89,"line":463},[87,78819,78820],{"class":97},"      },\n",[87,78822,78823],{"class":89,"line":469},[87,78824,78825],{"class":97},"      age: 6\n",[87,78827,78828],{"class":89,"line":2287},[87,78829,3142],{"class":97},[87,78831,78832],{"class":89,"line":2568},[87,78833,78834],{"class":97},"    \u002F\u002F 多级对象解构\n",[87,78836,78837],{"class":89,"line":2573},[87,78838,78839],{"class":97},"    const { name, family: { mother, father, sister }, age } = pig\n",[87,78841,78842,78844,78846],{"class":89,"line":2579},[87,78843,53354],{"class":97},[87,78845,52750],{"class":93},[87,78847,953],{"class":97},[19,78849,78850],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[77,78852,78855],{"className":78853,"code":78854,"language":77375,"meta":82,"style":82},"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",[84,78856,78857,78862,78873,78885,78897,78906,78910,78921,78933,78943,78948,78952,78962,78973,78982,78986,78990,79001,79012,79021,79025,79030],{"__ignoreMap":82},[87,78858,78859],{"class":89,"line":90},[87,78860,78861],{"class":199},"    \u002F\u002F 这是后台传递过来的数据\n",[87,78863,78864,78866,78869,78871],{"class":89,"line":101},[87,78865,12171],{"class":171},[87,78867,78868],{"class":97}," msg ",[87,78870,946],{"class":171},[87,78872,98],{"class":97},[87,78874,78875,78878,78880,78883],{"class":89,"line":120},[87,78876,78877],{"class":949},"      \"code\"",[87,78879,1951],{"class":171},[87,78881,78882],{"class":104}," 200",[87,78884,32413],{"class":97},[87,78886,78887,78890,78892,78895],{"class":89,"line":222},[87,78888,78889],{"class":949},"      \"msg\"",[87,78891,1951],{"class":171},[87,78893,78894],{"class":949}," \"获取新闻列表成功\"",[87,78896,32413],{"class":97},[87,78898,78899,78902,78904],{"class":89,"line":234},[87,78900,78901],{"class":949},"      \"data\"",[87,78903,1951],{"class":171},[87,78905,56383],{"class":97},[87,78907,78908],{"class":89,"line":256},[87,78909,3465],{"class":97},[87,78911,78912,78915,78917,78919],{"class":89,"line":269},[87,78913,78914],{"class":949},"          \"id\"",[87,78916,1951],{"class":171},[87,78918,568],{"class":104},[87,78920,32413],{"class":97},[87,78922,78923,78926,78928,78931],{"class":89,"line":463},[87,78924,78925],{"class":949},"          \"title\"",[87,78927,1951],{"class":171},[87,78929,78930],{"class":949}," \"5G商用自己，三大运用商收入下降\"",[87,78932,32413],{"class":97},[87,78934,78935,78938,78940],{"class":89,"line":469},[87,78936,78937],{"class":949},"          \"count\"",[87,78939,1951],{"class":171},[87,78941,78942],{"class":104}," 58\n",[87,78944,78945],{"class":89,"line":2287},[87,78946,78947],{"class":97},"        },\n",[87,78949,78950],{"class":89,"line":2568},[87,78951,3465],{"class":97},[87,78953,78954,78956,78958,78960],{"class":89,"line":2573},[87,78955,78914],{"class":949},[87,78957,1951],{"class":171},[87,78959,15705],{"class":104},[87,78961,32413],{"class":97},[87,78963,78964,78966,78968,78971],{"class":89,"line":2579},[87,78965,78925],{"class":949},[87,78967,1951],{"class":171},[87,78969,78970],{"class":949}," \"国际媒体头条速览\"",[87,78972,32413],{"class":97},[87,78974,78975,78977,78979],{"class":89,"line":2584},[87,78976,78937],{"class":949},[87,78978,1951],{"class":171},[87,78980,78981],{"class":104}," 56\n",[87,78983,78984],{"class":89,"line":2598},[87,78985,78947],{"class":97},[87,78987,78988],{"class":89,"line":2603},[87,78989,3465],{"class":97},[87,78991,78992,78994,78996,78999],{"class":89,"line":2609},[87,78993,78914],{"class":949},[87,78995,1951],{"class":171},[87,78997,78998],{"class":104}," 3",[87,79000,32413],{"class":97},[87,79002,79003,79005,79007,79010],{"class":89,"line":2630},[87,79004,78925],{"class":949},[87,79006,1951],{"class":171},[87,79008,79009],{"class":949}," \"乌克兰和俄罗斯持续冲突\"",[87,79011,32413],{"class":97},[87,79013,79014,79016,79018],{"class":89,"line":2635},[87,79015,78937],{"class":949},[87,79017,1951],{"class":171},[87,79019,79020],{"class":104}," 1669\n",[87,79022,79023],{"class":89,"line":2649},[87,79024,78947],{"class":97},[87,79026,79027],{"class":89,"line":2654},[87,79028,79029],{"class":97},"      ]\n",[87,79031,79032],{"class":89,"line":2683},[87,79033,3142],{"class":97},[19,79035,79036],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,79038,79039],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,79041,79042],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,79044,79045],{},"function({data}) {",[19,79047,79048],{},"console.log(data)",[19,79050,2037],{},[19,79052,79053],{},"render(msg)",[19,79055,79056],{},"实参传递给形参的时候解构了",[19,79058,79059],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,79061,79062],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,79064,79065],{},"function render({data:mydata}) {",[19,79067,79068],{},"  console.log(data)",[19,79070,2037],{},[44,79072,79074],{"id":79073},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,79076,79077],{},"有两种情况：一个是数组结构，一个是立即执行函数",[1055,79079,79080],{},[29,79081,79082],{},"如果对一个数组进行遍历，有两种方式：",[19,79084,79085],{},"①法1",[19,79087,79088],{},"const arr=[1,2,3]",[19,79090,79091],{},"arr.map(function(item,index) {",[19,79093,79094],{},"  console.log(item)",[19,79096,53401],{},[19,79098,79099],{},[39,79100],{"alt":82,"src":79101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,79103,79104],{},"②法2",[19,79106,79107],{},"const str='pink'",[19,79109,79110],{},"[1,2,3].map(function(item,index) {",[19,79112,79113],{},"console.log(item)",[19,79115,53401],{},[19,79117,79118],{},[39,79119],{"alt":82,"src":79120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,79122,79123],{},"此时会报错",[19,79125,79126],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,79128,79113],{},[19,79130,53401],{},[19,79132,79133],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79135,79137],{"id":79136},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,79139,79140],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,79142,79143],{},"可以理解为加强版的for循环",[19,79145,79146],{},[39,79147],{"alt":82,"src":79148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,79150,79151],{},"里边不写return，不返回数组，只遍历不返回",[19,79153,79154],{},"map是返回数组",[19,79156,79157],{},"forEach主要用于遍历数组对象",[77,79159,79161],{"className":54004,"code":79160,"language":54006,"meta":82,"style":82},"  \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",[84,79162,79163,79171,79176,79181,79186,79191,79195,79200],{"__ignoreMap":82},[87,79164,79165,79167,79169],{"class":89,"line":90},[87,79166,53081],{"class":97},[87,79168,52750],{"class":93},[87,79170,953],{"class":97},[87,79172,79173],{"class":89,"line":101},[87,79174,79175],{"class":97},"    const arr = ['red', 'green', 'pink']\n",[87,79177,79178],{"class":89,"line":120},[87,79179,79180],{"class":97},"    const result = arr.forEach(function (item, index) {\n",[87,79182,79183],{"class":89,"line":222},[87,79184,79185],{"class":97},"      console.log(item)\n",[87,79187,79188],{"class":89,"line":234},[87,79189,79190],{"class":97},"      console.log(index)\n",[87,79192,79193],{"class":89,"line":256},[87,79194,34408],{"class":97},[87,79196,79197],{"class":89,"line":269},[87,79198,79199],{"class":97},"    console.log(result)\n",[87,79201,79202,79204,79206],{"class":89,"line":463},[87,79203,53354],{"class":97},[87,79205,52750],{"class":93},[87,79207,953],{"class":97},[19,79209,79210],{},[39,79211],{"alt":82,"src":79212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79214,79216],{"id":79215},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,79218,79219],{},[39,79220],{"alt":82,"src":79221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,79223,79224],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[77,79226,79228],{"className":54004,"code":79227,"language":54006,"meta":82,"style":82},"\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",[84,79229,79230,79238,79246,79251,79256,79260,79264,79269,79273,79278,79286],{"__ignoreMap":82},[87,79231,79232,79234,79236],{"class":89,"line":90},[87,79233,938],{"class":97},[87,79235,52737],{"class":93},[87,79237,953],{"class":97},[87,79239,79240,79242,79244],{"class":89,"line":101},[87,79241,53081],{"class":97},[87,79243,52750],{"class":93},[87,79245,953],{"class":97},[87,79247,79248],{"class":89,"line":120},[87,79249,79250],{"class":97},"    const arr = [10, 20, 30]\n",[87,79252,79253],{"class":89,"line":222},[87,79254,79255],{"class":97},"    const newArr = arr.filter(function (item, index) {\n",[87,79257,79258],{"class":89,"line":234},[87,79259,79185],{"class":97},[87,79261,79262],{"class":89,"line":256},[87,79263,79190],{"class":97},[87,79265,79266],{"class":89,"line":269},[87,79267,79268],{"class":97},"      return item >= 20\n",[87,79270,79271],{"class":89,"line":463},[87,79272,34408],{"class":97},[87,79274,79275],{"class":89,"line":469},[87,79276,79277],{"class":97},"    console.log(newArr)\n",[87,79279,79280,79282,79284],{"class":89,"line":2287},[87,79281,53354],{"class":97},[87,79283,52750],{"class":93},[87,79285,953],{"class":97},[87,79287,79288,79290,79292],{"class":89,"line":2568},[87,79289,963],{"class":97},[87,79291,52737],{"class":93},[87,79293,953],{"class":97},[19,79295,79296],{},"这个也可以写成箭头函数：",[77,79298,79300],{"className":51579,"code":79299,"language":51581,"meta":82,"style":82},"const newArr = arr.filter(item => item >= 20)\n",[84,79301,79302],{"__ignoreMap":82},[87,79303,79304],{"class":89,"line":90},[87,79305,79299],{"class":97},[14,79307,79309],{"id":79308},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,79311,79312],{},[39,79313],{"alt":82,"src":79314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,79316,79317],{},"步骤：",[19,79319,79320],{},"①：渲染页面模块",[26,79322,79323,79326],{},[29,79324,79325],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[29,79327,79328],{},"用forEach+字符串的形式",[19,79330,79331],{},"②：点击不同需求，显示不同页面内容",[26,79333,79334,79337,79340,79343,79346],{},[29,79335,79336],{},"点击采取事件委托方式 .filter",[29,79338,79339],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[29,79341,79342],{},"筛选条件是根据点击的 data-index 来判断",[29,79344,79345],{},"可以使用对象解构，把事件对象解构",[29,79347,79348],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[77,79350,79352],{"className":51579,"code":79351,"language":51581,"meta":82,"style":82},"\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",[84,79353,79354,79364,79378,79382,79390,79404,79424,79436,79444,79450,79460,79470,79480,79484,79488,79494,79507,79519,79529,79541,79545,79549,79556,79569,79581,79598,79615,79628,79632,79636,79648,79658,79662,79666,79673,79714,79741,79751,79755,79759,79767,79779,79783,79787,79795,79807,79819,79830,79834,79838,79847,79859,79870,79874,79878,79887,79899,79911,79915,79919,79926,79936,79948,79960,79975,79979,79983,79991,80007,80017,80027,80037,80049,80053,80057,80067,80078,80088,80092,80100,80108,80112,80120,80135,80161,80186,80211,80230,80238,80252,80257,80262,80267,80272,80277,80285,80293,80298,80309,80314,80324,80334,80344,80354,80358,80362,80371,80380,80389,80398,80402,80406,80415,80424,80433,80442,80446,80450,80459,80468,80477,80486,80490,80494,80503,80512,80521,80530,80534,80538,80547,80556,80565,80574,80578,80582,80591,80600,80609,80618,80622,80626,80635,80644,80652,80661,80665,80669,80673,80678,80690,80695,80707,80711,80728,80755,80764,80769,80779,80789,80798,80803,80808,80812,80817,80834,80838,80843,80851,80856,80883,80888,80908,80913,80925,80930,80935,80940,80951,80965,81002,81020,81053,81070,81094,81098,81103,81109,81113,81117,81121,81129,81137,81141],{"__ignoreMap":82},[87,79355,79356,79358,79360,79362],{"class":89,"line":90},[87,79357,52243],{"class":97},[87,79359,52246],{"class":93},[87,79361,52249],{"class":205},[87,79363,953],{"class":97},[87,79365,79366,79368,79370,79372,79374,79376],{"class":89,"line":101},[87,79367,938],{"class":97},[87,79369,51581],{"class":93},[87,79371,52260],{"class":205},[87,79373,946],{"class":97},[87,79375,52265],{"class":949},[87,79377,953],{"class":97},[87,79379,79380],{"class":89,"line":120},[87,79381,3355],{"emptyLinePlaceholder":1029},[87,79383,79384,79386,79388],{"class":89,"line":222},[87,79385,938],{"class":97},[87,79387,52278],{"class":93},[87,79389,953],{"class":97},[87,79391,79392,79394,79396,79398,79400,79402],{"class":89,"line":234},[87,79393,53081],{"class":97},[87,79395,52288],{"class":93},[87,79397,52291],{"class":205},[87,79399,946],{"class":97},[87,79401,52296],{"class":949},[87,79403,953],{"class":97},[87,79405,79406,79408,79410,79412,79414,79416,79418,79420,79422],{"class":89,"line":256},[87,79407,53081],{"class":97},[87,79409,52288],{"class":93},[87,79411,15870],{"class":205},[87,79413,946],{"class":97},[87,79415,52335],{"class":949},[87,79417,52315],{"class":205},[87,79419,946],{"class":97},[87,79421,52342],{"class":949},[87,79423,953],{"class":97},[87,79425,79426,79428,79430,79432,79434],{"class":89,"line":269},[87,79427,53081],{"class":97},[87,79429,52351],{"class":93},[87,79431,52354],{"class":97},[87,79433,52351],{"class":93},[87,79435,953],{"class":97},[87,79437,79438,79440,79442],{"class":89,"line":463},[87,79439,53081],{"class":97},[87,79441,1006],{"class":93},[87,79443,953],{"class":97},[87,79445,79446,79448],{"class":89,"line":469},[87,79447,7353],{"class":93},[87,79449,98],{"class":97},[87,79451,79452,79454,79456,79458],{"class":89,"line":2287},[87,79453,55631],{"class":104},[87,79455,108],{"class":97},[87,79457,111],{"class":104},[87,79459,117],{"class":97},[87,79461,79462,79464,79466,79468],{"class":89,"line":2568},[87,79463,55642],{"class":104},[87,79465,108],{"class":97},[87,79467,111],{"class":104},[87,79469,117],{"class":97},[87,79471,79472,79474,79476,79478],{"class":89,"line":2573},[87,79473,73524],{"class":104},[87,79475,108],{"class":97},[87,79477,61441],{"class":104},[87,79479,117],{"class":97},[87,79481,79482],{"class":89,"line":2579},[87,79483,3142],{"class":97},[87,79485,79486],{"class":89,"line":2584},[87,79487,3355],{"emptyLinePlaceholder":1029},[87,79489,79490,79492],{"class":89,"line":2598},[87,79491,63058],{"class":205},[87,79493,98],{"class":97},[87,79495,79496,79498,79500,79503,79505],{"class":89,"line":2603},[87,79497,55707],{"class":104},[87,79499,108],{"class":97},[87,79501,79502],{"class":104},"990",[87,79504,245],{"class":171},[87,79506,117],{"class":97},[87,79508,79509,79511,79513,79515,79517],{"class":89,"line":2609},[87,79510,55642],{"class":104},[87,79512,108],{"class":97},[87,79514,111],{"class":104},[87,79516,114],{"class":104},[87,79518,117],{"class":97},[87,79520,79521,79523,79525,79527],{"class":89,"line":2630},[87,79522,55945],{"class":104},[87,79524,108],{"class":97},[87,79526,52420],{"class":104},[87,79528,117],{"class":97},[87,79530,79531,79534,79536,79539],{"class":89,"line":2635},[87,79532,79533],{"class":104},"      flex-wrap",[87,79535,108],{"class":97},[87,79537,79538],{"class":104},"wrap",[87,79540,117],{"class":97},[87,79542,79543],{"class":89,"line":2649},[87,79544,3142],{"class":97},[87,79546,79547],{"class":89,"line":2654},[87,79548,3355],{"emptyLinePlaceholder":1029},[87,79550,79551,79554],{"class":89,"line":2683},[87,79552,79553],{"class":205},"    .item",[87,79555,98],{"class":97},[87,79557,79558,79560,79562,79565,79567],{"class":89,"line":2688},[87,79559,55707],{"class":104},[87,79561,108],{"class":97},[87,79563,79564],{"class":104},"240",[87,79566,245],{"class":171},[87,79568,117],{"class":97},[87,79570,79571,79573,79575,79577,79579],{"class":89,"line":2705},[87,79572,62935],{"class":104},[87,79574,108],{"class":97},[87,79576,242],{"class":104},[87,79578,245],{"class":171},[87,79580,117],{"class":97},[87,79582,79583,79585,79587,79589,79591,79594,79596],{"class":89,"line":2710},[87,79584,55631],{"class":104},[87,79586,108],{"class":97},[87,79588,1792],{"class":104},[87,79590,245],{"class":171},[87,79592,79593],{"class":104}," 30",[87,79595,245],{"class":171},[87,79597,117],{"class":97},[87,79599,79600,79602,79604,79606,79608,79611,79613],{"class":89,"line":2715},[87,79601,62795],{"class":104},[87,79603,108],{"class":97},[87,79605,29068],{"class":104},[87,79607,574],{"class":104},[87,79609,79610],{"class":104}," .5",[87,79612,571],{"class":171},[87,79614,117],{"class":97},[87,79616,79617,79620,79622,79624,79626],{"class":89,"line":2720},[87,79618,79619],{"class":104},"      margin-bottom",[87,79621,108],{"class":97},[87,79623,1792],{"class":104},[87,79625,245],{"class":171},[87,79627,117],{"class":97},[87,79629,79630],{"class":89,"line":2734},[87,79631,3142],{"class":97},[87,79633,79634],{"class":89,"line":2739},[87,79635,3355],{"emptyLinePlaceholder":1029},[87,79637,79638,79641,79643,79646],{"class":89,"line":3532},[87,79639,79640],{"class":205},"    .item:nth-child",[87,79642,165],{"class":97},[87,79644,79645],{"class":104},"4n",[87,79647,13392],{"class":97},[87,79649,79650,79652,79654,79656],{"class":89,"line":3546},[87,79651,62935],{"class":104},[87,79653,108],{"class":97},[87,79655,111],{"class":104},[87,79657,117],{"class":97},[87,79659,79660],{"class":89,"line":3554},[87,79661,3142],{"class":97},[87,79663,79664],{"class":89,"line":3559},[87,79665,3355],{"emptyLinePlaceholder":1029},[87,79667,79668,79671],{"class":89,"line":3565},[87,79669,79670],{"class":205},"    .item:hover",[87,79672,98],{"class":97},[87,79674,79675,79678,79680,79682,79684,79686,79688,79690,79692,79695,79697,79699,79701,79703,79705,79707,79709,79712],{"class":89,"line":3571},[87,79676,79677],{"class":104},"      box-shadow",[87,79679,108],{"class":97},[87,79681,111],{"class":104},[87,79683,245],{"class":171},[87,79685,577],{"class":104},[87,79687,245],{"class":171},[87,79689,3103],{"class":104},[87,79691,245],{"class":171},[87,79693,79694],{"class":104}," rgba",[87,79696,165],{"class":97},[87,79698,111],{"class":104},[87,79700,13385],{"class":97},[87,79702,111],{"class":104},[87,79704,13385],{"class":97},[87,79706,111],{"class":104},[87,79708,13385],{"class":97},[87,79710,79711],{"class":104},".2",[87,79713,175],{"class":97},[87,79715,79716,79719,79721,79724,79726,79728,79730,79733,79735,79737,79739],{"class":89,"line":3576},[87,79717,79718],{"class":104},"      transform",[87,79720,108],{"class":97},[87,79722,79723],{"class":104},"translate3d",[87,79725,165],{"class":97},[87,79727,111],{"class":104},[87,79729,13385],{"class":97},[87,79731,79732],{"class":104},"-4",[87,79734,245],{"class":171},[87,79736,13385],{"class":97},[87,79738,111],{"class":104},[87,79740,175],{"class":97},[87,79742,79743,79745,79747,79749],{"class":89,"line":8898},[87,79744,62960],{"class":104},[87,79746,108],{"class":97},[87,79748,62965],{"class":104},[87,79750,117],{"class":97},[87,79752,79753],{"class":89,"line":8922},[87,79754,3142],{"class":97},[87,79756,79757],{"class":89,"line":8927},[87,79758,3355],{"emptyLinePlaceholder":1029},[87,79760,79761,79763,79765],{"class":89,"line":8933},[87,79762,79553],{"class":205},[87,79764,56551],{"class":93},[87,79766,98],{"class":97},[87,79768,79769,79771,79773,79775,79777],{"class":89,"line":8960},[87,79770,55707],{"class":104},[87,79772,108],{"class":97},[87,79774,536],{"class":104},[87,79776,1423],{"class":171},[87,79778,117],{"class":97},[87,79780,79781],{"class":89,"line":8965},[87,79782,3142],{"class":97},[87,79784,79785],{"class":89,"line":8971},[87,79786,3355],{"emptyLinePlaceholder":1029},[87,79788,79789,79791,79793],{"class":89,"line":8983},[87,79790,79553],{"class":205},[87,79792,63239],{"class":205},[87,79794,98],{"class":97},[87,79796,79797,79799,79801,79803,79805],{"class":89,"line":8995},[87,79798,55858],{"class":104},[87,79800,108],{"class":97},[87,79802,1743],{"class":104},[87,79804,245],{"class":171},[87,79806,117],{"class":97},[87,79808,79809,79811,79813,79815,79817],{"class":89,"line":9007},[87,79810,79619],{"class":104},[87,79812,108],{"class":97},[87,79814,242],{"class":104},[87,79816,245],{"class":171},[87,79818,117],{"class":97},[87,79820,79821,79823,79825,79828],{"class":89,"line":10666},[87,79822,58352],{"class":104},[87,79824,108],{"class":97},[87,79826,79827],{"class":104},"#666",[87,79829,117],{"class":97},[87,79831,79832],{"class":89,"line":10691},[87,79833,3142],{"class":97},[87,79835,79836],{"class":89,"line":10714},[87,79837,3355],{"emptyLinePlaceholder":1029},[87,79839,79840,79842,79845],{"class":89,"line":10738},[87,79841,79553],{"class":205},[87,79843,79844],{"class":205}," .price",[87,79846,98],{"class":97},[87,79848,79849,79851,79853,79855,79857],{"class":89,"line":10743},[87,79850,55858],{"class":104},[87,79852,108],{"class":97},[87,79854,1842],{"class":104},[87,79856,245],{"class":171},[87,79858,117],{"class":97},[87,79860,79861,79863,79865,79868],{"class":89,"line":10748},[87,79862,58352],{"class":104},[87,79864,108],{"class":97},[87,79866,79867],{"class":104},"firebrick",[87,79869,117],{"class":97},[87,79871,79872],{"class":89,"line":10753},[87,79873,3142],{"class":97},[87,79875,79876],{"class":89,"line":10762},[87,79877,3355],{"emptyLinePlaceholder":1029},[87,79879,79880,79882,79885],{"class":89,"line":10767},[87,79881,79553],{"class":205},[87,79883,79884],{"class":205}," .price::before",[87,79886,98],{"class":97},[87,79888,79889,79892,79894,79897],{"class":89,"line":10773},[87,79890,79891],{"class":104},"      content",[87,79893,108],{"class":97},[87,79895,79896],{"class":949},"'￥'",[87,79898,117],{"class":97},[87,79900,79901,79903,79905,79907,79909],{"class":89,"line":10794},[87,79902,55858],{"class":104},[87,79904,108],{"class":97},[87,79906,1642],{"class":104},[87,79908,245],{"class":171},[87,79910,117],{"class":97},[87,79912,79913],{"class":89,"line":10800},[87,79914,3142],{"class":97},[87,79916,79917],{"class":89,"line":10814},[87,79918,3355],{"emptyLinePlaceholder":1029},[87,79920,79921,79924],{"class":89,"line":10820},[87,79922,79923],{"class":205},"    .filter",[87,79925,98],{"class":97},[87,79927,79928,79930,79932,79934],{"class":89,"line":10847},[87,79929,55945],{"class":104},[87,79931,108],{"class":97},[87,79933,52420],{"class":104},[87,79935,117],{"class":97},[87,79937,79938,79940,79942,79944,79946],{"class":89,"line":10856},[87,79939,55707],{"class":104},[87,79941,108],{"class":97},[87,79943,79502],{"class":104},[87,79945,245],{"class":171},[87,79947,117],{"class":97},[87,79949,79950,79952,79954,79956,79958],{"class":89,"line":10862},[87,79951,55642],{"class":104},[87,79953,108],{"class":97},[87,79955,111],{"class":104},[87,79957,114],{"class":104},[87,79959,117],{"class":97},[87,79961,79962,79964,79966,79968,79970,79972],{"class":89,"line":10870},[87,79963,55631],{"class":104},[87,79965,108],{"class":97},[87,79967,1749],{"class":104},[87,79969,245],{"class":171},[87,79971,79593],{"class":104},[87,79973,79974],{"class":171},"px\n",[87,79976,79977],{"class":89,"line":10875},[87,79978,3142],{"class":97},[87,79980,79981],{"class":89,"line":17553},[87,79982,3355],{"emptyLinePlaceholder":1029},[87,79984,79985,79987,79989],{"class":89,"line":17559},[87,79986,79923],{"class":205},[87,79988,2356],{"class":93},[87,79990,98],{"class":97},[87,79992,79993,79995,79997,79999,80001,80003,80005],{"class":89,"line":17582},[87,79994,55631],{"class":104},[87,79996,108],{"class":97},[87,79998,242],{"class":104},[87,80000,245],{"class":171},[87,80002,9900],{"class":104},[87,80004,245],{"class":171},[87,80006,117],{"class":97},[87,80008,80009,80011,80013,80015],{"class":89,"line":17588},[87,80010,62657],{"class":104},[87,80012,108],{"class":97},[87,80014,62753],{"class":104},[87,80016,117],{"class":97},[87,80018,80019,80021,80023,80025],{"class":89,"line":17611},[87,80020,58352],{"class":104},[87,80022,108],{"class":97},[87,80024,79827],{"class":104},[87,80026,117],{"class":97},[87,80028,80029,80031,80033,80035],{"class":89,"line":17625},[87,80030,64904],{"class":104},[87,80032,108],{"class":97},[87,80034,55673],{"class":104},[87,80036,117],{"class":97},[87,80038,80039,80041,80043,80045,80047],{"class":89,"line":17645},[87,80040,62685],{"class":104},[87,80042,108],{"class":97},[87,80044,1792],{"class":104},[87,80046,245],{"class":171},[87,80048,117],{"class":97},[87,80050,80051],{"class":89,"line":17651},[87,80052,3142],{"class":97},[87,80054,80055],{"class":89,"line":17662},[87,80056,3355],{"emptyLinePlaceholder":1029},[87,80058,80059,80061,80063,80065],{"class":89,"line":17685},[87,80060,79923],{"class":205},[87,80062,2356],{"class":93},[87,80064,62835],{"class":205},[87,80066,98],{"class":97},[87,80068,80069,80071,80073,80076],{"class":89,"line":17707},[87,80070,55820],{"class":104},[87,80072,108],{"class":97},[87,80074,80075],{"class":104},"#05943c",[87,80077,117],{"class":97},[87,80079,80080,80082,80084,80086],{"class":89,"line":17712},[87,80081,58352],{"class":104},[87,80083,108],{"class":97},[87,80085,61778],{"class":104},[87,80087,117],{"class":97},[87,80089,80090],{"class":89,"line":17718},[87,80091,3142],{"class":97},[87,80093,80094,80096,80098],{"class":89,"line":17732},[87,80095,53354],{"class":97},[87,80097,1006],{"class":93},[87,80099,953],{"class":97},[87,80101,80102,80104,80106],{"class":89,"line":17745},[87,80103,963],{"class":97},[87,80105,52278],{"class":93},[87,80107,953],{"class":97},[87,80109,80110],{"class":89,"line":17750},[87,80111,3355],{"emptyLinePlaceholder":1029},[87,80113,80114,80116,80118],{"class":89,"line":17764},[87,80115,938],{"class":97},[87,80117,52737],{"class":93},[87,80119,953],{"class":97},[87,80121,80122,80124,80126,80128,80130,80133],{"class":89,"line":17769},[87,80123,53081],{"class":97},[87,80125,94],{"class":93},[87,80127,943],{"class":205},[87,80129,946],{"class":97},[87,80131,80132],{"class":949},"\"filter\"",[87,80134,953],{"class":97},[87,80136,80137,80139,80141,80143,80145,80147,80150,80152,80154,80157,80159],{"class":89,"line":17775},[87,80138,52285],{"class":97},[87,80140,1334],{"class":93},[87,80142,61993],{"class":205},[87,80144,946],{"class":97},[87,80146,61998],{"class":949},[87,80148,80149],{"class":205}," data-index",[87,80151,946],{"class":97},[87,80153,4632],{"class":949},[87,80155,80156],{"class":97},">0-100元\u003C\u002F",[87,80158,1334],{"class":93},[87,80160,953],{"class":97},[87,80162,80163,80165,80167,80169,80171,80173,80175,80177,80179,80182,80184],{"class":89,"line":17780},[87,80164,52285],{"class":97},[87,80166,1334],{"class":93},[87,80168,61993],{"class":205},[87,80170,946],{"class":97},[87,80172,61998],{"class":949},[87,80174,80149],{"class":205},[87,80176,946],{"class":97},[87,80178,4655],{"class":949},[87,80180,80181],{"class":97},">100-300元\u003C\u002F",[87,80183,1334],{"class":93},[87,80185,953],{"class":97},[87,80187,80188,80190,80192,80194,80196,80198,80200,80202,80204,80207,80209],{"class":89,"line":17794},[87,80189,52285],{"class":97},[87,80191,1334],{"class":93},[87,80193,61993],{"class":205},[87,80195,946],{"class":97},[87,80197,61998],{"class":949},[87,80199,80149],{"class":205},[87,80201,946],{"class":97},[87,80203,4668],{"class":949},[87,80205,80206],{"class":97},">300元以上\u003C\u002F",[87,80208,1334],{"class":93},[87,80210,953],{"class":97},[87,80212,80213,80215,80217,80219,80221,80223,80226,80228],{"class":89,"line":17799},[87,80214,52285],{"class":97},[87,80216,1334],{"class":93},[87,80218,61993],{"class":205},[87,80220,946],{"class":97},[87,80222,61998],{"class":949},[87,80224,80225],{"class":97},">全部区间\u003C\u002F",[87,80227,1334],{"class":93},[87,80229,953],{"class":97},[87,80231,80232,80234,80236],{"class":89,"line":17804},[87,80233,53354],{"class":97},[87,80235,94],{"class":93},[87,80237,953],{"class":97},[87,80239,80240,80242,80244,80246,80248,80250],{"class":89,"line":17818},[87,80241,53081],{"class":97},[87,80243,94],{"class":93},[87,80245,943],{"class":205},[87,80247,946],{"class":97},[87,80249,63542],{"class":949},[87,80251,953],{"class":97},[87,80253,80254],{"class":89,"line":17830},[87,80255,80256],{"class":199},"    \u003C!-- \u003Cdiv class=\"item\">\n",[87,80258,80259],{"class":89,"line":17835},[87,80260,80261],{"class":199},"      \u003Cimg src=\"\" alt=\"\">\n",[87,80263,80264],{"class":89,"line":17848},[87,80265,80266],{"class":199},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[87,80268,80269],{"class":89,"line":17853},[87,80270,80271],{"class":199},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[87,80273,80274],{"class":89,"line":17858},[87,80275,80276],{"class":199},"    \u003C\u002Fdiv> -->\n",[87,80278,80279,80281,80283],{"class":89,"line":17863},[87,80280,53354],{"class":97},[87,80282,94],{"class":93},[87,80284,953],{"class":97},[87,80286,80287,80289,80291],{"class":89,"line":17876},[87,80288,53081],{"class":97},[87,80290,52750],{"class":93},[87,80292,953],{"class":97},[87,80294,80295],{"class":89,"line":17881},[87,80296,80297],{"class":199},"    \u002F\u002F 2. 初始化数据\n",[87,80299,80300,80302,80305,80307],{"class":89,"line":33580},[87,80301,12171],{"class":171},[87,80303,80304],{"class":104}," goodsList",[87,80306,14514],{"class":171},[87,80308,56383],{"class":97},[87,80310,80311],{"class":89,"line":33586},[87,80312,80313],{"class":97},"      {\n",[87,80315,80316,80319,80322],{"class":89,"line":33592},[87,80317,80318],{"class":97},"        id: ",[87,80320,80321],{"class":949},"'4001172'",[87,80323,32413],{"class":97},[87,80325,80326,80329,80332],{"class":89,"line":33598},[87,80327,80328],{"class":97},"        name: ",[87,80330,80331],{"class":949},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[87,80333,32413],{"class":97},[87,80335,80336,80339,80342],{"class":89,"line":33604},[87,80337,80338],{"class":97},"        price: ",[87,80340,80341],{"class":949},"'289.00'",[87,80343,32413],{"class":97},[87,80345,80346,80349,80352],{"class":89,"line":33615},[87,80347,80348],{"class":97},"        picture: ",[87,80350,80351],{"class":949},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[87,80353,32413],{"class":97},[87,80355,80356],{"class":89,"line":33621},[87,80357,78820],{"class":97},[87,80359,80360],{"class":89,"line":33641},[87,80361,80313],{"class":97},[87,80363,80364,80366,80369],{"class":89,"line":33647},[87,80365,80318],{"class":97},[87,80367,80368],{"class":949},"'4001594'",[87,80370,32413],{"class":97},[87,80372,80373,80375,80378],{"class":89,"line":33658},[87,80374,80328],{"class":97},[87,80376,80377],{"class":949},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[87,80379,32413],{"class":97},[87,80381,80382,80384,80387],{"class":89,"line":33664},[87,80383,80338],{"class":97},[87,80385,80386],{"class":949},"'288.00'",[87,80388,32413],{"class":97},[87,80390,80391,80393,80396],{"class":89,"line":33670},[87,80392,80348],{"class":97},[87,80394,80395],{"class":949},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[87,80397,32413],{"class":97},[87,80399,80400],{"class":89,"line":33676},[87,80401,78820],{"class":97},[87,80403,80404],{"class":89,"line":33682},[87,80405,80313],{"class":97},[87,80407,80408,80410,80413],{"class":89,"line":33688},[87,80409,80318],{"class":97},[87,80411,80412],{"class":949},"'4001009'",[87,80414,32413],{"class":97},[87,80416,80417,80419,80422],{"class":89,"line":33694},[87,80418,80328],{"class":97},[87,80420,80421],{"class":949},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[87,80423,32413],{"class":97},[87,80425,80426,80428,80431],{"class":89,"line":33700},[87,80427,80338],{"class":97},[87,80429,80430],{"class":949},"'109.00'",[87,80432,32413],{"class":97},[87,80434,80435,80437,80440],{"class":89,"line":33720},[87,80436,80348],{"class":97},[87,80438,80439],{"class":949},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[87,80441,32413],{"class":97},[87,80443,80444],{"class":89,"line":33726},[87,80445,78820],{"class":97},[87,80447,80448],{"class":89,"line":33742},[87,80449,80313],{"class":97},[87,80451,80452,80454,80457],{"class":89,"line":33748},[87,80453,80318],{"class":97},[87,80455,80456],{"class":949},"'4001874'",[87,80458,32413],{"class":97},[87,80460,80461,80463,80466],{"class":89,"line":33762},[87,80462,80328],{"class":97},[87,80464,80465],{"class":949},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[87,80467,32413],{"class":97},[87,80469,80470,80472,80475],{"class":89,"line":33768},[87,80471,80338],{"class":97},[87,80473,80474],{"class":949},"'488.00'",[87,80476,32413],{"class":97},[87,80478,80479,80481,80484],{"class":89,"line":33783},[87,80480,80348],{"class":97},[87,80482,80483],{"class":949},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[87,80485,32413],{"class":97},[87,80487,80488],{"class":89,"line":33789},[87,80489,78820],{"class":97},[87,80491,80492],{"class":89,"line":33798},[87,80493,80313],{"class":97},[87,80495,80496,80498,80501],{"class":89,"line":33804},[87,80497,80318],{"class":97},[87,80499,80500],{"class":949},"'4001649'",[87,80502,32413],{"class":97},[87,80504,80505,80507,80510],{"class":89,"line":33813},[87,80506,80328],{"class":97},[87,80508,80509],{"class":949},"'大师监制龙泉青瓷茶叶罐'",[87,80511,32413],{"class":97},[87,80513,80514,80516,80519],{"class":89,"line":33819},[87,80515,80338],{"class":97},[87,80517,80518],{"class":949},"'139.00'",[87,80520,32413],{"class":97},[87,80522,80523,80525,80528],{"class":89,"line":33825},[87,80524,80348],{"class":97},[87,80526,80527],{"class":949},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[87,80529,32413],{"class":97},[87,80531,80532],{"class":89,"line":33834},[87,80533,78820],{"class":97},[87,80535,80536],{"class":89,"line":33840},[87,80537,80313],{"class":97},[87,80539,80540,80542,80545],{"class":89,"line":33851},[87,80541,80318],{"class":97},[87,80543,80544],{"class":949},"'3997185'",[87,80546,32413],{"class":97},[87,80548,80549,80551,80554],{"class":89,"line":33857},[87,80550,80328],{"class":97},[87,80552,80553],{"class":949},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[87,80555,32413],{"class":97},[87,80557,80558,80560,80563],{"class":89,"line":33876},[87,80559,80338],{"class":97},[87,80561,80562],{"class":949},"'108.00'",[87,80564,32413],{"class":97},[87,80566,80567,80569,80572],{"class":89,"line":33882},[87,80568,80348],{"class":97},[87,80570,80571],{"class":949},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[87,80573,32413],{"class":97},[87,80575,80576],{"class":89,"line":33893},[87,80577,78820],{"class":97},[87,80579,80580],{"class":89,"line":33899},[87,80581,80313],{"class":97},[87,80583,80584,80586,80589],{"class":89,"line":33919},[87,80585,80318],{"class":97},[87,80587,80588],{"class":949},"'3997403'",[87,80590,32413],{"class":97},[87,80592,80593,80595,80598],{"class":89,"line":33935},[87,80594,80328],{"class":97},[87,80596,80597],{"class":949},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[87,80599,32413],{"class":97},[87,80601,80602,80604,80607],{"class":89,"line":33941},[87,80603,80338],{"class":97},[87,80605,80606],{"class":949},"'100.00'",[87,80608,32413],{"class":97},[87,80610,80611,80613,80616],{"class":89,"line":33955},[87,80612,80348],{"class":97},[87,80614,80615],{"class":949},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[87,80617,32413],{"class":97},[87,80619,80620],{"class":89,"line":33961},[87,80621,78820],{"class":97},[87,80623,80624],{"class":89,"line":33967},[87,80625,80313],{"class":97},[87,80627,80628,80630,80633],{"class":89,"line":33978},[87,80629,80318],{"class":97},[87,80631,80632],{"class":949},"'3998274'",[87,80634,32413],{"class":97},[87,80636,80637,80639,80642],{"class":89,"line":33984},[87,80638,80328],{"class":97},[87,80640,80641],{"class":949},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[87,80643,32413],{"class":97},[87,80645,80646,80648,80650],{"class":89,"line":33990},[87,80647,80338],{"class":97},[87,80649,80518],{"class":949},[87,80651,32413],{"class":97},[87,80653,80654,80656,80659],{"class":89,"line":34000},[87,80655,80348],{"class":97},[87,80657,80658],{"class":949},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[87,80660,32413],{"class":97},[87,80662,80663],{"class":89,"line":34006},[87,80664,78820],{"class":97},[87,80666,80667],{"class":89,"line":34017},[87,80668,54046],{"class":97},[87,80670,80671],{"class":89,"line":34023},[87,80672,3355],{"emptyLinePlaceholder":1029},[87,80674,80675],{"class":89,"line":34033},[87,80676,80677],{"class":199},"    \u002F\u002F 1.渲染函数\n",[87,80679,80680,80682,80684,80686,80688],{"class":89,"line":34038},[87,80681,71016],{"class":171},[87,80683,71019],{"class":205},[87,80685,165],{"class":97},[87,80687,4834],{"class":492},[87,80689,13392],{"class":97},[87,80691,80692],{"class":89,"line":34044},[87,80693,80694],{"class":199},"      \u002F\u002F 声明空字符串\n",[87,80696,80697,80700,80703,80705],{"class":89,"line":34093},[87,80698,80699],{"class":171},"      let",[87,80701,80702],{"class":97}," str ",[87,80704,946],{"class":171},[87,80706,71036],{"class":949},[87,80708,80709],{"class":89,"line":34140},[87,80710,71041],{"class":199},[87,80712,80713,80715,80718,80720,80723,80726],{"class":89,"line":34145},[87,80714,58943],{"class":97},[87,80716,80717],{"class":205},"forEach",[87,80719,165],{"class":97},[87,80721,80722],{"class":492},"item",[87,80724,80725],{"class":171}," =>",[87,80727,98],{"class":97},[87,80729,80730,80732,80734,80737,80739,80742,80744,80747,80750,80752],{"class":89,"line":34151},[87,80731,62206],{"class":171},[87,80733,503],{"class":97},[87,80735,80736],{"class":104},"name",[87,80738,13385],{"class":97},[87,80740,80741],{"class":104},"price",[87,80743,13385],{"class":97},[87,80745,80746],{"class":104},"picture",[87,80748,80749],{"class":97}," } ",[87,80751,946],{"class":171},[87,80753,80754],{"class":97}," item\n",[87,80756,80757,80760,80762],{"class":89,"line":34170},[87,80758,80759],{"class":97},"        str ",[87,80761,10427],{"class":171},[87,80763,71100],{"class":949},[87,80765,80766],{"class":89,"line":34176},[87,80767,80768],{"class":949},"          \u003Cdiv class=\"item\">\n",[87,80770,80771,80774,80776],{"class":89,"line":34196},[87,80772,80773],{"class":949},"            \u003Cimg src=\"${",[87,80775,80746],{"class":97},[87,80777,80778],{"class":949},"}\" alt=\"\">\n",[87,80780,80781,80784,80786],{"class":89,"line":34202},[87,80782,80783],{"class":949},"            \u003Cp class=\"name\">${",[87,80785,80736],{"class":97},[87,80787,80788],{"class":949},"}\u003C\u002Fp>\n",[87,80790,80791,80794,80796],{"class":89,"line":34208},[87,80792,80793],{"class":949},"            \u003Cp class=\"price\">${",[87,80795,80741],{"class":97},[87,80797,80788],{"class":949},[87,80799,80800],{"class":89,"line":34218},[87,80801,80802],{"class":949},"          \u003C\u002Fdiv>\n",[87,80804,80805],{"class":89,"line":34223},[87,80806,80807],{"class":949},"        `\n",[87,80809,80810],{"class":89,"line":34229},[87,80811,65748],{"class":97},[87,80813,80814],{"class":89,"line":34245},[87,80815,80816],{"class":199},"      \u002F\u002F 追加给List\n",[87,80818,80819,80821,80823,80825,80828,80830,80832],{"class":89,"line":34290},[87,80820,56707],{"class":97},[87,80822,55335],{"class":205},[87,80824,165],{"class":97},[87,80826,80827],{"class":949},"'.list'",[87,80829,75177],{"class":97},[87,80831,946],{"class":171},[87,80833,74913],{"class":97},[87,80835,80836],{"class":89,"line":34296},[87,80837,3142],{"class":97},[87,80839,80840],{"class":89,"line":34302},[87,80841,80842],{"class":199},"    \u002F\u002F 页面一打开就需要渲染\n",[87,80844,80845,80848],{"class":89,"line":34308},[87,80846,80847],{"class":205},"    render",[87,80849,80850],{"class":97},"(goodsList)\n",[87,80852,80853],{"class":89,"line":34319},[87,80854,80855],{"class":199},"    \u002F\u002F 2.过滤筛选\n",[87,80857,80858,80860,80862,80864,80867,80869,80871,80873,80875,80877,80879,80881],{"class":89,"line":34325},[87,80859,53344],{"class":97},[87,80861,55335],{"class":205},[87,80863,165],{"class":97},[87,80865,80866],{"class":949},"'.filter'",[87,80868,31773],{"class":97},[87,80870,58749],{"class":205},[87,80872,165],{"class":97},[87,80874,58754],{"class":949},[87,80876,13385],{"class":97},[87,80878,1173],{"class":492},[87,80880,80725],{"class":171},[87,80882,98],{"class":97},[87,80884,80885],{"class":89,"line":34331},[87,80886,80887],{"class":199},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[87,80889,80890,80892,80894,80897,80899,80901,80903,80905],{"class":89,"line":34337},[87,80891,59164],{"class":171},[87,80893,503],{"class":97},[87,80895,80896],{"class":104},"tagName",[87,80898,13385],{"class":97},[87,80900,32484],{"class":104},[87,80902,80749],{"class":97},[87,80904,946],{"class":171},[87,80906,80907],{"class":97}," e.target\n",[87,80909,80910],{"class":89,"line":34355},[87,80911,80912],{"class":199},"      \u002F\u002F 判断\n",[87,80914,80915,80917,80919,80921,80923],{"class":89,"line":34369},[87,80916,55416],{"class":171},[87,80918,67966],{"class":97},[87,80920,55422],{"class":171},[87,80922,69188],{"class":949},[87,80924,13392],{"class":97},[87,80926,80927],{"class":89,"line":34378},[87,80928,80929],{"class":199},"        \u002F\u002F console.log(11)\n",[87,80931,80932],{"class":89,"line":34387},[87,80933,80934],{"class":199},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[87,80936,80937],{"class":89,"line":34396},[87,80938,80939],{"class":199},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[87,80941,80942,80944,80946,80948],{"class":89,"line":34405},[87,80943,52767],{"class":171},[87,80945,52770],{"class":97},[87,80947,946],{"class":171},[87,80949,80950],{"class":97}," goodsList\n",[87,80952,80953,80955,80958,80960,80963],{"class":89,"line":34411},[87,80954,3452],{"class":171},[87,80956,80957],{"class":97}," (dataset.index ",[87,80959,55422],{"class":171},[87,80961,80962],{"class":949}," '1'",[87,80964,13392],{"class":97},[87,80966,80967,80970,80972,80975,80978,80980,80982,80984,80987,80989,80991,80994,80996,80998,81000],{"class":89,"line":34417},[87,80968,80969],{"class":97},"          arr ",[87,80971,946],{"class":171},[87,80973,80974],{"class":97}," goodsList.",[87,80976,80977],{"class":205},"filter",[87,80979,165],{"class":97},[87,80981,80722],{"class":492},[87,80983,80725],{"class":171},[87,80985,80986],{"class":97}," item.price ",[87,80988,2666],{"class":171},[87,80990,577],{"class":104},[87,80992,80993],{"class":171}," &&",[87,80995,80986],{"class":97},[87,80997,2544],{"class":171},[87,80999,6704],{"class":104},[87,81001,1108],{"class":97},[87,81003,81004,81007,81009,81011,81013,81015,81018],{"class":89,"line":34425},[87,81005,81006],{"class":97},"        } ",[87,81008,2657],{"class":171},[87,81010,2660],{"class":171},[87,81012,80957],{"class":97},[87,81014,55422],{"class":171},[87,81016,81017],{"class":949}," '2'",[87,81019,13392],{"class":97},[87,81021,81022,81024,81026,81028,81030,81032,81034,81036,81038,81040,81042,81044,81046,81048,81051],{"class":89,"line":34430},[87,81023,80969],{"class":97},[87,81025,946],{"class":171},[87,81027,80974],{"class":97},[87,81029,80977],{"class":205},[87,81031,165],{"class":97},[87,81033,80722],{"class":492},[87,81035,80725],{"class":171},[87,81037,80986],{"class":97},[87,81039,2666],{"class":171},[87,81041,6704],{"class":104},[87,81043,80993],{"class":171},[87,81045,80986],{"class":97},[87,81047,2544],{"class":171},[87,81049,81050],{"class":104}," 300",[87,81052,1108],{"class":97},[87,81054,81055,81057,81059,81061,81063,81065,81068],{"class":89,"line":34436},[87,81056,81006],{"class":97},[87,81058,2657],{"class":171},[87,81060,2660],{"class":171},[87,81062,80957],{"class":97},[87,81064,55422],{"class":171},[87,81066,81067],{"class":949}," '3'",[87,81069,13392],{"class":97},[87,81071,81072,81074,81076,81078,81080,81082,81084,81086,81088,81090,81092],{"class":89,"line":34447},[87,81073,80969],{"class":97},[87,81075,946],{"class":171},[87,81077,80974],{"class":97},[87,81079,80977],{"class":205},[87,81081,165],{"class":97},[87,81083,80722],{"class":492},[87,81085,80725],{"class":171},[87,81087,80986],{"class":97},[87,81089,2666],{"class":171},[87,81091,81050],{"class":104},[87,81093,1108],{"class":97},[87,81095,81096],{"class":89,"line":34453},[87,81097,3484],{"class":97},[87,81099,81100],{"class":89,"line":34473},[87,81101,81102],{"class":199},"        \u002F\u002F 渲染函数\n",[87,81104,81105,81107],{"class":89,"line":34479},[87,81106,71340],{"class":205},[87,81108,53349],{"class":97},[87,81110,81111],{"class":89,"line":34485},[87,81112,53335],{"class":97},[87,81114,81115],{"class":89,"line":34491},[87,81116,3355],{"emptyLinePlaceholder":1029},[87,81118,81119],{"class":89,"line":34508},[87,81120,34408],{"class":97},[87,81122,81123,81125,81127],{"class":89,"line":34514},[87,81124,53354],{"class":97},[87,81126,52750],{"class":93},[87,81128,953],{"class":97},[87,81130,81131,81133,81135],{"class":89,"line":34520},[87,81132,963],{"class":97},[87,81134,52737],{"class":93},[87,81136,953],{"class":97},[87,81138,81139],{"class":89,"line":34526},[87,81140,3355],{"emptyLinePlaceholder":1029},[87,81142,81143,81145,81147],{"class":89,"line":34532},[87,81144,963],{"class":97},[87,81146,51581],{"class":93},[87,81148,953],{"class":97},[14,81150,81152],{"id":81151},"_410-深入了解对象","4.10 深入了解对象",[44,81154,81156],{"id":81155},"_4101-创建对象","4.10.1 创建对象",[19,81158,81159],{},[39,81160],{"alt":82,"src":81161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,81163,81164],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[44,81166,81168],{"id":81167},"_4102-构造函数","4.10.2 构造函数",[19,81170,81171,81174],{},[57,81172,81173],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,81176,81177,81180],{},[57,81178,81179],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[77,81182,81184],{"className":51579,"code":81183,"language":51581,"meta":82,"style":82},"\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",[84,81185,81186,81194,81199,81220,81233,81245,81257,81261,81266,81293,81298,81325],{"__ignoreMap":82},[87,81187,81188,81190,81192],{"class":89,"line":90},[87,81189,938],{"class":97},[87,81191,52750],{"class":93},[87,81193,953],{"class":97},[87,81195,81196],{"class":89,"line":101},[87,81197,81198],{"class":199},"\u002F\u002F例：\n",[87,81200,81201,81203,81206,81208,81210,81212,81214,81216,81218],{"class":89,"line":120},[87,81202,55385],{"class":171},[87,81204,81205],{"class":205}," Pig",[87,81207,165],{"class":97},[87,81209,80736],{"class":492},[87,81211,1473],{"class":97},[87,81213,71153],{"class":492},[87,81215,1473],{"class":97},[87,81217,71170],{"class":492},[87,81219,13392],{"class":97},[87,81221,81222,81225,81228,81230],{"class":89,"line":222},[87,81223,81224],{"class":104},"    this",[87,81226,81227],{"class":97},".name",[87,81229,946],{"class":171},[87,81231,81232],{"class":97},"name\n",[87,81234,81235,81237,81240,81242],{"class":89,"line":234},[87,81236,81224],{"class":104},[87,81238,81239],{"class":97},".age",[87,81241,946],{"class":171},[87,81243,81244],{"class":97},"age\n",[87,81246,81247,81249,81252,81254],{"class":89,"line":256},[87,81248,81224],{"class":104},[87,81250,81251],{"class":97},".gender",[87,81253,946],{"class":171},[87,81255,81256],{"class":97},"gender    \n",[87,81258,81259],{"class":89,"line":269},[87,81260,123],{"class":97},[87,81262,81263],{"class":89,"line":463},[87,81264,81265],{"class":199},"\u002F\u002F创建佩奇对象\n",[87,81267,81268,81270,81273,81275,81277,81279,81282,81284,81286,81288,81291],{"class":89,"line":469},[87,81269,7742],{"class":171},[87,81271,81272],{"class":104}," Peppa",[87,81274,12667],{"class":171},[87,81276,81205],{"class":205},[87,81278,165],{"class":97},[87,81280,81281],{"class":949},"'佩奇'",[87,81283,1473],{"class":97},[87,81285,1439],{"class":104},[87,81287,1473],{"class":97},[87,81289,81290],{"class":949},"'女'",[87,81292,1108],{"class":97},[87,81294,81295],{"class":89,"line":2287},[87,81296,81297],{"class":199},"\u002F\u002F创建乔治对象\n",[87,81299,81300,81302,81305,81307,81309,81311,81314,81316,81318,81320,81323],{"class":89,"line":2568},[87,81301,7742],{"class":171},[87,81303,81304],{"class":104}," George",[87,81306,12667],{"class":171},[87,81308,81205],{"class":205},[87,81310,165],{"class":97},[87,81312,81313],{"class":949},"'乔治'",[87,81315,1473],{"class":97},[87,81317,1170],{"class":104},[87,81319,1473],{"class":97},[87,81321,81322],{"class":949},"'男'",[87,81324,1108],{"class":97},[87,81326,81327,81329,81331],{"class":89,"line":2573},[87,81328,963],{"class":97},[87,81330,52750],{"class":93},[87,81332,953],{"class":97},[19,81334,81335],{},[39,81336],{"alt":82,"src":81337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,81339,81340],{},[39,81341],{"alt":82,"src":81342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,81344,81345],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,81347,81348],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,81350,81351],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,81353,81354],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,81356,81357],{},"这里用等号是因为：对象.属性=值",[19,81359,81360],{},"①利用对象字面量创建对象",[19,81362,81363],{},"const o={",[19,81365,81366],{},"name:'pink'",[19,81368,81369],{},"} ②利用new Object创建对象",[19,81371,81372],{},"const o=new Object({name:'pink'})",[19,81374,81375],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,81377,81378],{},"构造函数创建对象的执行过程：",[19,81380,81381],{},[39,81382],{"alt":82,"src":81383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[44,81385,81387],{"id":81386},"_4103-实例成员","4.10.3 实例成员",[19,81389,81390],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[1055,81392,81393,81396,81399],{},[29,81394,81395],{},"实例对象的属性和方法即为实例成员",[29,81397,81398],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[29,81400,81401],{},"构造函数创建的实例对象彼此独立互不影响",[44,81403,81405],{"id":81404},"_4104-静态成员","4.10.4 静态成员",[19,81407,81408],{},[39,81409],{"alt":82,"src":81410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,81412,81413],{},"静态成员有Date.now() Math.PI Math.random()",[19,81415,81416],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,81418,81419],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,81421,81422],{},"function Pig(name) n {",[19,81424,81425],{},"this.name=name",[19,81427,2037],{},[19,81429,81430],{},"Pig.eyes=2",[19,81432,81433],{},"Pig.sayHai=function () { console.log(this) }",[19,81435,81436],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,81438,81439],{},"console.log(Pig.eyes) \u002F\u002F2",[19,81441,12282],{},[1055,81443,81444,81447,81450,81453,81456],{},[29,81445,81446],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[29,81448,81449],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[29,81451,81452],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[29,81454,81455],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[29,81457,81458],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,81460,81461],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[44,81463,81465],{"id":81464},"_4105-内置构造函数","4.10.5 内置构造函数",[19,81467,81468],{},"内置构造函数包含：",[19,81470,81471],{},[39,81472],{"alt":82,"src":81473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,81475,81476],{},[39,81477],{"alt":82,"src":81478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,81480,81481],{},"这些基本数据类型，js对他们进行了包装",[52750,81483,81484],{},"\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",[49,81486,81488],{"id":81487},"_41051-object","4.10.5.1 Object",[19,81490,81491],{},"Object 是内置的构造函数，用于创建普通对象",[19,81493,81494],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[77,81496,81498],{"className":51579,"code":81497,"language":51581,"meta":82,"style":82},"const user=new Object({name:'小明',age:15})\n",[84,81499,81500],{"__ignoreMap":82},[87,81501,81502],{"class":89,"line":90},[87,81503,81497],{"class":97},[19,81505,81506],{},"三个常用的静态方法：",[23857,81508,81510],{"id":81509},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,81512,81513],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,81515,81516],{},[39,81517],{"alt":82,"src":81518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,81520,81521],{},[39,81522],{"alt":82,"src":81523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[77,81525,81527],{"className":54004,"code":81526,"language":54006,"meta":82,"style":82},"\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",[84,81528,81529,81537,81545,81550,81555,81560,81565,81570,81575,81583],{"__ignoreMap":82},[87,81530,81531,81533,81535],{"class":89,"line":90},[87,81532,938],{"class":97},[87,81534,52737],{"class":93},[87,81536,953],{"class":97},[87,81538,81539,81541,81543],{"class":89,"line":101},[87,81540,53081],{"class":97},[87,81542,52750],{"class":93},[87,81544,953],{"class":97},[87,81546,81547],{"class":89,"line":120},[87,81548,81549],{"class":97},"    const o = { name: 'pink', age: 6 }\n",[87,81551,81552],{"class":89,"line":222},[87,81553,81554],{"class":97},"    \u002F\u002F 获得所有属性名\n",[87,81556,81557],{"class":89,"line":234},[87,81558,81559],{"class":97},"    const arr = Object.keys(o)\n",[87,81561,81562],{"class":89,"line":256},[87,81563,81564],{"class":97},"    console.log(arr)\n",[87,81566,81567],{"class":89,"line":269},[87,81568,81569],{"class":97},"    \u002F\u002F 获得所有属性值\n",[87,81571,81572],{"class":89,"line":463},[87,81573,81574],{"class":97},"    console.log(Object.values(o))\n",[87,81576,81577,81579,81581],{"class":89,"line":469},[87,81578,53354],{"class":97},[87,81580,52750],{"class":93},[87,81582,953],{"class":97},[87,81584,81585,81587,81589],{"class":89,"line":2287},[87,81586,963],{"class":97},[87,81588,52737],{"class":93},[87,81590,953],{"class":97},[23857,81592,81594],{"id":81593},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,81596,81597],{},"Object.assign(oo,o)",[19,81599,81600],{},"后的东西添加给前 是追加",[19,81602,81603],{},[39,81604],{"alt":82,"src":81605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,81607,81608],{},[39,81609],{"alt":82,"src":81610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[77,81612,81614],{"className":54004,"code":81613,"language":54006,"meta":82,"style":82},"\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",[84,81615,81616,81624,81632,81636,81640,81644,81648,81652,81656,81661,81666,81671,81676,81681,81689],{"__ignoreMap":82},[87,81617,81618,81620,81622],{"class":89,"line":90},[87,81619,938],{"class":97},[87,81621,52737],{"class":93},[87,81623,953],{"class":97},[87,81625,81626,81628,81630],{"class":89,"line":101},[87,81627,53081],{"class":97},[87,81629,52750],{"class":93},[87,81631,953],{"class":97},[87,81633,81634],{"class":89,"line":120},[87,81635,81549],{"class":97},[87,81637,81638],{"class":89,"line":222},[87,81639,81554],{"class":97},[87,81641,81642],{"class":89,"line":234},[87,81643,81559],{"class":97},[87,81645,81646],{"class":89,"line":256},[87,81647,81564],{"class":97},[87,81649,81650],{"class":89,"line":269},[87,81651,81569],{"class":97},[87,81653,81654],{"class":89,"line":463},[87,81655,81574],{"class":97},[87,81657,81658],{"class":89,"line":469},[87,81659,81660],{"class":97},"    const oo = {}\n",[87,81662,81663],{"class":89,"line":2287},[87,81664,81665],{"class":97},"    Object.assign(oo, o)\n",[87,81667,81668],{"class":89,"line":2568},[87,81669,81670],{"class":97},"    console.log(oo)\n",[87,81672,81673],{"class":89,"line":2573},[87,81674,81675],{"class":97},"    Object.assign(o, { gender: '女' })\n",[87,81677,81678],{"class":89,"line":2579},[87,81679,81680],{"class":97},"    console.log(o)\n",[87,81682,81683,81685,81687],{"class":89,"line":2584},[87,81684,53354],{"class":97},[87,81686,52750],{"class":93},[87,81688,953],{"class":97},[87,81690,81691,81693,81695],{"class":89,"line":2598},[87,81692,963],{"class":97},[87,81694,52737],{"class":93},[87,81696,953],{"class":97},[19,81698,81699],{},[39,81700],{"alt":82,"src":81701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[49,81703,81705],{"id":81704},"_41052-array","4.10.5.2 Array",[19,81707,81708],{},"Array 是内置的构造函数，用于创建数组",[19,81710,81711],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[77,81713,81715],{"className":51579,"code":81714,"language":51581,"meta":82,"style":82},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[84,81716,81717,81722],{"__ignoreMap":82},[87,81718,81719],{"class":89,"line":90},[87,81720,81721],{"class":97},"const arr=new Array(3,5)\n",[87,81723,81724],{"class":89,"line":101},[87,81725,81726],{"class":97},"console.log(arr)  \u002F\u002F[3,5]\n",[19,81728,81729],{},"Array的实例方法，这个方法是实例成员",[19,81731,81732],{},[39,81733],{"alt":82,"src":81734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23857,81736,81738],{"id":81737},"_410521-reduce","4.10.5.2.1 reduce",[19,81740,81741],{},[39,81742],{"alt":82,"src":81743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[77,81745,81747],{"className":54004,"code":81746,"language":54006,"meta":82,"style":82},"\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",[84,81748,81749,81757,81765,81770,81775,81780,81785,81789,81794,81799,81804,81808,81813,81818,81822,81827,81832,81837,81845],{"__ignoreMap":82},[87,81750,81751,81753,81755],{"class":89,"line":90},[87,81752,938],{"class":97},[87,81754,52737],{"class":93},[87,81756,953],{"class":97},[87,81758,81759,81761,81763],{"class":89,"line":101},[87,81760,53081],{"class":97},[87,81762,52750],{"class":93},[87,81764,953],{"class":97},[87,81766,81767],{"class":89,"line":120},[87,81768,81769],{"class":97},"    const arr = [1, 5, 8]\n",[87,81771,81772],{"class":89,"line":222},[87,81773,81774],{"class":97},"    \u002F\u002F 1.没有初始值\n",[87,81776,81777],{"class":89,"line":234},[87,81778,81779],{"class":97},"    const total = arr.reduce(function (prev, current) {\n",[87,81781,81782],{"class":89,"line":256},[87,81783,81784],{"class":97},"      return prev + current\n",[87,81786,81787],{"class":89,"line":269},[87,81788,34408],{"class":97},[87,81790,81791],{"class":89,"line":463},[87,81792,81793],{"class":97},"    console.log(total)   \u002F\u002F14\n",[87,81795,81796],{"class":89,"line":469},[87,81797,81798],{"class":97},"    \u002F\u002F 2.有初始值\n",[87,81800,81801],{"class":89,"line":2287},[87,81802,81803],{"class":97},"    const total1 = arr.reduce(function (prev, current) {\n",[87,81805,81806],{"class":89,"line":2568},[87,81807,81784],{"class":97},[87,81809,81810],{"class":89,"line":2573},[87,81811,81812],{"class":97},"    }, 10)\n",[87,81814,81815],{"class":89,"line":2579},[87,81816,81817],{"class":97},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[87,81819,81820],{"class":89,"line":2584},[87,81821,3355],{"emptyLinePlaceholder":1029},[87,81823,81824],{"class":89,"line":2598},[87,81825,81826],{"class":97},"    \u002F\u002F 3.箭头函数写法\n",[87,81828,81829],{"class":89,"line":2603},[87,81830,81831],{"class":97},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[87,81833,81834],{"class":89,"line":2609},[87,81835,81836],{"class":97},"    console.log(total2)   \u002F\u002F24\n",[87,81838,81839,81841,81843],{"class":89,"line":2630},[87,81840,53354],{"class":97},[87,81842,52750],{"class":93},[87,81844,953],{"class":97},[87,81846,81847,81849,81851],{"class":89,"line":2635},[87,81848,963],{"class":97},[87,81850,52737],{"class":93},[87,81852,953],{"class":97},[19,81854,81855],{},"执行过程：",[1055,81857,81858,81861,81864],{},[29,81859,81860],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[29,81862,81863],{},"每一次循环，把返回值给作为下一次循环的上一次值",[29,81865,81866],{},"如果有起始值，则起始值作为上一次值",[77,81868,81870],{"className":54004,"code":81869,"language":54006,"meta":82,"style":82},"\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",[84,81871,81872,81880,81888,81892,81896,81900,81904,81908,81912,81917,81922,81927,81932,81937,81941,81945,81949,81953,81957,81961,81966,81970,81975,81979,81984,81989,81993,81997,82001,82009],{"__ignoreMap":82},[87,81873,81874,81876,81878],{"class":89,"line":90},[87,81875,938],{"class":97},[87,81877,52737],{"class":93},[87,81879,953],{"class":97},[87,81881,81882,81884,81886],{"class":89,"line":101},[87,81883,53081],{"class":97},[87,81885,52750],{"class":93},[87,81887,953],{"class":97},[87,81889,81890],{"class":89,"line":120},[87,81891,81769],{"class":97},[87,81893,81894],{"class":89,"line":222},[87,81895,81774],{"class":97},[87,81897,81898],{"class":89,"line":234},[87,81899,81779],{"class":97},[87,81901,81902],{"class":89,"line":256},[87,81903,81784],{"class":97},[87,81905,81906],{"class":89,"line":269},[87,81907,34408],{"class":97},[87,81909,81910],{"class":89,"line":463},[87,81911,81793],{"class":97},[87,81913,81914],{"class":89,"line":469},[87,81915,81916],{"class":97},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[87,81918,81919],{"class":89,"line":2287},[87,81920,81921],{"class":97},"    \u002F\u002F     1              5                    6\n",[87,81923,81924],{"class":89,"line":2568},[87,81925,81926],{"class":97},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[87,81928,81929],{"class":89,"line":2573},[87,81930,81931],{"class":97},"    \u002F\u002F     6              8                    14\n",[87,81933,81934],{"class":89,"line":2579},[87,81935,81936],{"class":97},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[87,81938,81939],{"class":89,"line":2584},[87,81940,81798],{"class":97},[87,81942,81943],{"class":89,"line":2598},[87,81944,81803],{"class":97},[87,81946,81947],{"class":89,"line":2603},[87,81948,81784],{"class":97},[87,81950,81951],{"class":89,"line":2609},[87,81952,81812],{"class":97},[87,81954,81955],{"class":89,"line":2630},[87,81956,81817],{"class":97},[87,81958,81959],{"class":89,"line":2635},[87,81960,81916],{"class":97},[87,81962,81963],{"class":89,"line":2649},[87,81964,81965],{"class":97},"    \u002F\u002F     10             1                     11\n",[87,81967,81968],{"class":89,"line":2654},[87,81969,81926],{"class":97},[87,81971,81972],{"class":89,"line":2683},[87,81973,81974],{"class":97},"    \u002F\u002F     11             5                    16\n",[87,81976,81977],{"class":89,"line":2688},[87,81978,81926],{"class":97},[87,81980,81981],{"class":89,"line":2705},[87,81982,81983],{"class":97},"    \u002F\u002F     16             8                    24\n",[87,81985,81986],{"class":89,"line":2710},[87,81987,81988],{"class":97},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[87,81990,81991],{"class":89,"line":2715},[87,81992,81826],{"class":97},[87,81994,81995],{"class":89,"line":2720},[87,81996,81831],{"class":97},[87,81998,81999],{"class":89,"line":2734},[87,82000,81836],{"class":97},[87,82002,82003,82005,82007],{"class":89,"line":2739},[87,82004,53354],{"class":97},[87,82006,52750],{"class":93},[87,82008,953],{"class":97},[87,82010,82011,82013,82015],{"class":89,"line":3532},[87,82012,963],{"class":97},[87,82014,52737],{"class":93},[87,82016,953],{"class":97},[23857,82018,82020],{"id":82019},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,82022,82023],{},[39,82024],{"alt":82,"src":82025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[77,82027,82029],{"className":54004,"code":82028,"language":54006,"meta":82,"style":82},"\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",[84,82030,82031,82039,82047,82052,82057,82062,82067,82071,82076,82081,82086,82091,82096,82101,82105,82110,82114,82119,82127],{"__ignoreMap":82},[87,82032,82033,82035,82037],{"class":89,"line":90},[87,82034,938],{"class":97},[87,82036,52737],{"class":93},[87,82038,953],{"class":97},[87,82040,82041,82043,82045],{"class":89,"line":101},[87,82042,53081],{"class":97},[87,82044,52750],{"class":93},[87,82046,953],{"class":97},[87,82048,82049],{"class":89,"line":120},[87,82050,82051],{"class":97},"    const arr = [\n",[87,82053,82054],{"class":89,"line":222},[87,82055,82056],{"class":97},"      { name: '张三', salary: 10000 },\n",[87,82058,82059],{"class":89,"line":234},[87,82060,82061],{"class":97},"      { name: '李四', salary: 10000 },\n",[87,82063,82064],{"class":89,"line":256},[87,82065,82066],{"class":97},"      { name: '王五', salary: 10000 }\n",[87,82068,82069],{"class":89,"line":269},[87,82070,54046],{"class":97},[87,82072,82073],{"class":89,"line":463},[87,82074,82075],{"class":97},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[87,82077,82078],{"class":89,"line":469},[87,82079,82080],{"class":97},"    \u002F\u002F prev是累计值\n",[87,82082,82083],{"class":89,"line":2287},[87,82084,82085],{"class":97},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[87,82087,82088],{"class":89,"line":2568},[87,82089,82090],{"class":97},"    console.log(total)\n",[87,82092,82093],{"class":89,"line":2573},[87,82094,82095],{"class":97},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[87,82097,82098],{"class":89,"line":2579},[87,82099,82100],{"class":97},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[87,82102,82103],{"class":89,"line":2584},[87,82104,82095],{"class":97},[87,82106,82107],{"class":89,"line":2598},[87,82108,82109],{"class":97},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[87,82111,82112],{"class":89,"line":2603},[87,82113,82095],{"class":97},[87,82115,82116],{"class":89,"line":2609},[87,82117,82118],{"class":97},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[87,82120,82121,82123,82125],{"class":89,"line":2630},[87,82122,53354],{"class":97},[87,82124,52750],{"class":93},[87,82126,953],{"class":97},[87,82128,82129,82131,82133],{"class":89,"line":2635},[87,82130,963],{"class":97},[87,82132,52737],{"class":93},[87,82134,953],{"class":97},[23857,82136,82138],{"id":82137},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,82140,82141],{},[39,82142],{"alt":82,"src":82143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,82145,82146],{},[39,82147],{"alt":82,"src":82148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[1055,82150,82151],{},[29,82152,82153],{},"find()",[19,82155,82156],{},"循环查找，找到第一个就ok",[19,82158,82159],{},[1334,82160,82163],{"href":82161,"rel":82162},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24812],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[77,82165,82167],{"className":51579,"code":82166,"language":51581,"meta":82,"style":82},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[84,82168,82169,82174,82179],{"__ignoreMap":82},[87,82170,82171],{"class":89,"line":90},[87,82172,82173],{"class":97},"const array1 = [5, 12, 8, 130, 44]\n",[87,82175,82176],{"class":89,"line":101},[87,82177,82178],{"class":97},"const found = array1.find((element) => element > 10)\n",[87,82180,82181],{"class":89,"line":120},[87,82182,82183],{"class":97},"console.log(found)  \u002F\u002F12\n",[19,82185,82186,82188,82189,82194,82195,82198,82199,82201,82202,82207,82208,82210,82211,82213,82214,82216,82217],{},[84,82187,82153],{}," 方法是一个",[1334,82190,82193],{"href":82191,"rel":82192},"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",[24812],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[84,82196,82197],{},"callbackFn"," 函数，直到 ",[84,82200,82197],{}," 返回一个",[1334,82203,82206],{"href":82204,"rel":82205},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24812],"真值","。然后 ",[84,82209,82153],{}," 返回该元素并停止迭代数组。如果 ",[84,82212,82197],{}," 从未返回真值，则 ",[84,82215,82153],{}," 返回 ",[84,82218,82219],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[77,82221,82223],{"className":54004,"code":82222,"language":54006,"meta":82,"style":82},"\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",[84,82224,82225,82233,82241,82246,82251,82256,82260,82265,82270,82274,82279,82284,82288,82292,82297,82302,82306,82310,82315,82320,82325,82330,82335,82339,82344,82349,82354,82359,82363,82368,82376],{"__ignoreMap":82},[87,82226,82227,82229,82231],{"class":89,"line":90},[87,82228,938],{"class":97},[87,82230,52737],{"class":93},[87,82232,953],{"class":97},[87,82234,82235,82237,82239],{"class":89,"line":101},[87,82236,53081],{"class":97},[87,82238,52750],{"class":93},[87,82240,953],{"class":97},[87,82242,82243],{"class":89,"line":120},[87,82244,82245],{"class":97},"    const arr = ['red', 'blue', 'green']\n",[87,82247,82248],{"class":89,"line":222},[87,82249,82250],{"class":97},"    const found = arr.find(item => item === 'pink')\n",[87,82252,82253],{"class":89,"line":234},[87,82254,82255],{"class":97},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[87,82257,82258],{"class":89,"line":256},[87,82259,3355],{"emptyLinePlaceholder":1029},[87,82261,82262],{"class":89,"line":269},[87,82263,82264],{"class":97},"    \u002F\u002F 使用场景，用于查找数据\n",[87,82266,82267],{"class":89,"line":463},[87,82268,82269],{"class":97},"    const arr1 = [\n",[87,82271,82272],{"class":89,"line":469},[87,82273,80313],{"class":97},[87,82275,82276],{"class":89,"line":2287},[87,82277,82278],{"class":97},"        name: '小米',\n",[87,82280,82281],{"class":89,"line":2568},[87,82282,82283],{"class":97},"        price: 1999\n",[87,82285,82286],{"class":89,"line":2573},[87,82287,78820],{"class":97},[87,82289,82290],{"class":89,"line":2579},[87,82291,80313],{"class":97},[87,82293,82294],{"class":89,"line":2584},[87,82295,82296],{"class":97},"        name: '华为',\n",[87,82298,82299],{"class":89,"line":2598},[87,82300,82301],{"class":97},"        price: 3999\n",[87,82303,82304],{"class":89,"line":2603},[87,82305,53335],{"class":97},[87,82307,82308],{"class":89,"line":2609},[87,82309,54046],{"class":97},[87,82311,82312],{"class":89,"line":2630},[87,82313,82314],{"class":97},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[87,82316,82317],{"class":89,"line":2635},[87,82318,82319],{"class":97},"    \u002F\u002F const found1 = arr1.find(item => {\n",[87,82321,82322],{"class":89,"line":2649},[87,82323,82324],{"class":97},"    \u002F\u002F   if (item.name === '小米') {\n",[87,82326,82327],{"class":89,"line":2654},[87,82328,82329],{"class":97},"    \u002F\u002F     return item\n",[87,82331,82332],{"class":89,"line":2683},[87,82333,82334],{"class":97},"    \u002F\u002F   }\n",[87,82336,82337],{"class":89,"line":2688},[87,82338,64224],{"class":97},[87,82340,82341],{"class":89,"line":2705},[87,82342,82343],{"class":97},"    \u002F\u002F 另一种写法\n",[87,82345,82346],{"class":89,"line":2710},[87,82347,82348],{"class":97},"    const found1 = arr1.find(item => {\n",[87,82350,82351],{"class":89,"line":2715},[87,82352,82353],{"class":97},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[87,82355,82356],{"class":89,"line":2720},[87,82357,82358],{"class":97},"      return item.name = '小米'\n",[87,82360,82361],{"class":89,"line":2734},[87,82362,34408],{"class":97},[87,82364,82365],{"class":89,"line":2739},[87,82366,82367],{"class":97},"    console.log(found1)\n",[87,82369,82370,82372,82374],{"class":89,"line":3532},[87,82371,53354],{"class":97},[87,82373,52750],{"class":93},[87,82375,953],{"class":97},[87,82377,82378,82380,82382],{"class":89,"line":3546},[87,82379,963],{"class":97},[87,82381,52737],{"class":93},[87,82383,953],{"class":97},[19,82385,82386],{},[39,82387],{"alt":82,"src":82388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,82390,82391],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[1055,82393,82394],{"start":101},[29,82395,82396],{},"every()返回的是布尔值",[19,82398,82399],{},[1334,82400,82403],{"href":82401,"rel":82402},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24812],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,82405,82406],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,82408,82409],{},"some是只有有一个就没问题",[19,82411,82412],{},"every是必须全是才行",[77,82414,82418],{"className":82415,"code":82416,"language":82417,"meta":82,"style":82},"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",[84,82419,82420,82436,82450,82454,82463],{"__ignoreMap":82},[87,82421,82422,82424,82427,82429,82431,82434],{"class":89,"line":90},[87,82423,55385],{"class":171},[87,82425,82426],{"class":97}," isBigEnough(element, ",[87,82428,74986],{"class":171},[87,82430,13385],{"class":97},[87,82432,82433],{"class":171},"array",[87,82435,13392],{"class":97},[87,82437,82438,82441,82444,82446,82448],{"class":89,"line":101},[87,82439,82440],{"class":171},"  return",[87,82442,82443],{"class":97}," element ",[87,82445,2666],{"class":171},[87,82447,2993],{"class":104},[87,82449,117],{"class":97},[87,82451,82452],{"class":89,"line":120},[87,82453,123],{"class":97},[87,82455,82456,82459,82461],{"class":89,"line":222},[87,82457,82458],{"class":97},"[12, 5, 8, 130, 44].every(isBigEnough); ",[87,82460,34276],{"class":171},[87,82462,55452],{"class":97},[87,82464,82465,82468,82470],{"class":89,"line":234},[87,82466,82467],{"class":97},"[12, 54, 18, 130, 44].every(isBigEnough); ",[87,82469,34276],{"class":171},[87,82471,58876],{"class":97},[77,82473,82475],{"className":54004,"code":82474,"language":54006,"meta":82,"style":82},"\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",[84,82476,82477,82485,82493,82498,82502,82507,82512,82520],{"__ignoreMap":82},[87,82478,82479,82481,82483],{"class":89,"line":90},[87,82480,938],{"class":97},[87,82482,52737],{"class":93},[87,82484,953],{"class":97},[87,82486,82487,82489,82491],{"class":89,"line":101},[87,82488,53081],{"class":97},[87,82490,52750],{"class":93},[87,82492,953],{"class":97},[87,82494,82495],{"class":89,"line":120},[87,82496,82497],{"class":97},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[87,82499,82500],{"class":89,"line":222},[87,82501,79250],{"class":97},[87,82503,82504],{"class":89,"line":234},[87,82505,82506],{"class":97},"    const flag = arr.every(item => item >= 10)\n",[87,82508,82509],{"class":89,"line":256},[87,82510,82511],{"class":97},"    console.log(flag)    \u002F\u002Ftrue\n",[87,82513,82514,82516,82518],{"class":89,"line":269},[87,82515,53354],{"class":97},[87,82517,52750],{"class":93},[87,82519,953],{"class":97},[87,82521,82522,82524,82526],{"class":89,"line":463},[87,82523,963],{"class":97},[87,82525,52737],{"class":93},[87,82527,953],{"class":97},[77,82529,82531],{"className":54004,"code":82530,"language":54006,"meta":82,"style":82},"\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",[84,82532,82533,82541,82549,82553,82558,82563,82568,82576],{"__ignoreMap":82},[87,82534,82535,82537,82539],{"class":89,"line":90},[87,82536,938],{"class":97},[87,82538,52737],{"class":93},[87,82540,953],{"class":97},[87,82542,82543,82545,82547],{"class":89,"line":101},[87,82544,53081],{"class":97},[87,82546,52750],{"class":93},[87,82548,953],{"class":97},[87,82550,82551],{"class":89,"line":120},[87,82552,82497],{"class":97},[87,82554,82555],{"class":89,"line":222},[87,82556,82557],{"class":97},"    const arr = [10, 0, 5]\n",[87,82559,82560],{"class":89,"line":234},[87,82561,82562],{"class":97},"    const flag = arr.some(item => item >= 10)\n",[87,82564,82565],{"class":89,"line":256},[87,82566,82567],{"class":97},"    console.log(flag)   \u002F\u002Ftrue\n",[87,82569,82570,82572,82574],{"class":89,"line":269},[87,82571,53354],{"class":97},[87,82573,52750],{"class":93},[87,82575,953],{"class":97},[87,82577,82578,82580,82582],{"class":89,"line":463},[87,82579,963],{"class":97},[87,82581,52737],{"class":93},[87,82583,953],{"class":97},[23857,82585,82587],{"id":82586},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,82589,82590],{},[39,82591],{"alt":82,"src":82592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[77,82594,82596],{"className":51579,"code":82595,"language":51581,"meta":82,"style":82},"\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",[84,82597,82598,82608,82622,82626,82634,82648,82668,82680,82688,82695,82707,82719,82731,82743,82753,82763,82767,82775,82783,82787,82795,82807,82815,82837,82842,82847,82880,82888,82896,82900],{"__ignoreMap":82},[87,82599,82600,82602,82604,82606],{"class":89,"line":90},[87,82601,52243],{"class":97},[87,82603,52246],{"class":93},[87,82605,52249],{"class":205},[87,82607,953],{"class":97},[87,82609,82610,82612,82614,82616,82618,82620],{"class":89,"line":101},[87,82611,938],{"class":97},[87,82613,51581],{"class":93},[87,82615,52260],{"class":205},[87,82617,946],{"class":97},[87,82619,52265],{"class":949},[87,82621,953],{"class":97},[87,82623,82624],{"class":89,"line":120},[87,82625,3355],{"emptyLinePlaceholder":1029},[87,82627,82628,82630,82632],{"class":89,"line":222},[87,82629,938],{"class":97},[87,82631,52278],{"class":93},[87,82633,953],{"class":97},[87,82635,82636,82638,82640,82642,82644,82646],{"class":89,"line":234},[87,82637,53081],{"class":97},[87,82639,52288],{"class":93},[87,82641,52291],{"class":205},[87,82643,946],{"class":97},[87,82645,52296],{"class":949},[87,82647,953],{"class":97},[87,82649,82650,82652,82654,82656,82658,82660,82662,82664,82666],{"class":89,"line":256},[87,82651,53081],{"class":97},[87,82653,52288],{"class":93},[87,82655,15870],{"class":205},[87,82657,946],{"class":97},[87,82659,52335],{"class":949},[87,82661,52315],{"class":205},[87,82663,946],{"class":97},[87,82665,52342],{"class":949},[87,82667,953],{"class":97},[87,82669,82670,82672,82674,82676,82678],{"class":89,"line":269},[87,82671,53081],{"class":97},[87,82673,52351],{"class":93},[87,82675,52354],{"class":97},[87,82677,52351],{"class":93},[87,82679,953],{"class":97},[87,82681,82682,82684,82686],{"class":89,"line":463},[87,82683,53081],{"class":97},[87,82685,1006],{"class":93},[87,82687,953],{"class":97},[87,82689,82690,82693],{"class":89,"line":469},[87,82691,82692],{"class":93},"    div",[87,82694,98],{"class":97},[87,82696,82697,82699,82701,82703,82705],{"class":89,"line":2287},[87,82698,55707],{"class":104},[87,82700,108],{"class":97},[87,82702,2678],{"class":104},[87,82704,245],{"class":171},[87,82706,117],{"class":97},[87,82708,82709,82711,82713,82715,82717],{"class":89,"line":2568},[87,82710,55721],{"class":104},[87,82712,108],{"class":97},[87,82714,1496],{"class":104},[87,82716,245],{"class":171},[87,82718,117],{"class":97},[87,82720,82721,82723,82725,82727,82729],{"class":89,"line":2573},[87,82722,58295],{"class":104},[87,82724,108],{"class":97},[87,82726,1496],{"class":104},[87,82728,245],{"class":171},[87,82730,117],{"class":97},[87,82732,82733,82735,82737,82739,82741],{"class":89,"line":2579},[87,82734,66065],{"class":104},[87,82736,108],{"class":97},[87,82738,1592],{"class":104},[87,82740,245],{"class":171},[87,82742,117],{"class":97},[87,82744,82745,82747,82749,82751],{"class":89,"line":2584},[87,82746,58222],{"class":104},[87,82748,108],{"class":97},[87,82750,318],{"class":104},[87,82752,117],{"class":97},[87,82754,82755,82757,82759,82761],{"class":89,"line":2598},[87,82756,55820],{"class":104},[87,82758,108],{"class":97},[87,82760,52583],{"class":104},[87,82762,117],{"class":97},[87,82764,82765],{"class":89,"line":2603},[87,82766,3142],{"class":97},[87,82768,82769,82771,82773],{"class":89,"line":2609},[87,82770,53354],{"class":97},[87,82772,1006],{"class":93},[87,82774,953],{"class":97},[87,82776,82777,82779,82781],{"class":89,"line":2630},[87,82778,963],{"class":97},[87,82780,52278],{"class":93},[87,82782,953],{"class":97},[87,82784,82785],{"class":89,"line":2635},[87,82786,3355],{"emptyLinePlaceholder":1029},[87,82788,82789,82791,82793],{"class":89,"line":2649},[87,82790,938],{"class":97},[87,82792,52737],{"class":93},[87,82794,953],{"class":97},[87,82796,82797,82799,82801,82803,82805],{"class":89,"line":2654},[87,82798,53081],{"class":97},[87,82800,94],{"class":93},[87,82802,56250],{"class":97},[87,82804,94],{"class":93},[87,82806,953],{"class":97},[87,82808,82809,82811,82813],{"class":89,"line":2683},[87,82810,53081],{"class":97},[87,82812,52750],{"class":93},[87,82814,953],{"class":97},[87,82816,82817,82819,82822,82824,82827,82830,82832,82835],{"class":89,"line":2688},[87,82818,12171],{"class":171},[87,82820,82821],{"class":104}," spec",[87,82823,14514],{"class":171},[87,82825,82826],{"class":97}," { size: ",[87,82828,82829],{"class":949},"'40cm*40cm'",[87,82831,56400],{"class":97},[87,82833,82834],{"class":949},"'黑色'",[87,82836,56540],{"class":97},[87,82838,82839],{"class":89,"line":2705},[87,82840,82841],{"class":199},"    \u002F\u002F const arr = Object.values(spec)\n",[87,82843,82844],{"class":89,"line":2710},[87,82845,82846],{"class":199},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[87,82848,82849,82851,82853,82855,82858,82860,82862,82865,82868,82871,82873,82875,82878],{"class":89,"line":2715},[87,82850,53344],{"class":97},[87,82852,55335],{"class":205},[87,82854,165],{"class":97},[87,82856,82857],{"class":949},"'div'",[87,82859,75177],{"class":97},[87,82861,946],{"class":171},[87,82863,82864],{"class":97}," Object.",[87,82866,82867],{"class":205},"values",[87,82869,82870],{"class":97},"(spec).",[87,82872,75151],{"class":205},[87,82874,165],{"class":97},[87,82876,82877],{"class":949},"'\u002F'",[87,82879,1108],{"class":97},[87,82881,82882,82884,82886],{"class":89,"line":2720},[87,82883,53354],{"class":97},[87,82885,52750],{"class":93},[87,82887,953],{"class":97},[87,82889,82890,82892,82894],{"class":89,"line":2734},[87,82891,963],{"class":97},[87,82893,52737],{"class":93},[87,82895,953],{"class":97},[87,82897,82898],{"class":89,"line":2739},[87,82899,3355],{"emptyLinePlaceholder":1029},[87,82901,82902,82904,82906],{"class":89,"line":3532},[87,82903,963],{"class":97},[87,82905,51581],{"class":93},[87,82907,953],{"class":97},[19,82909,82910],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23857,82912,82914],{"id":82913},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82916,82917],{},"静态方法，将伪数组转换为真数组",[19,82919,82920],{},[39,82921],{"alt":82,"src":82922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[77,82924,82926],{"className":54004,"code":82925,"language":54006,"meta":82,"style":82},"\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",[84,82927,82928,82936,82944,82956,82968,82980,82988,82996,83001,83006,83011,83016,83024],{"__ignoreMap":82},[87,82929,82930,82932,82934],{"class":89,"line":90},[87,82931,938],{"class":97},[87,82933,52737],{"class":93},[87,82935,953],{"class":97},[87,82937,82938,82940,82942],{"class":89,"line":101},[87,82939,53081],{"class":97},[87,82941,26],{"class":93},[87,82943,953],{"class":97},[87,82945,82946,82948,82950,82952,82954],{"class":89,"line":120},[87,82947,52285],{"class":97},[87,82949,29],{"class":93},[87,82951,56250],{"class":97},[87,82953,29],{"class":93},[87,82955,953],{"class":97},[87,82957,82958,82960,82962,82964,82966],{"class":89,"line":222},[87,82959,52285],{"class":97},[87,82961,29],{"class":93},[87,82963,56250],{"class":97},[87,82965,29],{"class":93},[87,82967,953],{"class":97},[87,82969,82970,82972,82974,82976,82978],{"class":89,"line":234},[87,82971,52285],{"class":97},[87,82973,29],{"class":93},[87,82975,56250],{"class":97},[87,82977,29],{"class":93},[87,82979,953],{"class":97},[87,82981,82982,82984,82986],{"class":89,"line":256},[87,82983,53354],{"class":97},[87,82985,26],{"class":93},[87,82987,953],{"class":97},[87,82989,82990,82992,82994],{"class":89,"line":269},[87,82991,53081],{"class":97},[87,82993,52750],{"class":93},[87,82995,953],{"class":97},[87,82997,82998],{"class":89,"line":463},[87,82999,83000],{"class":97},"    const lis = document.querySelectorAll('li')\n",[87,83002,83003],{"class":89,"line":469},[87,83004,83005],{"class":97},"    const liss = Array.from(lis)\n",[87,83007,83008],{"class":89,"line":2287},[87,83009,83010],{"class":97},"    liss.pop()\n",[87,83012,83013],{"class":89,"line":2568},[87,83014,83015],{"class":97},"    console.log(liss)\n",[87,83017,83018,83020,83022],{"class":89,"line":2573},[87,83019,53354],{"class":97},[87,83021,52750],{"class":93},[87,83023,953],{"class":97},[87,83025,83026,83028,83030],{"class":89,"line":2579},[87,83027,963],{"class":97},[87,83029,52737],{"class":93},[87,83031,953],{"class":97},[19,83033,83034],{},[39,83035],{"alt":82,"src":83036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[49,83038,83040],{"id":83039},"_41053-string","4.10.5.3 String",[19,83042,83043],{},[39,83044],{"alt":82,"src":83045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23857,83047,83049],{"id":83048},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[77,83051,83053],{"className":54004,"code":83052,"language":54006,"meta":82,"style":82},"\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",[84,83054,83055,83063,83071,83076,83081,83086,83090,83095,83100,83105,83113],{"__ignoreMap":82},[87,83056,83057,83059,83061],{"class":89,"line":90},[87,83058,938],{"class":97},[87,83060,52737],{"class":93},[87,83062,953],{"class":97},[87,83064,83065,83067,83069],{"class":89,"line":101},[87,83066,53081],{"class":97},[87,83068,52750],{"class":93},[87,83070,953],{"class":97},[87,83072,83073],{"class":89,"line":120},[87,83074,83075],{"class":97},"    \u002F\u002F 把字符串转化为数组\n",[87,83077,83078],{"class":89,"line":222},[87,83079,83080],{"class":97},"    const str = 'pink,red'\n",[87,83082,83083],{"class":89,"line":234},[87,83084,83085],{"class":97},"    const arr = str.split(',')\n",[87,83087,83088],{"class":89,"line":256},[87,83089,81564],{"class":97},[87,83091,83092],{"class":89,"line":269},[87,83093,83094],{"class":97},"    const str1 = '2025-8-25'\n",[87,83096,83097],{"class":89,"line":463},[87,83098,83099],{"class":97},"    const arr1 = str1.split('-')\n",[87,83101,83102],{"class":89,"line":469},[87,83103,83104],{"class":97},"    console.log(arr1)\n",[87,83106,83107,83109,83111],{"class":89,"line":2287},[87,83108,53354],{"class":97},[87,83110,52750],{"class":93},[87,83112,953],{"class":97},[87,83114,83115,83117,83119],{"class":89,"line":2568},[87,83116,963],{"class":97},[87,83118,52737],{"class":93},[87,83120,953],{"class":97},[23857,83122,83124],{"id":83123},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,83126,6134],{},[19,83128,83129],{},"substring(indexStart)",[19,83131,83132],{},"substring(indexStart, indexEnd)",[26,83134,83135,83146,83158,83168],{},[29,83136,83137,83138,83141,83142,83145],{},"如果省略了 ",[84,83139,83140],{},"indexEnd","，则 ",[84,83143,83144],{},"substring()"," 提取字符直到字符串的末尾",[29,83147,83148,83149,83152,83153,83141,83155,83157],{},"如果 ",[84,83150,83151],{},"indexStart"," 等于 ",[84,83154,83140],{},[84,83156,83144],{}," 返回一个空字符串",[29,83159,83148,83160,83162,83163,83141,83165,83167],{},[84,83161,83151],{}," 大于 ",[84,83164,83140],{},[84,83166,83144],{}," 的效果就像交换了这两个参数一样",[29,83169,83170],{},"结束的索引号不包含想要截取的部分",[77,83172,83174],{"className":82415,"code":83173,"language":82417,"meta":82,"style":82},"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",[84,83175,83176,83188,83192,83226,83256,83260,83291,83295,83322,83352,83382,83386,83417],{"__ignoreMap":82},[87,83177,83178,83181,83183,83186],{"class":89,"line":90},[87,83179,83180],{"class":97},"const anyString ",[87,83182,946],{"class":171},[87,83184,83185],{"class":949}," \"Mozilla\"",[87,83187,117],{"class":97},[87,83189,83190],{"class":89,"line":101},[87,83191,3355],{"emptyLinePlaceholder":1029},[87,83193,83194,83197,83199,83201,83203,83206,83208,83211,83213,83215,83217,83219,83221,83223],{"class":89,"line":120},[87,83195,83196],{"class":104},"console",[87,83198,1651],{"class":97},[87,83200,59183],{"class":104},[87,83202,165],{"class":97},[87,83204,83205],{"class":104},"anyString",[87,83207,1651],{"class":97},[87,83209,83210],{"class":104},"substring",[87,83212,165],{"class":97},[87,83214,111],{"class":104},[87,83216,13385],{"class":97},[87,83218,1313],{"class":104},[87,83220,76181],{"class":97},[87,83222,34276],{"class":171},[87,83224,83225],{"class":949}," 'M'\n",[87,83227,83228,83230,83232,83234,83236,83238,83240,83242,83244,83246,83248,83250,83252,83254],{"class":89,"line":222},[87,83229,83196],{"class":104},[87,83231,1651],{"class":97},[87,83233,59183],{"class":104},[87,83235,165],{"class":97},[87,83237,83205],{"class":104},[87,83239,1651],{"class":97},[87,83241,83210],{"class":104},[87,83243,165],{"class":97},[87,83245,1313],{"class":104},[87,83247,13385],{"class":97},[87,83249,111],{"class":104},[87,83251,76181],{"class":97},[87,83253,34276],{"class":171},[87,83255,83225],{"class":949},[87,83257,83258],{"class":89,"line":234},[87,83259,3355],{"emptyLinePlaceholder":1029},[87,83261,83262,83264,83266,83268,83270,83272,83274,83276,83278,83280,83282,83284,83286,83288],{"class":89,"line":256},[87,83263,83196],{"class":104},[87,83265,1651],{"class":97},[87,83267,59183],{"class":104},[87,83269,165],{"class":97},[87,83271,83205],{"class":104},[87,83273,1651],{"class":97},[87,83275,83210],{"class":104},[87,83277,165],{"class":97},[87,83279,111],{"class":104},[87,83281,13385],{"class":97},[87,83283,1439],{"class":104},[87,83285,76181],{"class":97},[87,83287,34276],{"class":171},[87,83289,83290],{"class":949}," 'Mozill'\n",[87,83292,83293],{"class":89,"line":269},[87,83294,3355],{"emptyLinePlaceholder":1029},[87,83296,83297,83299,83301,83303,83305,83307,83309,83311,83313,83315,83317,83319],{"class":89,"line":463},[87,83298,83196],{"class":104},[87,83300,1651],{"class":97},[87,83302,59183],{"class":104},[87,83304,165],{"class":97},[87,83306,83205],{"class":104},[87,83308,1651],{"class":97},[87,83310,83210],{"class":104},[87,83312,165],{"class":97},[87,83314,1389],{"class":104},[87,83316,76181],{"class":97},[87,83318,34276],{"class":171},[87,83320,83321],{"class":949}," 'lla'\n",[87,83323,83324,83326,83328,83330,83332,83334,83336,83338,83340,83342,83344,83346,83348,83350],{"class":89,"line":469},[87,83325,83196],{"class":104},[87,83327,1651],{"class":97},[87,83329,59183],{"class":104},[87,83331,165],{"class":97},[87,83333,83205],{"class":104},[87,83335,1651],{"class":97},[87,83337,83210],{"class":104},[87,83339,165],{"class":97},[87,83341,1389],{"class":104},[87,83343,13385],{"class":97},[87,83345,1464],{"class":104},[87,83347,76237],{"class":97},[87,83349,34276],{"class":171},[87,83351,83321],{"class":949},[87,83353,83354,83356,83358,83360,83362,83364,83366,83368,83370,83372,83374,83376,83378,83380],{"class":89,"line":2287},[87,83355,83196],{"class":104},[87,83357,1651],{"class":97},[87,83359,59183],{"class":104},[87,83361,165],{"class":97},[87,83363,83205],{"class":104},[87,83365,1651],{"class":97},[87,83367,83210],{"class":104},[87,83369,165],{"class":97},[87,83371,1464],{"class":104},[87,83373,13385],{"class":97},[87,83375,1389],{"class":104},[87,83377,76181],{"class":97},[87,83379,34276],{"class":171},[87,83381,83321],{"class":949},[87,83383,83384],{"class":89,"line":2568},[87,83385,3355],{"emptyLinePlaceholder":1029},[87,83387,83388,83390,83392,83394,83396,83398,83400,83402,83404,83406,83408,83410,83412,83414],{"class":89,"line":2573},[87,83389,83196],{"class":104},[87,83391,1651],{"class":97},[87,83393,59183],{"class":104},[87,83395,165],{"class":97},[87,83397,83205],{"class":104},[87,83399,1651],{"class":97},[87,83401,83210],{"class":104},[87,83403,165],{"class":97},[87,83405,111],{"class":104},[87,83407,13385],{"class":97},[87,83409,1464],{"class":104},[87,83411,76181],{"class":97},[87,83413,34276],{"class":171},[87,83415,83416],{"class":949}," 'Mozilla'\n",[87,83418,83419,83421,83423,83425,83427,83429,83431,83433,83435,83437,83439,83441,83443,83445],{"class":89,"line":2579},[87,83420,83196],{"class":104},[87,83422,1651],{"class":97},[87,83424,59183],{"class":104},[87,83426,165],{"class":97},[87,83428,83205],{"class":104},[87,83430,1651],{"class":97},[87,83432,83210],{"class":104},[87,83434,165],{"class":97},[87,83436,111],{"class":104},[87,83438,13385],{"class":97},[87,83440,242],{"class":104},[87,83442,76181],{"class":97},[87,83444,34276],{"class":171},[87,83446,83416],{"class":949},[23857,83448,83450],{"id":83449},"_410533-startswith","4.10.5.3.3 startsWith",[19,83452,83453,83456,83457,83462,83463,83465,83466],{},[84,83454,83455],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[57,83458,83459],{},[84,83460,83461],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[84,83464,2320],{}," 或 ",[84,83467,66952],{},[77,83469,83471],{"className":78423,"code":83470,"language":78425,"meta":82,"style":82},"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",[84,83472,83473,83485,83504,83509,83529],{"__ignoreMap":82},[87,83474,83475,83477,83480,83482],{"class":89,"line":90},[87,83476,7742],{"class":171},[87,83478,83479],{"class":97}," str1 ",[87,83481,946],{"class":171},[87,83483,83484],{"class":949}," \"Saturday night plans\"\n",[87,83486,83487,83489,83491,83494,83497,83499,83502],{"class":89,"line":101},[87,83488,78460],{"class":97},[87,83490,59183],{"class":205},[87,83492,83493],{"class":97},"(str1.",[87,83495,83496],{"class":205},"startsWith",[87,83498,165],{"class":97},[87,83500,83501],{"class":949},"\"Sat\"",[87,83503,31444],{"class":97},[87,83505,83506],{"class":89,"line":120},[87,83507,83508],{"class":199},"\u002F\u002F Expected output: true\n",[87,83510,83511,83513,83515,83517,83519,83521,83523,83525,83527],{"class":89,"line":222},[87,83512,78460],{"class":97},[87,83514,59183],{"class":205},[87,83516,83493],{"class":97},[87,83518,83496],{"class":205},[87,83520,165],{"class":97},[87,83522,83501],{"class":949},[87,83524,13385],{"class":97},[87,83526,1170],{"class":104},[87,83528,31444],{"class":97},[87,83530,83531],{"class":89,"line":234},[87,83532,83533],{"class":199},"\u002F\u002F Expected output: false\n",[77,83535,83537],{"className":51579,"code":83536,"language":51581,"meta":82,"style":82},"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",[84,83538,83539,83544,83549,83553,83558,83563],{"__ignoreMap":82},[87,83540,83541],{"class":89,"line":90},[87,83542,83543],{"class":97},"startsWith(searchString)\n",[87,83545,83546],{"class":89,"line":101},[87,83547,83548],{"class":97},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[87,83550,83551],{"class":89,"line":120},[87,83552,3355],{"emptyLinePlaceholder":1029},[87,83554,83555],{"class":89,"line":222},[87,83556,83557],{"class":97},"const str3 = 'pink老师上课中'\n",[87,83559,83560],{"class":89,"line":234},[87,83561,83562],{"class":97},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[87,83564,83565],{"class":89,"line":256},[87,83566,83567],{"class":97},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23857,83569,83571],{"id":83570},"_410534-includes","4.10.5.3.4 includes",[19,83573,83574],{},"includes(searchString) includes(searchString, position)",[1055,83576,83577],{},[29,83578,83579],{},"searchString:",[19,83581,83582,83583,83585,83586,83591,83592,83597,83598,22448,83601,83604,83605,83608],{},"一个要在 ",[84,83584,2259],{}," 中查找的字符串。",[1334,83587,83590],{"href":83588,"rel":83589},"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",[24812],"不能是正则表达式","。所有非正则表达式的值都会被",[1334,83593,83596],{"href":83594,"rel":83595},"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",[24812],"强制转换为字符串","，因此如果该参数被省略或传入 ",[84,83599,83600],{},"undefined",[84,83602,83603],{},"includes()"," 方法会在字符串中搜索 ",[84,83606,83607],{},"\"undefined\"","，这通常不是你想要的",[1055,83610,83611],{"start":101},[29,83612,83613,1951],{},[84,83614,83615],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,83617,83618,83619,83622,83623],{},"在字符串中开始搜索 ",[84,83620,83621],{},"searchString"," 的位置。默认值为 ",[84,83624,111],{},[1055,83626,83627],{"start":120},[29,83628,83629],{},"返回值：",[19,83631,83632,83633,83635,83636,83640,83641],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[84,83634,83621],{}," 为空字符串的情况），则返回 ",[57,83637,83638],{},[84,83639,2320],{}," ，否则返回 ",[57,83642,83643],{},[84,83644,66952],{},[1055,83646,83647],{"start":222},[29,83648,83649],{},"异常：",[19,83651,83148,83652,14745,83654,83658],{},[84,83653,83621],{},[1334,83655,83657],{"href":83588,"rel":83656},[24812],"是一个正则表达式","，则会抛出",[19,83660,83661],{},"只要是有就是true，不需要非得以谁开头结尾",[77,83663,83665],{"className":78423,"code":83664,"language":78425,"meta":82,"style":82},"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",[84,83666,83667,83678,83701,83720,83740,83762,83781],{"__ignoreMap":82},[87,83668,83669,83671,83673,83675],{"class":89,"line":90},[87,83670,7742],{"class":171},[87,83672,80702],{"class":97},[87,83674,946],{"class":171},[87,83676,83677],{"class":949}," \"To be, or not to be, that is the question.\"\n",[87,83679,83680,83682,83684,83687,83690,83692,83695,83698],{"class":89,"line":101},[87,83681,78460],{"class":97},[87,83683,59183],{"class":205},[87,83685,83686],{"class":97},"(str.",[87,83688,83689],{"class":205},"includes",[87,83691,165],{"class":97},[87,83693,83694],{"class":949},"\"To be\"",[87,83696,83697],{"class":97},"))",[87,83699,83700],{"class":199},"  \u002F\u002F true\n",[87,83702,83703,83705,83707,83709,83711,83713,83716,83718],{"class":89,"line":120},[87,83704,78460],{"class":97},[87,83706,59183],{"class":205},[87,83708,83686],{"class":97},[87,83710,83689],{"class":205},[87,83712,165],{"class":97},[87,83714,83715],{"class":949},"\"question\"",[87,83717,83697],{"class":97},[87,83719,83700],{"class":199},[87,83721,83722,83724,83726,83728,83730,83732,83735,83737],{"class":89,"line":222},[87,83723,78460],{"class":97},[87,83725,59183],{"class":205},[87,83727,83686],{"class":97},[87,83729,83689],{"class":205},[87,83731,165],{"class":97},[87,83733,83734],{"class":949},"\"nonexistent\"",[87,83736,83697],{"class":97},[87,83738,83739],{"class":199},"  \u002F\u002F false\n",[87,83741,83742,83744,83746,83748,83750,83752,83754,83756,83758,83760],{"class":89,"line":234},[87,83743,78460],{"class":97},[87,83745,59183],{"class":205},[87,83747,83686],{"class":97},[87,83749,83689],{"class":205},[87,83751,165],{"class":97},[87,83753,83694],{"class":949},[87,83755,13385],{"class":97},[87,83757,1313],{"class":104},[87,83759,83697],{"class":97},[87,83761,83739],{"class":199},[87,83763,83764,83766,83768,83770,83772,83774,83777,83779],{"class":89,"line":256},[87,83765,78460],{"class":97},[87,83767,59183],{"class":205},[87,83769,83686],{"class":97},[87,83771,83689],{"class":205},[87,83773,165],{"class":97},[87,83775,83776],{"class":949},"\"TO BE\"",[87,83778,83697],{"class":97},[87,83780,83739],{"class":199},[87,83782,83783,83785,83787,83789,83791,83793,83795,83797],{"class":89,"line":269},[87,83784,78460],{"class":97},[87,83786,59183],{"class":205},[87,83788,83686],{"class":97},[87,83790,83689],{"class":205},[87,83792,165],{"class":97},[87,83794,8602],{"class":949},[87,83796,83697],{"class":97},[87,83798,83700],{"class":199},[23857,83800,83802],{"id":83801},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[77,83804,83806],{"className":54004,"code":83805,"language":54006,"meta":82,"style":82},"\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",[84,83807,83808,83816,83824,83829,83834,83839,83844,83849,83857],{"__ignoreMap":82},[87,83809,83810,83812,83814],{"class":89,"line":90},[87,83811,938],{"class":97},[87,83813,52737],{"class":93},[87,83815,953],{"class":97},[87,83817,83818,83820,83822],{"class":89,"line":101},[87,83819,53081],{"class":97},[87,83821,52750],{"class":93},[87,83823,953],{"class":97},[87,83825,83826],{"class":89,"line":120},[87,83827,83828],{"class":97},"    const num = 10\n",[87,83830,83831],{"class":89,"line":222},[87,83832,83833],{"class":97},"    \u002F\u002F 强制转换\n",[87,83835,83836],{"class":89,"line":234},[87,83837,83838],{"class":97},"    console.log(String(num))\n",[87,83840,83841],{"class":89,"line":256},[87,83842,83843],{"class":97},"    \u002F\u002F toString()方法转换\n",[87,83845,83846],{"class":89,"line":269},[87,83847,83848],{"class":97},"    console.log(num.toString())\n",[87,83850,83851,83853,83855],{"class":89,"line":463},[87,83852,53354],{"class":97},[87,83854,52750],{"class":93},[87,83856,953],{"class":97},[87,83858,83859,83861,83863],{"class":89,"line":469},[87,83860,963],{"class":97},[87,83862,52737],{"class":93},[87,83864,953],{"class":97},[23857,83866,83868],{"id":83867},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83870,83871],{},[39,83872],{"alt":82,"src":83873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[77,83875,83877],{"className":51579,"code":83876,"language":51581,"meta":82,"style":82},"\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",[84,83878,83879,83889,83903,83907,83915,83929,83949,83961,83969,83973,83981,83993,84001,84013,84018,84023,84028,84075,84091,84099,84107,84111],{"__ignoreMap":82},[87,83880,83881,83883,83885,83887],{"class":89,"line":90},[87,83882,52243],{"class":97},[87,83884,52246],{"class":93},[87,83886,52249],{"class":205},[87,83888,953],{"class":97},[87,83890,83891,83893,83895,83897,83899,83901],{"class":89,"line":101},[87,83892,938],{"class":97},[87,83894,51581],{"class":93},[87,83896,52260],{"class":205},[87,83898,946],{"class":97},[87,83900,52265],{"class":949},[87,83902,953],{"class":97},[87,83904,83905],{"class":89,"line":120},[87,83906,3355],{"emptyLinePlaceholder":1029},[87,83908,83909,83911,83913],{"class":89,"line":222},[87,83910,938],{"class":97},[87,83912,52278],{"class":93},[87,83914,953],{"class":97},[87,83916,83917,83919,83921,83923,83925,83927],{"class":89,"line":234},[87,83918,53081],{"class":97},[87,83920,52288],{"class":93},[87,83922,52291],{"class":205},[87,83924,946],{"class":97},[87,83926,52296],{"class":949},[87,83928,953],{"class":97},[87,83930,83931,83933,83935,83937,83939,83941,83943,83945,83947],{"class":89,"line":256},[87,83932,53081],{"class":97},[87,83934,52288],{"class":93},[87,83936,15870],{"class":205},[87,83938,946],{"class":97},[87,83940,52335],{"class":949},[87,83942,52315],{"class":205},[87,83944,946],{"class":97},[87,83946,52342],{"class":949},[87,83948,953],{"class":97},[87,83950,83951,83953,83955,83957,83959],{"class":89,"line":269},[87,83952,53081],{"class":97},[87,83954,52351],{"class":93},[87,83956,52354],{"class":97},[87,83958,52351],{"class":93},[87,83960,953],{"class":97},[87,83962,83963,83965,83967],{"class":89,"line":463},[87,83964,963],{"class":97},[87,83966,52278],{"class":93},[87,83968,953],{"class":97},[87,83970,83971],{"class":89,"line":469},[87,83972,3355],{"emptyLinePlaceholder":1029},[87,83974,83975,83977,83979],{"class":89,"line":2287},[87,83976,938],{"class":97},[87,83978,52737],{"class":93},[87,83980,953],{"class":97},[87,83982,83983,83985,83987,83989,83991],{"class":89,"line":2568},[87,83984,53081],{"class":97},[87,83986,94],{"class":93},[87,83988,56250],{"class":97},[87,83990,94],{"class":93},[87,83992,953],{"class":97},[87,83994,83995,83997,83999],{"class":89,"line":2573},[87,83996,53081],{"class":97},[87,83998,52750],{"class":93},[87,84000,953],{"class":97},[87,84002,84003,84005,84008,84010],{"class":89,"line":2579},[87,84004,12171],{"class":171},[87,84006,84007],{"class":104}," gift",[87,84009,14514],{"class":171},[87,84011,84012],{"class":949}," '50g的茶叶，清洗球'\n",[87,84014,84015],{"class":89,"line":2584},[87,84016,84017],{"class":199},"    \u002F\u002F 1.把字符串拆分为数组\n",[87,84019,84020],{"class":89,"line":2598},[87,84021,84022],{"class":199},"    \u002F\u002F console.log(gift.split(','))\n",[87,84024,84025],{"class":89,"line":2603},[87,84026,84027],{"class":199},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[87,84029,84030,84032,84034,84036,84039,84042,84044,84047,84049,84051,84053,84055,84057,84060,84062,84065,84067,84069,84071,84073],{"class":89,"line":2609},[87,84031,12171],{"class":171},[87,84033,74847],{"class":104},[87,84035,14514],{"class":171},[87,84037,84038],{"class":97}," gift.",[87,84040,84041],{"class":205},"split",[87,84043,165],{"class":97},[87,84045,84046],{"class":949},"'，'",[87,84048,31773],{"class":97},[87,84050,74972],{"class":205},[87,84052,165],{"class":97},[87,84054,80722],{"class":492},[87,84056,80725],{"class":171},[87,84058,84059],{"class":949}," `\u003Cspan>【赠品】${",[87,84061,80722],{"class":97},[87,84063,84064],{"class":949},"}\u003C\u002Fspan>\u003Cbr>`",[87,84066,31773],{"class":97},[87,84068,75151],{"class":205},[87,84070,165],{"class":97},[87,84072,75156],{"class":949},[87,84074,1108],{"class":97},[87,84076,84077,84079,84081,84083,84085,84087,84089],{"class":89,"line":2630},[87,84078,53344],{"class":97},[87,84080,55335],{"class":205},[87,84082,165],{"class":97},[87,84084,82857],{"class":949},[87,84086,75177],{"class":97},[87,84088,946],{"class":171},[87,84090,74913],{"class":97},[87,84092,84093,84095,84097],{"class":89,"line":2635},[87,84094,53354],{"class":97},[87,84096,52750],{"class":93},[87,84098,953],{"class":97},[87,84100,84101,84103,84105],{"class":89,"line":2649},[87,84102,963],{"class":97},[87,84104,52737],{"class":93},[87,84106,953],{"class":97},[87,84108,84109],{"class":89,"line":2654},[87,84110,3355],{"emptyLinePlaceholder":1029},[87,84112,84113,84115,84117],{"class":89,"line":2683},[87,84114,963],{"class":97},[87,84116,51581],{"class":93},[87,84118,953],{"class":97},[49,84120,84122],{"id":84121},"_41054-number","4.10.5.4 Number",[19,84124,84125],{},[39,84126],{"alt":82,"src":84127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,84129,84130],{},"整数也可以进行toFixed来保留小数",[19,84132,84133],{},"比如：",[19,84135,84136],{},"const price=10",[19,84138,84139],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[49,84141,84143],{"id":84142},"_41055-购物车展示","4.10.5.5 购物车展示",[19,84145,84146],{},[39,84147],{"alt":82,"src":84148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[77,84150,84152],{"className":51579,"code":84151,"language":51581,"meta":82,"style":82},"\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",[84,84153,84154,84164,84178,84182,84190,84204,84224,84236,84244,84250,84260,84270,84280,84284,84288,84294,84306,84320,84324,84328,84334,84346,84362,84372,84388,84392,84396,84402,84412,84422,84426,84430,84438,84450,84462,84474,84478,84482,84490,84502,84506,84510,84521,84531,84543,84555,84565,84569,84573,84581,84590,84602,84612,84622,84626,84630,84638,84647,84654,84664,84676,84680,84684,84693,84703,84714,84726,84738,84742,84746,84755,84765,84776,84780,84784,84790,84802,84814,84824,84834,84852,84864,84868,84872,84881,84893,84903,84913,84925,84929,84937,84945,84949,84957,84971,84979,84993,85021,85029,85037,85047,85051,85059,85067,85076,85084,85093,85103,85107,85111,85119,85127,85136,85144,85152,85165,85169,85173,85181,85189,85198,85206,85214,85229,85233,85237,85245,85253,85262,85270,85278,85292,85300,85304,85308,85313,85339,85344,85381,85386,85409,85414,85468,85473,85509,85513,85519,85524,85533,85547,85556,85575,85584,85594,85599,85604,85617,85622,85676,85702,85710,85718,85722],{"__ignoreMap":82},[87,84155,84156,84158,84160,84162],{"class":89,"line":90},[87,84157,52243],{"class":97},[87,84159,52246],{"class":93},[87,84161,52249],{"class":205},[87,84163,953],{"class":97},[87,84165,84166,84168,84170,84172,84174,84176],{"class":89,"line":101},[87,84167,938],{"class":97},[87,84169,51581],{"class":93},[87,84171,52260],{"class":205},[87,84173,946],{"class":97},[87,84175,52265],{"class":949},[87,84177,953],{"class":97},[87,84179,84180],{"class":89,"line":120},[87,84181,3355],{"emptyLinePlaceholder":1029},[87,84183,84184,84186,84188],{"class":89,"line":222},[87,84185,938],{"class":97},[87,84187,52278],{"class":93},[87,84189,953],{"class":97},[87,84191,84192,84194,84196,84198,84200,84202],{"class":89,"line":234},[87,84193,53081],{"class":97},[87,84195,52288],{"class":93},[87,84197,52291],{"class":205},[87,84199,946],{"class":97},[87,84201,52296],{"class":949},[87,84203,953],{"class":97},[87,84205,84206,84208,84210,84212,84214,84216,84218,84220,84222],{"class":89,"line":256},[87,84207,53081],{"class":97},[87,84209,52288],{"class":93},[87,84211,15870],{"class":205},[87,84213,946],{"class":97},[87,84215,52335],{"class":949},[87,84217,52315],{"class":205},[87,84219,946],{"class":97},[87,84221,52342],{"class":949},[87,84223,953],{"class":97},[87,84225,84226,84228,84230,84232,84234],{"class":89,"line":269},[87,84227,53081],{"class":97},[87,84229,52351],{"class":93},[87,84231,52354],{"class":97},[87,84233,52351],{"class":93},[87,84235,953],{"class":97},[87,84237,84238,84240,84242],{"class":89,"line":463},[87,84239,53081],{"class":97},[87,84241,1006],{"class":93},[87,84243,953],{"class":97},[87,84245,84246,84248],{"class":89,"line":469},[87,84247,7353],{"class":93},[87,84249,98],{"class":97},[87,84251,84252,84254,84256,84258],{"class":89,"line":2287},[87,84253,55631],{"class":104},[87,84255,108],{"class":97},[87,84257,111],{"class":104},[87,84259,117],{"class":97},[87,84261,84262,84264,84266,84268],{"class":89,"line":2568},[87,84263,55642],{"class":104},[87,84265,108],{"class":97},[87,84267,111],{"class":104},[87,84269,117],{"class":97},[87,84271,84272,84274,84276,84278],{"class":89,"line":2573},[87,84273,73524],{"class":104},[87,84275,108],{"class":97},[87,84277,61441],{"class":104},[87,84279,117],{"class":97},[87,84281,84282],{"class":89,"line":2579},[87,84283,3142],{"class":97},[87,84285,84286],{"class":89,"line":2584},[87,84287,3355],{"emptyLinePlaceholder":1029},[87,84289,84290,84292],{"class":89,"line":2598},[87,84291,63058],{"class":205},[87,84293,98],{"class":97},[87,84295,84296,84298,84300,84302,84304],{"class":89,"line":2603},[87,84297,55707],{"class":104},[87,84299,108],{"class":97},[87,84301,79502],{"class":104},[87,84303,245],{"class":171},[87,84305,117],{"class":97},[87,84307,84308,84310,84312,84314,84316,84318],{"class":89,"line":2609},[87,84309,55642],{"class":104},[87,84311,108],{"class":97},[87,84313,536],{"class":104},[87,84315,245],{"class":171},[87,84317,114],{"class":104},[87,84319,117],{"class":97},[87,84321,84322],{"class":89,"line":2630},[87,84323,3142],{"class":97},[87,84325,84326],{"class":89,"line":2635},[87,84327,3355],{"emptyLinePlaceholder":1029},[87,84329,84330,84332],{"class":89,"line":2649},[87,84331,79553],{"class":205},[87,84333,98],{"class":97},[87,84335,84336,84338,84340,84342,84344],{"class":89,"line":2654},[87,84337,55631],{"class":104},[87,84339,108],{"class":97},[87,84341,1668],{"class":104},[87,84343,245],{"class":171},[87,84345,117],{"class":97},[87,84347,84348,84350,84352,84354,84356,84358,84360],{"class":89,"line":2683},[87,84349,62795],{"class":104},[87,84351,108],{"class":97},[87,84353,29068],{"class":104},[87,84355,574],{"class":104},[87,84357,79610],{"class":104},[87,84359,571],{"class":171},[87,84361,117],{"class":97},[87,84363,84364,84366,84368,84370],{"class":89,"line":2688},[87,84365,55945],{"class":104},[87,84367,108],{"class":97},[87,84369,52420],{"class":104},[87,84371,117],{"class":97},[87,84373,84374,84376,84378,84380,84382,84384,84386],{"class":89,"line":2705},[87,84375,62912],{"class":104},[87,84377,108],{"class":97},[87,84379,1313],{"class":104},[87,84381,245],{"class":171},[87,84383,248],{"class":104},[87,84385,63179],{"class":104},[87,84387,117],{"class":97},[87,84389,84390],{"class":89,"line":2710},[87,84391,3142],{"class":97},[87,84393,84394],{"class":89,"line":2715},[87,84395,3355],{"emptyLinePlaceholder":1029},[87,84397,84398,84400],{"class":89,"line":2720},[87,84399,79670],{"class":205},[87,84401,98],{"class":97},[87,84403,84404,84406,84408,84410],{"class":89,"line":2734},[87,84405,62960],{"class":104},[87,84407,108],{"class":97},[87,84409,62965],{"class":104},[87,84411,117],{"class":97},[87,84413,84414,84416,84418,84420],{"class":89,"line":2739},[87,84415,55820],{"class":104},[87,84417,108],{"class":97},[87,84419,62753],{"class":104},[87,84421,117],{"class":97},[87,84423,84424],{"class":89,"line":3532},[87,84425,3142],{"class":97},[87,84427,84428],{"class":89,"line":3546},[87,84429,3355],{"emptyLinePlaceholder":1029},[87,84431,84432,84434,84436],{"class":89,"line":3554},[87,84433,79553],{"class":205},[87,84435,56551],{"class":93},[87,84437,98],{"class":97},[87,84439,84440,84442,84444,84446,84448],{"class":89,"line":3559},[87,84441,55707],{"class":104},[87,84443,108],{"class":97},[87,84445,1705],{"class":104},[87,84447,245],{"class":171},[87,84449,117],{"class":97},[87,84451,84452,84454,84456,84458,84460],{"class":89,"line":3565},[87,84453,55721],{"class":104},[87,84455,108],{"class":97},[87,84457,1705],{"class":104},[87,84459,245],{"class":171},[87,84461,117],{"class":97},[87,84463,84464,84466,84468,84470,84472],{"class":89,"line":3571},[87,84465,62685],{"class":104},[87,84467,108],{"class":97},[87,84469,1414],{"class":104},[87,84471,245],{"class":171},[87,84473,117],{"class":97},[87,84475,84476],{"class":89,"line":3576},[87,84477,3142],{"class":97},[87,84479,84480],{"class":89,"line":8898},[87,84481,3355],{"emptyLinePlaceholder":1029},[87,84483,84484,84486,84488],{"class":89,"line":8922},[87,84485,79553],{"class":205},[87,84487,63239],{"class":205},[87,84489,98],{"class":97},[87,84491,84492,84494,84496,84498,84500],{"class":89,"line":8927},[87,84493,55707],{"class":104},[87,84495,108],{"class":97},[87,84497,2678],{"class":104},[87,84499,245],{"class":171},[87,84501,117],{"class":97},[87,84503,84504],{"class":89,"line":8933},[87,84505,3142],{"class":97},[87,84507,84508],{"class":89,"line":8960},[87,84509,3355],{"emptyLinePlaceholder":1029},[87,84511,84512,84514,84516,84519],{"class":89,"line":8965},[87,84513,79553],{"class":205},[87,84515,63239],{"class":205},[87,84517,84518],{"class":205}," .tag",[87,84520,98],{"class":97},[87,84522,84523,84525,84527,84529],{"class":89,"line":8971},[87,84524,55945],{"class":104},[87,84526,108],{"class":97},[87,84528,61805],{"class":104},[87,84530,117],{"class":97},[87,84532,84533,84535,84537,84539,84541],{"class":89,"line":8983},[87,84534,55631],{"class":104},[87,84536,108],{"class":97},[87,84538,1176],{"class":104},[87,84540,245],{"class":171},[87,84542,117],{"class":97},[87,84544,84545,84547,84549,84551,84553],{"class":89,"line":8995},[87,84546,55858],{"class":104},[87,84548,108],{"class":97},[87,84550,1592],{"class":104},[87,84552,245],{"class":171},[87,84554,117],{"class":97},[87,84556,84557,84559,84561,84563],{"class":89,"line":9007},[87,84558,58352],{"class":104},[87,84560,108],{"class":97},[87,84562,63005],{"class":104},[87,84564,117],{"class":97},[87,84566,84567],{"class":89,"line":10666},[87,84568,3142],{"class":97},[87,84570,84571],{"class":89,"line":10691},[87,84572,3355],{"emptyLinePlaceholder":1029},[87,84574,84575,84577,84579],{"class":89,"line":10714},[87,84576,79553],{"class":205},[87,84578,79844],{"class":205},[87,84580,32413],{"class":97},[87,84582,84583,84585,84588],{"class":89,"line":10738},[87,84584,79553],{"class":205},[87,84586,84587],{"class":205}," .sub-total",[87,84589,98],{"class":97},[87,84591,84592,84594,84596,84598,84600],{"class":89,"line":10743},[87,84593,55858],{"class":104},[87,84595,108],{"class":97},[87,84597,1743],{"class":104},[87,84599,245],{"class":171},[87,84601,117],{"class":97},[87,84603,84604,84606,84608,84610],{"class":89,"line":10748},[87,84605,58352],{"class":104},[87,84607,108],{"class":97},[87,84609,79867],{"class":104},[87,84611,117],{"class":97},[87,84613,84614,84616,84618,84620],{"class":89,"line":10753},[87,84615,62772],{"class":104},[87,84617,108],{"class":97},[87,84619,1313],{"class":104},[87,84621,117],{"class":97},[87,84623,84624],{"class":89,"line":10762},[87,84625,3142],{"class":97},[87,84627,84628],{"class":89,"line":10767},[87,84629,3355],{"emptyLinePlaceholder":1029},[87,84631,84632,84634,84636],{"class":89,"line":10773},[87,84633,79553],{"class":205},[87,84635,79884],{"class":205},[87,84637,32413],{"class":97},[87,84639,84640,84642,84645],{"class":89,"line":10794},[87,84641,79553],{"class":205},[87,84643,84644],{"class":205}," .sub-total::before",[87,84646,32413],{"class":97},[87,84648,84649,84652],{"class":89,"line":10800},[87,84650,84651],{"class":205},"    .amount::before",[87,84653,98],{"class":97},[87,84655,84656,84658,84660,84662],{"class":89,"line":10814},[87,84657,79891],{"class":104},[87,84659,108],{"class":97},[87,84661,79896],{"class":949},[87,84663,117],{"class":97},[87,84665,84666,84668,84670,84672,84674],{"class":89,"line":10820},[87,84667,55858],{"class":104},[87,84669,108],{"class":97},[87,84671,1592],{"class":104},[87,84673,245],{"class":171},[87,84675,117],{"class":97},[87,84677,84678],{"class":89,"line":10847},[87,84679,3142],{"class":97},[87,84681,84682],{"class":89,"line":10856},[87,84683,3355],{"emptyLinePlaceholder":1029},[87,84685,84686,84688,84691],{"class":89,"line":10862},[87,84687,79553],{"class":205},[87,84689,84690],{"class":205}," .spec",[87,84692,98],{"class":97},[87,84694,84695,84697,84699,84701],{"class":89,"line":10870},[87,84696,62772],{"class":104},[87,84698,108],{"class":97},[87,84700,1176],{"class":104},[87,84702,117],{"class":97},[87,84704,84705,84707,84709,84712],{"class":89,"line":10875},[87,84706,58352],{"class":104},[87,84708,108],{"class":97},[87,84710,84711],{"class":104},"#888",[87,84713,117],{"class":97},[87,84715,84716,84718,84720,84722,84724],{"class":89,"line":17553},[87,84717,55858],{"class":104},[87,84719,108],{"class":97},[87,84721,1642],{"class":104},[87,84723,245],{"class":171},[87,84725,117],{"class":97},[87,84727,84728,84730,84732,84734,84736],{"class":89,"line":17559},[87,84729,62935],{"class":104},[87,84731,108],{"class":97},[87,84733,1792],{"class":104},[87,84735,245],{"class":171},[87,84737,117],{"class":97},[87,84739,84740],{"class":89,"line":17582},[87,84741,3142],{"class":97},[87,84743,84744],{"class":89,"line":17588},[87,84745,3355],{"emptyLinePlaceholder":1029},[87,84747,84748,84750,84753],{"class":89,"line":17611},[87,84749,79553],{"class":205},[87,84751,84752],{"class":205}," .count",[87,84754,98],{"class":97},[87,84756,84757,84759,84761,84763],{"class":89,"line":17625},[87,84758,62772],{"class":104},[87,84760,108],{"class":97},[87,84762,1313],{"class":104},[87,84764,117],{"class":97},[87,84766,84767,84769,84771,84774],{"class":89,"line":17645},[87,84768,58352],{"class":104},[87,84770,108],{"class":97},[87,84772,84773],{"class":104},"#aaa",[87,84775,117],{"class":97},[87,84777,84778],{"class":89,"line":17651},[87,84779,3142],{"class":97},[87,84781,84782],{"class":89,"line":17662},[87,84783,3355],{"emptyLinePlaceholder":1029},[87,84785,84786,84788],{"class":89,"line":17685},[87,84787,73403],{"class":205},[87,84789,98],{"class":97},[87,84791,84792,84794,84796,84798,84800],{"class":89,"line":17707},[87,84793,55707],{"class":104},[87,84795,108],{"class":97},[87,84797,79502],{"class":104},[87,84799,245],{"class":171},[87,84801,117],{"class":97},[87,84803,84804,84806,84808,84810,84812],{"class":89,"line":17712},[87,84805,55642],{"class":104},[87,84807,108],{"class":97},[87,84809,111],{"class":104},[87,84811,114],{"class":104},[87,84813,117],{"class":97},[87,84815,84816,84818,84820,84822],{"class":89,"line":17718},[87,84817,55945],{"class":104},[87,84819,108],{"class":97},[87,84821,52420],{"class":104},[87,84823,117],{"class":97},[87,84825,84826,84828,84830,84832],{"class":89,"line":17732},[87,84827,55956],{"class":104},[87,84829,108],{"class":97},[87,84831,52520],{"class":104},[87,84833,117],{"class":97},[87,84835,84836,84839,84841,84843,84845,84847,84850],{"class":89,"line":17745},[87,84837,84838],{"class":104},"      border-top",[87,84840,108],{"class":97},[87,84842,1313],{"class":104},[87,84844,245],{"class":171},[87,84846,248],{"class":104},[87,84848,84849],{"class":104}," #4e4e4e",[87,84851,117],{"class":97},[87,84853,84854,84856,84858,84860,84862],{"class":89,"line":17750},[87,84855,55631],{"class":104},[87,84857,108],{"class":97},[87,84859,1792],{"class":104},[87,84861,245],{"class":171},[87,84863,117],{"class":97},[87,84865,84866],{"class":89,"line":17764},[87,84867,3142],{"class":97},[87,84869,84870],{"class":89,"line":17769},[87,84871,3355],{"emptyLinePlaceholder":1029},[87,84873,84874,84876,84879],{"class":89,"line":17775},[87,84875,73403],{"class":205},[87,84877,84878],{"class":205}," .amount",[87,84880,98],{"class":97},[87,84882,84883,84885,84887,84889,84891],{"class":89,"line":17780},[87,84884,55858],{"class":104},[87,84886,108],{"class":97},[87,84888,1743],{"class":104},[87,84890,245],{"class":171},[87,84892,117],{"class":97},[87,84894,84895,84897,84899,84901],{"class":89,"line":17794},[87,84896,58352],{"class":104},[87,84898,108],{"class":97},[87,84900,79867],{"class":104},[87,84902,117],{"class":97},[87,84904,84905,84907,84909,84911],{"class":89,"line":17799},[87,84906,63269],{"class":104},[87,84908,108],{"class":97},[87,84910,52432],{"class":104},[87,84912,117],{"class":97},[87,84914,84915,84917,84919,84921,84923],{"class":89,"line":17804},[87,84916,62685],{"class":104},[87,84918,108],{"class":97},[87,84920,1749],{"class":104},[87,84922,245],{"class":171},[87,84924,117],{"class":97},[87,84926,84927],{"class":89,"line":17818},[87,84928,3142],{"class":97},[87,84930,84931,84933,84935],{"class":89,"line":17830},[87,84932,53354],{"class":97},[87,84934,1006],{"class":93},[87,84936,953],{"class":97},[87,84938,84939,84941,84943],{"class":89,"line":17835},[87,84940,963],{"class":97},[87,84942,52278],{"class":93},[87,84944,953],{"class":97},[87,84946,84947],{"class":89,"line":17848},[87,84948,3355],{"emptyLinePlaceholder":1029},[87,84950,84951,84953,84955],{"class":89,"line":17853},[87,84952,938],{"class":97},[87,84954,52737],{"class":93},[87,84956,953],{"class":97},[87,84958,84959,84961,84963,84965,84967,84969],{"class":89,"line":17858},[87,84960,53081],{"class":97},[87,84962,94],{"class":93},[87,84964,943],{"class":205},[87,84966,946],{"class":97},[87,84968,63542],{"class":949},[87,84970,953],{"class":97},[87,84972,84973,84975,84977],{"class":89,"line":17863},[87,84974,53354],{"class":97},[87,84976,94],{"class":93},[87,84978,953],{"class":97},[87,84980,84981,84983,84985,84987,84989,84991],{"class":89,"line":17876},[87,84982,53081],{"class":97},[87,84984,94],{"class":93},[87,84986,943],{"class":205},[87,84988,946],{"class":97},[87,84990,63514],{"class":949},[87,84992,953],{"class":97},[87,84994,84995,84997,84999,85002,85004,85006,85008,85011,85013,85015,85017,85019],{"class":89,"line":17881},[87,84996,52285],{"class":97},[87,84998,94],{"class":93},[87,85000,85001],{"class":97},">合计：\u003C",[87,85003,87],{"class":93},[87,85005,943],{"class":205},[87,85007,946],{"class":97},[87,85009,85010],{"class":949},"\"amount\"",[87,85012,56250],{"class":97},[87,85014,87],{"class":93},[87,85016,56250],{"class":97},[87,85018,94],{"class":93},[87,85020,953],{"class":97},[87,85022,85023,85025,85027],{"class":89,"line":33580},[87,85024,53354],{"class":97},[87,85026,94],{"class":93},[87,85028,953],{"class":97},[87,85030,85031,85033,85035],{"class":89,"line":33586},[87,85032,53081],{"class":97},[87,85034,52750],{"class":93},[87,85036,953],{"class":97},[87,85038,85039,85041,85043,85045],{"class":89,"line":33592},[87,85040,12171],{"class":171},[87,85042,80304],{"class":104},[87,85044,14514],{"class":171},[87,85046,56383],{"class":97},[87,85048,85049],{"class":89,"line":33598},[87,85050,80313],{"class":97},[87,85052,85053,85055,85057],{"class":89,"line":33604},[87,85054,80318],{"class":97},[87,85056,80321],{"class":949},[87,85058,32413],{"class":97},[87,85060,85061,85063,85065],{"class":89,"line":33615},[87,85062,80328],{"class":97},[87,85064,80331],{"class":949},[87,85066,32413],{"class":97},[87,85068,85069,85071,85074],{"class":89,"line":33621},[87,85070,80338],{"class":97},[87,85072,85073],{"class":104},"289.9",[87,85075,32413],{"class":97},[87,85077,85078,85080,85082],{"class":89,"line":33641},[87,85079,80348],{"class":97},[87,85081,80351],{"class":949},[87,85083,32413],{"class":97},[87,85085,85086,85089,85091],{"class":89,"line":33647},[87,85087,85088],{"class":97},"        count: ",[87,85090,1176],{"class":104},[87,85092,32413],{"class":97},[87,85094,85095,85098,85101],{"class":89,"line":33658},[87,85096,85097],{"class":97},"        spec: { color: ",[87,85099,85100],{"class":949},"'白色'",[87,85102,56540],{"class":97},[87,85104,85105],{"class":89,"line":33664},[87,85106,78820],{"class":97},[87,85108,85109],{"class":89,"line":33670},[87,85110,80313],{"class":97},[87,85112,85113,85115,85117],{"class":89,"line":33676},[87,85114,80318],{"class":97},[87,85116,80412],{"class":949},[87,85118,32413],{"class":97},[87,85120,85121,85123,85125],{"class":89,"line":33682},[87,85122,80328],{"class":97},[87,85124,80421],{"class":949},[87,85126,32413],{"class":97},[87,85128,85129,85131,85134],{"class":89,"line":33688},[87,85130,80338],{"class":97},[87,85132,85133],{"class":104},"109.8",[87,85135,32413],{"class":97},[87,85137,85138,85140,85142],{"class":89,"line":33694},[87,85139,80348],{"class":97},[87,85141,80439],{"class":949},[87,85143,32413],{"class":97},[87,85145,85146,85148,85150],{"class":89,"line":33700},[87,85147,85088],{"class":97},[87,85149,1170],{"class":104},[87,85151,32413],{"class":97},[87,85153,85154,85157,85159,85161,85163],{"class":89,"line":33720},[87,85155,85156],{"class":97},"        spec: { size: ",[87,85158,82829],{"class":949},[87,85160,56400],{"class":97},[87,85162,82834],{"class":949},[87,85164,56540],{"class":97},[87,85166,85167],{"class":89,"line":33726},[87,85168,78820],{"class":97},[87,85170,85171],{"class":89,"line":33742},[87,85172,80313],{"class":97},[87,85174,85175,85177,85179],{"class":89,"line":33748},[87,85176,80318],{"class":97},[87,85178,80456],{"class":949},[87,85180,32413],{"class":97},[87,85182,85183,85185,85187],{"class":89,"line":33762},[87,85184,80328],{"class":97},[87,85186,80465],{"class":949},[87,85188,32413],{"class":97},[87,85190,85191,85193,85196],{"class":89,"line":33768},[87,85192,80338],{"class":97},[87,85194,85195],{"class":104},"488",[87,85197,32413],{"class":97},[87,85199,85200,85202,85204],{"class":89,"line":33783},[87,85201,80348],{"class":97},[87,85203,80483],{"class":949},[87,85205,32413],{"class":97},[87,85207,85208,85210,85212],{"class":89,"line":33789},[87,85209,85088],{"class":97},[87,85211,1313],{"class":104},[87,85213,32413],{"class":97},[87,85215,85216,85218,85221,85224,85227],{"class":89,"line":33798},[87,85217,85097],{"class":97},[87,85219,85220],{"class":949},"'青色'",[87,85222,85223],{"class":97},", sum: ",[87,85225,85226],{"class":949},"'一大四小'",[87,85228,56540],{"class":97},[87,85230,85231],{"class":89,"line":33804},[87,85232,78820],{"class":97},[87,85234,85235],{"class":89,"line":33813},[87,85236,80313],{"class":97},[87,85238,85239,85241,85243],{"class":89,"line":33819},[87,85240,80318],{"class":97},[87,85242,80500],{"class":949},[87,85244,32413],{"class":97},[87,85246,85247,85249,85251],{"class":89,"line":33825},[87,85248,80328],{"class":97},[87,85250,80509],{"class":949},[87,85252,32413],{"class":97},[87,85254,85255,85257,85260],{"class":89,"line":33834},[87,85256,80338],{"class":97},[87,85258,85259],{"class":104},"139",[87,85261,32413],{"class":97},[87,85263,85264,85266,85268],{"class":89,"line":33840},[87,85265,80348],{"class":97},[87,85267,80527],{"class":949},[87,85269,32413],{"class":97},[87,85271,85272,85274,85276],{"class":89,"line":33851},[87,85273,85088],{"class":97},[87,85275,1313],{"class":104},[87,85277,32413],{"class":97},[87,85279,85280,85282,85285,85287,85290],{"class":89,"line":33857},[87,85281,85156],{"class":97},[87,85283,85284],{"class":949},"'小号'",[87,85286,56400],{"class":97},[87,85288,85289],{"class":949},"'紫色'",[87,85291,56406],{"class":97},[87,85293,85294,85297],{"class":89,"line":33876},[87,85295,85296],{"class":97},"        gift: ",[87,85298,85299],{"class":949},"'50g茶叶,清洗球'\n",[87,85301,85302],{"class":89,"line":33882},[87,85303,53335],{"class":97},[87,85305,85306],{"class":89,"line":33893},[87,85307,54046],{"class":97},[87,85309,85310],{"class":89,"line":33899},[87,85311,85312],{"class":199},"    \u002F\u002F  1.根据数据渲染页面\n",[87,85314,85315,85317,85319,85321,85323,85325,85327,85329,85331,85333,85335,85337],{"class":89,"line":33919},[87,85316,53344],{"class":97},[87,85318,55335],{"class":205},[87,85320,165],{"class":97},[87,85322,80827],{"class":949},[87,85324,75177],{"class":97},[87,85326,946],{"class":171},[87,85328,80974],{"class":97},[87,85330,74972],{"class":205},[87,85332,165],{"class":97},[87,85334,80722],{"class":492},[87,85336,80725],{"class":171},[87,85338,98],{"class":97},[87,85340,85341],{"class":89,"line":33935},[87,85342,85343],{"class":199},"      \u002F\u002F 对象解构\n",[87,85345,85346,85348,85350,85352,85354,85356,85358,85361,85363,85365,85367,85370,85372,85375,85377,85379],{"class":89,"line":33941},[87,85347,59164],{"class":171},[87,85349,503],{"class":97},[87,85351,80746],{"class":104},[87,85353,13385],{"class":97},[87,85355,80736],{"class":104},[87,85357,13385],{"class":97},[87,85359,85360],{"class":104},"count",[87,85362,13385],{"class":97},[87,85364,80741],{"class":104},[87,85366,13385],{"class":97},[87,85368,85369],{"class":104},"spec",[87,85371,13385],{"class":97},[87,85373,85374],{"class":104},"gift",[87,85376,80749],{"class":97},[87,85378,946],{"class":171},[87,85380,80754],{"class":97},[87,85382,85383],{"class":89,"line":33955},[87,85384,85385],{"class":199},"      \u002F\u002F 规格文字模块处理\n",[87,85387,85388,85390,85393,85395,85397,85399,85401,85403,85405,85407],{"class":89,"line":33961},[87,85389,59164],{"class":171},[87,85391,85392],{"class":104}," text",[87,85394,14514],{"class":171},[87,85396,82864],{"class":97},[87,85398,82867],{"class":205},[87,85400,82870],{"class":97},[87,85402,75151],{"class":205},[87,85404,165],{"class":97},[87,85406,82877],{"class":949},[87,85408,1108],{"class":97},[87,85410,85411],{"class":89,"line":33967},[87,85412,85413],{"class":199},"      \u002F\u002F 处理赠品模块\n",[87,85415,85416,85418,85420,85422,85425,85427,85429,85431,85433,85436,85438,85440,85442,85444,85446,85449,85451,85454,85456,85458,85460,85462,85464,85466],{"class":89,"line":33978},[87,85417,59164],{"class":171},[87,85419,74847],{"class":104},[87,85421,14514],{"class":171},[87,85423,85424],{"class":97}," gift ",[87,85426,2077],{"class":171},[87,85428,84038],{"class":97},[87,85430,84041],{"class":205},[87,85432,165],{"class":97},[87,85434,85435],{"class":949},"','",[87,85437,31773],{"class":97},[87,85439,74972],{"class":205},[87,85441,165],{"class":97},[87,85443,80722],{"class":492},[87,85445,80725],{"class":171},[87,85447,85448],{"class":949}," `\u003Cspan class=\"tag\">【赠品】${",[87,85450,80722],{"class":97},[87,85452,85453],{"class":949},"}\u003C\u002Fspan>`",[87,85455,31773],{"class":97},[87,85457,75151],{"class":205},[87,85459,165],{"class":97},[87,85461,75156],{"class":949},[87,85463,14664],{"class":97},[87,85465,1951],{"class":171},[87,85467,71036],{"class":949},[87,85469,85470],{"class":89,"line":33984},[87,85471,85472],{"class":199},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[87,85474,85475,85477,85480,85482,85485,85487,85489,85491,85494,85496,85498,85500,85503,85505,85507],{"class":89,"line":33990},[87,85476,59164],{"class":171},[87,85478,85479],{"class":104}," subtotal",[87,85481,14514],{"class":171},[87,85483,85484],{"class":97}," ((price ",[87,85486,1549],{"class":171},[87,85488,6704],{"class":104},[87,85490,7468],{"class":171},[87,85492,85493],{"class":97}," count) ",[87,85495,1677],{"class":171},[87,85497,6704],{"class":104},[87,85499,31773],{"class":97},[87,85501,85502],{"class":205},"toFixed",[87,85504,165],{"class":97},[87,85506,1176],{"class":104},[87,85508,1108],{"class":97},[87,85510,85511],{"class":89,"line":34000},[87,85512,3355],{"emptyLinePlaceholder":1029},[87,85514,85515,85517],{"class":89,"line":34006},[87,85516,74910],{"class":171},[87,85518,71100],{"class":949},[87,85520,85521],{"class":89,"line":34017},[87,85522,85523],{"class":949},"        \u003Cdiv class=\"item\">\n",[87,85525,85526,85529,85531],{"class":89,"line":34023},[87,85527,85528],{"class":949},"          \u003Cimg src=\"${",[87,85530,80746],{"class":97},[87,85532,80778],{"class":949},[87,85534,85535,85538,85540,85543,85545],{"class":89,"line":34033},[87,85536,85537],{"class":949},"          \u003Cp class=\"name\">${",[87,85539,80736],{"class":97},[87,85541,85542],{"class":949},"}${",[87,85544,2259],{"class":97},[87,85546,80788],{"class":949},[87,85548,85549,85552,85554],{"class":89,"line":34038},[87,85550,85551],{"class":949},"          \u003Cp class=\"spec\">${",[87,85553,599],{"class":97},[87,85555,80788],{"class":949},[87,85557,85558,85561,85563,85565,85567,85569,85571,85573],{"class":89,"line":34044},[87,85559,85560],{"class":949},"          \u003Cp class=\"price\">${",[87,85562,80741],{"class":97},[87,85564,1651],{"class":949},[87,85566,85502],{"class":205},[87,85568,165],{"class":949},[87,85570,1176],{"class":104},[87,85572,1524],{"class":949},[87,85574,80788],{"class":949},[87,85576,85577,85580,85582],{"class":89,"line":34093},[87,85578,85579],{"class":949},"          \u003Cp class=\"count\">x${",[87,85581,85360],{"class":97},[87,85583,80788],{"class":949},[87,85585,85586,85589,85592],{"class":89,"line":34140},[87,85587,85588],{"class":949},"          \u003Cp class=\"sub-total\">${",[87,85590,85591],{"class":97},"subtotal",[87,85593,80788],{"class":949},[87,85595,85596],{"class":89,"line":34145},[87,85597,85598],{"class":949},"        \u003C\u002Fdiv> \n",[87,85600,85601],{"class":89,"line":34151},[87,85602,85603],{"class":949},"             `\n",[87,85605,85606,85609,85611,85613,85615],{"class":89,"line":34170},[87,85607,85608],{"class":97},"    }).",[87,85610,75151],{"class":205},[87,85612,165],{"class":97},[87,85614,75156],{"class":949},[87,85616,1108],{"class":97},[87,85618,85619],{"class":89,"line":34176},[87,85620,85621],{"class":199},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[87,85623,85624,85626,85628,85630,85632,85635,85637,85640,85642,85644,85646,85649,85652,85654,85657,85659,85661,85663,85666,85668,85670,85672,85674],{"class":89,"line":34196},[87,85625,12171],{"class":171},[87,85627,63719],{"class":104},[87,85629,14514],{"class":171},[87,85631,80974],{"class":97},[87,85633,85634],{"class":205},"reduce",[87,85636,3331],{"class":97},[87,85638,85639],{"class":492},"prev",[87,85641,13385],{"class":97},[87,85643,80722],{"class":492},[87,85645,14664],{"class":97},[87,85647,85648],{"class":171},"=>",[87,85650,85651],{"class":97}," prev ",[87,85653,1575],{"class":171},[87,85655,85656],{"class":97}," (item.price ",[87,85658,1549],{"class":171},[87,85660,6704],{"class":104},[87,85662,7468],{"class":171},[87,85664,85665],{"class":97}," item.count) ",[87,85667,1677],{"class":171},[87,85669,6704],{"class":104},[87,85671,13385],{"class":97},[87,85673,111],{"class":104},[87,85675,1108],{"class":97},[87,85677,85678,85680,85682,85684,85687,85689,85691,85694,85696,85698,85700],{"class":89,"line":34202},[87,85679,53344],{"class":97},[87,85681,55335],{"class":205},[87,85683,165],{"class":97},[87,85685,85686],{"class":949},"'.amount'",[87,85688,75177],{"class":97},[87,85690,946],{"class":171},[87,85692,85693],{"class":97}," total.",[87,85695,85502],{"class":205},[87,85697,165],{"class":97},[87,85699,1176],{"class":104},[87,85701,1108],{"class":97},[87,85703,85704,85706,85708],{"class":89,"line":34208},[87,85705,53354],{"class":97},[87,85707,52750],{"class":93},[87,85709,953],{"class":97},[87,85711,85712,85714,85716],{"class":89,"line":34218},[87,85713,963],{"class":97},[87,85715,52737],{"class":93},[87,85717,953],{"class":97},[87,85719,85720],{"class":89,"line":34223},[87,85721,3355],{"emptyLinePlaceholder":1029},[87,85723,85724,85726,85728],{"class":89,"line":34229},[87,85725,963],{"class":97},[87,85727,51581],{"class":93},[87,85729,953],{"class":97},[14,85731,85733],{"id":85732},"_411-编程思想","4.11 编程思想",[44,85735,85737],{"id":85736},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,85739,85740,85743],{},[57,85741,85742],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,85745,85746],{},"调用就可以了",[19,85748,85749],{},[39,85750],{"alt":82,"src":85751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[44,85753,85755],{"id":85754},"_4112-面向对象","4.11.2 面向对象",[19,85757,85758],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,85760,85761],{},[39,85762],{"alt":82,"src":85763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,85765,85766],{},"面向对象的特性：",[26,85768,85769,85772,85775],{},[29,85770,85771],{},"封装性",[29,85773,85774],{},"继承性",[29,85776,85777],{},"多态性",[44,85779,85781],{"id":85780},"_4113-两者比较","4.11.3 两者比较",[19,85783,85784],{},[39,85785],{"alt":82,"src":85786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85788,85790],{"id":85789},"_412-构造函数回顾","4.12 构造函数回顾",[19,85792,85793],{},[39,85794],{"alt":82,"src":85795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,85797,85798],{},[39,85799],{"alt":82,"src":85800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,85802,85803],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,85805,85806],{},[39,85807],{"alt":82,"src":85808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85810,85812],{"id":85811},"_413-原型","4.13 原型",[44,85814,85816],{"id":85815},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,85818,85819],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,85821,85822],{},[39,85823],{"alt":82,"src":85824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,85826,85827],{},[39,85828],{"alt":82,"src":85829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,85831,85832],{},"原型是构造函数的属性，它也是一个对象",[19,85834,85835],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,85837,85838],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[77,85840,85842],{"className":54004,"code":85841,"language":54006,"meta":82,"style":82},"\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",[84,85843,85844,85852,85857,85865,85870,85875,85880,85885,85890,85894,85898,85902,85907,85912,85916,85921,85926,85931,85936,85941,85945,85953],{"__ignoreMap":82},[87,85845,85846,85848,85850],{"class":89,"line":90},[87,85847,938],{"class":97},[87,85849,52737],{"class":93},[87,85851,953],{"class":97},[87,85853,85854],{"class":89,"line":101},[87,85855,85856],{"class":199},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[87,85858,85859,85861,85863],{"class":89,"line":120},[87,85860,53081],{"class":97},[87,85862,52750],{"class":93},[87,85864,953],{"class":97},[87,85866,85867],{"class":89,"line":222},[87,85868,85869],{"class":97},"    function Star(uname, age) {\n",[87,85871,85872],{"class":89,"line":234},[87,85873,85874],{"class":97},"      this.uname = uname,\n",[87,85876,85877],{"class":89,"line":256},[87,85878,85879],{"class":97},"        this.age = age\n",[87,85881,85882],{"class":89,"line":269},[87,85883,85884],{"class":97},"      \u002F\u002F this.sing = function () {\n",[87,85886,85887],{"class":89,"line":463},[87,85888,85889],{"class":97},"      \u002F\u002F   console.log('唱歌')\n",[87,85891,85892],{"class":89,"line":469},[87,85893,3355],{"emptyLinePlaceholder":1029},[87,85895,85896],{"class":89,"line":2287},[87,85897,60973],{"class":97},[87,85899,85900],{"class":89,"line":2568},[87,85901,3142],{"class":97},[87,85903,85904],{"class":89,"line":2573},[87,85905,85906],{"class":97},"    Star.prototype.sing = function () {\n",[87,85908,85909],{"class":89,"line":2579},[87,85910,85911],{"class":97},"      console.log('唱歌')\n",[87,85913,85914],{"class":89,"line":2584},[87,85915,3142],{"class":97},[87,85917,85918],{"class":89,"line":2598},[87,85919,85920],{"class":97},"    \u002F\u002F console.dir(Star.prototype)\n",[87,85922,85923],{"class":89,"line":2603},[87,85924,85925],{"class":97},"    const pink = new Star('pink', 18)\n",[87,85927,85928],{"class":89,"line":2609},[87,85929,85930],{"class":97},"    const red = new Star('red', 20)\n",[87,85932,85933],{"class":89,"line":2630},[87,85934,85935],{"class":97},"    pink.sing()\n",[87,85937,85938],{"class":89,"line":2635},[87,85939,85940],{"class":97},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[87,85942,85943],{"class":89,"line":2649},[87,85944,3355],{"emptyLinePlaceholder":1029},[87,85946,85947,85949,85951],{"class":89,"line":2654},[87,85948,53354],{"class":97},[87,85950,52750],{"class":93},[87,85952,953],{"class":97},[87,85954,85955,85957,85959],{"class":89,"line":2683},[87,85956,963],{"class":97},[87,85958,52737],{"class":93},[87,85960,953],{"class":97},[19,85962,85963],{},[39,85964],{"alt":82,"src":85965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[77,85967,85969],{"className":54004,"code":85968,"language":54006,"meta":82,"style":82},"\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",[84,85970,85971,85979,85987,85992,85997,86002,86007,86011,86016,86021,86026,86030,86035,86039,86043,86048,86052,86060],{"__ignoreMap":82},[87,85972,85973,85975,85977],{"class":89,"line":90},[87,85974,938],{"class":97},[87,85976,52737],{"class":93},[87,85978,953],{"class":97},[87,85980,85981,85983,85985],{"class":89,"line":101},[87,85982,53081],{"class":97},[87,85984,52750],{"class":93},[87,85986,953],{"class":97},[87,85988,85989],{"class":89,"line":120},[87,85990,85991],{"class":97},"    let that\n",[87,85993,85994],{"class":89,"line":222},[87,85995,85996],{"class":97},"    function Star(uname) {\n",[87,85998,85999],{"class":89,"line":234},[87,86000,86001],{"class":97},"      this.uname = uname\n",[87,86003,86004],{"class":89,"line":256},[87,86005,86006],{"class":97},"      that = this\n",[87,86008,86009],{"class":89,"line":269},[87,86010,3142],{"class":97},[87,86012,86013],{"class":89,"line":463},[87,86014,86015],{"class":97},"    \u002F\u002F 实例对象是 ldh\n",[87,86017,86018],{"class":89,"line":469},[87,86019,86020],{"class":97},"    const ldh = new Star('刘德华')\n",[87,86022,86023],{"class":89,"line":2287},[87,86024,86025],{"class":97},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[87,86027,86028],{"class":89,"line":2568},[87,86029,3355],{"emptyLinePlaceholder":1029},[87,86031,86032],{"class":89,"line":2573},[87,86033,86034],{"class":97},"    Star.sing = function () {\n",[87,86036,86037],{"class":89,"line":2579},[87,86038,85911],{"class":97},[87,86040,86041],{"class":89,"line":2584},[87,86042,3142],{"class":97},[87,86044,86045],{"class":89,"line":2598},[87,86046,86047],{"class":97},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[87,86049,86050],{"class":89,"line":2603},[87,86051,3355],{"emptyLinePlaceholder":1029},[87,86053,86054,86056,86058],{"class":89,"line":2609},[87,86055,53354],{"class":97},[87,86057,52750],{"class":93},[87,86059,953],{"class":97},[87,86061,86062,86064,86066],{"class":89,"line":2630},[87,86063,963],{"class":97},[87,86065,52737],{"class":93},[87,86067,953],{"class":97},[19,86069,86070],{},"构造函数的this指向的是实例对象；",[19,86072,86073],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[44,86075,86077],{"id":86076},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,86079,86080],{},[39,86081],{"alt":82,"src":86082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[77,86084,86086],{"className":54004,"code":86085,"language":54006,"meta":82,"style":82},"\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",[84,86087,86088,86096,86104,86109,86114,86119,86124,86129,86134,86139,86144,86149,86154,86158,86163,86168,86173,86178,86182,86187,86192,86197,86202,86206,86211,86216,86221,86226,86230,86235,86239,86247],{"__ignoreMap":82},[87,86089,86090,86092,86094],{"class":89,"line":90},[87,86091,938],{"class":97},[87,86093,52737],{"class":93},[87,86095,953],{"class":97},[87,86097,86098,86100,86102],{"class":89,"line":101},[87,86099,53081],{"class":97},[87,86101,52750],{"class":93},[87,86103,953],{"class":97},[87,86105,86106],{"class":89,"line":120},[87,86107,86108],{"class":97},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[87,86110,86111],{"class":89,"line":222},[87,86112,86113],{"class":97},"    const arr = [1, 2, 3]\n",[87,86115,86116],{"class":89,"line":234},[87,86117,86118],{"class":97},"    \u002F\u002F 自己定义数组的扩展方法\n",[87,86120,86121],{"class":89,"line":256},[87,86122,86123],{"class":97},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[87,86125,86126],{"class":89,"line":269},[87,86127,86128],{"class":97},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[87,86130,86131],{"class":89,"line":463},[87,86132,86133],{"class":97},"    \u002F\u002F ①.最大值\n",[87,86135,86136],{"class":89,"line":469},[87,86137,86138],{"class":97},"    Array.prototype.max = function () {\n",[87,86140,86141],{"class":89,"line":2287},[87,86142,86143],{"class":97},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[87,86145,86146],{"class":89,"line":2568},[87,86147,86148],{"class":97},"      return Math.max(...this)\n",[87,86150,86151],{"class":89,"line":2573},[87,86152,86153],{"class":97},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[87,86155,86156],{"class":89,"line":2579},[87,86157,3142],{"class":97},[87,86159,86160],{"class":89,"line":2584},[87,86161,86162],{"class":97},"    console.log(arr.max())\n",[87,86164,86165],{"class":89,"line":2598},[87,86166,86167],{"class":97},"    \u002F\u002F ②最小值\n",[87,86169,86170],{"class":89,"line":2603},[87,86171,86172],{"class":97},"    Array.prototype.min = function () {\n",[87,86174,86175],{"class":89,"line":2609},[87,86176,86177],{"class":97},"      return Math.min(...this)\n",[87,86179,86180],{"class":89,"line":2630},[87,86181,3142],{"class":97},[87,86183,86184],{"class":89,"line":2635},[87,86185,86186],{"class":97},"    console.log(arr.min())\n",[87,86188,86189],{"class":89,"line":2649},[87,86190,86191],{"class":97},"    \u002F\u002F③求和\n",[87,86193,86194],{"class":89,"line":2654},[87,86195,86196],{"class":97},"    Array.prototype.sum = function () {\n",[87,86198,86199],{"class":89,"line":2683},[87,86200,86201],{"class":97},"      return this.reduce((prev, current) => prev + current, 0)\n",[87,86203,86204],{"class":89,"line":2688},[87,86205,3142],{"class":97},[87,86207,86208],{"class":89,"line":2705},[87,86209,86210],{"class":97},"    console.log(arr.sum())\n",[87,86212,86213],{"class":89,"line":2710},[87,86214,86215],{"class":97},"    \u002F\u002F ③排序\n",[87,86217,86218],{"class":89,"line":2715},[87,86219,86220],{"class":97},"    Array.prototype.rever = function () {\n",[87,86222,86223],{"class":89,"line":2720},[87,86224,86225],{"class":97},"      return this.reverse()\n",[87,86227,86228],{"class":89,"line":2734},[87,86229,3142],{"class":97},[87,86231,86232],{"class":89,"line":2739},[87,86233,86234],{"class":97},"    console.log(arr.rever())\n",[87,86236,86237],{"class":89,"line":3532},[87,86238,3355],{"emptyLinePlaceholder":1029},[87,86240,86241,86243,86245],{"class":89,"line":3546},[87,86242,53354],{"class":97},[87,86244,52750],{"class":93},[87,86246,953],{"class":97},[87,86248,86249,86251,86253],{"class":89,"line":3554},[87,86250,963],{"class":97},[87,86252,52737],{"class":93},[87,86254,953],{"class":97},[19,86256,86257],{},[39,86258],{"alt":82,"src":86259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[44,86261,86263],{"id":86262},"_4133-constructor-属性","4.13.3 constructor 属性",[19,86265,86266],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,86268,86269],{},[39,86270],{"alt":82,"src":86271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[77,86273,86275],{"className":54004,"code":86274,"language":54006,"meta":82,"style":82},"\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",[84,86276,86277,86285,86293,86298,86303,86307,86312,86317,86322,86330],{"__ignoreMap":82},[87,86278,86279,86281,86283],{"class":89,"line":90},[87,86280,938],{"class":97},[87,86282,52737],{"class":93},[87,86284,953],{"class":97},[87,86286,86287,86289,86291],{"class":89,"line":101},[87,86288,53081],{"class":97},[87,86290,52750],{"class":93},[87,86292,953],{"class":97},[87,86294,86295],{"class":89,"line":120},[87,86296,86297],{"class":97},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[87,86299,86300],{"class":89,"line":222},[87,86301,86302],{"class":97},"    function Star() {\n",[87,86304,86305],{"class":89,"line":234},[87,86306,3142],{"class":97},[87,86308,86309],{"class":89,"line":256},[87,86310,86311],{"class":97},"    const ldh = new Star()\n",[87,86313,86314],{"class":89,"line":269},[87,86315,86316],{"class":97},"    console.log(Star.prototype)\n",[87,86318,86319],{"class":89,"line":463},[87,86320,86321],{"class":97},"    console.log(Star.prototype.constructor === Star)\n",[87,86323,86324,86326,86328],{"class":89,"line":469},[87,86325,53354],{"class":97},[87,86327,52750],{"class":93},[87,86329,953],{"class":97},[87,86331,86332,86334,86336],{"class":89,"line":2287},[87,86333,963],{"class":97},[87,86335,52737],{"class":93},[87,86337,953],{"class":97},[19,86339,86340],{},[39,86341],{"alt":82,"src":86342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,86344,86345],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[77,86347,86349],{"className":54004,"code":86348,"language":54006,"meta":82,"style":82},"  \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",[84,86350,86351,86359,86363,86367,86371,86376,86381,86386,86390,86395,86400,86405,86410,86415,86420,86424,86428,86433,86438,86443,86447,86452,86457,86461,86465,86469],{"__ignoreMap":82},[87,86352,86353,86355,86357],{"class":89,"line":90},[87,86354,53081],{"class":97},[87,86356,52750],{"class":93},[87,86358,953],{"class":97},[87,86360,86361],{"class":89,"line":101},[87,86362,86297],{"class":97},[87,86364,86365],{"class":89,"line":120},[87,86366,86302],{"class":97},[87,86368,86369],{"class":89,"line":222},[87,86370,3142],{"class":97},[87,86372,86373],{"class":89,"line":234},[87,86374,86375],{"class":97},"    \u002F\u002F const ldh = new Star()\n",[87,86377,86378],{"class":89,"line":256},[87,86379,86380],{"class":97},"    \u002F\u002F console.log(Star.prototype)\n",[87,86382,86383],{"class":89,"line":269},[87,86384,86385],{"class":97},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[87,86387,86388],{"class":89,"line":463},[87,86389,3355],{"emptyLinePlaceholder":1029},[87,86391,86392],{"class":89,"line":469},[87,86393,86394],{"class":97},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[87,86396,86397],{"class":89,"line":2287},[87,86398,86399],{"class":97},"    \u002F\u002F Star.prototype.sing = function () {\n",[87,86401,86402],{"class":89,"line":2568},[87,86403,86404],{"class":97},"    \u002F\u002F   console.log('唱歌')\n",[87,86406,86407],{"class":89,"line":2573},[87,86408,86409],{"class":97},"    \u002F\u002F }\n",[87,86411,86412],{"class":89,"line":2579},[87,86413,86414],{"class":97},"    \u002F\u002F Star.prototype.dance = function () {\n",[87,86416,86417],{"class":89,"line":2584},[87,86418,86419],{"class":97},"    \u002F\u002F   console.log('跳舞')\n",[87,86421,86422],{"class":89,"line":2598},[87,86423,86409],{"class":97},[87,86425,86426],{"class":89,"line":2603},[87,86427,86316],{"class":97},[87,86429,86430],{"class":89,"line":2609},[87,86431,86432],{"class":97},"    Star.prototype = {\n",[87,86434,86435],{"class":89,"line":2630},[87,86436,86437],{"class":97},"      sing: function () {\n",[87,86439,86440],{"class":89,"line":2635},[87,86441,86442],{"class":97},"        console.log('唱歌')\n",[87,86444,86445],{"class":89,"line":2649},[87,86446,78820],{"class":97},[87,86448,86449],{"class":89,"line":2654},[87,86450,86451],{"class":97},"      dance: function () {\n",[87,86453,86454],{"class":89,"line":2683},[87,86455,86456],{"class":97},"        console.log('跳舞')\n",[87,86458,86459],{"class":89,"line":2688},[87,86460,53335],{"class":97},[87,86462,86463],{"class":89,"line":2705},[87,86464,3142],{"class":97},[87,86466,86467],{"class":89,"line":2710},[87,86468,86316],{"class":97},[87,86470,86471,86473,86475],{"class":89,"line":2715},[87,86472,53354],{"class":97},[87,86474,52750],{"class":93},[87,86476,953],{"class":97},[19,86478,86479],{},"进行输出结果后会发现：",[19,86481,86482],{},[39,86483],{"alt":82,"src":86484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,86486,86487],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,86489,86490],{},"所以，要重新指回创造这个原型对象的构造函数",[77,86492,86494],{"className":72141,"code":86493,"language":72143,"meta":82,"style":82},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[84,86495,86496,86510,86515,86520,86531,86544,86549,86560,86574,86578],{"__ignoreMap":82},[87,86497,86498,86501,86503,86506,86508],{"class":89,"line":90},[87,86499,86500],{"class":104},"Star",[87,86502,1651],{"class":97},[87,86504,86505],{"class":104},"prototype",[87,86507,14514],{"class":171},[87,86509,98],{"class":97},[87,86511,86512],{"class":89,"line":101},[87,86513,86514],{"class":199},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[87,86516,86517],{"class":89,"line":120},[87,86518,86519],{"class":97},"  constructor: Star,\n",[87,86521,86522,86525,86527,86529],{"class":89,"line":222},[87,86523,86524],{"class":205},"  sing",[87,86526,108],{"class":97},[87,86528,55385],{"class":171},[87,86530,55388],{"class":97},[87,86532,86533,86535,86537,86539,86542],{"class":89,"line":234},[87,86534,74681],{"class":97},[87,86536,59183],{"class":205},[87,86538,165],{"class":97},[87,86540,86541],{"class":949},"'唱歌'",[87,86543,1108],{"class":97},[87,86545,86546],{"class":89,"line":256},[87,86547,86548],{"class":97},"   },\n",[87,86550,86551,86554,86556,86558],{"class":89,"line":269},[87,86552,86553],{"class":205},"   dance",[87,86555,108],{"class":97},[87,86557,55385],{"class":171},[87,86559,55388],{"class":97},[87,86561,86562,86565,86567,86569,86572],{"class":89,"line":463},[87,86563,86564],{"class":97},"     console.",[87,86566,59183],{"class":205},[87,86568,165],{"class":97},[87,86570,86571],{"class":949},"'跳舞'",[87,86573,1108],{"class":97},[87,86575,86576],{"class":89,"line":469},[87,86577,5262],{"class":97},[87,86579,86580],{"class":89,"line":2287},[87,86581,123],{"class":97},[19,86583,86584],{},[39,86585],{"alt":82,"src":86586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,86588,86589],{},"总结1：",[19,86591,86592],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,86594,86595],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,86597,86598],{},"constructor指的是他的来源",[19,86600,86601],{},[39,86602],{"alt":82,"src":86603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,86605,86606],{},[39,86607],{"alt":82,"src":86608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,86610,86611],{},"总结2：",[19,86613,86614],{},[39,86615],{"alt":82,"src":86616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,86618,86619],{},[39,86620],{"alt":82,"src":86621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,86623,86624],{},[39,86625],{"alt":82,"src":86626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[44,86628,86630],{"id":86629},"_4134-对象原型","4.13.4 对象原型",[19,86632,86633],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,86635,86636],{},"对象原型就是__proto__这个属性",[19,86638,86639],{},[39,86640],{"alt":82,"src":86641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,86643,86644],{},[39,86645],{"alt":82,"src":86646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,86648,86649],{},[39,86650],{"alt":82,"src":86651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,86653,86654],{},[39,86655],{"alt":82,"src":86656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[77,86658,86660],{"className":54004,"code":86659,"language":54006,"meta":82,"style":82},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[84,86661,86662,86670,86678,86682,86686,86690,86695,86703],{"__ignoreMap":82},[87,86663,86664,86666,86668],{"class":89,"line":90},[87,86665,938],{"class":97},[87,86667,52737],{"class":93},[87,86669,953],{"class":97},[87,86671,86672,86674,86676],{"class":89,"line":101},[87,86673,53081],{"class":97},[87,86675,52750],{"class":93},[87,86677,953],{"class":97},[87,86679,86680],{"class":89,"line":120},[87,86681,86302],{"class":97},[87,86683,86684],{"class":89,"line":222},[87,86685,3142],{"class":97},[87,86687,86688],{"class":89,"line":234},[87,86689,86311],{"class":97},[87,86691,86692],{"class":89,"line":256},[87,86693,86694],{"class":97},"    console.log(ldh)\n",[87,86696,86697,86699,86701],{"class":89,"line":269},[87,86698,53354],{"class":97},[87,86700,52750],{"class":93},[87,86702,953],{"class":97},[87,86704,86705,86707,86709],{"class":89,"line":463},[87,86706,963],{"class":97},[87,86708,52737],{"class":93},[87,86710,953],{"class":97},[19,86712,86713],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,86715,86716],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,86718,86719],{},[39,86720],{"alt":82,"src":86721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,86723,86724],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,86726,86727],{},"对象原型指向原型对象",[19,86729,86730],{},[39,86731],{"alt":82,"src":86732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,86734,86735],{},[39,86736],{"alt":82,"src":86737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,86739,86740],{},[39,86741],{"alt":82,"src":86742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[44,86744,86746],{"id":86745},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,86748,86749],{},[39,86750],{"alt":82,"src":86751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[1055,86753,86754,86757,86760,86763],{},[29,86755,86756],{},"构造函数通过new的形式实例化得到实例对象",[29,86758,86759],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[29,86761,86762],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[29,86764,86765],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,86767,86768],{},[39,86769],{"alt":82,"src":86770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,86772,86773],{},"题目梳理：",[19,86775,86776],{},[39,86777],{"alt":82,"src":86778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[44,86780,86782],{"id":86781},"_4136-原型继承","4.13.6 原型继承",[19,86784,86785],{},[39,86786],{"alt":82,"src":86787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,86789,86790],{},[39,86791],{"alt":82,"src":86792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,86794,86795],{},[39,86796],{"alt":82,"src":86797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,86799,86800],{},[39,86801],{"alt":82,"src":86802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,86804,86805],{},[39,86806],{"alt":82,"src":86807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,86809,86810],{},[39,86811],{"alt":82,"src":86812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,86814,86815],{},[39,86816],{"alt":82,"src":86817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,86819,86820],{},[39,86821],{"alt":82,"src":86822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,86824,86825],{},"回顾：构造函数每次new得到对象都是不同的",[44,86827,86829],{"id":86828},"_4137-原型链","4.13.7 原型链",[19,86831,86832],{},[39,86833],{"alt":82,"src":86834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,86836,86837],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,86839,86840],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86842,86843],{},"大哥是Object",[19,86845,86846],{},[39,86847],{"alt":82,"src":86848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86850,86851],{},[39,86852],{"alt":82,"src":86853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86855,86856],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86858,86859],{},"万物皆对象",[44,86861,86863],{"id":86862},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86865,86866],{},"模态框",[19,86868,86869],{},"以后遇见这个效果直接使用这个就行",[19,86871,86872],{},[39,86873],{"alt":82,"src":86874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86876,86877],{},[39,86878],{"alt":82,"src":86879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86881,86882],{},[39,86883],{"alt":82,"src":86884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86886,86887],{},[39,86888],{"alt":82,"src":86889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86891,86892],{},"补充知识点：",[1055,86894,86895],{},[29,86896,86897],{},"append()",[19,86899,86900],{},[39,86901],{"alt":82,"src":86902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[77,86904,86906],{"className":51579,"code":86905,"language":51581,"meta":82,"style":82},"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",[84,86907,86908,86913,86918,86923,86927,86931,86935,86940,86945,86950,86954],{"__ignoreMap":82},[87,86909,86910],{"class":89,"line":90},[87,86911,86912],{"class":97},"append(param1)\n",[87,86914,86915],{"class":89,"line":101},[87,86916,86917],{"class":97},"append(param1, param2)\n",[87,86919,86920],{"class":89,"line":120},[87,86921,86922],{"class":97},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[87,86924,86925],{"class":89,"line":222},[87,86926,3355],{"emptyLinePlaceholder":1029},[87,86928,86929],{"class":89,"line":234},[87,86930,3355],{"emptyLinePlaceholder":1029},[87,86932,86933],{"class":89,"line":256},[87,86934,3355],{"emptyLinePlaceholder":1029},[87,86936,86937],{"class":89,"line":269},[87,86938,86939],{"class":97},"let div = document.createElement(\"div\");\n",[87,86941,86942],{"class":89,"line":463},[87,86943,86944],{"class":97},"let p = document.createElement(\"p\");\n",[87,86946,86947],{"class":89,"line":469},[87,86948,86949],{"class":97},"div.append(p);\n",[87,86951,86952],{"class":89,"line":2287},[87,86953,3355],{"emptyLinePlaceholder":1029},[87,86955,86956,86959,86961],{"class":89,"line":2568},[87,86957,86958],{"class":97},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[87,86960,19],{"class":93},[87,86962,86963],{"class":97},"> ]\n",[1055,86965,86966],{"start":101},[29,86967,86968],{},"remove()",[19,86970,86971],{},"自己删自己",[19,86973,86974],{},[39,86975],{"alt":82,"src":86976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[77,86978,86980],{"className":51579,"code":86979,"language":51581,"meta":82,"style":82},"\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",[84,86981,86982,86992,87006,87010,87018,87032,87052,87064,87072,87079,87091,87104,87139,87151,87162,87174,87186,87198,87225,87235,87239,87243,87252,87264,87278,87288,87300,87304,87308,87318,87329,87339,87349,87362,87375,87385,87389,87393,87402,87412,87424,87428,87432,87441,87451,87461,87473,87477,87481,87491,87507,87518,87528,87538,87550,87562,87574,87578,87582,87595,87606,87610,87618,87626,87630,87638,87658,87678,87686,87691,87717,87722,87727,87746,87751,87763,87768,87779,87789,87799,87804,87809,87813,87818,87823,87828,87848,87853,87873,87878,87892,87897,87902,87907,87923,87927,87932,87961,87966,87971,87976,87987,87991,87995,87999,88004,88029,88034,88059,88064,88073,88077,88082,88107,88111,88136,88140,88149,88153,88158,88176,88186,88190,88198,88206,88210],{"__ignoreMap":82},[87,86983,86984,86986,86988,86990],{"class":89,"line":90},[87,86985,52243],{"class":97},[87,86987,52246],{"class":93},[87,86989,52249],{"class":205},[87,86991,953],{"class":97},[87,86993,86994,86996,86998,87000,87002,87004],{"class":89,"line":101},[87,86995,938],{"class":97},[87,86997,51581],{"class":93},[87,86999,52260],{"class":205},[87,87001,946],{"class":97},[87,87003,52265],{"class":949},[87,87005,953],{"class":97},[87,87007,87008],{"class":89,"line":120},[87,87009,3355],{"emptyLinePlaceholder":1029},[87,87011,87012,87014,87016],{"class":89,"line":222},[87,87013,938],{"class":97},[87,87015,52278],{"class":93},[87,87017,953],{"class":97},[87,87019,87020,87022,87024,87026,87028,87030],{"class":89,"line":234},[87,87021,53081],{"class":97},[87,87023,52288],{"class":93},[87,87025,52291],{"class":205},[87,87027,946],{"class":97},[87,87029,52296],{"class":949},[87,87031,953],{"class":97},[87,87033,87034,87036,87038,87040,87042,87044,87046,87048,87050],{"class":89,"line":256},[87,87035,53081],{"class":97},[87,87037,52288],{"class":93},[87,87039,15870],{"class":205},[87,87041,946],{"class":97},[87,87043,52335],{"class":949},[87,87045,52315],{"class":205},[87,87047,946],{"class":97},[87,87049,52342],{"class":949},[87,87051,953],{"class":97},[87,87053,87054,87056,87058,87060,87062],{"class":89,"line":269},[87,87055,53081],{"class":97},[87,87057,52351],{"class":93},[87,87059,52354],{"class":97},[87,87061,52351],{"class":93},[87,87063,953],{"class":97},[87,87065,87066,87068,87070],{"class":89,"line":463},[87,87067,53081],{"class":97},[87,87069,1006],{"class":93},[87,87071,953],{"class":97},[87,87073,87074,87077],{"class":89,"line":469},[87,87075,87076],{"class":205},"    .modal",[87,87078,98],{"class":97},[87,87080,87081,87083,87085,87087,87089],{"class":89,"line":2287},[87,87082,55707],{"class":104},[87,87084,108],{"class":97},[87,87086,4927],{"class":104},[87,87088,245],{"class":171},[87,87090,117],{"class":97},[87,87092,87093,87096,87098,87100,87102],{"class":89,"line":2568},[87,87094,87095],{"class":104},"      min-height",[87,87097,108],{"class":97},[87,87099,536],{"class":104},[87,87101,245],{"class":171},[87,87103,117],{"class":97},[87,87105,87106,87108,87110,87112,87114,87116,87118,87120,87122,87124,87126,87128,87130,87132,87134,87137],{"class":89,"line":2573},[87,87107,79677],{"class":104},[87,87109,108],{"class":97},[87,87111,111],{"class":104},[87,87113,577],{"class":104},[87,87115,2993],{"class":104},[87,87117,245],{"class":171},[87,87119,79694],{"class":104},[87,87121,165],{"class":97},[87,87123,111],{"class":104},[87,87125,13385],{"class":97},[87,87127,111],{"class":104},[87,87129,13385],{"class":97},[87,87131,111],{"class":104},[87,87133,13385],{"class":97},[87,87135,87136],{"class":104},"0.1",[87,87138,175],{"class":97},[87,87140,87141,87143,87145,87147,87149],{"class":89,"line":2579},[87,87142,56070],{"class":104},[87,87144,108],{"class":97},[87,87146,1389],{"class":104},[87,87148,245],{"class":171},[87,87150,117],{"class":97},[87,87152,87153,87155,87157,87160],{"class":89,"line":2584},[87,87154,55695],{"class":104},[87,87156,108],{"class":97},[87,87158,87159],{"class":104},"fixed",[87,87161,117],{"class":97},[87,87163,87164,87167,87169,87172],{"class":89,"line":2598},[87,87165,87166],{"class":104},"      z-index",[87,87168,108],{"class":97},[87,87170,87171],{"class":104},"999",[87,87173,117],{"class":97},[87,87175,87176,87178,87180,87182,87184],{"class":89,"line":2603},[87,87177,55774],{"class":104},[87,87179,108],{"class":97},[87,87181,1749],{"class":104},[87,87183,1423],{"class":171},[87,87185,117],{"class":97},[87,87187,87188,87190,87192,87194,87196],{"class":89,"line":2609},[87,87189,55883],{"class":104},[87,87191,108],{"class":97},[87,87193,1749],{"class":104},[87,87195,1423],{"class":171},[87,87197,117],{"class":97},[87,87199,87200,87202,87204,87206,87208,87211,87213,87215,87217,87219,87221,87223],{"class":89,"line":2630},[87,87201,79718],{"class":104},[87,87203,108],{"class":97},[87,87205,79723],{"class":104},[87,87207,165],{"class":97},[87,87209,87210],{"class":104},"-50",[87,87212,1423],{"class":171},[87,87214,13385],{"class":97},[87,87216,87210],{"class":104},[87,87218,1423],{"class":171},[87,87220,13385],{"class":97},[87,87222,111],{"class":104},[87,87224,175],{"class":97},[87,87226,87227,87229,87231,87233],{"class":89,"line":2635},[87,87228,55820],{"class":104},[87,87230,108],{"class":97},[87,87232,61778],{"class":104},[87,87234,117],{"class":97},[87,87236,87237],{"class":89,"line":2649},[87,87238,3142],{"class":97},[87,87240,87241],{"class":89,"line":2654},[87,87242,3355],{"emptyLinePlaceholder":1029},[87,87244,87245,87247,87250],{"class":89,"line":2683},[87,87246,87076],{"class":205},[87,87248,87249],{"class":205}," .header",[87,87251,98],{"class":97},[87,87253,87254,87256,87258,87260,87262],{"class":89,"line":2688},[87,87255,58295],{"class":104},[87,87257,108],{"class":97},[87,87259,1496],{"class":104},[87,87261,245],{"class":171},[87,87263,117],{"class":97},[87,87265,87266,87268,87270,87272,87274,87276],{"class":89,"line":2705},[87,87267,55631],{"class":104},[87,87269,108],{"class":97},[87,87271,111],{"class":104},[87,87273,2993],{"class":104},[87,87275,245],{"class":171},[87,87277,117],{"class":97},[87,87279,87280,87282,87284,87286],{"class":89,"line":2710},[87,87281,55695],{"class":104},[87,87283,108],{"class":97},[87,87285,55700],{"class":104},[87,87287,117],{"class":97},[87,87289,87290,87292,87294,87296,87298],{"class":89,"line":2715},[87,87291,55858],{"class":104},[87,87293,108],{"class":97},[87,87295,1792],{"class":104},[87,87297,245],{"class":171},[87,87299,117],{"class":97},[87,87301,87302],{"class":89,"line":2720},[87,87303,3142],{"class":97},[87,87305,87306],{"class":89,"line":2734},[87,87307,3355],{"emptyLinePlaceholder":1029},[87,87309,87310,87312,87314,87316],{"class":89,"line":2739},[87,87311,87076],{"class":205},[87,87313,87249],{"class":205},[87,87315,3986],{"class":93},[87,87317,98],{"class":97},[87,87319,87320,87323,87325,87327],{"class":89,"line":3532},[87,87321,87322],{"class":104},"      font-style",[87,87324,108],{"class":97},[87,87326,64775],{"class":104},[87,87328,117],{"class":97},[87,87330,87331,87333,87335,87337],{"class":89,"line":3546},[87,87332,58352],{"class":104},[87,87334,108],{"class":97},[87,87336,63005],{"class":104},[87,87338,117],{"class":97},[87,87340,87341,87343,87345,87347],{"class":89,"line":3554},[87,87342,55695],{"class":104},[87,87344,108],{"class":97},[87,87346,55767],{"class":104},[87,87348,117],{"class":97},[87,87350,87351,87354,87356,87358,87360],{"class":89,"line":3559},[87,87352,87353],{"class":104},"      right",[87,87355,108],{"class":97},[87,87357,1668],{"class":104},[87,87359,245],{"class":171},[87,87361,117],{"class":97},[87,87363,87364,87366,87368,87371,87373],{"class":89,"line":3565},[87,87365,55883],{"class":104},[87,87367,108],{"class":97},[87,87369,87370],{"class":104},"-2",[87,87372,245],{"class":171},[87,87374,117],{"class":97},[87,87376,87377,87379,87381,87383],{"class":89,"line":3571},[87,87378,62960],{"class":104},[87,87380,108],{"class":97},[87,87382,62965],{"class":104},[87,87384,117],{"class":97},[87,87386,87387],{"class":89,"line":3576},[87,87388,3142],{"class":97},[87,87390,87391],{"class":89,"line":8898},[87,87392,3355],{"emptyLinePlaceholder":1029},[87,87394,87395,87397,87400],{"class":89,"line":8922},[87,87396,87076],{"class":205},[87,87398,87399],{"class":205}," .body",[87,87401,98],{"class":97},[87,87403,87404,87406,87408,87410],{"class":89,"line":8927},[87,87405,58222],{"class":104},[87,87407,108],{"class":97},[87,87409,318],{"class":104},[87,87411,117],{"class":97},[87,87413,87414,87416,87418,87420,87422],{"class":89,"line":8933},[87,87415,55631],{"class":104},[87,87417,108],{"class":97},[87,87419,242],{"class":104},[87,87421,245],{"class":171},[87,87423,117],{"class":97},[87,87425,87426],{"class":89,"line":8960},[87,87427,3142],{"class":97},[87,87429,87430],{"class":89,"line":8965},[87,87431,3355],{"emptyLinePlaceholder":1029},[87,87433,87434,87436,87439],{"class":89,"line":8971},[87,87435,87076],{"class":205},[87,87437,87438],{"class":205}," .footer",[87,87440,98],{"class":97},[87,87442,87443,87445,87447,87449],{"class":89,"line":8983},[87,87444,55945],{"class":104},[87,87446,108],{"class":97},[87,87448,52420],{"class":104},[87,87450,117],{"class":97},[87,87452,87453,87455,87457,87459],{"class":89,"line":8995},[87,87454,55956],{"class":104},[87,87456,108],{"class":97},[87,87458,52520],{"class":104},[87,87460,117],{"class":97},[87,87462,87463,87465,87467,87469,87471],{"class":89,"line":9007},[87,87464,55631],{"class":104},[87,87466,108],{"class":97},[87,87468,242],{"class":104},[87,87470,245],{"class":171},[87,87472,117],{"class":97},[87,87474,87475],{"class":89,"line":10666},[87,87476,3142],{"class":97},[87,87478,87479],{"class":89,"line":10691},[87,87480,3355],{"emptyLinePlaceholder":1029},[87,87482,87483,87485,87487,87489],{"class":89,"line":10714},[87,87484,87076],{"class":205},[87,87486,87438],{"class":205},[87,87488,2356],{"class":93},[87,87490,98],{"class":97},[87,87492,87493,87495,87497,87499,87501,87503,87505],{"class":89,"line":10738},[87,87494,55631],{"class":104},[87,87496,108],{"class":97},[87,87498,1170],{"class":104},[87,87500,245],{"class":171},[87,87502,3038],{"class":104},[87,87504,245],{"class":171},[87,87506,117],{"class":97},[87,87508,87509,87511,87513,87516],{"class":89,"line":10743},[87,87510,62657],{"class":104},[87,87512,108],{"class":97},[87,87514,87515],{"class":104},"#ccc",[87,87517,117],{"class":97},[87,87519,87520,87522,87524,87526],{"class":89,"line":10748},[87,87521,64904],{"class":104},[87,87523,108],{"class":97},[87,87525,55673],{"class":104},[87,87527,117],{"class":97},[87,87529,87530,87532,87534,87536],{"class":89,"line":10753},[87,87531,58352],{"class":104},[87,87533,108],{"class":97},[87,87535,61778],{"class":104},[87,87537,117],{"class":97},[87,87539,87540,87542,87544,87546,87548],{"class":89,"line":10762},[87,87541,56070],{"class":104},[87,87543,108],{"class":97},[87,87545,1176],{"class":104},[87,87547,245],{"class":171},[87,87549,117],{"class":97},[87,87551,87552,87554,87556,87558,87560],{"class":89,"line":10767},[87,87553,62685],{"class":104},[87,87555,108],{"class":97},[87,87557,242],{"class":104},[87,87559,245],{"class":171},[87,87561,117],{"class":97},[87,87563,87564,87566,87568,87570,87572],{"class":89,"line":10773},[87,87565,55858],{"class":104},[87,87567,108],{"class":97},[87,87569,1642],{"class":104},[87,87571,245],{"class":171},[87,87573,117],{"class":97},[87,87575,87576],{"class":89,"line":10794},[87,87577,3142],{"class":97},[87,87579,87580],{"class":89,"line":10800},[87,87581,3355],{"emptyLinePlaceholder":1029},[87,87583,87584,87586,87588,87590,87593],{"class":89,"line":10814},[87,87585,87076],{"class":205},[87,87587,87438],{"class":205},[87,87589,2356],{"class":93},[87,87591,87592],{"class":205},".submit",[87,87594,98],{"class":97},[87,87596,87597,87599,87601,87604],{"class":89,"line":10820},[87,87598,55820],{"class":104},[87,87600,108],{"class":97},[87,87602,87603],{"class":104},"#369",[87,87605,117],{"class":97},[87,87607,87608],{"class":89,"line":10847},[87,87609,3142],{"class":97},[87,87611,87612,87614,87616],{"class":89,"line":10856},[87,87613,53354],{"class":97},[87,87615,1006],{"class":93},[87,87617,953],{"class":97},[87,87619,87620,87622,87624],{"class":89,"line":10862},[87,87621,963],{"class":97},[87,87623,52278],{"class":93},[87,87625,953],{"class":97},[87,87627,87628],{"class":89,"line":10870},[87,87629,3355],{"emptyLinePlaceholder":1029},[87,87631,87632,87634,87636],{"class":89,"line":10875},[87,87633,938],{"class":97},[87,87635,52737],{"class":93},[87,87637,953],{"class":97},[87,87639,87640,87642,87644,87646,87648,87651,87654,87656],{"class":89,"line":17553},[87,87641,53081],{"class":97},[87,87643,54823],{"class":93},[87,87645,15909],{"class":205},[87,87647,946],{"class":97},[87,87649,87650],{"class":949},"\"delete\"",[87,87652,87653],{"class":97},">删除\u003C\u002F",[87,87655,54823],{"class":93},[87,87657,953],{"class":97},[87,87659,87660,87662,87664,87666,87668,87671,87674,87676],{"class":89,"line":17559},[87,87661,53081],{"class":97},[87,87663,54823],{"class":93},[87,87665,15909],{"class":205},[87,87667,946],{"class":97},[87,87669,87670],{"class":949},"\"login\"",[87,87672,87673],{"class":97},">登录\u003C\u002F",[87,87675,54823],{"class":93},[87,87677,953],{"class":97},[87,87679,87680,87682,87684],{"class":89,"line":17582},[87,87681,53081],{"class":97},[87,87683,52750],{"class":93},[87,87685,953],{"class":97},[87,87687,87688],{"class":89,"line":17588},[87,87689,87690],{"class":199},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[87,87692,87693,87695,87698,87700,87702,87704,87706,87708,87711,87713,87715],{"class":89,"line":17611},[87,87694,71016],{"class":171},[87,87696,87697],{"class":205}," Modal",[87,87699,165],{"class":97},[87,87701,52351],{"class":492},[87,87703,14514],{"class":171},[87,87705,70862],{"class":949},[87,87707,13385],{"class":97},[87,87709,87710],{"class":492},"message",[87,87712,14514],{"class":171},[87,87714,70862],{"class":949},[87,87716,13392],{"class":97},[87,87718,87719],{"class":89,"line":17625},[87,87720,87721],{"class":199},"      \u002F\u002F 创建Model 模态框盒子\n",[87,87723,87724],{"class":89,"line":17645},[87,87725,87726],{"class":199},"      \u002F\u002F 1.1 创建div标签\n",[87,87728,87729,87731,87734,87736,87738,87740,87742,87744],{"class":89,"line":17651},[87,87730,70983],{"class":104},[87,87732,87733],{"class":97},".modalBox ",[87,87735,946],{"class":171},[87,87737,55332],{"class":97},[87,87739,71083],{"class":205},[87,87741,165],{"class":97},[87,87743,82857],{"class":949},[87,87745,1108],{"class":97},[87,87747,87748],{"class":89,"line":17662},[87,87749,87750],{"class":199},"      \u002F\u002F 1.2 给div 添加类名为model\n",[87,87752,87753,87755,87758,87760],{"class":89,"line":17685},[87,87754,70983],{"class":104},[87,87756,87757],{"class":97},".modalBox.className ",[87,87759,946],{"class":171},[87,87761,87762],{"class":949}," 'modal'\n",[87,87764,87765],{"class":89,"line":17707},[87,87766,87767],{"class":199},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[87,87769,87770,87772,87775,87777],{"class":89,"line":17712},[87,87771,70983],{"class":104},[87,87773,87774],{"class":97},".modalBox.innerHTML ",[87,87776,946],{"class":171},[87,87778,71100],{"class":949},[87,87780,87781,87784,87786],{"class":89,"line":17718},[87,87782,87783],{"class":949},"        \u003Cdiv class=\"header\">${",[87,87785,52351],{"class":97},[87,87787,87788],{"class":949},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[87,87790,87791,87794,87796],{"class":89,"line":17732},[87,87792,87793],{"class":949},"        \u003Cdiv class=\"body\">${",[87,87795,87710],{"class":97},[87,87797,87798],{"class":949},"}\u003C\u002Fdiv>\n",[87,87800,87801],{"class":89,"line":17745},[87,87802,87803],{"class":949},"      `\n",[87,87805,87806],{"class":89,"line":17750},[87,87807,87808],{"class":199},"      \u002F\u002F console.log(this.modalBox)\n",[87,87810,87811],{"class":89,"line":17764},[87,87812,3142],{"class":97},[87,87814,87815],{"class":89,"line":17769},[87,87816,87817],{"class":199},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[87,87819,87820],{"class":89,"line":17775},[87,87821,87822],{"class":199},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[87,87824,87825],{"class":89,"line":17780},[87,87826,87827],{"class":199},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[87,87829,87830,87833,87835,87837,87839,87842,87844,87846],{"class":89,"line":17794},[87,87831,87832],{"class":104},"    Modal",[87,87834,1651],{"class":97},[87,87836,86505],{"class":104},[87,87838,1651],{"class":97},[87,87840,87841],{"class":205},"open",[87,87843,14514],{"class":171},[87,87845,59854],{"class":171},[87,87847,55388],{"class":97},[87,87849,87850],{"class":89,"line":17799},[87,87851,87852],{"class":199},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[87,87854,87855,87857,87860,87862,87864,87866,87868,87871],{"class":89,"line":17804},[87,87856,59164],{"class":171},[87,87858,87859],{"class":104}," box",[87,87861,14514],{"class":171},[87,87863,55332],{"class":97},[87,87865,55335],{"class":205},[87,87867,165],{"class":97},[87,87869,87870],{"class":949},"'.modal'",[87,87872,1108],{"class":97},[87,87874,87875],{"class":89,"line":17818},[87,87876,87877],{"class":199},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[87,87879,87880,87883,87885,87888,87890],{"class":89,"line":17830},[87,87881,87882],{"class":97},"      box ",[87,87884,2671],{"class":171},[87,87886,87887],{"class":97}," box.",[87,87889,57942],{"class":205},[87,87891,2931],{"class":97},[87,87893,87894],{"class":89,"line":17835},[87,87895,87896],{"class":199},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[87,87898,87899],{"class":89,"line":17848},[87,87900,87901],{"class":199},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[87,87903,87904],{"class":89,"line":17853},[87,87905,87906],{"class":199},"      \u002F\u002F append可以增加对象\n",[87,87908,87909,87912,87915,87917,87920],{"class":89,"line":17858},[87,87910,87911],{"class":97},"      document.body.",[87,87913,87914],{"class":205},"append",[87,87916,165],{"class":97},[87,87918,87919],{"class":104},"this",[87,87921,87922],{"class":97},".modalBox)\n",[87,87924,87925],{"class":89,"line":17863},[87,87926,3355],{"emptyLinePlaceholder":1029},[87,87928,87929],{"class":89,"line":17876},[87,87930,87931],{"class":199},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[87,87933,87934,87936,87939,87941,87943,87946,87948,87950,87952,87954,87957,87959],{"class":89,"line":17881},[87,87935,70983],{"class":104},[87,87937,87938],{"class":97},".modalBox.",[87,87940,55335],{"class":205},[87,87942,165],{"class":97},[87,87944,87945],{"class":949},"'i'",[87,87947,31773],{"class":97},[87,87949,58749],{"class":205},[87,87951,165],{"class":97},[87,87953,58754],{"class":949},[87,87955,87956],{"class":97},", () ",[87,87958,85648],{"class":171},[87,87960,98],{"class":97},[87,87962,87963],{"class":89,"line":33580},[87,87964,87965],{"class":199},"        \u002F\u002F 这个地方需要用到箭头函数\n",[87,87967,87968],{"class":89,"line":33586},[87,87969,87970],{"class":199},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[87,87972,87973],{"class":89,"line":33592},[87,87974,87975],{"class":199},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[87,87977,87978,87980,87982,87985],{"class":89,"line":33598},[87,87979,65659],{"class":104},[87,87981,1651],{"class":97},[87,87983,87984],{"class":205},"close",[87,87986,2931],{"class":97},[87,87988,87989],{"class":89,"line":33604},[87,87990,65748],{"class":97},[87,87992,87993],{"class":89,"line":33615},[87,87994,3142],{"class":97},[87,87996,87997],{"class":89,"line":33621},[87,87998,3355],{"emptyLinePlaceholder":1029},[87,88000,88001],{"class":89,"line":33641},[87,88002,88003],{"class":199},"    \u002F\u002F 测试一下 点击 删除按钮\n",[87,88005,88006,88008,88010,88012,88015,88017,88019,88021,88023,88025,88027],{"class":89,"line":33647},[87,88007,53344],{"class":97},[87,88009,55335],{"class":205},[87,88011,165],{"class":97},[87,88013,88014],{"class":949},"'#delete'",[87,88016,31773],{"class":97},[87,88018,58749],{"class":205},[87,88020,165],{"class":97},[87,88022,58754],{"class":949},[87,88024,87956],{"class":97},[87,88026,85648],{"class":171},[87,88028,98],{"class":97},[87,88030,88031],{"class":89,"line":33658},[87,88032,88033],{"class":199},"      \u002F\u002F 先调用Model构造函数\n",[87,88035,88036,88038,88041,88043,88045,88047,88049,88052,88054,88057],{"class":89,"line":33664},[87,88037,59164],{"class":171},[87,88039,88040],{"class":104}," del",[87,88042,14514],{"class":171},[87,88044,12528],{"class":171},[87,88046,87697],{"class":205},[87,88048,165],{"class":97},[87,88050,88051],{"class":949},"'温馨的提示'",[87,88053,13385],{"class":97},[87,88055,88056],{"class":949},"'您没有删除权限操作'",[87,88058,1108],{"class":97},[87,88060,88061],{"class":89,"line":33670},[87,88062,88063],{"class":199},"      \u002F\u002F 实例对象调用open方法\n",[87,88065,88066,88069,88071],{"class":89,"line":33676},[87,88067,88068],{"class":97},"      del.",[87,88070,87841],{"class":205},[87,88072,2931],{"class":97},[87,88074,88075],{"class":89,"line":33682},[87,88076,34408],{"class":97},[87,88078,88079],{"class":89,"line":33688},[87,88080,88081],{"class":199},"    \u002F\u002F 测试一下 点击 登录按钮\n",[87,88083,88084,88086,88088,88090,88093,88095,88097,88099,88101,88103,88105],{"class":89,"line":33694},[87,88085,53344],{"class":97},[87,88087,55335],{"class":205},[87,88089,165],{"class":97},[87,88091,88092],{"class":949},"'#login'",[87,88094,31773],{"class":97},[87,88096,58749],{"class":205},[87,88098,165],{"class":97},[87,88100,58754],{"class":949},[87,88102,87956],{"class":97},[87,88104,85648],{"class":171},[87,88106,98],{"class":97},[87,88108,88109],{"class":89,"line":33700},[87,88110,88033],{"class":199},[87,88112,88113,88115,88118,88120,88122,88124,88126,88129,88131,88134],{"class":89,"line":33720},[87,88114,59164],{"class":171},[87,88116,88117],{"class":104}," log",[87,88119,14514],{"class":171},[87,88121,12528],{"class":171},[87,88123,87697],{"class":205},[87,88125,165],{"class":97},[87,88127,88128],{"class":949},"'友情提示'",[87,88130,13385],{"class":97},[87,88132,88133],{"class":949},"'您还没有登录呢'",[87,88135,1108],{"class":97},[87,88137,88138],{"class":89,"line":33726},[87,88139,88063],{"class":199},[87,88141,88142,88145,88147],{"class":89,"line":33742},[87,88143,88144],{"class":97},"      log.",[87,88146,87841],{"class":205},[87,88148,2931],{"class":97},[87,88150,88151],{"class":89,"line":33748},[87,88152,34408],{"class":97},[87,88154,88155],{"class":89,"line":33762},[87,88156,88157],{"class":199},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[87,88159,88160,88162,88164,88166,88168,88170,88172,88174],{"class":89,"line":33768},[87,88161,87832],{"class":104},[87,88163,1651],{"class":97},[87,88165,86505],{"class":104},[87,88167,1651],{"class":97},[87,88169,87984],{"class":205},[87,88171,14514],{"class":171},[87,88173,59854],{"class":171},[87,88175,55388],{"class":97},[87,88177,88178,88180,88182,88184],{"class":89,"line":33783},[87,88179,70983],{"class":104},[87,88181,87938],{"class":97},[87,88183,57942],{"class":205},[87,88185,2931],{"class":97},[87,88187,88188],{"class":89,"line":33789},[87,88189,3142],{"class":97},[87,88191,88192,88194,88196],{"class":89,"line":33798},[87,88193,53354],{"class":97},[87,88195,52750],{"class":93},[87,88197,953],{"class":97},[87,88199,88200,88202,88204],{"class":89,"line":33804},[87,88201,963],{"class":97},[87,88203,52737],{"class":93},[87,88205,953],{"class":97},[87,88207,88208],{"class":89,"line":33813},[87,88209,3355],{"emptyLinePlaceholder":1029},[87,88211,88212,88214,88216],{"class":89,"line":33819},[87,88213,963],{"class":97},[87,88215,51581],{"class":93},[87,88217,953],{"class":97},[19,88219,88220],{},[39,88221],{"alt":82,"src":88222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88224,88226],{"id":88225},"_414-深浅拷贝","4.14 深浅拷贝",[44,88228,88230],{"id":88229},"_4141-浅拷贝","4.14.1 浅拷贝",[19,88232,88233],{},[39,88234],{"alt":82,"src":88235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,88237,88238],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,88240,88241],{},[39,88242],{"alt":82,"src":88243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,88245,88246],{},[39,88247],{"alt":82,"src":88248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,88250,88251],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,88253,88254],{},[39,88255],{"alt":82,"src":88256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,88258,12282],{},[19,88260,88261],{},[39,88262],{"alt":82,"src":88263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[44,88265,88267],{"id":88266},"_4142-深拷贝","4.14.2 深拷贝",[19,88269,88270],{},"深拷贝：拷贝的是对象，不是地址",[19,88272,88273],{},"常用的三种方法：",[1055,88275,88276,88279,88282],{},[29,88277,88278],{},"通过递归实现深拷贝",[29,88280,88281],{},"lodash\u002FcloneDeep",[29,88283,88284],{},"通过JSON.stringify()实现",[49,88286,88288],{"id":88287},"_41421-递归函数","4.14.2.1 递归函数",[19,88290,88291],{},[39,88292],{"alt":82,"src":88293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[1055,88295,88296],{},[29,88297,88298],{},"死递归占溢出：",[77,88300,88302],{"className":54004,"code":88301,"language":54006,"meta":82,"style":82},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[84,88303,88304,88312,88320,88324,88329,88333,88338,88346],{"__ignoreMap":82},[87,88305,88306,88308,88310],{"class":89,"line":90},[87,88307,938],{"class":97},[87,88309,52737],{"class":93},[87,88311,953],{"class":97},[87,88313,88314,88316,88318],{"class":89,"line":101},[87,88315,53081],{"class":97},[87,88317,52750],{"class":93},[87,88319,953],{"class":97},[87,88321,88322],{"class":89,"line":120},[87,88323,78071],{"class":97},[87,88325,88326],{"class":89,"line":222},[87,88327,88328],{"class":97},"      fn()\n",[87,88330,88331],{"class":89,"line":234},[87,88332,3142],{"class":97},[87,88334,88335],{"class":89,"line":256},[87,88336,88337],{"class":97},"    fn()\n",[87,88339,88340,88342,88344],{"class":89,"line":269},[87,88341,53354],{"class":97},[87,88343,52750],{"class":93},[87,88345,953],{"class":97},[87,88347,88348,88350,88352],{"class":89,"line":463},[87,88349,963],{"class":97},[87,88351,52737],{"class":93},[87,88353,953],{"class":97},[1055,88355,88356],{"start":101},[29,88357,88358],{},"递归函数要加判断条件：",[19,88360,88361],{},[39,88362],{"alt":82,"src":88363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[1055,88365,88366],{"start":120},[29,88367,88368],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[77,88370,88372],{"className":51579,"code":88371,"language":51581,"meta":82,"style":82},"\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",[84,88373,88374,88384,88398,88402,88410,88424,88444,88456,88464,88468,88476,88488,88496,88504,88529,88541,88545,88552,88560,88568,88572],{"__ignoreMap":82},[87,88375,88376,88378,88380,88382],{"class":89,"line":90},[87,88377,52243],{"class":97},[87,88379,52246],{"class":93},[87,88381,52249],{"class":205},[87,88383,953],{"class":97},[87,88385,88386,88388,88390,88392,88394,88396],{"class":89,"line":101},[87,88387,938],{"class":97},[87,88389,51581],{"class":93},[87,88391,52260],{"class":205},[87,88393,946],{"class":97},[87,88395,52265],{"class":949},[87,88397,953],{"class":97},[87,88399,88400],{"class":89,"line":120},[87,88401,3355],{"emptyLinePlaceholder":1029},[87,88403,88404,88406,88408],{"class":89,"line":222},[87,88405,938],{"class":97},[87,88407,52278],{"class":93},[87,88409,953],{"class":97},[87,88411,88412,88414,88416,88418,88420,88422],{"class":89,"line":234},[87,88413,53081],{"class":97},[87,88415,52288],{"class":93},[87,88417,52291],{"class":205},[87,88419,946],{"class":97},[87,88421,52296],{"class":949},[87,88423,953],{"class":97},[87,88425,88426,88428,88430,88432,88434,88436,88438,88440,88442],{"class":89,"line":256},[87,88427,53081],{"class":97},[87,88429,52288],{"class":93},[87,88431,15870],{"class":205},[87,88433,946],{"class":97},[87,88435,52335],{"class":949},[87,88437,52315],{"class":205},[87,88439,946],{"class":97},[87,88441,52342],{"class":949},[87,88443,953],{"class":97},[87,88445,88446,88448,88450,88452,88454],{"class":89,"line":269},[87,88447,53081],{"class":97},[87,88449,52351],{"class":93},[87,88451,52354],{"class":97},[87,88453,52351],{"class":93},[87,88455,953],{"class":97},[87,88457,88458,88460,88462],{"class":89,"line":463},[87,88459,963],{"class":97},[87,88461,52278],{"class":93},[87,88463,953],{"class":97},[87,88465,88466],{"class":89,"line":469},[87,88467,3355],{"emptyLinePlaceholder":1029},[87,88469,88470,88472,88474],{"class":89,"line":2287},[87,88471,938],{"class":97},[87,88473,52737],{"class":93},[87,88475,953],{"class":97},[87,88477,88478,88480,88482,88484,88486],{"class":89,"line":2568},[87,88479,53081],{"class":97},[87,88481,94],{"class":93},[87,88483,56250],{"class":97},[87,88485,94],{"class":93},[87,88487,953],{"class":97},[87,88489,88490,88492,88494],{"class":89,"line":2573},[87,88491,53081],{"class":97},[87,88493,52750],{"class":93},[87,88495,953],{"class":97},[87,88497,88498,88500,88502],{"class":89,"line":2579},[87,88499,71016],{"class":171},[87,88501,74701],{"class":205},[87,88503,11803],{"class":97},[87,88505,88506,88508,88510,88512,88514,88516,88518,88520,88522,88524,88527],{"class":89,"line":2584},[87,88507,56707],{"class":97},[87,88509,55335],{"class":205},[87,88511,165],{"class":97},[87,88513,82857],{"class":949},[87,88515,75177],{"class":97},[87,88517,946],{"class":171},[87,88519,12528],{"class":171},[87,88521,74717],{"class":205},[87,88523,18209],{"class":97},[87,88525,88526],{"class":205},"toLocaleString",[87,88528,2931],{"class":97},[87,88530,88531,88534,88537,88539],{"class":89,"line":2598},[87,88532,88533],{"class":205},"      setTimeout",[87,88535,88536],{"class":97},"(getTime, ",[87,88538,7360],{"class":104},[87,88540,1108],{"class":97},[87,88542,88543],{"class":89,"line":2603},[87,88544,3142],{"class":97},[87,88546,88547,88550],{"class":89,"line":2609},[87,88548,88549],{"class":205},"    getTime",[87,88551,2931],{"class":97},[87,88553,88554,88556,88558],{"class":89,"line":2630},[87,88555,53354],{"class":97},[87,88557,52750],{"class":93},[87,88559,953],{"class":97},[87,88561,88562,88564,88566],{"class":89,"line":2635},[87,88563,963],{"class":97},[87,88565,52737],{"class":93},[87,88567,953],{"class":97},[87,88569,88570],{"class":89,"line":2649},[87,88571,3355],{"emptyLinePlaceholder":1029},[87,88573,88574,88576,88578],{"class":89,"line":2654},[87,88575,963],{"class":97},[87,88577,51581],{"class":93},[87,88579,953],{"class":97},[19,88581,88582],{},[39,88583],{"alt":82,"src":88584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[1055,88586,88587],{"start":222},[29,88588,88278],{},[19,88590,88591],{},[39,88592],{"alt":82,"src":88593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,88595,88596],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,88598,40136],{},[19,88600,88601],{},"这个是简易版的递归函数深拷贝",[19,88603,88604],{},"一定要注意先数组再对象，因为万物皆可对象",[77,88606,88608],{"className":51579,"code":88607,"language":51581,"meta":82,"style":82},"\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",[84,88609,88610,88620,88634,88638,88646,88660,88680,88692,88700,88704,88712,88720,88730,88739,88747,88763,88767,88775,88779,88783,88795,88800,88819,88835,88840,88845,88850,88865,88870,88875,88884,88892,88909,88917,88923,88931,88936,88941,88950,88954,88958,88962,88973,88982,88992,89006,89016,89024,89032,89040,89044],{"__ignoreMap":82},[87,88611,88612,88614,88616,88618],{"class":89,"line":90},[87,88613,52243],{"class":97},[87,88615,52246],{"class":93},[87,88617,52249],{"class":205},[87,88619,953],{"class":97},[87,88621,88622,88624,88626,88628,88630,88632],{"class":89,"line":101},[87,88623,938],{"class":97},[87,88625,51581],{"class":93},[87,88627,52260],{"class":205},[87,88629,946],{"class":97},[87,88631,52265],{"class":949},[87,88633,953],{"class":97},[87,88635,88636],{"class":89,"line":120},[87,88637,3355],{"emptyLinePlaceholder":1029},[87,88639,88640,88642,88644],{"class":89,"line":222},[87,88641,938],{"class":97},[87,88643,52278],{"class":93},[87,88645,953],{"class":97},[87,88647,88648,88650,88652,88654,88656,88658],{"class":89,"line":234},[87,88649,53081],{"class":97},[87,88651,52288],{"class":93},[87,88653,52291],{"class":205},[87,88655,946],{"class":97},[87,88657,52296],{"class":949},[87,88659,953],{"class":97},[87,88661,88662,88664,88666,88668,88670,88672,88674,88676,88678],{"class":89,"line":256},[87,88663,53081],{"class":97},[87,88665,52288],{"class":93},[87,88667,15870],{"class":205},[87,88669,946],{"class":97},[87,88671,52335],{"class":949},[87,88673,52315],{"class":205},[87,88675,946],{"class":97},[87,88677,52342],{"class":949},[87,88679,953],{"class":97},[87,88681,88682,88684,88686,88688,88690],{"class":89,"line":269},[87,88683,53081],{"class":97},[87,88685,52351],{"class":93},[87,88687,52354],{"class":97},[87,88689,52351],{"class":93},[87,88691,953],{"class":97},[87,88693,88694,88696,88698],{"class":89,"line":463},[87,88695,963],{"class":97},[87,88697,52278],{"class":93},[87,88699,953],{"class":97},[87,88701,88702],{"class":89,"line":469},[87,88703,3355],{"emptyLinePlaceholder":1029},[87,88705,88706,88708,88710],{"class":89,"line":2287},[87,88707,938],{"class":97},[87,88709,52737],{"class":93},[87,88711,953],{"class":97},[87,88713,88714,88716,88718],{"class":89,"line":2568},[87,88715,53081],{"class":97},[87,88717,52750],{"class":93},[87,88719,953],{"class":97},[87,88721,88722,88724,88726,88728],{"class":89,"line":2573},[87,88723,12171],{"class":171},[87,88725,70903],{"class":104},[87,88727,14514],{"class":171},[87,88729,98],{"class":97},[87,88731,88732,88734,88737],{"class":89,"line":2579},[87,88733,72544],{"class":97},[87,88735,88736],{"class":949},"'pink'",[87,88738,32413],{"class":97},[87,88740,88741,88743,88745],{"class":89,"line":2584},[87,88742,72554],{"class":97},[87,88744,1743],{"class":104},[87,88746,32413],{"class":97},[87,88748,88749,88752,88755,88757,88760],{"class":89,"line":2598},[87,88750,88751],{"class":97},"      hobby: [",[87,88753,88754],{"class":949},"'乒乓球'",[87,88756,13385],{"class":97},[87,88758,88759],{"class":949},"'足球'",[87,88761,88762],{"class":97},"],\n",[87,88764,88765],{"class":89,"line":2603},[87,88766,78800],{"class":97},[87,88768,88769,88772],{"class":89,"line":2609},[87,88770,88771],{"class":97},"        baby: ",[87,88773,88774],{"class":949},"'小pink'\n",[87,88776,88777],{"class":89,"line":2630},[87,88778,53335],{"class":97},[87,88780,88781],{"class":89,"line":2635},[87,88782,3142],{"class":97},[87,88784,88785,88787,88790,88792],{"class":89,"line":2649},[87,88786,12171],{"class":171},[87,88788,88789],{"class":104}," o",[87,88791,14514],{"class":171},[87,88793,88794],{"class":97}," {}\n",[87,88796,88797],{"class":89,"line":2654},[87,88798,88799],{"class":199},"    \u002F\u002F 拷贝函数\n",[87,88801,88802,88804,88807,88809,88812,88814,88817],{"class":89,"line":2683},[87,88803,71016],{"class":171},[87,88805,88806],{"class":205}," deepCopy",[87,88808,165],{"class":97},[87,88810,88811],{"class":492},"newObj",[87,88813,13385],{"class":97},[87,88815,88816],{"class":492},"oldObj",[87,88818,13392],{"class":97},[87,88820,88821,88823,88825,88827,88830,88832],{"class":89,"line":2688},[87,88822,53221],{"class":171},[87,88824,2614],{"class":97},[87,88826,52784],{"class":171},[87,88828,88829],{"class":97}," k ",[87,88831,26990],{"class":171},[87,88833,88834],{"class":97}," oldObj) {\n",[87,88836,88837],{"class":89,"line":2705},[87,88838,88839],{"class":199},"        \u002F\u002F 处理数组的问题\n",[87,88841,88842],{"class":89,"line":2710},[87,88843,88844],{"class":199},"        \u002F\u002F 判断是否属于数组\n",[87,88846,88847],{"class":89,"line":2715},[87,88848,88849],{"class":199},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[87,88851,88852,88854,88857,88860,88863],{"class":89,"line":2720},[87,88853,3452],{"class":171},[87,88855,88856],{"class":97}," (oldObj[k] ",[87,88858,88859],{"class":171},"instanceof",[87,88861,88862],{"class":205}," Array",[87,88864,13392],{"class":97},[87,88866,88867],{"class":89,"line":2734},[87,88868,88869],{"class":199},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[87,88871,88872],{"class":89,"line":2739},[87,88873,88874],{"class":199},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[87,88876,88877,88880,88882],{"class":89,"line":3532},[87,88878,88879],{"class":97},"          newObj[k] ",[87,88881,946],{"class":171},[87,88883,52775],{"class":97},[87,88885,88886,88889],{"class":89,"line":3546},[87,88887,88888],{"class":205},"          deepCopy",[87,88890,88891],{"class":97},"(newObj[k], oldObj[k])\n",[87,88893,88894,88896,88898,88900,88902,88904,88907],{"class":89,"line":3554},[87,88895,81006],{"class":97},[87,88897,2657],{"class":171},[87,88899,2660],{"class":171},[87,88901,88856],{"class":97},[87,88903,88859],{"class":171},[87,88905,88906],{"class":205}," Object",[87,88908,13392],{"class":97},[87,88910,88911,88913,88915],{"class":89,"line":3559},[87,88912,88879],{"class":97},[87,88914,946],{"class":171},[87,88916,88794],{"class":97},[87,88918,88919,88921],{"class":89,"line":3565},[87,88920,88888],{"class":205},[87,88922,88891],{"class":97},[87,88924,88925,88927,88929],{"class":89,"line":3571},[87,88926,81006],{"class":97},[87,88928,2657],{"class":171},[87,88930,98],{"class":97},[87,88932,88933],{"class":89,"line":3576},[87,88934,88935],{"class":199},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[87,88937,88938],{"class":89,"line":8898},[87,88939,88940],{"class":199},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[87,88942,88943,88945,88947],{"class":89,"line":8922},[87,88944,88879],{"class":97},[87,88946,946],{"class":171},[87,88948,88949],{"class":97}," oldObj[k]\n",[87,88951,88952],{"class":89,"line":8927},[87,88953,3484],{"class":97},[87,88955,88956],{"class":89,"line":8933},[87,88957,53335],{"class":97},[87,88959,88960],{"class":89,"line":8960},[87,88961,3142],{"class":97},[87,88963,88964,88967,88970],{"class":89,"line":8965},[87,88965,88966],{"class":205},"    deepCopy",[87,88968,88969],{"class":97},"(o, obj) ",[87,88971,88972],{"class":199},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[87,88974,88975,88977,88979],{"class":89,"line":8971},[87,88976,74681],{"class":97},[87,88978,59183],{"class":205},[87,88980,88981],{"class":97},"(o)\n",[87,88983,88984,88987,88989],{"class":89,"line":8983},[87,88985,88986],{"class":97},"    o.age ",[87,88988,946],{"class":171},[87,88990,88991],{"class":104}," 20\n",[87,88993,88994,88997,88999,89001,89003],{"class":89,"line":8995},[87,88995,88996],{"class":97},"    o.hobby[",[87,88998,111],{"class":104},[87,89000,5396],{"class":97},[87,89002,946],{"class":171},[87,89004,89005],{"class":949}," '篮球'\n",[87,89007,89008,89011,89013],{"class":89,"line":9007},[87,89009,89010],{"class":97},"    o.family ",[87,89012,946],{"class":171},[87,89014,89015],{"class":949}," '老pink'\n",[87,89017,89018,89020,89022],{"class":89,"line":10666},[87,89019,74681],{"class":97},[87,89021,59183],{"class":205},[87,89023,70968],{"class":97},[87,89025,89026,89028,89030],{"class":89,"line":10691},[87,89027,53354],{"class":97},[87,89029,52750],{"class":93},[87,89031,953],{"class":97},[87,89033,89034,89036,89038],{"class":89,"line":10714},[87,89035,963],{"class":97},[87,89037,52737],{"class":93},[87,89039,953],{"class":97},[87,89041,89042],{"class":89,"line":10738},[87,89043,3355],{"emptyLinePlaceholder":1029},[87,89045,89046,89048,89050],{"class":89,"line":10743},[87,89047,963],{"class":97},[87,89049,51581],{"class":93},[87,89051,953],{"class":97},[19,89053,89054],{},[39,89055],{"alt":82,"src":89056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[49,89058,89060,89061],{"id":89059},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[57,89062,89063],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,89065,89066],{},[1334,89067,89068],{"href":89068,"rel":89069},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24812],[19,89071,89072],{},"lodash里边的方法都要加上一个下划线_",[19,89074,89075],{},"_.cloneDeep()",[77,89077,89079],{"className":51579,"code":89078,"language":51581,"meta":82,"style":82},"\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",[84,89080,89081,89091,89105,89109,89117,89131,89151,89163,89171,89175,89183,89188,89207,89215,89225,89233,89241,89253,89257,89263,89267,89271,89287,89295,89304,89312,89320,89328,89332],{"__ignoreMap":82},[87,89082,89083,89085,89087,89089],{"class":89,"line":90},[87,89084,52243],{"class":97},[87,89086,52246],{"class":93},[87,89088,52249],{"class":205},[87,89090,953],{"class":97},[87,89092,89093,89095,89097,89099,89101,89103],{"class":89,"line":101},[87,89094,938],{"class":97},[87,89096,51581],{"class":93},[87,89098,52260],{"class":205},[87,89100,946],{"class":97},[87,89102,52265],{"class":949},[87,89104,953],{"class":97},[87,89106,89107],{"class":89,"line":120},[87,89108,3355],{"emptyLinePlaceholder":1029},[87,89110,89111,89113,89115],{"class":89,"line":222},[87,89112,938],{"class":97},[87,89114,52278],{"class":93},[87,89116,953],{"class":97},[87,89118,89119,89121,89123,89125,89127,89129],{"class":89,"line":234},[87,89120,53081],{"class":97},[87,89122,52288],{"class":93},[87,89124,52291],{"class":205},[87,89126,946],{"class":97},[87,89128,52296],{"class":949},[87,89130,953],{"class":97},[87,89132,89133,89135,89137,89139,89141,89143,89145,89147,89149],{"class":89,"line":256},[87,89134,53081],{"class":97},[87,89136,52288],{"class":93},[87,89138,15870],{"class":205},[87,89140,946],{"class":97},[87,89142,52335],{"class":949},[87,89144,52315],{"class":205},[87,89146,946],{"class":97},[87,89148,52342],{"class":949},[87,89150,953],{"class":97},[87,89152,89153,89155,89157,89159,89161],{"class":89,"line":269},[87,89154,53081],{"class":97},[87,89156,52351],{"class":93},[87,89158,52354],{"class":97},[87,89160,52351],{"class":93},[87,89162,953],{"class":97},[87,89164,89165,89167,89169],{"class":89,"line":463},[87,89166,963],{"class":97},[87,89168,52278],{"class":93},[87,89170,953],{"class":97},[87,89172,89173],{"class":89,"line":469},[87,89174,3355],{"emptyLinePlaceholder":1029},[87,89176,89177,89179,89181],{"class":89,"line":2287},[87,89178,938],{"class":97},[87,89180,52737],{"class":93},[87,89182,953],{"class":97},[87,89184,89185],{"class":89,"line":2568},[87,89186,89187],{"class":199},"  \u003C!-- 先引用这个库 -->\n",[87,89189,89190,89192,89194,89196,89198,89201,89203,89205],{"class":89,"line":2573},[87,89191,53081],{"class":97},[87,89193,52750],{"class":93},[87,89195,56175],{"class":205},[87,89197,946],{"class":97},[87,89199,89200],{"class":949},"\"lodash.min.js\"",[87,89202,56250],{"class":97},[87,89204,52750],{"class":93},[87,89206,953],{"class":97},[87,89208,89209,89211,89213],{"class":89,"line":2579},[87,89210,53081],{"class":97},[87,89212,52750],{"class":93},[87,89214,953],{"class":97},[87,89216,89217,89219,89221,89223],{"class":89,"line":2584},[87,89218,12171],{"class":171},[87,89220,70903],{"class":104},[87,89222,14514],{"class":171},[87,89224,98],{"class":97},[87,89226,89227,89229,89231],{"class":89,"line":2598},[87,89228,72544],{"class":97},[87,89230,88736],{"class":949},[87,89232,32413],{"class":97},[87,89234,89235,89237,89239],{"class":89,"line":2603},[87,89236,72554],{"class":97},[87,89238,1743],{"class":104},[87,89240,32413],{"class":97},[87,89242,89243,89245,89247,89249,89251],{"class":89,"line":2609},[87,89244,88751],{"class":97},[87,89246,88754],{"class":949},[87,89248,13385],{"class":97},[87,89250,88759],{"class":949},[87,89252,88762],{"class":97},[87,89254,89255],{"class":89,"line":2630},[87,89256,78800],{"class":97},[87,89258,89259,89261],{"class":89,"line":2635},[87,89260,88771],{"class":97},[87,89262,88774],{"class":949},[87,89264,89265],{"class":89,"line":2649},[87,89266,53335],{"class":97},[87,89268,89269],{"class":89,"line":2654},[87,89270,3142],{"class":97},[87,89272,89273,89275,89277,89279,89282,89285],{"class":89,"line":2683},[87,89274,12171],{"class":171},[87,89276,88789],{"class":104},[87,89278,14514],{"class":171},[87,89280,89281],{"class":97}," _.",[87,89283,89284],{"class":205},"cloneDeep",[87,89286,70968],{"class":97},[87,89288,89289,89291,89293],{"class":89,"line":2688},[87,89290,74681],{"class":97},[87,89292,59183],{"class":205},[87,89294,88981],{"class":97},[87,89296,89297,89300,89302],{"class":89,"line":2705},[87,89298,89299],{"class":97},"    o.family.baby ",[87,89301,946],{"class":171},[87,89303,89015],{"class":949},[87,89305,89306,89308,89310],{"class":89,"line":2710},[87,89307,74681],{"class":97},[87,89309,59183],{"class":205},[87,89311,70968],{"class":97},[87,89313,89314,89316,89318],{"class":89,"line":2715},[87,89315,53354],{"class":97},[87,89317,52750],{"class":93},[87,89319,953],{"class":97},[87,89321,89322,89324,89326],{"class":89,"line":2720},[87,89323,963],{"class":97},[87,89325,52737],{"class":93},[87,89327,953],{"class":97},[87,89329,89330],{"class":89,"line":2734},[87,89331,3355],{"emptyLinePlaceholder":1029},[87,89333,89334,89336,89338],{"class":89,"line":2739},[87,89335,963],{"class":97},[87,89337,51581],{"class":93},[87,89339,953],{"class":97},[19,89341,89342],{},[39,89343],{"alt":82,"src":89344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[49,89346,89348],{"id":89347},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[77,89350,89352],{"className":51579,"code":89351,"language":51581,"meta":82,"style":82},"\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",[84,89353,89354,89364,89378,89382,89390,89404,89424,89436,89444,89448,89456,89464,89474,89482,89490,89502,89506,89512,89516,89520,89525,89530,89535,89561,89569,89578,89586,89594,89602,89606],{"__ignoreMap":82},[87,89355,89356,89358,89360,89362],{"class":89,"line":90},[87,89357,52243],{"class":97},[87,89359,52246],{"class":93},[87,89361,52249],{"class":205},[87,89363,953],{"class":97},[87,89365,89366,89368,89370,89372,89374,89376],{"class":89,"line":101},[87,89367,938],{"class":97},[87,89369,51581],{"class":93},[87,89371,52260],{"class":205},[87,89373,946],{"class":97},[87,89375,52265],{"class":949},[87,89377,953],{"class":97},[87,89379,89380],{"class":89,"line":120},[87,89381,3355],{"emptyLinePlaceholder":1029},[87,89383,89384,89386,89388],{"class":89,"line":222},[87,89385,938],{"class":97},[87,89387,52278],{"class":93},[87,89389,953],{"class":97},[87,89391,89392,89394,89396,89398,89400,89402],{"class":89,"line":234},[87,89393,53081],{"class":97},[87,89395,52288],{"class":93},[87,89397,52291],{"class":205},[87,89399,946],{"class":97},[87,89401,52296],{"class":949},[87,89403,953],{"class":97},[87,89405,89406,89408,89410,89412,89414,89416,89418,89420,89422],{"class":89,"line":256},[87,89407,53081],{"class":97},[87,89409,52288],{"class":93},[87,89411,15870],{"class":205},[87,89413,946],{"class":97},[87,89415,52335],{"class":949},[87,89417,52315],{"class":205},[87,89419,946],{"class":97},[87,89421,52342],{"class":949},[87,89423,953],{"class":97},[87,89425,89426,89428,89430,89432,89434],{"class":89,"line":269},[87,89427,53081],{"class":97},[87,89429,52351],{"class":93},[87,89431,52354],{"class":97},[87,89433,52351],{"class":93},[87,89435,953],{"class":97},[87,89437,89438,89440,89442],{"class":89,"line":463},[87,89439,963],{"class":97},[87,89441,52278],{"class":93},[87,89443,953],{"class":97},[87,89445,89446],{"class":89,"line":469},[87,89447,3355],{"emptyLinePlaceholder":1029},[87,89449,89450,89452,89454],{"class":89,"line":2287},[87,89451,938],{"class":97},[87,89453,52737],{"class":93},[87,89455,953],{"class":97},[87,89457,89458,89460,89462],{"class":89,"line":2568},[87,89459,53081],{"class":97},[87,89461,52750],{"class":93},[87,89463,953],{"class":97},[87,89465,89466,89468,89470,89472],{"class":89,"line":2573},[87,89467,12171],{"class":171},[87,89469,70903],{"class":104},[87,89471,14514],{"class":171},[87,89473,98],{"class":97},[87,89475,89476,89478,89480],{"class":89,"line":2579},[87,89477,72544],{"class":97},[87,89479,88736],{"class":949},[87,89481,32413],{"class":97},[87,89483,89484,89486,89488],{"class":89,"line":2584},[87,89485,72554],{"class":97},[87,89487,1743],{"class":104},[87,89489,32413],{"class":97},[87,89491,89492,89494,89496,89498,89500],{"class":89,"line":2598},[87,89493,88751],{"class":97},[87,89495,88754],{"class":949},[87,89497,13385],{"class":97},[87,89499,88759],{"class":949},[87,89501,88762],{"class":97},[87,89503,89504],{"class":89,"line":2603},[87,89505,78800],{"class":97},[87,89507,89508,89510],{"class":89,"line":2609},[87,89509,88771],{"class":97},[87,89511,88774],{"class":949},[87,89513,89514],{"class":89,"line":2630},[87,89515,53335],{"class":97},[87,89517,89518],{"class":89,"line":2635},[87,89519,3142],{"class":97},[87,89521,89522],{"class":89,"line":2649},[87,89523,89524],{"class":199},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[87,89526,89527],{"class":89,"line":2654},[87,89528,89529],{"class":199},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[87,89531,89532],{"class":89,"line":2683},[87,89533,89534],{"class":199},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[87,89536,89537,89539,89541,89543,89546,89548,89551,89553,89555,89557,89559],{"class":89,"line":2688},[87,89538,12171],{"class":171},[87,89540,88789],{"class":104},[87,89542,14514],{"class":171},[87,89544,89545],{"class":104}," JSON",[87,89547,1651],{"class":97},[87,89549,89550],{"class":205},"parse",[87,89552,165],{"class":97},[87,89554,72592],{"class":104},[87,89556,1651],{"class":97},[87,89558,72597],{"class":205},[87,89560,72600],{"class":97},[87,89562,89563,89565,89567],{"class":89,"line":2705},[87,89564,74681],{"class":97},[87,89566,59183],{"class":205},[87,89568,88981],{"class":97},[87,89570,89571,89573,89575],{"class":89,"line":2710},[87,89572,89299],{"class":97},[87,89574,946],{"class":171},[87,89576,89577],{"class":949}," '123'\n",[87,89579,89580,89582,89584],{"class":89,"line":2715},[87,89581,74681],{"class":97},[87,89583,59183],{"class":205},[87,89585,70968],{"class":97},[87,89587,89588,89590,89592],{"class":89,"line":2720},[87,89589,53354],{"class":97},[87,89591,52750],{"class":93},[87,89593,953],{"class":97},[87,89595,89596,89598,89600],{"class":89,"line":2734},[87,89597,963],{"class":97},[87,89599,52737],{"class":93},[87,89601,953],{"class":97},[87,89603,89604],{"class":89,"line":2739},[87,89605,3355],{"emptyLinePlaceholder":1029},[87,89607,89608,89610,89612],{"class":89,"line":3532},[87,89609,963],{"class":97},[87,89611,51581],{"class":93},[87,89613,953],{"class":97},[19,89615,89616],{},[39,89617],{"alt":82,"src":89618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,89620,89622],{"id":89621},"_415-异常处理","4.15 异常处理",[1055,89624,89625],{},[29,89626,89627],{},"throw抛异常",[19,89629,89630],{},[39,89631],{"alt":82,"src":89632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[1055,89634,89635],{"start":101},[29,89636,89637],{},"try\u002Fcatch 捕获错误信息",[19,89639,89640],{},[39,89641],{"alt":82,"src":89642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[77,89644,89646],{"className":51579,"code":89645,"language":51581,"meta":82,"style":82},"\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",[84,89647,89648,89658,89672,89676,89684,89698,89718,89730,89738,89742,89750,89762,89770,89779,89786,89791,89810,89819,89830,89835,89845,89850,89855,89860,89877,89881,89886,89893,89905,89909,89921,89925,89929,89934,89939,89946,89954,89962,89966],{"__ignoreMap":82},[87,89649,89650,89652,89654,89656],{"class":89,"line":90},[87,89651,52243],{"class":97},[87,89653,52246],{"class":93},[87,89655,52249],{"class":205},[87,89657,953],{"class":97},[87,89659,89660,89662,89664,89666,89668,89670],{"class":89,"line":101},[87,89661,938],{"class":97},[87,89663,51581],{"class":93},[87,89665,52260],{"class":205},[87,89667,946],{"class":97},[87,89669,52265],{"class":949},[87,89671,953],{"class":97},[87,89673,89674],{"class":89,"line":120},[87,89675,3355],{"emptyLinePlaceholder":1029},[87,89677,89678,89680,89682],{"class":89,"line":222},[87,89679,938],{"class":97},[87,89681,52278],{"class":93},[87,89683,953],{"class":97},[87,89685,89686,89688,89690,89692,89694,89696],{"class":89,"line":234},[87,89687,53081],{"class":97},[87,89689,52288],{"class":93},[87,89691,52291],{"class":205},[87,89693,946],{"class":97},[87,89695,52296],{"class":949},[87,89697,953],{"class":97},[87,89699,89700,89702,89704,89706,89708,89710,89712,89714,89716],{"class":89,"line":256},[87,89701,53081],{"class":97},[87,89703,52288],{"class":93},[87,89705,15870],{"class":205},[87,89707,946],{"class":97},[87,89709,52335],{"class":949},[87,89711,52315],{"class":205},[87,89713,946],{"class":97},[87,89715,52342],{"class":949},[87,89717,953],{"class":97},[87,89719,89720,89722,89724,89726,89728],{"class":89,"line":269},[87,89721,53081],{"class":97},[87,89723,52351],{"class":93},[87,89725,52354],{"class":97},[87,89727,52351],{"class":93},[87,89729,953],{"class":97},[87,89731,89732,89734,89736],{"class":89,"line":463},[87,89733,963],{"class":97},[87,89735,52278],{"class":93},[87,89737,953],{"class":97},[87,89739,89740],{"class":89,"line":469},[87,89741,3355],{"emptyLinePlaceholder":1029},[87,89743,89744,89746,89748],{"class":89,"line":2287},[87,89745,938],{"class":97},[87,89747,52737],{"class":93},[87,89749,953],{"class":97},[87,89751,89752,89754,89756,89758,89760],{"class":89,"line":2568},[87,89753,53081],{"class":97},[87,89755,19],{"class":93},[87,89757,54430],{"class":97},[87,89759,19],{"class":93},[87,89761,953],{"class":97},[87,89763,89764,89766,89768],{"class":89,"line":2573},[87,89765,53081],{"class":97},[87,89767,52750],{"class":93},[87,89769,953],{"class":97},[87,89771,89772,89774,89777],{"class":89,"line":2579},[87,89773,71016],{"class":171},[87,89775,89776],{"class":205}," fn",[87,89778,11803],{"class":97},[87,89780,89781,89784],{"class":89,"line":2584},[87,89782,89783],{"class":171},"      try",[87,89785,98],{"class":97},[87,89787,89788],{"class":89,"line":2598},[87,89789,89790],{"class":199},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[87,89792,89793,89795,89797,89799,89801,89803,89805,89808],{"class":89,"line":2603},[87,89794,62206],{"class":171},[87,89796,7775],{"class":104},[87,89798,14514],{"class":171},[87,89800,55332],{"class":97},[87,89802,55335],{"class":205},[87,89804,165],{"class":97},[87,89806,89807],{"class":949},"'.p'",[87,89809,1108],{"class":97},[87,89811,89812,89815,89817],{"class":89,"line":2609},[87,89813,89814],{"class":97},"        p.style.color ",[87,89816,946],{"class":171},[87,89818,67983],{"class":949},[87,89820,89821,89824,89827],{"class":89,"line":2630},[87,89822,89823],{"class":97},"      } ",[87,89825,89826],{"class":171},"catch",[87,89828,89829],{"class":97}," (err) {\n",[87,89831,89832],{"class":89,"line":2635},[87,89833,89834],{"class":199},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[87,89836,89837,89840,89842],{"class":89,"line":2649},[87,89838,89839],{"class":97},"        console.",[87,89841,59183],{"class":205},[87,89843,89844],{"class":97},"(err.message)\n",[87,89846,89847],{"class":89,"line":2654},[87,89848,89849],{"class":199},"        \u002F\u002F 想要中断程序，需要加return\n",[87,89851,89852],{"class":89,"line":2683},[87,89853,89854],{"class":199},"        \u002F\u002F return\n",[87,89856,89857],{"class":89,"line":2688},[87,89858,89859],{"class":199},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[87,89861,89862,89865,89867,89870,89872,89875],{"class":89,"line":2705},[87,89863,89864],{"class":171},"        throw",[87,89866,12528],{"class":171},[87,89868,89869],{"class":205}," Error",[87,89871,165],{"class":97},[87,89873,89874],{"class":949},"'你看看，选择器错误了吧'",[87,89876,1108],{"class":97},[87,89878,89879],{"class":89,"line":2710},[87,89880,53335],{"class":97},[87,89882,89883],{"class":89,"line":2715},[87,89884,89885],{"class":199},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[87,89887,89888,89891],{"class":89,"line":2720},[87,89889,89890],{"class":171},"      finally",[87,89892,98],{"class":97},[87,89894,89895,89898,89900,89903],{"class":89,"line":2734},[87,89896,89897],{"class":205},"        alert",[87,89899,165],{"class":97},[87,89901,89902],{"class":949},"'弹出对话框'",[87,89904,1108],{"class":97},[87,89906,89907],{"class":89,"line":2739},[87,89908,53335],{"class":97},[87,89910,89911,89913,89915,89917,89919],{"class":89,"line":3532},[87,89912,59180],{"class":97},[87,89914,59183],{"class":205},[87,89916,165],{"class":97},[87,89918,1566],{"class":104},[87,89920,1108],{"class":97},[87,89922,89923],{"class":89,"line":3546},[87,89924,3355],{"emptyLinePlaceholder":1029},[87,89926,89927],{"class":89,"line":3554},[87,89928,3142],{"class":97},[87,89930,89931],{"class":89,"line":3559},[87,89932,89933],{"class":199},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[87,89935,89936],{"class":89,"line":3565},[87,89937,89938],{"class":199},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[87,89940,89941,89944],{"class":89,"line":3571},[87,89942,89943],{"class":205},"    fn",[87,89945,2931],{"class":97},[87,89947,89948,89950,89952],{"class":89,"line":3576},[87,89949,53354],{"class":97},[87,89951,52750],{"class":93},[87,89953,953],{"class":97},[87,89955,89956,89958,89960],{"class":89,"line":8898},[87,89957,963],{"class":97},[87,89959,52737],{"class":93},[87,89961,953],{"class":97},[87,89963,89964],{"class":89,"line":8922},[87,89965,3355],{"emptyLinePlaceholder":1029},[87,89967,89968,89970,89972],{"class":89,"line":8927},[87,89969,963],{"class":97},[87,89971,51581],{"class":93},[87,89973,953],{"class":97},[19,89975,89976],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[1055,89978,89979],{"start":120},[29,89980,89981],{},"debugger",[19,89983,89984],{},[39,89985],{"alt":82,"src":89986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89988,89989],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89991,89993],{"id":89992},"_416-处理this","4.16 处理this",[44,89995,89997],{"id":89996},"_4161-this的指向","4.16.1 this的指向",[1055,89999,90000],{},[29,90001,90002],{},"普通函数的this",[19,90004,90005],{},[39,90006],{"alt":82,"src":90007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[1055,90009,90010],{"start":101},[29,90011,90012],{},"箭头函数的this",[19,90014,90015],{},[39,90016],{"alt":82,"src":90017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,90019,90020],{},[39,90021],{"alt":82,"src":90022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,90024,90025],{},[39,90026],{"alt":82,"src":90027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[44,90029,90031],{"id":90030},"_4162-this的改变","4.16.2 this的改变",[19,90033,90034],{},"call() apply() bind()",[1055,90036,90037],{},[29,90038,90039],{},"call()",[19,90041,90042],{},[39,90043],{"alt":82,"src":90044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,90046,90047],{},"两个作用：①调用函数；②改变this指向",[77,90049,90051],{"className":54004,"code":90050,"language":54006,"meta":82,"style":82},"\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",[84,90052,90053,90061,90069,90073,90078,90082,90087,90092,90097,90101,90106,90114],{"__ignoreMap":82},[87,90054,90055,90057,90059],{"class":89,"line":90},[87,90056,938],{"class":97},[87,90058,52737],{"class":93},[87,90060,953],{"class":97},[87,90062,90063,90065,90067],{"class":89,"line":101},[87,90064,53081],{"class":97},[87,90066,52750],{"class":93},[87,90068,953],{"class":97},[87,90070,90071],{"class":89,"line":120},[87,90072,72451],{"class":97},[87,90074,90075],{"class":89,"line":222},[87,90076,90077],{"class":97},"      uname: 'pink'\n",[87,90079,90080],{"class":89,"line":234},[87,90081,3142],{"class":97},[87,90083,90084],{"class":89,"line":256},[87,90085,90086],{"class":97},"    function fn(x, y) {\n",[87,90088,90089],{"class":89,"line":269},[87,90090,90091],{"class":97},"      console.log(this)  \u002F\u002Fwindow\n",[87,90093,90094],{"class":89,"line":463},[87,90095,90096],{"class":97},"      console.log(x + y)\n",[87,90098,90099],{"class":89,"line":469},[87,90100,3142],{"class":97},[87,90102,90103],{"class":89,"line":2287},[87,90104,90105],{"class":97},"    fn.call(obj, 1, 2)\n",[87,90107,90108,90110,90112],{"class":89,"line":2568},[87,90109,53354],{"class":97},[87,90111,52750],{"class":93},[87,90113,953],{"class":97},[87,90115,90116,90118,90120],{"class":89,"line":2573},[87,90117,963],{"class":97},[87,90119,52737],{"class":93},[87,90121,953],{"class":97},[19,90123,90124],{},[39,90125],{"alt":82,"src":90126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[1055,90128,90129],{"start":101},[29,90130,90131],{},"apply()",[19,90133,90134],{},[39,90135],{"alt":82,"src":90136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,90138,90047],{},[19,90140,90141],{},"call传递的是普通参数，而apply必须传递的是数组",[77,90143,90145],{"className":51579,"code":90144,"language":51581,"meta":82,"style":82},"\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",[84,90146,90147,90157,90171,90175,90183,90197,90217,90229,90237,90241,90249,90257,90267,90274,90278,90283,90299,90311,90325,90329,90334,90353,90358,90362,90367,90372,90380,90385,90407,90412,90428,90444,90456,90460,90465,90484,90492,90500,90504],{"__ignoreMap":82},[87,90148,90149,90151,90153,90155],{"class":89,"line":90},[87,90150,52243],{"class":97},[87,90152,52246],{"class":93},[87,90154,52249],{"class":205},[87,90156,953],{"class":97},[87,90158,90159,90161,90163,90165,90167,90169],{"class":89,"line":101},[87,90160,938],{"class":97},[87,90162,51581],{"class":93},[87,90164,52260],{"class":205},[87,90166,946],{"class":97},[87,90168,52265],{"class":949},[87,90170,953],{"class":97},[87,90172,90173],{"class":89,"line":120},[87,90174,3355],{"emptyLinePlaceholder":1029},[87,90176,90177,90179,90181],{"class":89,"line":222},[87,90178,938],{"class":97},[87,90180,52278],{"class":93},[87,90182,953],{"class":97},[87,90184,90185,90187,90189,90191,90193,90195],{"class":89,"line":234},[87,90186,53081],{"class":97},[87,90188,52288],{"class":93},[87,90190,52291],{"class":205},[87,90192,946],{"class":97},[87,90194,52296],{"class":949},[87,90196,953],{"class":97},[87,90198,90199,90201,90203,90205,90207,90209,90211,90213,90215],{"class":89,"line":256},[87,90200,53081],{"class":97},[87,90202,52288],{"class":93},[87,90204,15870],{"class":205},[87,90206,946],{"class":97},[87,90208,52335],{"class":949},[87,90210,52315],{"class":205},[87,90212,946],{"class":97},[87,90214,52342],{"class":949},[87,90216,953],{"class":97},[87,90218,90219,90221,90223,90225,90227],{"class":89,"line":269},[87,90220,53081],{"class":97},[87,90222,52351],{"class":93},[87,90224,52354],{"class":97},[87,90226,52351],{"class":93},[87,90228,953],{"class":97},[87,90230,90231,90233,90235],{"class":89,"line":463},[87,90232,963],{"class":97},[87,90234,52278],{"class":93},[87,90236,953],{"class":97},[87,90238,90239],{"class":89,"line":469},[87,90240,3355],{"emptyLinePlaceholder":1029},[87,90242,90243,90245,90247],{"class":89,"line":2287},[87,90244,938],{"class":97},[87,90246,52737],{"class":93},[87,90248,953],{"class":97},[87,90250,90251,90253,90255],{"class":89,"line":2568},[87,90252,53081],{"class":97},[87,90254,52750],{"class":93},[87,90256,953],{"class":97},[87,90258,90259,90261,90263,90265],{"class":89,"line":2573},[87,90260,12171],{"class":171},[87,90262,70903],{"class":104},[87,90264,14514],{"class":171},[87,90266,98],{"class":97},[87,90268,90269,90271],{"class":89,"line":2579},[87,90270,72554],{"class":97},[87,90272,90273],{"class":104},"18\n",[87,90275,90276],{"class":89,"line":2584},[87,90277,3142],{"class":97},[87,90279,90280],{"class":89,"line":2598},[87,90281,90282],{"class":199},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[87,90284,90285,90287,90289,90291,90293,90295,90297],{"class":89,"line":2603},[87,90286,71016],{"class":171},[87,90288,89776],{"class":205},[87,90290,165],{"class":97},[87,90292,1912],{"class":492},[87,90294,13385],{"class":97},[87,90296,1937],{"class":492},[87,90298,13392],{"class":97},[87,90300,90301,90303,90305,90307,90309],{"class":89,"line":2609},[87,90302,59180],{"class":97},[87,90304,59183],{"class":205},[87,90306,165],{"class":97},[87,90308,87919],{"class":104},[87,90310,1108],{"class":97},[87,90312,90313,90315,90317,90320,90322],{"class":89,"line":2630},[87,90314,59180],{"class":97},[87,90316,59183],{"class":205},[87,90318,90319],{"class":97},"(x ",[87,90321,1575],{"class":171},[87,90323,90324],{"class":97}," y)\n",[87,90326,90327],{"class":89,"line":2635},[87,90328,3142],{"class":97},[87,90330,90331],{"class":89,"line":2649},[87,90332,90333],{"class":199},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[87,90335,90336,90339,90342,90345,90347,90349,90351],{"class":89,"line":2654},[87,90337,90338],{"class":97},"    fn.",[87,90340,90341],{"class":205},"apply",[87,90343,90344],{"class":97},"(obj, [",[87,90346,1313],{"class":104},[87,90348,13385],{"class":97},[87,90350,1176],{"class":104},[87,90352,5610],{"class":97},[87,90354,90355],{"class":89,"line":2683},[87,90356,90357],{"class":199},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[87,90359,90360],{"class":89,"line":2688},[87,90361,3355],{"emptyLinePlaceholder":1029},[87,90363,90364],{"class":89,"line":2705},[87,90365,90366],{"class":199},"    \u002F\u002F 使用场景：求数组最大值\n",[87,90368,90369],{"class":89,"line":2710},[87,90370,90371],{"class":199},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[87,90373,90374,90377],{"class":89,"line":2715},[87,90375,90376],{"class":199},"    \u002F\u002F console.log(max)",[87,90378,90379],{"class":199},"   \u002F\u002F3\n",[87,90381,90382],{"class":89,"line":2720},[87,90383,90384],{"class":199},"    \u002F\u002F 指向空或者Math都是可以的\n",[87,90386,90387,90389,90391,90393,90395,90397,90399,90401,90403,90405],{"class":89,"line":2734},[87,90388,12171],{"class":171},[87,90390,58631],{"class":104},[87,90392,14514],{"class":171},[87,90394,53163],{"class":97},[87,90396,536],{"class":104},[87,90398,13385],{"class":97},[87,90400,1598],{"class":104},[87,90402,13385],{"class":97},[87,90404,1628],{"class":104},[87,90406,34193],{"class":97},[87,90408,90409],{"class":89,"line":2739},[87,90410,90411],{"class":199},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[87,90413,90414,90416,90418,90420,90423,90425],{"class":89,"line":3532},[87,90415,12171],{"class":171},[87,90417,6901],{"class":104},[87,90419,14514],{"class":171},[87,90421,90422],{"class":97}," Math.max.",[87,90424,90341],{"class":205},[87,90426,90427],{"class":97},"(Math, arr)\n",[87,90429,90430,90432,90435,90437,90440,90442],{"class":89,"line":3546},[87,90431,12171],{"class":171},[87,90433,90434],{"class":104}," min",[87,90436,14514],{"class":171},[87,90438,90439],{"class":97}," Math.min.",[87,90441,90341],{"class":205},[87,90443,90427],{"class":97},[87,90445,90446,90448,90450,90453],{"class":89,"line":3554},[87,90447,74681],{"class":97},[87,90449,59183],{"class":205},[87,90451,90452],{"class":97},"(max, min)     ",[87,90454,90455],{"class":199},"\u002F\u002F100,4\n",[87,90457,90458],{"class":89,"line":3559},[87,90459,3355],{"emptyLinePlaceholder":1029},[87,90461,90462],{"class":89,"line":3565},[87,90463,90464],{"class":199},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[87,90466,90467,90469,90471,90474,90476,90478,90481],{"class":89,"line":3571},[87,90468,74681],{"class":97},[87,90470,59183],{"class":205},[87,90472,90473],{"class":97},"(Max.",[87,90475,6965],{"class":205},[87,90477,165],{"class":97},[87,90479,90480],{"class":171},"...",[87,90482,90483],{"class":97},"arr))\n",[87,90485,90486,90488,90490],{"class":89,"line":3576},[87,90487,53354],{"class":97},[87,90489,52750],{"class":93},[87,90491,953],{"class":97},[87,90493,90494,90496,90498],{"class":89,"line":8898},[87,90495,963],{"class":97},[87,90497,52737],{"class":93},[87,90499,953],{"class":97},[87,90501,90502],{"class":89,"line":8922},[87,90503,3355],{"emptyLinePlaceholder":1029},[87,90505,90506,90508,90510],{"class":89,"line":8927},[87,90507,963],{"class":97},[87,90509,51581],{"class":93},[87,90511,953],{"class":97},[19,90513,90514],{},[39,90515],{"alt":82,"src":90516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[1055,90518,90519],{"start":120},[29,90520,90521],{},"bind()",[19,90523,90524],{},[39,90525],{"alt":82,"src":90526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,90528,90529],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,90531,90532],{},"bind的语法跟call很相似",[77,90534,90536],{"className":54004,"code":90535,"language":54006,"meta":82,"style":82},"\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",[84,90537,90538,90546,90554,90558,90563,90567,90571,90576,90580,90585,90590,90595,90600,90605,90610,90615,90619,90627],{"__ignoreMap":82},[87,90539,90540,90542,90544],{"class":89,"line":90},[87,90541,938],{"class":97},[87,90543,52737],{"class":93},[87,90545,953],{"class":97},[87,90547,90548,90550,90552],{"class":89,"line":101},[87,90549,53081],{"class":97},[87,90551,52750],{"class":93},[87,90553,953],{"class":97},[87,90555,90556],{"class":89,"line":120},[87,90557,72451],{"class":97},[87,90559,90560],{"class":89,"line":222},[87,90561,90562],{"class":97},"      age: 18\n",[87,90564,90565],{"class":89,"line":234},[87,90566,3142],{"class":97},[87,90568,90569],{"class":89,"line":256},[87,90570,78071],{"class":97},[87,90572,90573],{"class":89,"line":269},[87,90574,90575],{"class":97},"      console.log(this)\n",[87,90577,90578],{"class":89,"line":463},[87,90579,3142],{"class":97},[87,90581,90582],{"class":89,"line":469},[87,90583,90584],{"class":97},"    \u002F\u002F 1.bind 不会调用函数\n",[87,90586,90587],{"class":89,"line":2287},[87,90588,90589],{"class":97},"    \u002F\u002F 2.bind能改变this的指向\n",[87,90591,90592],{"class":89,"line":2568},[87,90593,90594],{"class":97},"    fn.bind()\n",[87,90596,90597],{"class":89,"line":2573},[87,90598,90599],{"class":97},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[87,90601,90602],{"class":89,"line":2579},[87,90603,90604],{"class":97},"    const fun = fn.bind(obj)\n",[87,90606,90607],{"class":89,"line":2584},[87,90608,90609],{"class":97},"    \u002F\u002F console.log(fun)\n",[87,90611,90612],{"class":89,"line":2598},[87,90613,90614],{"class":97},"    \u002F\u002F 调用,查看this的指向\n",[87,90616,90617],{"class":89,"line":2603},[87,90618,53588],{"class":97},[87,90620,90621,90623,90625],{"class":89,"line":2609},[87,90622,53354],{"class":97},[87,90624,52750],{"class":93},[87,90626,953],{"class":97},[87,90628,90629,90631,90633],{"class":89,"line":2630},[87,90630,963],{"class":97},[87,90632,52737],{"class":93},[87,90634,953],{"class":97},[19,90636,90637],{},[39,90638],{"alt":82,"src":90639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[1055,90641,90642],{"start":222},[29,90643,90644],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[77,90646,90648],{"className":54004,"code":90647,"language":54006,"meta":82,"style":82},"\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",[84,90649,90650,90658,90671,90679,90684,90688,90693,90698,90703,90708,90713,90718,90723,90728,90732,90740],{"__ignoreMap":82},[87,90651,90652,90654,90656],{"class":89,"line":90},[87,90653,938],{"class":97},[87,90655,52737],{"class":93},[87,90657,953],{"class":97},[87,90659,90660,90662,90664,90667,90669],{"class":89,"line":101},[87,90661,53081],{"class":97},[87,90663,54823],{"class":93},[87,90665,90666],{"class":97},">禁用\u003C\u002F",[87,90668,54823],{"class":93},[87,90670,953],{"class":97},[87,90672,90673,90675,90677],{"class":89,"line":120},[87,90674,53081],{"class":97},[87,90676,52750],{"class":93},[87,90678,953],{"class":97},[87,90680,90681],{"class":89,"line":222},[87,90682,90683],{"class":97},"    const btn = document.querySelector('button')\n",[87,90685,90686],{"class":89,"line":234},[87,90687,59952],{"class":97},[87,90689,90690],{"class":89,"line":256},[87,90691,90692],{"class":97},"      this.disabled = true\n",[87,90694,90695],{"class":89,"line":269},[87,90696,90697],{"class":97},"      \u002F\u002F 定时器是window进行调用的\n",[87,90699,90700],{"class":89,"line":463},[87,90701,90702],{"class":97},"      setTimeout(function () {\n",[87,90704,90705],{"class":89,"line":469},[87,90706,90707],{"class":97},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[87,90709,90710],{"class":89,"line":2287},[87,90711,90712],{"class":97},"        this.disabled = false\n",[87,90714,90715],{"class":89,"line":2568},[87,90716,90717],{"class":97},"      }.bind(this), 2000)\n",[87,90719,90720],{"class":89,"line":2573},[87,90721,90722],{"class":97},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[87,90724,90725],{"class":89,"line":2579},[87,90726,90727],{"class":97},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[87,90729,90730],{"class":89,"line":2584},[87,90731,34408],{"class":97},[87,90733,90734,90736,90738],{"class":89,"line":2598},[87,90735,53354],{"class":97},[87,90737,52750],{"class":93},[87,90739,953],{"class":97},[87,90741,90742,90744,90746],{"class":89,"line":2603},[87,90743,963],{"class":97},[87,90745,52737],{"class":93},[87,90747,953],{"class":97},[1055,90749,90750],{"start":234},[29,90751,22901],{},[19,90753,90754],{},[39,90755],{"alt":82,"src":90756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90758,90760],{"id":90759},"_417-性能优化","4.17 性能优化",[44,90762,90764],{"id":90763},"_4171-防抖","4.17.1 防抖",[19,90766,90767],{},[39,90768],{"alt":82,"src":90769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,90771,90772],{},[57,90773,90774],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,90776,90777],{},"防抖实现方式：",[26,90779,90780],{},[29,90781,90782],{},"lodash 提供了防抖处理",[19,90784,90785],{},"_.debounce(func,[wait=0],[options={}])",[19,90787,90788],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[77,90790,90792],{"className":51579,"code":90791,"language":51581,"meta":82,"style":82},"\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",[84,90793,90794,90804,90818,90822,90830,90844,90864,90876,90884,90890,90900,90912,90924,90935,90947,90957,90967,90980,90984,90992,91000,91004,91012,91030,91048,91056,91075,91085,91094,91105,91110,91114,91119,91124,91129,91154,91162,91170,91174],{"__ignoreMap":82},[87,90795,90796,90798,90800,90802],{"class":89,"line":90},[87,90797,52243],{"class":97},[87,90799,52246],{"class":93},[87,90801,52249],{"class":205},[87,90803,953],{"class":97},[87,90805,90806,90808,90810,90812,90814,90816],{"class":89,"line":101},[87,90807,938],{"class":97},[87,90809,51581],{"class":93},[87,90811,52260],{"class":205},[87,90813,946],{"class":97},[87,90815,52265],{"class":949},[87,90817,953],{"class":97},[87,90819,90820],{"class":89,"line":120},[87,90821,3355],{"emptyLinePlaceholder":1029},[87,90823,90824,90826,90828],{"class":89,"line":222},[87,90825,938],{"class":97},[87,90827,52278],{"class":93},[87,90829,953],{"class":97},[87,90831,90832,90834,90836,90838,90840,90842],{"class":89,"line":234},[87,90833,53081],{"class":97},[87,90835,52288],{"class":93},[87,90837,52291],{"class":205},[87,90839,946],{"class":97},[87,90841,52296],{"class":949},[87,90843,953],{"class":97},[87,90845,90846,90848,90850,90852,90854,90856,90858,90860,90862],{"class":89,"line":256},[87,90847,53081],{"class":97},[87,90849,52288],{"class":93},[87,90851,15870],{"class":205},[87,90853,946],{"class":97},[87,90855,52335],{"class":949},[87,90857,52315],{"class":205},[87,90859,946],{"class":97},[87,90861,52342],{"class":949},[87,90863,953],{"class":97},[87,90865,90866,90868,90870,90872,90874],{"class":89,"line":269},[87,90867,53081],{"class":97},[87,90869,52351],{"class":93},[87,90871,52354],{"class":97},[87,90873,52351],{"class":93},[87,90875,953],{"class":97},[87,90877,90878,90880,90882],{"class":89,"line":463},[87,90879,53081],{"class":97},[87,90881,1006],{"class":93},[87,90883,953],{"class":97},[87,90885,90886,90888],{"class":89,"line":469},[87,90887,55688],{"class":205},[87,90889,98],{"class":97},[87,90891,90892,90894,90896,90898],{"class":89,"line":2287},[87,90893,73524],{"class":104},[87,90895,108],{"class":97},[87,90897,61441],{"class":104},[87,90899,117],{"class":97},[87,90901,90902,90904,90906,90908,90910],{"class":89,"line":2568},[87,90903,55707],{"class":104},[87,90905,108],{"class":97},[87,90907,2678],{"class":104},[87,90909,245],{"class":171},[87,90911,117],{"class":97},[87,90913,90914,90916,90918,90920,90922],{"class":89,"line":2573},[87,90915,55721],{"class":104},[87,90917,108],{"class":97},[87,90919,2678],{"class":104},[87,90921,245],{"class":171},[87,90923,117],{"class":97},[87,90925,90926,90928,90930,90933],{"class":89,"line":2579},[87,90927,55820],{"class":104},[87,90929,108],{"class":97},[87,90931,90932],{"class":104},"gray",[87,90934,117],{"class":97},[87,90936,90937,90939,90941,90943,90945],{"class":89,"line":2584},[87,90938,55858],{"class":104},[87,90940,108],{"class":97},[87,90942,1917],{"class":104},[87,90944,245],{"class":171},[87,90946,117],{"class":97},[87,90948,90949,90951,90953,90955],{"class":89,"line":2598},[87,90950,58352],{"class":104},[87,90952,108],{"class":97},[87,90954,61778],{"class":104},[87,90956,117],{"class":97},[87,90958,90959,90961,90963,90965],{"class":89,"line":2603},[87,90960,58222],{"class":104},[87,90962,108],{"class":97},[87,90964,318],{"class":104},[87,90966,117],{"class":97},[87,90968,90969,90972,90974,90976,90978],{"class":89,"line":2609},[87,90970,90971],{"class":104},"      padding-top",[87,90973,108],{"class":97},[87,90975,1414],{"class":104},[87,90977,245],{"class":171},[87,90979,117],{"class":97},[87,90981,90982],{"class":89,"line":2630},[87,90983,3142],{"class":97},[87,90985,90986,90988,90990],{"class":89,"line":2635},[87,90987,53354],{"class":97},[87,90989,1006],{"class":93},[87,90991,953],{"class":97},[87,90993,90994,90996,90998],{"class":89,"line":2649},[87,90995,963],{"class":97},[87,90997,52278],{"class":93},[87,90999,953],{"class":97},[87,91001,91002],{"class":89,"line":2654},[87,91003,3355],{"emptyLinePlaceholder":1029},[87,91005,91006,91008,91010],{"class":89,"line":2683},[87,91007,938],{"class":97},[87,91009,52737],{"class":93},[87,91011,953],{"class":97},[87,91013,91014,91016,91018,91020,91022,91024,91026,91028],{"class":89,"line":2688},[87,91015,53081],{"class":97},[87,91017,94],{"class":93},[87,91019,943],{"class":205},[87,91021,946],{"class":97},[87,91023,54427],{"class":949},[87,91025,56250],{"class":97},[87,91027,94],{"class":93},[87,91029,953],{"class":97},[87,91031,91032,91034,91036,91038,91040,91042,91044,91046],{"class":89,"line":2705},[87,91033,53081],{"class":97},[87,91035,52750],{"class":93},[87,91037,56175],{"class":205},[87,91039,946],{"class":97},[87,91041,89200],{"class":949},[87,91043,56250],{"class":97},[87,91045,52750],{"class":93},[87,91047,953],{"class":97},[87,91049,91050,91052,91054],{"class":89,"line":2710},[87,91051,53081],{"class":97},[87,91053,52750],{"class":93},[87,91055,953],{"class":97},[87,91057,91058,91060,91062,91064,91066,91068,91070,91073],{"class":89,"line":2715},[87,91059,12171],{"class":171},[87,91061,87859],{"class":104},[87,91063,14514],{"class":171},[87,91065,55332],{"class":97},[87,91067,55335],{"class":205},[87,91069,165],{"class":97},[87,91071,91072],{"class":949},"'.box'",[87,91074,1108],{"class":97},[87,91076,91077,91079,91081,91083],{"class":89,"line":2720},[87,91078,53156],{"class":171},[87,91080,10388],{"class":97},[87,91082,946],{"class":171},[87,91084,48280],{"class":104},[87,91086,91087,91089,91092],{"class":89,"line":2734},[87,91088,71016],{"class":171},[87,91090,91091],{"class":205}," mouseMove",[87,91093,11803],{"class":97},[87,91095,91096,91099,91101,91103],{"class":89,"line":2739},[87,91097,91098],{"class":97},"      box.innerHTML ",[87,91100,946],{"class":171},[87,91102,3986],{"class":97},[87,91104,3657],{"class":171},[87,91106,91107],{"class":89,"line":3532},[87,91108,91109],{"class":199},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[87,91111,91112],{"class":89,"line":3546},[87,91113,3142],{"class":97},[87,91115,91116],{"class":89,"line":3554},[87,91117,91118],{"class":199},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[87,91120,91121],{"class":89,"line":3559},[87,91122,91123],{"class":199},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[87,91125,91126],{"class":89,"line":3565},[87,91127,91128],{"class":199},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[87,91130,91131,91134,91136,91138,91141,91144,91147,91150,91152],{"class":89,"line":3571},[87,91132,91133],{"class":97},"    box.",[87,91135,58749],{"class":205},[87,91137,165],{"class":97},[87,91139,91140],{"class":949},"'mousemove'",[87,91142,91143],{"class":97},", _.",[87,91145,91146],{"class":205},"debounce",[87,91148,91149],{"class":97},"(mouseMove, ",[87,91151,839],{"class":104},[87,91153,31444],{"class":97},[87,91155,91156,91158,91160],{"class":89,"line":3576},[87,91157,53354],{"class":97},[87,91159,52750],{"class":93},[87,91161,953],{"class":97},[87,91163,91164,91166,91168],{"class":89,"line":8898},[87,91165,963],{"class":97},[87,91167,52737],{"class":93},[87,91169,953],{"class":97},[87,91171,91172],{"class":89,"line":8922},[87,91173,3355],{"emptyLinePlaceholder":1029},[87,91175,91176,91178,91180],{"class":89,"line":8927},[87,91177,963],{"class":97},[87,91179,51581],{"class":93},[87,91181,953],{"class":97},[26,91183,91184],{},[29,91185,91186],{},"手写一个防抖函数来处理",[19,91188,91189],{},"防抖的核心就是利用定时器来实现的：",[19,91191,91192],{},"①声明一个定时器变量",[19,91194,91195],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,91197,91198],{},"③如果没有定时器则开启定时器，记得存到变量里面",[77,91200,91202],{"className":51579,"code":91201,"language":51581,"meta":82,"style":82},"\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",[84,91203,91204,91214,91228,91232,91240,91254,91274,91286,91294,91300,91310,91322,91334,91344,91356,91366,91376,91388,91392,91400,91408,91412,91420,91438,91456,91464,91482,91492,91500,91510,91514,91518,91522,91527,91532,91537,91542,91547,91552,91570,91577,91582,91590,91595,91608,91624,91634,91639,91643,91647,91667,91671,91676,91681,91686,91691,91699,91707,91711],{"__ignoreMap":82},[87,91205,91206,91208,91210,91212],{"class":89,"line":90},[87,91207,52243],{"class":97},[87,91209,52246],{"class":93},[87,91211,52249],{"class":205},[87,91213,953],{"class":97},[87,91215,91216,91218,91220,91222,91224,91226],{"class":89,"line":101},[87,91217,938],{"class":97},[87,91219,51581],{"class":93},[87,91221,52260],{"class":205},[87,91223,946],{"class":97},[87,91225,52265],{"class":949},[87,91227,953],{"class":97},[87,91229,91230],{"class":89,"line":120},[87,91231,3355],{"emptyLinePlaceholder":1029},[87,91233,91234,91236,91238],{"class":89,"line":222},[87,91235,938],{"class":97},[87,91237,52278],{"class":93},[87,91239,953],{"class":97},[87,91241,91242,91244,91246,91248,91250,91252],{"class":89,"line":234},[87,91243,53081],{"class":97},[87,91245,52288],{"class":93},[87,91247,52291],{"class":205},[87,91249,946],{"class":97},[87,91251,52296],{"class":949},[87,91253,953],{"class":97},[87,91255,91256,91258,91260,91262,91264,91266,91268,91270,91272],{"class":89,"line":256},[87,91257,53081],{"class":97},[87,91259,52288],{"class":93},[87,91261,15870],{"class":205},[87,91263,946],{"class":97},[87,91265,52335],{"class":949},[87,91267,52315],{"class":205},[87,91269,946],{"class":97},[87,91271,52342],{"class":949},[87,91273,953],{"class":97},[87,91275,91276,91278,91280,91282,91284],{"class":89,"line":269},[87,91277,53081],{"class":97},[87,91279,52351],{"class":93},[87,91281,52354],{"class":97},[87,91283,52351],{"class":93},[87,91285,953],{"class":97},[87,91287,91288,91290,91292],{"class":89,"line":463},[87,91289,53081],{"class":97},[87,91291,1006],{"class":93},[87,91293,953],{"class":97},[87,91295,91296,91298],{"class":89,"line":469},[87,91297,55688],{"class":205},[87,91299,98],{"class":97},[87,91301,91302,91304,91306,91308],{"class":89,"line":2287},[87,91303,73524],{"class":104},[87,91305,108],{"class":97},[87,91307,61441],{"class":104},[87,91309,117],{"class":97},[87,91311,91312,91314,91316,91318,91320],{"class":89,"line":2568},[87,91313,55707],{"class":104},[87,91315,108],{"class":97},[87,91317,2678],{"class":104},[87,91319,245],{"class":171},[87,91321,117],{"class":97},[87,91323,91324,91326,91328,91330,91332],{"class":89,"line":2573},[87,91325,55721],{"class":104},[87,91327,108],{"class":97},[87,91329,2678],{"class":104},[87,91331,245],{"class":171},[87,91333,117],{"class":97},[87,91335,91336,91338,91340,91342],{"class":89,"line":2579},[87,91337,55820],{"class":104},[87,91339,108],{"class":97},[87,91341,90932],{"class":104},[87,91343,117],{"class":97},[87,91345,91346,91348,91350,91352,91354],{"class":89,"line":2584},[87,91347,55858],{"class":104},[87,91349,108],{"class":97},[87,91351,1917],{"class":104},[87,91353,245],{"class":171},[87,91355,117],{"class":97},[87,91357,91358,91360,91362,91364],{"class":89,"line":2598},[87,91359,58352],{"class":104},[87,91361,108],{"class":97},[87,91363,61778],{"class":104},[87,91365,117],{"class":97},[87,91367,91368,91370,91372,91374],{"class":89,"line":2603},[87,91369,58222],{"class":104},[87,91371,108],{"class":97},[87,91373,318],{"class":104},[87,91375,117],{"class":97},[87,91377,91378,91380,91382,91384,91386],{"class":89,"line":2609},[87,91379,90971],{"class":104},[87,91381,108],{"class":97},[87,91383,1414],{"class":104},[87,91385,245],{"class":171},[87,91387,117],{"class":97},[87,91389,91390],{"class":89,"line":2630},[87,91391,3142],{"class":97},[87,91393,91394,91396,91398],{"class":89,"line":2635},[87,91395,53354],{"class":97},[87,91397,1006],{"class":93},[87,91399,953],{"class":97},[87,91401,91402,91404,91406],{"class":89,"line":2649},[87,91403,963],{"class":97},[87,91405,52278],{"class":93},[87,91407,953],{"class":97},[87,91409,91410],{"class":89,"line":2654},[87,91411,3355],{"emptyLinePlaceholder":1029},[87,91413,91414,91416,91418],{"class":89,"line":2683},[87,91415,938],{"class":97},[87,91417,52737],{"class":93},[87,91419,953],{"class":97},[87,91421,91422,91424,91426,91428,91430,91432,91434,91436],{"class":89,"line":2688},[87,91423,53081],{"class":97},[87,91425,94],{"class":93},[87,91427,943],{"class":205},[87,91429,946],{"class":97},[87,91431,54427],{"class":949},[87,91433,56250],{"class":97},[87,91435,94],{"class":93},[87,91437,953],{"class":97},[87,91439,91440,91442,91444,91446,91448,91450,91452,91454],{"class":89,"line":2705},[87,91441,53081],{"class":97},[87,91443,52750],{"class":93},[87,91445,56175],{"class":205},[87,91447,946],{"class":97},[87,91449,89200],{"class":949},[87,91451,56250],{"class":97},[87,91453,52750],{"class":93},[87,91455,953],{"class":97},[87,91457,91458,91460,91462],{"class":89,"line":2710},[87,91459,53081],{"class":97},[87,91461,52750],{"class":93},[87,91463,953],{"class":97},[87,91465,91466,91468,91470,91472,91474,91476,91478,91480],{"class":89,"line":2715},[87,91467,12171],{"class":171},[87,91469,87859],{"class":104},[87,91471,14514],{"class":171},[87,91473,55332],{"class":97},[87,91475,55335],{"class":205},[87,91477,165],{"class":97},[87,91479,91072],{"class":949},[87,91481,1108],{"class":97},[87,91483,91484,91486,91488,91490],{"class":89,"line":2720},[87,91485,53156],{"class":171},[87,91487,10388],{"class":97},[87,91489,946],{"class":171},[87,91491,48280],{"class":104},[87,91493,91494,91496,91498],{"class":89,"line":2734},[87,91495,71016],{"class":171},[87,91497,91091],{"class":205},[87,91499,11803],{"class":97},[87,91501,91502,91504,91506,91508],{"class":89,"line":2739},[87,91503,91098],{"class":97},[87,91505,946],{"class":171},[87,91507,3986],{"class":97},[87,91509,3657],{"class":171},[87,91511,91512],{"class":89,"line":3532},[87,91513,91109],{"class":199},[87,91515,91516],{"class":89,"line":3546},[87,91517,3142],{"class":97},[87,91519,91520],{"class":89,"line":3554},[87,91521,91118],{"class":199},[87,91523,91524],{"class":89,"line":3559},[87,91525,91526],{"class":199},"    \u002F\u002F 手写防抖函数\n",[87,91528,91529],{"class":89,"line":3565},[87,91530,91531],{"class":199},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[87,91533,91534],{"class":89,"line":3571},[87,91535,91536],{"class":199},"    \u002F\u002F 1.声明定时器变量\n",[87,91538,91539],{"class":89,"line":3576},[87,91540,91541],{"class":199},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[87,91543,91544],{"class":89,"line":8898},[87,91545,91546],{"class":199},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[87,91548,91549],{"class":89,"line":8922},[87,91550,91551],{"class":199},"    \u002F\u002F 4.定时器里面写函数调用\n",[87,91553,91554,91556,91559,91561,91564,91566,91568],{"class":89,"line":8927},[87,91555,71016],{"class":171},[87,91557,91558],{"class":205}," debounce",[87,91560,165],{"class":97},[87,91562,91563],{"class":492},"fn",[87,91565,13385],{"class":97},[87,91567,1812],{"class":492},[87,91569,13392],{"class":97},[87,91571,91572,91574],{"class":89,"line":8933},[87,91573,80699],{"class":171},[87,91575,91576],{"class":97}," timer\n",[87,91578,91579],{"class":89,"line":8960},[87,91580,91581],{"class":199},"      \u002F\u002F return 返回一个匿名函数\n",[87,91583,91584,91586,91588],{"class":89,"line":8965},[87,91585,74910],{"class":171},[87,91587,59854],{"class":171},[87,91589,55388],{"class":97},[87,91591,91592],{"class":89,"line":8971},[87,91593,91594],{"class":199},"        \u002F\u002F 这里边写第二三四步\n",[87,91596,91597,91599,91602,91605],{"class":89,"line":8983},[87,91598,3452],{"class":171},[87,91600,91601],{"class":97}," (timer) ",[87,91603,91604],{"class":205},"clearTimeout",[87,91606,91607],{"class":97},"(timer)\n",[87,91609,91610,91613,91615,91618,91620,91622],{"class":89,"line":8995},[87,91611,91612],{"class":97},"        timer ",[87,91614,946],{"class":171},[87,91616,91617],{"class":205}," setTimeout",[87,91619,165],{"class":97},[87,91621,55385],{"class":171},[87,91623,55388],{"class":97},[87,91625,91626,91629,91631],{"class":89,"line":9007},[87,91627,91628],{"class":205},"          fn",[87,91630,14000],{"class":97},[87,91632,91633],{"class":199},"\u002F\u002F加小括号调用fn }, t)\n",[87,91635,91636],{"class":89,"line":10666},[87,91637,91638],{"class":97},"        }, t)\n",[87,91640,91641],{"class":89,"line":10691},[87,91642,53335],{"class":97},[87,91644,91645],{"class":89,"line":10714},[87,91646,3142],{"class":97},[87,91648,91649,91651,91653,91655,91657,91659,91661,91663,91665],{"class":89,"line":10738},[87,91650,91133],{"class":97},[87,91652,58749],{"class":205},[87,91654,165],{"class":97},[87,91656,91140],{"class":949},[87,91658,13385],{"class":97},[87,91660,91146],{"class":205},[87,91662,91149],{"class":97},[87,91664,839],{"class":104},[87,91666,31444],{"class":97},[87,91668,91669],{"class":89,"line":10743},[87,91670,3355],{"emptyLinePlaceholder":1029},[87,91672,91673],{"class":89,"line":10748},[87,91674,91675],{"class":199},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[87,91677,91678],{"class":89,"line":10753},[87,91679,91680],{"class":199},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[87,91682,91683],{"class":89,"line":10762},[87,91684,91685],{"class":199},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[87,91687,91688],{"class":89,"line":10767},[87,91689,91690],{"class":199},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[87,91692,91693,91695,91697],{"class":89,"line":10773},[87,91694,53354],{"class":97},[87,91696,52750],{"class":93},[87,91698,953],{"class":97},[87,91700,91701,91703,91705],{"class":89,"line":10794},[87,91702,963],{"class":97},[87,91704,52737],{"class":93},[87,91706,953],{"class":97},[87,91708,91709],{"class":89,"line":10800},[87,91710,3355],{"emptyLinePlaceholder":1029},[87,91712,91713,91715,91717],{"class":89,"line":10814},[87,91714,963],{"class":97},[87,91716,51581],{"class":93},[87,91718,953],{"class":97},[44,91720,91722],{"id":91721},"_4172-节流","4.17.2 节流",[19,91724,91725],{},[39,91726],{"alt":82,"src":91727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,91729,91730],{},[39,91731],{"alt":82,"src":91732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,91734,91735],{},[57,91736,91737],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,91739,91740],{},"实现方式：",[26,91742,91743],{},[29,91744,91745],{},"lodash 提供的节流函数来处理",[19,91747,91748],{},"_.throttle(func,[wait=0],[options=])",[19,91750,91751],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[77,91753,91755],{"className":51579,"code":91754,"language":51581,"meta":82,"style":82},"\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",[84,91756,91757,91767,91781,91785,91793,91807,91827,91839,91847,91853,91863,91875,91887,91897,91909,91919,91929,91941,91945,91953,91961,91965,91973,91991,92009,92017,92035,92045,92053,92063,92067,92071,92075,92080,92085,92106,92114,92122,92126],{"__ignoreMap":82},[87,91758,91759,91761,91763,91765],{"class":89,"line":90},[87,91760,52243],{"class":97},[87,91762,52246],{"class":93},[87,91764,52249],{"class":205},[87,91766,953],{"class":97},[87,91768,91769,91771,91773,91775,91777,91779],{"class":89,"line":101},[87,91770,938],{"class":97},[87,91772,51581],{"class":93},[87,91774,52260],{"class":205},[87,91776,946],{"class":97},[87,91778,52265],{"class":949},[87,91780,953],{"class":97},[87,91782,91783],{"class":89,"line":120},[87,91784,3355],{"emptyLinePlaceholder":1029},[87,91786,91787,91789,91791],{"class":89,"line":222},[87,91788,938],{"class":97},[87,91790,52278],{"class":93},[87,91792,953],{"class":97},[87,91794,91795,91797,91799,91801,91803,91805],{"class":89,"line":234},[87,91796,53081],{"class":97},[87,91798,52288],{"class":93},[87,91800,52291],{"class":205},[87,91802,946],{"class":97},[87,91804,52296],{"class":949},[87,91806,953],{"class":97},[87,91808,91809,91811,91813,91815,91817,91819,91821,91823,91825],{"class":89,"line":256},[87,91810,53081],{"class":97},[87,91812,52288],{"class":93},[87,91814,15870],{"class":205},[87,91816,946],{"class":97},[87,91818,52335],{"class":949},[87,91820,52315],{"class":205},[87,91822,946],{"class":97},[87,91824,52342],{"class":949},[87,91826,953],{"class":97},[87,91828,91829,91831,91833,91835,91837],{"class":89,"line":269},[87,91830,53081],{"class":97},[87,91832,52351],{"class":93},[87,91834,52354],{"class":97},[87,91836,52351],{"class":93},[87,91838,953],{"class":97},[87,91840,91841,91843,91845],{"class":89,"line":463},[87,91842,53081],{"class":97},[87,91844,1006],{"class":93},[87,91846,953],{"class":97},[87,91848,91849,91851],{"class":89,"line":469},[87,91850,55688],{"class":205},[87,91852,98],{"class":97},[87,91854,91855,91857,91859,91861],{"class":89,"line":2287},[87,91856,73524],{"class":104},[87,91858,108],{"class":97},[87,91860,61441],{"class":104},[87,91862,117],{"class":97},[87,91864,91865,91867,91869,91871,91873],{"class":89,"line":2568},[87,91866,55707],{"class":104},[87,91868,108],{"class":97},[87,91870,2678],{"class":104},[87,91872,245],{"class":171},[87,91874,117],{"class":97},[87,91876,91877,91879,91881,91883,91885],{"class":89,"line":2573},[87,91878,55721],{"class":104},[87,91880,108],{"class":97},[87,91882,2678],{"class":104},[87,91884,245],{"class":171},[87,91886,117],{"class":97},[87,91888,91889,91891,91893,91895],{"class":89,"line":2579},[87,91890,55820],{"class":104},[87,91892,108],{"class":97},[87,91894,90932],{"class":104},[87,91896,117],{"class":97},[87,91898,91899,91901,91903,91905,91907],{"class":89,"line":2584},[87,91900,55858],{"class":104},[87,91902,108],{"class":97},[87,91904,1917],{"class":104},[87,91906,245],{"class":171},[87,91908,117],{"class":97},[87,91910,91911,91913,91915,91917],{"class":89,"line":2598},[87,91912,58352],{"class":104},[87,91914,108],{"class":97},[87,91916,61778],{"class":104},[87,91918,117],{"class":97},[87,91920,91921,91923,91925,91927],{"class":89,"line":2603},[87,91922,58222],{"class":104},[87,91924,108],{"class":97},[87,91926,318],{"class":104},[87,91928,117],{"class":97},[87,91930,91931,91933,91935,91937,91939],{"class":89,"line":2609},[87,91932,90971],{"class":104},[87,91934,108],{"class":97},[87,91936,1414],{"class":104},[87,91938,245],{"class":171},[87,91940,117],{"class":97},[87,91942,91943],{"class":89,"line":2630},[87,91944,3142],{"class":97},[87,91946,91947,91949,91951],{"class":89,"line":2635},[87,91948,53354],{"class":97},[87,91950,1006],{"class":93},[87,91952,953],{"class":97},[87,91954,91955,91957,91959],{"class":89,"line":2649},[87,91956,963],{"class":97},[87,91958,52278],{"class":93},[87,91960,953],{"class":97},[87,91962,91963],{"class":89,"line":2654},[87,91964,3355],{"emptyLinePlaceholder":1029},[87,91966,91967,91969,91971],{"class":89,"line":2683},[87,91968,938],{"class":97},[87,91970,52737],{"class":93},[87,91972,953],{"class":97},[87,91974,91975,91977,91979,91981,91983,91985,91987,91989],{"class":89,"line":2688},[87,91976,53081],{"class":97},[87,91978,94],{"class":93},[87,91980,943],{"class":205},[87,91982,946],{"class":97},[87,91984,54427],{"class":949},[87,91986,56250],{"class":97},[87,91988,94],{"class":93},[87,91990,953],{"class":97},[87,91992,91993,91995,91997,91999,92001,92003,92005,92007],{"class":89,"line":2705},[87,91994,53081],{"class":97},[87,91996,52750],{"class":93},[87,91998,56175],{"class":205},[87,92000,946],{"class":97},[87,92002,89200],{"class":949},[87,92004,56250],{"class":97},[87,92006,52750],{"class":93},[87,92008,953],{"class":97},[87,92010,92011,92013,92015],{"class":89,"line":2710},[87,92012,53081],{"class":97},[87,92014,52750],{"class":93},[87,92016,953],{"class":97},[87,92018,92019,92021,92023,92025,92027,92029,92031,92033],{"class":89,"line":2715},[87,92020,12171],{"class":171},[87,92022,87859],{"class":104},[87,92024,14514],{"class":171},[87,92026,55332],{"class":97},[87,92028,55335],{"class":205},[87,92030,165],{"class":97},[87,92032,91072],{"class":949},[87,92034,1108],{"class":97},[87,92036,92037,92039,92041,92043],{"class":89,"line":2720},[87,92038,53156],{"class":171},[87,92040,10388],{"class":97},[87,92042,946],{"class":171},[87,92044,48280],{"class":104},[87,92046,92047,92049,92051],{"class":89,"line":2734},[87,92048,71016],{"class":171},[87,92050,91091],{"class":205},[87,92052,11803],{"class":97},[87,92054,92055,92057,92059,92061],{"class":89,"line":2739},[87,92056,91098],{"class":97},[87,92058,946],{"class":171},[87,92060,3986],{"class":97},[87,92062,3657],{"class":171},[87,92064,92065],{"class":89,"line":3532},[87,92066,91109],{"class":199},[87,92068,92069],{"class":89,"line":3546},[87,92070,3142],{"class":97},[87,92072,92073],{"class":89,"line":3554},[87,92074,91118],{"class":199},[87,92076,92077],{"class":89,"line":3559},[87,92078,92079],{"class":199},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[87,92081,92082],{"class":89,"line":3565},[87,92083,92084],{"class":199},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[87,92086,92087,92089,92091,92093,92095,92097,92100,92102,92104],{"class":89,"line":3571},[87,92088,91133],{"class":97},[87,92090,58749],{"class":205},[87,92092,165],{"class":97},[87,92094,91140],{"class":949},[87,92096,91143],{"class":97},[87,92098,92099],{"class":205},"throttle",[87,92101,91149],{"class":97},[87,92103,839],{"class":104},[87,92105,31444],{"class":97},[87,92107,92108,92110,92112],{"class":89,"line":3576},[87,92109,53354],{"class":97},[87,92111,52750],{"class":93},[87,92113,953],{"class":97},[87,92115,92116,92118,92120],{"class":89,"line":8898},[87,92117,963],{"class":97},[87,92119,52737],{"class":93},[87,92121,953],{"class":97},[87,92123,92124],{"class":89,"line":8922},[87,92125,3355],{"emptyLinePlaceholder":1029},[87,92127,92128,92130,92132],{"class":89,"line":8927},[87,92129,963],{"class":97},[87,92131,51581],{"class":93},[87,92133,953],{"class":97},[26,92135,92136],{},[29,92137,92138],{},"手写一个节流函数来处理",[19,92140,71880],{},[19,92142,91192],{},[19,92144,92145],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,92147,92148],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[77,92150,92152],{"className":51579,"code":92151,"language":51581,"meta":82,"style":82},"\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",[84,92153,92154,92164,92178,92182,92190,92204,92224,92236,92244,92250,92260,92272,92284,92294,92306,92316,92326,92338,92342,92350,92358,92362,92370,92388,92406,92414,92432,92442,92450,92460,92464,92468,92472,92477,92482,92487,92492,92497,92502,92519,92525,92533,92544,92559,92566,92571,92576,92586,92591,92596,92601,92605,92609,92613,92633,92641,92649,92653],{"__ignoreMap":82},[87,92155,92156,92158,92160,92162],{"class":89,"line":90},[87,92157,52243],{"class":97},[87,92159,52246],{"class":93},[87,92161,52249],{"class":205},[87,92163,953],{"class":97},[87,92165,92166,92168,92170,92172,92174,92176],{"class":89,"line":101},[87,92167,938],{"class":97},[87,92169,51581],{"class":93},[87,92171,52260],{"class":205},[87,92173,946],{"class":97},[87,92175,52265],{"class":949},[87,92177,953],{"class":97},[87,92179,92180],{"class":89,"line":120},[87,92181,3355],{"emptyLinePlaceholder":1029},[87,92183,92184,92186,92188],{"class":89,"line":222},[87,92185,938],{"class":97},[87,92187,52278],{"class":93},[87,92189,953],{"class":97},[87,92191,92192,92194,92196,92198,92200,92202],{"class":89,"line":234},[87,92193,53081],{"class":97},[87,92195,52288],{"class":93},[87,92197,52291],{"class":205},[87,92199,946],{"class":97},[87,92201,52296],{"class":949},[87,92203,953],{"class":97},[87,92205,92206,92208,92210,92212,92214,92216,92218,92220,92222],{"class":89,"line":256},[87,92207,53081],{"class":97},[87,92209,52288],{"class":93},[87,92211,15870],{"class":205},[87,92213,946],{"class":97},[87,92215,52335],{"class":949},[87,92217,52315],{"class":205},[87,92219,946],{"class":97},[87,92221,52342],{"class":949},[87,92223,953],{"class":97},[87,92225,92226,92228,92230,92232,92234],{"class":89,"line":269},[87,92227,53081],{"class":97},[87,92229,52351],{"class":93},[87,92231,52354],{"class":97},[87,92233,52351],{"class":93},[87,92235,953],{"class":97},[87,92237,92238,92240,92242],{"class":89,"line":463},[87,92239,53081],{"class":97},[87,92241,1006],{"class":93},[87,92243,953],{"class":97},[87,92245,92246,92248],{"class":89,"line":469},[87,92247,55688],{"class":205},[87,92249,98],{"class":97},[87,92251,92252,92254,92256,92258],{"class":89,"line":2287},[87,92253,73524],{"class":104},[87,92255,108],{"class":97},[87,92257,61441],{"class":104},[87,92259,117],{"class":97},[87,92261,92262,92264,92266,92268,92270],{"class":89,"line":2568},[87,92263,55707],{"class":104},[87,92265,108],{"class":97},[87,92267,2678],{"class":104},[87,92269,245],{"class":171},[87,92271,117],{"class":97},[87,92273,92274,92276,92278,92280,92282],{"class":89,"line":2573},[87,92275,55721],{"class":104},[87,92277,108],{"class":97},[87,92279,2678],{"class":104},[87,92281,245],{"class":171},[87,92283,117],{"class":97},[87,92285,92286,92288,92290,92292],{"class":89,"line":2579},[87,92287,55820],{"class":104},[87,92289,108],{"class":97},[87,92291,90932],{"class":104},[87,92293,117],{"class":97},[87,92295,92296,92298,92300,92302,92304],{"class":89,"line":2584},[87,92297,55858],{"class":104},[87,92299,108],{"class":97},[87,92301,1917],{"class":104},[87,92303,245],{"class":171},[87,92305,117],{"class":97},[87,92307,92308,92310,92312,92314],{"class":89,"line":2598},[87,92309,58352],{"class":104},[87,92311,108],{"class":97},[87,92313,61778],{"class":104},[87,92315,117],{"class":97},[87,92317,92318,92320,92322,92324],{"class":89,"line":2603},[87,92319,58222],{"class":104},[87,92321,108],{"class":97},[87,92323,318],{"class":104},[87,92325,117],{"class":97},[87,92327,92328,92330,92332,92334,92336],{"class":89,"line":2609},[87,92329,90971],{"class":104},[87,92331,108],{"class":97},[87,92333,1414],{"class":104},[87,92335,245],{"class":171},[87,92337,117],{"class":97},[87,92339,92340],{"class":89,"line":2630},[87,92341,3142],{"class":97},[87,92343,92344,92346,92348],{"class":89,"line":2635},[87,92345,53354],{"class":97},[87,92347,1006],{"class":93},[87,92349,953],{"class":97},[87,92351,92352,92354,92356],{"class":89,"line":2649},[87,92353,963],{"class":97},[87,92355,52278],{"class":93},[87,92357,953],{"class":97},[87,92359,92360],{"class":89,"line":2654},[87,92361,3355],{"emptyLinePlaceholder":1029},[87,92363,92364,92366,92368],{"class":89,"line":2683},[87,92365,938],{"class":97},[87,92367,52737],{"class":93},[87,92369,953],{"class":97},[87,92371,92372,92374,92376,92378,92380,92382,92384,92386],{"class":89,"line":2688},[87,92373,53081],{"class":97},[87,92375,94],{"class":93},[87,92377,943],{"class":205},[87,92379,946],{"class":97},[87,92381,54427],{"class":949},[87,92383,56250],{"class":97},[87,92385,94],{"class":93},[87,92387,953],{"class":97},[87,92389,92390,92392,92394,92396,92398,92400,92402,92404],{"class":89,"line":2705},[87,92391,53081],{"class":97},[87,92393,52750],{"class":93},[87,92395,56175],{"class":205},[87,92397,946],{"class":97},[87,92399,89200],{"class":949},[87,92401,56250],{"class":97},[87,92403,52750],{"class":93},[87,92405,953],{"class":97},[87,92407,92408,92410,92412],{"class":89,"line":2710},[87,92409,53081],{"class":97},[87,92411,52750],{"class":93},[87,92413,953],{"class":97},[87,92415,92416,92418,92420,92422,92424,92426,92428,92430],{"class":89,"line":2715},[87,92417,12171],{"class":171},[87,92419,87859],{"class":104},[87,92421,14514],{"class":171},[87,92423,55332],{"class":97},[87,92425,55335],{"class":205},[87,92427,165],{"class":97},[87,92429,91072],{"class":949},[87,92431,1108],{"class":97},[87,92433,92434,92436,92438,92440],{"class":89,"line":2720},[87,92435,53156],{"class":171},[87,92437,10388],{"class":97},[87,92439,946],{"class":171},[87,92441,48280],{"class":104},[87,92443,92444,92446,92448],{"class":89,"line":2734},[87,92445,71016],{"class":171},[87,92447,91091],{"class":205},[87,92449,11803],{"class":97},[87,92451,92452,92454,92456,92458],{"class":89,"line":2739},[87,92453,91098],{"class":97},[87,92455,946],{"class":171},[87,92457,3986],{"class":97},[87,92459,3657],{"class":171},[87,92461,92462],{"class":89,"line":3532},[87,92463,91109],{"class":199},[87,92465,92466],{"class":89,"line":3546},[87,92467,3142],{"class":97},[87,92469,92470],{"class":89,"line":3554},[87,92471,91118],{"class":199},[87,92473,92474],{"class":89,"line":3559},[87,92475,92476],{"class":199},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[87,92478,92479],{"class":89,"line":3565},[87,92480,92481],{"class":199},"    \u002F\u002F 1.声明一个定时器变量\n",[87,92483,92484],{"class":89,"line":3571},[87,92485,92486],{"class":199},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[87,92488,92489],{"class":89,"line":3576},[87,92490,92491],{"class":199},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[87,92493,92494],{"class":89,"line":8898},[87,92495,92496],{"class":199},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[87,92498,92499],{"class":89,"line":8922},[87,92500,92501],{"class":199},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[87,92503,92504,92506,92509,92511,92513,92515,92517],{"class":89,"line":8927},[87,92505,71016],{"class":171},[87,92507,92508],{"class":205}," throttle",[87,92510,165],{"class":97},[87,92512,91563],{"class":492},[87,92514,13385],{"class":97},[87,92516,1812],{"class":492},[87,92518,13392],{"class":97},[87,92520,92521,92523],{"class":89,"line":8933},[87,92522,80699],{"class":171},[87,92524,91576],{"class":97},[87,92526,92527,92529,92531],{"class":89,"line":8960},[87,92528,74910],{"class":171},[87,92530,59854],{"class":171},[87,92532,55388],{"class":97},[87,92534,92535,92537,92539,92541],{"class":89,"line":8965},[87,92536,3452],{"class":171},[87,92538,2614],{"class":97},[87,92540,1322],{"class":171},[87,92542,92543],{"class":97},"timer) {\n",[87,92545,92546,92549,92551,92553,92555,92557],{"class":89,"line":8971},[87,92547,92548],{"class":97},"          timer ",[87,92550,946],{"class":171},[87,92552,91617],{"class":205},[87,92554,165],{"class":97},[87,92556,55385],{"class":171},[87,92558,55388],{"class":97},[87,92560,92561,92564],{"class":89,"line":8983},[87,92562,92563],{"class":205},"            fn",[87,92565,2931],{"class":97},[87,92567,92568],{"class":89,"line":8995},[87,92569,92570],{"class":199},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[87,92572,92573],{"class":89,"line":9007},[87,92574,92575],{"class":199},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[87,92577,92578,92581,92583],{"class":89,"line":10666},[87,92579,92580],{"class":97},"            timer ",[87,92582,946],{"class":171},[87,92584,92585],{"class":104}," null\n",[87,92587,92588],{"class":89,"line":10691},[87,92589,92590],{"class":199},"            \u002F\u002F 不能用clearTimeout(timer)\n",[87,92592,92593],{"class":89,"line":10714},[87,92594,92595],{"class":199},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[87,92597,92598],{"class":89,"line":10738},[87,92599,92600],{"class":97},"          }, t)\n",[87,92602,92603],{"class":89,"line":10743},[87,92604,3484],{"class":97},[87,92606,92607],{"class":89,"line":10748},[87,92608,53335],{"class":97},[87,92610,92611],{"class":89,"line":10753},[87,92612,3142],{"class":97},[87,92614,92615,92617,92619,92621,92623,92625,92627,92629,92631],{"class":89,"line":10762},[87,92616,91133],{"class":97},[87,92618,58749],{"class":205},[87,92620,165],{"class":97},[87,92622,91140],{"class":949},[87,92624,13385],{"class":97},[87,92626,92099],{"class":205},[87,92628,91149],{"class":97},[87,92630,839],{"class":104},[87,92632,31444],{"class":97},[87,92634,92635,92637,92639],{"class":89,"line":10767},[87,92636,53354],{"class":97},[87,92638,52750],{"class":93},[87,92640,953],{"class":97},[87,92642,92643,92645,92647],{"class":89,"line":10773},[87,92644,963],{"class":97},[87,92646,52737],{"class":93},[87,92648,953],{"class":97},[87,92650,92651],{"class":89,"line":10794},[87,92652,3355],{"emptyLinePlaceholder":1029},[87,92654,92655,92657,92659],{"class":89,"line":10800},[87,92656,963],{"class":97},[87,92658,51581],{"class":93},[87,92660,953],{"class":97},[44,92662,92664],{"id":92663},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[77,92666,92668],{"className":54004,"code":92667,"language":54006,"meta":82,"style":82},"\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",[84,92669,92670,92678,92686,92691,92696,92701,92706,92710,92718],{"__ignoreMap":82},[87,92671,92672,92674,92676],{"class":89,"line":90},[87,92673,938],{"class":97},[87,92675,52737],{"class":93},[87,92677,953],{"class":97},[87,92679,92680,92682,92684],{"class":89,"line":101},[87,92681,53081],{"class":97},[87,92683,52750],{"class":93},[87,92685,953],{"class":97},[87,92687,92688],{"class":89,"line":120},[87,92689,92690],{"class":97},"    let timer = null\n",[87,92692,92693],{"class":89,"line":222},[87,92694,92695],{"class":97},"    timer = setTimeout(() => {\n",[87,92697,92698],{"class":89,"line":234},[87,92699,92700],{"class":97},"      clearTimeout(timer)\n",[87,92702,92703],{"class":89,"line":256},[87,92704,92705],{"class":97},"      console.log(timer)\n",[87,92707,92708],{"class":89,"line":269},[87,92709,61161],{"class":97},[87,92711,92712,92714,92716],{"class":89,"line":463},[87,92713,53354],{"class":97},[87,92715,52750],{"class":93},[87,92717,953],{"class":97},[87,92719,92720,92722,92724],{"class":89,"line":469},[87,92721,963],{"class":97},[87,92723,52737],{"class":93},[87,92725,953],{"class":97},[19,92727,92728],{},"输出为1",[19,92730,92731],{},"在开启的定时器里边写清除定时器",[19,92733,92734],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[44,92736,92738],{"id":92737},"_4174-节流综合案例","4.17.4 节流综合案例",[19,92740,92741],{},"页面打开，可以记录上一次的视频播放位置",[19,92743,92744],{},[39,92745],{"alt":82,"src":92746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,92748,92749],{},[39,92750],{"alt":82,"src":92751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[77,92753,92755],{"className":51579,"code":92754,"language":51581,"meta":82,"style":82},"\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",[84,92756,92757,92767,92781,92785,92793,92807,92827,92847,92869,92882,92890,92896,92906,92916,92926,92930,92934,92941,92954,92966,92970,92974,92984,92996,93010,93014,93018,93025,93035,93048,93060,93070,93080,93096,93108,93112,93116,93124,93134,93146,93156,93166,93176,93180,93184,93194,93205,93209,93217,93225,93229,93237,93252,93267,93282,93303,93311,93319,93334,93356,93364,93379,93405,93431,93457,93465,93473,93492,93500,93505,93524,93529,93547,93552,93557,93565,93570,93584,93592,93597,93614,93618,93623,93645,93649,93657,93665,93669],{"__ignoreMap":82},[87,92758,92759,92761,92763,92765],{"class":89,"line":90},[87,92760,52243],{"class":97},[87,92762,52246],{"class":93},[87,92764,52249],{"class":205},[87,92766,953],{"class":97},[87,92768,92769,92771,92773,92775,92777,92779],{"class":89,"line":101},[87,92770,938],{"class":97},[87,92772,51581],{"class":93},[87,92774,52260],{"class":205},[87,92776,946],{"class":97},[87,92778,52265],{"class":949},[87,92780,953],{"class":97},[87,92782,92783],{"class":89,"line":120},[87,92784,3355],{"emptyLinePlaceholder":1029},[87,92786,92787,92789,92791],{"class":89,"line":222},[87,92788,938],{"class":97},[87,92790,52278],{"class":93},[87,92792,953],{"class":97},[87,92794,92795,92797,92799,92801,92803,92805],{"class":89,"line":234},[87,92796,53081],{"class":97},[87,92798,52288],{"class":93},[87,92800,52291],{"class":205},[87,92802,946],{"class":97},[87,92804,52296],{"class":949},[87,92806,60063],{"class":97},[87,92808,92809,92811,92813,92815,92817,92819,92821,92823,92825],{"class":89,"line":256},[87,92810,53081],{"class":97},[87,92812,52288],{"class":93},[87,92814,52307],{"class":205},[87,92816,946],{"class":97},[87,92818,52312],{"class":949},[87,92820,52315],{"class":205},[87,92822,946],{"class":97},[87,92824,52320],{"class":949},[87,92826,60063],{"class":97},[87,92828,92829,92831,92833,92835,92837,92839,92841,92843,92845],{"class":89,"line":269},[87,92830,53081],{"class":97},[87,92832,52288],{"class":93},[87,92834,15870],{"class":205},[87,92836,946],{"class":97},[87,92838,52335],{"class":949},[87,92840,52315],{"class":205},[87,92842,946],{"class":97},[87,92844,52342],{"class":949},[87,92846,60063],{"class":97},[87,92848,92849,92851,92853,92855,92857,92860,92862,92864,92867],{"class":89,"line":463},[87,92850,53081],{"class":97},[87,92852,52288],{"class":93},[87,92854,15870],{"class":205},[87,92856,946],{"class":97},[87,92858,92859],{"class":949},"\"referrer\"",[87,92861,52315],{"class":205},[87,92863,946],{"class":97},[87,92865,92866],{"class":949},"\"never\"",[87,92868,60063],{"class":97},[87,92870,92871,92873,92875,92878,92880],{"class":89,"line":469},[87,92872,53081],{"class":97},[87,92874,52351],{"class":93},[87,92876,92877],{"class":97},">综合案例\u003C\u002F",[87,92879,52351],{"class":93},[87,92881,953],{"class":97},[87,92883,92884,92886,92888],{"class":89,"line":2287},[87,92885,53081],{"class":97},[87,92887,1006],{"class":93},[87,92889,953],{"class":97},[87,92891,92892,92894],{"class":89,"line":2568},[87,92893,7353],{"class":93},[87,92895,98],{"class":97},[87,92897,92898,92900,92902,92904],{"class":89,"line":2573},[87,92899,55631],{"class":104},[87,92901,108],{"class":97},[87,92903,111],{"class":104},[87,92905,117],{"class":97},[87,92907,92908,92910,92912,92914],{"class":89,"line":2579},[87,92909,55642],{"class":104},[87,92911,108],{"class":97},[87,92913,111],{"class":104},[87,92915,117],{"class":97},[87,92917,92918,92920,92922,92924],{"class":89,"line":2584},[87,92919,73524],{"class":104},[87,92921,108],{"class":97},[87,92923,61441],{"class":104},[87,92925,117],{"class":97},[87,92927,92928],{"class":89,"line":2598},[87,92929,3142],{"class":97},[87,92931,92932],{"class":89,"line":2603},[87,92933,3355],{"emptyLinePlaceholder":1029},[87,92935,92936,92939],{"class":89,"line":2609},[87,92937,92938],{"class":205},"    .container",[87,92940,98],{"class":97},[87,92942,92943,92945,92947,92950,92952],{"class":89,"line":2630},[87,92944,55707],{"class":104},[87,92946,108],{"class":97},[87,92948,92949],{"class":104},"1200",[87,92951,245],{"class":171},[87,92953,117],{"class":97},[87,92955,92956,92958,92960,92962,92964],{"class":89,"line":2635},[87,92957,55642],{"class":104},[87,92959,108],{"class":97},[87,92961,111],{"class":104},[87,92963,114],{"class":104},[87,92965,117],{"class":97},[87,92967,92968],{"class":89,"line":2649},[87,92969,3142],{"class":97},[87,92971,92972],{"class":89,"line":2654},[87,92973,3355],{"emptyLinePlaceholder":1029},[87,92975,92976,92979,92982],{"class":89,"line":2683},[87,92977,92978],{"class":205},"    .video",[87,92980,92981],{"class":93}," video",[87,92983,98],{"class":97},[87,92985,92986,92988,92990,92992,92994],{"class":89,"line":2688},[87,92987,55707],{"class":104},[87,92989,108],{"class":97},[87,92991,536],{"class":104},[87,92993,1423],{"class":171},[87,92995,117],{"class":97},[87,92997,92998,93000,93002,93004,93006,93008],{"class":89,"line":2705},[87,92999,55631],{"class":104},[87,93001,108],{"class":97},[87,93003,1792],{"class":104},[87,93005,245],{"class":171},[87,93007,577],{"class":104},[87,93009,117],{"class":97},[87,93011,93012],{"class":89,"line":2710},[87,93013,3142],{"class":97},[87,93015,93016],{"class":89,"line":2715},[87,93017,3355],{"emptyLinePlaceholder":1029},[87,93019,93020,93023],{"class":89,"line":2720},[87,93021,93022],{"class":205},"    .elevator",[87,93024,98],{"class":97},[87,93026,93027,93029,93031,93033],{"class":89,"line":2734},[87,93028,55695],{"class":104},[87,93030,108],{"class":97},[87,93032,87159],{"class":104},[87,93034,117],{"class":97},[87,93036,93037,93039,93041,93044,93046],{"class":89,"line":2739},[87,93038,55883],{"class":104},[87,93040,108],{"class":97},[87,93042,93043],{"class":104},"280",[87,93045,245],{"class":171},[87,93047,117],{"class":97},[87,93049,93050,93052,93054,93056,93058],{"class":89,"line":3532},[87,93051,87353],{"class":104},[87,93053,108],{"class":97},[87,93055,1792],{"class":104},[87,93057,245],{"class":171},[87,93059,117],{"class":97},[87,93061,93062,93064,93066,93068],{"class":89,"line":3546},[87,93063,87166],{"class":104},[87,93065,108],{"class":97},[87,93067,87171],{"class":104},[87,93069,117],{"class":97},[87,93071,93072,93074,93076,93078],{"class":89,"line":3554},[87,93073,62657],{"class":104},[87,93075,108],{"class":97},[87,93077,61778],{"class":104},[87,93079,117],{"class":97},[87,93081,93082,93084,93086,93088,93090,93092,93094],{"class":89,"line":3559},[87,93083,62912],{"class":104},[87,93085,108],{"class":97},[87,93087,1313],{"class":104},[87,93089,245],{"class":171},[87,93091,248],{"class":104},[87,93093,63179],{"class":104},[87,93095,117],{"class":97},[87,93097,93098,93100,93102,93104,93106],{"class":89,"line":3565},[87,93099,55707],{"class":104},[87,93101,108],{"class":97},[87,93103,1999],{"class":104},[87,93105,245],{"class":171},[87,93107,117],{"class":97},[87,93109,93110],{"class":89,"line":3571},[87,93111,3142],{"class":97},[87,93113,93114],{"class":89,"line":3576},[87,93115,3355],{"emptyLinePlaceholder":1029},[87,93117,93118,93120,93122],{"class":89,"line":8898},[87,93119,93022],{"class":205},[87,93121,2356],{"class":93},[87,93123,98],{"class":97},[87,93125,93126,93128,93130,93132],{"class":89,"line":8922},[87,93127,55945],{"class":104},[87,93129,108],{"class":97},[87,93131,61805],{"class":104},[87,93133,117],{"class":97},[87,93135,93136,93138,93140,93142,93144],{"class":89,"line":8927},[87,93137,55631],{"class":104},[87,93139,108],{"class":97},[87,93141,242],{"class":104},[87,93143,245],{"class":171},[87,93145,117],{"class":97},[87,93147,93148,93150,93152,93154],{"class":89,"line":8933},[87,93149,64904],{"class":104},[87,93151,108],{"class":97},[87,93153,55673],{"class":104},[87,93155,117],{"class":97},[87,93157,93158,93160,93162,93164],{"class":89,"line":8960},[87,93159,58222],{"class":104},[87,93161,108],{"class":97},[87,93163,318],{"class":104},[87,93165,117],{"class":97},[87,93167,93168,93170,93172,93174],{"class":89,"line":8965},[87,93169,58352],{"class":104},[87,93171,108],{"class":97},[87,93173,63005],{"class":104},[87,93175,117],{"class":97},[87,93177,93178],{"class":89,"line":8971},[87,93179,3142],{"class":97},[87,93181,93182],{"class":89,"line":8983},[87,93183,3355],{"emptyLinePlaceholder":1029},[87,93185,93186,93188,93190,93192],{"class":89,"line":8995},[87,93187,93022],{"class":205},[87,93189,2356],{"class":93},[87,93191,64957],{"class":205},[87,93193,98],{"class":97},[87,93195,93196,93198,93200,93203],{"class":89,"line":9007},[87,93197,58352],{"class":104},[87,93199,108],{"class":97},[87,93201,93202],{"class":104},"#1286ff",[87,93204,117],{"class":97},[87,93206,93207],{"class":89,"line":10666},[87,93208,3142],{"class":97},[87,93210,93211,93213,93215],{"class":89,"line":10691},[87,93212,53354],{"class":97},[87,93214,1006],{"class":93},[87,93216,953],{"class":97},[87,93218,93219,93221,93223],{"class":89,"line":10714},[87,93220,963],{"class":97},[87,93222,52278],{"class":93},[87,93224,953],{"class":97},[87,93226,93227],{"class":89,"line":10738},[87,93228,3355],{"emptyLinePlaceholder":1029},[87,93230,93231,93233,93235],{"class":89,"line":10743},[87,93232,938],{"class":97},[87,93234,52737],{"class":93},[87,93236,953],{"class":97},[87,93238,93239,93241,93243,93245,93247,93250],{"class":89,"line":10748},[87,93240,53081],{"class":97},[87,93242,94],{"class":93},[87,93244,943],{"class":205},[87,93246,946],{"class":97},[87,93248,93249],{"class":949},"\"container\"",[87,93251,953],{"class":97},[87,93253,93254,93256,93258,93260,93262,93265],{"class":89,"line":10753},[87,93255,52285],{"class":97},[87,93257,94],{"class":93},[87,93259,943],{"class":205},[87,93261,946],{"class":97},[87,93263,93264],{"class":949},"\"header\"",[87,93266,953],{"class":97},[87,93268,93269,93271,93273,93275,93277,93280],{"class":89,"line":10762},[87,93270,56170],{"class":97},[87,93272,1334],{"class":93},[87,93274,61993],{"class":205},[87,93276,946],{"class":97},[87,93278,93279],{"class":949},"\"http:\u002F\u002Fpip.itcast.cn\"",[87,93281,953],{"class":97},[87,93283,93284,93286,93288,93290,93292,93295,93297,93299,93301],{"class":89,"line":10767},[87,93285,56238],{"class":97},[87,93287,39],{"class":93},[87,93289,56175],{"class":205},[87,93291,946],{"class":97},[87,93293,93294],{"class":949},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[87,93296,56183],{"class":205},[87,93298,946],{"class":97},[87,93300,8602],{"class":949},[87,93302,60063],{"class":97},[87,93304,93305,93307,93309],{"class":89,"line":10773},[87,93306,56343],{"class":97},[87,93308,1334],{"class":93},[87,93310,953],{"class":97},[87,93312,93313,93315,93317],{"class":89,"line":10794},[87,93314,52714],{"class":97},[87,93316,94],{"class":93},[87,93318,953],{"class":97},[87,93320,93321,93323,93325,93327,93329,93332],{"class":89,"line":10800},[87,93322,52285],{"class":97},[87,93324,94],{"class":93},[87,93326,943],{"class":205},[87,93328,946],{"class":97},[87,93330,93331],{"class":949},"\"video\"",[87,93333,953],{"class":97},[87,93335,93336,93338,93340,93342,93344,93347,93350,93352,93354],{"class":89,"line":10814},[87,93337,56170],{"class":97},[87,93339,29130],{"class":93},[87,93341,56175],{"class":205},[87,93343,946],{"class":97},[87,93345,93346],{"class":949},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[87,93348,93349],{"class":205}," controls",[87,93351,56250],{"class":97},[87,93353,29130],{"class":93},[87,93355,953],{"class":97},[87,93357,93358,93360,93362],{"class":89,"line":10820},[87,93359,52714],{"class":97},[87,93361,94],{"class":93},[87,93363,953],{"class":97},[87,93365,93366,93368,93370,93372,93374,93377],{"class":89,"line":10847},[87,93367,52285],{"class":97},[87,93369,94],{"class":93},[87,93371,943],{"class":205},[87,93373,946],{"class":97},[87,93375,93376],{"class":949},"\"elevator\"",[87,93378,953],{"class":97},[87,93380,93381,93383,93385,93387,93389,93391,93394,93396,93398,93401,93403],{"class":89,"line":10856},[87,93382,56170],{"class":97},[87,93384,1334],{"class":93},[87,93386,61993],{"class":205},[87,93388,946],{"class":97},[87,93390,65169],{"class":949},[87,93392,93393],{"class":205}," data-ref",[87,93395,946],{"class":97},[87,93397,93331],{"class":949},[87,93399,93400],{"class":97},">视频介绍\u003C\u002F",[87,93402,1334],{"class":93},[87,93404,953],{"class":97},[87,93406,93407,93409,93411,93413,93415,93417,93419,93421,93424,93427,93429],{"class":89,"line":10862},[87,93408,56170],{"class":97},[87,93410,1334],{"class":93},[87,93412,61993],{"class":205},[87,93414,946],{"class":97},[87,93416,65169],{"class":949},[87,93418,93393],{"class":205},[87,93420,946],{"class":97},[87,93422,93423],{"class":949},"\"intro\"",[87,93425,93426],{"class":97},">课程简介\u003C\u002F",[87,93428,1334],{"class":93},[87,93430,953],{"class":97},[87,93432,93433,93435,93437,93439,93441,93443,93445,93447,93450,93453,93455],{"class":89,"line":10870},[87,93434,56170],{"class":97},[87,93436,1334],{"class":93},[87,93438,61993],{"class":205},[87,93440,946],{"class":97},[87,93442,65169],{"class":949},[87,93444,93393],{"class":205},[87,93446,946],{"class":97},[87,93448,93449],{"class":949},"\"outline\"",[87,93451,93452],{"class":97},">评论列表\u003C\u002F",[87,93454,1334],{"class":93},[87,93456,953],{"class":97},[87,93458,93459,93461,93463],{"class":89,"line":10875},[87,93460,52714],{"class":97},[87,93462,94],{"class":93},[87,93464,953],{"class":97},[87,93466,93467,93469,93471],{"class":89,"line":17553},[87,93468,53354],{"class":97},[87,93470,94],{"class":93},[87,93472,953],{"class":97},[87,93474,93475,93477,93479,93481,93483,93486,93488,93490],{"class":89,"line":17559},[87,93476,53081],{"class":97},[87,93478,52750],{"class":93},[87,93480,56175],{"class":205},[87,93482,946],{"class":97},[87,93484,93485],{"class":949},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[87,93487,56250],{"class":97},[87,93489,52750],{"class":93},[87,93491,953],{"class":97},[87,93493,93494,93496,93498],{"class":89,"line":17582},[87,93495,53081],{"class":97},[87,93497,52750],{"class":93},[87,93499,953],{"class":97},[87,93501,93502],{"class":89,"line":17588},[87,93503,93504],{"class":199},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[87,93506,93507,93509,93511,93513,93515,93517,93519,93522],{"class":89,"line":17611},[87,93508,12171],{"class":171},[87,93510,92981],{"class":104},[87,93512,14514],{"class":171},[87,93514,55332],{"class":97},[87,93516,55335],{"class":205},[87,93518,165],{"class":97},[87,93520,93521],{"class":949},"'video'",[87,93523,1108],{"class":97},[87,93525,93526],{"class":89,"line":17625},[87,93527,93528],{"class":199},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[87,93530,93531,93534,93536,93538,93540,93543,93545],{"class":89,"line":17645},[87,93532,93533],{"class":97},"    video.ontimeupdate ",[87,93535,946],{"class":171},[87,93537,89281],{"class":97},[87,93539,92099],{"class":205},[87,93541,93542],{"class":97},"(() ",[87,93544,85648],{"class":171},[87,93546,98],{"class":97},[87,93548,93549],{"class":89,"line":17651},[87,93550,93551],{"class":199},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[87,93553,93554],{"class":89,"line":17662},[87,93555,93556],{"class":199},"      \u002F\u002F 控制台输出当前的时间\n",[87,93558,93559,93562],{"class":89,"line":17685},[87,93560,93561],{"class":199},"      \u002F\u002F console.log(video.currentTime)",[87,93563,93564],{"class":199},"  \u002F\u002F获得当前的视频时间\n",[87,93566,93567],{"class":89,"line":17707},[87,93568,93569],{"class":199},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[87,93571,93572,93574,93576,93578,93581],{"class":89,"line":17712},[87,93573,75611],{"class":97},[87,93575,72582],{"class":205},[87,93577,165],{"class":97},[87,93579,93580],{"class":949},"'currentTime'",[87,93582,93583],{"class":97},", video.currentTime)\n",[87,93585,93586,93588,93590],{"class":89,"line":17718},[87,93587,55471],{"class":97},[87,93589,7360],{"class":104},[87,93591,1108],{"class":97},[87,93593,93594],{"class":89,"line":17732},[87,93595,93596],{"class":199},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[87,93598,93599,93602,93605,93607,93610,93612],{"class":89,"line":17745},[87,93600,93601],{"class":97},"    video.",[87,93603,93604],{"class":205},"onloadeddata",[87,93606,14514],{"class":171},[87,93608,93609],{"class":97}," () ",[87,93611,85648],{"class":171},[87,93613,98],{"class":97},[87,93615,93616],{"class":89,"line":17750},[87,93617,60948],{"class":199},[87,93619,93620],{"class":89,"line":17764},[87,93621,93622],{"class":199},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[87,93624,93625,93628,93630,93633,93635,93637,93639,93641,93643],{"class":89,"line":17769},[87,93626,93627],{"class":97},"      video.currentTime ",[87,93629,946],{"class":171},[87,93631,93632],{"class":97}," localStorage.",[87,93634,72613],{"class":205},[87,93636,165],{"class":97},[87,93638,93580],{"class":949},[87,93640,14664],{"class":97},[87,93642,72285],{"class":171},[87,93644,48280],{"class":104},[87,93646,93647],{"class":89,"line":17775},[87,93648,3142],{"class":97},[87,93650,93651,93653,93655],{"class":89,"line":17780},[87,93652,53354],{"class":97},[87,93654,52750],{"class":93},[87,93656,953],{"class":97},[87,93658,93659,93661,93663],{"class":89,"line":17794},[87,93660,963],{"class":97},[87,93662,52737],{"class":93},[87,93664,953],{"class":97},[87,93666,93667],{"class":89,"line":17799},[87,93668,3355],{"emptyLinePlaceholder":1029},[87,93670,93671,93673,93675],{"class":89,"line":17804},[87,93672,963],{"class":97},[87,93674,51581],{"class":93},[87,93676,953],{"class":97},[1006,93678,93679],{},"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":82,"searchDepth":101,"depth":101,"links":93681},[93682,93687,93691,93692,93693,93698,93703,93704,93705,93706,93713,93718,93719,93729,93733,93734,93738],{"id":77619,"depth":101,"text":77620,"children":93683},[93684,93685,93686],{"id":77623,"depth":120,"text":77624},{"id":77648,"depth":120,"text":77649},{"id":77660,"depth":120,"text":77661},{"id":77672,"depth":101,"text":77673,"children":93688},[93689,93690],{"id":77676,"depth":120,"text":77677},{"id":77691,"depth":120,"text":77692},{"id":77743,"depth":101,"text":77744},{"id":77787,"depth":101,"text":77788},{"id":77804,"depth":101,"text":77805,"children":93694},[93695,93696,93697],{"id":77808,"depth":120,"text":77809},{"id":77821,"depth":120,"text":77822},{"id":77926,"depth":120,"text":77927},{"id":78215,"depth":101,"text":78216,"children":93699},[93700,93701,93702],{"id":78219,"depth":120,"text":78220},{"id":78662,"depth":120,"text":78663},{"id":79073,"depth":120,"text":79074},{"id":79136,"depth":101,"text":79137},{"id":79215,"depth":101,"text":79216},{"id":79308,"depth":101,"text":79309},{"id":81151,"depth":101,"text":81152,"children":93707},[93708,93709,93710,93711,93712],{"id":81155,"depth":120,"text":81156},{"id":81167,"depth":120,"text":81168},{"id":81386,"depth":120,"text":81387},{"id":81404,"depth":120,"text":81405},{"id":81464,"depth":120,"text":81465},{"id":85732,"depth":101,"text":85733,"children":93714},[93715,93716,93717],{"id":85736,"depth":120,"text":85737},{"id":85754,"depth":120,"text":85755},{"id":85780,"depth":120,"text":85781},{"id":85789,"depth":101,"text":85790},{"id":85811,"depth":101,"text":85812,"children":93720},[93721,93722,93723,93724,93725,93726,93727,93728],{"id":85815,"depth":120,"text":85816},{"id":86076,"depth":120,"text":86077},{"id":86262,"depth":120,"text":86263},{"id":86629,"depth":120,"text":86630},{"id":86745,"depth":120,"text":86746},{"id":86781,"depth":120,"text":86782},{"id":86828,"depth":120,"text":86829},{"id":86862,"depth":120,"text":86863},{"id":88225,"depth":101,"text":88226,"children":93730},[93731,93732],{"id":88229,"depth":120,"text":88230},{"id":88266,"depth":120,"text":88267},{"id":89621,"depth":101,"text":89622},{"id":89992,"depth":101,"text":89993,"children":93735},[93736,93737],{"id":89996,"depth":120,"text":89997},{"id":90030,"depth":120,"text":90031},{"id":90759,"depth":101,"text":90760,"children":93739},[93740,93741,93742,93743],{"id":90763,"depth":120,"text":90764},{"id":91721,"depth":120,"text":91722},{"id":92663,"depth":120,"text":92664},{"id":92737,"depth":120,"text":92738},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77608,"description":1026},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93750,"title":93751,"body":93752,"description":93763,"extension":1027,"meta":93764,"navigation":1029,"path":93766,"seo":93767,"stem":93768,"__hash__":93769},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93753,"toc":93761},[93754],[19,93755,93756,93757],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[1334,93758,93759],{"href":93759,"rel":93760},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24812],{"title":82,"searchDepth":101,"depth":101,"links":93762},[],"三件套第三套学习",{"category":93765},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93751,"description":93763},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93771,"title":93772,"body":93773,"description":1026,"extension":1027,"meta":93878,"navigation":1029,"path":93879,"seo":93880,"stem":93881,"__hash__":93882},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93774,"toc":93873},[93775,93782,93785,93788,93791,93795,93804,93807,93810,93814,93823,93826,93830,93833,93853,93856,93870],[19,93776,93777],{},[1334,93778,93781],{"href":93779,"rel":93780},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24812],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93783,93772],{"id":93784},"_1安装",[19,93786,93787],{},"numpy是科学计算基础库,底层是C语言",[19,93789,93790],{},"三种方式：",[14,93792,93794],{"id":93793},"_11-通过pip安装","1.1 通过pip安装",[77,93796,93798],{"className":31325,"code":93797,"language":31327,"meta":82,"style":82},"pip install numpy\n",[84,93799,93800],{"__ignoreMap":82},[87,93801,93802],{"class":89,"line":90},[87,93803,93797],{"class":97},[19,93805,93806],{},"首选方式，自动处理依赖项",[19,93808,93809],{},"在提示系统命令符中使用cmd",[14,93811,93813],{"id":93812},"_12-通过anaconda安装","1.2 通过Anaconda安装",[77,93815,93817],{"className":31325,"code":93816,"language":31327,"meta":82,"style":82},"conda install numpy\n",[84,93818,93819],{"__ignoreMap":82},[87,93820,93821],{"class":89,"line":90},[87,93822,93816],{"class":97},[19,93824,93825],{},"自动解决环境依赖",[14,93827,93829],{"id":93828},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,93831,93832],{},"对于Debian\u002FUbuntu",[77,93834,93836],{"className":31325,"code":93835,"language":31327,"meta":82,"style":82},"sudo apt-get install python3-numpy\n",[84,93837,93838],{"__ignoreMap":82},[87,93839,93840,93843,93845,93848,93850],{"class":89,"line":90},[87,93841,93842],{"class":97},"sudo apt",[87,93844,1625],{"class":171},[87,93846,93847],{"class":97},"get install python3",[87,93849,1625],{"class":171},[87,93851,93852],{"class":97},"numpy\n",[19,93854,93855],{},"对于Fedora:",[77,93857,93859],{"className":31325,"code":93858,"language":31327,"meta":82,"style":82},"sudo dnf install python3-numpy\n",[84,93860,93861],{"__ignoreMap":82},[87,93862,93863,93866,93868],{"class":89,"line":90},[87,93864,93865],{"class":97},"sudo dnf install python3",[87,93867,1625],{"class":171},[87,93869,93852],{"class":97},[1006,93871,93872],{},"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":82,"searchDepth":101,"depth":101,"links":93874},[93875,93876,93877],{"id":93793,"depth":101,"text":93794},{"id":93812,"depth":101,"text":93813},{"id":93828,"depth":101,"text":93829},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93772,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93884,"title":93885,"body":93886,"description":1026,"extension":1027,"meta":93999,"navigation":1029,"path":94000,"seo":94001,"stem":94002,"__hash__":94003},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93887,"toc":93997},[93888,93891,93894,93897,93900,93903,93906,93909,93912,93915,93991,93994],[10,93889,93885],{"id":93890},"_10算数函数",[19,93892,93893],{},"加减乘除运算跟python基础语法没区别",[19,93895,93896],{},"除了python那种方法外还可以使用函数",[19,93898,93899],{},"加：np.add(a,b)",[19,93901,93902],{},"减：np.subtract(a,b)",[19,93904,93905],{},"乘：np.multiply(a,b)",[19,93907,93908],{},"除：np.divide(a,b) == a\u002Fb",[19,93910,93911],{},"取余：np.mod(a,b) == a%b",[19,93913,93914],{},"必须会的用法：",[77,93916,93918],{"className":31325,"code":93917,"language":31327,"meta":82,"style":82},"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",[84,93919,93920,93942,93963,93973,93986],{"__ignoreMap":82},[87,93921,93922,93924,93926,93929,93931,93934,93936,93938,93940],{"class":89,"line":90},[87,93923,1334],{"class":97},[87,93925,946],{"class":171},[87,93927,93928],{"class":97},"np.arange(",[87,93930,1515],{"class":104},[87,93932,93933],{"class":97},").reshape(",[87,93935,1170],{"class":104},[87,93937,1473],{"class":97},[87,93939,1170],{"class":104},[87,93941,1108],{"class":97},[87,93943,93944,93946,93948,93951,93953,93955,93957,93959,93961],{"class":89,"line":101},[87,93945,1359],{"class":97},[87,93947,946],{"class":171},[87,93949,93950],{"class":97},"np.array([",[87,93952,242],{"class":104},[87,93954,1473],{"class":97},[87,93956,242],{"class":104},[87,93958,1473],{"class":97},[87,93960,242],{"class":104},[87,93962,5610],{"class":97},[87,93964,93965,93968,93970],{"class":89,"line":120},[87,93966,93967],{"class":97},"result",[87,93969,946],{"class":171},[87,93971,93972],{"class":97},"np.empty_like(a)\n",[87,93974,93975,93978,93981,93983],{"class":89,"line":222},[87,93976,93977],{"class":97},"np.add(a,b,",[87,93979,93980],{"class":492},"out",[87,93982,946],{"class":171},[87,93984,93985],{"class":97},"result)\n",[87,93987,93988],{"class":89,"line":234},[87,93989,93990],{"class":97},"result\n",[19,93992,93993],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1006,93995,93996],{},"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":82,"searchDepth":101,"depth":101,"links":93998},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93885,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94005,"title":94006,"body":94007,"description":1026,"extension":1027,"meta":94769,"navigation":1029,"path":94770,"seo":94771,"stem":94772,"__hash__":94773},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94008,"toc":94756},[94009,94012,94015,94018,94022,94061,94065,94109,94169,94173,94176,94215,94218,94263,94267,94303,94307,94376,94380,94444,94448,94451,94454,94457,94460,94496,94500,94540,94544,94616,94619,94623,94686,94690,94753],[10,94010,94006],{"id":94011},"_11统计函数",[19,94013,94014],{},"sum max min mean",[19,94016,94017],{},"这些有axis参数，可以指定方向",[14,94019,94021],{"id":94020},"_111-sum求和函数","11.1 sum()求和函数",[77,94023,94025],{"className":31325,"code":94024,"language":31327,"meta":82,"style":82},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[84,94026,94027,94032,94053],{"__ignoreMap":82},[87,94028,94029],{"class":89,"line":90},[87,94030,94031],{"class":199},"#创建一维数组\n",[87,94033,94034,94036,94038,94041,94043,94045,94047,94049,94051],{"class":89,"line":101},[87,94035,1334],{"class":97},[87,94037,946],{"class":171},[87,94039,94040],{"class":97},"np.random.randint(",[87,94042,1313],{"class":104},[87,94044,1473],{"class":97},[87,94046,536],{"class":104},[87,94048,1473],{"class":97},[87,94050,1792],{"class":104},[87,94052,1108],{"class":97},[87,94054,94055,94058],{"class":89,"line":120},[87,94056,94057],{"class":97},"np.sum(a)",[87,94059,94060],{"class":199},"#求和\n",[14,94062,94064],{"id":94063},"_112-max求最大值函数","11.2 max()求最大值函数",[77,94066,94068],{"className":31325,"code":94067,"language":31327,"meta":82,"style":82},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[84,94069,94070,94074,94094,94099,94104],{"__ignoreMap":82},[87,94071,94072],{"class":89,"line":90},[87,94073,94031],{"class":199},[87,94075,94076,94078,94080,94082,94084,94086,94088,94090,94092],{"class":89,"line":101},[87,94077,1334],{"class":97},[87,94079,946],{"class":171},[87,94081,94040],{"class":97},[87,94083,1313],{"class":104},[87,94085,1473],{"class":97},[87,94087,536],{"class":104},[87,94089,1473],{"class":97},[87,94091,1792],{"class":104},[87,94093,1108],{"class":97},[87,94095,94096],{"class":89,"line":120},[87,94097,94098],{"class":97},"np.max(a)\n",[87,94100,94101],{"class":89,"line":222},[87,94102,94103],{"class":199},"#最大索引(求最大元素的索引)arg\n",[87,94105,94106],{"class":89,"line":234},[87,94107,94108],{"class":97},"np.argmax(a)\n",[77,94110,94112],{"className":31325,"code":94111,"language":31327,"meta":82,"style":82},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[84,94113,94114,94135,94155,94159],{"__ignoreMap":82},[87,94115,94116,94118,94120,94123,94125,94127,94129,94131,94133],{"class":89,"line":90},[87,94117,11869],{"class":97},[87,94119,946],{"class":171},[87,94121,94122],{"class":97}," np.array([",[87,94124,1313],{"class":104},[87,94126,13385],{"class":97},[87,94128,1414],{"class":104},[87,94130,13385],{"class":97},[87,94132,1170],{"class":104},[87,94134,5610],{"class":97},[87,94136,94137,94139,94141,94143,94145,94147,94149,94151,94153],{"class":89,"line":101},[87,94138,11895],{"class":97},[87,94140,946],{"class":171},[87,94142,94122],{"class":97},[87,94144,1170],{"class":104},[87,94146,13385],{"class":97},[87,94148,1176],{"class":104},[87,94150,13385],{"class":97},[87,94152,1389],{"class":104},[87,94154,5610],{"class":97},[87,94156,94157],{"class":89,"line":120},[87,94158,3355],{"emptyLinePlaceholder":1029},[87,94160,94161,94163,94166],{"class":89,"line":222},[87,94162,31362],{"class":104},[87,94164,94165],{"class":97},"(np.maximum(a, b))   ",[87,94167,94168],{"class":199},"# [3 5 4]，每个位置上取较大值\n",[14,94170,94172],{"id":94171},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,94174,94175],{},"①一维数组：",[77,94177,94179],{"className":31325,"code":94178,"language":31327,"meta":82,"style":82},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[84,94180,94181,94185,94205,94210],{"__ignoreMap":82},[87,94182,94183],{"class":89,"line":90},[87,94184,94031],{"class":199},[87,94186,94187,94189,94191,94193,94195,94197,94199,94201,94203],{"class":89,"line":101},[87,94188,1334],{"class":97},[87,94190,946],{"class":171},[87,94192,94040],{"class":97},[87,94194,1313],{"class":104},[87,94196,1473],{"class":97},[87,94198,536],{"class":104},[87,94200,1473],{"class":97},[87,94202,1792],{"class":104},[87,94204,1108],{"class":97},[87,94206,94207],{"class":89,"line":120},[87,94208,94209],{"class":199},"#求平均值\n",[87,94211,94212],{"class":89,"line":222},[87,94213,94214],{"class":97},"np.mean(a)\n",[19,94216,94217],{},"②二维数组",[77,94219,94221],{"className":31325,"code":94220,"language":31327,"meta":82,"style":82},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[84,94222,94223,94228,94253,94258],{"__ignoreMap":82},[87,94224,94225],{"class":89,"line":90},[87,94226,94227],{"class":199},"#二维数组\n",[87,94229,94230,94233,94235,94237,94239,94241,94243,94245,94247,94249,94251],{"class":89,"line":101},[87,94231,94232],{"class":97},"aa",[87,94234,946],{"class":171},[87,94236,93928],{"class":97},[87,94238,1313],{"class":104},[87,94240,1473],{"class":97},[87,94242,1617],{"class":104},[87,94244,93933],{"class":97},[87,94246,1170],{"class":104},[87,94248,1473],{"class":97},[87,94250,1389],{"class":104},[87,94252,1108],{"class":97},[87,94254,94255],{"class":89,"line":120},[87,94256,94257],{"class":199},"#对数组中的所有数求平均\n",[87,94259,94260],{"class":89,"line":222},[87,94261,94262],{"class":97},"np.mean(aa)\n",[14,94264,94266],{"id":94265},"_114-median求中位数函数","11.4 median()求中位数函数",[77,94268,94270],{"className":31325,"code":94269,"language":31327,"meta":82,"style":82},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[84,94271,94272,94277,94293,94298],{"__ignoreMap":82},[87,94273,94274],{"class":89,"line":90},[87,94275,94276],{"class":199},"#求中位数\n",[87,94278,94279,94281,94283,94285,94287,94289,94291],{"class":89,"line":101},[87,94280,1359],{"class":97},[87,94282,946],{"class":171},[87,94284,93928],{"class":97},[87,94286,1313],{"class":104},[87,94288,1473],{"class":97},[87,94290,242],{"class":104},[87,94292,1108],{"class":97},[87,94294,94295],{"class":89,"line":120},[87,94296,94297],{"class":97},"np.median(b)\n",[87,94299,94300],{"class":89,"line":222},[87,94301,94302],{"class":199},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94304,94306],{"id":94305},"_115-power求幂运算函数","11.5 power()求幂运算函数",[77,94308,94310],{"className":31325,"code":94309,"language":31327,"meta":82,"style":82},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[84,94311,94312,94328,94333,94338,94347,94352,94361],{"__ignoreMap":82},[87,94313,94314,94316,94318,94320,94322,94324,94326],{"class":89,"line":90},[87,94315,1359],{"class":97},[87,94317,946],{"class":171},[87,94319,93928],{"class":97},[87,94321,1313],{"class":104},[87,94323,1473],{"class":97},[87,94325,242],{"class":104},[87,94327,1108],{"class":97},[87,94329,94330],{"class":89,"line":101},[87,94331,94332],{"class":199},"#幂运算\n",[87,94334,94335],{"class":89,"line":120},[87,94336,94337],{"class":199},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[87,94339,94340,94343,94345],{"class":89,"line":222},[87,94341,94342],{"class":97},"np.power(b,",[87,94344,1176],{"class":104},[87,94346,1108],{"class":97},[87,94348,94349],{"class":89,"line":234},[87,94350,94351],{"class":199},"#或者以下代码，将数据存储起来\n",[87,94353,94354,94356,94358],{"class":89,"line":256},[87,94355,1937],{"class":97},[87,94357,946],{"class":171},[87,94359,94360],{"class":97},"np.empty_like(b)\n",[87,94362,94363,94365,94367,94369,94371,94373],{"class":89,"line":269},[87,94364,94342],{"class":97},[87,94366,1176],{"class":104},[87,94368,1473],{"class":97},[87,94370,93980],{"class":492},[87,94372,946],{"class":171},[87,94374,94375],{"class":97},"y)\n",[14,94377,94379],{"id":94378},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[77,94381,94383],{"className":31325,"code":94382,"language":31327,"meta":82,"style":82},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[84,94384,94385,94401,94406,94411,94415,94433],{"__ignoreMap":82},[87,94386,94387,94389,94391,94393,94395,94397,94399],{"class":89,"line":90},[87,94388,1359],{"class":97},[87,94390,946],{"class":171},[87,94392,93928],{"class":97},[87,94394,1313],{"class":104},[87,94396,1473],{"class":97},[87,94398,242],{"class":104},[87,94400,1108],{"class":97},[87,94402,94403],{"class":89,"line":101},[87,94404,94405],{"class":199},"#开方\n",[87,94407,94408],{"class":89,"line":120},[87,94409,94410],{"class":97},"np.sqrt(b)\n",[87,94412,94413],{"class":89,"line":222},[87,94414,94351],{"class":199},[87,94416,94417,94419,94421,94424,94427,94429,94431],{"class":89,"line":234},[87,94418,1937],{"class":97},[87,94420,946],{"class":171},[87,94422,94423],{"class":97},"np.empty_like(b,",[87,94425,94426],{"class":492},"dtype",[87,94428,946],{"class":171},[87,94430,1141],{"class":104},[87,94432,1108],{"class":97},[87,94434,94435,94438,94440,94442],{"class":89,"line":256},[87,94436,94437],{"class":97},"np.sqrt(b,",[87,94439,93980],{"class":492},[87,94441,946],{"class":171},[87,94443,94375],{"class":97},[14,94445,94447],{"id":94446},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,94449,94450],{},"对数组中的元素累计求和，可指定轴",[19,94452,94453],{},"#累计求和的意思是：",[19,94455,94456],{},"a = np.array([1, 2, 3, 4])",[19,94458,94459],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[77,94461,94463],{"className":31325,"code":94462,"language":31327,"meta":82,"style":82},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[84,94464,94465,94481,94486,94491],{"__ignoreMap":82},[87,94466,94467,94469,94471,94473,94475,94477,94479],{"class":89,"line":90},[87,94468,1359],{"class":97},[87,94470,946],{"class":171},[87,94472,93928],{"class":97},[87,94474,1313],{"class":104},[87,94476,1473],{"class":97},[87,94478,242],{"class":104},[87,94480,1108],{"class":97},[87,94482,94483],{"class":89,"line":101},[87,94484,94485],{"class":97},"np.cumsum(b)\n",[87,94487,94488],{"class":89,"line":120},[87,94489,94490],{"class":199},"#结果：\n",[87,94492,94493],{"class":89,"line":222},[87,94494,94495],{"class":199},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,94497,94499],{"id":94498},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[77,94501,94503],{"className":31325,"code":94502,"language":31327,"meta":82,"style":82},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[84,94504,94505,94521,94526,94531,94535],{"__ignoreMap":82},[87,94506,94507,94509,94511,94513,94515,94517,94519],{"class":89,"line":90},[87,94508,1359],{"class":97},[87,94510,946],{"class":171},[87,94512,93928],{"class":97},[87,94514,1313],{"class":104},[87,94516,1473],{"class":97},[87,94518,242],{"class":104},[87,94520,1108],{"class":97},[87,94522,94523],{"class":89,"line":101},[87,94524,94525],{"class":199},"#对数组中的元素累计求积，可指定轴\n",[87,94527,94528],{"class":89,"line":120},[87,94529,94530],{"class":97},"np.cumprod(b)\n",[87,94532,94533],{"class":89,"line":222},[87,94534,94490],{"class":199},[87,94536,94537],{"class":89,"line":234},[87,94538,94539],{"class":199},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,94541,94543],{"id":94542},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[77,94545,94547],{"className":31325,"code":94546,"language":31327,"meta":82,"style":82},"#删除数组中的重复数据，并对数据进行排序\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",[84,94548,94549,94554,94602,94607,94611],{"__ignoreMap":82},[87,94550,94551],{"class":89,"line":90},[87,94552,94553],{"class":199},"#删除数组中的重复数据，并对数据进行排序\n",[87,94555,94556,94558,94560,94562,94564,94566,94568,94570,94572,94574,94576,94578,94580,94582,94584,94586,94588,94590,94592,94594,94596,94598,94600],{"class":89,"line":101},[87,94557,1334],{"class":97},[87,94559,946],{"class":171},[87,94561,93950],{"class":97},[87,94563,1313],{"class":104},[87,94565,1473],{"class":97},[87,94567,1176],{"class":104},[87,94569,1473],{"class":97},[87,94571,1170],{"class":104},[87,94573,1473],{"class":97},[87,94575,1592],{"class":104},[87,94577,1473],{"class":97},[87,94579,1170],{"class":104},[87,94581,1473],{"class":97},[87,94583,242],{"class":104},[87,94585,1473],{"class":97},[87,94587,1293],{"class":104},[87,94589,1473],{"class":97},[87,94591,111],{"class":104},[87,94593,1473],{"class":97},[87,94595,1867],{"class":104},[87,94597,1473],{"class":97},[87,94599,1389],{"class":104},[87,94601,5610],{"class":97},[87,94603,94604],{"class":89,"line":120},[87,94605,94606],{"class":97},"np.unique(a)\n",[87,94608,94609],{"class":89,"line":222},[87,94610,94490],{"class":199},[87,94612,94613],{"class":89,"line":234},[87,94614,94615],{"class":199},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,94617,94618],{},"升序形式排序",[14,94620,94622],{"id":94621},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[77,94624,94626],{"className":31325,"code":94625,"language":31327,"meta":82,"style":82},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[84,94627,94628,94676,94681],{"__ignoreMap":82},[87,94629,94630,94632,94634,94636,94638,94640,94642,94644,94646,94648,94650,94652,94654,94656,94658,94660,94662,94664,94666,94668,94670,94672,94674],{"class":89,"line":90},[87,94631,1334],{"class":97},[87,94633,946],{"class":171},[87,94635,93950],{"class":97},[87,94637,1313],{"class":104},[87,94639,1473],{"class":97},[87,94641,1176],{"class":104},[87,94643,1473],{"class":97},[87,94645,1170],{"class":104},[87,94647,1473],{"class":97},[87,94649,1592],{"class":104},[87,94651,1473],{"class":97},[87,94653,1170],{"class":104},[87,94655,1473],{"class":97},[87,94657,242],{"class":104},[87,94659,1473],{"class":97},[87,94661,1293],{"class":104},[87,94663,1473],{"class":97},[87,94665,111],{"class":104},[87,94667,1473],{"class":97},[87,94669,1867],{"class":104},[87,94671,1473],{"class":97},[87,94673,1389],{"class":104},[87,94675,5610],{"class":97},[87,94677,94678],{"class":89,"line":101},[87,94679,94680],{"class":199},"#返回数组中非零元素的索引\n",[87,94682,94683],{"class":89,"line":120},[87,94684,94685],{"class":97},"np.nonzero(a)\n",[14,94687,94689],{"id":94688},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[77,94691,94693],{"className":31325,"code":94692,"language":31327,"meta":82,"style":82},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[84,94694,94695,94743,94748],{"__ignoreMap":82},[87,94696,94697,94699,94701,94703,94705,94707,94709,94711,94713,94715,94717,94719,94721,94723,94725,94727,94729,94731,94733,94735,94737,94739,94741],{"class":89,"line":90},[87,94698,1334],{"class":97},[87,94700,946],{"class":171},[87,94702,93950],{"class":97},[87,94704,1313],{"class":104},[87,94706,1473],{"class":97},[87,94708,1176],{"class":104},[87,94710,1473],{"class":97},[87,94712,1170],{"class":104},[87,94714,1473],{"class":97},[87,94716,1592],{"class":104},[87,94718,1473],{"class":97},[87,94720,1170],{"class":104},[87,94722,1473],{"class":97},[87,94724,242],{"class":104},[87,94726,1473],{"class":97},[87,94728,1293],{"class":104},[87,94730,1473],{"class":97},[87,94732,111],{"class":104},[87,94734,1473],{"class":97},[87,94736,1867],{"class":104},[87,94738,1473],{"class":97},[87,94740,1389],{"class":104},[87,94742,5610],{"class":97},[87,94744,94745],{"class":89,"line":101},[87,94746,94747],{"class":199},"#计算一组数中最大值与最小值的差，可指定轴\n",[87,94749,94750],{"class":89,"line":120},[87,94751,94752],{"class":97},"np.ptp(a)\n",[1006,94754,94755],{},"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":82,"searchDepth":101,"depth":101,"links":94757},[94758,94759,94760,94761,94762,94763,94764,94765,94766,94767,94768],{"id":94020,"depth":101,"text":94021},{"id":94063,"depth":101,"text":94064},{"id":94171,"depth":101,"text":94172},{"id":94265,"depth":101,"text":94266},{"id":94305,"depth":101,"text":94306},{"id":94378,"depth":101,"text":94379},{"id":94446,"depth":101,"text":94447},{"id":94498,"depth":101,"text":94499},{"id":94542,"depth":101,"text":94543},{"id":94621,"depth":101,"text":94622},{"id":94688,"depth":101,"text":94689},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94006,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94775,"title":94776,"body":94777,"description":1026,"extension":1027,"meta":95432,"navigation":1029,"path":95433,"seo":95434,"stem":95435,"__hash__":95436},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94778,"toc":95420},[94779,94782,94786,94789,95005,95009,95012,95221,95225,95291,95296,95300,95303,95306,95344,95348,95351,95356,95360,95363,95366,95371,95375,95378,95382,95385,95388,95393,95397,95400,95403,95408,95412,95417],[10,94780,94776],{"id":94781},"_12其他常用函数",[14,94783,94785],{"id":94784},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,94787,94788],{},"将数组的数据按照行列复制扩展",[77,94790,94792],{"className":31325,"code":94791,"language":31327,"meta":82,"style":82},"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",[84,94793,94794,94810,94819,94823,94828,94833,94846,94850,94855,94860,94865,94869,94874,94898,94910,94914,94918,94923,94928,94933,94938,94942,94955,94959,94963,94968,94973,94978,94983,94988,94992,94996,95001],{"__ignoreMap":82},[87,94795,94796,94798,94800,94802,94804,94806,94808],{"class":89,"line":90},[87,94797,1334],{"class":97},[87,94799,946],{"class":171},[87,94801,93928],{"class":97},[87,94803,1313],{"class":104},[87,94805,1473],{"class":97},[87,94807,1414],{"class":104},[87,94809,1108],{"class":97},[87,94811,94812,94815,94817],{"class":89,"line":101},[87,94813,94814],{"class":97},"np.tile(a,",[87,94816,1176],{"class":104},[87,94818,1108],{"class":97},[87,94820,94821],{"class":89,"line":120},[87,94822,94490],{"class":199},[87,94824,94825],{"class":89,"line":222},[87,94826,94827],{"class":199},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[87,94829,94830],{"class":89,"line":234},[87,94831,94832],{"class":199},"#行复制两次，列复制三次\n",[87,94834,94835,94838,94840,94842,94844],{"class":89,"line":256},[87,94836,94837],{"class":97},"np.tile(a,(",[87,94839,1176],{"class":104},[87,94841,1473],{"class":97},[87,94843,1170],{"class":104},[87,94845,31444],{"class":97},[87,94847,94848],{"class":89,"line":269},[87,94849,94490],{"class":199},[87,94851,94852],{"class":89,"line":463},[87,94853,94854],{"class":949},"'''\n",[87,94856,94857],{"class":89,"line":469},[87,94858,94859],{"class":949},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[87,94861,94862],{"class":89,"line":2287},[87,94863,94864],{"class":949},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[87,94866,94867],{"class":89,"line":2568},[87,94868,94854],{"class":949},[87,94870,94871],{"class":89,"line":2573},[87,94872,94873],{"class":199},"#创建二维数组\n",[87,94875,94876,94878,94880,94882,94884,94886,94888,94890,94892,94894,94896],{"class":89,"line":2579},[87,94877,94232],{"class":97},[87,94879,946],{"class":171},[87,94881,93928],{"class":97},[87,94883,1313],{"class":104},[87,94885,1473],{"class":97},[87,94887,1617],{"class":104},[87,94889,93933],{"class":97},[87,94891,1389],{"class":104},[87,94893,1473],{"class":97},[87,94895,1170],{"class":104},[87,94897,1108],{"class":97},[87,94899,94900,94903,94905,94907],{"class":89,"line":2584},[87,94901,94902],{"class":97},"np.tile(aa,",[87,94904,1176],{"class":104},[87,94906,1524],{"class":97},[87,94908,94909],{"class":199},"#一个数的时候就是行\n",[87,94911,94912],{"class":89,"line":2598},[87,94913,94490],{"class":199},[87,94915,94916],{"class":89,"line":2603},[87,94917,94854],{"class":949},[87,94919,94920],{"class":89,"line":2609},[87,94921,94922],{"class":949},"array([[ 1,  2,  3,  1,  2,  3],\n",[87,94924,94925],{"class":89,"line":2630},[87,94926,94927],{"class":949},"       [ 4,  5,  6,  4,  5,  6],\n",[87,94929,94930],{"class":89,"line":2635},[87,94931,94932],{"class":949},"       [ 7,  8,  9,  7,  8,  9],\n",[87,94934,94935],{"class":89,"line":2649},[87,94936,94937],{"class":949},"       [10, 11, 12, 10, 11, 12]])\n",[87,94939,94940],{"class":89,"line":2654},[87,94941,94854],{"class":949},[87,94943,94944,94947,94949,94951,94953],{"class":89,"line":2683},[87,94945,94946],{"class":97},"np.tile(aa,(",[87,94948,1176],{"class":104},[87,94950,1473],{"class":97},[87,94952,1170],{"class":104},[87,94954,31444],{"class":97},[87,94956,94957],{"class":89,"line":2688},[87,94958,94490],{"class":199},[87,94960,94961],{"class":89,"line":2705},[87,94962,94854],{"class":949},[87,94964,94965],{"class":89,"line":2710},[87,94966,94967],{"class":949},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[87,94969,94970],{"class":89,"line":2715},[87,94971,94972],{"class":949},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[87,94974,94975],{"class":89,"line":2720},[87,94976,94977],{"class":949},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[87,94979,94980],{"class":89,"line":2734},[87,94981,94982],{"class":949},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[87,94984,94985],{"class":89,"line":2739},[87,94986,94987],{"class":949},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[87,94989,94990],{"class":89,"line":3532},[87,94991,94972],{"class":949},[87,94993,94994],{"class":89,"line":3546},[87,94995,94977],{"class":949},[87,94997,94998],{"class":89,"line":3554},[87,94999,95000],{"class":949},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[87,95002,95003],{"class":89,"line":3559},[87,95004,94854],{"class":949},[14,95006,95008],{"id":95007},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,95010,95011],{},"repeat()将数组中的每个元素重复若干次",[77,95013,95015],{"className":31325,"code":95014,"language":31327,"meta":82,"style":82},"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",[84,95016,95017,95033,95042,95046,95051,95075,95080,95089,95093,95098,95102,95107,95123,95127,95131,95136,95141,95146,95150,95155,95159,95164,95169,95173,95189,95193,95197,95202,95207,95212,95217],{"__ignoreMap":82},[87,95018,95019,95021,95023,95025,95027,95029,95031],{"class":89,"line":90},[87,95020,1334],{"class":97},[87,95022,946],{"class":171},[87,95024,93928],{"class":97},[87,95026,1313],{"class":104},[87,95028,1473],{"class":97},[87,95030,1414],{"class":104},[87,95032,1108],{"class":97},[87,95034,95035,95038,95040],{"class":89,"line":101},[87,95036,95037],{"class":97},"np.repeat(a,",[87,95039,1170],{"class":104},[87,95041,1108],{"class":97},[87,95043,95044],{"class":89,"line":120},[87,95045,94490],{"class":199},[87,95047,95048],{"class":89,"line":222},[87,95049,95050],{"class":199},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[87,95052,95053,95055,95057,95059,95061,95063,95065,95067,95069,95071,95073],{"class":89,"line":234},[87,95054,94232],{"class":97},[87,95056,946],{"class":171},[87,95058,93928],{"class":97},[87,95060,1313],{"class":104},[87,95062,1473],{"class":97},[87,95064,1617],{"class":104},[87,95066,93933],{"class":97},[87,95068,1389],{"class":104},[87,95070,1473],{"class":97},[87,95072,1170],{"class":104},[87,95074,1108],{"class":97},[87,95076,95077],{"class":89,"line":256},[87,95078,95079],{"class":199},"#这个重复之后二维变成一维\n",[87,95081,95082,95085,95087],{"class":89,"line":269},[87,95083,95084],{"class":97},"np.repeat(aa,",[87,95086,1176],{"class":104},[87,95088,1108],{"class":97},[87,95090,95091],{"class":89,"line":463},[87,95092,94854],{"class":949},[87,95094,95095],{"class":89,"line":469},[87,95096,95097],{"class":949},"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",[87,95099,95100],{"class":89,"line":2287},[87,95101,94854],{"class":949},[87,95103,95104],{"class":89,"line":2568},[87,95105,95106],{"class":199},"#指定axis\n",[87,95108,95109,95111,95113,95115,95117,95119,95121],{"class":89,"line":2573},[87,95110,95084],{"class":97},[87,95112,1176],{"class":104},[87,95114,1473],{"class":97},[87,95116,48461],{"class":492},[87,95118,946],{"class":171},[87,95120,111],{"class":104},[87,95122,1108],{"class":97},[87,95124,95125],{"class":89,"line":2579},[87,95126,94490],{"class":199},[87,95128,95129],{"class":89,"line":2584},[87,95130,94854],{"class":949},[87,95132,95133],{"class":89,"line":2598},[87,95134,95135],{"class":949},"array([[ 1,  2,  3],\n",[87,95137,95138],{"class":89,"line":2603},[87,95139,95140],{"class":949},"       [ 1,  2,  3],\n",[87,95142,95143],{"class":89,"line":2609},[87,95144,95145],{"class":949},"       [ 4,  5,  6],\n",[87,95147,95148],{"class":89,"line":2630},[87,95149,95145],{"class":949},[87,95151,95152],{"class":89,"line":2635},[87,95153,95154],{"class":949},"       [ 7,  8,  9],\n",[87,95156,95157],{"class":89,"line":2649},[87,95158,95154],{"class":949},[87,95160,95161],{"class":89,"line":2654},[87,95162,95163],{"class":949},"       [10, 11, 12],\n",[87,95165,95166],{"class":89,"line":2683},[87,95167,95168],{"class":949},"       [10, 11, 12]])\n",[87,95170,95171],{"class":89,"line":2688},[87,95172,94854],{"class":949},[87,95174,95175,95177,95179,95181,95183,95185,95187],{"class":89,"line":2705},[87,95176,95084],{"class":97},[87,95178,1176],{"class":104},[87,95180,1473],{"class":97},[87,95182,48461],{"class":492},[87,95184,946],{"class":171},[87,95186,1313],{"class":104},[87,95188,1108],{"class":97},[87,95190,95191],{"class":89,"line":2710},[87,95192,94490],{"class":199},[87,95194,95195],{"class":89,"line":2715},[87,95196,94854],{"class":949},[87,95198,95199],{"class":89,"line":2720},[87,95200,95201],{"class":949},"array([[ 1,  1,  2,  2,  3,  3],\n",[87,95203,95204],{"class":89,"line":2734},[87,95205,95206],{"class":949},"       [ 4,  4,  5,  5,  6,  6],\n",[87,95208,95209],{"class":89,"line":2739},[87,95210,95211],{"class":949},"       [ 7,  7,  8,  8,  9,  9],\n",[87,95213,95214],{"class":89,"line":3532},[87,95215,95216],{"class":949},"       [10, 10, 11, 11, 12, 12]])\n",[87,95218,95219],{"class":89,"line":3546},[87,95220,94854],{"class":949},[14,95222,95224],{"id":95223},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[77,95226,95228],{"className":31325,"code":95227,"language":31327,"meta":82,"style":82},"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",[84,95229,95230,95246,95251,95263,95267,95272,95282,95286],{"__ignoreMap":82},[87,95231,95232,95234,95236,95238,95240,95242,95244],{"class":89,"line":90},[87,95233,1334],{"class":97},[87,95235,946],{"class":171},[87,95237,93928],{"class":97},[87,95239,1313],{"class":104},[87,95241,1473],{"class":97},[87,95243,1414],{"class":104},[87,95245,1108],{"class":97},[87,95247,95248],{"class":89,"line":101},[87,95249,95250],{"class":199},"#array([，2，3，4])\n",[87,95252,95253,95256,95258,95260],{"class":89,"line":120},[87,95254,95255],{"class":97},"np.roll(a,",[87,95257,1176],{"class":104},[87,95259,1524],{"class":97},[87,95261,95262],{"class":199},"#传正数向后调多少位，传负数向前调多少位\n",[87,95264,95265],{"class":89,"line":222},[87,95266,94490],{"class":199},[87,95268,95269],{"class":89,"line":234},[87,95270,95271],{"class":199},"#array([3, 4, 1, 2])\n",[87,95273,95274,95276,95278,95280],{"class":89,"line":256},[87,95275,95255],{"class":97},[87,95277,1625],{"class":171},[87,95279,1313],{"class":104},[87,95281,1108],{"class":97},[87,95283,95284],{"class":89,"line":269},[87,95285,94490],{"class":199},[87,95287,95288],{"class":89,"line":463},[87,95289,95290],{"class":199},"#array([2, 3, 4, 1])\n",[19,95292,95293],{},[39,95294],{"alt":82,"src":95295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95297,95299],{"id":95298},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,95301,95302],{},"resize()重新调整数组的大小",[19,95304,95305],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[77,95307,95309],{"className":31325,"code":95308,"language":31327,"meta":82,"style":82},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[84,95310,95311,95316,95329],{"__ignoreMap":82},[87,95312,95313],{"class":89,"line":90},[87,95314,95315],{"class":199},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[87,95317,95318,95321,95323,95325,95327],{"class":89,"line":101},[87,95319,95320],{"class":97},"np.resize(aa,(",[87,95322,1176],{"class":104},[87,95324,1473],{"class":97},[87,95326,1439],{"class":104},[87,95328,31444],{"class":97},[87,95330,95331,95333,95335,95337,95339,95341],{"class":89,"line":120},[87,95332,95320],{"class":97},[87,95334,1176],{"class":104},[87,95336,1473],{"class":97},[87,95338,1515],{"class":104},[87,95340,83697],{"class":97},[87,95342,95343],{"class":199},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,95345,95347],{"id":95346},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,95349,95350],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,95352,95353],{},[39,95354],{"alt":82,"src":95355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,95357,95359],{"id":95358},"_126-保存加载文件","12.6 保存加载文件",[19,95361,95362],{},"savetxt():将数据保存到txt文件中",[19,95364,95365],{},"loadtxt():从文件加载数据",[19,95367,95368],{},[39,95369],{"alt":82,"src":95370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,95372,95374],{"id":95373},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,95376,95377],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,95379,95381],{"id":95380},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,95383,95384],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,95386,95387],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,95389,95390],{},[39,95391],{"alt":82,"src":95392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,95394,95396],{"id":95395},"_129-where语句","12.9 where语句",[19,95398,95399],{},"np.where(条件,x,y)",[19,95401,95402],{},"如果条件为True,对应值为x,否则对应值为y",[19,95404,95405],{},[39,95406],{"alt":82,"src":95407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,95409,95411],{"id":95410},"_1210-dot矩阵","12.10 dot()矩阵",[19,95413,95414],{},[39,95415],{"alt":82,"src":95416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1006,95418,95419],{},"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":82,"searchDepth":101,"depth":101,"links":95421},[95422,95423,95424,95425,95426,95427,95428,95429,95430,95431],{"id":94784,"depth":101,"text":94785},{"id":95007,"depth":101,"text":95008},{"id":95223,"depth":101,"text":95224},{"id":95298,"depth":101,"text":95299},{"id":95346,"depth":101,"text":95347},{"id":95358,"depth":101,"text":95359},{"id":95373,"depth":101,"text":95374},{"id":95380,"depth":101,"text":95381},{"id":95395,"depth":101,"text":95396},{"id":95410,"depth":101,"text":95411},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94776,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95438,"title":95439,"body":95440,"description":1026,"extension":1027,"meta":95793,"navigation":1029,"path":95794,"seo":95795,"stem":95796,"__hash__":95797},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95441,"toc":95791},[95442,95445,95448,95451,95454,95457,95522,95524,95788],[10,95443,95439],{"id":95444},"_13数组排序",[19,95446,95447],{},"排序主要用到的方法是np.sort和np.argsort",[19,95449,95450],{},"其中np.sort()对数组直接排序",[19,95452,95453],{},"而np.argsort()是返回排序后的原始索引",[19,95455,95456],{},"①一维数组",[77,95458,95460],{"className":31325,"code":95459,"language":31327,"meta":82,"style":82},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[84,95461,95462,95466,95506,95514],{"__ignoreMap":82},[87,95463,95464],{"class":89,"line":90},[87,95465,94031],{"class":199},[87,95467,95468,95470,95472,95474,95476,95478,95480,95482,95484,95486,95488,95490,95492,95494,95496,95498,95500,95502,95504],{"class":89,"line":101},[87,95469,1334],{"class":97},[87,95471,946],{"class":171},[87,95473,93950],{"class":97},[87,95475,1170],{"class":104},[87,95477,1473],{"class":97},[87,95479,1592],{"class":104},[87,95481,1473],{"class":97},[87,95483,1490],{"class":104},[87,95485,1473],{"class":97},[87,95487,1867],{"class":104},[87,95489,1473],{"class":97},[87,95491,1375],{"class":104},[87,95493,1473],{"class":97},[87,95495,1985],{"class":104},[87,95497,1473],{"class":97},[87,95499,1439],{"class":104},[87,95501,1473],{"class":97},[87,95503,242],{"class":104},[87,95505,5610],{"class":97},[87,95507,95508,95511],{"class":89,"line":120},[87,95509,95510],{"class":97},"np.sort(a)",[87,95512,95513],{"class":199},"#升序排序\n",[87,95515,95516,95519],{"class":89,"line":222},[87,95517,95518],{"class":97},"np.argsort(a)",[87,95520,95521],{"class":199},"#按照元素大小来索引排序\n",[19,95523,94217],{},[77,95525,95527],{"className":31325,"code":95526,"language":31327,"meta":82,"style":82},"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",[84,95528,95529,95541,95567,95572,95576,95581,95586,95591,95596,95600,95608,95612,95617,95622,95627,95632,95636,95641,95654,95658,95663,95668,95673,95678,95682,95687,95699,95703,95707,95711,95715,95719,95723,95728,95743,95748,95757,95762,95766,95770,95775,95779,95784],{"__ignoreMap":82},[87,95530,95531,95534,95536,95538],{"class":89,"line":90},[87,95532,95533],{"class":97},"np.random.seed(",[87,95535,111],{"class":104},[87,95537,1524],{"class":97},[87,95539,95540],{"class":199},"#保证每次值一样\n",[87,95542,95543,95545,95547,95549,95551,95553,95555,95557,95559,95561,95563,95565],{"class":89,"line":101},[87,95544,94232],{"class":97},[87,95546,946],{"class":171},[87,95548,94040],{"class":97},[87,95550,536],{"class":104},[87,95552,1473],{"class":97},[87,95554,32443],{"class":492},[87,95556,946],{"class":171},[87,95558,165],{"class":97},[87,95560,1389],{"class":104},[87,95562,1473],{"class":97},[87,95564,1439],{"class":104},[87,95566,31444],{"class":97},[87,95568,95569],{"class":89,"line":120},[87,95570,95571],{"class":199},"#原数组：\n",[87,95573,95574],{"class":89,"line":222},[87,95575,94854],{"class":949},[87,95577,95578],{"class":89,"line":234},[87,95579,95580],{"class":949},"array([[44, 47, 64, 67, 67,  9],\n",[87,95582,95583],{"class":89,"line":256},[87,95584,95585],{"class":949},"       [83, 21, 36, 87, 70, 88],\n",[87,95587,95588],{"class":89,"line":269},[87,95589,95590],{"class":949},"       [88, 12, 58, 65, 39, 87],\n",[87,95592,95593],{"class":89,"line":463},[87,95594,95595],{"class":949},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[87,95597,95598],{"class":89,"line":469},[87,95599,94854],{"class":949},[87,95601,95602,95605],{"class":89,"line":2287},[87,95603,95604],{"class":97},"np.sort(aa)",[87,95606,95607],{"class":199},"#每行进行了排序\n",[87,95609,95610],{"class":89,"line":2568},[87,95611,94854],{"class":949},[87,95613,95614],{"class":89,"line":2573},[87,95615,95616],{"class":949},"array([[ 9, 44, 47, 64, 67, 67],\n",[87,95618,95619],{"class":89,"line":2579},[87,95620,95621],{"class":949},"       [21, 36, 70, 83, 87, 88],\n",[87,95623,95624],{"class":89,"line":2584},[87,95625,95626],{"class":949},"       [12, 39, 58, 65, 87, 88],\n",[87,95628,95629],{"class":89,"line":2598},[87,95630,95631],{"class":949},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[87,95633,95634],{"class":89,"line":2603},[87,95635,94854],{"class":949},[87,95637,95638],{"class":89,"line":2609},[87,95639,95640],{"class":199},"#axis=0时\n",[87,95642,95643,95646,95648,95650,95652],{"class":89,"line":2630},[87,95644,95645],{"class":97},"np.sort(aa,",[87,95647,48461],{"class":492},[87,95649,946],{"class":171},[87,95651,111],{"class":104},[87,95653,1108],{"class":97},[87,95655,95656],{"class":89,"line":2635},[87,95657,94854],{"class":949},[87,95659,95660],{"class":89,"line":2649},[87,95661,95662],{"class":949},"array([[44, 12, 36, 37, 25,  9],\n",[87,95664,95665],{"class":89,"line":2654},[87,95666,95667],{"class":949},"       [46, 21, 58, 65, 39, 77],\n",[87,95669,95670],{"class":89,"line":2683},[87,95671,95672],{"class":949},"       [83, 47, 64, 67, 67, 87],\n",[87,95674,95675],{"class":89,"line":2688},[87,95676,95677],{"class":949},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[87,95679,95680],{"class":89,"line":2705},[87,95681,94854],{"class":949},[87,95683,95684],{"class":89,"line":2710},[87,95685,95686],{"class":199},"#axis=1时,为默认值\n",[87,95688,95689,95691,95693,95695,95697],{"class":89,"line":2715},[87,95690,95645],{"class":97},[87,95692,48461],{"class":492},[87,95694,946],{"class":171},[87,95696,1313],{"class":104},[87,95698,1108],{"class":97},[87,95700,95701],{"class":89,"line":2720},[87,95702,94854],{"class":949},[87,95704,95705],{"class":89,"line":2734},[87,95706,95616],{"class":949},[87,95708,95709],{"class":89,"line":2739},[87,95710,95621],{"class":949},[87,95712,95713],{"class":89,"line":3532},[87,95714,95626],{"class":949},[87,95716,95717],{"class":89,"line":3546},[87,95718,95631],{"class":949},[87,95720,95721],{"class":89,"line":3554},[87,95722,94854],{"class":949},[87,95724,95725],{"class":89,"line":3559},[87,95726,95727],{"class":199},"#按最后一列排序\n",[87,95729,95730,95732,95734,95737,95739,95741],{"class":89,"line":3565},[87,95731,1359],{"class":97},[87,95733,946],{"class":171},[87,95735,95736],{"class":97},"aa[:,",[87,95738,1625],{"class":171},[87,95740,1313],{"class":104},[87,95742,34193],{"class":97},[87,95744,95745],{"class":89,"line":3571},[87,95746,95747],{"class":199},"#获取最后一列排好序的索引\n",[87,95749,95750,95752,95754],{"class":89,"line":3576},[87,95751,74986],{"class":97},[87,95753,946],{"class":171},[87,95755,95756],{"class":97},"np.argsort(b)\n",[87,95758,95759],{"class":89,"line":8898},[87,95760,95761],{"class":97},"aa[index]\n",[87,95763,95764],{"class":89,"line":8922},[87,95765,94854],{"class":949},[87,95767,95768],{"class":89,"line":8927},[87,95769,95580],{"class":949},[87,95771,95772],{"class":89,"line":8933},[87,95773,95774],{"class":949},"       [46, 88, 81, 37, 25, 77],\n",[87,95776,95777],{"class":89,"line":8960},[87,95778,95590],{"class":949},[87,95780,95781],{"class":89,"line":8965},[87,95782,95783],{"class":949},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[87,95785,95786],{"class":89,"line":8971},[87,95787,94854],{"class":949},[1006,95789,95790],{},"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":82,"searchDepth":101,"depth":101,"links":95792},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95439,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95799,"title":95800,"body":95801,"description":1026,"extension":1027,"meta":95831,"navigation":1029,"path":95832,"seo":95833,"stem":95834,"__hash__":95835},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95802,"toc":95829},[95803,95806,95809,95812,95815,95818,95821,95824],[10,95804,95800],{"id":95805},"_14广播机制",[19,95807,95808],{},"广播的规则：",[19,95810,95811],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,95813,95814],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,95816,95817],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,95819,95820],{},"3.如果没有维度形状为1，则会引发异常",[19,95822,95823],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,95825,95826],{},[39,95827],{"alt":82,"src":95828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":82,"searchDepth":101,"depth":101,"links":95830},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95800,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95837,"title":95838,"body":95839,"description":1026,"extension":1027,"meta":95937,"navigation":1029,"path":95938,"seo":95939,"stem":95940,"__hash__":95941},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95840,"toc":95935},[95841,95844,95847,95932],[10,95842,95838],{"id":95843},"_15比较掩码",[19,95845,95846],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[77,95848,95850],{"className":31325,"code":95849,"language":31327,"meta":82,"style":82},"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",[84,95851,95852,95898,95909,95923,95927],{"__ignoreMap":82},[87,95853,95854,95856,95858,95861,95863,95865,95867,95869,95871,95873,95875,95877,95879,95881,95883,95885,95887,95889,95891,95893,95895],{"class":89,"line":90},[87,95855,1334],{"class":97},[87,95857,946],{"class":171},[87,95859,95860],{"class":97},"np.array([[",[87,95862,1313],{"class":104},[87,95864,1473],{"class":97},[87,95866,1176],{"class":104},[87,95868,1473],{"class":97},[87,95870,1170],{"class":104},[87,95872,48977],{"class":97},[87,95874,1566],{"class":104},[87,95876,1473],{"class":97},[87,95878,1592],{"class":104},[87,95880,1473],{"class":97},[87,95882,1617],{"class":104},[87,95884,48977],{"class":97},[87,95886,1817],{"class":104},[87,95888,1473],{"class":97},[87,95890,1842],{"class":104},[87,95892,1473],{"class":97},[87,95894,1867],{"class":104},[87,95896,95897],{"class":97},"]])\n",[87,95899,95900,95902,95904,95906],{"class":89,"line":101},[87,95901,1334],{"class":97},[87,95903,938],{"class":171},[87,95905,1792],{"class":104},[87,95907,95908],{"class":199},"#结果是一个由True,False组成的数组\n",[87,95910,95911,95914,95916,95918,95920],{"class":89,"line":120},[87,95912,95913],{"class":97},"a[a",[87,95915,938],{"class":171},[87,95917,1792],{"class":104},[87,95919,2031],{"class":97},[87,95921,95922],{"class":199},"#小于20的元素会存到这个数组中\n",[87,95924,95925],{"class":89,"line":222},[87,95926,94490],{"class":199},[87,95928,95929],{"class":89,"line":234},[87,95930,95931],{"class":199},"#array([ 1,  2,  3, 11, 12, 13])\n",[1006,95933,95934],{},"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":82,"searchDepth":101,"depth":101,"links":95936},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95838,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95943,"title":95944,"body":95945,"description":1026,"extension":1027,"meta":96037,"navigation":1029,"path":96038,"seo":96039,"stem":96040,"__hash__":96041},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95946,"toc":96035},[95947,95950,95953,95956,95959,95962,96027,96032],[10,95948,95944],{"id":95949},"_16魔法命令time",[19,95951,95952],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95954,95955],{},"%:行模式",[19,95957,95958],{},"%%:单元格模式",[19,95960,95961],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[77,95963,95965],{"className":31325,"code":95964,"language":31327,"meta":82,"style":82},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[84,95966,95967,95972,95979,95984,95993,96006,96010,96018],{"__ignoreMap":82},[87,95968,95969],{"class":89,"line":90},[87,95970,95971],{"class":199},"#程序执行时间\n",[87,95973,95974,95976],{"class":89,"line":101},[87,95975,31339],{"class":171},[87,95977,95978],{"class":97}," time \n",[87,95980,95981],{"class":89,"line":120},[87,95982,95983],{"class":199},"#获取时间\n",[87,95985,95986,95989,95991],{"class":89,"line":222},[87,95987,95988],{"class":97},"start",[87,95990,946],{"class":171},[87,95992,33365],{"class":97},[87,95994,95995,95998,96001,96003],{"class":89,"line":234},[87,95996,95997],{"class":97},"time.sleep(",[87,95999,96000],{"class":104},"0.4",[87,96002,1524],{"class":97},[87,96004,96005],{"class":199},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[87,96007,96008],{"class":89,"line":256},[87,96009,95983],{"class":199},[87,96011,96012,96014,96016],{"class":89,"line":269},[87,96013,46748],{"class":97},[87,96015,946],{"class":171},[87,96017,33365],{"class":97},[87,96019,96020,96022,96024],{"class":89,"line":463},[87,96021,46748],{"class":97},[87,96023,1625],{"class":171},[87,96025,96026],{"class":97},"start\n",[19,96028,96029],{},[39,96030],{"alt":82,"src":96031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1006,96033,96034],{},"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":82,"searchDepth":101,"depth":101,"links":96036},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95944,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96043,"title":96044,"body":96045,"description":1026,"extension":1027,"meta":96080,"navigation":1029,"path":96081,"seo":96082,"stem":96083,"__hash__":96084},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96046,"toc":96078},[96047,96050,96053,96056,96059,96062,96065,96068,96073],[10,96048,96044],{"id":96049},"_17魔法命令timeit",[19,96051,96052],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,96054,96055],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,96057,96058],{},"单元格模式：",[19,96060,96061],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,96063,96064],{},"初始化语句执行次数由轮数来决定",[19,96066,96067],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,96069,96070],{},[39,96071],{"alt":82,"src":96072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,96074,96075],{},[39,96076],{"alt":82,"src":96077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":82,"searchDepth":101,"depth":101,"links":96079},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96044,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96086,"title":96087,"body":96088,"description":1026,"extension":1027,"meta":96106,"navigation":1029,"path":96107,"seo":96108,"stem":96109,"__hash__":96110},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96089,"toc":96104},[96090,96093,96096,96099],[10,96091,96087],{"id":96092},"_18魔法命令writefile和run",[19,96094,96095],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,96097,96098],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,96100,96101],{},[39,96102],{"alt":82,"src":96103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":82,"searchDepth":101,"depth":101,"links":96105},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96087,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96112,"title":96113,"body":96114,"description":1026,"extension":1027,"meta":96167,"navigation":1029,"path":96168,"seo":96169,"stem":96170,"__hash__":96171},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96115,"toc":96165},[96116,96119,96122,96124,96127,96130,96135,96138,96141,96144,96147,96150,96153,96156,96159,96162],[10,96117,96113],{"id":96118},"_19魔法命令memit",[19,96120,96121],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,96123,25547],{},[19,96125,96126],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,96128,96129],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,96131,96132],{},[39,96133],{"alt":82,"src":96134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,96136,96137],{},"补充：",[19,96139,96140],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,96142,96143],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,96145,96146],{},"解决方法：",[19,96148,96149],{},"1.cmd",[19,96151,96152],{},"2.依次输入以下代码：",[19,96154,96155],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,96157,96158],{},"pip install --upgrade ipython",[19,96160,96161],{},"#升级 memory_profiler 和 setuptools",[19,96163,96164],{},"pip install --upgrade memory_profiler setuptools",{"title":82,"searchDepth":101,"depth":101,"links":96166},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96113,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96173,"title":96174,"body":96175,"description":1026,"extension":1027,"meta":97821,"navigation":1029,"path":97822,"seo":97823,"stem":97824,"__hash__":97825},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96176,"toc":97791},[96177,96180,96184,96188,96249,96252,96257,96261,96266,96271,96276,96281,96284,96289,96293,96297,96330,96333,96336,96339,96391,96394,96430,96433,96475,96479,96500,96502,96539,96541,96546,96548,96553,96557,96560,96588,96592,96596,96649,96653,96745,96749,96753,96756,96761,96765,96790,96795,96799,96802,96805,96808,96811,96814,96817,96820,96832,96836,96840,96843,96875,96878,96901,96904,96930,96933,96959,96962,96996,96999,97061,97065,97068,97072,97075,97101,97104,97107,97112,97115,97184,97186,97191,97252,97255,97266,97272,97277,97281,97284,97297,97301,97316,97318,97341,97343,97369,97372,97375,97378,97426,97428,97433,97437,97441,97468,97472,97499,97502,97507,97512,97602,97606,97664,97669,97672,97675,97717,97721,97777,97782,97785,97788],[10,96178,96174],{"id":96179},"_2创建数组",[14,96181,96183],{"id":96182},"_21-array函数创建数组","2.1 array()函数创建数组",[44,96185,96187],{"id":96186},"_221-函数语句","2.2.1 函数语句",[77,96189,96191],{"className":31325,"code":96190,"language":31327,"meta":82,"style":82},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[84,96192,96193],{"__ignoreMap":82},[87,96194,96195,96198,96201,96203,96205,96207,96209,96211,96214,96216,96219,96221,96224,96226,96228,96230,96233,96235,96238,96240,96243,96245,96247],{"class":89,"line":90},[87,96196,96197],{"class":97},"numpy.array(",[87,96199,96200],{"class":104},"object",[87,96202,13385],{"class":97},[87,96204,94426],{"class":492},[87,96206,14514],{"class":171},[87,96208,39880],{"class":104},[87,96210,13385],{"class":97},[87,96212,96213],{"class":492},"copy",[87,96215,14514],{"class":171},[87,96217,96218],{"class":104}," True",[87,96220,13385],{"class":97},[87,96222,96223],{"class":492},"order",[87,96225,14514],{"class":171},[87,96227,39880],{"class":104},[87,96229,13385],{"class":97},[87,96231,96232],{"class":492},"subok",[87,96234,14514],{"class":171},[87,96236,96237],{"class":104}," False",[87,96239,13385],{"class":97},[87,96241,96242],{"class":492},"ndmin",[87,96244,14514],{"class":171},[87,96246,577],{"class":104},[87,96248,1108],{"class":97},[19,96250,96251],{},"参数：",[19,96253,96254],{},[39,96255],{"alt":82,"src":96256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[44,96258,96260],{"id":96259},"_222-实例","2.2.2 实例",[19,96262,96263],{},[39,96264],{"alt":82,"src":96265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,96267,96268],{},[39,96269],{"alt":82,"src":96270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,96272,96273],{},[39,96274],{"alt":82,"src":96275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,96277,96278],{},[39,96279],{"alt":82,"src":96280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,96282,96283],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,96285,96286],{},[39,96287],{"alt":82,"src":96288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,96290,96292],{"id":96291},"_22-随机数创建数组","2.2 随机数创建数组",[44,96294,96296],{"id":96295},"_221-random语句","2.2.1 random语句",[77,96298,96300],{"className":31325,"code":96299,"language":31327,"meta":82,"style":82},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[84,96301,96302,96307,96312,96320,96325],{"__ignoreMap":82},[87,96303,96304],{"class":89,"line":90},[87,96305,96306],{"class":199},"#random.random()\n",[87,96308,96309],{"class":89,"line":101},[87,96310,96311],{"class":199},"#确定随机种子,就是每次运行结果是相同的\n",[87,96313,96314,96316,96318],{"class":89,"line":120},[87,96315,95533],{"class":97},[87,96317,111],{"class":104},[87,96319,1108],{"class":97},[87,96321,96322],{"class":89,"line":222},[87,96323,96324],{"class":97},"np.random.random()\n",[87,96326,96327],{"class":89,"line":234},[87,96328,96329],{"class":199},"#生成一个随机的数目\n",[19,96331,96332],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,96334,96335],{},"可以指定数组形状 size",[19,96337,96338],{},"①生成一维数组",[77,96340,96342],{"className":31325,"code":96341,"language":31327,"meta":82,"style":82},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[84,96343,96344,96349,96362,96367,96383],{"__ignoreMap":82},[87,96345,96346],{"class":89,"line":90},[87,96347,96348],{"class":199},"#random.random(size())\n",[87,96350,96351,96354,96356,96358,96360],{"class":89,"line":101},[87,96352,96353],{"class":97},"np.random.random(",[87,96355,32443],{"class":492},[87,96357,946],{"class":171},[87,96359,1414],{"class":104},[87,96361,1108],{"class":97},[87,96363,96364],{"class":89,"line":120},[87,96365,96366],{"class":199},"#生成一位的五个元素\n",[87,96368,96369,96371,96373,96375,96377,96379,96381],{"class":89,"line":222},[87,96370,1334],{"class":97},[87,96372,946],{"class":171},[87,96374,96353],{"class":97},[87,96376,32443],{"class":492},[87,96378,946],{"class":171},[87,96380,1389],{"class":104},[87,96382,1108],{"class":97},[87,96384,96385,96388],{"class":89,"line":234},[87,96386,96387],{"class":97},"a.shape ",[87,96389,96390],{"class":199},"#输出数组形状\n",[19,96392,96393],{},"②生成二维数组",[77,96395,96397],{"className":31325,"code":96396,"language":31327,"meta":82,"style":82},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[84,96398,96399,96403,96425],{"__ignoreMap":82},[87,96400,96401],{"class":89,"line":90},[87,96402,94227],{"class":199},[87,96404,96405,96407,96409,96411,96413,96415,96417,96419,96421,96423],{"class":89,"line":101},[87,96406,94232],{"class":97},[87,96408,946],{"class":171},[87,96410,96353],{"class":97},[87,96412,32443],{"class":492},[87,96414,946],{"class":171},[87,96416,165],{"class":97},[87,96418,1389],{"class":104},[87,96420,1473],{"class":97},[87,96422,1414],{"class":104},[87,96424,31444],{"class":97},[87,96426,96427],{"class":89,"line":120},[87,96428,96429],{"class":199},"#生成四行五列的数组\n",[19,96431,96432],{},"③生成三维数组",[77,96434,96436],{"className":31325,"code":96435,"language":31327,"meta":82,"style":82},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[84,96437,96438,96443,96470],{"__ignoreMap":82},[87,96439,96440],{"class":89,"line":90},[87,96441,96442],{"class":199},"#三维数组\n",[87,96444,96445,96448,96450,96452,96454,96456,96458,96460,96462,96464,96466,96468],{"class":89,"line":101},[87,96446,96447],{"class":97},"aaa",[87,96449,946],{"class":171},[87,96451,96353],{"class":97},[87,96453,32443],{"class":492},[87,96455,946],{"class":171},[87,96457,165],{"class":97},[87,96459,1176],{"class":104},[87,96461,1473],{"class":97},[87,96463,1170],{"class":104},[87,96465,1473],{"class":97},[87,96467,1389],{"class":104},[87,96469,31444],{"class":97},[87,96471,96472],{"class":89,"line":120},[87,96473,96474],{"class":97},"aaa.shape\n",[44,96476,96478],{"id":96477},"_222-randint语句","2.2.2 randint语句",[77,96480,96482],{"className":31325,"code":96481,"language":31327,"meta":82,"style":82},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[84,96483,96484,96489],{"__ignoreMap":82},[87,96485,96486],{"class":89,"line":90},[87,96487,96488],{"class":199},"#生成随机的整数 random.randint(low,high,size)\n",[87,96490,96491,96493,96495,96497],{"class":89,"line":101},[87,96492,94040],{"class":97},[87,96494,1414],{"class":104},[87,96496,14664],{"class":97},[87,96498,96499],{"class":199},"#0~5中的随机一个数\n",[19,96501,96338],{},[77,96503,96505],{"className":31325,"code":96504,"language":31327,"meta":82,"style":82},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[84,96506,96507,96512,96534],{"__ignoreMap":82},[87,96508,96509],{"class":89,"line":90},[87,96510,96511],{"class":199},"#一维\n",[87,96513,96514,96516,96518,96520,96522,96524,96526,96528,96530,96532],{"class":89,"line":101},[87,96515,94040],{"class":97},[87,96517,1313],{"class":104},[87,96519,1473],{"class":97},[87,96521,1566],{"class":104},[87,96523,1473],{"class":97},[87,96525,32443],{"class":492},[87,96527,946],{"class":171},[87,96529,165],{"class":97},[87,96531,242],{"class":104},[87,96533,31444],{"class":97},[87,96535,96536],{"class":89,"line":120},[87,96537,96538],{"class":199},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,96540,96393],{},[19,96542,96543],{},[39,96544],{"alt":82,"src":96545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,96547,96432],{},[19,96549,96550],{},[39,96551],{"alt":82,"src":96552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[44,96554,96556],{"id":96555},"_222-rand语句","2.2.2 rand语句",[19,96558,96559],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[77,96561,96563],{"className":31325,"code":96562,"language":31327,"meta":82,"style":82},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[84,96564,96565,96578,96583],{"__ignoreMap":82},[87,96566,96567,96570,96572,96574,96576],{"class":89,"line":90},[87,96568,96569],{"class":97},"np.random.rand(",[87,96571,536],{"class":104},[87,96573,1473],{"class":97},[87,96575,242],{"class":104},[87,96577,1108],{"class":97},[87,96579,96580],{"class":89,"line":101},[87,96581,96582],{"class":199},"#第一个参数100：行数，表示有100个样本\n",[87,96584,96585],{"class":89,"line":120},[87,96586,96587],{"class":199},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,96589,96591],{"id":96590},"_23-arange创建数组","2.3 arange()创建数组",[44,96593,96595],{"id":96594},"_231-函数语句","2.3.1 函数语句",[77,96597,96599],{"className":31325,"code":96598,"language":31327,"meta":82,"style":82},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[84,96600,96601,96615,96620,96625,96630,96635,96640,96645],{"__ignoreMap":82},[87,96602,96603,96606,96608,96610,96613],{"class":89,"line":90},[87,96604,96605],{"class":97},"numpy.arange([start,] stop[, step], ",[87,96607,94426],{"class":492},[87,96609,946],{"class":171},[87,96611,96612],{"class":104},"None",[87,96614,1108],{"class":97},[87,96616,96617],{"class":89,"line":101},[87,96618,96619],{"class":199},"#参数\n",[87,96621,96622],{"class":89,"line":120},[87,96623,96624],{"class":949},"\"\"\"\n",[87,96626,96627],{"class":89,"line":222},[87,96628,96629],{"class":949},"start:起始值，可选，默认从 0 开始。\n",[87,96631,96632],{"class":89,"line":234},[87,96633,96634],{"class":949},"stop:结束值（不包含该值）。\n",[87,96636,96637],{"class":89,"line":256},[87,96638,96639],{"class":949},"step:步长，可选，默认是 1。可以为浮点数。\n",[87,96641,96642],{"class":89,"line":269},[87,96643,96644],{"class":949},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[87,96646,96647],{"class":89,"line":463},[87,96648,96624],{"class":949},[44,96650,96652],{"id":96651},"_232-实例","2.3.2 实例",[77,96654,96656],{"className":31325,"code":96655,"language":31327,"meta":82,"style":82},"#创建一维数组\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",[84,96657,96658,96662,96686,96691,96696,96700,96723,96727,96731,96736,96741],{"__ignoreMap":82},[87,96659,96660],{"class":89,"line":90},[87,96661,94031],{"class":199},[87,96663,96664,96666,96668,96670,96672,96674,96676,96678,96680,96682,96684],{"class":89,"line":101},[87,96665,93928],{"class":97},[87,96667,1313],{"class":104},[87,96669,1473],{"class":97},[87,96671,1817],{"class":104},[87,96673,1473],{"class":97},[87,96675,1313],{"class":104},[87,96677,1473],{"class":97},[87,96679,94426],{"class":492},[87,96681,946],{"class":171},[87,96683,1105],{"class":104},[87,96685,1108],{"class":97},[87,96687,96688],{"class":89,"line":120},[87,96689,96690],{"class":199},"#输出结果：\n",[87,96692,96693],{"class":89,"line":222},[87,96694,96695],{"class":199},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[87,96697,96698],{"class":89,"line":234},[87,96699,94873],{"class":199},[87,96701,96702,96705,96707,96709,96711,96714,96716,96718,96720],{"class":89,"line":256},[87,96703,96704],{"class":97},"np.array([np.arange(",[87,96706,1313],{"class":104},[87,96708,1473],{"class":97},[87,96710,1389],{"class":104},[87,96712,96713],{"class":97},"),np.arange(",[87,96715,1389],{"class":104},[87,96717,1473],{"class":97},[87,96719,1464],{"class":104},[87,96721,96722],{"class":97},")])\n",[87,96724,96725],{"class":89,"line":269},[87,96726,94490],{"class":199},[87,96728,96729],{"class":89,"line":463},[87,96730,96624],{"class":949},[87,96732,96733],{"class":89,"line":469},[87,96734,96735],{"class":949},"array([[1, 2, 3],\n",[87,96737,96738],{"class":89,"line":2287},[87,96739,96740],{"class":949},"       [4, 5, 6]])\n",[87,96742,96743],{"class":89,"line":2568},[87,96744,96624],{"class":949},[14,96746,96748],{"id":96747},"_24-生态分布","2.4 生态分布",[44,96750,96752],{"id":96751},"_241-标准正态分布","2.4.1 标准正态分布",[19,96754,96755],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,96757,96758],{},[39,96759],{"alt":82,"src":96760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[44,96762,96764],{"id":96763},"_242-常规正态分布","2.4.2 常规正态分布",[77,96766,96768],{"className":31325,"code":96767,"language":31327,"meta":82,"style":82},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[84,96769,96770,96775,96780,96785],{"__ignoreMap":82},[87,96771,96772],{"class":89,"line":90},[87,96773,96774],{"class":97},"random.normal(loc,scale,size)也可以生成正态分布\n",[87,96776,96777],{"class":89,"line":101},[87,96778,96779],{"class":199},"#loc:期望\n",[87,96781,96782],{"class":89,"line":120},[87,96783,96784],{"class":199},"#scale:方差\n",[87,96786,96787],{"class":89,"line":222},[87,96788,96789],{"class":199},"#size:用于确定是几维的数列\n",[19,96791,96792],{},[39,96793],{"alt":82,"src":96794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96796,96798],{"id":96797},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,96800,96801],{},"ndim:秩，维度个数",[19,96803,96804],{},"size:数组元素的个数",[19,96806,96807],{},"shape:数组的形状",[19,96809,96810],{},"dtype:数组元素的类型",[19,96812,96813],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,96815,96816],{},"他们都是属性，通过数组.属性的形式来确定",[19,96818,96819],{},"如果需要输出多个可以通过以下方式：",[77,96821,96823],{"className":31325,"code":96822,"language":31327,"meta":82,"style":82},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[84,96824,96825],{"__ignoreMap":82},[87,96826,96827,96829],{"class":89,"line":90},[87,96828,31362],{"class":104},[87,96830,96831],{"class":97},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96833,96835],{"id":96834},"_26-其他方式创建数组","2.6 其他方式创建数组",[44,96837,96839],{"id":96838},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96841,96842],{},"①创建一维数组",[77,96844,96846],{"className":31325,"code":96845,"language":31327,"meta":82,"style":82},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[84,96847,96848,96857,96861,96866,96871],{"__ignoreMap":82},[87,96849,96850,96853,96855],{"class":89,"line":90},[87,96851,96852],{"class":97},"np.zeros(",[87,96854,242],{"class":104},[87,96856,1108],{"class":97},[87,96858,96859],{"class":89,"line":101},[87,96860,96624],{"class":949},[87,96862,96863],{"class":89,"line":120},[87,96864,96865],{"class":949},"输出结果：\n",[87,96867,96868],{"class":89,"line":222},[87,96869,96870],{"class":949},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[87,96872,96873],{"class":89,"line":234},[87,96874,96624],{"class":949},[19,96876,96877],{},"上方代码等价于：",[77,96879,96881],{"className":31325,"code":96880,"language":31327,"meta":82,"style":82},"np.zeros(shape=(10))#创建10个元素的0数组\n",[84,96882,96883],{"__ignoreMap":82},[87,96884,96885,96887,96890,96892,96894,96896,96898],{"class":89,"line":90},[87,96886,96852],{"class":97},[87,96888,96889],{"class":492},"shape",[87,96891,946],{"class":171},[87,96893,165],{"class":97},[87,96895,242],{"class":104},[87,96897,83697],{"class":97},[87,96899,96900],{"class":199},"#创建10个元素的0数组\n",[19,96902,96903],{},"也可以指定类型",[77,96905,96907],{"className":31325,"code":96906,"language":31327,"meta":82,"style":82},"#指定类型\nnp.zeros(5,dtype=int)\n",[84,96908,96909,96914],{"__ignoreMap":82},[87,96910,96911],{"class":89,"line":90},[87,96912,96913],{"class":199},"#指定类型\n",[87,96915,96916,96918,96920,96922,96924,96926,96928],{"class":89,"line":101},[87,96917,96852],{"class":97},[87,96919,1414],{"class":104},[87,96921,1473],{"class":97},[87,96923,94426],{"class":492},[87,96925,946],{"class":171},[87,96927,1105],{"class":104},[87,96929,1108],{"class":97},[19,96931,96932],{},"②创建二维数组",[77,96934,96936],{"className":31325,"code":96935,"language":31327,"meta":82,"style":82},"np.zeros((3,4),dtype=int)\n",[84,96937,96938],{"__ignoreMap":82},[87,96939,96940,96943,96945,96947,96949,96951,96953,96955,96957],{"class":89,"line":90},[87,96941,96942],{"class":97},"np.zeros((",[87,96944,1170],{"class":104},[87,96946,1473],{"class":97},[87,96948,1389],{"class":104},[87,96950,43203],{"class":97},[87,96952,94426],{"class":492},[87,96954,946],{"class":171},[87,96956,1105],{"class":104},[87,96958,1108],{"class":97},[19,96960,96961],{},"③创建三维数组",[77,96963,96965],{"className":31325,"code":96964,"language":31327,"meta":82,"style":82},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[84,96966,96967,96972],{"__ignoreMap":82},[87,96968,96969],{"class":89,"line":90},[87,96970,96971],{"class":199},"#创建三维数组\n",[87,96973,96974,96976,96978,96980,96982,96984,96986,96988,96990,96992,96994],{"class":89,"line":101},[87,96975,96942],{"class":97},[87,96977,1170],{"class":104},[87,96979,1473],{"class":97},[87,96981,1389],{"class":104},[87,96983,1473],{"class":97},[87,96985,1414],{"class":104},[87,96987,43203],{"class":97},[87,96989,94426],{"class":492},[87,96991,946],{"class":171},[87,96993,1105],{"class":104},[87,96995,1108],{"class":97},[19,96997,96998],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[77,97000,97002],{"className":31325,"code":97001,"language":31327,"meta":82,"style":82},"#使用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",[84,97003,97004,97009,97024,97029,97034,97056],{"__ignoreMap":82},[87,97005,97006],{"class":89,"line":90},[87,97007,97008],{"class":199},"#使用zeros_like将创建的一维数组变成全0的数组\n",[87,97010,97011,97013,97015,97017,97019,97021],{"class":89,"line":101},[87,97012,1334],{"class":97},[87,97014,946],{"class":171},[87,97016,93928],{"class":97},[87,97018,1389],{"class":104},[87,97020,1524],{"class":97},[87,97022,97023],{"class":199},"#这个得到的结果：一维数组0，1，2，3\n",[87,97025,97026],{"class":89,"line":120},[87,97027,97028],{"class":97},"np.zeros_like(a)\n",[87,97030,97031],{"class":89,"line":222},[87,97032,97033],{"class":199},"#使用zeros_like将创建的二维数组变成全0的数组\n",[87,97035,97036,97038,97040,97042,97044,97046,97048,97050,97052,97054],{"class":89,"line":234},[87,97037,94232],{"class":97},[87,97039,946],{"class":171},[87,97041,96353],{"class":97},[87,97043,32443],{"class":492},[87,97045,946],{"class":171},[87,97047,165],{"class":97},[87,97049,1389],{"class":104},[87,97051,1473],{"class":97},[87,97053,1414],{"class":104},[87,97055,31444],{"class":97},[87,97057,97058],{"class":89,"line":256},[87,97059,97060],{"class":97},"np.zeros_like(aa)\n",[44,97062,97064],{"id":97063},"_262-ones创建数组","2.6.2 ones()创建数组",[19,97066,97067],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[44,97069,97071],{"id":97070},"_263-empty创建数组","2.6.3 empty()创建数组",[19,97073,97074],{},"①empty()用法",[77,97076,97078],{"className":31325,"code":97077,"language":31327,"meta":82,"style":82},"numpy.empty(shape,dtype=float,order='c')\n",[84,97079,97080],{"__ignoreMap":82},[87,97081,97082,97085,97087,97089,97091,97093,97095,97097,97099],{"class":89,"line":90},[87,97083,97084],{"class":97},"numpy.empty(shape,",[87,97086,94426],{"class":492},[87,97088,946],{"class":171},[87,97090,1141],{"class":104},[87,97092,1473],{"class":97},[87,97094,96223],{"class":492},[87,97096,946],{"class":171},[87,97098,76956],{"class":949},[87,97100,1108],{"class":97},[19,97102,97103],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,97105,97106],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,97108,97109],{},[39,97110],{"alt":82,"src":97111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,97113,97114],{},"②empty()用法",[77,97116,97118],{"className":31325,"code":97117,"language":31327,"meta":82,"style":82},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[84,97119,97120,97141,97153,97174,97179],{"__ignoreMap":82},[87,97121,97122,97124,97126,97129,97131,97133,97135,97137,97139],{"class":89,"line":90},[87,97123,1937],{"class":97},[87,97125,946],{"class":171},[87,97127,97128],{"class":97},"np.empty(",[87,97130,242],{"class":104},[87,97132,1473],{"class":97},[87,97134,94426],{"class":492},[87,97136,946],{"class":171},[87,97138,1105],{"class":104},[87,97140,1108],{"class":97},[87,97142,97143,97145,97147,97149,97151],{"class":89,"line":101},[87,97144,1912],{"class":97},[87,97146,946],{"class":171},[87,97148,93928],{"class":97},[87,97150,1414],{"class":104},[87,97152,1108],{"class":97},[87,97154,97155,97158,97160,97163,97165,97167,97170,97172],{"class":89,"line":120},[87,97156,97157],{"class":97},"np.add(",[87,97159,1176],{"class":104},[87,97161,97162],{"class":97},",x,",[87,97164,93980],{"class":492},[87,97166,946],{"class":171},[87,97168,97169],{"class":97},"y[:",[87,97171,1414],{"class":104},[87,97173,5610],{"class":97},[87,97175,97176],{"class":89,"line":222},[87,97177,97178],{"class":199},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[87,97180,97181],{"class":89,"line":234},[87,97182,97183],{"class":97},"y\n",[19,97185,12464],{},[19,97187,97188],{},[39,97189],{"alt":82,"src":97190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[77,97192,97194],{"className":31325,"code":97193,"language":31327,"meta":82,"style":82},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[84,97195,97196,97212,97232,97247],{"__ignoreMap":82},[87,97197,97198,97200,97202,97204,97206,97208,97210],{"class":89,"line":90},[87,97199,1912],{"class":97},[87,97201,946],{"class":171},[87,97203,93928],{"class":97},[87,97205,1313],{"class":104},[87,97207,1473],{"class":97},[87,97209,1439],{"class":104},[87,97211,1108],{"class":97},[87,97213,97214,97216,97218,97220,97222,97224,97226,97228,97230],{"class":89,"line":101},[87,97215,1937],{"class":97},[87,97217,946],{"class":171},[87,97219,97128],{"class":97},[87,97221,1414],{"class":104},[87,97223,1473],{"class":97},[87,97225,94426],{"class":492},[87,97227,946],{"class":171},[87,97229,1105],{"class":104},[87,97231,1108],{"class":97},[87,97233,97234,97237,97239,97241,97243,97245],{"class":89,"line":120},[87,97235,97236],{"class":97},"np.add(x,",[87,97238,1176],{"class":104},[87,97240,1473],{"class":97},[87,97242,93980],{"class":492},[87,97244,946],{"class":171},[87,97246,94375],{"class":97},[87,97248,97249],{"class":89,"line":222},[87,97250,97251],{"class":199},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,97253,97254],{},"③empty_like()",[19,97256,97257],{},[57,97258,97259,97260,97265],{},"创建一个",[57,97261,97262],{},[57,97263,97264],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,97267,97268,97271],{},[84,97269,97270],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,97273,97274],{},[39,97275],{"alt":82,"src":97276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[44,97278,97280],{"id":97279},"_264-用法","2.6.4 ？？用法",[19,97282,97283],{},"当想查看一个函数的参数时，可以通过？？来实现",[77,97285,97287],{"className":31325,"code":97286,"language":31327,"meta":82,"style":82},"np.full??\n",[84,97288,97289],{"__ignoreMap":82},[87,97290,97291,97294],{"class":89,"line":90},[87,97292,97293],{"class":97},"np.full",[87,97295,97296],{"class":78331},"??\n",[44,97298,97300],{"id":97299},"_265-full创建数组","2.6.5 full()创建数组",[77,97302,97304],{"className":31325,"code":97303,"language":31327,"meta":82,"style":82},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[84,97305,97306,97311],{"__ignoreMap":82},[87,97307,97308],{"class":89,"line":90},[87,97309,97310],{"class":97},"full(shape,fill_value)\n",[87,97312,97313],{"class":89,"line":101},[87,97314,97315],{"class":97},"创建全为某个指定值的数组\n",[19,97317,95456],{},[77,97319,97321],{"className":31325,"code":97320,"language":31327,"meta":82,"style":82},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[84,97322,97323,97328],{"__ignoreMap":82},[87,97324,97325],{"class":89,"line":90},[87,97326,97327],{"class":199},"#创建一个一维数组,以20进行填充\n",[87,97329,97330,97333,97335,97337,97339],{"class":89,"line":101},[87,97331,97332],{"class":97},"np.full(",[87,97334,242],{"class":104},[87,97336,1473],{"class":97},[87,97338,1792],{"class":104},[87,97340,1108],{"class":97},[19,97342,94217],{},[77,97344,97346],{"className":31325,"code":97345,"language":31327,"meta":82,"style":82},"#创建二维数组\nnp.full((3,5),11)\n",[84,97347,97348,97352],{"__ignoreMap":82},[87,97349,97350],{"class":89,"line":90},[87,97351,94873],{"class":199},[87,97353,97354,97357,97359,97361,97363,97365,97367],{"class":89,"line":101},[87,97355,97356],{"class":97},"np.full((",[87,97358,1170],{"class":104},[87,97360,1473],{"class":97},[87,97362,1414],{"class":104},[87,97364,43203],{"class":97},[87,97366,1566],{"class":104},[87,97368,1108],{"class":97},[19,97370,97371],{},"③full_like用法",[19,97373,97374],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,97376,97377],{},"这里是指定填充而已",[77,97379,97381],{"className":31325,"code":97380,"language":31327,"meta":82,"style":82},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[84,97382,97383,97388,97412,97417],{"__ignoreMap":82},[87,97384,97385],{"class":89,"line":90},[87,97386,97387],{"class":199},"#创建一个指定形状数组\n",[87,97389,97390,97392,97394,97396,97398,97400,97402,97404,97406,97408,97410],{"class":89,"line":101},[87,97391,1334],{"class":97},[87,97393,946],{"class":171},[87,97395,93928],{"class":97},[87,97397,1313],{"class":104},[87,97399,1473],{"class":97},[87,97401,1420],{"class":104},[87,97403,93933],{"class":97},[87,97405,1389],{"class":104},[87,97407,1473],{"class":97},[87,97409,1515],{"class":104},[87,97411,1108],{"class":97},[87,97413,97414],{"class":89,"line":120},[87,97415,97416],{"class":199},"#进行指定填充\n",[87,97418,97419,97422,97424],{"class":89,"line":222},[87,97420,97421],{"class":97},"np.full_like(a,",[87,97423,242],{"class":104},[87,97425,1108],{"class":97},[19,97427,12464],{},[19,97429,97430],{},[39,97431],{"alt":82,"src":97432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[44,97434,97436],{"id":97435},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[49,97438,97440],{"id":97439},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[77,97442,97444],{"className":31325,"code":97443,"language":31327,"meta":82,"style":82},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[84,97445,97446,97463],{"__ignoreMap":82},[87,97447,97448,97451,97453,97455,97457,97459,97461],{"class":89,"line":90},[87,97449,97450],{"class":97},"np.eye(",[87,97452,1389],{"class":104},[87,97454,1473],{"class":97},[87,97456,94426],{"class":492},[87,97458,946],{"class":171},[87,97460,1105],{"class":104},[87,97462,1108],{"class":97},[87,97464,97465],{"class":89,"line":101},[87,97466,97467],{"class":199},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[49,97469,97471],{"id":97470},"_2662-法2identity","2.6.6.2 法2：identity()",[77,97473,97475],{"className":31325,"code":97474,"language":31327,"meta":82,"style":82},"#identity()\nnp.identity(5,dtype=int)\n",[84,97476,97477,97482],{"__ignoreMap":82},[87,97478,97479],{"class":89,"line":90},[87,97480,97481],{"class":199},"#identity()\n",[87,97483,97484,97487,97489,97491,97493,97495,97497],{"class":89,"line":101},[87,97485,97486],{"class":97},"np.identity(",[87,97488,1414],{"class":104},[87,97490,1473],{"class":97},[87,97492,94426],{"class":492},[87,97494,946],{"class":171},[87,97496,1105],{"class":104},[87,97498,1108],{"class":97},[19,97500,97501],{},"两个函数是有区别的",[19,97503,97504],{},[39,97505],{"alt":82,"src":97506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,97508,97509],{},[39,97510],{"alt":82,"src":97511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[77,97513,97515],{"className":31325,"code":97514,"language":31327,"meta":82,"style":82},"# 创建一个 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",[84,97516,97517,97522,97534,97539,97544,97549,97554,97558,97563,97583,97587,97592,97597],{"__ignoreMap":82},[87,97518,97519],{"class":89,"line":90},[87,97520,97521],{"class":199},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[87,97523,97524,97526,97528,97530,97532],{"class":89,"line":101},[87,97525,97450],{"class":97},[87,97527,1170],{"class":104},[87,97529,13385],{"class":97},[87,97531,1389],{"class":104},[87,97533,1108],{"class":97},[87,97535,97536],{"class":89,"line":120},[87,97537,97538],{"class":199},"# 输出:\n",[87,97540,97541],{"class":89,"line":222},[87,97542,97543],{"class":199},"# [[1. 0. 0. 0.]\n",[87,97545,97546],{"class":89,"line":234},[87,97547,97548],{"class":199},"#  [0. 1. 0. 0.]\n",[87,97550,97551],{"class":89,"line":256},[87,97552,97553],{"class":199},"#  [0. 0. 1. 0.]]\n",[87,97555,97556],{"class":89,"line":269},[87,97557,3355],{"emptyLinePlaceholder":1029},[87,97559,97560],{"class":89,"line":463},[87,97561,97562],{"class":199},"# 对角线向上偏移1\n",[87,97564,97565,97567,97569,97571,97573,97575,97577,97579,97581],{"class":89,"line":469},[87,97566,97450],{"class":97},[87,97568,1170],{"class":104},[87,97570,13385],{"class":97},[87,97572,1389],{"class":104},[87,97574,13385],{"class":97},[87,97576,1587],{"class":492},[87,97578,946],{"class":171},[87,97580,1313],{"class":104},[87,97582,1108],{"class":97},[87,97584,97585],{"class":89,"line":2287},[87,97586,97538],{"class":199},[87,97588,97589],{"class":89,"line":2568},[87,97590,97591],{"class":199},"# [[0. 1. 0. 0.]\n",[87,97593,97594],{"class":89,"line":2573},[87,97595,97596],{"class":199},"#  [0. 0. 1. 0.]\n",[87,97598,97599],{"class":89,"line":2579},[87,97600,97601],{"class":199},"#  [0. 0. 0. 1.]]\n",[44,97603,97605],{"id":97604},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[77,97607,97609],{"className":31325,"code":97608,"language":31327,"meta":82,"style":82},"#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",[84,97610,97611,97616,97620,97625,97630,97635,97640,97645,97650,97655,97660],{"__ignoreMap":82},[87,97612,97613],{"class":89,"line":90},[87,97614,97615],{"class":199},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[87,97617,97618],{"class":89,"line":101},[87,97619,96624],{"class":949},[87,97621,97622],{"class":89,"line":120},[87,97623,97624],{"class":949},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[87,97626,97627],{"class":89,"line":222},[87,97628,97629],{"class":949},"参数介绍：\n",[87,97631,97632],{"class":89,"line":234},[87,97633,97634],{"class":949},"start：序列的起始值\n",[87,97636,97637],{"class":89,"line":256},[87,97638,97639],{"class":949},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[87,97641,97642],{"class":89,"line":269},[87,97643,97644],{"class":949},"num：要生长的等步长的样本数量，默认为50\n",[87,97646,97647],{"class":89,"line":463},[87,97648,97649],{"class":949},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[87,97651,97652],{"class":89,"line":469},[87,97653,97654],{"class":949},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[87,97656,97657],{"class":89,"line":2287},[87,97658,97659],{"class":949},"dtype：ndarry的数据类型\n",[87,97661,97662],{"class":89,"line":2568},[87,97663,96624],{"class":949},[19,97665,97666],{},[39,97667],{"alt":82,"src":97668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,97670,97671],{},"这里num=是可以省略的",[19,97673,97674],{},"也就是下方两行代码结果是一模一样的",[77,97676,97678],{"className":31325,"code":97677,"language":31327,"meta":82,"style":82},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[84,97679,97680,97697],{"__ignoreMap":82},[87,97681,97682,97685,97687,97689,97691,97693,97695],{"class":89,"line":90},[87,97683,97684],{"class":97},"np.linspace(",[87,97686,1313],{"class":104},[87,97688,1473],{"class":97},[87,97690,1414],{"class":104},[87,97692,1473],{"class":97},[87,97694,1414],{"class":104},[87,97696,1108],{"class":97},[87,97698,97699,97701,97703,97705,97707,97709,97711,97713,97715],{"class":89,"line":101},[87,97700,97684],{"class":97},[87,97702,1313],{"class":104},[87,97704,1473],{"class":97},[87,97706,1414],{"class":104},[87,97708,1473],{"class":97},[87,97710,2621],{"class":492},[87,97712,946],{"class":171},[87,97714,1414],{"class":104},[87,97716,1108],{"class":97},[44,97718,97720],{"id":97719},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[77,97722,97724],{"className":31325,"code":97723,"language":31327,"meta":82,"style":82},"#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",[84,97725,97726,97731,97735,97740,97745,97750,97755,97759,97764,97769,97773],{"__ignoreMap":82},[87,97727,97728],{"class":89,"line":90},[87,97729,97730],{"class":199},"#logspace函数用于创建一个等比数列，格式如下：\n",[87,97732,97733],{"class":89,"line":101},[87,97734,96624],{"class":949},[87,97736,97737],{"class":89,"line":120},[87,97738,97739],{"class":949},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[87,97741,97742],{"class":89,"line":222},[87,97743,97744],{"class":949},"参数为：\n",[87,97746,97747],{"class":89,"line":234},[87,97748,97749],{"class":949},"start:序列的起始位置为：base**start\n",[87,97751,97752],{"class":89,"line":256},[87,97753,97754],{"class":949},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[87,97756,97757],{"class":89,"line":269},[87,97758,97644],{"class":949},[87,97760,97761],{"class":89,"line":463},[87,97762,97763],{"class":949},"endpoint：是否包含 stop 这个值，默认是 True\n",[87,97765,97766],{"class":89,"line":469},[87,97767,97768],{"class":949},"base：对数的底数，默认是 10（常见对数）\n",[87,97770,97771],{"class":89,"line":2287},[87,97772,97659],{"class":949},[87,97774,97775],{"class":89,"line":2568},[87,97776,96624],{"class":949},[19,97778,97779],{},[39,97780],{"alt":82,"src":97781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,97783,97784],{},"logspace()函数中的num参数也是可以不写num=的",[19,97786,97787],{},"endpoint是不可以省略的",[1006,97789,97790],{},"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":82,"searchDepth":101,"depth":101,"links":97792},[97793,97797,97802,97806,97810,97811],{"id":96182,"depth":101,"text":96183,"children":97794},[97795,97796],{"id":96186,"depth":120,"text":96187},{"id":96259,"depth":120,"text":96260},{"id":96291,"depth":101,"text":96292,"children":97798},[97799,97800,97801],{"id":96295,"depth":120,"text":96296},{"id":96477,"depth":120,"text":96478},{"id":96555,"depth":120,"text":96556},{"id":96590,"depth":101,"text":96591,"children":97803},[97804,97805],{"id":96594,"depth":120,"text":96595},{"id":96651,"depth":120,"text":96652},{"id":96747,"depth":101,"text":96748,"children":97807},[97808,97809],{"id":96751,"depth":120,"text":96752},{"id":96763,"depth":120,"text":96764},{"id":96797,"depth":101,"text":96798},{"id":96834,"depth":101,"text":96835,"children":97812},[97813,97814,97815,97816,97817,97818,97819,97820],{"id":96838,"depth":120,"text":96839},{"id":97063,"depth":120,"text":97064},{"id":97070,"depth":120,"text":97071},{"id":97279,"depth":120,"text":97280},{"id":97299,"depth":120,"text":97300},{"id":97435,"depth":120,"text":97436},{"id":97604,"depth":120,"text":97605},{"id":97719,"depth":120,"text":97720},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96174,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97827,"title":97828,"body":97829,"description":1026,"extension":1027,"meta":97922,"navigation":1029,"path":97923,"seo":97924,"stem":97925,"__hash__":97926},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97830,"toc":97920},[97831,97834,97837,97840,97843,97846,97849,97852,97855,97858,97861,97864,97866,97869,97872,97877,97880,97883,97917],[10,97832,97828],{"id":97833},"_20魔法命令mprun",[19,97835,97836],{},"逐行分析数据内存的使用情况",[19,97838,97839],{},"语法格式：",[19,97841,97842],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97844,97845],{},"分析结果列如下：",[19,97847,97848],{},"Line行号",[19,97850,97851],{},"Mem usage内存使用大小",[19,97853,97854],{},"increment内存增量",[19,97856,97857],{},"Line content代码内容",[19,97859,97860],{},"补充说明：",[19,97862,97863],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97865,96129],{},[19,97867,97868],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97870,97871],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97873,97874],{},[39,97875],{"alt":82,"src":97876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97878,97879],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97881,97882],{},"这时候需要重新加载模块",[77,97884,97886],{"className":31325,"code":97885,"language":31327,"meta":82,"style":82},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[84,97887,97888,97893,97900,97905],{"__ignoreMap":82},[87,97889,97890],{"class":89,"line":90},[87,97891,97892],{"class":199},"#重新加载模块\n",[87,97894,97895,97897],{"class":89,"line":101},[87,97896,31339],{"class":171},[87,97898,97899],{"class":97}," importlib\n",[87,97901,97902],{"class":89,"line":120},[87,97903,97904],{"class":97},"importlib.reload(mprun_test)\n",[87,97906,97907,97909,97912,97914],{"class":89,"line":222},[87,97908,1423],{"class":171},[87,97910,97911],{"class":97},"mprun ",[87,97913,1625],{"class":171},[87,97915,97916],{"class":97},"f mprun_test.fun_test mprun_test.fun_test()\n",[1006,97918,97919],{},"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":82,"searchDepth":101,"depth":101,"links":97921},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97828,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97928,"title":97929,"body":97930,"description":1026,"extension":1027,"meta":97947,"navigation":1029,"path":97948,"seo":97949,"stem":97950,"__hash__":97951},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97931,"toc":97945},[97932,97935,97940],[10,97933,97929],{"id":97934},"_3一维数组的索引和切片",[19,97936,97937],{},[39,97938],{"alt":82,"src":97939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97941,97942],{},[39,97943],{"alt":82,"src":97944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":82,"searchDepth":101,"depth":101,"links":97946},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97929,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97953,"title":97954,"body":97955,"description":1026,"extension":1027,"meta":98438,"navigation":1029,"path":98439,"seo":98440,"stem":98441,"__hash__":98442},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97956,"toc":98436},[97957,97960,97963,97968,98001,98004,98042,98045,98079,98082,98187,98190,98227,98230,98331,98334,98385,98388,98430,98433],[10,97958,97954],{"id":97959},"_4二维数组的索引与切片",[19,97961,97962],{},"①获取指定单个元素",[19,97964,97965],{},[39,97966],{"alt":82,"src":97967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[77,97969,97971],{"className":31325,"code":97970,"language":31327,"meta":82,"style":82},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[84,97972,97973,97978,97983,97988],{"__ignoreMap":82},[87,97974,97975],{"class":89,"line":90},[87,97976,97977],{"class":199},"#获取元素9\n",[87,97979,97980],{"class":89,"line":101},[87,97981,97982],{"class":199},"#先获取所在行，再获取所在列\n",[87,97984,97985],{"class":89,"line":120},[87,97986,97987],{"class":199},"#数组[行索引号，列索引号]\n",[87,97989,97990,97993,97995,97997,97999],{"class":89,"line":222},[87,97991,97992],{"class":97},"a[",[87,97994,1313],{"class":104},[87,97996,1473],{"class":97},[87,97998,1176],{"class":104},[87,98000,34193],{"class":97},[19,98002,98003],{},"②获取整行元素",[77,98005,98007],{"className":31325,"code":98006,"language":31327,"meta":82,"style":82},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[84,98008,98009,98014,98019,98027,98032],{"__ignoreMap":82},[87,98010,98011],{"class":89,"line":90},[87,98012,98013],{"class":199},"#获取整行 数组[行索引号]\n",[87,98015,98016],{"class":89,"line":101},[87,98017,98018],{"class":199},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[87,98020,98021,98023,98025],{"class":89,"line":120},[87,98022,97992],{"class":97},[87,98024,1176],{"class":104},[87,98026,34193],{"class":97},[87,98028,98029],{"class":89,"line":222},[87,98030,98031],{"class":199},"#也可以负索引获取一行\n",[87,98033,98034,98036,98038,98040],{"class":89,"line":234},[87,98035,97992],{"class":97},[87,98037,1625],{"class":171},[87,98039,1313],{"class":104},[87,98041,34193],{"class":97},[19,98043,98044],{},"③获取整列元素",[77,98046,98048],{"className":31325,"code":98047,"language":31327,"meta":82,"style":82},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[84,98049,98050,98055,98064,98069],{"__ignoreMap":82},[87,98051,98052],{"class":89,"line":90},[87,98053,98054],{"class":199},"#获取整列 数组名[:,列索引]\n",[87,98056,98057,98060,98062],{"class":89,"line":101},[87,98058,98059],{"class":97},"a[:,",[87,98061,1176],{"class":104},[87,98063,34193],{"class":97},[87,98065,98066],{"class":89,"line":120},[87,98067,98068],{"class":199},"#也可以负索引获取一列\n",[87,98070,98071,98073,98075,98077],{"class":89,"line":222},[87,98072,98059],{"class":97},[87,98074,1625],{"class":171},[87,98076,1313],{"class":104},[87,98078,34193],{"class":97},[19,98080,98081],{},"④部分行部分列的元素",[77,98083,98085],{"className":31325,"code":98084,"language":31327,"meta":82,"style":82},"#部分行部分列 数组名[行切片，列切片]\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",[84,98086,98087,98092,98102,98106,98110,98115,98120,98124,98136,98140,98144,98149,98154,98159,98164,98168,98173],{"__ignoreMap":82},[87,98088,98089],{"class":89,"line":90},[87,98090,98091],{"class":199},"#部分行部分列 数组名[行切片，列切片]\n",[87,98093,98094,98097,98099],{"class":89,"line":101},[87,98095,98096],{"class":97},"a[:",[87,98098,1176],{"class":104},[87,98100,98101],{"class":97},",:]\n",[87,98103,98104],{"class":89,"line":120},[87,98105,94490],{"class":199},[87,98107,98108],{"class":89,"line":222},[87,98109,94854],{"class":949},[87,98111,98112],{"class":89,"line":234},[87,98113,98114],{"class":949},"array([[ 1,  2,  3,  4,  5,  6],\n",[87,98116,98117],{"class":89,"line":256},[87,98118,98119],{"class":949},"       [ 7,  8,  9, 10, 11, 12]])\n",[87,98121,98122],{"class":89,"line":269},[87,98123,94854],{"class":949},[87,98125,98126,98128,98130,98132,98134],{"class":89,"line":463},[87,98127,98059],{"class":97},[87,98129,1313],{"class":104},[87,98131,1951],{"class":97},[87,98133,1389],{"class":104},[87,98135,34193],{"class":97},[87,98137,98138],{"class":89,"line":469},[87,98139,94490],{"class":199},[87,98141,98142],{"class":89,"line":2287},[87,98143,94854],{"class":949},[87,98145,98146],{"class":89,"line":2568},[87,98147,98148],{"class":949},"array([[ 2,  3,  4],\n",[87,98150,98151],{"class":89,"line":2573},[87,98152,98153],{"class":949},"       [ 8,  9, 10],\n",[87,98155,98156],{"class":89,"line":2579},[87,98157,98158],{"class":949},"       [14, 15, 16],\n",[87,98160,98161],{"class":89,"line":2584},[87,98162,98163],{"class":949},"       [20, 21, 22]])\n",[87,98165,98166],{"class":89,"line":2598},[87,98167,94854],{"class":949},[87,98169,98170],{"class":89,"line":2603},[87,98171,98172],{"class":199},"#对列行同时进行切片，使用了step参数\n",[87,98174,98175,98178,98180,98183,98185],{"class":89,"line":2609},[87,98176,98177],{"class":97},"a[::",[87,98179,1176],{"class":104},[87,98181,98182],{"class":97},",::",[87,98184,1176],{"class":104},[87,98186,34193],{"class":97},[19,98188,98189],{},"⑤同时获取两个元素",[77,98191,98193],{"className":31325,"code":98192,"language":31327,"meta":82,"style":82},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[84,98194,98195,98200,98205],{"__ignoreMap":82},[87,98196,98197],{"class":89,"line":90},[87,98198,98199],{"class":199},"#同时获取第三行第二列，第四行第一列\n",[87,98201,98202],{"class":89,"line":101},[87,98203,98204],{"class":199},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[87,98206,98207,98210,98212,98214,98216,98218,98220,98222,98224],{"class":89,"line":120},[87,98208,98209],{"class":97},"a[(",[87,98211,1176],{"class":104},[87,98213,1473],{"class":97},[87,98215,1170],{"class":104},[87,98217,43194],{"class":97},[87,98219,1313],{"class":104},[87,98221,1473],{"class":97},[87,98223,111],{"class":104},[87,98225,98226],{"class":97},")]\n",[19,98228,98229],{},"⑥切片，对行进行反向获取",[77,98231,98233],{"className":31325,"code":98232,"language":31327,"meta":82,"style":82},"#切片 对所有行进行反向获取\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",[84,98234,98235,98240,98250,98254,98258,98263,98268,98273,98278,98282,98287,98303,98307,98312,98317,98322,98327],{"__ignoreMap":82},[87,98236,98237],{"class":89,"line":90},[87,98238,98239],{"class":199},"#切片 对所有行进行反向获取\n",[87,98241,98242,98244,98246,98248],{"class":89,"line":101},[87,98243,98177],{"class":97},[87,98245,1625],{"class":171},[87,98247,1313],{"class":104},[87,98249,34193],{"class":97},[87,98251,98252],{"class":89,"line":120},[87,98253,94490],{"class":199},[87,98255,98256],{"class":89,"line":222},[87,98257,94854],{"class":949},[87,98259,98260],{"class":89,"line":234},[87,98261,98262],{"class":949},"array([[19, 20, 21, 22, 23, 24],\n",[87,98264,98265],{"class":89,"line":256},[87,98266,98267],{"class":949},"       [13, 14, 15, 16, 17, 18],\n",[87,98269,98270],{"class":89,"line":269},[87,98271,98272],{"class":949},"       [ 7,  8,  9, 10, 11, 12],\n",[87,98274,98275],{"class":89,"line":463},[87,98276,98277],{"class":949},"       [ 1,  2,  3,  4,  5,  6]])\n",[87,98279,98280],{"class":89,"line":469},[87,98281,94854],{"class":949},[87,98283,98284],{"class":89,"line":2287},[87,98285,98286],{"class":199},"#对行列都进行反向切片获取\n",[87,98288,98289,98291,98293,98295,98297,98299,98301],{"class":89,"line":2568},[87,98290,98177],{"class":97},[87,98292,1625],{"class":171},[87,98294,1313],{"class":104},[87,98296,98182],{"class":97},[87,98298,1625],{"class":171},[87,98300,1313],{"class":104},[87,98302,34193],{"class":97},[87,98304,98305],{"class":89,"line":2573},[87,98306,94854],{"class":949},[87,98308,98309],{"class":89,"line":2579},[87,98310,98311],{"class":949},"array([[24, 23, 22, 21, 20, 19],\n",[87,98313,98314],{"class":89,"line":2584},[87,98315,98316],{"class":949},"       [18, 17, 16, 15, 14, 13],\n",[87,98318,98319],{"class":89,"line":2598},[87,98320,98321],{"class":949},"       [12, 11, 10,  9,  8,  7],\n",[87,98323,98324],{"class":89,"line":2603},[87,98325,98326],{"class":949},"       [ 6,  5,  4,  3,  2,  1]])\n",[87,98328,98329],{"class":89,"line":2609},[87,98330,94854],{"class":949},[19,98332,98333],{},"⑦修改元素",[77,98335,98337],{"className":31325,"code":98336,"language":31327,"meta":82,"style":82},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[84,98338,98339,98344,98362,98367],{"__ignoreMap":82},[87,98340,98341],{"class":89,"line":90},[87,98342,98343],{"class":199},"#获取前两行和前两列\n",[87,98345,98346,98349,98351,98353,98355,98358,98360],{"class":89,"line":101},[87,98347,98348],{"class":97},"sub_a",[87,98350,946],{"class":171},[87,98352,98096],{"class":97},[87,98354,1176],{"class":104},[87,98356,98357],{"class":97},",:",[87,98359,1176],{"class":104},[87,98361,34193],{"class":97},[87,98363,98364],{"class":89,"line":120},[87,98365,98366],{"class":199},"#修改sub_a第一个元素的值\n",[87,98368,98369,98372,98374,98376,98378,98380,98382],{"class":89,"line":222},[87,98370,98371],{"class":97},"sub_a[",[87,98373,111],{"class":104},[87,98375,1473],{"class":97},[87,98377,111],{"class":104},[87,98379,2031],{"class":97},[87,98381,946],{"class":171},[87,98383,98384],{"class":104},"100\n",[19,98386,98387],{},"⑧数组复制copy()",[77,98389,98391],{"className":31325,"code":98390,"language":31327,"meta":82,"style":82},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[84,98392,98393,98398,98408,98413],{"__ignoreMap":82},[87,98394,98395],{"class":89,"line":90},[87,98396,98397],{"class":199},"#数组复制\n",[87,98399,98400,98403,98405],{"class":89,"line":101},[87,98401,98402],{"class":97},"copy_a",[87,98404,946],{"class":171},[87,98406,98407],{"class":97},"np.copy(sub_a)\n",[87,98409,98410],{"class":89,"line":120},[87,98411,98412],{"class":199},"#修改copy_a后不影响原数组\n",[87,98414,98415,98418,98420,98422,98424,98426,98428],{"class":89,"line":222},[87,98416,98417],{"class":97},"copy_a[",[87,98419,111],{"class":104},[87,98421,1473],{"class":97},[87,98423,111],{"class":104},[87,98425,2031],{"class":97},[87,98427,946],{"class":171},[87,98429,98384],{"class":104},[19,98431,98432],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1006,98434,98435],{},"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":82,"searchDepth":101,"depth":101,"links":98437},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97954,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98444,"title":98445,"body":98446,"description":1026,"extension":1027,"meta":98938,"navigation":1029,"path":98939,"seo":98940,"stem":98941,"__hash__":98942},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98447,"toc":98930},[98448,98451,98455,98458,98461,98514,98517,98542,98545,98564,98584,98587,98603,98607,98653,98657,98699,98703,98706,98709,98712,98715,98718,98780,98840,98844,98847,98904,98908,98913,98922,98927],[10,98449,98445],{"id":98450},"_5改变数组的维度",[14,98452,98454],{"id":98453},"_51-使用reshape","5.1 使用reshape()",[19,98456,98457],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,98459,98460],{},"①一维数组转换为二维数组",[77,98462,98464],{"className":31325,"code":98463,"language":31327,"meta":82,"style":82},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[84,98465,98466,98482,98487,98492,98497],{"__ignoreMap":82},[87,98467,98468,98470,98472,98474,98476,98478,98480],{"class":89,"line":90},[87,98469,1334],{"class":97},[87,98471,946],{"class":171},[87,98473,93928],{"class":97},[87,98475,1313],{"class":104},[87,98477,1473],{"class":97},[87,98479,1617],{"class":104},[87,98481,1108],{"class":97},[87,98483,98484],{"class":89,"line":101},[87,98485,98486],{"class":199},"#将一维数组进行转换\n",[87,98488,98489],{"class":89,"line":120},[87,98490,98491],{"class":199},"#注意点：元素个数不可以变\n",[87,98493,98494],{"class":89,"line":222},[87,98495,98496],{"class":199},"#转换维度要保持一致，不一致就异常！！！\n",[87,98498,98499,98501,98503,98506,98508,98510,98512],{"class":89,"line":234},[87,98500,94232],{"class":97},[87,98502,946],{"class":171},[87,98504,98505],{"class":97},"a.reshape(",[87,98507,1176],{"class":104},[87,98509,1473],{"class":97},[87,98511,1439],{"class":104},[87,98513,1108],{"class":97},[19,98515,98516],{},"②一维数组转换为三维数组",[77,98518,98520],{"className":31325,"code":98519,"language":31327,"meta":82,"style":82},"aaa=a.reshape(2,3,2)\n",[84,98521,98522],{"__ignoreMap":82},[87,98523,98524,98526,98528,98530,98532,98534,98536,98538,98540],{"class":89,"line":90},[87,98525,96447],{"class":97},[87,98527,946],{"class":171},[87,98529,98505],{"class":97},[87,98531,1176],{"class":104},[87,98533,1473],{"class":97},[87,98535,1170],{"class":104},[87,98537,1473],{"class":97},[87,98539,1176],{"class":104},[87,98541,1108],{"class":97},[19,98543,98544],{},"③二维数组转化为一维数组",[77,98546,98548],{"className":31325,"code":98547,"language":31327,"meta":82,"style":82},"#知道元素个数：\naa.reshape(12)\n",[84,98549,98550,98555],{"__ignoreMap":82},[87,98551,98552],{"class":89,"line":90},[87,98553,98554],{"class":199},"#知道元素个数：\n",[87,98556,98557,98560,98562],{"class":89,"line":101},[87,98558,98559],{"class":97},"aa.reshape(",[87,98561,1592],{"class":104},[87,98563,1108],{"class":97},[77,98565,98567],{"className":31325,"code":98566,"language":31327,"meta":82,"style":82},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[84,98568,98569,98574],{"__ignoreMap":82},[87,98570,98571],{"class":89,"line":90},[87,98572,98573],{"class":199},"#不知道元素个数，参数传递-1\n",[87,98575,98576,98578,98580,98582],{"class":89,"line":101},[87,98577,98559],{"class":97},[87,98579,1625],{"class":171},[87,98581,1313],{"class":104},[87,98583,1108],{"class":97},[19,98585,98586],{},"④三维数组转换为一维数组",[77,98588,98590],{"className":31325,"code":98589,"language":31327,"meta":82,"style":82},"aaa.reshape(-1)\n",[84,98591,98592],{"__ignoreMap":82},[87,98593,98594,98597,98599,98601],{"class":89,"line":90},[87,98595,98596],{"class":97},"aaa.reshape(",[87,98598,1625],{"class":171},[87,98600,1313],{"class":104},[87,98602,1108],{"class":97},[14,98604,98606],{"id":98605},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[77,98608,98610],{"className":31325,"code":98609,"language":31327,"meta":82,"style":82},"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",[84,98611,98612,98639,98644,98648],{"__ignoreMap":82},[87,98613,98614,98616,98618,98620,98622,98624,98626,98628,98630,98632,98634,98636],{"class":89,"line":90},[87,98615,94232],{"class":97},[87,98617,946],{"class":171},[87,98619,93928],{"class":97},[87,98621,1313],{"class":104},[87,98623,1473],{"class":97},[87,98625,1617],{"class":104},[87,98627,93933],{"class":97},[87,98629,1176],{"class":104},[87,98631,1473],{"class":97},[87,98633,1439],{"class":104},[87,98635,1524],{"class":97},[87,98637,98638],{"class":199},"#转换为2行6列的数组\n",[87,98640,98641],{"class":89,"line":101},[87,98642,98643],{"class":97},"aa.revel()\n",[87,98645,98646],{"class":89,"line":120},[87,98647,94490],{"class":199},[87,98649,98650],{"class":89,"line":222},[87,98651,98652],{"class":199},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,98654,98656],{"id":98655},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[77,98658,98660],{"className":31325,"code":98659,"language":31327,"meta":82,"style":82},"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",[84,98661,98662,98686,98691,98695],{"__ignoreMap":82},[87,98663,98664,98666,98668,98670,98672,98674,98676,98678,98680,98682,98684],{"class":89,"line":90},[87,98665,94232],{"class":97},[87,98667,946],{"class":171},[87,98669,93928],{"class":97},[87,98671,1313],{"class":104},[87,98673,1473],{"class":97},[87,98675,1617],{"class":104},[87,98677,93933],{"class":97},[87,98679,1176],{"class":104},[87,98681,1473],{"class":97},[87,98683,1439],{"class":104},[87,98685,1108],{"class":97},[87,98687,98688],{"class":89,"line":101},[87,98689,98690],{"class":97},"aa.flatten()\n",[87,98692,98693],{"class":89,"line":120},[87,98694,94490],{"class":199},[87,98696,98697],{"class":89,"line":222},[87,98698,98652],{"class":199},[14,98700,98702],{"id":98701},"_54-使用resize","5.4 使用resize()",[19,98704,98705],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,98707,98708],{},"通过resize方法可以改变数组的维度",[19,98710,98711],{},"#resize修改数组维度",[19,98713,98714],{},"#以元组的形式指定形状",[19,98716,98717],{},"#改变的是原数组",[77,98719,98721],{"className":31325,"code":98720,"language":31327,"meta":82,"style":82},"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",[84,98722,98723,98739,98759,98772,98776],{"__ignoreMap":82},[87,98724,98725,98727,98729,98731,98733,98735,98737],{"class":89,"line":90},[87,98726,1334],{"class":97},[87,98728,946],{"class":171},[87,98730,93928],{"class":97},[87,98732,1313],{"class":104},[87,98734,1473],{"class":97},[87,98736,1617],{"class":104},[87,98738,1108],{"class":97},[87,98740,98741,98744,98746,98748,98750,98752,98754,98756],{"class":89,"line":101},[87,98742,98743],{"class":97},"a.shape",[87,98745,946],{"class":171},[87,98747,165],{"class":97},[87,98749,1176],{"class":104},[87,98751,1473],{"class":97},[87,98753,1439],{"class":104},[87,98755,1524],{"class":97},[87,98757,98758],{"class":199},"#改变了原数组\n",[87,98760,98761,98763,98765,98768,98770],{"class":89,"line":120},[87,98762,1334],{"class":97},[87,98764,946],{"class":171},[87,98766,98767],{"class":97},"resize((",[87,98769,1592],{"class":104},[87,98771,31444],{"class":97},[87,98773,98774],{"class":89,"line":222},[87,98775,94490],{"class":199},[87,98777,98778],{"class":89,"line":234},[87,98779,98652],{"class":199},[77,98781,98783],{"className":31325,"code":98782,"language":31327,"meta":82,"style":82},"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",[84,98784,98785,98798,98802,98806,98811,98816,98821,98826,98831,98836],{"__ignoreMap":82},[87,98786,98787,98790,98792,98794,98796],{"class":89,"line":90},[87,98788,98789],{"class":97},"a.resize((",[87,98791,1439],{"class":104},[87,98793,1473],{"class":97},[87,98795,1176],{"class":104},[87,98797,31444],{"class":97},[87,98799,98800],{"class":89,"line":101},[87,98801,94490],{"class":199},[87,98803,98804],{"class":89,"line":120},[87,98805,94854],{"class":949},[87,98807,98808],{"class":89,"line":222},[87,98809,98810],{"class":949},"array([[ 1,  2],\n",[87,98812,98813],{"class":89,"line":234},[87,98814,98815],{"class":949},"       [ 3,  4],\n",[87,98817,98818],{"class":89,"line":256},[87,98819,98820],{"class":949},"       [ 5,  6],\n",[87,98822,98823],{"class":89,"line":269},[87,98824,98825],{"class":949},"       [ 7,  8],\n",[87,98827,98828],{"class":89,"line":463},[87,98829,98830],{"class":949},"       [ 9, 10],\n",[87,98832,98833],{"class":89,"line":469},[87,98834,98835],{"class":949},"       [11, 12]])\n",[87,98837,98838],{"class":89,"line":2287},[87,98839,94854],{"class":949},[14,98841,98843],{"id":98842},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,98845,98846],{},"改变了原数组",[77,98848,98850],{"className":31325,"code":98849,"language":31327,"meta":82,"style":82},"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",[84,98851,98852,98868,98884,98888,98892,98896,98900],{"__ignoreMap":82},[87,98853,98854,98856,98858,98860,98862,98864,98866],{"class":89,"line":90},[87,98855,1334],{"class":97},[87,98857,946],{"class":171},[87,98859,93928],{"class":97},[87,98861,1313],{"class":104},[87,98863,1473],{"class":97},[87,98865,1617],{"class":104},[87,98867,1108],{"class":97},[87,98869,98870,98872,98874,98876,98878,98880,98882],{"class":89,"line":101},[87,98871,98743],{"class":97},[87,98873,946],{"class":171},[87,98875,165],{"class":97},[87,98877,1176],{"class":104},[87,98879,1473],{"class":97},[87,98881,1439],{"class":104},[87,98883,1108],{"class":97},[87,98885,98886],{"class":89,"line":120},[87,98887,94490],{"class":199},[87,98889,98890],{"class":89,"line":222},[87,98891,94854],{"class":949},[87,98893,98894],{"class":89,"line":234},[87,98895,98114],{"class":949},[87,98897,98898],{"class":89,"line":256},[87,98899,98119],{"class":949},[87,98901,98902],{"class":89,"line":269},[87,98903,94854],{"class":949},[14,98905,98907],{"id":98906},"_56-重要比较","5.6 重要比较：",[19,98909,98910],{},[39,98911],{"alt":82,"src":98912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98914,98915,98916,98918,98919,98921],{},"口诀：NumPy 函数要么用 ",[84,98917,96889],{},"，要么用 ",[84,98920,32443],{},"，创建结构用 shape，造数据用 size",[19,98923,98924],{},[39,98925],{"alt":82,"src":98926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1006,98928,98929],{},"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":82,"searchDepth":101,"depth":101,"links":98931},[98932,98933,98934,98935,98936,98937],{"id":98453,"depth":101,"text":98454},{"id":98605,"depth":101,"text":98606},{"id":98655,"depth":101,"text":98656},{"id":98701,"depth":101,"text":98702},{"id":98842,"depth":101,"text":98843},{"id":98906,"depth":101,"text":98907},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98445,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98944,"title":98945,"body":98946,"description":1026,"extension":1027,"meta":100018,"navigation":1029,"path":100019,"seo":100020,"stem":100021,"__hash__":100022},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98947,"toc":100012},[98948,98951,98955,98958,98961,98964,99029,99032,99072,99075,99157,99160,99165,99187,99189,99194,99199,99202,99205,99360,99363,99565,99569,99572,99575,99643,99645,99650,99653,99656,99736,99740,99743,99745,99818,99820,99825,99827,99907,99911,99914,99917,99920,99923,99926,99929,100009],[10,98949,98945],{"id":98950},"_6数组的拼接",[14,98952,98954],{"id":98953},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98956,98957],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98959,98960],{},"函数内部传两个数列构成的数列或者元组",[19,98962,98963],{},"①一维数组的拼接",[77,98965,98967],{"className":31325,"code":98966,"language":31327,"meta":82,"style":82},"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",[84,98968,98969,98989,99009,99014,99019,99024],{"__ignoreMap":82},[87,98970,98971,98973,98975,98977,98979,98981,98983,98985,98987],{"class":89,"line":90},[87,98972,1334],{"class":97},[87,98974,946],{"class":171},[87,98976,93950],{"class":97},[87,98978,1313],{"class":104},[87,98980,1473],{"class":97},[87,98982,1176],{"class":104},[87,98984,1473],{"class":97},[87,98986,1170],{"class":104},[87,98988,5610],{"class":97},[87,98990,98991,98993,98995,98997,98999,99001,99003,99005,99007],{"class":89,"line":101},[87,98992,1359],{"class":97},[87,98994,946],{"class":171},[87,98996,93950],{"class":97},[87,98998,1389],{"class":104},[87,99000,1473],{"class":97},[87,99002,1414],{"class":104},[87,99004,1473],{"class":97},[87,99006,1439],{"class":104},[87,99008,5610],{"class":97},[87,99010,99011],{"class":89,"line":120},[87,99012,99013],{"class":199},"#调用concatenate进行数组拼接\n",[87,99015,99016],{"class":89,"line":222},[87,99017,99018],{"class":97},"np.concatenate((a,b))\n",[87,99020,99021],{"class":89,"line":234},[87,99022,99023],{"class":199},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[87,99025,99026],{"class":89,"line":256},[87,99027,99028],{"class":199},"#np.concatenate([a,b])\n",[19,99030,99031],{},"②一维多个数组拼接",[77,99033,99035],{"className":31325,"code":99034,"language":31327,"meta":82,"style":82},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[84,99036,99037,99042,99062,99067],{"__ignoreMap":82},[87,99038,99039],{"class":89,"line":90},[87,99040,99041],{"class":199},"#也可以多个数组进行拼接\n",[87,99043,99044,99046,99048,99050,99052,99054,99056,99058,99060],{"class":89,"line":101},[87,99045,1384],{"class":97},[87,99047,946],{"class":171},[87,99049,93950],{"class":97},[87,99051,242],{"class":104},[87,99053,1473],{"class":97},[87,99055,1566],{"class":104},[87,99057,1473],{"class":97},[87,99059,1617],{"class":104},[87,99061,5610],{"class":97},[87,99063,99064],{"class":89,"line":120},[87,99065,99066],{"class":97},"c\n",[87,99068,99069],{"class":89,"line":222},[87,99070,99071],{"class":97},"np.concatenate((a,b,c))\n",[19,99073,99074],{},"③二维数组拼接",[77,99076,99078],{"className":31325,"code":99077,"language":31327,"meta":82,"style":82},"#二维数组使用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",[84,99079,99080,99085,99109,99134,99139,99144],{"__ignoreMap":82},[87,99081,99082],{"class":89,"line":90},[87,99083,99084],{"class":199},"#二维数组使用concatenate进行拼接\n",[87,99086,99087,99089,99091,99093,99095,99097,99099,99101,99103,99105,99107],{"class":89,"line":101},[87,99088,94232],{"class":97},[87,99090,946],{"class":171},[87,99092,93928],{"class":97},[87,99094,1313],{"class":104},[87,99096,1473],{"class":97},[87,99098,1617],{"class":104},[87,99100,93933],{"class":97},[87,99102,1170],{"class":104},[87,99104,1473],{"class":97},[87,99106,1389],{"class":104},[87,99108,1108],{"class":97},[87,99110,99111,99114,99116,99118,99120,99122,99124,99126,99128,99130,99132],{"class":89,"line":120},[87,99112,99113],{"class":97},"bb",[87,99115,946],{"class":171},[87,99117,93928],{"class":97},[87,99119,1432],{"class":104},[87,99121,1473],{"class":97},[87,99123,1735],{"class":104},[87,99125,93933],{"class":97},[87,99127,1170],{"class":104},[87,99129,1473],{"class":97},[87,99131,1389],{"class":104},[87,99133,1108],{"class":97},[87,99135,99136],{"class":89,"line":222},[87,99137,99138],{"class":199},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[87,99140,99141],{"class":89,"line":234},[87,99142,99143],{"class":199},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[87,99145,99146,99149,99151,99153,99155],{"class":89,"line":256},[87,99147,99148],{"class":97},"np.concatenate((aa,bb),",[87,99150,48461],{"class":492},[87,99152,946],{"class":171},[87,99154,111],{"class":104},[87,99156,1108],{"class":97},[19,99158,99159],{},"结果：",[19,99161,99162],{},[39,99163],{"alt":82,"src":99164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[77,99166,99168],{"className":31325,"code":99167,"language":31327,"meta":82,"style":82},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[84,99169,99170,99175],{"__ignoreMap":82},[87,99171,99172],{"class":89,"line":90},[87,99173,99174],{"class":199},"#指定axis为1进行拼接\n",[87,99176,99177,99179,99181,99183,99185],{"class":89,"line":101},[87,99178,99148],{"class":97},[87,99180,48461],{"class":492},[87,99182,946],{"class":171},[87,99184,1313],{"class":104},[87,99186,1108],{"class":97},[19,99188,99159],{},[19,99190,99191],{},[39,99192],{"alt":82,"src":99193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,99195,99196],{},[57,99197,99198],{},"二维数组总结：0竖着方向，1横着方向",[19,99200,99201],{},"④三维数组拼接",[19,99203,99204],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[77,99206,99208],{"className":31325,"code":99207,"language":31327,"meta":82,"style":82},"#两个三行六列\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",[84,99209,99210,99215,99243,99273,99278,99295,99300,99305,99310,99327,99332,99337,99342,99355],{"__ignoreMap":82},[87,99211,99212],{"class":89,"line":90},[87,99213,99214],{"class":199},"#两个三行六列\n",[87,99216,99217,99219,99221,99223,99225,99227,99229,99231,99233,99235,99237,99239,99241],{"class":89,"line":101},[87,99218,96447],{"class":97},[87,99220,946],{"class":171},[87,99222,93928],{"class":97},[87,99224,1313],{"class":104},[87,99226,1473],{"class":97},[87,99228,1420],{"class":104},[87,99230,93933],{"class":97},[87,99232,1176],{"class":104},[87,99234,1473],{"class":97},[87,99236,1170],{"class":104},[87,99238,1473],{"class":97},[87,99240,1439],{"class":104},[87,99242,1108],{"class":97},[87,99244,99245,99248,99250,99252,99254,99256,99259,99261,99263,99265,99267,99269,99271],{"class":89,"line":120},[87,99246,99247],{"class":97},"bbb",[87,99249,946],{"class":171},[87,99251,93928],{"class":97},[87,99253,1432],{"class":104},[87,99255,1473],{"class":97},[87,99257,99258],{"class":104},"137",[87,99260,93933],{"class":97},[87,99262,1176],{"class":104},[87,99264,1473],{"class":97},[87,99266,1170],{"class":104},[87,99268,1473],{"class":97},[87,99270,1439],{"class":104},[87,99272,1108],{"class":97},[87,99274,99275],{"class":89,"line":222},[87,99276,99277],{"class":199},"#axis=0\n",[87,99279,99280,99282,99284,99287,99289,99291,99293],{"class":89,"line":234},[87,99281,571],{"class":97},[87,99283,946],{"class":171},[87,99285,99286],{"class":97},"np.concatenate((aaa,bbb),",[87,99288,48461],{"class":492},[87,99290,946],{"class":171},[87,99292,111],{"class":104},[87,99294,1108],{"class":97},[87,99296,99297],{"class":89,"line":256},[87,99298,99299],{"class":97},"s.shape\n",[87,99301,99302],{"class":89,"line":269},[87,99303,99304],{"class":199},"#输出：(4,3,6)\n",[87,99306,99307],{"class":89,"line":463},[87,99308,99309],{"class":199},"#axis=1\n",[87,99311,99312,99315,99317,99319,99321,99323,99325],{"class":89,"line":469},[87,99313,99314],{"class":97},"ss",[87,99316,946],{"class":171},[87,99318,99286],{"class":97},[87,99320,48461],{"class":492},[87,99322,946],{"class":171},[87,99324,1313],{"class":104},[87,99326,1108],{"class":97},[87,99328,99329],{"class":89,"line":2287},[87,99330,99331],{"class":97},"ss.shape\n",[87,99333,99334],{"class":89,"line":2568},[87,99335,99336],{"class":199},"#输出：(2,6,6)\n",[87,99338,99339],{"class":89,"line":2573},[87,99340,99341],{"class":199},"#axis=2\n",[87,99343,99344,99346,99348,99350,99352],{"class":89,"line":2579},[87,99345,99286],{"class":97},[87,99347,48461],{"class":492},[87,99349,946],{"class":171},[87,99351,1176],{"class":104},[87,99353,99354],{"class":97},").shape\n",[87,99356,99357],{"class":89,"line":2584},[87,99358,99359],{"class":199},"#输出：（2，3，12）\n",[19,99361,99362],{},"⑤四维数组拼接",[77,99364,99366],{"className":31325,"code":99365,"language":31327,"meta":82,"style":82},"#两个三行六列\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",[84,99367,99368,99372,99400,99428,99453,99479,99483,99496,99501,99505,99517,99522,99526,99538,99543,99548,99560],{"__ignoreMap":82},[87,99369,99370],{"class":89,"line":90},[87,99371,99214],{"class":199},[87,99373,99374,99376,99378,99380,99382,99384,99386,99388,99390,99392,99394,99396,99398],{"class":89,"line":101},[87,99375,96447],{"class":97},[87,99377,946],{"class":171},[87,99379,93928],{"class":97},[87,99381,1313],{"class":104},[87,99383,1473],{"class":97},[87,99385,1420],{"class":104},[87,99387,93933],{"class":97},[87,99389,1176],{"class":104},[87,99391,1473],{"class":97},[87,99393,1170],{"class":104},[87,99395,1473],{"class":97},[87,99397,1439],{"class":104},[87,99399,1108],{"class":97},[87,99401,99402,99404,99406,99408,99410,99412,99414,99416,99418,99420,99422,99424,99426],{"class":89,"line":120},[87,99403,99247],{"class":97},[87,99405,946],{"class":171},[87,99407,93928],{"class":97},[87,99409,1432],{"class":104},[87,99411,1473],{"class":97},[87,99413,99258],{"class":104},[87,99415,93933],{"class":97},[87,99417,1176],{"class":104},[87,99419,1473],{"class":97},[87,99421,1170],{"class":104},[87,99423,1473],{"class":97},[87,99425,1439],{"class":104},[87,99427,1108],{"class":97},[87,99429,99430,99433,99435,99437,99439,99441,99443,99445,99447,99449,99451],{"class":89,"line":222},[87,99431,99432],{"class":97},"aaaa",[87,99434,946],{"class":171},[87,99436,98596],{"class":97},[87,99438,1176],{"class":104},[87,99440,1473],{"class":97},[87,99442,1170],{"class":104},[87,99444,1473],{"class":97},[87,99446,1170],{"class":104},[87,99448,1473],{"class":97},[87,99450,1176],{"class":104},[87,99452,1108],{"class":97},[87,99454,99455,99458,99460,99463,99465,99467,99469,99471,99473,99475,99477],{"class":89,"line":234},[87,99456,99457],{"class":97},"bbbb",[87,99459,946],{"class":171},[87,99461,99462],{"class":97},"bbb.reshape(",[87,99464,1176],{"class":104},[87,99466,1473],{"class":97},[87,99468,1170],{"class":104},[87,99470,1473],{"class":97},[87,99472,1170],{"class":104},[87,99474,1473],{"class":97},[87,99476,1176],{"class":104},[87,99478,1108],{"class":97},[87,99480,99481],{"class":89,"line":256},[87,99482,99277],{"class":199},[87,99484,99485,99488,99490,99492,99494],{"class":89,"line":269},[87,99486,99487],{"class":97},"np.concatenate((aaaa,bbbb),",[87,99489,48461],{"class":492},[87,99491,946],{"class":171},[87,99493,111],{"class":104},[87,99495,99354],{"class":97},[87,99497,99498],{"class":89,"line":463},[87,99499,99500],{"class":199},"#结果：（4，3，3，2）\n",[87,99502,99503],{"class":89,"line":469},[87,99504,99309],{"class":199},[87,99506,99507,99509,99511,99513,99515],{"class":89,"line":2287},[87,99508,99487],{"class":97},[87,99510,48461],{"class":492},[87,99512,946],{"class":171},[87,99514,1313],{"class":104},[87,99516,99354],{"class":97},[87,99518,99519],{"class":89,"line":2568},[87,99520,99521],{"class":199},"#结果：（2，6，3，2）\n",[87,99523,99524],{"class":89,"line":2573},[87,99525,99341],{"class":199},[87,99527,99528,99530,99532,99534,99536],{"class":89,"line":2579},[87,99529,99487],{"class":97},[87,99531,48461],{"class":492},[87,99533,946],{"class":171},[87,99535,1176],{"class":104},[87,99537,99354],{"class":97},[87,99539,99540],{"class":89,"line":2584},[87,99541,99542],{"class":199},"#结果：（2，3，6，2）\n",[87,99544,99545],{"class":89,"line":2598},[87,99546,99547],{"class":199},"#axis=3\n",[87,99549,99550,99552,99554,99556,99558],{"class":89,"line":2603},[87,99551,99487],{"class":97},[87,99553,48461],{"class":492},[87,99555,946],{"class":171},[87,99557,1170],{"class":104},[87,99559,99354],{"class":97},[87,99561,99562],{"class":89,"line":2609},[87,99563,99564],{"class":199},"#结果：（2，3，3，4）\n",[14,99566,99568],{"id":99567},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,99570,99571],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,99573,99574],{},"①二维数组",[77,99576,99578],{"className":31325,"code":99577,"language":31327,"meta":82,"style":82},"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",[84,99579,99580,99604,99628,99633,99638],{"__ignoreMap":82},[87,99581,99582,99584,99586,99588,99590,99592,99594,99596,99598,99600,99602],{"class":89,"line":90},[87,99583,94232],{"class":97},[87,99585,946],{"class":171},[87,99587,93928],{"class":97},[87,99589,1313],{"class":104},[87,99591,1473],{"class":97},[87,99593,1617],{"class":104},[87,99595,93933],{"class":97},[87,99597,1170],{"class":104},[87,99599,1473],{"class":97},[87,99601,1389],{"class":104},[87,99603,1108],{"class":97},[87,99605,99606,99608,99610,99612,99614,99616,99618,99620,99622,99624,99626],{"class":89,"line":101},[87,99607,99113],{"class":97},[87,99609,946],{"class":171},[87,99611,93928],{"class":97},[87,99613,1432],{"class":104},[87,99615,1473],{"class":97},[87,99617,1735],{"class":104},[87,99619,93933],{"class":97},[87,99621,1170],{"class":104},[87,99623,1473],{"class":97},[87,99625,1389],{"class":104},[87,99627,1108],{"class":97},[87,99629,99630],{"class":89,"line":120},[87,99631,99632],{"class":97},"np.hstack((aa,bb))\n",[87,99634,99635],{"class":89,"line":222},[87,99636,99637],{"class":199},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[87,99639,99640],{"class":89,"line":234},[87,99641,99642],{"class":199},"#np.hstack([aa,bb])\n",[19,99644,99159],{},[19,99646,99647],{},[39,99648],{"alt":82,"src":99649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,99651,99652],{},"等效于concatenate()函数中axis=1时的情况",[19,99654,99655],{},"②三维数组",[77,99657,99659],{"className":31325,"code":99658,"language":31327,"meta":82,"style":82},"#两个三行六列\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",[84,99660,99661,99665,99693,99721,99726,99731],{"__ignoreMap":82},[87,99662,99663],{"class":89,"line":90},[87,99664,99214],{"class":199},[87,99666,99667,99669,99671,99673,99675,99677,99679,99681,99683,99685,99687,99689,99691],{"class":89,"line":101},[87,99668,96447],{"class":97},[87,99670,946],{"class":171},[87,99672,93928],{"class":97},[87,99674,1313],{"class":104},[87,99676,1473],{"class":97},[87,99678,1420],{"class":104},[87,99680,93933],{"class":97},[87,99682,1176],{"class":104},[87,99684,1473],{"class":97},[87,99686,1170],{"class":104},[87,99688,1473],{"class":97},[87,99690,1439],{"class":104},[87,99692,1108],{"class":97},[87,99694,99695,99697,99699,99701,99703,99705,99707,99709,99711,99713,99715,99717,99719],{"class":89,"line":120},[87,99696,99247],{"class":97},[87,99698,946],{"class":171},[87,99700,93928],{"class":97},[87,99702,1432],{"class":104},[87,99704,1473],{"class":97},[87,99706,99258],{"class":104},[87,99708,93933],{"class":97},[87,99710,1176],{"class":104},[87,99712,1473],{"class":97},[87,99714,1170],{"class":104},[87,99716,1473],{"class":97},[87,99718,1439],{"class":104},[87,99720,1108],{"class":97},[87,99722,99723],{"class":89,"line":222},[87,99724,99725],{"class":199},"#使用hstack\n",[87,99727,99728],{"class":89,"line":234},[87,99729,99730],{"class":97},"np.hstack((aaa,bbb)).shape\n",[87,99732,99733],{"class":89,"line":256},[87,99734,99735],{"class":199},"#输出：（2，6，6）\n",[14,99737,99739],{"id":99738},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,99741,99742],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,99744,99574],{},[77,99746,99748],{"className":31325,"code":99747,"language":31327,"meta":82,"style":82},"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",[84,99749,99750,99774,99798,99803,99808,99813],{"__ignoreMap":82},[87,99751,99752,99754,99756,99758,99760,99762,99764,99766,99768,99770,99772],{"class":89,"line":90},[87,99753,94232],{"class":97},[87,99755,946],{"class":171},[87,99757,93928],{"class":97},[87,99759,1313],{"class":104},[87,99761,1473],{"class":97},[87,99763,1617],{"class":104},[87,99765,93933],{"class":97},[87,99767,1170],{"class":104},[87,99769,1473],{"class":97},[87,99771,1389],{"class":104},[87,99773,1108],{"class":97},[87,99775,99776,99778,99780,99782,99784,99786,99788,99790,99792,99794,99796],{"class":89,"line":101},[87,99777,99113],{"class":97},[87,99779,946],{"class":171},[87,99781,93928],{"class":97},[87,99783,1432],{"class":104},[87,99785,1473],{"class":97},[87,99787,1735],{"class":104},[87,99789,93933],{"class":97},[87,99791,1170],{"class":104},[87,99793,1473],{"class":97},[87,99795,1389],{"class":104},[87,99797,1108],{"class":97},[87,99799,99800],{"class":89,"line":120},[87,99801,99802],{"class":199},"#vstack 垂直方向进行堆叠\n",[87,99804,99805],{"class":89,"line":222},[87,99806,99807],{"class":97},"np.vstack((aa,bb))\n",[87,99809,99810],{"class":89,"line":234},[87,99811,99812],{"class":199},"#与hstack传的参数类似，等价于：\n",[87,99814,99815],{"class":89,"line":256},[87,99816,99817],{"class":97},"np.vstack([aa,bb])\n",[19,99819,99159],{},[19,99821,99822],{},[39,99823],{"alt":82,"src":99824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,99826,99655],{},[77,99828,99830],{"className":31325,"code":99829,"language":31327,"meta":82,"style":82},"#两个三行六列\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",[84,99831,99832,99836,99864,99892,99897,99902],{"__ignoreMap":82},[87,99833,99834],{"class":89,"line":90},[87,99835,99214],{"class":199},[87,99837,99838,99840,99842,99844,99846,99848,99850,99852,99854,99856,99858,99860,99862],{"class":89,"line":101},[87,99839,96447],{"class":97},[87,99841,946],{"class":171},[87,99843,93928],{"class":97},[87,99845,1313],{"class":104},[87,99847,1473],{"class":97},[87,99849,1420],{"class":104},[87,99851,93933],{"class":97},[87,99853,1176],{"class":104},[87,99855,1473],{"class":97},[87,99857,1170],{"class":104},[87,99859,1473],{"class":97},[87,99861,1439],{"class":104},[87,99863,1108],{"class":97},[87,99865,99866,99868,99870,99872,99874,99876,99878,99880,99882,99884,99886,99888,99890],{"class":89,"line":120},[87,99867,99247],{"class":97},[87,99869,946],{"class":171},[87,99871,93928],{"class":97},[87,99873,1432],{"class":104},[87,99875,1473],{"class":97},[87,99877,99258],{"class":104},[87,99879,93933],{"class":97},[87,99881,1176],{"class":104},[87,99883,1473],{"class":97},[87,99885,1170],{"class":104},[87,99887,1473],{"class":97},[87,99889,1439],{"class":104},[87,99891,1108],{"class":97},[87,99893,99894],{"class":89,"line":222},[87,99895,99896],{"class":199},"#使用vstack\n",[87,99898,99899],{"class":89,"line":234},[87,99900,99901],{"class":97},"np.vstack((aaa,bbb)).shape\n",[87,99903,99904],{"class":89,"line":256},[87,99905,99906],{"class":199},"#输出：（4，3，6）\n",[14,99908,99910],{"id":99909},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99912,99913],{},"该方法是三维数组特有的方法",[19,99915,99916],{},"也就是说",[19,99918,99919],{},"一维数组拼接方法用：concatenate()",[19,99921,99922],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99924,99925],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99927,99928],{},"四维数组及多维数组只能用concatenate进行拼接",[77,99930,99932],{"className":31325,"code":99931,"language":31327,"meta":82,"style":82},"#两个三行六列\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",[84,99933,99934,99938,99966,99994,99999,100004],{"__ignoreMap":82},[87,99935,99936],{"class":89,"line":90},[87,99937,99214],{"class":199},[87,99939,99940,99942,99944,99946,99948,99950,99952,99954,99956,99958,99960,99962,99964],{"class":89,"line":101},[87,99941,96447],{"class":97},[87,99943,946],{"class":171},[87,99945,93928],{"class":97},[87,99947,1313],{"class":104},[87,99949,1473],{"class":97},[87,99951,1420],{"class":104},[87,99953,93933],{"class":97},[87,99955,1176],{"class":104},[87,99957,1473],{"class":97},[87,99959,1170],{"class":104},[87,99961,1473],{"class":97},[87,99963,1439],{"class":104},[87,99965,1108],{"class":97},[87,99967,99968,99970,99972,99974,99976,99978,99980,99982,99984,99986,99988,99990,99992],{"class":89,"line":120},[87,99969,99247],{"class":97},[87,99971,946],{"class":171},[87,99973,93928],{"class":97},[87,99975,1432],{"class":104},[87,99977,1473],{"class":97},[87,99979,99258],{"class":104},[87,99981,93933],{"class":97},[87,99983,1176],{"class":104},[87,99985,1473],{"class":97},[87,99987,1170],{"class":104},[87,99989,1473],{"class":97},[87,99991,1439],{"class":104},[87,99993,1108],{"class":97},[87,99995,99996],{"class":89,"line":222},[87,99997,99998],{"class":199},"#使用dstack\n",[87,100000,100001],{"class":89,"line":234},[87,100002,100003],{"class":97},"np.dstack((aaa,bbb)).shape\n",[87,100005,100006],{"class":89,"line":256},[87,100007,100008],{"class":199},"#结果：（2，3，12）\n",[1006,100010,100011],{},"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":82,"searchDepth":101,"depth":101,"links":100013},[100014,100015,100016,100017],{"id":98953,"depth":101,"text":98954},{"id":99567,"depth":101,"text":99568},{"id":99738,"depth":101,"text":99739},{"id":99909,"depth":101,"text":99910},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98945,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100024,"title":100025,"body":100026,"description":1026,"extension":1027,"meta":100301,"navigation":1029,"path":100302,"seo":100303,"stem":100304,"__hash__":100305},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100027,"toc":100299},[100028,100031,100034,100128,100131,100134,100137,100140,100143,100146,100149,100152,100296],[10,100029,100025],{"id":100030},"_7数组转置",[19,100032,100033],{},"使用transpose()函数",[77,100035,100037],{"className":31325,"code":100036,"language":31327,"meta":82,"style":82},"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",[84,100038,100039,100049,100073,100078,100083,100088,100093,100101,100105,100109,100114,100119,100124],{"__ignoreMap":82},[87,100040,100041,100043,100045,100047],{"class":89,"line":90},[87,100042,31339],{"class":171},[87,100044,32327],{"class":97},[87,100046,32330],{"class":171},[87,100048,32333],{"class":97},[87,100050,100051,100053,100055,100057,100059,100061,100063,100065,100067,100069,100071],{"class":89,"line":101},[87,100052,1334],{"class":97},[87,100054,946],{"class":171},[87,100056,32664],{"class":97},[87,100058,1313],{"class":104},[87,100060,1473],{"class":97},[87,100062,1617],{"class":104},[87,100064,93933],{"class":97},[87,100066,1389],{"class":104},[87,100068,1473],{"class":97},[87,100070,1170],{"class":104},[87,100072,1108],{"class":97},[87,100074,100075],{"class":89,"line":120},[87,100076,100077],{"class":199},"#二维数组转置\n",[87,100079,100080],{"class":89,"line":222},[87,100081,100082],{"class":199},"#调用transpose()函数\n",[87,100084,100085],{"class":89,"line":234},[87,100086,100087],{"class":97},"a.transpose()\n",[87,100089,100090],{"class":89,"line":256},[87,100091,100092],{"class":199},"#对于二维数组也可以采用.T来实现\n",[87,100094,100095,100098],{"class":89,"line":269},[87,100096,100097],{"class":97},"a.T",[87,100099,100100],{"class":199},"#与上述代码一样\n",[87,100102,100103],{"class":89,"line":463},[87,100104,94490],{"class":199},[87,100106,100107],{"class":89,"line":469},[87,100108,94854],{"class":949},[87,100110,100111],{"class":89,"line":2287},[87,100112,100113],{"class":949},"array([[ 1,  4,  7, 10],\n",[87,100115,100116],{"class":89,"line":2568},[87,100117,100118],{"class":949},"       [ 2,  5,  8, 11],\n",[87,100120,100121],{"class":89,"line":2573},[87,100122,100123],{"class":949},"       [ 3,  6,  9, 12]])\n",[87,100125,100126],{"class":89,"line":2579},[87,100127,94854],{"class":949},[19,100129,100130],{},"也可以使用np.transpose()的形式",[19,100132,100133],{},"#多维数组进行转置 np.transpose()",[19,100135,100136],{},"#对二维数组也可以使用np.transpose()进行转置",[19,100138,100139],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,100141,100142],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,100144,100145],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,100147,100148],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,100150,100151],{},"四维及以上的数组也是一样的道理",[77,100153,100155],{"className":31325,"code":100154,"language":31327,"meta":82,"style":82},"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",[84,100156,100157,100185,100190,100195,100200,100218,100223,100255,100260,100265,100270,100291],{"__ignoreMap":82},[87,100158,100159,100161,100163,100165,100167,100169,100171,100173,100175,100177,100179,100181,100183],{"class":89,"line":90},[87,100160,1912],{"class":97},[87,100162,946],{"class":171},[87,100164,93928],{"class":97},[87,100166,1313],{"class":104},[87,100168,1473],{"class":97},[87,100170,1420],{"class":104},[87,100172,93933],{"class":97},[87,100174,1170],{"class":104},[87,100176,1473],{"class":97},[87,100178,1439],{"class":104},[87,100180,1473],{"class":97},[87,100182,1176],{"class":104},[87,100184,1108],{"class":97},[87,100186,100187],{"class":89,"line":101},[87,100188,100189],{"class":97},"x.shape\n",[87,100191,100192],{"class":89,"line":120},[87,100193,100194],{"class":199},"#结果：（3,6,2）\n",[87,100196,100197],{"class":89,"line":222},[87,100198,100199],{"class":199},"#使用np.transpose()进行转置 变为(2,6,3)\n",[87,100201,100202,100205,100207,100209,100211,100213,100215],{"class":89,"line":234},[87,100203,100204],{"class":97},"np.transpose(x,(",[87,100206,1176],{"class":104},[87,100208,1473],{"class":97},[87,100210,1313],{"class":104},[87,100212,1473],{"class":97},[87,100214,111],{"class":104},[87,100216,100217],{"class":97},")).shape\n",[87,100219,100220],{"class":89,"line":256},[87,100221,100222],{"class":199},"#结果：(2,6,3)\n",[87,100224,100225,100227,100229,100231,100233,100235,100237,100239,100241,100243,100245,100247,100249,100251,100253],{"class":89,"line":269},[87,100226,99432],{"class":97},[87,100228,946],{"class":171},[87,100230,93928],{"class":97},[87,100232,1313],{"class":104},[87,100234,1473],{"class":97},[87,100236,1420],{"class":104},[87,100238,93933],{"class":97},[87,100240,1170],{"class":104},[87,100242,1473],{"class":97},[87,100244,1176],{"class":104},[87,100246,1473],{"class":97},[87,100248,1313],{"class":104},[87,100250,1473],{"class":97},[87,100252,1439],{"class":104},[87,100254,1108],{"class":97},[87,100256,100257],{"class":89,"line":463},[87,100258,100259],{"class":97},"aaaa.shape\n",[87,100261,100262],{"class":89,"line":469},[87,100263,100264],{"class":199},"#结果：（3，2，1，6）\n",[87,100266,100267],{"class":89,"line":2287},[87,100268,100269],{"class":199},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[87,100271,100272,100275,100277,100279,100281,100283,100285,100287,100289],{"class":89,"line":2568},[87,100273,100274],{"class":97},"np.transpose(aaaa,(",[87,100276,1313],{"class":104},[87,100278,1473],{"class":97},[87,100280,1176],{"class":104},[87,100282,1473],{"class":97},[87,100284,111],{"class":104},[87,100286,1473],{"class":97},[87,100288,1170],{"class":104},[87,100290,100217],{"class":97},[87,100292,100293],{"class":89,"line":2573},[87,100294,100295],{"class":199},"#结果：(2,1,3,6)\n",[1006,100297,100298],{},"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":82,"searchDepth":101,"depth":101,"links":100300},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100025,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100307,"title":100308,"body":100309,"description":1026,"extension":1027,"meta":101043,"navigation":1029,"path":101044,"seo":101045,"stem":101046,"__hash__":101047},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100310,"toc":101041},[100311,100314,100317,100320,100323,100326,100329,100332,100335,100444,100447,100450,101038],[10,100312,100308],{"id":100313},"_8数组分割",[19,100315,100316],{},"split分割",[19,100318,100319],{},"numpy.split(ary,indics_or_sections,axis)",[19,100321,100322],{},"解释：",[19,100324,100325],{},"ary:被分割的数组",[19,100327,100328],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,100330,100331],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,100333,100334],{},"①一维数组的分割",[77,100336,100338],{"className":31325,"code":100337,"language":31327,"meta":82,"style":82},"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",[84,100339,100340,100356,100361,100370,100374,100379,100387,100391,100396,100401,100414,100418,100423,100435,100439],{"__ignoreMap":82},[87,100341,100342,100344,100346,100348,100350,100352,100354],{"class":89,"line":90},[87,100343,1334],{"class":97},[87,100345,946],{"class":171},[87,100347,93928],{"class":97},[87,100349,1313],{"class":104},[87,100351,1473],{"class":97},[87,100353,1515],{"class":104},[87,100355,1108],{"class":97},[87,100357,100358],{"class":89,"line":101},[87,100359,100360],{"class":199},"#如果传入整数，必须能够平分，否则会报错\n",[87,100362,100363,100366,100368],{"class":89,"line":120},[87,100364,100365],{"class":97},"np.split(a,",[87,100367,1176],{"class":104},[87,100369,1108],{"class":97},[87,100371,100372],{"class":89,"line":222},[87,100373,94490],{"class":199},[87,100375,100376],{"class":89,"line":234},[87,100377,100378],{"class":199},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[87,100380,100381,100383,100385],{"class":89,"line":256},[87,100382,100365],{"class":97},[87,100384,1389],{"class":104},[87,100386,1108],{"class":97},[87,100388,100389],{"class":89,"line":269},[87,100390,94490],{"class":199},[87,100392,100393],{"class":89,"line":463},[87,100394,100395],{"class":199},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[87,100397,100398],{"class":89,"line":469},[87,100399,100400],{"class":199},"#传入数组\n",[87,100402,100403,100406,100408,100410,100412],{"class":89,"line":2287},[87,100404,100405],{"class":97},"np.split(a,[",[87,100407,1170],{"class":104},[87,100409,1473],{"class":97},[87,100411,1414],{"class":104},[87,100413,5610],{"class":97},[87,100415,100416],{"class":89,"line":2568},[87,100417,94490],{"class":199},[87,100419,100420],{"class":89,"line":2573},[87,100421,100422],{"class":199},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[87,100424,100425,100427,100429,100431,100433],{"class":89,"line":2579},[87,100426,100405],{"class":97},[87,100428,1414],{"class":104},[87,100430,1473],{"class":97},[87,100432,1464],{"class":104},[87,100434,5610],{"class":97},[87,100436,100437],{"class":89,"line":2584},[87,100438,94490],{"class":199},[87,100440,100441],{"class":89,"line":2598},[87,100442,100443],{"class":199},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,100445,100446],{},"②二维数组的分割",[19,100448,100449],{},"使用split()",[77,100451,100453],{"className":31325,"code":100452,"language":31327,"meta":82,"style":82},"#二维数组分割\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",[84,100454,100455,100460,100484,100489,100498,100502,100506,100511,100516,100521,100526,100531,100536,100541,100545,100558,100562,100566,100570,100574,100578,100583,100588,100593,100597,100602,100618,100622,100626,100631,100636,100641,100646,100651,100656,100661,100666,100671,100676,100681,100686,100691,100696,100701,100706,100711,100716,100720,100724,100744,100748,100752,100757,100762,100767,100772,100777,100782,100787,100792,100797,100802,100807,100812,100817,100822,100827,100832,100837,100842,100846,100851,100860,100864,100868,100872,100876,100880,100884,100888,100892,100896,100905,100909,100913,100917,100921,100925,100929,100933,100937,100941,100945,100949,100953,100957,100961,100965,100969,100973,100977,100981,100985,100989,101002,101006,101010,101014,101018,101022,101026,101030,101034],{"__ignoreMap":82},[87,100456,100457],{"class":89,"line":90},[87,100458,100459],{"class":199},"#二维数组分割\n",[87,100461,100462,100464,100466,100468,100470,100472,100474,100476,100478,100480,100482],{"class":89,"line":101},[87,100463,94232],{"class":97},[87,100465,946],{"class":171},[87,100467,93928],{"class":97},[87,100469,1313],{"class":104},[87,100471,1473],{"class":97},[87,100473,1420],{"class":104},[87,100475,93933],{"class":97},[87,100477,1439],{"class":104},[87,100479,1473],{"class":97},[87,100481,1439],{"class":104},[87,100483,1108],{"class":97},[87,100485,100486],{"class":89,"line":120},[87,100487,100488],{"class":199},"#默认axis=0  传入整数平均分,按行来的\n",[87,100490,100491,100494,100496],{"class":89,"line":222},[87,100492,100493],{"class":97},"np.split(aa,",[87,100495,1170],{"class":104},[87,100497,1108],{"class":97},[87,100499,100500],{"class":89,"line":234},[87,100501,96690],{"class":199},[87,100503,100504],{"class":89,"line":256},[87,100505,94854],{"class":949},[87,100507,100508],{"class":89,"line":269},[87,100509,100510],{"class":949},"[array([[ 1,  2,  3,  4,  5,  6],\n",[87,100512,100513],{"class":89,"line":463},[87,100514,100515],{"class":949},"        [ 7,  8,  9, 10, 11, 12]]),\n",[87,100517,100518],{"class":89,"line":469},[87,100519,100520],{"class":949}," array([[13, 14, 15, 16, 17, 18],\n",[87,100522,100523],{"class":89,"line":2287},[87,100524,100525],{"class":949},"        [19, 20, 21, 22, 23, 24]]),\n",[87,100527,100528],{"class":89,"line":2568},[87,100529,100530],{"class":949}," array([[25, 26, 27, 28, 29, 30],\n",[87,100532,100533],{"class":89,"line":2573},[87,100534,100535],{"class":949},"        [31, 32, 33, 34, 35, 36]])]\n",[87,100537,100538],{"class":89,"line":2579},[87,100539,100540],{"class":949}," '''\n",[87,100542,100543],{"class":89,"line":2584},[87,100544,100400],{"class":199},[87,100546,100547,100550,100552,100554,100556],{"class":89,"line":2598},[87,100548,100549],{"class":97},"np.split(aa,[",[87,100551,1176],{"class":104},[87,100553,1473],{"class":97},[87,100555,1414],{"class":104},[87,100557,5610],{"class":97},[87,100559,100560],{"class":89,"line":2603},[87,100561,96690],{"class":199},[87,100563,100564],{"class":89,"line":2609},[87,100565,94854],{"class":949},[87,100567,100568],{"class":89,"line":2630},[87,100569,100510],{"class":949},[87,100571,100572],{"class":89,"line":2635},[87,100573,100515],{"class":949},[87,100575,100576],{"class":89,"line":2649},[87,100577,100520],{"class":949},[87,100579,100580],{"class":89,"line":2654},[87,100581,100582],{"class":949},"        [19, 20, 21, 22, 23, 24],\n",[87,100584,100585],{"class":89,"line":2683},[87,100586,100587],{"class":949},"        [25, 26, 27, 28, 29, 30]]),\n",[87,100589,100590],{"class":89,"line":2688},[87,100591,100592],{"class":949}," array([[31, 32, 33, 34, 35, 36]])]\n",[87,100594,100595],{"class":89,"line":2705},[87,100596,94854],{"class":949},[87,100598,100599],{"class":89,"line":2710},[87,100600,100601],{"class":199},"#axis=1 按照列来分\n",[87,100603,100604,100606,100608,100610,100612,100614,100616],{"class":89,"line":2715},[87,100605,100493],{"class":97},[87,100607,1170],{"class":104},[87,100609,1473],{"class":97},[87,100611,48461],{"class":492},[87,100613,946],{"class":171},[87,100615,1313],{"class":104},[87,100617,1108],{"class":97},[87,100619,100620],{"class":89,"line":2720},[87,100621,96690],{"class":199},[87,100623,100624],{"class":89,"line":2734},[87,100625,94854],{"class":949},[87,100627,100628],{"class":89,"line":2739},[87,100629,100630],{"class":949},"[array([[ 1,  2],\n",[87,100632,100633],{"class":89,"line":3532},[87,100634,100635],{"class":949},"        [ 7,  8],\n",[87,100637,100638],{"class":89,"line":3546},[87,100639,100640],{"class":949},"        [13, 14],\n",[87,100642,100643],{"class":89,"line":3554},[87,100644,100645],{"class":949},"        [19, 20],\n",[87,100647,100648],{"class":89,"line":3559},[87,100649,100650],{"class":949},"        [25, 26],\n",[87,100652,100653],{"class":89,"line":3565},[87,100654,100655],{"class":949},"        [31, 32]]),\n",[87,100657,100658],{"class":89,"line":3571},[87,100659,100660],{"class":949}," array([[ 3,  4],\n",[87,100662,100663],{"class":89,"line":3576},[87,100664,100665],{"class":949},"        [ 9, 10],\n",[87,100667,100668],{"class":89,"line":8898},[87,100669,100670],{"class":949},"        [15, 16],\n",[87,100672,100673],{"class":89,"line":8922},[87,100674,100675],{"class":949},"        [21, 22],\n",[87,100677,100678],{"class":89,"line":8927},[87,100679,100680],{"class":949},"        [27, 28],\n",[87,100682,100683],{"class":89,"line":8933},[87,100684,100685],{"class":949},"        [33, 34]]),\n",[87,100687,100688],{"class":89,"line":8960},[87,100689,100690],{"class":949}," array([[ 5,  6],\n",[87,100692,100693],{"class":89,"line":8965},[87,100694,100695],{"class":949},"        [11, 12],\n",[87,100697,100698],{"class":89,"line":8971},[87,100699,100700],{"class":949},"        [17, 18],\n",[87,100702,100703],{"class":89,"line":8983},[87,100704,100705],{"class":949},"        [23, 24],\n",[87,100707,100708],{"class":89,"line":8995},[87,100709,100710],{"class":949},"        [29, 30],\n",[87,100712,100713],{"class":89,"line":9007},[87,100714,100715],{"class":949},"        [35, 36]])]\n",[87,100717,100718],{"class":89,"line":10666},[87,100719,100540],{"class":949},[87,100721,100722],{"class":89,"line":10691},[87,100723,100400],{"class":199},[87,100725,100726,100728,100730,100732,100734,100736,100738,100740,100742],{"class":89,"line":10714},[87,100727,100549],{"class":97},[87,100729,1313],{"class":104},[87,100731,1473],{"class":97},[87,100733,1176],{"class":104},[87,100735,42556],{"class":97},[87,100737,48461],{"class":492},[87,100739,946],{"class":171},[87,100741,1313],{"class":104},[87,100743,1108],{"class":97},[87,100745,100746],{"class":89,"line":10738},[87,100747,94490],{"class":199},[87,100749,100750],{"class":89,"line":10743},[87,100751,94854],{"class":949},[87,100753,100754],{"class":89,"line":10748},[87,100755,100756],{"class":949},"[array([[ 1],\n",[87,100758,100759],{"class":89,"line":10753},[87,100760,100761],{"class":949},"        [ 7],\n",[87,100763,100764],{"class":89,"line":10762},[87,100765,100766],{"class":949},"        [13],\n",[87,100768,100769],{"class":89,"line":10767},[87,100770,100771],{"class":949},"        [19],\n",[87,100773,100774],{"class":89,"line":10773},[87,100775,100776],{"class":949},"        [25],\n",[87,100778,100779],{"class":89,"line":10794},[87,100780,100781],{"class":949},"        [31]]),\n",[87,100783,100784],{"class":89,"line":10800},[87,100785,100786],{"class":949}," array([[ 2],\n",[87,100788,100789],{"class":89,"line":10814},[87,100790,100791],{"class":949},"        [ 8],\n",[87,100793,100794],{"class":89,"line":10820},[87,100795,100796],{"class":949},"        [14],\n",[87,100798,100799],{"class":89,"line":10847},[87,100800,100801],{"class":949},"        [20],\n",[87,100803,100804],{"class":89,"line":10856},[87,100805,100806],{"class":949},"        [26],\n",[87,100808,100809],{"class":89,"line":10862},[87,100810,100811],{"class":949},"        [32]]),\n",[87,100813,100814],{"class":89,"line":10870},[87,100815,100816],{"class":949}," array([[ 3,  4,  5,  6],\n",[87,100818,100819],{"class":89,"line":10875},[87,100820,100821],{"class":949},"        [ 9, 10, 11, 12],\n",[87,100823,100824],{"class":89,"line":17553},[87,100825,100826],{"class":949},"        [15, 16, 17, 18],\n",[87,100828,100829],{"class":89,"line":17559},[87,100830,100831],{"class":949},"        [21, 22, 23, 24],\n",[87,100833,100834],{"class":89,"line":17582},[87,100835,100836],{"class":949},"        [27, 28, 29, 30],\n",[87,100838,100839],{"class":89,"line":17588},[87,100840,100841],{"class":949},"        [33, 34, 35, 36]])]\n",[87,100843,100844],{"class":89,"line":17611},[87,100845,94854],{"class":949},[87,100847,100848],{"class":89,"line":17625},[87,100849,100850],{"class":199},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[87,100852,100853,100856,100858],{"class":89,"line":17645},[87,100854,100855],{"class":97},"np.vsplit(aa,",[87,100857,1170],{"class":104},[87,100859,1108],{"class":97},[87,100861,100862],{"class":89,"line":17651},[87,100863,94490],{"class":199},[87,100865,100866],{"class":89,"line":17662},[87,100867,94854],{"class":949},[87,100869,100870],{"class":89,"line":17685},[87,100871,100510],{"class":949},[87,100873,100874],{"class":89,"line":17707},[87,100875,100515],{"class":949},[87,100877,100878],{"class":89,"line":17712},[87,100879,100520],{"class":949},[87,100881,100882],{"class":89,"line":17718},[87,100883,100525],{"class":949},[87,100885,100886],{"class":89,"line":17732},[87,100887,100530],{"class":949},[87,100889,100890],{"class":89,"line":17745},[87,100891,100535],{"class":949},[87,100893,100894],{"class":89,"line":17750},[87,100895,94854],{"class":949},[87,100897,100898,100901,100903],{"class":89,"line":17764},[87,100899,100900],{"class":97},"np.hsplit(aa,",[87,100902,1170],{"class":104},[87,100904,1108],{"class":97},[87,100906,100907],{"class":89,"line":17769},[87,100908,94490],{"class":199},[87,100910,100911],{"class":89,"line":17775},[87,100912,94854],{"class":949},[87,100914,100915],{"class":89,"line":17780},[87,100916,100630],{"class":949},[87,100918,100919],{"class":89,"line":17794},[87,100920,100635],{"class":949},[87,100922,100923],{"class":89,"line":17799},[87,100924,100640],{"class":949},[87,100926,100927],{"class":89,"line":17804},[87,100928,100645],{"class":949},[87,100930,100931],{"class":89,"line":17818},[87,100932,100650],{"class":949},[87,100934,100935],{"class":89,"line":17830},[87,100936,100655],{"class":949},[87,100938,100939],{"class":89,"line":17835},[87,100940,100660],{"class":949},[87,100942,100943],{"class":89,"line":17848},[87,100944,100665],{"class":949},[87,100946,100947],{"class":89,"line":17853},[87,100948,100670],{"class":949},[87,100950,100951],{"class":89,"line":17858},[87,100952,100675],{"class":949},[87,100954,100955],{"class":89,"line":17863},[87,100956,100680],{"class":949},[87,100958,100959],{"class":89,"line":17876},[87,100960,100685],{"class":949},[87,100962,100963],{"class":89,"line":17881},[87,100964,100690],{"class":949},[87,100966,100967],{"class":89,"line":33580},[87,100968,100695],{"class":949},[87,100970,100971],{"class":89,"line":33586},[87,100972,100700],{"class":949},[87,100974,100975],{"class":89,"line":33592},[87,100976,100705],{"class":949},[87,100978,100979],{"class":89,"line":33598},[87,100980,100710],{"class":949},[87,100982,100983],{"class":89,"line":33604},[87,100984,100715],{"class":949},[87,100986,100987],{"class":89,"line":33615},[87,100988,94854],{"class":949},[87,100990,100991,100994,100996,100998,101000],{"class":89,"line":33621},[87,100992,100993],{"class":97},"np.vsplit(aa,[",[87,100995,1176],{"class":104},[87,100997,1473],{"class":97},[87,100999,1414],{"class":104},[87,101001,5610],{"class":97},[87,101003,101004],{"class":89,"line":33641},[87,101005,94490],{"class":199},[87,101007,101008],{"class":89,"line":33647},[87,101009,94854],{"class":949},[87,101011,101012],{"class":89,"line":33658},[87,101013,100510],{"class":949},[87,101015,101016],{"class":89,"line":33664},[87,101017,100515],{"class":949},[87,101019,101020],{"class":89,"line":33670},[87,101021,100520],{"class":949},[87,101023,101024],{"class":89,"line":33676},[87,101025,100582],{"class":949},[87,101027,101028],{"class":89,"line":33682},[87,101029,100587],{"class":949},[87,101031,101032],{"class":89,"line":33688},[87,101033,100592],{"class":949},[87,101035,101036],{"class":89,"line":33694},[87,101037,100540],{"class":949},[1006,101039,101040],{},"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":82,"searchDepth":101,"depth":101,"links":101042},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100308,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101049,"title":101050,"body":101051,"description":1026,"extension":1027,"meta":101545,"navigation":1029,"path":101546,"seo":101547,"stem":101548,"__hash__":101549},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101052,"toc":101536},[101053,101056,101059,101084,101088,101147,101199,101203,101205,101241,101295,101297,101335,101406,101410,101415,101419,101422,101455,101458,101462,101465,101468,101471,101474,101479,101483,101486,101489,101492,101495,101500,101504,101509,101512,101533],[10,101054,101050],{"id":101055},"_9数学函数",[19,101057,101058],{},"补充回顾：python的列表推导式",[77,101060,101062],{"className":31325,"code":101061,"language":31327,"meta":82,"style":82},"[1\u002Fi for i in a]\n",[84,101063,101064],{"__ignoreMap":82},[87,101065,101066,101068,101070,101072,101075,101077,101079,101081],{"class":89,"line":90},[87,101067,1982],{"class":97},[87,101069,1313],{"class":104},[87,101071,1677],{"class":171},[87,101073,101074],{"class":97},"i ",[87,101076,3979],{"class":171},[87,101078,10388],{"class":97},[87,101080,26990],{"class":171},[87,101082,101083],{"class":97}," a]\n",[14,101085,101087],{"id":101086},"_91-求倒数","9.1 求倒数",[77,101089,101091],{"className":31325,"code":101090,"language":31327,"meta":82,"style":82},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[84,101092,101093,101098,101126,101138],{"__ignoreMap":82},[87,101094,101095],{"class":89,"line":90},[87,101096,101097],{"class":199},"#数组求倒数\n",[87,101099,101100,101102,101104,101106,101108,101110,101112,101114,101116,101118,101120,101122,101124],{"class":89,"line":101},[87,101101,1334],{"class":97},[87,101103,946],{"class":171},[87,101105,1982],{"class":97},[87,101107,1313],{"class":104},[87,101109,1473],{"class":97},[87,101111,1176],{"class":104},[87,101113,1473],{"class":97},[87,101115,1170],{"class":104},[87,101117,1473],{"class":97},[87,101119,1389],{"class":104},[87,101121,1473],{"class":97},[87,101123,1414],{"class":104},[87,101125,34193],{"class":97},[87,101127,101128,101130,101132,101135],{"class":89,"line":120},[87,101129,1359],{"class":97},[87,101131,946],{"class":171},[87,101133,101134],{"class":97},"np.array(a)",[87,101136,101137],{"class":199},"#将列表转换为数组\n",[87,101139,101140,101142,101144],{"class":89,"line":222},[87,101141,1313],{"class":104},[87,101143,1677],{"class":171},[87,101145,101146],{"class":97},"b\n",[77,101148,101150],{"className":31325,"code":101149,"language":31327,"meta":82,"style":82},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[84,101151,101152,101180,101189,101194],{"__ignoreMap":82},[87,101153,101154,101156,101158,101160,101162,101164,101166,101168,101170,101172,101174,101176,101178],{"class":89,"line":90},[87,101155,1334],{"class":97},[87,101157,946],{"class":171},[87,101159,1982],{"class":97},[87,101161,1313],{"class":104},[87,101163,1473],{"class":97},[87,101165,1176],{"class":104},[87,101167,1473],{"class":97},[87,101169,1170],{"class":104},[87,101171,1473],{"class":97},[87,101173,1389],{"class":104},[87,101175,1473],{"class":97},[87,101177,1414],{"class":104},[87,101179,34193],{"class":97},[87,101181,101182,101184,101186],{"class":89,"line":101},[87,101183,1359],{"class":97},[87,101185,946],{"class":171},[87,101187,101188],{"class":97},"np.array(a)\n",[87,101190,101191],{"class":89,"line":120},[87,101192,101193],{"class":199},"#调用numpy中的函数reciprocal()\n",[87,101195,101196],{"class":89,"line":222},[87,101197,101198],{"class":97},"np.reciprocal(b)\n",[14,101200,101202],{"id":101201},"_92-求平方","9.2 求平方",[19,101204,95456],{},[77,101206,101208],{"className":31325,"code":101207,"language":31327,"meta":82,"style":82},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[84,101209,101210,101215,101220,101236],{"__ignoreMap":82},[87,101211,101212],{"class":89,"line":90},[87,101213,101214],{"class":199},"#square()，求平方\n",[87,101216,101217],{"class":89,"line":101},[87,101218,101219],{"class":199},"#一维数组\n",[87,101221,101222,101224,101226,101228,101230,101232,101234],{"class":89,"line":120},[87,101223,1334],{"class":97},[87,101225,946],{"class":171},[87,101227,93928],{"class":97},[87,101229,1313],{"class":104},[87,101231,1473],{"class":97},[87,101233,242],{"class":104},[87,101235,1108],{"class":97},[87,101237,101238],{"class":89,"line":222},[87,101239,101240],{"class":97},"np.square(a)\n",[77,101242,101244],{"className":31325,"code":101243,"language":31327,"meta":82,"style":82},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[84,101245,101246,101251,101256,101277],{"__ignoreMap":82},[87,101247,101248],{"class":89,"line":90},[87,101249,101250],{"class":199},"#或者通过循环遍历的形式来计算\n",[87,101252,101253],{"class":89,"line":101},[87,101254,101255],{"class":199},"#这是一个列表\n",[87,101257,101258,101261,101263,101265,101267,101269,101271,101274],{"class":89,"line":120},[87,101259,101260],{"class":97},"[i",[87,101262,1549],{"class":171},[87,101264,101074],{"class":97},[87,101266,3979],{"class":171},[87,101268,10388],{"class":97},[87,101270,26990],{"class":171},[87,101272,101273],{"class":97}," a]",[87,101275,101276],{"class":199},"#这个求完之后在数列当中\n",[87,101278,101279,101282,101284,101286,101288,101290,101292],{"class":89,"line":222},[87,101280,101281],{"class":97},"np.array([i",[87,101283,1549],{"class":171},[87,101285,101074],{"class":97},[87,101287,3979],{"class":171},[87,101289,10388],{"class":97},[87,101291,26990],{"class":171},[87,101293,101294],{"class":97}," a])\n",[19,101296,94217],{},[77,101298,101300],{"className":31325,"code":101299,"language":31327,"meta":82,"style":82},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[84,101301,101302,101306,101330],{"__ignoreMap":82},[87,101303,101304],{"class":89,"line":90},[87,101305,94227],{"class":199},[87,101307,101308,101310,101312,101314,101316,101318,101320,101322,101324,101326,101328],{"class":89,"line":101},[87,101309,94232],{"class":97},[87,101311,946],{"class":171},[87,101313,93928],{"class":97},[87,101315,1313],{"class":104},[87,101317,1473],{"class":97},[87,101319,1617],{"class":104},[87,101321,93933],{"class":97},[87,101323,1389],{"class":104},[87,101325,1473],{"class":97},[87,101327,1170],{"class":104},[87,101329,1108],{"class":97},[87,101331,101332],{"class":89,"line":120},[87,101333,101334],{"class":97},"np.square(aa)\n",[77,101336,101338],{"className":31325,"code":101337,"language":31327,"meta":82,"style":82},"#传统的方式\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",[84,101339,101340,101345,101354,101370,101386,101401],{"__ignoreMap":82},[87,101341,101342],{"class":89,"line":90},[87,101343,101344],{"class":199},"#传统的方式\n",[87,101346,101347,101349,101351],{"class":89,"line":101},[87,101348,99113],{"class":97},[87,101350,946],{"class":171},[87,101352,101353],{"class":97},"np.empty_like(aa)\n",[87,101355,101356,101358,101360,101362,101364,101366,101368],{"class":89,"line":120},[87,101357,3979],{"class":171},[87,101359,10388],{"class":97},[87,101361,26990],{"class":171},[87,101363,33390],{"class":104},[87,101365,165],{"class":97},[87,101367,1389],{"class":104},[87,101369,31733],{"class":97},[87,101371,101372,101374,101376,101378,101380,101382,101384],{"class":89,"line":222},[87,101373,4155],{"class":171},[87,101375,10450],{"class":97},[87,101377,26990],{"class":171},[87,101379,33390],{"class":104},[87,101381,165],{"class":97},[87,101383,1170],{"class":104},[87,101385,31733],{"class":97},[87,101387,101388,101391,101393,101396,101398],{"class":89,"line":234},[87,101389,101390],{"class":97},"        bb[i,j]",[87,101392,946],{"class":171},[87,101394,101395],{"class":97},"aa[i,j]",[87,101397,1549],{"class":171},[87,101399,101400],{"class":97},"aa[i,j]\n",[87,101402,101403],{"class":89,"line":256},[87,101404,101405],{"class":97},"bb\n",[14,101407,101409],{"id":101408},"_93-求各元素的符号","9.3 求各元素的符号",[19,101411,101412],{},[39,101413],{"alt":82,"src":101414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101416,101418],{"id":101417},"_94-modf函数","9.4 modf函数",[19,101420,101421],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[77,101423,101425],{"className":31325,"code":101424,"language":31327,"meta":82,"style":82},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[84,101426,101427,101450],{"__ignoreMap":82},[87,101428,101429,101431,101433,101435,101437,101439,101441,101443,101445,101448],{"class":89,"line":90},[87,101430,1334],{"class":97},[87,101432,946],{"class":171},[87,101434,93928],{"class":97},[87,101436,1625],{"class":171},[87,101438,242],{"class":104},[87,101440,1473],{"class":97},[87,101442,242],{"class":104},[87,101444,1473],{"class":97},[87,101446,101447],{"class":104},"0.3",[87,101449,1108],{"class":97},[87,101451,101452],{"class":89,"line":101},[87,101453,101454],{"class":97},"np.modf(a)\n",[19,101456,101457],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,101459,101461],{"id":101460},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,101463,101464],{},"np.cell()",[19,101466,101467],{},"np.floor()",[19,101469,101470],{},"np.rint()",[19,101472,101473],{},"对各元素分别向上取整、向下取整、四舍五入",[19,101475,101476],{},[39,101477],{"alt":82,"src":101478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,101480,101482],{"id":101481},"_96-around函数","9.6 around()函数",[19,101484,101485],{},"around()函数也可以实现对数的小数位数进行操作",[19,101487,101488],{},"其中的参数：",[19,101490,101491],{},"1.要传的数组",[19,101493,101494],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,101496,101497],{},[39,101498],{"alt":82,"src":101499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,101501,101503],{"id":101502},"_97-三角函数","9.7 三角函数",[19,101505,101506],{},[39,101507],{"alt":82,"src":101508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,101510,101511],{},"引入图像模块非常重要",[77,101513,101515],{"className":31325,"code":101514,"language":31327,"meta":82,"style":82},"from matplotlib import pyplot as plt\n",[84,101516,101517],{"__ignoreMap":82},[87,101518,101519,101521,101524,101526,101529,101531],{"class":89,"line":90},[87,101520,31684],{"class":171},[87,101522,101523],{"class":97}," matplotlib ",[87,101525,31339],{"class":171},[87,101527,101528],{"class":97}," pyplot ",[87,101530,32330],{"class":171},[87,101532,32384],{"class":97},[1006,101534,101535],{},"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":82,"searchDepth":101,"depth":101,"links":101537},[101538,101539,101540,101541,101542,101543,101544],{"id":101086,"depth":101,"text":101087},{"id":101201,"depth":101,"text":101202},{"id":101408,"depth":101,"text":101409},{"id":101417,"depth":101,"text":101418},{"id":101460,"depth":101,"text":101461},{"id":101481,"depth":101,"text":101482},{"id":101502,"depth":101,"text":101503},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101050,"description":1026},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101551,"title":101552,"body":101553,"description":1026,"extension":1027,"meta":101557,"navigation":1029,"path":101558,"seo":101559,"stem":101560,"__hash__":101561},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101554,"toc":101555},[],{"title":82,"searchDepth":101,"depth":101,"links":101556},[],{"category":51366},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101552,"description":1026},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101563,"title":101564,"body":101565,"description":82,"extension":1027,"meta":103573,"navigation":1029,"path":103574,"seo":103575,"stem":103576,"__hash__":103577},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101566,"toc":103549},[101567,101570,101574,101577,101580,101586,101589,101612,101615,101649,101652,101693,101697,101700,101793,101796,101840,101843,101860,101863,101877,101880,101883,101928,101931,101968,101972,101975,101981,101986,102006,102010,102013,102079,102082,102100,102104,102107,102136,102146,102152,102156,102159,102165,102176,102180,102183,102213,102216,102496,102499,102502,102513,102516,102519,102541,102548,102551,102569,102572,102575,102589,102597,102600,102626,102632,102635,102638,102648,102660,102680,102689,102709,102719,102743,102756,102770,102775,102816,102833,102858,102870,102890,102896,102941,102960,102977,102990,103006,103013,103025,103034,103069,103090,103115,103128,103152,103167,103192,103195,103216,103225,103228,103239,103243,103246,103252,103264,103271,103275,103278,103290,103293,103307,103310,103320,103330,103333,103373,103376,103380,103386,103389,103403,103407,103410,103443,103447,103450,103473,103481,103484,103490,103496,103499,103502,103530,103534,103537,103543,103546],[10,101568,101564],{"id":101569},"_1环境安装与第一个-mujoco-程序",[14,101571,101573],{"id":101572},"_1目标说明","1.目标说明",[19,101575,101576],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,101578,101579],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[77,101581,101584],{"className":101582,"code":101583,"language":599,"meta":82},[597],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[84,101585,101583],{"__ignoreMap":82},[19,101587,101588],{},"需要掌握:",[1055,101590,101591,101594,101597,101602,101607],{},[29,101592,101593],{},"Fedora 44 下 MuJoCo 的系统依赖",[29,101595,101596],{},"Python 虚拟环境创建",[29,101598,101599],{},[84,101600,101601],{},"mujoco.MjModel",[29,101603,101604],{},[84,101605,101606],{},"mujoco.MjData",[29,101608,101609],{},[84,101610,101611],{},"mujoco.mj_step(model, data)",[19,101613,101614],{},"MuJoCo 中最重要的两个对象:",[1235,101616,101617,101627],{},[1238,101618,101619],{},[1241,101620,101621,101624],{},[1244,101622,101623],{"align":24683},"对象",[1244,101625,101626],{"align":24683},"含义",[1281,101628,101629,101639],{},[1241,101630,101631,101636],{},[1286,101632,101633],{"align":24683},[84,101634,101635],{},"MjModel",[1286,101637,101638],{"align":24683},"模型结构，来自 XML，基本不随时间变化",[1241,101640,101641,101646],{},[1286,101642,101643],{"align":24683},[84,101644,101645],{},"MjData",[1286,101647,101648],{"align":24683},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,101650,101651],{},"可以先用一个类比理解：",[1235,101653,101654,101664],{},[1238,101655,101656],{},[1241,101657,101658,101661],{},[1244,101659,101660],{"align":24683},"类比",[1244,101662,101663],{"align":24683},"MuJoCo 对象",[1281,101665,101666,101675,101684],{},[1241,101667,101668,101671],{},[1286,101669,101670],{"align":24683},"游戏地图和角色配置",[1286,101672,101673],{"align":24683},[84,101674,101635],{},[1241,101676,101677,101680],{},[1286,101678,101679],{"align":24683},"游戏运行到当前帧的状态",[1286,101681,101682],{"align":24683},[84,101683,101645],{},[1241,101685,101686,101689],{},[1286,101687,101688],{"align":24683},"前进一帧",[1286,101690,101691],{"align":24683},[84,101692,101611],{},[14,101694,101696],{"id":101695},"_2环境与依赖安装","2.环境与依赖安装",[19,101698,101699],{},"Fedora 44 系统依赖:",[77,101701,101703],{"className":24769,"code":101702,"language":24771,"meta":82,"style":82},"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",[84,101704,101705,101717,101730,101743,101753,101763,101782],{"__ignoreMap":82},[87,101706,101707,101709,101711,101713,101715],{"class":89,"line":90},[87,101708,25524],{"class":205},[87,101710,27262],{"class":949},[87,101712,24781],{"class":949},[87,101714,27347],{"class":104},[87,101716,25626],{"class":104},[87,101718,101719,101722,101725,101728],{"class":89,"line":101},[87,101720,101721],{"class":949},"  python3",[87,101723,101724],{"class":949}," python3-pip",[87,101726,101727],{"class":949}," python3-virtualenv",[87,101729,25626],{"class":104},[87,101731,101732,101735,101738,101741],{"class":89,"line":120},[87,101733,101734],{"class":949},"  mesa-libGL",[87,101736,101737],{"class":949}," mesa-libGLU",[87,101739,101740],{"class":949}," mesa-dri-drivers",[87,101742,25626],{"class":104},[87,101744,101745,101748,101751],{"class":89,"line":222},[87,101746,101747],{"class":949},"  libglvnd-glx",[87,101749,101750],{"class":949}," libglvnd-opengl",[87,101752,25626],{"class":104},[87,101754,101755,101758,101761],{"class":89,"line":234},[87,101756,101757],{"class":949},"  glfw",[87,101759,101760],{"class":949}," glfw-devel",[87,101762,25626],{"class":104},[87,101764,101765,101768,101771,101774,101777,101780],{"class":89,"line":256},[87,101766,101767],{"class":949},"  libX11",[87,101769,101770],{"class":949}," libXcursor",[87,101772,101773],{"class":949}," libXi",[87,101775,101776],{"class":949}," libXinerama",[87,101778,101779],{"class":949}," libXrandr",[87,101781,25626],{"class":104},[87,101783,101784,101787,101790],{"class":89,"line":269},[87,101785,101786],{"class":949},"  gcc",[87,101788,101789],{"class":949}," gcc-c++",[87,101791,101792],{"class":949}," make\n",[19,101794,101795],{},"创建 Python 环境:",[77,101797,101799],{"className":24769,"code":101798,"language":24771,"meta":82,"style":82},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[84,101800,101801,101815,101823],{"__ignoreMap":82},[87,101802,101803,101806,101809,101812],{"class":89,"line":90},[87,101804,101805],{"class":205},"python3",[87,101807,101808],{"class":104}," -m",[87,101810,101811],{"class":949}," venv",[87,101813,101814],{"class":949}," .venv\n",[87,101816,101817,101820],{"class":89,"line":101},[87,101818,101819],{"class":104},"source",[87,101821,101822],{"class":949}," .venv\u002Fbin\u002Factivate\n",[87,101824,101825,101827,101829,101832,101834,101837],{"class":89,"line":120},[87,101826,31327],{"class":205},[87,101828,101808],{"class":104},[87,101830,101831],{"class":949}," pip",[87,101833,24781],{"class":949},[87,101835,101836],{"class":104}," --upgrade",[87,101838,101839],{"class":949}," pip\n",[19,101841,101842],{},"pip 安装:",[77,101844,101846],{"className":24769,"code":101845,"language":24771,"meta":82,"style":82},"pip install \"mujoco>=2.3\" numpy\n",[84,101847,101848],{"__ignoreMap":82},[87,101849,101850,101852,101854,101857],{"class":89,"line":90},[87,101851,24778],{"class":205},[87,101853,24781],{"class":949},[87,101855,101856],{"class":949}," \"mujoco>=2.3\"",[87,101858,101859],{"class":949}," numpy\n",[19,101861,101862],{},"安装完成后，先做最小检查：",[77,101864,101866],{"className":24769,"code":101865,"language":24771,"meta":82,"style":82},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[84,101867,101868],{"__ignoreMap":82},[87,101869,101870,101872,101874],{"class":89,"line":90},[87,101871,31327],{"class":205},[87,101873,31305],{"class":104},[87,101875,101876],{"class":949}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101878,101879],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101881,101882],{},"conda 安装:",[77,101884,101886],{"className":24769,"code":101885,"language":24771,"meta":82,"style":82},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[84,101887,101888,101908,101918],{"__ignoreMap":82},[87,101889,101890,101892,101894,101896,101899,101902,101905],{"class":89,"line":90},[87,101891,31277],{"class":205},[87,101893,30123],{"class":949},[87,101895,26063],{"class":104},[87,101897,101898],{"class":949}," mujoco-study",[87,101900,101901],{"class":949}," python=",[87,101903,101904],{"class":104},"3.10",[87,101906,101907],{"class":104}," -y\n",[87,101909,101910,101912,101915],{"class":89,"line":101},[87,101911,31277],{"class":205},[87,101913,101914],{"class":949}," activate",[87,101916,101917],{"class":949}," mujoco-study\n",[87,101919,101920,101922,101924,101926],{"class":89,"line":120},[87,101921,24778],{"class":205},[87,101923,24781],{"class":949},[87,101925,101856],{"class":949},[87,101927,101859],{"class":949},[19,101929,101930],{},"版本冲突说明:",[1055,101932,101933,101939,101949,101958],{},[29,101934,101935,101936,29332],{},"不要安装 ",[84,101937,101938],{},"mujoco-py",[29,101940,101941,101942,101944,101945,101948],{},"如果旧项目里同时安装了 ",[84,101943,101938],{}," 和 ",[84,101946,101947],{},"mujoco","，建议新建干净虚拟环境。",[29,101950,101951,101954,101955,29332],{},[84,101952,101953],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[84,101956,101957],{},"~\u002F.mujoco\u002Fmujoco210",[29,101959,101960,101961,83465,101964,101967],{},"离屏渲染可能涉及 OpenGL 后端，",[84,101962,101963],{},"MUJOCO_GL=egl",[84,101965,101966],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101969,101971],{"id":101970},"_3核心概念解释","3.核心概念解释",[19,101973,101974],{},"MuJoCo 的基本执行流程:",[77,101976,101979],{"className":101977,"code":101978,"language":599,"meta":82},[597],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[84,101980,101978],{"__ignoreMap":82},[19,101982,101983,101985],{},[84,101984,101635],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101987,101988,101990,101991,1308,101994,1308,101997,1308,102000,1308,102003,29332],{},[84,101989,101645],{}," 存放仿真运行时状态，例如 ",[84,101992,101993],{},"data.time",[84,101995,101996],{},"data.qpos",[84,101998,101999],{},"data.qvel",[84,102001,102002],{},"data.ctrl",[84,102004,102005],{},"data.xpos",[44,102007,102009],{"id":102008},"xml-是什么","XML 是什么",[19,102011,102012],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[77,102014,102016],{"className":54004,"code":102015,"language":54006,"meta":82,"style":82},"\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",[84,102017,102018,102040,102071],{"__ignoreMap":82},[87,102019,102020,102022,102024,102026,102028,102030,102033,102035,102038],{"class":89,"line":90},[87,102021,938],{"class":97},[87,102023,52737],{"class":93},[87,102025,15870],{"class":205},[87,102027,946],{"class":97},[87,102029,54427],{"class":949},[87,102031,102032],{"class":205}," pos",[87,102034,946],{"class":97},[87,102036,102037],{"class":949},"\"0 0 1\"",[87,102039,953],{"class":97},[87,102041,102042,102044,102047,102049,102051,102054,102056,102058,102060,102063,102065,102068],{"class":89,"line":101},[87,102043,53081],{"class":97},[87,102045,102046],{"class":93},"geom",[87,102048,15870],{"class":205},[87,102050,946],{"class":97},[87,102052,102053],{"class":949},"\"box_geom\"",[87,102055,54760],{"class":205},[87,102057,946],{"class":97},[87,102059,54427],{"class":949},[87,102061,102062],{"class":205}," size",[87,102064,946],{"class":97},[87,102066,102067],{"class":949},"\"0.1 0.1 0.1\"",[87,102069,102070],{"class":97},"\u002F>\n",[87,102072,102073,102075,102077],{"class":89,"line":120},[87,102074,963],{"class":97},[87,102076,52737],{"class":93},[87,102078,953],{"class":97},[19,102080,102081],{},"这段意思是：",[1055,102083,102084,102090,102097],{},[29,102085,102086,102087,102089],{},"创建一个叫 ",[84,102088,54650],{}," 的刚体。",[29,102091,102092,102093,102096],{},"它初始放在 ",[84,102094,102095],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[29,102098,102099],{},"它里面有一个盒子形状的几何体。",[44,102101,102103],{"id":102102},"timestep-是什么","timestep 是什么",[19,102105,102106],{},"XML 里的：",[77,102108,102110],{"className":54004,"code":102109,"language":54006,"meta":82,"style":82},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[84,102111,102112],{"__ignoreMap":82},[87,102113,102114,102116,102118,102121,102123,102126,102129,102131,102134],{"class":89,"line":90},[87,102115,938],{"class":97},[87,102117,70098],{"class":93},[87,102119,102120],{"class":205}," timestep",[87,102122,946],{"class":97},[87,102124,102125],{"class":949},"\"0.01\"",[87,102127,102128],{"class":205}," gravity",[87,102130,946],{"class":97},[87,102132,102133],{"class":949},"\"0 0 -9.81\"",[87,102135,102070],{"class":97},[19,102137,102138,102139,102142,102143,102145],{},"表示每调用一次 ",[84,102140,102141],{},"mj_step","，仿真时间前进 ",[84,102144,39933],{}," 秒。循环 100 次，大约就是 1 秒：",[77,102147,102150],{"className":102148,"code":102149,"language":599,"meta":82},[597],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[84,102151,102149],{"__ignoreMap":82},[44,102153,102155],{"id":102154},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,102157,102158],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[77,102160,102163],{"className":102161,"code":102162,"language":599,"meta":82},[597],"x y z qw qx qy qz\n",[84,102164,102162],{"__ignoreMap":82},[19,102166,102167,102168,102171,102172,102175],{},"表示一个自由刚体的位置和姿态。其中 ",[84,102169,102170],{},"x y z"," 是位置，",[84,102173,102174],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102177,102179],{"id":102178},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,102181,102182],{},"新建文件:",[77,102184,102186],{"className":24769,"code":102185,"language":24771,"meta":82,"style":82},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[84,102187,102188,102198,102205],{"__ignoreMap":82},[87,102189,102190,102193,102195],{"class":89,"line":90},[87,102191,102192],{"class":205},"mkdir",[87,102194,30163],{"class":104},[87,102196,102197],{"class":949}," mujoco_tutorial\n",[87,102199,102200,102203],{"class":89,"line":101},[87,102201,102202],{"class":104},"cd",[87,102204,102197],{"class":949},[87,102206,102207,102210],{"class":89,"line":120},[87,102208,102209],{"class":205},"touch",[87,102211,102212],{"class":949}," ch1_first_sim.py\n",[19,102214,102215],{},"写入:",[77,102217,102219],{"className":31325,"code":102218,"language":31327,"meta":82,"style":82},"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",[84,102220,102221,102228,102232,102236,102246,102251,102256,102260,102265,102270,102274,102279,102284,102289,102294,102299,102304,102308,102312,102316,102329,102343,102353,102357,102369,102381,102393,102405,102417,102421,102438,102443,102447,102458,102469,102473,102477,102491],{"__ignoreMap":82},[87,102222,102223,102225],{"class":89,"line":90},[87,102224,31339],{"class":171},[87,102226,102227],{"class":97}," mujoco\n",[87,102229,102230],{"class":89,"line":101},[87,102231,3355],{"emptyLinePlaceholder":1029},[87,102233,102234],{"class":89,"line":120},[87,102235,3355],{"emptyLinePlaceholder":1029},[87,102237,102238,102241,102243],{"class":89,"line":222},[87,102239,102240],{"class":104},"XML",[87,102242,14514],{"class":171},[87,102244,102245],{"class":949}," \"\"\"\n",[87,102247,102248],{"class":89,"line":234},[87,102249,102250],{"class":949},"\u003Cmujoco model=\"first_sim\">\n",[87,102252,102253],{"class":89,"line":256},[87,102254,102255],{"class":949},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[87,102257,102258],{"class":89,"line":269},[87,102259,3355],{"emptyLinePlaceholder":1029},[87,102261,102262],{"class":89,"line":463},[87,102263,102264],{"class":949},"  \u003Cworldbody>\n",[87,102266,102267],{"class":89,"line":469},[87,102268,102269],{"class":949},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[87,102271,102272],{"class":89,"line":2287},[87,102273,3355],{"emptyLinePlaceholder":1029},[87,102275,102276],{"class":89,"line":2568},[87,102277,102278],{"class":949},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[87,102280,102281],{"class":89,"line":2573},[87,102282,102283],{"class":949},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[87,102285,102286],{"class":89,"line":2579},[87,102287,102288],{"class":949},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[87,102290,102291],{"class":89,"line":2584},[87,102292,102293],{"class":949},"    \u003C\u002Fbody>\n",[87,102295,102296],{"class":89,"line":2598},[87,102297,102298],{"class":949},"  \u003C\u002Fworldbody>\n",[87,102300,102301],{"class":89,"line":2603},[87,102302,102303],{"class":949},"\u003C\u002Fmujoco>\n",[87,102305,102306],{"class":89,"line":2609},[87,102307,96624],{"class":949},[87,102309,102310],{"class":89,"line":2630},[87,102311,3355],{"emptyLinePlaceholder":1029},[87,102313,102314],{"class":89,"line":2635},[87,102315,3355],{"emptyLinePlaceholder":1029},[87,102317,102318,102320,102322,102325,102327],{"class":89,"line":2649},[87,102319,32894],{"class":171},[87,102321,2928],{"class":205},[87,102323,102324],{"class":97},"() -> ",[87,102326,96612],{"class":104},[87,102328,4693],{"class":97},[87,102330,102331,102334,102336,102339,102341],{"class":89,"line":2654},[87,102332,102333],{"class":97},"    model ",[87,102335,946],{"class":171},[87,102337,102338],{"class":97}," mujoco.MjModel.from_xml_string(",[87,102340,102240],{"class":104},[87,102342,1108],{"class":97},[87,102344,102345,102348,102350],{"class":89,"line":2683},[87,102346,102347],{"class":97},"    data ",[87,102349,946],{"class":171},[87,102351,102352],{"class":97}," mujoco.MjData(model)\n",[87,102354,102355],{"class":89,"line":2688},[87,102356,3355],{"emptyLinePlaceholder":1029},[87,102358,102359,102361,102363,102366],{"class":89,"line":2705},[87,102360,32246],{"class":104},[87,102362,165],{"class":97},[87,102364,102365],{"class":949},"\"nq:\"",[87,102367,102368],{"class":97},", model.nq)\n",[87,102370,102371,102373,102375,102378],{"class":89,"line":2710},[87,102372,32246],{"class":104},[87,102374,165],{"class":97},[87,102376,102377],{"class":949},"\"nv:\"",[87,102379,102380],{"class":97},", model.nv)\n",[87,102382,102383,102385,102387,102390],{"class":89,"line":2715},[87,102384,32246],{"class":104},[87,102386,165],{"class":97},[87,102388,102389],{"class":949},"\"nu:\"",[87,102391,102392],{"class":97},", model.nu)\n",[87,102394,102395,102397,102399,102402],{"class":89,"line":2720},[87,102396,32246],{"class":104},[87,102398,165],{"class":97},[87,102400,102401],{"class":949},"\"initial time:\"",[87,102403,102404],{"class":97},", data.time)\n",[87,102406,102407,102409,102411,102414],{"class":89,"line":2734},[87,102408,32246],{"class":104},[87,102410,165],{"class":97},[87,102412,102413],{"class":949},"\"initial qpos:\"",[87,102415,102416],{"class":97},", data.qpos.copy())\n",[87,102418,102419],{"class":89,"line":2739},[87,102420,3355],{"emptyLinePlaceholder":1029},[87,102422,102423,102425,102428,102430,102432,102434,102436],{"class":89,"line":3532},[87,102424,4155],{"class":171},[87,102426,102427],{"class":97}," _ ",[87,102429,26990],{"class":171},[87,102431,33390],{"class":104},[87,102433,165],{"class":97},[87,102435,536],{"class":104},[87,102437,31733],{"class":97},[87,102439,102440],{"class":89,"line":3546},[87,102441,102442],{"class":97},"        mujoco.mj_step(model, data)\n",[87,102444,102445],{"class":89,"line":3554},[87,102446,3355],{"emptyLinePlaceholder":1029},[87,102448,102449,102451,102453,102456],{"class":89,"line":3559},[87,102450,32246],{"class":104},[87,102452,165],{"class":97},[87,102454,102455],{"class":949},"\"final time:\"",[87,102457,102404],{"class":97},[87,102459,102460,102462,102464,102467],{"class":89,"line":3565},[87,102461,32246],{"class":104},[87,102463,165],{"class":97},[87,102465,102466],{"class":949},"\"final qpos:\"",[87,102468,102416],{"class":97},[87,102470,102471],{"class":89,"line":3571},[87,102472,3355],{"emptyLinePlaceholder":1029},[87,102474,102475],{"class":89,"line":3576},[87,102476,3355],{"emptyLinePlaceholder":1029},[87,102478,102479,102481,102483,102486,102489],{"class":89,"line":8898},[87,102480,2488],{"class":171},[87,102482,32167],{"class":104},[87,102484,102485],{"class":171}," ==",[87,102487,102488],{"class":949}," \"__main__\"",[87,102490,4693],{"class":97},[87,102492,102493],{"class":89,"line":8922},[87,102494,102495],{"class":97},"    main()\n",[44,102497,102498],{"id":102498},"代码逐段解释",[19,102500,102501],{},"导入库：",[77,102503,102505],{"className":31325,"code":102504,"language":31327,"meta":82,"style":82},"import mujoco\n",[84,102506,102507],{"__ignoreMap":82},[87,102508,102509,102511],{"class":89,"line":90},[87,102510,31339],{"class":171},[87,102512,102227],{"class":97},[19,102514,102515],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,102517,102518],{},"定义 XML：",[77,102520,102522],{"className":31325,"code":102521,"language":31327,"meta":82,"style":82},"XML = \"\"\"\n...\n\"\"\"\n",[84,102523,102524,102532,102537],{"__ignoreMap":82},[87,102525,102526,102528,102530],{"class":89,"line":90},[87,102527,102240],{"class":104},[87,102529,14514],{"class":171},[87,102531,102245],{"class":949},[87,102533,102534],{"class":89,"line":101},[87,102535,102536],{"class":949},"...\n",[87,102538,102539],{"class":89,"line":120},[87,102540,96624],{"class":949},[19,102542,102543,102544,102547],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[84,102545,102546],{},"freejoint"," 的方块。",[19,102549,102550],{},"编译模型：",[77,102552,102554],{"className":31325,"code":102553,"language":31327,"meta":82,"style":82},"model = mujoco.MjModel.from_xml_string(XML)\n",[84,102555,102556],{"__ignoreMap":82},[87,102557,102558,102561,102563,102565,102567],{"class":89,"line":90},[87,102559,102560],{"class":97},"model ",[87,102562,946],{"class":171},[87,102564,102338],{"class":97},[87,102566,102240],{"class":104},[87,102568,1108],{"class":97},[19,102570,102571],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,102573,102574],{},"创建数据：",[77,102576,102578],{"className":31325,"code":102577,"language":31327,"meta":82,"style":82},"data = mujoco.MjData(model)\n",[84,102579,102580],{"__ignoreMap":82},[87,102581,102582,102585,102587],{"class":89,"line":90},[87,102583,102584],{"class":97},"data ",[87,102586,946],{"class":171},[87,102588,102352],{"class":97},[19,102590,102591,102593,102594,102596],{},[84,102592,34348],{}," 会保存仿真当前状态。刚创建时，时间是 ",[84,102595,111],{},"，方块还在初始位置。",[19,102598,102599],{},"推进仿真：",[77,102601,102603],{"className":31325,"code":102602,"language":31327,"meta":82,"style":82},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[84,102604,102605,102621],{"__ignoreMap":82},[87,102606,102607,102609,102611,102613,102615,102617,102619],{"class":89,"line":90},[87,102608,3979],{"class":171},[87,102610,102427],{"class":97},[87,102612,26990],{"class":171},[87,102614,33390],{"class":104},[87,102616,165],{"class":97},[87,102618,536],{"class":104},[87,102620,31733],{"class":97},[87,102622,102623],{"class":89,"line":101},[87,102624,102625],{"class":97},"    mujoco.mj_step(model, data)\n",[19,102627,102628,102629,102631],{},"每次 ",[84,102630,102141],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[44,102633,102634],{"id":102634},"代码逐行细讲",[19,102636,102637],{},"下面把完整代码按新手视角拆开讲。",[77,102639,102640],{"className":31325,"code":102504,"language":31327,"meta":82,"style":82},[84,102641,102642],{"__ignoreMap":82},[87,102643,102644,102646],{"class":89,"line":90},[87,102645,31339],{"class":171},[87,102647,102227],{"class":97},[19,102649,102650,102652,102653,1308,102655,1308,102657,29332],{},[84,102651,31339],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[84,102654,101601],{},[84,102656,101606],{},[84,102658,102659],{},"mujoco.mj_step",[77,102661,102662],{"className":31325,"code":102521,"language":31327,"meta":82,"style":82},[84,102663,102664,102672,102676],{"__ignoreMap":82},[87,102665,102666,102668,102670],{"class":89,"line":90},[87,102667,102240],{"class":104},[87,102669,14514],{"class":171},[87,102671,102245],{"class":949},[87,102673,102674],{"class":89,"line":101},[87,102675,102536],{"class":949},[87,102677,102678],{"class":89,"line":120},[87,102679,96624],{"class":949},[19,102681,102682,102684,102685,102688],{},[84,102683,102240],{}," 是一个变量名。右边的三引号 ",[84,102686,102687],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[77,102690,102691],{"className":54004,"code":102250,"language":54006,"meta":82,"style":82},[84,102692,102693],{"__ignoreMap":82},[87,102694,102695,102697,102699,102702,102704,102707],{"class":89,"line":90},[87,102696,938],{"class":97},[87,102698,101947],{"class":93},[87,102700,102701],{"class":205}," model",[87,102703,946],{"class":97},[87,102705,102706],{"class":949},"\"first_sim\"",[87,102708,953],{"class":97},[19,102710,102711,102712,102715,102716,29332],{},"这是 XML 的根标签。",[84,102713,102714],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[84,102717,102718],{},"first_sim",[77,102720,102721],{"className":54004,"code":102109,"language":54006,"meta":82,"style":82},[84,102722,102723],{"__ignoreMap":82},[87,102724,102725,102727,102729,102731,102733,102735,102737,102739,102741],{"class":89,"line":90},[87,102726,938],{"class":97},[87,102728,70098],{"class":93},[87,102730,102120],{"class":205},[87,102732,946],{"class":97},[87,102734,102125],{"class":949},[87,102736,102128],{"class":205},[87,102738,946],{"class":97},[87,102740,102133],{"class":949},[87,102742,102070],{"class":97},[19,102744,102745,102747,102748,102751,102752,102755],{},[84,102746,70098],{}," 用来设置仿真参数。",[84,102749,102750],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[84,102753,102754],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[77,102757,102759],{"className":54004,"code":102758,"language":54006,"meta":82,"style":82},"\u003Cworldbody>\n",[84,102760,102761],{"__ignoreMap":82},[87,102762,102763,102765,102768],{"class":89,"line":90},[87,102764,938],{"class":97},[87,102766,102767],{"class":93},"worldbody",[87,102769,953],{"class":97},[19,102771,102772,102774],{},[84,102773,102767],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[77,102776,102778],{"className":54004,"code":102777,"language":54006,"meta":82,"style":82},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[84,102779,102780],{"__ignoreMap":82},[87,102781,102782,102784,102786,102788,102790,102793,102795,102797,102800,102802,102804,102807,102809,102811,102814],{"class":89,"line":90},[87,102783,938],{"class":97},[87,102785,102046],{"class":93},[87,102787,15870],{"class":205},[87,102789,946],{"class":97},[87,102791,102792],{"class":949},"\"floor\"",[87,102794,54760],{"class":205},[87,102796,946],{"class":97},[87,102798,102799],{"class":949},"\"plane\"",[87,102801,102062],{"class":205},[87,102803,946],{"class":97},[87,102805,102806],{"class":949},"\"2 2 0.1\"",[87,102808,79694],{"class":205},[87,102810,946],{"class":97},[87,102812,102813],{"class":949},"\"0.8 0.8 0.8 1\"",[87,102815,102070],{"class":97},[19,102817,102818,102819,102821,102822,102825,102826,102829,102830,102832],{},"这行创建地面。",[84,102820,102046],{}," 是几何体。",[84,102823,102824],{},"name=\"floor\""," 是名字。",[84,102827,102828],{},"type=\"plane\""," 表示平面。",[84,102831,56046],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[77,102834,102836],{"className":54004,"code":102835,"language":54006,"meta":82,"style":82},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[84,102837,102838],{"__ignoreMap":82},[87,102839,102840,102842,102844,102846,102848,102850,102852,102854,102856],{"class":89,"line":90},[87,102841,938],{"class":97},[87,102843,52737],{"class":93},[87,102845,15870],{"class":205},[87,102847,946],{"class":97},[87,102849,54427],{"class":949},[87,102851,102032],{"class":205},[87,102853,946],{"class":97},[87,102855,102037],{"class":949},[87,102857,953],{"class":97},[19,102859,102860,102861,29332,102863,102866,102867,102869],{},"这行创建一个刚体，名字叫 ",[84,102862,54650],{},[84,102864,102865],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[84,102868,102095],{},"，也就是离地面 1 米高。",[77,102871,102873],{"className":54004,"code":102872,"language":54006,"meta":82,"style":82},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[84,102874,102875],{"__ignoreMap":82},[87,102876,102877,102879,102881,102883,102885,102888],{"class":89,"line":90},[87,102878,938],{"class":97},[87,102880,102546],{"class":93},[87,102882,15870],{"class":205},[87,102884,946],{"class":97},[87,102886,102887],{"class":949},"\"box_free\"",[87,102889,102070],{"class":97},[19,102891,102892,102893,102895],{},"这行很重要。",[84,102894,102546],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[77,102897,102899],{"className":54004,"code":102898,"language":54006,"meta":82,"style":82},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[84,102900,102901],{"__ignoreMap":82},[87,102902,102903,102905,102907,102909,102911,102913,102915,102917,102919,102921,102923,102925,102928,102930,102932,102934,102936,102939],{"class":89,"line":90},[87,102904,938],{"class":97},[87,102906,102046],{"class":93},[87,102908,15870],{"class":205},[87,102910,946],{"class":97},[87,102912,102053],{"class":949},[87,102914,54760],{"class":205},[87,102916,946],{"class":97},[87,102918,54427],{"class":949},[87,102920,102062],{"class":205},[87,102922,946],{"class":97},[87,102924,102067],{"class":949},[87,102926,102927],{"class":205}," mass",[87,102929,946],{"class":97},[87,102931,4632],{"class":949},[87,102933,79694],{"class":205},[87,102935,946],{"class":97},[87,102937,102938],{"class":949},"\"1 0 0 1\"",[87,102940,102070],{"class":97},[19,102942,102943,102944,102947,102948,102951,102952,102955,102956,102959],{},"这行给 box body 添加一个盒子形状。",[84,102945,102946],{},"type=\"box\""," 表示形状是盒子。",[84,102949,102950],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[84,102953,102954],{},"mass=\"1\""," 表示质量是 1。",[84,102957,102958],{},"rgba=\"1 0 0 1\""," 表示红色。",[77,102961,102963],{"className":31325,"code":102962,"language":31327,"meta":82,"style":82},"def main() -> None:\n",[84,102964,102965],{"__ignoreMap":82},[87,102966,102967,102969,102971,102973,102975],{"class":89,"line":90},[87,102968,32894],{"class":171},[87,102970,2928],{"class":205},[87,102972,102324],{"class":97},[87,102974,96612],{"class":104},[87,102976,4693],{"class":97},[19,102978,102979,102981,102982,102985,102986,102989],{},[84,102980,32894],{}," 用来定义函数。这里定义了一个叫 ",[84,102983,102984],{},"main"," 的函数。",[84,102987,102988],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[77,102991,102992],{"className":31325,"code":102553,"language":31327,"meta":82,"style":82},[84,102993,102994],{"__ignoreMap":82},[87,102995,102996,102998,103000,103002,103004],{"class":89,"line":90},[87,102997,102560],{"class":97},[87,102999,946],{"class":171},[87,103001,102338],{"class":97},[87,103003,102240],{"class":104},[87,103005,1108],{"class":97},[19,103007,103008,103009,103012],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[84,103010,103011],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[77,103014,103015],{"className":31325,"code":102577,"language":31327,"meta":82,"style":82},[84,103016,103017],{"__ignoreMap":82},[87,103018,103019,103021,103023],{"class":89,"line":90},[87,103020,102584],{"class":97},[87,103022,946],{"class":171},[87,103024,102352],{"class":97},[19,103026,103027,103028,103030,103031,103033],{},"这行创建仿真数据。",[84,103029,34348],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[84,103032,34348],{}," 都会变化。",[77,103035,103037],{"className":31325,"code":103036,"language":31327,"meta":82,"style":82},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[84,103038,103039,103049,103059],{"__ignoreMap":82},[87,103040,103041,103043,103045,103047],{"class":89,"line":90},[87,103042,31362],{"class":104},[87,103044,165],{"class":97},[87,103046,102365],{"class":949},[87,103048,102368],{"class":97},[87,103050,103051,103053,103055,103057],{"class":89,"line":101},[87,103052,31362],{"class":104},[87,103054,165],{"class":97},[87,103056,102377],{"class":949},[87,103058,102380],{"class":97},[87,103060,103061,103063,103065,103067],{"class":89,"line":120},[87,103062,31362],{"class":104},[87,103064,165],{"class":97},[87,103066,102389],{"class":949},[87,103068,102392],{"class":97},[19,103070,103071,103073,103074,103077,103078,103081,103082,103085,103086,103089],{},[84,103072,31362],{}," 用来输出信息。",[84,103075,103076],{},"model.nq"," 是位置变量数量，",[84,103079,103080],{},"model.nv"," 是速度变量数量，",[84,103083,103084],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[84,103087,103088],{},"nu"," 是 0。",[77,103091,103093],{"className":31325,"code":103092,"language":31327,"meta":82,"style":82},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[84,103094,103095,103105],{"__ignoreMap":82},[87,103096,103097,103099,103101,103103],{"class":89,"line":90},[87,103098,31362],{"class":104},[87,103100,165],{"class":97},[87,103102,102401],{"class":949},[87,103104,102404],{"class":97},[87,103106,103107,103109,103111,103113],{"class":89,"line":101},[87,103108,31362],{"class":104},[87,103110,165],{"class":97},[87,103112,102413],{"class":949},[87,103114,102416],{"class":97},[19,103116,103117,103118,103120,103121,103123,103124,103127],{},"这里打印初始时间和初始位置。",[84,103119,101993],{}," 一开始是 0。",[84,103122,101996],{}," 是位置数组。",[84,103125,103126],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[77,103129,103130],{"className":31325,"code":102602,"language":31327,"meta":82,"style":82},[84,103131,103132,103148],{"__ignoreMap":82},[87,103133,103134,103136,103138,103140,103142,103144,103146],{"class":89,"line":90},[87,103135,3979],{"class":171},[87,103137,102427],{"class":97},[87,103139,26990],{"class":171},[87,103141,33390],{"class":104},[87,103143,165],{"class":97},[87,103145,536],{"class":104},[87,103147,31733],{"class":97},[87,103149,103150],{"class":89,"line":101},[87,103151,102625],{"class":97},[19,103153,103154,103156,103157,103160,103161,103163,103164,103166],{},[84,103155,3979],{}," 是循环。",[84,103158,103159],{},"range(100)"," 表示循环 100 次。",[84,103162,2083],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[84,103165,102141],{},"，仿真就前进一步。",[77,103168,103170],{"className":31325,"code":103169,"language":31327,"meta":82,"style":82},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[84,103171,103172,103182],{"__ignoreMap":82},[87,103173,103174,103176,103178,103180],{"class":89,"line":90},[87,103175,31362],{"class":104},[87,103177,165],{"class":97},[87,103179,102455],{"class":949},[87,103181,102404],{"class":97},[87,103183,103184,103186,103188,103190],{"class":89,"line":101},[87,103185,31362],{"class":104},[87,103187,165],{"class":97},[87,103189,102466],{"class":949},[87,103191,102416],{"class":97},[19,103193,103194],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[77,103196,103198],{"className":31325,"code":103197,"language":31327,"meta":82,"style":82},"if __name__ == \"__main__\":\n    main()\n",[84,103199,103200,103212],{"__ignoreMap":82},[87,103201,103202,103204,103206,103208,103210],{"class":89,"line":90},[87,103203,2488],{"class":171},[87,103205,32167],{"class":104},[87,103207,102485],{"class":171},[87,103209,102488],{"class":949},[87,103211,4693],{"class":97},[87,103213,103214],{"class":89,"line":101},[87,103215,102495],{"class":97},[19,103217,103218,103219,103222,103223,29332],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[84,103220,103221],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[84,103224,103221],{},[19,103226,103227],{},"运行:",[77,103229,103231],{"className":24769,"code":103230,"language":24771,"meta":82,"style":82},"python ch1_first_sim.py\n",[84,103232,103233],{"__ignoreMap":82},[87,103234,103235,103237],{"class":89,"line":90},[87,103236,31327],{"class":205},[87,103238,102212],{"class":949},[14,103240,103242],{"id":103241},"_5运行结果说明","5.运行结果说明",[19,103244,103245],{},"你应该看到类似输出:",[77,103247,103250],{"className":103248,"code":103249,"language":599,"meta":82},[597],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[84,103251,103249],{"__ignoreMap":82},[19,103253,103254,103256,103257,103260,103261,29332],{},[84,103255,102546],{}," 有 7 个位置变量: ",[84,103258,103259],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[84,103262,103263],{},"vx vy vz wx wy wz",[19,103265,103266,103267,103270],{},"你还会看到 ",[84,103268,103269],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103272,103274],{"id":103273},"_6验证步骤","6.验证步骤",[19,103276,103277],{},"确认版本:",[77,103279,103280],{"className":24769,"code":101865,"language":24771,"meta":82,"style":82},[84,103281,103282],{"__ignoreMap":82},[87,103283,103284,103286,103288],{"class":89,"line":90},[87,103285,31327],{"class":205},[87,103287,31305],{"class":104},[87,103289,101876],{"class":949},[19,103291,103292],{},"确认导入的是官方 bindings:",[77,103294,103296],{"className":24769,"code":103295,"language":24771,"meta":82,"style":82},"python -c \"import mujoco; print(mujoco)\"\n",[84,103297,103298],{"__ignoreMap":82},[87,103299,103300,103302,103304],{"class":89,"line":90},[87,103301,31327],{"class":205},[87,103303,31305],{"class":104},[87,103305,103306],{"class":949}," \"import mujoco; print(mujoco)\"\n",[19,103308,103309],{},"运行程序:",[77,103311,103312],{"className":24769,"code":103230,"language":24771,"meta":82,"style":82},[84,103313,103314],{"__ignoreMap":82},[87,103315,103316,103318],{"class":89,"line":90},[87,103317,31327],{"class":205},[87,103319,102212],{"class":949},[19,103321,103322,103323,103326,103327,29332],{},"检查 ",[84,103324,103325],{},"final time"," 是否约等于 ",[84,103328,103329],{},"1.0",[19,103331,103332],{},"再做几个小实验：",[1055,103334,103335,103345,103353,103366],{},[29,103336,103337,103338,103340,103341,103344],{},"把 ",[84,103339,102865],{}," 改成 ",[84,103342,103343],{},"pos=\"0 0 2\"","，观察初始高度变化。",[29,103346,103337,103347,103340,103349,103352],{},[84,103348,102754],{},[84,103350,103351],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[29,103354,103337,103355,103340,103357,103360,103361,103363,103364,29332],{},[84,103356,102750],{},[84,103358,103359],{},"timestep=\"0.005\"","，观察 100 步后的 ",[84,103362,103325],{}," 是否变成约 ",[84,103365,36276],{},[29,103367,103368,103369,103372],{},"删除 ",[84,103370,103371],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,103374,103375],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,103377,103379],{"id":103378},"_7常见错误与解决方案","7.常见错误与解决方案",[44,103381,103383],{"id":103382},"modulenotfounderror-no-module-named-mujoco",[84,103384,103385],{},"ModuleNotFoundError: No module named 'mujoco'",[19,103387,103388],{},"解决:",[77,103390,103392],{"className":24769,"code":103391,"language":24771,"meta":82,"style":82},"pip install \"mujoco>=2.3\"\n",[84,103393,103394],{"__ignoreMap":82},[87,103395,103396,103398,103400],{"class":89,"line":90},[87,103397,24778],{"class":205},[87,103399,24781],{"class":949},[87,103401,103402],{"class":949}," \"mujoco>=2.3\"\n",[44,103404,103406],{"id":103405},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,103408,103409],{},"先安装系统依赖:",[77,103411,103413],{"className":24769,"code":103412,"language":24771,"meta":82,"style":82},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[84,103414,103415],{"__ignoreMap":82},[87,103416,103417,103419,103421,103423,103425,103428,103430,103433,103435,103438,103440],{"class":89,"line":90},[87,103418,25524],{"class":205},[87,103420,27262],{"class":949},[87,103422,24781],{"class":949},[87,103424,27347],{"class":104},[87,103426,103427],{"class":949}," mesa-libGL",[87,103429,101740],{"class":949},[87,103431,103432],{"class":949}," glfw",[87,103434,101760],{"class":949},[87,103436,103437],{"class":949}," libX11",[87,103439,101773],{"class":949},[87,103441,103442],{"class":949}," libXrandr\n",[44,103444,103446],{"id":103445},"xml-解析失败","XML 解析失败",[19,103448,103449],{},"检查:",[1055,103451,103452,103455,103458,103464],{},[29,103453,103454],{},"标签是否闭合",[29,103456,103457],{},"属性是否带引号",[29,103459,103460,103461],{},"根节点是否是 ",[84,103462,103463],{},"\u003Cmujoco>",[29,103465,103466,103468,103469,103472],{},[84,103467,52737],{}," 是否放在 ",[84,103470,103471],{},"\u003Cworldbody>"," 内部",[44,103474,103476,103478,103479],{"id":103475},"final-time-不是严格等于-10",[84,103477,103325],{}," 不是严格等于 ",[84,103480,103329],{},[19,103482,103483],{},"这通常不是错误。浮点数计算可能得到：",[77,103485,103488],{"className":103486,"code":103487,"language":599,"meta":82},[597],"1.0000000000000007\n",[84,103489,103487],{"__ignoreMap":82},[19,103491,103492,103493,103495],{},"只要接近 ",[84,103494,103329],{}," 就正常。",[44,103497,103498],{"id":103498},"方块没有掉下来",[19,103500,103501],{},"检查：",[1055,103503,103504,103510,103516,103521],{},[29,103505,103506,103507],{},"方块 body 里是否有 ",[84,103508,103509],{},"\u003Cfreejoint\u002F>",[29,103511,103512,103513],{},"重力是否是 ",[84,103514,103515],{},"0 0 -9.81",[29,103517,103518,103519],{},"是否真的调用了 ",[84,103520,101611],{},[29,103522,103523,103524,103526,103527],{},"你看的是否是 ",[84,103525,103269],{},"，不是 ",[84,103528,103529],{},"initial qpos",[14,103531,103533],{"id":103532},"_8本章小结","8.本章小结",[19,103535,103536],{},"本章你已经完成了 MuJoCo 的最小闭环：",[77,103538,103541],{"className":103539,"code":103540,"language":599,"meta":82},[597],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[84,103542,103540],{"__ignoreMap":82},[19,103544,103545],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1006,103547,103548],{},"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":82,"searchDepth":101,"depth":101,"links":103550},[103551,103552,103553,103558,103562,103563,103564,103572],{"id":101572,"depth":101,"text":101573},{"id":101695,"depth":101,"text":101696},{"id":101970,"depth":101,"text":101971,"children":103554},[103555,103556,103557],{"id":102008,"depth":120,"text":102009},{"id":102102,"depth":120,"text":102103},{"id":102154,"depth":120,"text":102155},{"id":102178,"depth":101,"text":102179,"children":103559},[103560,103561],{"id":102498,"depth":120,"text":102498},{"id":102634,"depth":120,"text":102634},{"id":103241,"depth":101,"text":103242},{"id":103273,"depth":101,"text":103274},{"id":103378,"depth":101,"text":103379,"children":103565},[103566,103567,103568,103569,103571],{"id":103382,"depth":120,"text":103385},{"id":103405,"depth":120,"text":103406},{"id":103445,"depth":120,"text":103446},{"id":103475,"depth":120,"text":103570},"final time 不是严格等于 1.0",{"id":103498,"depth":120,"text":103498},{"id":103532,"depth":101,"text":103533},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101564,"description":82},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103579,"title":103580,"body":103581,"description":82,"extension":1027,"meta":105237,"navigation":1029,"path":105238,"seo":105239,"stem":105240,"__hash__":105241},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103582,"toc":105213},[103583,103586,103588,103591,103594,103611,103706,103709,103715,103717,103719,103743,103746,103760,103763,103804,103806,103819,103821,103824,103872,103884,103887,103890,103896,103909,103976,103979,103998,104001,104004,104010,104012,104021,104024,104028,104037,104119,104128,104132,104138,104152,104162,104164,104494,104497,104509,104511,104522,104524,104527,104545,104548,104551,104569,104580,104583,104598,104608,104610,104631,104648,104668,104674,104714,104730,104746,104752,104755,104779,104795,104800,104830,104847,104872,104875,104890,104899,104914,104923,104938,104945,104947,104957,104970,104977,104980,105019,105026,105028,105080,105082,105088,105091,105098,105105,105108,105110,105128,105131,105134,105168,105180,105182,105185,105207,105210],[10,103584,103580],{"id":103585},"_2xml-与-mjcf-物理建模基础",[14,103587,101573],{"id":101572},[19,103589,103590],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,103592,103593],{},"本章结束后，你应该能看懂一个简单模型里：",[1055,103595,103596,103599,103602,103605,103608],{},[29,103597,103598],{},"地面在哪里。",[29,103600,103601],{},"物体初始位置在哪里。",[29,103603,103604],{},"几何体是什么形状。",[29,103606,103607],{},"哪些 body 可以自由运动。",[29,103609,103610],{},"如何用名字在 Python 里找到 XML 中的对象。",[1235,103612,103613,103623],{},[1238,103614,103615],{},[1241,103616,103617,103620],{},[1244,103618,103619],{"align":24683},"标签",[1244,103621,103622],{"align":24683},"作用",[1281,103624,103625,103634,103644,103653,103663,103673,103686,103696],{},[1241,103626,103627,103631],{},[1286,103628,103629],{"align":24683},[84,103630,103463],{},[1286,103632,103633],{"align":24683},"根节点",[1241,103635,103636,103641],{},[1286,103637,103638],{"align":24683},[84,103639,103640],{},"\u003Coption>",[1286,103642,103643],{"align":24683},"仿真参数",[1241,103645,103646,103650],{},[1286,103647,103648],{"align":24683},[84,103649,103471],{},[1286,103651,103652],{"align":24683},"世界中的物体",[1241,103654,103655,103660],{},[1286,103656,103657],{"align":24683},[84,103658,103659],{},"\u003Cbody>",[1286,103661,103662],{"align":24683},"刚体",[1241,103664,103665,103670],{},[1286,103666,103667],{"align":24683},[84,103668,103669],{},"\u003Cgeom>",[1286,103671,103672],{"align":24683},"几何体、碰撞体、可视体",[1241,103674,103675,103683],{},[1286,103676,103677,25926,103680],{"align":24683},[84,103678,103679],{},"\u003Cjoint>",[84,103681,103682],{},"\u003Cfreejoint>",[1286,103684,103685],{"align":24683},"关节",[1241,103687,103688,103693],{},[1286,103689,103690],{"align":24683},[84,103691,103692],{},"\u003Csite>",[1286,103694,103695],{"align":24683},"标记点",[1241,103697,103698,103703],{},[1286,103699,103700],{"align":24683},[84,103701,103702],{},"\u003Cactuator>",[1286,103704,103705],{"align":24683},"控制器",[19,103707,103708],{},"初学时可以先记住：",[77,103710,103713],{"className":103711,"code":103712,"language":599,"meta":82},[597],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[84,103714,103712],{"__ignoreMap":82},[14,103716,101696],{"id":101695},[19,103718,101699],{},[77,103720,103722],{"className":24769,"code":103721,"language":24771,"meta":82,"style":82},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[84,103723,103724],{"__ignoreMap":82},[87,103725,103726,103728,103730,103732,103734,103736,103738,103740],{"class":89,"line":90},[87,103727,25524],{"class":205},[87,103729,27262],{"class":949},[87,103731,24781],{"class":949},[87,103733,27347],{"class":104},[87,103735,103427],{"class":949},[87,103737,101740],{"class":949},[87,103739,103432],{"class":949},[87,103741,103742],{"class":949}," glfw-devel\n",[19,103744,103745],{},"pip:",[77,103747,103748],{"className":24769,"code":101845,"language":24771,"meta":82,"style":82},[84,103749,103750],{"__ignoreMap":82},[87,103751,103752,103754,103756,103758],{"class":89,"line":90},[87,103753,24778],{"class":205},[87,103755,24781],{"class":949},[87,103757,101856],{"class":949},[87,103759,101859],{"class":949},[19,103761,103762],{},"conda:",[77,103764,103766],{"className":24769,"code":103765,"language":24771,"meta":82,"style":82},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[84,103767,103768,103785,103794],{"__ignoreMap":82},[87,103769,103770,103772,103774,103776,103779,103781,103783],{"class":89,"line":90},[87,103771,31277],{"class":205},[87,103773,30123],{"class":949},[87,103775,26063],{"class":104},[87,103777,103778],{"class":949}," mujoco-xml",[87,103780,101901],{"class":949},[87,103782,101904],{"class":104},[87,103784,101907],{"class":104},[87,103786,103787,103789,103791],{"class":89,"line":101},[87,103788,31277],{"class":205},[87,103790,101914],{"class":949},[87,103792,103793],{"class":949}," mujoco-xml\n",[87,103795,103796,103798,103800,103802],{"class":89,"line":120},[87,103797,24778],{"class":205},[87,103799,24781],{"class":949},[87,103801,101856],{"class":949},[87,103803,101859],{"class":949},[19,103805,101930],{},[1055,103807,103808,103811,103816],{},[29,103809,103810],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[29,103812,103813,103814,29332],{},"本章使用基础标签，适用于 ",[84,103815,101953],{},[29,103817,103818],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103820,101971],{"id":101970},[19,103822,103823],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[77,103825,103827],{"className":54004,"code":103826,"language":54006,"meta":82,"style":82},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[84,103828,103829,103843,103851,103856,103864],{"__ignoreMap":82},[87,103830,103831,103833,103835,103837,103839,103841],{"class":89,"line":90},[87,103832,938],{"class":97},[87,103834,101947],{"class":93},[87,103836,102701],{"class":205},[87,103838,946],{"class":97},[87,103840,63613],{"class":949},[87,103842,953],{"class":97},[87,103844,103845,103847,103849],{"class":89,"line":101},[87,103846,53081],{"class":97},[87,103848,102767],{"class":93},[87,103850,953],{"class":97},[87,103852,103853],{"class":89,"line":120},[87,103854,103855],{"class":97},"    ...\n",[87,103857,103858,103860,103862],{"class":89,"line":222},[87,103859,53354],{"class":97},[87,103861,102767],{"class":93},[87,103863,953],{"class":97},[87,103865,103866,103868,103870],{"class":89,"line":234},[87,103867,963],{"class":97},[87,103869,101947],{"class":93},[87,103871,953],{"class":97},[19,103873,103874,103876,103877,103879,103880,103883],{},[84,103875,52737],{}," 表示刚体。",[84,103878,102046],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[84,103881,103882],{},"joint"," 表示刚体相对父刚体如何运动。",[44,103885,103886],{"id":103886},"层级结构非常重要",[19,103888,103889],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[77,103891,103894],{"className":103892,"code":103893,"language":599,"meta":82},[597],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[84,103895,103893],{"__ignoreMap":82},[19,103897,103898,101944,103901,103904,103905,103908],{},[84,103899,103900],{},"red_box_geom",[84,103902,103903],{},"box_center"," 都属于 ",[84,103906,103907],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[77,103910,103912],{"className":54004,"code":103911,"language":54006,"meta":82,"style":82},"\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",[84,103913,103914,103934,103948,103968],{"__ignoreMap":82},[87,103915,103916,103918,103920,103922,103924,103926,103928,103930,103932],{"class":89,"line":90},[87,103917,938],{"class":97},[87,103919,52737],{"class":93},[87,103921,15870],{"class":205},[87,103923,946],{"class":97},[87,103925,54427],{"class":949},[87,103927,102032],{"class":205},[87,103929,946],{"class":97},[87,103931,102037],{"class":949},[87,103933,953],{"class":97},[87,103935,103936,103938,103940,103942,103944,103946],{"class":89,"line":101},[87,103937,53081],{"class":97},[87,103939,102546],{"class":93},[87,103941,15870],{"class":205},[87,103943,946],{"class":97},[87,103945,102887],{"class":949},[87,103947,102070],{"class":97},[87,103949,103950,103952,103954,103956,103958,103960,103962,103964,103966],{"class":89,"line":120},[87,103951,53081],{"class":97},[87,103953,102046],{"class":93},[87,103955,54760],{"class":205},[87,103957,946],{"class":97},[87,103959,54427],{"class":949},[87,103961,102062],{"class":205},[87,103963,946],{"class":97},[87,103965,102067],{"class":949},[87,103967,102070],{"class":97},[87,103969,103970,103972,103974],{"class":89,"line":222},[87,103971,963],{"class":97},[87,103973,52737],{"class":93},[87,103975,953],{"class":97},[19,103977,103978],{},"含义:",[1055,103980,103981,103987,103992,103995],{},[29,103982,103983,103984,103986],{},"创建名为 ",[84,103985,54650],{}," 的刚体",[29,103988,103989,103990],{},"初始位置在世界坐标 ",[84,103991,102095],{},[29,103993,103994],{},"它有一个自由关节",[29,103996,103997],{},"它有一个盒子几何体",[44,103999,104000],{"id":104000},"坐标怎么理解",[19,104002,104003],{},"MuJoCo 默认使用三维坐标：",[77,104005,104008],{"className":104006,"code":104007,"language":599,"meta":82},[597],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[84,104009,104007],{"__ignoreMap":82},[19,104011,15583],{},[77,104013,104015],{"className":54004,"code":104014,"language":54006,"meta":82,"style":82},"pos=\"0 0 1\"\n",[84,104016,104017],{"__ignoreMap":82},[87,104018,104019],{"class":89,"line":90},[87,104020,104014],{"class":97},[19,104022,104023],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[44,104025,104027],{"id":104026},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,104029,104030,104031,83456,104034,104036],{},"不同 ",[84,104032,104033],{},"type",[84,104035,32443],{}," 含义不同：",[1235,104038,104039,104054],{},[1238,104040,104041],{},[1241,104042,104043,104047,104052],{},[1244,104044,104045],{"align":24683},[84,104046,104033],{},[1244,104048,104049,104051],{"align":24683},[84,104050,32443],{}," 示例",[1244,104053,101626],{"align":24683},[1281,104055,104056,104070,104085,104104],{},[1241,104057,104058,104062,104067],{},[1286,104059,104060],{"align":24683},[84,104061,54650],{},[1286,104063,104064],{"align":24683},[84,104065,104066],{},"size=\"0.1 0.2 0.3\"",[1286,104068,104069],{"align":24683},"x\u002Fy\u002Fz 半边长，不是完整长度",[1241,104071,104072,104077,104082],{},[1286,104073,104074],{"align":24683},[84,104075,104076],{},"sphere",[1286,104078,104079],{"align":24683},[84,104080,104081],{},"size=\"0.1\"",[1286,104083,104084],{"align":24683},"球半径",[1241,104086,104087,104092,104097],{},[1286,104088,104089],{"align":24683},[84,104090,104091],{},"capsule",[1286,104093,104094],{"align":24683},[84,104095,104096],{},"size=\"0.03\"",[1286,104098,104099,104100,104103],{"align":24683},"胶囊半径，长度常用 ",[84,104101,104102],{},"fromto"," 指定",[1241,104105,104106,104111,104116],{},[1286,104107,104108],{"align":24683},[84,104109,104110],{},"plane",[1286,104112,104113],{"align":24683},[84,104114,104115],{},"size=\"3 3 0.1\"",[1286,104117,104118],{"align":24683},"可视平面大小，通常当地面",[19,104120,104121,104122,104124,104125,104127],{},"最容易踩坑的是 box：",[84,104123,102950],{}," 表示边长大约是 ",[84,104126,32984],{},"，因为 MuJoCo 用的是半边长。",[44,104129,104131],{"id":104130},"site-是什么","site 是什么",[19,104133,104134,104137],{},[84,104135,104136],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[1055,104139,104140,104143,104146,104149],{},[29,104141,104142],{},"标记机械臂末端。",[29,104144,104145],{},"标记目标位置。",[29,104147,104148],{},"放传感器或相机参考点。",[29,104150,104151],{},"在 Python 中读取某个关键点的世界坐标。",[19,104153,104154,104155,101944,104158,104161],{},"在后面的 Reacher 任务中，",[84,104156,104157],{},"tip",[84,104159,104160],{},"target"," 就会用 site 表示。",[14,104163,102179],{"id":102178},[77,104165,104167],{"className":31325,"code":104166,"language":31327,"meta":82,"style":82},"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",[84,104168,104169,104175,104185,104189,104193,104201,104206,104210,104214,104218,104223,104227,104232,104237,104242,104247,104251,104255,104259,104263,104267,104271,104283,104295,104303,104307,104322,104337,104341,104354,104369,104382,104395,104399,104415,104419,104423,104434,104446,104458,104470,104474,104478,104490],{"__ignoreMap":82},[87,104170,104171,104173],{"class":89,"line":90},[87,104172,31339],{"class":171},[87,104174,102227],{"class":97},[87,104176,104177,104179,104181,104183],{"class":89,"line":101},[87,104178,31339],{"class":171},[87,104180,32327],{"class":97},[87,104182,32330],{"class":171},[87,104184,32333],{"class":97},[87,104186,104187],{"class":89,"line":120},[87,104188,3355],{"emptyLinePlaceholder":1029},[87,104190,104191],{"class":89,"line":222},[87,104192,3355],{"emptyLinePlaceholder":1029},[87,104194,104195,104197,104199],{"class":89,"line":234},[87,104196,102240],{"class":104},[87,104198,14514],{"class":171},[87,104200,102245],{"class":949},[87,104202,104203],{"class":89,"line":256},[87,104204,104205],{"class":949},"\u003Cmujoco model=\"xml_basic\">\n",[87,104207,104208],{"class":89,"line":269},[87,104209,102255],{"class":949},[87,104211,104212],{"class":89,"line":463},[87,104213,3355],{"emptyLinePlaceholder":1029},[87,104215,104216],{"class":89,"line":469},[87,104217,102264],{"class":949},[87,104219,104220],{"class":89,"line":2287},[87,104221,104222],{"class":949},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[87,104224,104225],{"class":89,"line":2568},[87,104226,3355],{"emptyLinePlaceholder":1029},[87,104228,104229],{"class":89,"line":2573},[87,104230,104231],{"class":949},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[87,104233,104234],{"class":89,"line":2579},[87,104235,104236],{"class":949},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[87,104238,104239],{"class":89,"line":2584},[87,104240,104241],{"class":949},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[87,104243,104244],{"class":89,"line":2598},[87,104245,104246],{"class":949},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[87,104248,104249],{"class":89,"line":2603},[87,104250,102293],{"class":949},[87,104252,104253],{"class":89,"line":2609},[87,104254,102298],{"class":949},[87,104256,104257],{"class":89,"line":2630},[87,104258,102303],{"class":949},[87,104260,104261],{"class":89,"line":2635},[87,104262,96624],{"class":949},[87,104264,104265],{"class":89,"line":2649},[87,104266,3355],{"emptyLinePlaceholder":1029},[87,104268,104269],{"class":89,"line":2654},[87,104270,3355],{"emptyLinePlaceholder":1029},[87,104272,104273,104275,104277,104279,104281],{"class":89,"line":2683},[87,104274,32894],{"class":171},[87,104276,2928],{"class":205},[87,104278,102324],{"class":97},[87,104280,96612],{"class":104},[87,104282,4693],{"class":97},[87,104284,104285,104287,104289,104291,104293],{"class":89,"line":2688},[87,104286,102333],{"class":97},[87,104288,946],{"class":171},[87,104290,102338],{"class":97},[87,104292,102240],{"class":104},[87,104294,1108],{"class":97},[87,104296,104297,104299,104301],{"class":89,"line":2705},[87,104298,102347],{"class":97},[87,104300,946],{"class":171},[87,104302,102352],{"class":97},[87,104304,104305],{"class":89,"line":2710},[87,104306,3355],{"emptyLinePlaceholder":1029},[87,104308,104309,104312,104314,104317,104320],{"class":89,"line":2715},[87,104310,104311],{"class":97},"    box_body_id ",[87,104313,946],{"class":171},[87,104315,104316],{"class":97}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[87,104318,104319],{"class":949},"\"red_box\"",[87,104321,1108],{"class":97},[87,104323,104324,104327,104329,104332,104335],{"class":89,"line":2720},[87,104325,104326],{"class":97},"    site_id ",[87,104328,946],{"class":171},[87,104330,104331],{"class":97}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[87,104333,104334],{"class":949},"\"box_center\"",[87,104336,1108],{"class":97},[87,104338,104339],{"class":89,"line":2734},[87,104340,3355],{"emptyLinePlaceholder":1029},[87,104342,104343,104345,104348,104350,104352],{"class":89,"line":2739},[87,104344,4055],{"class":171},[87,104346,104347],{"class":97}," box_body_id ",[87,104349,938],{"class":171},[87,104351,577],{"class":104},[87,104353,4693],{"class":97},[87,104355,104356,104359,104362,104364,104367],{"class":89,"line":3532},[87,104357,104358],{"class":171},"        raise",[87,104360,104361],{"class":104}," RuntimeError",[87,104363,165],{"class":97},[87,104365,104366],{"class":949},"\"body red_box not found\"",[87,104368,1108],{"class":97},[87,104370,104371,104373,104376,104378,104380],{"class":89,"line":3546},[87,104372,4055],{"class":171},[87,104374,104375],{"class":97}," site_id ",[87,104377,938],{"class":171},[87,104379,577],{"class":104},[87,104381,4693],{"class":97},[87,104383,104384,104386,104388,104390,104393],{"class":89,"line":3554},[87,104385,104358],{"class":171},[87,104387,104361],{"class":104},[87,104389,165],{"class":97},[87,104391,104392],{"class":949},"\"site box_center not found\"",[87,104394,1108],{"class":97},[87,104396,104397],{"class":89,"line":3559},[87,104398,3355],{"emptyLinePlaceholder":1029},[87,104400,104401,104403,104405,104407,104409,104411,104413],{"class":89,"line":3565},[87,104402,4155],{"class":171},[87,104404,102427],{"class":97},[87,104406,26990],{"class":171},[87,104408,33390],{"class":104},[87,104410,165],{"class":97},[87,104412,2678],{"class":104},[87,104414,31733],{"class":97},[87,104416,104417],{"class":89,"line":3571},[87,104418,102442],{"class":97},[87,104420,104421],{"class":89,"line":3576},[87,104422,3355],{"emptyLinePlaceholder":1029},[87,104424,104425,104427,104429,104432],{"class":89,"line":8898},[87,104426,32246],{"class":104},[87,104428,165],{"class":97},[87,104430,104431],{"class":949},"\"simulation time:\"",[87,104433,102404],{"class":97},[87,104435,104436,104438,104440,104443],{"class":89,"line":8922},[87,104437,32246],{"class":104},[87,104439,165],{"class":97},[87,104441,104442],{"class":949},"\"box body position:\"",[87,104444,104445],{"class":97},", data.xpos[box_body_id].copy())\n",[87,104447,104448,104450,104452,104455],{"class":89,"line":8927},[87,104449,32246],{"class":104},[87,104451,165],{"class":97},[87,104453,104454],{"class":949},"\"site position:\"",[87,104456,104457],{"class":97},", data.site_xpos[site_id].copy())\n",[87,104459,104460,104462,104464,104467],{"class":89,"line":8933},[87,104461,32246],{"class":104},[87,104463,165],{"class":97},[87,104465,104466],{"class":949},"\"box qpos:\"",[87,104468,104469],{"class":97},", np.array(data.qpos))\n",[87,104471,104472],{"class":89,"line":8960},[87,104473,3355],{"emptyLinePlaceholder":1029},[87,104475,104476],{"class":89,"line":8965},[87,104477,3355],{"emptyLinePlaceholder":1029},[87,104479,104480,104482,104484,104486,104488],{"class":89,"line":8971},[87,104481,2488],{"class":171},[87,104483,32167],{"class":104},[87,104485,102485],{"class":171},[87,104487,102488],{"class":949},[87,104489,4693],{"class":97},[87,104491,104492],{"class":89,"line":8983},[87,104493,102495],{"class":97},[19,104495,104496],{},"保存为：",[77,104498,104500],{"className":24769,"code":104499,"language":24771,"meta":82,"style":82},"touch ch2_xml_basic.py\n",[84,104501,104502],{"__ignoreMap":82},[87,104503,104504,104506],{"class":89,"line":90},[87,104505,102209],{"class":205},[87,104507,104508],{"class":949}," ch2_xml_basic.py\n",[19,104510,103227],{},[77,104512,104514],{"className":24769,"code":104513,"language":24771,"meta":82,"style":82},"python ch2_xml_basic.py\n",[84,104515,104516],{"__ignoreMap":82},[87,104517,104518,104520],{"class":89,"line":90},[87,104519,31327],{"class":205},[87,104521,104508],{"class":949},[44,104523,102498],{"id":102498},[19,104525,104526],{},"用名字查找 body：",[77,104528,104530],{"className":31325,"code":104529,"language":31327,"meta":82,"style":82},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[84,104531,104532],{"__ignoreMap":82},[87,104533,104534,104537,104539,104541,104543],{"class":89,"line":90},[87,104535,104536],{"class":97},"box_body_id ",[87,104538,946],{"class":171},[87,104540,104316],{"class":97},[87,104542,104319],{"class":949},[87,104544,1108],{"class":97},[19,104546,104547],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,104549,104550],{},"用名字查找 site：",[77,104552,104554],{"className":31325,"code":104553,"language":31327,"meta":82,"style":82},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[84,104555,104556],{"__ignoreMap":82},[87,104557,104558,104561,104563,104565,104567],{"class":89,"line":90},[87,104559,104560],{"class":97},"site_id ",[87,104562,946],{"class":171},[87,104564,104331],{"class":97},[87,104566,104334],{"class":949},[87,104568,1108],{"class":97},[19,104570,104571,104572,104575,104576,104579],{},"注意第二个参数是对象类型。查 body 就用 ",[84,104573,104574],{},"mjOBJ_BODY","，查 site 就用 ",[84,104577,104578],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,104581,104582],{},"读取世界坐标：",[77,104584,104586],{"className":31325,"code":104585,"language":31327,"meta":82,"style":82},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[84,104587,104588,104593],{"__ignoreMap":82},[87,104589,104590],{"class":89,"line":90},[87,104591,104592],{"class":97},"data.xpos[box_body_id]\n",[87,104594,104595],{"class":89,"line":101},[87,104596,104597],{"class":97},"data.site_xpos[site_id]\n",[19,104599,104600,104603,104604,104607],{},[84,104601,104602],{},"xpos"," 是 body 的世界坐标，",[84,104605,104606],{},"site_xpos"," 是 site 的世界坐标。",[44,104609,102634],{"id":102634},[77,104611,104613],{"className":31325,"code":104612,"language":31327,"meta":82,"style":82},"import mujoco\nimport numpy as np\n",[84,104614,104615,104621],{"__ignoreMap":82},[87,104616,104617,104619],{"class":89,"line":90},[87,104618,31339],{"class":171},[87,104620,102227],{"class":97},[87,104622,104623,104625,104627,104629],{"class":89,"line":101},[87,104624,31339],{"class":171},[87,104626,32327],{"class":97},[87,104628,32330],{"class":171},[87,104630,32333],{"class":97},[19,104632,104633,104634,104637,104638,104641,104642,1308,104645,29332],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[84,104635,104636],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[84,104639,104640],{},"as np"," 是习惯写法，后面就可以写 ",[84,104643,104644],{},"np.array(...)",[84,104646,104647],{},"np.round(...)",[77,104649,104650],{"className":31325,"code":102521,"language":31327,"meta":82,"style":82},[84,104651,104652,104660,104664],{"__ignoreMap":82},[87,104653,104654,104656,104658],{"class":89,"line":90},[87,104655,102240],{"class":104},[87,104657,14514],{"class":171},[87,104659,102245],{"class":949},[87,104661,104662],{"class":89,"line":101},[87,104663,102536],{"class":949},[87,104665,104666],{"class":89,"line":120},[87,104667,96624],{"class":949},[19,104669,104670,104671,29332],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[84,104672,104673],{},"mujoco.MjModel.from_xml_string(XML)",[77,104675,104677],{"className":54004,"code":104676,"language":54006,"meta":82,"style":82},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[84,104678,104679],{"__ignoreMap":82},[87,104680,104681,104683,104685,104687,104689,104691,104693,104695,104698,104700,104702,104705,104707,104709,104712],{"class":89,"line":90},[87,104682,938],{"class":97},[87,104684,104136],{"class":93},[87,104686,15870],{"class":205},[87,104688,946],{"class":97},[87,104690,104334],{"class":949},[87,104692,102032],{"class":205},[87,104694,946],{"class":97},[87,104696,104697],{"class":949},"\"0 0 0\"",[87,104699,102062],{"class":205},[87,104701,946],{"class":97},[87,104703,104704],{"class":949},"\"0.03\"",[87,104706,79694],{"class":205},[87,104708,946],{"class":97},[87,104710,104711],{"class":949},"\"0 1 0 1\"",[87,104713,102070],{"class":97},[19,104715,104716,104718,104719,104722,104723,104725,104726,104729],{},[84,104717,104136],{}," 是标记点。",[84,104720,104721],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[84,104724,104096],{}," 表示显示出来的小球大小。",[84,104727,104728],{},"rgba=\"0 1 0 1\""," 表示绿色。",[77,104731,104732],{"className":31325,"code":104529,"language":31327,"meta":82,"style":82},[84,104733,104734],{"__ignoreMap":82},[87,104735,104736,104738,104740,104742,104744],{"class":89,"line":90},[87,104737,104536],{"class":97},[87,104739,946],{"class":171},[87,104741,104316],{"class":97},[87,104743,104319],{"class":949},[87,104745,1108],{"class":97},[19,104747,104748,104749,104751],{},"这行的作用是：根据名字 ",[84,104750,104319],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,104753,104754],{},"拆开看：",[1055,104756,104757,104763,104768,104774],{},[29,104758,104759,104762],{},[84,104760,104761],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[29,104764,104765,104767],{},[84,104766,103011],{}," 是被查询的模型。",[29,104769,104770,104773],{},[84,104771,104772],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[29,104775,104776,104778],{},[84,104777,104319],{}," 是 XML 里写的名字。",[77,104780,104781],{"className":31325,"code":104553,"language":31327,"meta":82,"style":82},[84,104782,104783],{"__ignoreMap":82},[87,104784,104785,104787,104789,104791,104793],{"class":89,"line":90},[87,104786,104560],{"class":97},[87,104788,946],{"class":171},[87,104790,104331],{"class":97},[87,104792,104334],{"class":949},[87,104794,1108],{"class":97},[19,104796,104797,104798,29332],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[84,104799,104334],{},[77,104801,104803],{"className":31325,"code":104802,"language":31327,"meta":82,"style":82},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[84,104804,104805,104817],{"__ignoreMap":82},[87,104806,104807,104809,104811,104813,104815],{"class":89,"line":90},[87,104808,2488],{"class":171},[87,104810,104347],{"class":97},[87,104812,938],{"class":171},[87,104814,577],{"class":104},[87,104816,4693],{"class":97},[87,104818,104819,104822,104824,104826,104828],{"class":89,"line":101},[87,104820,104821],{"class":171},"    raise",[87,104823,104361],{"class":104},[87,104825,165],{"class":97},[87,104827,104366],{"class":949},[87,104829,1108],{"class":97},[19,104831,104832,104834,104835,104838,104839,104842,104843,104846],{},[84,104833,2488],{}," 是条件判断。",[84,104836,104837],{},"mj_name2id"," 找不到对象时会返回 ",[84,104840,104841],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[84,104844,104845],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[77,104848,104850],{"className":31325,"code":104849,"language":31327,"meta":82,"style":82},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[84,104851,104852,104868],{"__ignoreMap":82},[87,104853,104854,104856,104858,104860,104862,104864,104866],{"class":89,"line":90},[87,104855,3979],{"class":171},[87,104857,102427],{"class":97},[87,104859,26990],{"class":171},[87,104861,33390],{"class":104},[87,104863,165],{"class":97},[87,104865,2678],{"class":104},[87,104867,31733],{"class":97},[87,104869,104870],{"class":89,"line":101},[87,104871,102625],{"class":97},[19,104873,104874],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[77,104876,104878],{"className":31325,"code":104877,"language":31327,"meta":82,"style":82},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[84,104879,104880],{"__ignoreMap":82},[87,104881,104882,104884,104886,104888],{"class":89,"line":90},[87,104883,31362],{"class":104},[87,104885,165],{"class":97},[87,104887,104442],{"class":949},[87,104889,104445],{"class":97},[19,104891,104892,104894,104895,104898],{},[84,104893,102005],{}," 保存所有 body 的世界坐标。",[84,104896,104897],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[77,104900,104902],{"className":31325,"code":104901,"language":31327,"meta":82,"style":82},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[84,104903,104904],{"__ignoreMap":82},[87,104905,104906,104908,104910,104912],{"class":89,"line":90},[87,104907,31362],{"class":104},[87,104909,165],{"class":97},[87,104911,104454],{"class":949},[87,104913,104457],{"class":97},[19,104915,104916,104919,104920,104922],{},[84,104917,104918],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[84,104921,103903],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[77,104924,104926],{"className":31325,"code":104925,"language":31327,"meta":82,"style":82},"print(\"box qpos:\", np.array(data.qpos))\n",[84,104927,104928],{"__ignoreMap":82},[87,104929,104930,104932,104934,104936],{"class":89,"line":90},[87,104931,31362],{"class":104},[87,104933,165],{"class":97},[87,104935,104466],{"class":949},[87,104937,104469],{"class":97},[19,104939,104940,104941,104944],{},"这里打印广义位置数组。",[84,104942,104943],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104946,103242],{"id":103241},[19,104948,104949,104950,104953,104954,29332],{},"程序会输出 ",[84,104951,104952],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[84,104955,104956],{},"qpos",[19,104958,104959,104961,104962,104965,104966,104969],{},[84,104960,104897],{}," 是 body 的世界坐标位置。",[84,104963,104964],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[84,104967,104968],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104971,83148,104972,83456,104974,104976],{},[84,104973,103903],{},[84,104975,104721],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104978,104979],{},"如果你把 site 改成：",[77,104981,104983],{"className":54004,"code":104982,"language":54006,"meta":82,"style":82},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[84,104984,104985],{"__ignoreMap":82},[87,104986,104987,104989,104991,104993,104995,104998,105000,105002,105005,105007,105009,105011,105013,105015,105017],{"class":89,"line":90},[87,104988,938],{"class":97},[87,104990,104136],{"class":93},[87,104992,15870],{"class":205},[87,104994,946],{"class":97},[87,104996,104997],{"class":949},"\"box_top\"",[87,104999,102032],{"class":205},[87,105001,946],{"class":97},[87,105003,105004],{"class":949},"\"0 0 0.15\"",[87,105006,102062],{"class":205},[87,105008,946],{"class":97},[87,105010,104704],{"class":949},[87,105012,79694],{"class":205},[87,105014,946],{"class":97},[87,105016,104711],{"class":949},[87,105018,102070],{"class":97},[19,105020,105021,105022,105025],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[84,105023,105024],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105027,103274],{"id":103273},[1055,105029,105030,105039,105042,105049,105055,105066],{},[29,105031,103337,105032,105034,105035,103340,105037,29332],{},[84,105033,103907],{}," 的初始高度从 ",[84,105036,1313],{},[84,105038,1176],{},[29,105040,105041],{},"重新运行程序。",[29,105043,105044,105045,105048],{},"观察 ",[84,105046,105047],{},"box qpos"," 和最终位置是否变化。",[29,105050,105051,105052,105054],{},"故意把 ",[84,105053,104136],{}," 名称改错，确认程序能报错。",[29,105056,103337,105057,105059,105060,103340,105062,105065],{},[84,105058,102046],{}," 的颜色 ",[84,105061,102958],{},[84,105063,105064],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[29,105067,103337,105068,83456,105070,103340,105073,105076,105077,105079],{},[84,105069,103903],{},[84,105071,105072],{},"pos",[84,105074,105075],{},"0 0 0.2","，观察 ",[84,105078,105024],{}," 如何变化。",[14,105081,103379],{"id":103378},[44,105083,105085],{"id":105084},"xml-error-schema-violation",[84,105086,105087],{},"XML Error: Schema violation",[19,105089,105090],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[44,105092,105094,82216,105096],{"id":105093},"mj_name2id-返回-1",[84,105095,104837],{},[84,105097,104841],{},[19,105099,105100,105101,105104],{},"说明名字没有找到。检查 XML 中 ",[84,105102,105103],{},"name=\"...\"","，并确认对象类型正确。",[44,105106,105107],{"id":105107},"物体不下落",[19,105109,103449],{},[1055,105111,105112,105117,105122],{},[29,105113,105114,105115],{},"body 是否有 ",[84,105116,102546],{},[29,105118,105119,105120],{},"gravity 是否为 ",[84,105121,103515],{},[29,105123,105124,105125,105127],{},"body 是否被固定在 ",[84,105126,102767],{}," 中",[44,105129,105130],{"id":105130},"坐标看起来不符合预期",[19,105132,105133],{},"先区分两种坐标：",[1235,105135,105136,105145],{},[1238,105137,105138],{},[1241,105139,105140,105143],{},[1244,105141,105142],{"align":24683},"坐标",[1244,105144,101626],{"align":24683},[1281,105146,105147,105157],{},[1241,105148,105149,105154],{},[1286,105150,105151,105152],{"align":24683},"XML 里的 ",[84,105153,105072],{},[1286,105155,105156],{"align":24683},"相对父 body 的局部坐标",[1241,105158,105159,105165],{},[1286,105160,105161,25926,105163],{"align":24683},[84,105162,102005],{},[84,105164,104918],{},[1286,105166,105167],{"align":24683},"仿真更新后的世界坐标",[19,105169,105170,105171,105173,105174,83465,105177,105179],{},"如果你修改了 ",[84,105172,101996],{},"，但还没调用 ",[84,105175,105176],{},"mj_forward",[84,105178,102141],{},"，世界坐标可能还没有更新。",[14,105181,103533],{"id":103532},[19,105183,105184],{},"MJCF 建模先掌握四件事：",[1055,105186,105187,105192,105197,105202],{},[29,105188,105189,105191],{},[84,105190,52737],{}," 表示刚体层级。",[29,105193,105194,105196],{},[84,105195,102046],{}," 表示形状、碰撞和质量。",[29,105198,105199,105201],{},[84,105200,103882],{}," 决定 body 能不能动、怎么动。",[29,105203,105204,105206],{},[84,105205,104136],{}," 用来标记关键点，方便 Python 读取位置。",[19,105208,105209],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1006,105211,105212],{},"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":82,"searchDepth":101,"depth":101,"links":105214},[105215,105216,105217,105223,105227,105228,105229,105236],{"id":101572,"depth":101,"text":101573},{"id":101695,"depth":101,"text":101696},{"id":101970,"depth":101,"text":101971,"children":105218},[105219,105220,105221,105222],{"id":103886,"depth":120,"text":103886},{"id":104000,"depth":120,"text":104000},{"id":104026,"depth":120,"text":104027},{"id":104130,"depth":120,"text":104131},{"id":102178,"depth":101,"text":102179,"children":105224},[105225,105226],{"id":102498,"depth":120,"text":102498},{"id":102634,"depth":120,"text":102634},{"id":103241,"depth":101,"text":103242},{"id":103273,"depth":101,"text":103274},{"id":103378,"depth":101,"text":103379,"children":105230},[105231,105232,105234,105235],{"id":105084,"depth":120,"text":105087},{"id":105093,"depth":120,"text":105233},"mj_name2id 返回 -1",{"id":105107,"depth":120,"text":105107},{"id":105130,"depth":120,"text":105130},{"id":103532,"depth":101,"text":103533},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103580,"description":82},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105243,"title":105244,"body":105245,"description":82,"extension":1027,"meta":106740,"navigation":1029,"path":106741,"seo":106742,"stem":106743,"__hash__":106744},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105246,"toc":106712},[105247,105250,105252,105255,105258,105296,105299,105305,105308,105310,105312,105339,105341,105355,105357,105398,105400,105424,105426,105429,105438,105447,105450,105459,105467,105476,105479,105489,105492,105544,105551,105557,105565,105613,105616,105635,105638,105646,105650,105659,105692,105694,106042,106044,106056,106058,106069,106071,106074,106095,106101,106104,106129,106139,106142,106150,106153,106156,106177,106188,106190,106210,106213,106234,106243,106262,106268,106293,106296,106310,106317,106341,106344,106352,106361,106377,106389,106397,106406,106408,106411,106435,106440,106443,106465,106467,106506,106508,106515,106517,106525,106528,106531,106543,106584,106591,106602,106609,106612,106661,106664,106667,106673,106675,106680,106706,106709],[10,105248,105244],{"id":105249},"_3python-控制接口读取状态与推进仿真",[14,105251,101573],{"id":101572},[19,105253,105254],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,105256,105257],{},"你将学习:",[1055,105259,105260,105265,105270,105274,105279,105290],{},[29,105261,105262],{},[84,105263,105264],{},"MjModel.from_xml_string",[29,105266,105267],{},[84,105268,105269],{},"MjData(model)",[29,105271,105272],{},[84,105273,102141],{},[29,105275,105276],{},[84,105277,105278],{},"mj_resetData",[29,105280,105281,105282,1308,105284,1308,105287],{},"读取 ",[84,105283,104956],{},[84,105285,105286],{},"qvel",[84,105288,105289],{},"ctrl",[29,105291,105292,105293],{},"使用 ",[84,105294,105295],{},"model.opt.timestep",[19,105297,105298],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[77,105300,105303],{"className":105301,"code":105302,"language":599,"meta":82},[597],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[84,105304,105302],{"__ignoreMap":82},[19,105306,105307],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105309,101696],{"id":101695},[19,105311,101699],{},[77,105313,105315],{"className":24769,"code":105314,"language":24771,"meta":82,"style":82},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[84,105316,105317],{"__ignoreMap":82},[87,105318,105319,105321,105323,105325,105327,105330,105332,105334,105336],{"class":89,"line":90},[87,105320,25524],{"class":205},[87,105322,27262],{"class":949},[87,105324,24781],{"class":949},[87,105326,27347],{"class":104},[87,105328,105329],{"class":949}," python3",[87,105331,101724],{"class":949},[87,105333,103427],{"class":949},[87,105335,101740],{"class":949},[87,105337,105338],{"class":949}," glfw\n",[19,105340,103745],{},[77,105342,105343],{"className":24769,"code":101845,"language":24771,"meta":82,"style":82},[84,105344,105345],{"__ignoreMap":82},[87,105346,105347,105349,105351,105353],{"class":89,"line":90},[87,105348,24778],{"class":205},[87,105350,24781],{"class":949},[87,105352,101856],{"class":949},[87,105354,101859],{"class":949},[19,105356,103762],{},[77,105358,105360],{"className":24769,"code":105359,"language":24771,"meta":82,"style":82},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[84,105361,105362,105379,105388],{"__ignoreMap":82},[87,105363,105364,105366,105368,105370,105373,105375,105377],{"class":89,"line":90},[87,105365,31277],{"class":205},[87,105367,30123],{"class":949},[87,105369,26063],{"class":104},[87,105371,105372],{"class":949}," mujoco-python-api",[87,105374,101901],{"class":949},[87,105376,101904],{"class":104},[87,105378,101907],{"class":104},[87,105380,105381,105383,105385],{"class":89,"line":101},[87,105382,31277],{"class":205},[87,105384,101914],{"class":949},[87,105386,105387],{"class":949}," mujoco-python-api\n",[87,105389,105390,105392,105394,105396],{"class":89,"line":120},[87,105391,24778],{"class":205},[87,105393,24781],{"class":949},[87,105395,101856],{"class":949},[87,105397,101859],{"class":949},[19,105399,101930],{},[1055,105401,105402,105409,105418],{},[29,105403,105404,101944,105406,105408],{},[84,105405,101601],{},[84,105407,101606],{}," 是官方 Python bindings 的类名。",[29,105410,105411,105412,105415,105416,29332],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[84,105413,105414],{},"mjModel"," 在 Python 中是 ",[84,105417,101635],{},[29,105419,105420,105421,29332],{},"不要使用 ",[84,105422,105423],{},"sim = mujoco_py.MjSim(...)",[14,105425,101971],{"id":101970},[19,105427,105428],{},"仿真推进核心代码:",[77,105430,105432],{"className":31325,"code":105431,"language":31327,"meta":82,"style":82},"mujoco.mj_step(model, data)\n",[84,105433,105434],{"__ignoreMap":82},[87,105435,105436],{"class":89,"line":90},[87,105437,105431],{"class":97},[19,105439,105440,105441,1308,105443,1308,105445,29332],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[84,105442,101996],{},[84,105444,101999],{},[84,105446,101993],{},[19,105448,105449],{},"重置仿真:",[77,105451,105453],{"className":31325,"code":105452,"language":31327,"meta":82,"style":82},"mujoco.mj_resetData(model, data)\n",[84,105454,105455],{"__ignoreMap":82},[87,105456,105457],{"class":89,"line":90},[87,105458,105452],{"class":97},[19,105460,105461,105462,83465,105464,105466],{},"如果手动修改了 ",[84,105463,101996],{},[84,105465,101999],{},"，通常应调用:",[77,105468,105470],{"className":31325,"code":105469,"language":31327,"meta":82,"style":82},"mujoco.mj_forward(model, data)\n",[84,105471,105472],{"__ignoreMap":82},[87,105473,105474],{"class":89,"line":90},[87,105475,105469],{"class":97},[19,105477,105478],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[44,105480,105482,1308,105484,1308,105486,105488],{"id":105481},"qposqvelctrl-是什么",[84,105483,104956],{},[84,105485,105286],{},[84,105487,105289],{}," 是什么",[19,105490,105491],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[1235,105493,105494,105506],{},[1238,105495,105496],{},[1241,105497,105498,105501,105503],{},[1244,105499,105500],{"align":24683},"字段",[1244,105502,101626],{"align":24683},[1244,105504,105505],{"align":24683},"谁来修改",[1281,105507,105508,105520,105532],{},[1241,105509,105510,105514,105517],{},[1286,105511,105512],{"align":24683},[84,105513,101996],{},[1286,105515,105516],{"align":24683},"广义位置，例如小车位置、关节角、自由物体位置姿态",[1286,105518,105519],{"align":24683},"MuJoCo 更新，也可以手动设置初始状态",[1241,105521,105522,105526,105529],{},[1286,105523,105524],{"align":24683},[84,105525,101999],{},[1286,105527,105528],{"align":24683},"广义速度，例如小车速度、关节角速度",[1286,105530,105531],{"align":24683},"MuJoCo 更新，也可以手动清零",[1241,105533,105534,105538,105541],{},[1286,105535,105536],{"align":24683},[84,105537,102002],{},[1286,105539,105540],{"align":24683},"actuator 的控制输入",[1286,105542,105543],{"align":24683},"主要由你的控制代码写入",[19,105545,9975,105546,101944,105548,105550],{},[84,105547,104956],{},[84,105549,105286],{}," 不一定同维。自由刚体就是典型例子：",[77,105552,105555],{"className":105553,"code":105554,"language":599,"meta":82},[597],"freejoint: qpos 7 维，qvel 6 维\n",[84,105556,105554],{"__ignoreMap":82},[44,105558,105560,101944,105562,105564],{"id":105559},"mj_step-和-mj_forward-的区别",[84,105561,102141],{},[84,105563,105176],{}," 的区别",[1235,105566,105567,105580],{},[1238,105568,105569],{},[1241,105570,105571,105574,105577],{},[1244,105572,105573],{"align":24683},"函数",[1244,105575,105576],{"align":24683},"是否推进时间",[1244,105578,105579],{"align":24683},"什么时候用",[1281,105581,105582,105595],{},[1241,105583,105584,105589,105592],{},[1286,105585,105586],{"align":24683},[84,105587,105588],{},"mj_step(model, data)",[1286,105590,105591],{"align":24683},"是",[1286,105593,105594],{"align":24683},"正常仿真循环，每调用一次前进一步",[1241,105596,105597,105602,105605],{},[1286,105598,105599],{"align":24683},[84,105600,105601],{},"mj_forward(model, data)",[1286,105603,105604],{"align":24683},"否",[1286,105606,105607,105608,1308,105610,105612],{"align":24683},"手动改了 ",[84,105609,104956],{},[84,105611,105286],{}," 后，刷新派生量",[19,105614,105615],{},"例如你写：",[77,105617,105619],{"className":31325,"code":105618,"language":31327,"meta":82,"style":82},"data.qpos[2] = 2.0\n",[84,105620,105621],{"__ignoreMap":82},[87,105622,105623,105626,105628,105630,105632],{"class":89,"line":90},[87,105624,105625],{"class":97},"data.qpos[",[87,105627,1176],{"class":104},[87,105629,5396],{"class":97},[87,105631,946],{"class":171},[87,105633,105634],{"class":104}," 2.0\n",[19,105636,105637],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[77,105639,105640],{"className":31325,"code":105469,"language":31327,"meta":82,"style":82},[84,105641,105642],{"__ignoreMap":82},[87,105643,105644],{"class":89,"line":90},[87,105645,105469],{"class":97},[44,105647,105649],{"id":105648},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,105651,105652,105655,105656,105658],{},[84,105653,105654],{},"mujoco.mj_resetData(model, data)"," 会把 ",[84,105657,34348],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[77,105660,105662],{"className":31325,"code":105661,"language":31327,"meta":82,"style":82},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[84,105663,105664,105668,105678,105688],{"__ignoreMap":82},[87,105665,105666],{"class":89,"line":90},[87,105667,105452],{"class":97},[87,105669,105670,105673,105675],{"class":89,"line":101},[87,105671,105672],{"class":97},"data.qpos[:] ",[87,105674,946],{"class":171},[87,105676,105677],{"class":97}," random_qpos\n",[87,105679,105680,105683,105685],{"class":89,"line":120},[87,105681,105682],{"class":97},"data.qvel[:] ",[87,105684,946],{"class":171},[87,105686,105687],{"class":104}," 0.0\n",[87,105689,105690],{"class":89,"line":222},[87,105691,105469],{"class":97},[14,105693,102179],{"id":102178},[77,105695,105697],{"className":31325,"code":105696,"language":31327,"meta":82,"style":82},"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",[84,105698,105699,105705,105715,105719,105723,105731,105736,105740,105744,105748,105753,105757,105762,105767,105772,105776,105780,105784,105788,105792,105796,105815,105822,105834,105845,105861,105877,105881,105885,105897,105909,105917,105921,105932,105936,105952,105956,105960,105969,105973,105978,105987,105991,106004,106009,106018,106022,106026,106038],{"__ignoreMap":82},[87,105700,105701,105703],{"class":89,"line":90},[87,105702,31339],{"class":171},[87,105704,102227],{"class":97},[87,105706,105707,105709,105711,105713],{"class":89,"line":101},[87,105708,31339],{"class":171},[87,105710,32327],{"class":97},[87,105712,32330],{"class":171},[87,105714,32333],{"class":97},[87,105716,105717],{"class":89,"line":120},[87,105718,3355],{"emptyLinePlaceholder":1029},[87,105720,105721],{"class":89,"line":222},[87,105722,3355],{"emptyLinePlaceholder":1029},[87,105724,105725,105727,105729],{"class":89,"line":234},[87,105726,102240],{"class":104},[87,105728,14514],{"class":171},[87,105730,102245],{"class":949},[87,105732,105733],{"class":89,"line":256},[87,105734,105735],{"class":949},"\u003Cmujoco model=\"state_api\">\n",[87,105737,105738],{"class":89,"line":269},[87,105739,102255],{"class":949},[87,105741,105742],{"class":89,"line":463},[87,105743,3355],{"emptyLinePlaceholder":1029},[87,105745,105746],{"class":89,"line":469},[87,105747,102264],{"class":949},[87,105749,105750],{"class":89,"line":2287},[87,105751,105752],{"class":949},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[87,105754,105755],{"class":89,"line":2568},[87,105756,3355],{"emptyLinePlaceholder":1029},[87,105758,105759],{"class":89,"line":2573},[87,105760,105761],{"class":949},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[87,105763,105764],{"class":89,"line":2579},[87,105765,105766],{"class":949},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[87,105768,105769],{"class":89,"line":2584},[87,105770,105771],{"class":949},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[87,105773,105774],{"class":89,"line":2598},[87,105775,102293],{"class":949},[87,105777,105778],{"class":89,"line":2603},[87,105779,102298],{"class":949},[87,105781,105782],{"class":89,"line":2609},[87,105783,102303],{"class":949},[87,105785,105786],{"class":89,"line":2630},[87,105787,96624],{"class":949},[87,105789,105790],{"class":89,"line":2635},[87,105791,3355],{"emptyLinePlaceholder":1029},[87,105793,105794],{"class":89,"line":2649},[87,105795,3355],{"emptyLinePlaceholder":1029},[87,105797,105798,105800,105803,105806,105808,105811,105813],{"class":89,"line":2654},[87,105799,32894],{"class":171},[87,105801,105802],{"class":205}," print_state",[87,105804,105805],{"class":97},"(prefix: ",[87,105807,2259],{"class":104},[87,105809,105810],{"class":97},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[87,105812,96612],{"class":104},[87,105814,4693],{"class":97},[87,105816,105817,105819],{"class":89,"line":2683},[87,105818,32246],{"class":104},[87,105820,105821],{"class":97},"(prefix)\n",[87,105823,105824,105826,105828,105831],{"class":89,"line":2688},[87,105825,32246],{"class":104},[87,105827,165],{"class":97},[87,105829,105830],{"class":949},"\"  timestep:\"",[87,105832,105833],{"class":97},", model.opt.timestep)\n",[87,105835,105836,105838,105840,105843],{"class":89,"line":2705},[87,105837,32246],{"class":104},[87,105839,165],{"class":97},[87,105841,105842],{"class":949},"\"  time:\"",[87,105844,102404],{"class":97},[87,105846,105847,105849,105851,105854,105857,105859],{"class":89,"line":2710},[87,105848,32246],{"class":104},[87,105850,165],{"class":97},[87,105852,105853],{"class":949},"\"  qpos:\"",[87,105855,105856],{"class":97},", np.round(data.qpos.copy(), ",[87,105858,1389],{"class":104},[87,105860,31444],{"class":97},[87,105862,105863,105865,105867,105870,105873,105875],{"class":89,"line":2715},[87,105864,32246],{"class":104},[87,105866,165],{"class":97},[87,105868,105869],{"class":949},"\"  qvel:\"",[87,105871,105872],{"class":97},", np.round(data.qvel.copy(), ",[87,105874,1389],{"class":104},[87,105876,31444],{"class":97},[87,105878,105879],{"class":89,"line":2720},[87,105880,3355],{"emptyLinePlaceholder":1029},[87,105882,105883],{"class":89,"line":2734},[87,105884,3355],{"emptyLinePlaceholder":1029},[87,105886,105887,105889,105891,105893,105895],{"class":89,"line":2739},[87,105888,32894],{"class":171},[87,105890,2928],{"class":205},[87,105892,102324],{"class":97},[87,105894,96612],{"class":104},[87,105896,4693],{"class":97},[87,105898,105899,105901,105903,105905,105907],{"class":89,"line":3532},[87,105900,102333],{"class":97},[87,105902,946],{"class":171},[87,105904,102338],{"class":97},[87,105906,102240],{"class":104},[87,105908,1108],{"class":97},[87,105910,105911,105913,105915],{"class":89,"line":3546},[87,105912,102347],{"class":97},[87,105914,946],{"class":171},[87,105916,102352],{"class":97},[87,105918,105919],{"class":89,"line":3554},[87,105920,3355],{"emptyLinePlaceholder":1029},[87,105922,105923,105926,105929],{"class":89,"line":3559},[87,105924,105925],{"class":97},"    print_state(",[87,105927,105928],{"class":949},"\"initial\"",[87,105930,105931],{"class":97},", model, data)\n",[87,105933,105934],{"class":89,"line":3565},[87,105935,3355],{"emptyLinePlaceholder":1029},[87,105937,105938,105940,105942,105944,105946,105948,105950],{"class":89,"line":3571},[87,105939,4155],{"class":171},[87,105941,102427],{"class":97},[87,105943,26990],{"class":171},[87,105945,33390],{"class":104},[87,105947,165],{"class":97},[87,105949,1749],{"class":104},[87,105951,31733],{"class":97},[87,105953,105954],{"class":89,"line":3576},[87,105955,102442],{"class":97},[87,105957,105958],{"class":89,"line":8898},[87,105959,3355],{"emptyLinePlaceholder":1029},[87,105961,105962,105964,105967],{"class":89,"line":8922},[87,105963,105925],{"class":97},[87,105965,105966],{"class":949},"\"after 50 steps\"",[87,105968,105931],{"class":97},[87,105970,105971],{"class":89,"line":8927},[87,105972,3355],{"emptyLinePlaceholder":1029},[87,105974,105975],{"class":89,"line":8933},[87,105976,105977],{"class":97},"    mujoco.mj_resetData(model, data)\n",[87,105979,105980,105982,105985],{"class":89,"line":8960},[87,105981,105925],{"class":97},[87,105983,105984],{"class":949},"\"after reset\"",[87,105986,105931],{"class":97},[87,105988,105989],{"class":89,"line":8965},[87,105990,3355],{"emptyLinePlaceholder":1029},[87,105992,105993,105996,105998,106000,106002],{"class":89,"line":8971},[87,105994,105995],{"class":97},"    data.qpos[",[87,105997,1176],{"class":104},[87,105999,5396],{"class":97},[87,106001,946],{"class":171},[87,106003,105634],{"class":104},[87,106005,106006],{"class":89,"line":8983},[87,106007,106008],{"class":97},"    mujoco.mj_forward(model, data)\n",[87,106010,106011,106013,106016],{"class":89,"line":8995},[87,106012,105925],{"class":97},[87,106014,106015],{"class":949},"\"after manual qpos edit\"",[87,106017,105931],{"class":97},[87,106019,106020],{"class":89,"line":9007},[87,106021,3355],{"emptyLinePlaceholder":1029},[87,106023,106024],{"class":89,"line":10666},[87,106025,3355],{"emptyLinePlaceholder":1029},[87,106027,106028,106030,106032,106034,106036],{"class":89,"line":10691},[87,106029,2488],{"class":171},[87,106031,32167],{"class":104},[87,106033,102485],{"class":171},[87,106035,102488],{"class":949},[87,106037,4693],{"class":97},[87,106039,106040],{"class":89,"line":10714},[87,106041,102495],{"class":97},[19,106043,104496],{},[77,106045,106047],{"className":24769,"code":106046,"language":24771,"meta":82,"style":82},"touch ch3_python_state.py\n",[84,106048,106049],{"__ignoreMap":82},[87,106050,106051,106053],{"class":89,"line":90},[87,106052,102209],{"class":205},[87,106054,106055],{"class":949}," ch3_python_state.py\n",[19,106057,103227],{},[77,106059,106061],{"className":24769,"code":106060,"language":24771,"meta":82,"style":82},"python ch3_python_state.py\n",[84,106062,106063],{"__ignoreMap":82},[87,106064,106065,106067],{"class":89,"line":90},[87,106066,31327],{"class":205},[87,106068,106055],{"class":949},[44,106070,102498],{"id":102498},[19,106072,106073],{},"打印状态的函数：",[77,106075,106077],{"className":31325,"code":106076,"language":31327,"meta":82,"style":82},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[84,106078,106079],{"__ignoreMap":82},[87,106080,106081,106083,106085,106087,106089,106091,106093],{"class":89,"line":90},[87,106082,32894],{"class":171},[87,106084,105802],{"class":205},[87,106086,105805],{"class":97},[87,106088,2259],{"class":104},[87,106090,105810],{"class":97},[87,106092,96612],{"class":104},[87,106094,4693],{"class":97},[19,106096,106097,106098,106100],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[84,106099,34348],{}," 里发生了什么。",[19,106102,106103],{},"推进 50 步：",[77,106105,106107],{"className":31325,"code":106106,"language":31327,"meta":82,"style":82},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[84,106108,106109,106125],{"__ignoreMap":82},[87,106110,106111,106113,106115,106117,106119,106121,106123],{"class":89,"line":90},[87,106112,3979],{"class":171},[87,106114,102427],{"class":97},[87,106116,26990],{"class":171},[87,106118,33390],{"class":104},[87,106120,165],{"class":97},[87,106122,1749],{"class":104},[87,106124,31733],{"class":97},[87,106126,106127],{"class":89,"line":101},[87,106128,102625],{"class":97},[19,106130,106131,106132,106135,106136,106138],{},"由于 ",[84,106133,106134],{},"timestep=0.01","，所以 50 步后时间约为 ",[84,106137,36276],{}," 秒。",[19,106140,106141],{},"重置：",[77,106143,106144],{"className":31325,"code":105452,"language":31327,"meta":82,"style":82},[84,106145,106146],{"__ignoreMap":82},[87,106147,106148],{"class":89,"line":90},[87,106149,105452],{"class":97},[19,106151,106152],{},"这会把时间、位置、速度恢复到初始状态。",[19,106154,106155],{},"手动改高度：",[77,106157,106159],{"className":31325,"code":106158,"language":31327,"meta":82,"style":82},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[84,106160,106161,106173],{"__ignoreMap":82},[87,106162,106163,106165,106167,106169,106171],{"class":89,"line":90},[87,106164,105625],{"class":97},[87,106166,1176],{"class":104},[87,106168,5396],{"class":97},[87,106170,946],{"class":171},[87,106172,105634],{"class":104},[87,106174,106175],{"class":89,"line":101},[87,106176,105469],{"class":97},[19,106178,106179,106180,106183,106184,106187],{},"这个例子里 ",[84,106181,106182],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[84,106185,106186],{},"2.0"," 表示把小球放到更高的位置。",[44,106189,102634],{"id":102634},[77,106191,106192],{"className":31325,"code":106076,"language":31327,"meta":82,"style":82},[84,106193,106194],{"__ignoreMap":82},[87,106195,106196,106198,106200,106202,106204,106206,106208],{"class":89,"line":90},[87,106197,32894],{"class":171},[87,106199,105802],{"class":205},[87,106201,105805],{"class":97},[87,106203,2259],{"class":104},[87,106205,105810],{"class":97},[87,106207,96612],{"class":104},[87,106209,4693],{"class":97},[19,106211,106212],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[1055,106214,106215,106224,106229],{},[29,106216,106217,106220,106221,106223],{},[84,106218,106219],{},"prefix","：一段文字，比如 ",[84,106222,105928],{},"，用来说明现在打印的是哪个阶段。",[29,106225,106226,106228],{},[84,106227,103011],{},"：MuJoCo 模型。",[29,106230,106231,106233],{},[84,106232,34348],{},"：MuJoCo 当前状态。",[19,106235,106236,1308,106239,106242],{},[84,106237,106238],{},"prefix: str",[84,106240,106241],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[77,106244,106246],{"className":31325,"code":106245,"language":31327,"meta":82,"style":82},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[84,106247,106248],{"__ignoreMap":82},[87,106249,106250,106252,106254,106256,106258,106260],{"class":89,"line":90},[87,106251,31362],{"class":104},[87,106253,165],{"class":97},[87,106255,105853],{"class":949},[87,106257,105856],{"class":97},[87,106259,1389],{"class":104},[87,106261,31444],{"class":97},[19,106263,106264,106267],{},[84,106265,106266],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[77,106269,106271],{"className":31325,"code":106270,"language":31327,"meta":82,"style":82},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[84,106272,106273,106285],{"__ignoreMap":82},[87,106274,106275,106277,106279,106281,106283],{"class":89,"line":90},[87,106276,102560],{"class":97},[87,106278,946],{"class":171},[87,106280,102338],{"class":97},[87,106282,102240],{"class":104},[87,106284,1108],{"class":97},[87,106286,106287,106289,106291],{"class":89,"line":101},[87,106288,102584],{"class":97},[87,106290,946],{"class":171},[87,106292,102352],{"class":97},[19,106294,106295],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[77,106297,106299],{"className":31325,"code":106298,"language":31327,"meta":82,"style":82},"print_state(\"initial\", model, data)\n",[84,106300,106301],{"__ignoreMap":82},[87,106302,106303,106306,106308],{"class":89,"line":90},[87,106304,106305],{"class":97},"print_state(",[87,106307,105928],{"class":949},[87,106309,105931],{"class":97},[19,106311,106312,106313,106316],{},"调用刚才定义的 ",[84,106314,106315],{},"print_state"," 函数，打印初始状态。",[77,106318,106319],{"className":31325,"code":106106,"language":31327,"meta":82,"style":82},[84,106320,106321,106337],{"__ignoreMap":82},[87,106322,106323,106325,106327,106329,106331,106333,106335],{"class":89,"line":90},[87,106324,3979],{"class":171},[87,106326,102427],{"class":97},[87,106328,26990],{"class":171},[87,106330,33390],{"class":104},[87,106332,165],{"class":97},[87,106334,1749],{"class":104},[87,106336,31733],{"class":97},[87,106338,106339],{"class":89,"line":101},[87,106340,102625],{"class":97},[19,106342,106343],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[77,106345,106346],{"className":31325,"code":105452,"language":31327,"meta":82,"style":82},[84,106347,106348],{"__ignoreMap":82},[87,106349,106350],{"class":89,"line":90},[87,106351,105452],{"class":97},[19,106353,106354,106355,106357,106358,106360],{},"重置 ",[84,106356,34348],{},"。注意它不会重新创建 ",[84,106359,103011],{},"，因为模型结构没有变，只是状态回到初始值。",[77,106362,106363],{"className":31325,"code":105618,"language":31327,"meta":82,"style":82},[84,106364,106365],{"__ignoreMap":82},[87,106366,106367,106369,106371,106373,106375],{"class":89,"line":90},[87,106368,105625],{"class":97},[87,106370,1176],{"class":104},[87,106372,5396],{"class":97},[87,106374,946],{"class":171},[87,106376,105634],{"class":104},[19,106378,106379,106380,1308,106383,1308,106386,106388],{},"这行是“手动改状态”。在 freejoint 中，",[84,106381,106382],{},"qpos[0]",[84,106384,106385],{},"qpos[1]",[84,106387,106182],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[77,106390,106391],{"className":31325,"code":105469,"language":31327,"meta":82,"style":82},[84,106392,106393],{"__ignoreMap":82},[87,106394,106395],{"class":89,"line":90},[87,106396,105469],{"class":97},[19,106398,106399,106400,106402,106403,106405],{},"手动改完 ",[84,106401,104956],{}," 后，调用 ",[84,106404,105176],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106407,103242],{"id":103241},[19,106409,106410],{},"你会看到:",[1055,106412,106413,106418,106423,106426],{},[29,106414,106415,106416],{},"初始时间为 ",[84,106417,111],{},[29,106419,106420,106421],{},"50 步后时间约为 ",[84,106422,36276],{},[29,106424,106425],{},"reset 后状态恢复",[29,106427,106428,106429,106432,106433],{},"手动修改 ",[84,106430,106431],{},"data.qpos[2]"," 后，小球高度变为 ",[84,106434,106186],{},[19,106436,106437,106439],{},[84,106438,106182],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,106441,106442],{},"输出里可以重点看三件事：",[1055,106444,106445,106453,106458],{},[29,106446,106447,106449,106450,106452],{},[84,106448,3342],{}," 是否随着 ",[84,106451,102141],{}," 增加。",[29,106454,106455,106457],{},[84,106456,104956],{}," 的 z 坐标是否因为下落而变化。",[29,106459,106460,106462,106463,29332],{},[84,106461,105278],{}," 后时间是否回到 ",[84,106464,111],{},[14,106466,103274],{"id":103273},[1055,106468,106469,106475,106481,106487,106490,106499],{},[29,106470,106471,106472,29332],{},"修改 timestep 为 ",[84,106473,106474],{},"0.005",[29,106476,106477,106478,29332],{},"重新运行，检查 50 步后时间是否约为 ",[84,106479,106480],{},"0.25",[29,106482,106483,106484,29332],{},"修改重力为 ",[84,106485,106486],{},"0 0 -1.0",[29,106488,106489],{},"观察小球下降速度是否变慢。",[29,106491,103337,106492,103340,106495,106498],{},[84,106493,106494],{},"data.qpos[2] = 2.0",[84,106496,106497],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[29,106500,106501,106502,106505],{},"注释掉 ",[84,106503,106504],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,106507,103379],{"id":103378},[44,106509,106511,106512,106514],{"id":106510},"修改-dataqpos-后位置没有更新","修改 ",[84,106513,101996],{}," 后位置没有更新",[19,106516,103388],{},[77,106518,106519],{"className":31325,"code":105469,"language":31327,"meta":82,"style":82},[84,106520,106521],{"__ignoreMap":82},[87,106522,106523],{"class":89,"line":90},[87,106524,105469],{"class":97},[44,106526,106527],{"id":106527},"数组维度看不懂",[19,106529,106530],{},"打印模型维度:",[77,106532,106534],{"className":31325,"code":106533,"language":31327,"meta":82,"style":82},"print(model.nq, model.nv, model.nu)\n",[84,106535,106536],{"__ignoreMap":82},[87,106537,106538,106540],{"class":89,"line":90},[87,106539,31362],{"class":104},[87,106541,106542],{"class":97},"(model.nq, model.nv, model.nu)\n",[1235,106544,106545,106553],{},[1238,106546,106547],{},[1241,106548,106549,106551],{},[1244,106550,105500],{"align":24683},[1244,106552,101626],{"align":24683},[1281,106554,106555,106565,106575],{},[1241,106556,106557,106562],{},[1286,106558,106559],{"align":24683},[84,106560,106561],{},"nq",[1286,106563,106564],{"align":24683},"位置变量数量",[1241,106566,106567,106572],{},[1286,106568,106569],{"align":24683},[84,106570,106571],{},"nv",[1286,106573,106574],{"align":24683},"速度变量数量",[1241,106576,106577,106581],{},[1286,106578,106579],{"align":24683},[84,106580,103088],{},[1286,106582,106583],{"align":24683},"控制输入数量",[44,106585,106587,106588,106590],{"id":106586},"误以为-qpos-一定等于关节数","误以为 ",[84,106589,104956],{}," 一定等于关节数",[19,106592,106593,106594,83456,106596,106598,106599,106601],{},"不是。例如 ",[84,106595,102546],{},[84,106597,104956],{}," 是 7 维，但 ",[84,106600,105286],{}," 是 6 维。",[44,106603,106605,106606,106608],{"id":106604},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[84,106607,104956],{}," 的第几位",[19,106610,106611],{},"初学时可以先打印：",[77,106613,106615],{"className":31325,"code":106614,"language":31327,"meta":82,"style":82},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[84,106616,106617,106627,106637,106649],{"__ignoreMap":82},[87,106618,106619,106621,106623,106625],{"class":89,"line":90},[87,106620,31362],{"class":104},[87,106622,165],{"class":97},[87,106624,102365],{"class":949},[87,106626,102368],{"class":97},[87,106628,106629,106631,106633,106635],{"class":89,"line":101},[87,106630,31362],{"class":104},[87,106632,165],{"class":97},[87,106634,102377],{"class":949},[87,106636,102380],{"class":97},[87,106638,106639,106641,106643,106646],{"class":89,"line":120},[87,106640,31362],{"class":104},[87,106642,165],{"class":97},[87,106644,106645],{"class":949},"\"qpos:\"",[87,106647,106648],{"class":97},", data.qpos)\n",[87,106650,106651,106653,106655,106658],{"class":89,"line":222},[87,106652,31362],{"class":104},[87,106654,165],{"class":97},[87,106656,106657],{"class":949},"\"qvel:\"",[87,106659,106660],{"class":97},", data.qvel)\n",[19,106662,106663],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[44,106665,106666],{"id":106666},"仿真结果每次都一样",[19,106668,106669,106670,106672],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[84,106671,104956],{},"、目标点或控制输入。",[14,106674,103533],{"id":103532},[19,106676,106677,106678,25566],{},"Python 控制 MuJoCo 的核心就是读写 ",[84,106679,34348],{},[1055,106681,106682,106690,106695,106700],{},[29,106683,106684,106685,101944,106687,106689],{},"用 ",[84,106686,101996],{},[84,106688,101999],{}," 读取状态。",[29,106691,106684,106692,106694],{},[84,106693,102002],{}," 写入控制。",[29,106696,106684,106697,106699],{},[84,106698,102141],{}," 推进时间。",[29,106701,106702,106703,106705],{},"手动改状态后用 ",[84,106704,105176],{}," 刷新派生量。",[19,106707,106708],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1006,106710,106711],{},"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":82,"searchDepth":101,"depth":101,"links":106713},[106714,106715,106716,106723,106727,106728,106729,106739],{"id":101572,"depth":101,"text":101573},{"id":101695,"depth":101,"text":101696},{"id":101970,"depth":101,"text":101971,"children":106717},[106718,106720,106722],{"id":105481,"depth":120,"text":106719},"qpos、qvel、ctrl 是什么",{"id":105559,"depth":120,"text":106721},"mj_step 和 mj_forward 的区别",{"id":105648,"depth":120,"text":105649},{"id":102178,"depth":101,"text":102179,"children":106724},[106725,106726],{"id":102498,"depth":120,"text":102498},{"id":102634,"depth":120,"text":102634},{"id":103241,"depth":101,"text":103242},{"id":103273,"depth":101,"text":103274},{"id":103378,"depth":101,"text":103379,"children":106730},[106731,106733,106734,106736,106738],{"id":106510,"depth":120,"text":106732},"修改 data.qpos 后位置没有更新",{"id":106527,"depth":120,"text":106527},{"id":106586,"depth":120,"text":106735},"误以为 qpos 一定等于关节数",{"id":106604,"depth":120,"text":106737},"不知道某个元素在 qpos 的第几位",{"id":106666,"depth":120,"text":106666},{"id":103532,"depth":101,"text":103533},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105244,"description":82},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106746,"title":106747,"body":106748,"description":82,"extension":1027,"meta":108438,"navigation":1029,"path":108439,"seo":108440,"stem":108441,"__hash__":108442},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106749,"toc":108414},[106750,106753,106755,106758,106760,106785,106788,106807,106810,106812,106814,106838,106840,106854,106856,106897,106899,106923,106925,106928,106962,106964,106977,106980,107048,107057,107061,107064,107098,107104,107107,107111,107150,107153,107173,107177,107220,107222,107251,107254,107260,107263,107265,107659,107661,107673,107675,107686,107688,107691,107720,107728,107731,107766,107769,107771,107779,107782,107784,107795,107805,107825,107828,107864,107876,107924,107943,107985,107998,108026,108031,108052,108062,108080,108083,108117,108120,108140,108143,108162,108168,108170,108173,108179,108185,108195,108198,108204,108213,108215,108261,108263,108269,108275,108278,108281,108301,108304,108310,108316,108318,108341,108344,108347,108356,108359,108397,108399,108402,108408,108411],[10,106751,106747],{"id":106752},"_4关节actuator-与力控制",[14,106754,101573],{"id":101572},[19,106756,106757],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,106759,105257],{},[1055,106761,106762,106768,106773,106777,106782],{},[29,106763,106764,106767],{},[84,106765,106766],{},"hinge"," 关节",[29,106769,106770],{},[84,106771,106772],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[29,106774,106775],{},[84,106776,102002],{},[29,106778,106779],{},[84,106780,106781],{},"ctrlrange",[29,106783,106784],{},"读取关节角和角速度",[19,106786,106787],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[77,106789,106791],{"className":31325,"code":106790,"language":31327,"meta":82,"style":82},"data.ctrl[0] = ...\n",[84,106792,106793],{"__ignoreMap":82},[87,106794,106795,106798,106800,106802,106804],{"class":89,"line":90},[87,106796,106797],{"class":97},"data.ctrl[",[87,106799,111],{"class":104},[87,106801,5396],{"class":97},[87,106803,946],{"class":171},[87,106805,106806],{"class":104}," ...\n",[19,106808,106809],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106811,101696],{"id":101695},[19,106813,101699],{},[77,106815,106816],{"className":24769,"code":105314,"language":24771,"meta":82,"style":82},[84,106817,106818],{"__ignoreMap":82},[87,106819,106820,106822,106824,106826,106828,106830,106832,106834,106836],{"class":89,"line":90},[87,106821,25524],{"class":205},[87,106823,27262],{"class":949},[87,106825,24781],{"class":949},[87,106827,27347],{"class":104},[87,106829,105329],{"class":949},[87,106831,101724],{"class":949},[87,106833,103427],{"class":949},[87,106835,101740],{"class":949},[87,106837,105338],{"class":949},[19,106839,103745],{},[77,106841,106842],{"className":24769,"code":101845,"language":24771,"meta":82,"style":82},[84,106843,106844],{"__ignoreMap":82},[87,106845,106846,106848,106850,106852],{"class":89,"line":90},[87,106847,24778],{"class":205},[87,106849,24781],{"class":949},[87,106851,101856],{"class":949},[87,106853,101859],{"class":949},[19,106855,103762],{},[77,106857,106859],{"className":24769,"code":106858,"language":24771,"meta":82,"style":82},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[84,106860,106861,106878,106887],{"__ignoreMap":82},[87,106862,106863,106865,106867,106869,106872,106874,106876],{"class":89,"line":90},[87,106864,31277],{"class":205},[87,106866,30123],{"class":949},[87,106868,26063],{"class":104},[87,106870,106871],{"class":949}," mujoco-control",[87,106873,101901],{"class":949},[87,106875,101904],{"class":104},[87,106877,101907],{"class":104},[87,106879,106880,106882,106884],{"class":89,"line":101},[87,106881,31277],{"class":205},[87,106883,101914],{"class":949},[87,106885,106886],{"class":949}," mujoco-control\n",[87,106888,106889,106891,106893,106895],{"class":89,"line":120},[87,106890,24778],{"class":205},[87,106892,24781],{"class":949},[87,106894,101856],{"class":949},[87,106896,101859],{"class":949},[19,106898,101930],{},[1055,106900,106901,106907,106914,106920],{},[29,106902,106903,106906],{},[84,106904,106905],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[29,106908,106909,106911,106912,29332],{},[84,106910,102002],{}," 长度等于 ",[84,106913,103084],{},[29,106915,83148,106916,106919],{},[84,106917,106918],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[29,106921,106922],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106924,101971],{"id":101970},[19,106926,106927],{},"关节决定 body 如何运动:",[77,106929,106931],{"className":54004,"code":106930,"language":54006,"meta":82,"style":82},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[84,106932,106933],{"__ignoreMap":82},[87,106934,106935,106937,106939,106941,106943,106946,106948,106950,106952,106955,106957,106960],{"class":89,"line":90},[87,106936,938],{"class":97},[87,106938,103882],{"class":93},[87,106940,15870],{"class":205},[87,106942,946],{"class":97},[87,106944,106945],{"class":949},"\"hinge\"",[87,106947,54760],{"class":205},[87,106949,946],{"class":97},[87,106951,106945],{"class":949},[87,106953,106954],{"class":205}," axis",[87,106956,946],{"class":97},[87,106958,106959],{"class":949},"\"0 1 0\"",[87,106961,102070],{"class":97},[19,106963,103978],{},[1055,106965,106966,106971,106974],{},[29,106967,106968,106969],{},"名字是 ",[84,106970,106766],{},[29,106972,106973],{},"类型是旋转关节",[29,106975,106976],{},"绕 y 轴旋转",[19,106978,106979],{},"actuator 决定如何施加控制:",[77,106981,106983],{"className":54004,"code":106982,"language":54006,"meta":82,"style":82},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[84,106984,106985,106994,107040],{"__ignoreMap":82},[87,106986,106987,106989,106992],{"class":89,"line":90},[87,106988,938],{"class":97},[87,106990,106991],{"class":93},"actuator",[87,106993,953],{"class":97},[87,106995,106996,106998,107001,107003,107005,107008,107011,107013,107015,107018,107020,107022,107025,107027,107030,107033,107035,107038],{"class":89,"line":101},[87,106997,53081],{"class":97},[87,106999,107000],{"class":93},"motor",[87,107002,15870],{"class":205},[87,107004,946],{"class":97},[87,107006,107007],{"class":949},"\"hinge_motor\"",[87,107009,107010],{"class":205}," joint",[87,107012,946],{"class":97},[87,107014,106945],{"class":949},[87,107016,107017],{"class":205}," gear",[87,107019,946],{"class":97},[87,107021,4632],{"class":949},[87,107023,107024],{"class":205}," ctrlrange",[87,107026,946],{"class":97},[87,107028,107029],{"class":949},"\"-2 2\"",[87,107031,107032],{"class":205}," ctrllimited",[87,107034,946],{"class":97},[87,107036,107037],{"class":949},"\"true\"",[87,107039,102070],{"class":97},[87,107041,107042,107044,107046],{"class":89,"line":120},[87,107043,963],{"class":97},[87,107045,106991],{"class":93},[87,107047,953],{"class":97},[19,107049,107050,107053,107054,29332],{},[84,107051,107052],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[84,107055,107056],{},"[-2, 2]",[44,107058,107060],{"id":107059},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,107062,107063],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[1235,107065,107066,107076],{},[1238,107067,107068],{},[1241,107069,107070,107072,107074],{},[1244,107071,26700],{"align":24683},[1244,107073,103622],{"align":24683},[1244,107075,101660],{"align":24683},[1281,107077,107078,107088],{},[1241,107079,107080,107082,107085],{},[1286,107081,103882],{"align":24683},[1286,107083,107084],{"align":24683},"定义能怎么动",[1286,107086,107087],{"align":24683},"门轴允许门旋转",[1241,107089,107090,107092,107095],{},[1286,107091,106991],{"align":24683},[1286,107093,107094],{"align":24683},"定义怎么施力或控制",[1286,107096,107097],{"align":24683},"人推门、马达带动门",[19,107099,107100,107101,107103],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[84,107102,102002],{}," 主动控制它。",[19,107105,107106],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[44,107108,107110],{"id":107109},"hinge-joint","hinge joint",[77,107112,107114],{"className":54004,"code":107113,"language":54006,"meta":82,"style":82},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[84,107115,107116],{"__ignoreMap":82},[87,107117,107118,107120,107122,107124,107126,107128,107130,107132,107134,107136,107138,107140,107143,107145,107148],{"class":89,"line":90},[87,107119,938],{"class":97},[87,107121,103882],{"class":93},[87,107123,15870],{"class":205},[87,107125,946],{"class":97},[87,107127,106945],{"class":949},[87,107129,54760],{"class":205},[87,107131,946],{"class":97},[87,107133,106945],{"class":949},[87,107135,106954],{"class":205},[87,107137,946],{"class":97},[87,107139,106959],{"class":949},[87,107141,107142],{"class":205}," damping",[87,107144,946],{"class":97},[87,107146,107147],{"class":949},"\"0.1\"",[87,107149,102070],{"class":97},[19,107151,107152],{},"含义：",[1055,107154,107155,107161,107167],{},[29,107156,107157,107160],{},[84,107158,107159],{},"type=\"hinge\"","：只能绕一个轴旋转。",[29,107162,107163,107166],{},[84,107164,107165],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[29,107168,107169,107172],{},[84,107170,107171],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[44,107174,107176],{"id":107175},"motor-actuator","motor actuator",[77,107178,107180],{"className":54004,"code":107179,"language":54006,"meta":82,"style":82},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[84,107181,107182],{"__ignoreMap":82},[87,107183,107184,107186,107188,107190,107192,107194,107196,107198,107200,107202,107204,107206,107208,107210,107212,107214,107216,107218],{"class":89,"line":90},[87,107185,938],{"class":97},[87,107187,107000],{"class":93},[87,107189,15870],{"class":205},[87,107191,946],{"class":97},[87,107193,107007],{"class":949},[87,107195,107010],{"class":205},[87,107197,946],{"class":97},[87,107199,106945],{"class":949},[87,107201,107017],{"class":205},[87,107203,946],{"class":97},[87,107205,4632],{"class":949},[87,107207,107024],{"class":205},[87,107209,946],{"class":97},[87,107211,107029],{"class":949},[87,107213,107032],{"class":205},[87,107215,946],{"class":97},[87,107217,107037],{"class":949},[87,107219,102070],{"class":97},[19,107221,107152],{},[1055,107223,107224,107233,107239,107245],{},[29,107225,107226,107229,107230,107232],{},[84,107227,107228],{},"joint=\"hinge\"","：这个电机作用在名为 ",[84,107231,106766],{}," 的关节上。",[29,107234,107235,107238],{},[84,107236,107237],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[29,107240,107241,107244],{},[84,107242,107243],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[29,107246,107247,107250],{},[84,107248,107249],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,107252,107253],{},"简单理解：",[77,107255,107258],{"className":107256,"code":107257,"language":599,"meta":82},[597],"实际施加效果 ≈ data.ctrl[0] * gear\n",[84,107259,107257],{"__ignoreMap":82},[19,107261,107262],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107264,102179],{"id":102178},[77,107266,107268],{"className":31325,"code":107267,"language":31327,"meta":82,"style":82},"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",[84,107269,107270,107277,107281,107287,107297,107301,107305,107313,107318,107323,107327,107331,107336,107341,107345,107350,107355,107360,107365,107369,107373,107377,107382,107387,107392,107396,107400,107404,107408,107420,107432,107440,107444,107454,107464,107474,107478,107491,107504,107508,107525,107539,107574,107578,107582,107593,107608,107623,107635,107639,107643,107655],{"__ignoreMap":82},[87,107271,107272,107274],{"class":89,"line":90},[87,107273,31339],{"class":171},[87,107275,107276],{"class":97}," math\n",[87,107278,107279],{"class":89,"line":101},[87,107280,3355],{"emptyLinePlaceholder":1029},[87,107282,107283,107285],{"class":89,"line":120},[87,107284,31339],{"class":171},[87,107286,102227],{"class":97},[87,107288,107289,107291,107293,107295],{"class":89,"line":222},[87,107290,31339],{"class":171},[87,107292,32327],{"class":97},[87,107294,32330],{"class":171},[87,107296,32333],{"class":97},[87,107298,107299],{"class":89,"line":234},[87,107300,3355],{"emptyLinePlaceholder":1029},[87,107302,107303],{"class":89,"line":256},[87,107304,3355],{"emptyLinePlaceholder":1029},[87,107306,107307,107309,107311],{"class":89,"line":269},[87,107308,102240],{"class":104},[87,107310,14514],{"class":171},[87,107312,102245],{"class":949},[87,107314,107315],{"class":89,"line":463},[87,107316,107317],{"class":949},"\u003Cmujoco model=\"one_link_motor\">\n",[87,107319,107320],{"class":89,"line":469},[87,107321,107322],{"class":949},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[87,107324,107325],{"class":89,"line":2287},[87,107326,3355],{"emptyLinePlaceholder":1029},[87,107328,107329],{"class":89,"line":2568},[87,107330,102264],{"class":949},[87,107332,107333],{"class":89,"line":2573},[87,107334,107335],{"class":949},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[87,107337,107338],{"class":89,"line":2579},[87,107339,107340],{"class":949},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[87,107342,107343],{"class":89,"line":2584},[87,107344,3355],{"emptyLinePlaceholder":1029},[87,107346,107347],{"class":89,"line":2598},[87,107348,107349],{"class":949},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[87,107351,107352],{"class":89,"line":2603},[87,107353,107354],{"class":949},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[87,107356,107357],{"class":89,"line":2609},[87,107358,107359],{"class":949},"        \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",[87,107361,107362],{"class":89,"line":2630},[87,107363,107364],{"class":949},"      \u003C\u002Fbody>\n",[87,107366,107367],{"class":89,"line":2635},[87,107368,102293],{"class":949},[87,107370,107371],{"class":89,"line":2649},[87,107372,102298],{"class":949},[87,107374,107375],{"class":89,"line":2654},[87,107376,3355],{"emptyLinePlaceholder":1029},[87,107378,107379],{"class":89,"line":2683},[87,107380,107381],{"class":949},"  \u003Cactuator>\n",[87,107383,107384],{"class":89,"line":2688},[87,107385,107386],{"class":949},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[87,107388,107389],{"class":89,"line":2705},[87,107390,107391],{"class":949},"  \u003C\u002Factuator>\n",[87,107393,107394],{"class":89,"line":2710},[87,107395,102303],{"class":949},[87,107397,107398],{"class":89,"line":2715},[87,107399,96624],{"class":949},[87,107401,107402],{"class":89,"line":2720},[87,107403,3355],{"emptyLinePlaceholder":1029},[87,107405,107406],{"class":89,"line":2734},[87,107407,3355],{"emptyLinePlaceholder":1029},[87,107409,107410,107412,107414,107416,107418],{"class":89,"line":2739},[87,107411,32894],{"class":171},[87,107413,2928],{"class":205},[87,107415,102324],{"class":97},[87,107417,96612],{"class":104},[87,107419,4693],{"class":97},[87,107421,107422,107424,107426,107428,107430],{"class":89,"line":3532},[87,107423,102333],{"class":97},[87,107425,946],{"class":171},[87,107427,102338],{"class":97},[87,107429,102240],{"class":104},[87,107431,1108],{"class":97},[87,107433,107434,107436,107438],{"class":89,"line":3546},[87,107435,102347],{"class":97},[87,107437,946],{"class":171},[87,107439,102352],{"class":97},[87,107441,107442],{"class":89,"line":3554},[87,107443,3355],{"emptyLinePlaceholder":1029},[87,107445,107446,107448,107450,107452],{"class":89,"line":3559},[87,107447,32246],{"class":104},[87,107449,165],{"class":97},[87,107451,102365],{"class":949},[87,107453,102368],{"class":97},[87,107455,107456,107458,107460,107462],{"class":89,"line":3565},[87,107457,32246],{"class":104},[87,107459,165],{"class":97},[87,107461,102377],{"class":949},[87,107463,102380],{"class":97},[87,107465,107466,107468,107470,107472],{"class":89,"line":3571},[87,107467,32246],{"class":104},[87,107469,165],{"class":97},[87,107471,102389],{"class":949},[87,107473,102392],{"class":97},[87,107475,107476],{"class":89,"line":3576},[87,107477,3355],{"emptyLinePlaceholder":1029},[87,107479,107480,107482,107485,107487,107489],{"class":89,"line":8898},[87,107481,4055],{"class":171},[87,107483,107484],{"class":97}," model.nu ",[87,107486,21896],{"class":171},[87,107488,568],{"class":104},[87,107490,4693],{"class":97},[87,107492,107493,107495,107497,107499,107502],{"class":89,"line":8922},[87,107494,104358],{"class":171},[87,107496,104361],{"class":104},[87,107498,165],{"class":97},[87,107500,107501],{"class":949},"\"expected exactly one actuator\"",[87,107503,1108],{"class":97},[87,107505,107506],{"class":89,"line":8927},[87,107507,3355],{"emptyLinePlaceholder":1029},[87,107509,107510,107512,107514,107516,107518,107520,107523],{"class":89,"line":8933},[87,107511,4155],{"class":171},[87,107513,32563],{"class":97},[87,107515,26990],{"class":171},[87,107517,33390],{"class":104},[87,107519,165],{"class":97},[87,107521,107522],{"class":104},"2000",[87,107524,31733],{"class":97},[87,107526,107527,107530,107532,107534,107536],{"class":89,"line":8960},[87,107528,107529],{"class":97},"        t ",[87,107531,946],{"class":171},[87,107533,32563],{"class":97},[87,107535,1549],{"class":171},[87,107537,107538],{"class":97}," model.opt.timestep\n",[87,107540,107541,107544,107546,107548,107550,107553,107555,107558,107560,107562,107565,107567,107569,107571],{"class":89,"line":8965},[87,107542,107543],{"class":97},"        data.ctrl[",[87,107545,111],{"class":104},[87,107547,5396],{"class":97},[87,107549,946],{"class":171},[87,107551,107552],{"class":104}," 1.5",[87,107554,7468],{"class":171},[87,107556,107557],{"class":97}," math.sin(",[87,107559,106186],{"class":104},[87,107561,7468],{"class":171},[87,107563,107564],{"class":97}," math.pi ",[87,107566,1549],{"class":171},[87,107568,62802],{"class":104},[87,107570,7468],{"class":171},[87,107572,107573],{"class":97}," t)\n",[87,107575,107576],{"class":89,"line":8971},[87,107577,102442],{"class":97},[87,107579,107580],{"class":89,"line":8983},[87,107581,3355],{"emptyLinePlaceholder":1029},[87,107583,107584,107586,107588,107591],{"class":89,"line":8995},[87,107585,32246],{"class":104},[87,107587,165],{"class":97},[87,107589,107590],{"class":949},"\"time:\"",[87,107592,102404],{"class":97},[87,107594,107595,107597,107599,107602,107604,107606],{"class":89,"line":9007},[87,107596,32246],{"class":104},[87,107598,165],{"class":97},[87,107600,107601],{"class":949},"\"joint qpos:\"",[87,107603,105856],{"class":97},[87,107605,1389],{"class":104},[87,107607,31444],{"class":97},[87,107609,107610,107612,107614,107617,107619,107621],{"class":89,"line":10666},[87,107611,32246],{"class":104},[87,107613,165],{"class":97},[87,107615,107616],{"class":949},"\"joint qvel:\"",[87,107618,105872],{"class":97},[87,107620,1389],{"class":104},[87,107622,31444],{"class":97},[87,107624,107625,107627,107629,107632],{"class":89,"line":10691},[87,107626,32246],{"class":104},[87,107628,165],{"class":97},[87,107630,107631],{"class":949},"\"last ctrl:\"",[87,107633,107634],{"class":97},", data.ctrl.copy())\n",[87,107636,107637],{"class":89,"line":10714},[87,107638,3355],{"emptyLinePlaceholder":1029},[87,107640,107641],{"class":89,"line":10738},[87,107642,3355],{"emptyLinePlaceholder":1029},[87,107644,107645,107647,107649,107651,107653],{"class":89,"line":10743},[87,107646,2488],{"class":171},[87,107648,32167],{"class":104},[87,107650,102485],{"class":171},[87,107652,102488],{"class":949},[87,107654,4693],{"class":97},[87,107656,107657],{"class":89,"line":10748},[87,107658,102495],{"class":97},[19,107660,104496],{},[77,107662,107664],{"className":24769,"code":107663,"language":24771,"meta":82,"style":82},"touch ch4_joint_motor.py\n",[84,107665,107666],{"__ignoreMap":82},[87,107667,107668,107670],{"class":89,"line":90},[87,107669,102209],{"class":205},[87,107671,107672],{"class":949}," ch4_joint_motor.py\n",[19,107674,103227],{},[77,107676,107678],{"className":24769,"code":107677,"language":24771,"meta":82,"style":82},"python ch4_joint_motor.py\n",[84,107679,107680],{"__ignoreMap":82},[87,107681,107682,107684],{"class":89,"line":90},[87,107683,31327],{"class":205},[87,107685,107672],{"class":949},[44,107687,102498],{"id":102498},[19,107689,107690],{},"检查 actuator 数量：",[77,107692,107694],{"className":31325,"code":107693,"language":31327,"meta":82,"style":82},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[84,107695,107696,107708],{"__ignoreMap":82},[87,107697,107698,107700,107702,107704,107706],{"class":89,"line":90},[87,107699,2488],{"class":171},[87,107701,107484],{"class":97},[87,107703,21896],{"class":171},[87,107705,568],{"class":104},[87,107707,4693],{"class":97},[87,107709,107710,107712,107714,107716,107718],{"class":89,"line":101},[87,107711,104821],{"class":171},[87,107713,104361],{"class":104},[87,107715,165],{"class":97},[87,107717,107501],{"class":949},[87,107719,1108],{"class":97},[19,107721,107722,107724,107725,107727],{},[84,107723,103084],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[84,107726,102002],{}," 长度应该是 1。",[19,107729,107730],{},"产生正弦控制信号：",[77,107732,107734],{"className":31325,"code":107733,"language":31327,"meta":82,"style":82},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[84,107735,107736],{"__ignoreMap":82},[87,107737,107738,107740,107742,107744,107746,107748,107750,107752,107754,107756,107758,107760,107762,107764],{"class":89,"line":90},[87,107739,106797],{"class":97},[87,107741,111],{"class":104},[87,107743,5396],{"class":97},[87,107745,946],{"class":171},[87,107747,107552],{"class":104},[87,107749,7468],{"class":171},[87,107751,107557],{"class":97},[87,107753,106186],{"class":104},[87,107755,7468],{"class":171},[87,107757,107564],{"class":97},[87,107759,1549],{"class":171},[87,107761,62802],{"class":104},[87,107763,7468],{"class":171},[87,107765,107573],{"class":97},[19,107767,107768],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,107770,102599],{},[77,107772,107773],{"className":31325,"code":105431,"language":31327,"meta":82,"style":82},[84,107774,107775],{"__ignoreMap":82},[87,107776,107777],{"class":89,"line":90},[87,107778,105431],{"class":97},[19,107780,107781],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[44,107783,102634],{"id":102634},[77,107785,107787],{"className":31325,"code":107786,"language":31327,"meta":82,"style":82},"import math\n",[84,107788,107789],{"__ignoreMap":82},[87,107790,107791,107793],{"class":89,"line":90},[87,107792,31339],{"class":171},[87,107794,107276],{"class":97},[19,107796,107797,107798,101944,107801,107804],{},"导入 Python 标准库里的数学模块。后面要用 ",[84,107799,107800],{},"math.sin",[84,107802,107803],{},"math.pi"," 生成周期变化的控制信号。",[77,107806,107807],{"className":31325,"code":104612,"language":31327,"meta":82,"style":82},[84,107808,107809,107815],{"__ignoreMap":82},[87,107810,107811,107813],{"class":89,"line":90},[87,107812,31339],{"class":171},[87,107814,102227],{"class":97},[87,107816,107817,107819,107821,107823],{"class":89,"line":101},[87,107818,31339],{"class":171},[87,107820,32327],{"class":97},[87,107822,32330],{"class":171},[87,107824,32333],{"class":97},[19,107826,107827],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[77,107829,107830],{"className":54004,"code":107113,"language":54006,"meta":82,"style":82},[84,107831,107832],{"__ignoreMap":82},[87,107833,107834,107836,107838,107840,107842,107844,107846,107848,107850,107852,107854,107856,107858,107860,107862],{"class":89,"line":90},[87,107835,938],{"class":97},[87,107837,103882],{"class":93},[87,107839,15870],{"class":205},[87,107841,946],{"class":97},[87,107843,106945],{"class":949},[87,107845,54760],{"class":205},[87,107847,946],{"class":97},[87,107849,106945],{"class":949},[87,107851,106954],{"class":205},[87,107853,946],{"class":97},[87,107855,106959],{"class":949},[87,107857,107142],{"class":205},[87,107859,946],{"class":97},[87,107861,107147],{"class":949},[87,107863,102070],{"class":97},[19,107865,107866,107867,107869,107870,107872,107873,107875],{},"这行定义关节。",[84,107868,106766],{}," 表示旋转关节。",[84,107871,107165],{}," 表示绕 y 轴旋转。",[84,107874,107171],{}," 表示有一点阻尼，运动不会完全无损耗。",[77,107877,107879],{"className":54004,"code":107878,"language":54006,"meta":82,"style":82},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[84,107880,107881],{"__ignoreMap":82},[87,107882,107883,107885,107887,107889,107891,107894,107896,107898,107901,107904,107906,107909,107911,107913,107915,107917,107919,107922],{"class":89,"line":90},[87,107884,938],{"class":97},[87,107886,102046],{"class":93},[87,107888,15870],{"class":205},[87,107890,946],{"class":97},[87,107892,107893],{"class":949},"\"link_geom\"",[87,107895,54760],{"class":205},[87,107897,946],{"class":97},[87,107899,107900],{"class":949},"\"capsule\"",[87,107902,107903],{"class":205}," fromto",[87,107905,946],{"class":97},[87,107907,107908],{"class":949},"\"0 0 0 0 0 0.5\"",[87,107910,102062],{"class":205},[87,107912,946],{"class":97},[87,107914,104704],{"class":949},[87,107916,102927],{"class":205},[87,107918,946],{"class":97},[87,107920,107921],{"class":949},"\"0.5\"",[87,107923,102070],{"class":97},[19,107925,107926,107927,107929,107930,107932,107933,107936,107937,29332,107940,107942],{},"这行定义摆杆的形状。",[84,107928,104091],{}," 是胶囊体，适合表示杆子。",[84,107931,104102],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[84,107934,107935],{},"(0,0,0)"," 延伸到 ",[84,107938,107939],{},"(0,0,0.5)",[84,107941,104096],{}," 是半径。",[77,107944,107945],{"className":54004,"code":107179,"language":54006,"meta":82,"style":82},[84,107946,107947],{"__ignoreMap":82},[87,107948,107949,107951,107953,107955,107957,107959,107961,107963,107965,107967,107969,107971,107973,107975,107977,107979,107981,107983],{"class":89,"line":90},[87,107950,938],{"class":97},[87,107952,107000],{"class":93},[87,107954,15870],{"class":205},[87,107956,946],{"class":97},[87,107958,107007],{"class":949},[87,107960,107010],{"class":205},[87,107962,946],{"class":97},[87,107964,106945],{"class":949},[87,107966,107017],{"class":205},[87,107968,946],{"class":97},[87,107970,4632],{"class":949},[87,107972,107024],{"class":205},[87,107974,946],{"class":97},[87,107976,107029],{"class":949},[87,107978,107032],{"class":205},[87,107980,946],{"class":97},[87,107982,107037],{"class":949},[87,107984,102070],{"class":97},[19,107986,107987,107988,107990,107991,107994,107995,107997],{},"这行定义电机。它作用在 ",[84,107989,106766],{}," 关节上。",[84,107992,107993],{},"gear"," 可以理解成放大倍数。",[84,107996,106781],{}," 限制控制输入范围。",[77,107999,108000],{"className":31325,"code":107693,"language":31327,"meta":82,"style":82},[84,108001,108002,108014],{"__ignoreMap":82},[87,108003,108004,108006,108008,108010,108012],{"class":89,"line":90},[87,108005,2488],{"class":171},[87,108007,107484],{"class":97},[87,108009,21896],{"class":171},[87,108011,568],{"class":104},[87,108013,4693],{"class":97},[87,108015,108016,108018,108020,108022,108024],{"class":89,"line":101},[87,108017,104821],{"class":171},[87,108019,104361],{"class":104},[87,108021,165],{"class":97},[87,108023,107501],{"class":949},[87,108025,1108],{"class":97},[19,108027,108028,108030],{},[84,108029,103084],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[77,108032,108034],{"className":31325,"code":108033,"language":31327,"meta":82,"style":82},"for step in range(2000):\n",[84,108035,108036],{"__ignoreMap":82},[87,108037,108038,108040,108042,108044,108046,108048,108050],{"class":89,"line":90},[87,108039,3979],{"class":171},[87,108041,32563],{"class":97},[87,108043,26990],{"class":171},[87,108045,33390],{"class":104},[87,108047,165],{"class":97},[87,108049,107522],{"class":104},[87,108051,31733],{"class":97},[19,108053,108054,108055,108057,108058,108061],{},"循环 2000 步。这里没有用 ",[84,108056,2083],{},"，而是用 ",[84,108059,108060],{},"step","，因为后面要用当前步数计算时间。",[77,108063,108065],{"className":31325,"code":108064,"language":31327,"meta":82,"style":82},"t = step * model.opt.timestep\n",[84,108066,108067],{"__ignoreMap":82},[87,108068,108069,108072,108074,108076,108078],{"class":89,"line":90},[87,108070,108071],{"class":97},"t ",[87,108073,946],{"class":171},[87,108075,32563],{"class":97},[87,108077,1549],{"class":171},[87,108079,107538],{"class":97},[19,108081,108082],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[77,108084,108085],{"className":31325,"code":107733,"language":31327,"meta":82,"style":82},[84,108086,108087],{"__ignoreMap":82},[87,108088,108089,108091,108093,108095,108097,108099,108101,108103,108105,108107,108109,108111,108113,108115],{"class":89,"line":90},[87,108090,106797],{"class":97},[87,108092,111],{"class":104},[87,108094,5396],{"class":97},[87,108096,946],{"class":171},[87,108098,107552],{"class":104},[87,108100,7468],{"class":171},[87,108102,107557],{"class":97},[87,108104,106186],{"class":104},[87,108106,7468],{"class":171},[87,108108,107564],{"class":97},[87,108110,1549],{"class":171},[87,108112,62802],{"class":104},[87,108114,7468],{"class":171},[87,108116,107573],{"class":97},[19,108118,108119],{},"这行给电机输入一个正弦波。拆开看：",[1055,108121,108122,108128,108134],{},[29,108123,108124,108127],{},[84,108125,108126],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[29,108129,108130,108133],{},[84,108131,108132],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[29,108135,108136,108139],{},[84,108137,108138],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,108141,108142],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[77,108144,108146],{"className":31325,"code":108145,"language":31327,"meta":82,"style":82},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[84,108147,108148],{"__ignoreMap":82},[87,108149,108150,108152,108154,108156,108158,108160],{"class":89,"line":90},[87,108151,31362],{"class":104},[87,108153,165],{"class":97},[87,108155,107601],{"class":949},[87,108157,105856],{"class":97},[87,108159,1389],{"class":104},[87,108161,31444],{"class":97},[19,108163,108164,108165,108167],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[84,108166,101996],{}," 只有一个数。",[14,108169,103242],{"id":103241},[19,108171,108172],{},"输出类似:",[77,108174,108177],{"className":108175,"code":108176,"language":599,"meta":82},[597],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[84,108178,108176],{"__ignoreMap":82},[19,108180,108181,108182,108184],{},"这里 ",[84,108183,107052],{}," 是电机输入。",[19,108186,108187,108190,108191,108194],{},[84,108188,108189],{},"joint qpos"," 是关节角度，单位通常是弧度。",[84,108192,108193],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,108196,108197],{},"角度单位提示：",[77,108199,108202],{"className":108200,"code":108201,"language":599,"meta":82},[597],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[84,108203,108201],{"__ignoreMap":82},[19,108205,108206,108207,108209,108210,108212],{},"如果你看到 ",[84,108208,104956],{}," 是 ",[84,108211,36276],{},"，大约就是 28.6 度。",[14,108214,103274],{"id":103273},[1055,108216,108217,108224,108227,108234,108237,108245,108253],{},[29,108218,103337,108219,103340,108221,29332],{},[84,108220,107237],{},[84,108222,108223],{},"gear=\"5\"",[29,108225,108226],{},"重新运行，观察关节运动是否更剧烈。",[29,108228,103337,108229,103340,108231,29332],{},[84,108230,106781],{},[84,108232,108233],{},"-0.2 0.2",[29,108235,108236],{},"重新运行，观察控制能力是否变弱。",[29,108238,108239,108240,108242,108243,29332],{},"去掉 actuator，确认 ",[84,108241,103084],{}," 变成 ",[84,108244,111],{},[29,108246,103337,108247,103340,108249,108252],{},[84,108248,107171],{},[84,108250,108251],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[29,108254,103337,108255,103340,108257,108260],{},[84,108256,107165],{},[84,108258,108259],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108262,103379],{"id":103378},[44,108264,108266],{"id":108265},"indexerror-index-0-is-out-of-bounds",[84,108267,108268],{},"IndexError: index 0 is out of bounds",[19,108270,108271,108272,108274],{},"原因是 ",[84,108273,106918],{},"，没有 actuator。",[44,108276,108277],{"id":108277},"关节几乎不动",[19,108279,108280],{},"可能原因:",[1055,108282,108283,108288,108292,108298],{},[29,108284,108285,108287],{},[84,108286,107993],{}," 太小",[29,108289,108290,108287],{},[84,108291,106781],{},[29,108293,108294,108297],{},[84,108295,108296],{},"damping"," 太大",[29,108299,108300],{},"重力方向导致运动不明显",[44,108302,108303],{"id":108303},"模型编译失败",[19,108305,108306,108307,108309],{},"检查 actuator 引用的 ",[84,108308,107228],{}," 是否存在，joint 名称是否拼写一致。",[44,108311,108313,108315],{"id":108312},"datactrl0-写了但没有效果",[84,108314,107052],{}," 写了但没有效果",[19,108317,103501],{},[1055,108319,108320,108325,108328,108333,108338],{},[29,108321,108322,108324],{},[84,108323,103084],{}," 是否大于 0。",[29,108326,108327],{},"motor 是否引用了正确 joint。",[29,108329,108330,108332],{},[84,108331,107993],{}," 是否太小。",[29,108334,108335,108337],{},[84,108336,106781],{}," 是否把输入限制得太小。",[29,108339,108340],{},"body 是否真的有可动 joint。",[44,108342,108343],{"id":108343},"控制输入超过范围会怎样",[19,108345,108346],{},"如果设置了：",[77,108348,108350],{"className":54004,"code":108349,"language":54006,"meta":82,"style":82},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[84,108351,108352],{"__ignoreMap":82},[87,108353,108354],{"class":89,"line":90},[87,108355,108349],{"class":97},[19,108357,108358],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[77,108360,108362],{"className":31325,"code":108361,"language":31327,"meta":82,"style":82},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[84,108363,108364,108384],{"__ignoreMap":82},[87,108365,108366,108369,108371,108374,108376,108378,108380,108382],{"class":89,"line":90},[87,108367,108368],{"class":97},"action ",[87,108370,946],{"class":171},[87,108372,108373],{"class":97}," np.clip(action, ",[87,108375,1625],{"class":171},[87,108377,106186],{"class":104},[87,108379,13385],{"class":97},[87,108381,106186],{"class":104},[87,108383,1108],{"class":97},[87,108385,108386,108388,108390,108392,108394],{"class":89,"line":101},[87,108387,106797],{"class":97},[87,108389,111],{"class":104},[87,108391,5396],{"class":97},[87,108393,946],{"class":171},[87,108395,108396],{"class":97}," action\n",[14,108398,103533],{"id":103532},[19,108400,108401],{},"这一章建立了控制任务的基本形式：",[77,108403,108406],{"className":108404,"code":108405,"language":599,"meta":82},[597],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[84,108407,108405],{"__ignoreMap":82},[19,108409,108410],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1006,108412,108413],{},"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":82,"searchDepth":101,"depth":101,"links":108415},[108416,108417,108418,108423,108427,108428,108429,108437],{"id":101572,"depth":101,"text":101573},{"id":101695,"depth":101,"text":101696},{"id":101970,"depth":101,"text":101971,"children":108419},[108420,108421,108422],{"id":107059,"depth":120,"text":107060},{"id":107109,"depth":120,"text":107110},{"id":107175,"depth":120,"text":107176},{"id":102178,"depth":101,"text":102179,"children":108424},[108425,108426],{"id":102498,"depth":120,"text":102498},{"id":102634,"depth":120,"text":102634},{"id":103241,"depth":101,"text":103242},{"id":103273,"depth":101,"text":103274},{"id":103378,"depth":101,"text":103379,"children":108430},[108431,108432,108433,108434,108436],{"id":108265,"depth":120,"text":108268},{"id":108277,"depth":120,"text":108277},{"id":108303,"depth":120,"text":108303},{"id":108312,"depth":120,"text":108435},"data.ctrl[0] 写了但没有效果",{"id":108343,"depth":120,"text":108343},{"id":103532,"depth":101,"text":103533},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106747,"description":82},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108444,"title":108445,"body":108446,"description":82,"extension":1027,"meta":110355,"navigation":1029,"path":110356,"seo":110357,"stem":110358,"__hash__":110359},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108447,"toc":110331},[108448,108451,108453,108456,108464,108467,108484,108487,108512,108515,108561,108563,108565,108620,108622,108641,108643,108686,108689,108706,108709,108725,108735,108742,108744,108747,108750,108784,108787,108835,108839,108842,108856,108865,108869,108872,108897,108900,108904,108917,108920,108926,108929,108944,108946,108949,109209,109211,109223,109226,109538,109540,109552,109554,109557,109572,109577,109580,109602,109605,109608,109642,109645,109649,109660,109663,109680,109683,109697,109704,109724,109731,109745,109748,109760,109775,109795,109798,109820,109823,109827,109842,109853,109868,109871,109901,109917,109946,109954,109978,109981,109999,110009,110021,110028,110037,110043,110052,110055,110057,110066,110069,110084,110086,110089,110100,110103,110114,110117,110135,110137,110154,110157,110185,110187,110191,110194,110224,110230,110233,110237,110245,110248,110250,110271,110274,110277,110293,110296,110312,110314,110317,110328],[10,108449,108445],{"id":108450},"_5viewer-可视化与-renderer-离屏渲染",[14,108452,101573],{"id":101572},[19,108454,108455],{},"本章掌握两类可视化方式:",[1055,108457,108458,108461],{},[29,108459,108460],{},"交互式 viewer: 适合人工观察仿真",[29,108462,108463],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,108465,108466],{},"使用官方接口:",[77,108468,108470],{"className":31325,"code":108469,"language":31327,"meta":82,"style":82},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[84,108471,108472,108479],{"__ignoreMap":82},[87,108473,108474,108476],{"class":89,"line":90},[87,108475,31339],{"class":171},[87,108477,108478],{"class":97}," mujoco.viewer\n",[87,108480,108481],{"class":89,"line":101},[87,108482,108483],{"class":97},"mujoco.viewer.launch_passive(model, data)\n",[19,108485,108486],{},"以及:",[77,108488,108490],{"className":31325,"code":108489,"language":31327,"meta":82,"style":82},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[84,108491,108492,108502],{"__ignoreMap":82},[87,108493,108494,108497,108499],{"class":89,"line":90},[87,108495,108496],{"class":97},"renderer ",[87,108498,946],{"class":171},[87,108500,108501],{"class":97}," mujoco.Renderer(model)\n",[87,108503,108504,108507,108509],{"class":89,"line":101},[87,108505,108506],{"class":97},"image ",[87,108508,946],{"class":171},[87,108510,108511],{"class":97}," renderer.render()\n",[19,108513,108514],{},"新手建议先理解二者区别：",[1235,108516,108517,108533],{},[1238,108518,108519],{},[1241,108520,108521,108524,108527,108530],{},[1244,108522,108523],{"align":24683},"工具",[1244,108525,108526],{"align":24683},"用途",[1244,108528,108529],{"align":24683},"是否打开窗口",[1244,108531,108532],{"align":24683},"常见场景",[1281,108534,108535,108548],{},[1241,108536,108537,108540,108543,108545],{},[1286,108538,108539],{"align":24683},"Viewer",[1286,108541,108542],{"align":24683},"人眼实时观察仿真",[1286,108544,105591],{"align":24683},[1286,108546,108547],{"align":24683},"调试模型、看控制效果",[1241,108549,108550,108553,108556,108558],{},[1286,108551,108552],{"align":24683},"Renderer",[1286,108554,108555],{"align":24683},"生成图像数组",[1286,108557,105604],{"align":24683},[1286,108559,108560],{"align":24683},"保存图片、训练视觉策略、服务器批量采集",[14,108562,101696],{"id":101695},[19,108564,101699],{},[77,108566,108568],{"className":24769,"code":108567,"language":24771,"meta":82,"style":82},"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",[84,108569,108570,108582,108592,108600,108608],{"__ignoreMap":82},[87,108571,108572,108574,108576,108578,108580],{"class":89,"line":90},[87,108573,25524],{"class":205},[87,108575,27262],{"class":949},[87,108577,24781],{"class":949},[87,108579,27347],{"class":104},[87,108581,25626],{"class":104},[87,108583,108584,108586,108588,108590],{"class":89,"line":101},[87,108585,101734],{"class":949},[87,108587,101737],{"class":949},[87,108589,101740],{"class":949},[87,108591,25626],{"class":104},[87,108593,108594,108596,108598],{"class":89,"line":120},[87,108595,101747],{"class":949},[87,108597,101750],{"class":949},[87,108599,25626],{"class":104},[87,108601,108602,108604,108606],{"class":89,"line":222},[87,108603,101757],{"class":949},[87,108605,101760],{"class":949},[87,108607,25626],{"class":104},[87,108609,108610,108612,108614,108616,108618],{"class":89,"line":234},[87,108611,101767],{"class":949},[87,108613,101770],{"class":949},[87,108615,101773],{"class":949},[87,108617,101776],{"class":949},[87,108619,103442],{"class":949},[19,108621,103745],{},[77,108623,108625],{"className":24769,"code":108624,"language":24771,"meta":82,"style":82},"pip install \"mujoco>=2.3\" numpy pillow\n",[84,108626,108627],{"__ignoreMap":82},[87,108628,108629,108631,108633,108635,108638],{"class":89,"line":90},[87,108630,24778],{"class":205},[87,108632,24781],{"class":949},[87,108634,101856],{"class":949},[87,108636,108637],{"class":949}," numpy",[87,108639,108640],{"class":949}," pillow\n",[19,108642,103762],{},[77,108644,108646],{"className":24769,"code":108645,"language":24771,"meta":82,"style":82},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[84,108647,108648,108665,108674],{"__ignoreMap":82},[87,108649,108650,108652,108654,108656,108659,108661,108663],{"class":89,"line":90},[87,108651,31277],{"class":205},[87,108653,30123],{"class":949},[87,108655,26063],{"class":104},[87,108657,108658],{"class":949}," mujoco-render",[87,108660,101901],{"class":949},[87,108662,101904],{"class":104},[87,108664,101907],{"class":104},[87,108666,108667,108669,108671],{"class":89,"line":101},[87,108668,31277],{"class":205},[87,108670,101914],{"class":949},[87,108672,108673],{"class":949}," mujoco-render\n",[87,108675,108676,108678,108680,108682,108684],{"class":89,"line":120},[87,108677,24778],{"class":205},[87,108679,24781],{"class":949},[87,108681,101856],{"class":949},[87,108683,108637],{"class":949},[87,108685,108640],{"class":949},[19,108687,108688],{},"离屏渲染后端:",[77,108690,108692],{"className":24769,"code":108691,"language":24771,"meta":82,"style":82},"export MUJOCO_GL=egl\n",[84,108693,108694],{"__ignoreMap":82},[87,108695,108696,108698,108701,108703],{"class":89,"line":90},[87,108697,25990],{"class":171},[87,108699,108700],{"class":97}," MUJOCO_GL",[87,108702,946],{"class":171},[87,108704,108705],{"class":97},"egl\n",[19,108707,108708],{},"或:",[77,108710,108712],{"className":24769,"code":108711,"language":24771,"meta":82,"style":82},"export MUJOCO_GL=osmesa\n",[84,108713,108714],{"__ignoreMap":82},[87,108715,108716,108718,108720,108722],{"class":89,"line":90},[87,108717,25990],{"class":171},[87,108719,108700],{"class":97},[87,108721,946],{"class":171},[87,108723,108724],{"class":97},"osmesa\n",[19,108726,108727,108728,108731,108732,29332],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[84,108729,108730],{},"egl"," 失败，再尝试 ",[84,108733,108734],{},"osmesa",[19,108736,108737,108738,108741],{},"如果你在本机桌面环境运行，通常先不要设置 ",[84,108739,108740],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108743,101971],{"id":101970},[19,108745,108746],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,108748,108749],{},"典型 viewer 流程:",[77,108751,108753],{"className":31325,"code":108752,"language":31327,"meta":82,"style":82},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[84,108754,108755,108768,108775,108779],{"__ignoreMap":82},[87,108756,108757,108760,108763,108765],{"class":89,"line":90},[87,108758,108759],{"class":171},"with",[87,108761,108762],{"class":97}," mujoco.viewer.launch_passive(model, data) ",[87,108764,32330],{"class":171},[87,108766,108767],{"class":97}," viewer:\n",[87,108769,108770,108772],{"class":89,"line":101},[87,108771,3206],{"class":171},[87,108773,108774],{"class":97}," viewer.is_running():\n",[87,108776,108777],{"class":89,"line":120},[87,108778,102442],{"class":97},[87,108780,108781],{"class":89,"line":222},[87,108782,108783],{"class":97},"        viewer.sync()\n",[19,108785,108786],{},"典型 renderer 流程:",[77,108788,108790],{"className":31325,"code":108789,"language":31327,"meta":82,"style":82},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[84,108791,108792,108818,108822,108827],{"__ignoreMap":82},[87,108793,108794,108796,108798,108801,108803,108805,108807,108809,108811,108813,108816],{"class":89,"line":90},[87,108795,108496],{"class":97},[87,108797,946],{"class":171},[87,108799,108800],{"class":97}," mujoco.Renderer(model, ",[87,108802,25929],{"class":492},[87,108804,946],{"class":171},[87,108806,43289],{"class":104},[87,108808,13385],{"class":97},[87,108810,25925],{"class":492},[87,108812,946],{"class":171},[87,108814,108815],{"class":104},"640",[87,108817,1108],{"class":97},[87,108819,108820],{"class":89,"line":101},[87,108821,105431],{"class":97},[87,108823,108824],{"class":89,"line":120},[87,108825,108826],{"class":97},"renderer.update_scene(data)\n",[87,108828,108829,108831,108833],{"class":89,"line":222},[87,108830,108506],{"class":97},[87,108832,946],{"class":171},[87,108834,108511],{"class":97},[44,108836,108838],{"id":108837},"viewer-的同步逻辑","viewer 的同步逻辑",[19,108840,108841],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[77,108843,108845],{"className":31325,"code":108844,"language":31327,"meta":82,"style":82},"mujoco.mj_step(model, data)\nviewer.sync()\n",[84,108846,108847,108851],{"__ignoreMap":82},[87,108848,108849],{"class":89,"line":90},[87,108850,105431],{"class":97},[87,108852,108853],{"class":89,"line":101},[87,108854,108855],{"class":97},"viewer.sync()\n",[19,108857,108858,108860,108861,108864],{},[84,108859,102141],{}," 负责算物理，",[84,108862,108863],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[44,108866,108868],{"id":108867},"为什么要-sleep","为什么要 sleep",[19,108870,108871],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[77,108873,108875],{"className":31325,"code":108874,"language":31327,"meta":82,"style":82},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[84,108876,108877],{"__ignoreMap":82},[87,108878,108879,108882,108884,108887,108889,108892,108894],{"class":89,"line":90},[87,108880,108881],{"class":97},"sleep_time ",[87,108883,946],{"class":171},[87,108885,108886],{"class":97}," model.opt.timestep ",[87,108888,1625],{"class":171},[87,108890,108891],{"class":97}," (time.time() ",[87,108893,1625],{"class":171},[87,108895,108896],{"class":97}," step_start)\n",[19,108898,108899],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[44,108901,108903],{"id":108902},"renderer-输出是什么","renderer 输出是什么",[77,108905,108907],{"className":31325,"code":108906,"language":31327,"meta":82,"style":82},"image = renderer.render()\n",[84,108908,108909],{"__ignoreMap":82},[87,108910,108911,108913,108915],{"class":89,"line":90},[87,108912,108506],{"class":97},[87,108914,946],{"class":171},[87,108916,108511],{"class":97},[19,108918,108919],{},"得到的是 NumPy 数组，形状通常是：",[77,108921,108924],{"className":108922,"code":108923,"language":599,"meta":82},[597],"(height, width, 3)\n",[84,108925,108923],{"__ignoreMap":82},[19,108927,108928],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[77,108930,108932],{"className":31325,"code":108931,"language":31327,"meta":82,"style":82},"Image.fromarray(image).save(\"render_output.png\")\n",[84,108933,108934],{"__ignoreMap":82},[87,108935,108936,108939,108942],{"class":89,"line":90},[87,108937,108938],{"class":97},"Image.fromarray(image).save(",[87,108940,108941],{"class":949},"\"render_output.png\"",[87,108943,1108],{"class":97},[14,108945,102179],{"id":102178},[19,108947,108948],{},"交互式 Viewer:",[77,108950,108952],{"className":31325,"code":108951,"language":31327,"meta":82,"style":82},"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",[84,108953,108954,108960,108964,108970,108976,108980,108984,108992,108997,109001,109005,109009,109014,109019,109023,109027,109031,109036,109040,109044,109048,109052,109056,109060,109072,109084,109092,109096,109106,109126,109136,109141,109146,109150,109167,109180,109185,109189,109193,109205],{"__ignoreMap":82},[87,108955,108956,108958],{"class":89,"line":90},[87,108957,31339],{"class":171},[87,108959,32776],{"class":97},[87,108961,108962],{"class":89,"line":101},[87,108963,3355],{"emptyLinePlaceholder":1029},[87,108965,108966,108968],{"class":89,"line":120},[87,108967,31339],{"class":171},[87,108969,102227],{"class":97},[87,108971,108972,108974],{"class":89,"line":222},[87,108973,31339],{"class":171},[87,108975,108478],{"class":97},[87,108977,108978],{"class":89,"line":234},[87,108979,3355],{"emptyLinePlaceholder":1029},[87,108981,108982],{"class":89,"line":256},[87,108983,3355],{"emptyLinePlaceholder":1029},[87,108985,108986,108988,108990],{"class":89,"line":269},[87,108987,102240],{"class":104},[87,108989,14514],{"class":171},[87,108991,102245],{"class":949},[87,108993,108994],{"class":89,"line":463},[87,108995,108996],{"class":949},"\u003Cmujoco model=\"viewer_demo\">\n",[87,108998,108999],{"class":89,"line":469},[87,109000,102255],{"class":949},[87,109002,109003],{"class":89,"line":2287},[87,109004,3355],{"emptyLinePlaceholder":1029},[87,109006,109007],{"class":89,"line":2568},[87,109008,102264],{"class":949},[87,109010,109011],{"class":89,"line":2573},[87,109012,109013],{"class":949},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[87,109015,109016],{"class":89,"line":2579},[87,109017,109018],{"class":949},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[87,109020,109021],{"class":89,"line":2584},[87,109022,3355],{"emptyLinePlaceholder":1029},[87,109024,109025],{"class":89,"line":2598},[87,109026,102278],{"class":949},[87,109028,109029],{"class":89,"line":2603},[87,109030,102283],{"class":949},[87,109032,109033],{"class":89,"line":2609},[87,109034,109035],{"class":949},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[87,109037,109038],{"class":89,"line":2630},[87,109039,102293],{"class":949},[87,109041,109042],{"class":89,"line":2635},[87,109043,102298],{"class":949},[87,109045,109046],{"class":89,"line":2649},[87,109047,102303],{"class":949},[87,109049,109050],{"class":89,"line":2654},[87,109051,96624],{"class":949},[87,109053,109054],{"class":89,"line":2683},[87,109055,3355],{"emptyLinePlaceholder":1029},[87,109057,109058],{"class":89,"line":2688},[87,109059,3355],{"emptyLinePlaceholder":1029},[87,109061,109062,109064,109066,109068,109070],{"class":89,"line":2705},[87,109063,32894],{"class":171},[87,109065,2928],{"class":205},[87,109067,102324],{"class":97},[87,109069,96612],{"class":104},[87,109071,4693],{"class":97},[87,109073,109074,109076,109078,109080,109082],{"class":89,"line":2710},[87,109075,102333],{"class":97},[87,109077,946],{"class":171},[87,109079,102338],{"class":97},[87,109081,102240],{"class":104},[87,109083,1108],{"class":97},[87,109085,109086,109088,109090],{"class":89,"line":2715},[87,109087,102347],{"class":97},[87,109089,946],{"class":171},[87,109091,102352],{"class":97},[87,109093,109094],{"class":89,"line":2720},[87,109095,3355],{"emptyLinePlaceholder":1029},[87,109097,109098,109100,109102,109104],{"class":89,"line":2734},[87,109099,35125],{"class":171},[87,109101,108762],{"class":97},[87,109103,32330],{"class":171},[87,109105,108767],{"class":97},[87,109107,109108,109111,109114,109116,109119,109121,109124],{"class":89,"line":2739},[87,109109,109110],{"class":171},"        while",[87,109112,109113],{"class":97}," viewer.is_running() ",[87,109115,31409],{"class":171},[87,109117,109118],{"class":97}," data.time ",[87,109120,938],{"class":171},[87,109122,109123],{"class":104}," 5.0",[87,109125,4693],{"class":97},[87,109127,109128,109131,109133],{"class":89,"line":3532},[87,109129,109130],{"class":97},"            step_start ",[87,109132,946],{"class":171},[87,109134,109135],{"class":97}," time.time()\n",[87,109137,109138],{"class":89,"line":3546},[87,109139,109140],{"class":97},"            mujoco.mj_step(model, data)\n",[87,109142,109143],{"class":89,"line":3554},[87,109144,109145],{"class":97},"            viewer.sync()\n",[87,109147,109148],{"class":89,"line":3559},[87,109149,3355],{"emptyLinePlaceholder":1029},[87,109151,109152,109155,109157,109159,109161,109163,109165],{"class":89,"line":3565},[87,109153,109154],{"class":97},"            sleep_time ",[87,109156,946],{"class":171},[87,109158,108886],{"class":97},[87,109160,1625],{"class":171},[87,109162,108891],{"class":97},[87,109164,1625],{"class":171},[87,109166,108896],{"class":97},[87,109168,109169,109171,109174,109176,109178],{"class":89,"line":3571},[87,109170,5595],{"class":171},[87,109172,109173],{"class":97}," sleep_time ",[87,109175,2051],{"class":171},[87,109177,577],{"class":104},[87,109179,4693],{"class":97},[87,109181,109182],{"class":89,"line":3576},[87,109183,109184],{"class":97},"                time.sleep(sleep_time)\n",[87,109186,109187],{"class":89,"line":8898},[87,109188,3355],{"emptyLinePlaceholder":1029},[87,109190,109191],{"class":89,"line":8922},[87,109192,3355],{"emptyLinePlaceholder":1029},[87,109194,109195,109197,109199,109201,109203],{"class":89,"line":8927},[87,109196,2488],{"class":171},[87,109198,32167],{"class":104},[87,109200,102485],{"class":171},[87,109202,102488],{"class":949},[87,109204,4693],{"class":97},[87,109206,109207],{"class":89,"line":8933},[87,109208,102495],{"class":97},[19,109210,104496],{},[77,109212,109214],{"className":24769,"code":109213,"language":24771,"meta":82,"style":82},"touch ch5_viewer.py\n",[84,109215,109216],{"__ignoreMap":82},[87,109217,109218,109220],{"class":89,"line":90},[87,109219,102209],{"class":205},[87,109221,109222],{"class":949}," ch5_viewer.py\n",[19,109224,109225],{},"离屏 Renderer 保存图片:",[77,109227,109229],{"className":31325,"code":109228,"language":31327,"meta":82,"style":82},"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",[84,109230,109231,109243,109247,109253,109263,109267,109271,109279,109284,109288,109292,109296,109300,109305,109309,109313,109317,109321,109325,109329,109333,109337,109341,109345,109349,109361,109373,109381,109406,109410,109426,109430,109434,109449,109458,109462,109476,109481,109486,109490,109502,109514,109518,109522,109534],{"__ignoreMap":82},[87,109232,109233,109235,109238,109240],{"class":89,"line":90},[87,109234,31684],{"class":171},[87,109236,109237],{"class":97}," pathlib ",[87,109239,31339],{"class":171},[87,109241,109242],{"class":97}," Path\n",[87,109244,109245],{"class":89,"line":101},[87,109246,3355],{"emptyLinePlaceholder":1029},[87,109248,109249,109251],{"class":89,"line":120},[87,109250,31339],{"class":171},[87,109252,102227],{"class":97},[87,109254,109255,109257,109259,109261],{"class":89,"line":222},[87,109256,31684],{"class":171},[87,109258,48210],{"class":104},[87,109260,48213],{"class":171},[87,109262,48216],{"class":97},[87,109264,109265],{"class":89,"line":234},[87,109266,3355],{"emptyLinePlaceholder":1029},[87,109268,109269],{"class":89,"line":256},[87,109270,3355],{"emptyLinePlaceholder":1029},[87,109272,109273,109275,109277],{"class":89,"line":269},[87,109274,102240],{"class":104},[87,109276,14514],{"class":171},[87,109278,102245],{"class":949},[87,109280,109281],{"class":89,"line":463},[87,109282,109283],{"class":949},"\u003Cmujoco model=\"renderer_demo\">\n",[87,109285,109286],{"class":89,"line":469},[87,109287,102255],{"class":949},[87,109289,109290],{"class":89,"line":2287},[87,109291,3355],{"emptyLinePlaceholder":1029},[87,109293,109294],{"class":89,"line":2568},[87,109295,102264],{"class":949},[87,109297,109298],{"class":89,"line":2573},[87,109299,109013],{"class":949},[87,109301,109302],{"class":89,"line":2579},[87,109303,109304],{"class":949},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[87,109306,109307],{"class":89,"line":2584},[87,109308,109018],{"class":949},[87,109310,109311],{"class":89,"line":2598},[87,109312,3355],{"emptyLinePlaceholder":1029},[87,109314,109315],{"class":89,"line":2603},[87,109316,102278],{"class":949},[87,109318,109319],{"class":89,"line":2609},[87,109320,102283],{"class":949},[87,109322,109323],{"class":89,"line":2630},[87,109324,109035],{"class":949},[87,109326,109327],{"class":89,"line":2635},[87,109328,102293],{"class":949},[87,109330,109331],{"class":89,"line":2649},[87,109332,102298],{"class":949},[87,109334,109335],{"class":89,"line":2654},[87,109336,102303],{"class":949},[87,109338,109339],{"class":89,"line":2683},[87,109340,96624],{"class":949},[87,109342,109343],{"class":89,"line":2688},[87,109344,3355],{"emptyLinePlaceholder":1029},[87,109346,109347],{"class":89,"line":2705},[87,109348,3355],{"emptyLinePlaceholder":1029},[87,109350,109351,109353,109355,109357,109359],{"class":89,"line":2710},[87,109352,32894],{"class":171},[87,109354,2928],{"class":205},[87,109356,102324],{"class":97},[87,109358,96612],{"class":104},[87,109360,4693],{"class":97},[87,109362,109363,109365,109367,109369,109371],{"class":89,"line":2715},[87,109364,102333],{"class":97},[87,109366,946],{"class":171},[87,109368,102338],{"class":97},[87,109370,102240],{"class":104},[87,109372,1108],{"class":97},[87,109374,109375,109377,109379],{"class":89,"line":2720},[87,109376,102347],{"class":97},[87,109378,946],{"class":171},[87,109380,102352],{"class":97},[87,109382,109383,109386,109388,109390,109392,109394,109396,109398,109400,109402,109404],{"class":89,"line":2734},[87,109384,109385],{"class":97},"    renderer ",[87,109387,946],{"class":171},[87,109389,108800],{"class":97},[87,109391,25929],{"class":492},[87,109393,946],{"class":171},[87,109395,43289],{"class":104},[87,109397,13385],{"class":97},[87,109399,25925],{"class":492},[87,109401,946],{"class":171},[87,109403,108815],{"class":104},[87,109405,1108],{"class":97},[87,109407,109408],{"class":89,"line":2739},[87,109409,3355],{"emptyLinePlaceholder":1029},[87,109411,109412,109414,109416,109418,109420,109422,109424],{"class":89,"line":3532},[87,109413,4155],{"class":171},[87,109415,102427],{"class":97},[87,109417,26990],{"class":171},[87,109419,33390],{"class":104},[87,109421,165],{"class":97},[87,109423,536],{"class":104},[87,109425,31733],{"class":97},[87,109427,109428],{"class":89,"line":3546},[87,109429,102442],{"class":97},[87,109431,109432],{"class":89,"line":3554},[87,109433,3355],{"emptyLinePlaceholder":1029},[87,109435,109436,109439,109442,109444,109447],{"class":89,"line":3559},[87,109437,109438],{"class":97},"    renderer.update_scene(data, ",[87,109440,109441],{"class":492},"camera",[87,109443,946],{"class":171},[87,109445,109446],{"class":949},"\"fixed_camera\"",[87,109448,1108],{"class":97},[87,109450,109451,109454,109456],{"class":89,"line":3565},[87,109452,109453],{"class":97},"    image ",[87,109455,946],{"class":171},[87,109457,108511],{"class":97},[87,109459,109460],{"class":89,"line":3571},[87,109461,3355],{"emptyLinePlaceholder":1029},[87,109463,109464,109467,109469,109472,109474],{"class":89,"line":3576},[87,109465,109466],{"class":97},"    output_path ",[87,109468,946],{"class":171},[87,109470,109471],{"class":97}," Path(",[87,109473,108941],{"class":949},[87,109475,1108],{"class":97},[87,109477,109478],{"class":89,"line":8898},[87,109479,109480],{"class":97},"    Image.fromarray(image).save(output_path)\n",[87,109482,109483],{"class":89,"line":8922},[87,109484,109485],{"class":97},"    renderer.close()\n",[87,109487,109488],{"class":89,"line":8927},[87,109489,3355],{"emptyLinePlaceholder":1029},[87,109491,109492,109494,109496,109499],{"class":89,"line":8933},[87,109493,32246],{"class":104},[87,109495,165],{"class":97},[87,109497,109498],{"class":949},"\"saved:\"",[87,109500,109501],{"class":97},", output_path.resolve())\n",[87,109503,109504,109506,109508,109511],{"class":89,"line":8960},[87,109505,32246],{"class":104},[87,109507,165],{"class":97},[87,109509,109510],{"class":949},"\"image shape:\"",[87,109512,109513],{"class":97},", image.shape)\n",[87,109515,109516],{"class":89,"line":8965},[87,109517,3355],{"emptyLinePlaceholder":1029},[87,109519,109520],{"class":89,"line":8971},[87,109521,3355],{"emptyLinePlaceholder":1029},[87,109523,109524,109526,109528,109530,109532],{"class":89,"line":8983},[87,109525,2488],{"class":171},[87,109527,32167],{"class":104},[87,109529,102485],{"class":171},[87,109531,102488],{"class":949},[87,109533,4693],{"class":97},[87,109535,109536],{"class":89,"line":8995},[87,109537,102495],{"class":97},[19,109539,104496],{},[77,109541,109543],{"className":24769,"code":109542,"language":24771,"meta":82,"style":82},"touch ch5_renderer.py\n",[84,109544,109545],{"__ignoreMap":82},[87,109546,109547,109549],{"class":89,"line":90},[87,109548,102209],{"class":205},[87,109550,109551],{"class":949}," ch5_renderer.py\n",[44,109553,102498],{"id":102498},[19,109555,109556],{},"viewer 上下文：",[77,109558,109560],{"className":31325,"code":109559,"language":31327,"meta":82,"style":82},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[84,109561,109562],{"__ignoreMap":82},[87,109563,109564,109566,109568,109570],{"class":89,"line":90},[87,109565,108759],{"class":171},[87,109567,108762],{"class":97},[87,109569,32330],{"class":171},[87,109571,108767],{"class":97},[19,109573,109574,109576],{},[84,109575,108759],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,109578,109579],{},"窗口循环：",[77,109581,109583],{"className":31325,"code":109582,"language":31327,"meta":82,"style":82},"while viewer.is_running() and data.time \u003C 5.0:\n",[84,109584,109585],{"__ignoreMap":82},[87,109586,109587,109590,109592,109594,109596,109598,109600],{"class":89,"line":90},[87,109588,109589],{"class":171},"while",[87,109591,109113],{"class":97},[87,109593,31409],{"class":171},[87,109595,109118],{"class":97},[87,109597,938],{"class":171},[87,109599,109123],{"class":104},[87,109601,4693],{"class":97},[19,109603,109604],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,109606,109607],{},"固定相机：",[77,109609,109611],{"className":54004,"code":109610,"language":54006,"meta":82,"style":82},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[84,109612,109613],{"__ignoreMap":82},[87,109614,109615,109617,109619,109621,109623,109625,109627,109629,109632,109635,109637,109640],{"class":89,"line":90},[87,109616,938],{"class":97},[87,109618,109441],{"class":93},[87,109620,15870],{"class":205},[87,109622,946],{"class":97},[87,109624,109446],{"class":949},[87,109626,102032],{"class":205},[87,109628,946],{"class":97},[87,109630,109631],{"class":949},"\"1.5 -2.0 1.2\"",[87,109633,109634],{"class":205}," xyaxes",[87,109636,946],{"class":97},[87,109638,109639],{"class":949},"\"1 0.75 0 0 0 1\"",[87,109641,102070],{"class":97},[19,109643,109644],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[44,109646,109648],{"id":109647},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[77,109650,109652],{"className":31325,"code":109651,"language":31327,"meta":82,"style":82},"import time\n",[84,109653,109654],{"__ignoreMap":82},[87,109655,109656,109658],{"class":89,"line":90},[87,109657,31339],{"class":171},[87,109659,32776],{"class":97},[19,109661,109662],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[77,109664,109666],{"className":31325,"code":109665,"language":31327,"meta":82,"style":82},"import mujoco\nimport mujoco.viewer\n",[84,109667,109668,109674],{"__ignoreMap":82},[87,109669,109670,109672],{"class":89,"line":90},[87,109671,31339],{"class":171},[87,109673,102227],{"class":97},[87,109675,109676,109678],{"class":89,"line":101},[87,109677,31339],{"class":171},[87,109679,108478],{"class":97},[19,109681,109682],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[77,109684,109685],{"className":31325,"code":109559,"language":31327,"meta":82,"style":82},[84,109686,109687],{"__ignoreMap":82},[87,109688,109689,109691,109693,109695],{"class":89,"line":90},[87,109690,108759],{"class":171},[87,109692,108762],{"class":97},[87,109694,32330],{"class":171},[87,109696,108767],{"class":97},[19,109698,109699,109700,109703],{},"打开一个 viewer 窗口。",[84,109701,109702],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[77,109705,109706],{"className":31325,"code":109582,"language":31327,"meta":82,"style":82},[84,109707,109708],{"__ignoreMap":82},[87,109709,109710,109712,109714,109716,109718,109720,109722],{"class":89,"line":90},[87,109711,109589],{"class":171},[87,109713,109113],{"class":97},[87,109715,31409],{"class":171},[87,109717,109118],{"class":97},[87,109719,938],{"class":171},[87,109721,109123],{"class":104},[87,109723,4693],{"class":97},[19,109725,109726,109727,109730],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[84,109728,109729],{},"viewer.is_running()"," 会变成 false，循环结束。",[77,109732,109734],{"className":31325,"code":109733,"language":31327,"meta":82,"style":82},"step_start = time.time()\n",[84,109735,109736],{"__ignoreMap":82},[87,109737,109738,109741,109743],{"class":89,"line":90},[87,109739,109740],{"class":97},"step_start ",[87,109742,946],{"class":171},[87,109744,109135],{"class":97},[19,109746,109747],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[77,109749,109750],{"className":31325,"code":108844,"language":31327,"meta":82,"style":82},[84,109751,109752,109756],{"__ignoreMap":82},[87,109753,109754],{"class":89,"line":90},[87,109755,105431],{"class":97},[87,109757,109758],{"class":89,"line":101},[87,109759,108855],{"class":97},[19,109761,109762,109764,109765,109767,109768,109770,109771,109774],{},[84,109763,102141],{}," 推进物理仿真。",[84,109766,108863],{}," 把最新的 ",[84,109769,34348],{}," 同步到窗口里显示。没有 ",[84,109772,109773],{},"sync()","，窗口可能看不到最新状态。",[77,109776,109777],{"className":31325,"code":108874,"language":31327,"meta":82,"style":82},[84,109778,109779],{"__ignoreMap":82},[87,109780,109781,109783,109785,109787,109789,109791,109793],{"class":89,"line":90},[87,109782,108881],{"class":97},[87,109784,946],{"class":171},[87,109786,108886],{"class":97},[87,109788,1625],{"class":171},[87,109790,108891],{"class":97},[87,109792,1625],{"class":171},[87,109794,108896],{"class":97},[19,109796,109797],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[77,109799,109801],{"className":31325,"code":109800,"language":31327,"meta":82,"style":82},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[84,109802,109803,109815],{"__ignoreMap":82},[87,109804,109805,109807,109809,109811,109813],{"class":89,"line":90},[87,109806,2488],{"class":171},[87,109808,109173],{"class":97},[87,109810,2051],{"class":171},[87,109812,577],{"class":104},[87,109814,4693],{"class":97},[87,109816,109817],{"class":89,"line":101},[87,109818,109819],{"class":97},"    time.sleep(sleep_time)\n",[19,109821,109822],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[44,109824,109826],{"id":109825},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[77,109828,109830],{"className":31325,"code":109829,"language":31327,"meta":82,"style":82},"from pathlib import Path\n",[84,109831,109832],{"__ignoreMap":82},[87,109833,109834,109836,109838,109840],{"class":89,"line":90},[87,109835,31684],{"class":171},[87,109837,109237],{"class":97},[87,109839,31339],{"class":171},[87,109841,109242],{"class":97},[19,109843,109844,109845,109848,109849,109852],{},"导入 ",[84,109846,109847],{},"Path","，用来处理文件路径。相比直接写字符串，",[84,109850,109851],{},"Path(\"render_output.png\")"," 更清晰。",[77,109854,109856],{"className":31325,"code":109855,"language":31327,"meta":82,"style":82},"from PIL import Image\n",[84,109857,109858],{"__ignoreMap":82},[87,109859,109860,109862,109864,109866],{"class":89,"line":90},[87,109861,31684],{"class":171},[87,109863,48210],{"class":104},[87,109865,48213],{"class":171},[87,109867,48216],{"class":97},[19,109869,109870],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[77,109872,109873],{"className":54004,"code":109610,"language":54006,"meta":82,"style":82},[84,109874,109875],{"__ignoreMap":82},[87,109876,109877,109879,109881,109883,109885,109887,109889,109891,109893,109895,109897,109899],{"class":89,"line":90},[87,109878,938],{"class":97},[87,109880,109441],{"class":93},[87,109882,15870],{"class":205},[87,109884,946],{"class":97},[87,109886,109446],{"class":949},[87,109888,102032],{"class":205},[87,109890,946],{"class":97},[87,109892,109631],{"class":949},[87,109894,109634],{"class":205},[87,109896,946],{"class":97},[87,109898,109639],{"class":949},[87,109900,102070],{"class":97},[19,109902,109903,109904,109906,109907,109909,109910,109913,109914,109916],{},"定义一个相机。",[84,109905,80736],{}," 是相机名字。",[84,109908,105072],{}," 是相机在世界里的位置。",[84,109911,109912],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[84,109915,105072],{}," 来调视角。",[77,109918,109920],{"className":31325,"code":109919,"language":31327,"meta":82,"style":82},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[84,109921,109922],{"__ignoreMap":82},[87,109923,109924,109926,109928,109930,109932,109934,109936,109938,109940,109942,109944],{"class":89,"line":90},[87,109925,108496],{"class":97},[87,109927,946],{"class":171},[87,109929,108800],{"class":97},[87,109931,25929],{"class":492},[87,109933,946],{"class":171},[87,109935,43289],{"class":104},[87,109937,13385],{"class":97},[87,109939,25925],{"class":492},[87,109941,946],{"class":171},[87,109943,108815],{"class":104},[87,109945,1108],{"class":97},[19,109947,109948,109949,101944,109951,109953],{},"创建离屏渲染器。",[84,109950,25929],{},[84,109952,25925],{}," 决定输出图片大小。",[77,109955,109956],{"className":31325,"code":102602,"language":31327,"meta":82,"style":82},[84,109957,109958,109974],{"__ignoreMap":82},[87,109959,109960,109962,109964,109966,109968,109970,109972],{"class":89,"line":90},[87,109961,3979],{"class":171},[87,109963,102427],{"class":97},[87,109965,26990],{"class":171},[87,109967,33390],{"class":104},[87,109969,165],{"class":97},[87,109971,536],{"class":104},[87,109973,31733],{"class":97},[87,109975,109976],{"class":89,"line":101},[87,109977,102625],{"class":97},[19,109979,109980],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[77,109982,109984],{"className":31325,"code":109983,"language":31327,"meta":82,"style":82},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[84,109985,109986],{"__ignoreMap":82},[87,109987,109988,109991,109993,109995,109997],{"class":89,"line":90},[87,109989,109990],{"class":97},"renderer.update_scene(data, ",[87,109992,109441],{"class":492},[87,109994,946],{"class":171},[87,109996,109446],{"class":949},[87,109998,1108],{"class":97},[19,110000,110001,110002,110004,110005,110008],{},"告诉 renderer：用当前 ",[84,110003,34348],{}," 的状态更新画面，并使用名为 ",[84,110006,110007],{},"fixed_camera"," 的相机视角。",[77,110010,110011],{"className":31325,"code":108906,"language":31327,"meta":82,"style":82},[84,110012,110013],{"__ignoreMap":82},[87,110014,110015,110017,110019],{"class":89,"line":90},[87,110016,108506],{"class":97},[87,110018,946],{"class":171},[87,110020,108511],{"class":97},[19,110022,110023,110024,110027],{},"真正渲染出图像。",[84,110025,110026],{},"image"," 是一个 NumPy 数组，不是文件。",[77,110029,110031],{"className":31325,"code":110030,"language":31327,"meta":82,"style":82},"Image.fromarray(image).save(output_path)\n",[84,110032,110033],{"__ignoreMap":82},[87,110034,110035],{"class":89,"line":90},[87,110036,110030],{"class":97},[19,110038,110039,110040,29332],{},"把数组转换成图片，并保存到 ",[84,110041,110042],{},"render_output.png",[77,110044,110046],{"className":31325,"code":110045,"language":31327,"meta":82,"style":82},"renderer.close()\n",[84,110047,110048],{"__ignoreMap":82},[87,110049,110050],{"class":89,"line":90},[87,110051,110045],{"class":97},[19,110053,110054],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110056,103242],{"id":103241},[19,110058,110059,110060,110062,110063,29332],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[84,110061,110042],{},"，并输出图像数组形状，例如 ",[84,110064,110065],{},"(480, 640, 3)",[19,110067,110068],{},"如果图片里看不到方块，先检查：",[1055,110070,110071,110074,110077],{},[29,110072,110073],{},"方块是否掉到相机视野外。",[29,110075,110076],{},"camera 位置是否合理。",[29,110078,110079,110080,110083],{},"是否在 ",[84,110081,110082],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110085,103274],{"id":103273},[19,110087,110088],{},"运行 viewer:",[77,110090,110092],{"className":24769,"code":110091,"language":24771,"meta":82,"style":82},"python ch5_viewer.py\n",[84,110093,110094],{"__ignoreMap":82},[87,110095,110096,110098],{"class":89,"line":90},[87,110097,31327],{"class":205},[87,110099,109222],{"class":949},[19,110101,110102],{},"运行 renderer:",[77,110104,110106],{"className":24769,"code":110105,"language":24771,"meta":82,"style":82},"python ch5_renderer.py\n",[84,110107,110108],{"__ignoreMap":82},[87,110109,110110,110112],{"class":89,"line":90},[87,110111,31327],{"class":205},[87,110113,109551],{"class":949},[19,110115,110116],{},"如果在服务器上运行:",[77,110118,110120],{"className":24769,"code":110119,"language":24771,"meta":82,"style":82},"MUJOCO_GL=egl python ch5_renderer.py\n",[84,110121,110122],{"__ignoreMap":82},[87,110123,110124,110126,110128,110130,110133],{"class":89,"line":90},[87,110125,108740],{"class":97},[87,110127,946],{"class":171},[87,110129,108730],{"class":949},[87,110131,110132],{"class":205}," python",[87,110134,109551],{"class":949},[19,110136,108708],{},[77,110138,110140],{"className":24769,"code":110139,"language":24771,"meta":82,"style":82},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[84,110141,110142],{"__ignoreMap":82},[87,110143,110144,110146,110148,110150,110152],{"class":89,"line":90},[87,110145,108740],{"class":97},[87,110147,946],{"class":171},[87,110149,108734],{"class":949},[87,110151,110132],{"class":205},[87,110153,109551],{"class":949},[19,110155,110156],{},"再做几个练习：",[1055,110158,110159,110166,110169,110175],{},[29,110160,110161,110162,110165],{},"把 renderer 分辨率改成 ",[84,110163,110164],{},"height=240, width=320","，观察输出 shape。",[29,110167,110168],{},"把方块颜色改成蓝色，重新保存图片。",[29,110170,110171,110172,110174],{},"把相机 ",[84,110173,105072],{}," 改远一点，观察画面中物体是否变小。",[29,110176,110177,110178,103340,110181,110184],{},"把 viewer 示例中的 ",[84,110179,110180],{},"data.time \u003C 5.0",[84,110182,110183],{},"data.time \u003C 20.0","，观察更长时间。",[14,110186,103379],{"id":103378},[44,110188,110190],{"id":110189},"viewer-窗口打不开","viewer 窗口打不开",[19,110192,110193],{},"安装:",[77,110195,110197],{"className":24769,"code":110196,"language":24771,"meta":82,"style":82},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[84,110198,110199],{"__ignoreMap":82},[87,110200,110201,110203,110205,110207,110209,110211,110213,110215,110217,110219,110221],{"class":89,"line":90},[87,110202,25524],{"class":205},[87,110204,27262],{"class":949},[87,110206,24781],{"class":949},[87,110208,27347],{"class":104},[87,110210,103432],{"class":949},[87,110212,101760],{"class":949},[87,110214,103437],{"class":949},[87,110216,101773],{"class":949},[87,110218,101779],{"class":949},[87,110220,101770],{"class":949},[87,110222,110223],{"class":949}," libXinerama\n",[44,110225,110227],{"id":110226},"glfwerror",[84,110228,110229],{},"GLFWError",[19,110231,110232],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[44,110234,110236],{"id":110235},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,110238,110239,110240,83465,110242,110244],{},"尝试 ",[84,110241,101963],{},[84,110243,101966],{},"。可能存在版本差异。",[44,110246,110247],{"id":110247},"保存图片是黑的",[19,110249,103501],{},[1055,110251,110252,110255,110258,110268],{},[29,110253,110254],{},"XML 里是否有 light。",[29,110256,110257],{},"相机是否对着模型。",[29,110259,110260,110261,110264,110265,29332],{},"是否先 ",[84,110262,110263],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[84,110266,110267],{},"renderer.render()",[29,110269,110270],{},"物体是否已经掉出视野。",[44,110272,110273],{"id":110273},"远程服务器没有显示器",[19,110275,110276],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[77,110278,110279],{"className":24769,"code":110119,"language":24771,"meta":82,"style":82},[84,110280,110281],{"__ignoreMap":82},[87,110282,110283,110285,110287,110289,110291],{"class":89,"line":90},[87,110284,108740],{"class":97},[87,110286,946],{"class":171},[87,110288,108730],{"class":949},[87,110290,110132],{"class":205},[87,110292,109551],{"class":949},[19,110294,110295],{},"如果 EGL 不可用，再尝试：",[77,110297,110298],{"className":24769,"code":110139,"language":24771,"meta":82,"style":82},[84,110299,110300],{"__ignoreMap":82},[87,110301,110302,110304,110306,110308,110310],{"class":89,"line":90},[87,110303,108740],{"class":97},[87,110305,946],{"class":171},[87,110307,108734],{"class":949},[87,110309,110132],{"class":205},[87,110311,109551],{"class":949},[14,110313,103533],{"id":103532},[19,110315,110316],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[1055,110318,110319,110322,110325],{},[29,110320,110321],{},"先用 viewer 看模型和控制是否正常。",[29,110323,110324],{},"再用 renderer 保存图片或构造视觉观测。",[29,110326,110327],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1006,110329,110330],{},"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":82,"searchDepth":101,"depth":101,"links":110332},[110333,110334,110335,110340,110345,110346,110347,110354],{"id":101572,"depth":101,"text":101573},{"id":101695,"depth":101,"text":101696},{"id":101970,"depth":101,"text":101971,"children":110336},[110337,110338,110339],{"id":108837,"depth":120,"text":108838},{"id":108867,"depth":120,"text":108868},{"id":108902,"depth":120,"text":108903},{"id":102178,"depth":101,"text":102179,"children":110341},[110342,110343,110344],{"id":102498,"depth":120,"text":102498},{"id":109647,"depth":120,"text":109648},{"id":109825,"depth":120,"text":109826},{"id":103241,"depth":101,"text":103242},{"id":103273,"depth":101,"text":103274},{"id":103378,"depth":101,"text":103379,"children":110348},[110349,110350,110351,110352,110353],{"id":110189,"depth":120,"text":110190},{"id":110226,"depth":120,"text":110229},{"id":110235,"depth":120,"text":110236},{"id":110247,"depth":120,"text":110247},{"id":110273,"depth":120,"text":110273},{"id":103532,"depth":101,"text":103533},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108445,"description":82},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110361,"title":110362,"body":110363,"description":82,"extension":1027,"meta":112274,"navigation":1029,"path":112275,"seo":112276,"stem":112277,"__hash__":112278},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110364,"toc":112250},[110365,110368,110370,110373,110375,110394,110397,110403,110406,110408,110410,110434,110436,110450,110452,110493,110495,110506,110508,110511,110517,110520,110554,110557,110589,110592,110624,110628,110631,110671,110674,110680,110683,110689,110693,110696,110702,110705,110709,110712,110752,110754,110767,110770,110772,111354,111356,111368,111371,111382,111384,111387,111406,111418,111421,111442,111445,111448,111491,111494,111497,111517,111524,111526,111544,111559,111562,111568,111571,111577,111594,111601,111632,111643,111677,111688,111705,111714,111722,111727,111741,111744,111765,111771,111785,111790,111820,111830,111855,111863,111886,111889,111905,111908,111916,111922,111944,111957,111978,111987,112026,112037,112039,112042,112048,112051,112054,112060,112063,112083,112086,112088,112127,112129,112132,112140,112143,112146,112173,112176,112186,112192,112195,112201,112203,112209,112213,112216,112218,112221,112245,112248],[10,110366,110362],{"id":110367},"_6控制任务cartpole",[14,110369,101573],{"id":101572},[19,110371,110372],{},"本章搭建一个最小 Cartpole 控制任务。",[19,110374,105257],{},[1055,110376,110377,110380,110382,110385,110388,110391],{},[29,110378,110379],{},"slide joint",[29,110381,107110],{},[29,110383,110384],{},"cart force actuator",[29,110386,110387],{},"状态观测",[29,110389,110390],{},"简单控制循环",[29,110392,110393],{},"reward 设计雏形",[19,110395,110396],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[77,110398,110401],{"className":110399,"code":110400,"language":599,"meta":82},[597],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[84,110402,110400],{"__ignoreMap":82},[19,110404,110405],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110407,101696],{"id":101695},[19,110409,101699],{},[77,110411,110412],{"className":24769,"code":105314,"language":24771,"meta":82,"style":82},[84,110413,110414],{"__ignoreMap":82},[87,110415,110416,110418,110420,110422,110424,110426,110428,110430,110432],{"class":89,"line":90},[87,110417,25524],{"class":205},[87,110419,27262],{"class":949},[87,110421,24781],{"class":949},[87,110423,27347],{"class":104},[87,110425,105329],{"class":949},[87,110427,101724],{"class":949},[87,110429,103427],{"class":949},[87,110431,101740],{"class":949},[87,110433,105338],{"class":949},[19,110435,103745],{},[77,110437,110438],{"className":24769,"code":101845,"language":24771,"meta":82,"style":82},[84,110439,110440],{"__ignoreMap":82},[87,110441,110442,110444,110446,110448],{"class":89,"line":90},[87,110443,24778],{"class":205},[87,110445,24781],{"class":949},[87,110447,101856],{"class":949},[87,110449,101859],{"class":949},[19,110451,103762],{},[77,110453,110455],{"className":24769,"code":110454,"language":24771,"meta":82,"style":82},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[84,110456,110457,110474,110483],{"__ignoreMap":82},[87,110458,110459,110461,110463,110465,110468,110470,110472],{"class":89,"line":90},[87,110460,31277],{"class":205},[87,110462,30123],{"class":949},[87,110464,26063],{"class":104},[87,110466,110467],{"class":949}," mujoco-cartpole",[87,110469,101901],{"class":949},[87,110471,101904],{"class":104},[87,110473,101907],{"class":104},[87,110475,110476,110478,110480],{"class":89,"line":101},[87,110477,31277],{"class":205},[87,110479,101914],{"class":949},[87,110481,110482],{"class":949}," mujoco-cartpole\n",[87,110484,110485,110487,110489,110491],{"class":89,"line":120},[87,110486,24778],{"class":205},[87,110488,24781],{"class":949},[87,110490,101856],{"class":949},[87,110492,101859],{"class":949},[19,110494,101930],{},[1055,110496,110497,110500,110503],{},[29,110498,110499],{},"本章不依赖 Gymnasium。",[29,110501,110502],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[29,110504,110505],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110507,101971],{"id":101970},[19,110509,110510],{},"Cartpole 的模型结构:",[77,110512,110515],{"className":110513,"code":110514,"language":599,"meta":82},[597],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[84,110516,110514],{"__ignoreMap":82},[19,110518,110519],{},"小车通过 slide joint 左右移动:",[77,110521,110523],{"className":54004,"code":110522,"language":54006,"meta":82,"style":82},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[84,110524,110525],{"__ignoreMap":82},[87,110526,110527,110529,110531,110533,110535,110538,110540,110542,110545,110547,110549,110552],{"class":89,"line":90},[87,110528,938],{"class":97},[87,110530,103882],{"class":93},[87,110532,15870],{"class":205},[87,110534,946],{"class":97},[87,110536,110537],{"class":949},"\"cart_x\"",[87,110539,54760],{"class":205},[87,110541,946],{"class":97},[87,110543,110544],{"class":949},"\"slide\"",[87,110546,106954],{"class":205},[87,110548,946],{"class":97},[87,110550,110551],{"class":949},"\"1 0 0\"",[87,110553,102070],{"class":97},[19,110555,110556],{},"杆子通过 hinge joint 旋转:",[77,110558,110560],{"className":54004,"code":110559,"language":54006,"meta":82,"style":82},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[84,110561,110562],{"__ignoreMap":82},[87,110563,110564,110566,110568,110570,110572,110575,110577,110579,110581,110583,110585,110587],{"class":89,"line":90},[87,110565,938],{"class":97},[87,110567,103882],{"class":93},[87,110569,15870],{"class":205},[87,110571,946],{"class":97},[87,110573,110574],{"class":949},"\"pole_hinge\"",[87,110576,54760],{"class":205},[87,110578,946],{"class":97},[87,110580,106945],{"class":949},[87,110582,106954],{"class":205},[87,110584,946],{"class":97},[87,110586,106959],{"class":949},[87,110588,102070],{"class":97},[19,110590,110591],{},"控制力作用在小车 slide joint 上:",[77,110593,110595],{"className":54004,"code":110594,"language":54006,"meta":82,"style":82},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[84,110596,110597],{"__ignoreMap":82},[87,110598,110599,110601,110603,110605,110607,110610,110612,110614,110616,110618,110620,110622],{"class":89,"line":90},[87,110600,938],{"class":97},[87,110602,107000],{"class":93},[87,110604,15870],{"class":205},[87,110606,946],{"class":97},[87,110608,110609],{"class":949},"\"cart_motor\"",[87,110611,107010],{"class":205},[87,110613,946],{"class":97},[87,110615,110537],{"class":949},[87,110617,107017],{"class":205},[87,110619,946],{"class":97},[87,110621,55252],{"class":949},[87,110623,102070],{"class":97},[44,110625,110627],{"id":110626},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,110629,110630],{},"这个简化模型有两个关节：",[1235,110632,110633,110644],{},[1238,110634,110635],{},[1241,110636,110637,110639,110641],{},[1244,110638,103685],{"align":24683},[1244,110640,24684],{"align":24683},[1244,110642,110643],{"align":24683},"对应状态",[1281,110645,110646,110659],{},[1241,110647,110648,110653,110656],{},[1286,110649,110650],{"align":24683},[84,110651,110652],{},"cart_x",[1286,110654,110655],{"align":24683},"slide",[1286,110657,110658],{"align":24683},"小车 x 位置",[1241,110660,110661,110666,110668],{},[1286,110662,110663],{"align":24683},[84,110664,110665],{},"pole_hinge",[1286,110667,106766],{"align":24683},[1286,110669,110670],{"align":24683},"杆子角度",[19,110672,110673],{},"所以：",[77,110675,110678],{"className":110676,"code":110677,"language":599,"meta":82},[597],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[84,110679,110677],{"__ignoreMap":82},[19,110681,110682],{},"把它们拼起来就是观测：",[77,110684,110687],{"className":110685,"code":110686,"language":599,"meta":82},[597],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[84,110688,110686],{"__ignoreMap":82},[44,110690,110692],{"id":110691},"action-是什么","action 是什么",[19,110694,110695],{},"本章只有一个 actuator：",[77,110697,110700],{"className":110698,"code":110699,"language":599,"meta":82},[597],"data.ctrl[0] = action\n",[84,110701,110699],{"__ignoreMap":82},[19,110703,110704],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[44,110706,110708],{"id":110707},"reward-是什么","reward 是什么",[19,110710,110711],{},"奖励函数：",[77,110713,110715],{"className":31325,"code":110714,"language":31327,"meta":82,"style":82},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[84,110716,110717],{"__ignoreMap":82},[87,110718,110719,110721,110724,110726,110728,110730,110733,110735,110738,110740,110742,110744,110747,110749],{"class":89,"line":90},[87,110720,17995],{"class":171},[87,110722,110723],{"class":104}," float",[87,110725,165],{"class":97},[87,110727,103329],{"class":104},[87,110729,53208],{"class":171},[87,110731,110732],{"class":104}," 0.1",[87,110734,7468],{"class":171},[87,110736,110737],{"class":97}," cart_x ",[87,110739,1549],{"class":171},[87,110741,110737],{"class":97},[87,110743,1625],{"class":171},[87,110745,110746],{"class":97}," pole_angle ",[87,110748,1549],{"class":171},[87,110750,110751],{"class":97}," pole_angle)\n",[19,110753,107152],{},[1055,110755,110756,110761,110764],{},[29,110757,110758,110759,29332],{},"基础奖励是 ",[84,110760,103329],{},[29,110762,110763],{},"小车离中心越远，扣分越多。",[29,110765,110766],{},"杆子角度越大，扣分越多。",[19,110768,110769],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110771,102179],{"id":102178},[77,110773,110775],{"className":31325,"code":110774,"language":31327,"meta":82,"style":82},"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",[84,110776,110777,110783,110793,110797,110801,110809,110814,110818,110822,110826,110831,110835,110840,110845,110850,110854,110859,110864,110869,110873,110877,110881,110885,110889,110894,110898,110902,110906,110910,110914,110924,110931,110935,110939,110953,110967,110980,111010,111014,111018,111030,111042,111050,111054,111067,111071,111075,111084,111088,111104,111114,111127,111140,111144,111167,111185,111189,111201,111205,111209,111219,111229,111233,111249,111290,111294,111314,111330,111334,111338,111350],{"__ignoreMap":82},[87,110778,110779,110781],{"class":89,"line":90},[87,110780,31339],{"class":171},[87,110782,102227],{"class":97},[87,110784,110785,110787,110789,110791],{"class":89,"line":101},[87,110786,31339],{"class":171},[87,110788,32327],{"class":97},[87,110790,32330],{"class":171},[87,110792,32333],{"class":97},[87,110794,110795],{"class":89,"line":120},[87,110796,3355],{"emptyLinePlaceholder":1029},[87,110798,110799],{"class":89,"line":222},[87,110800,3355],{"emptyLinePlaceholder":1029},[87,110802,110803,110805,110807],{"class":89,"line":234},[87,110804,102240],{"class":104},[87,110806,14514],{"class":171},[87,110808,102245],{"class":949},[87,110810,110811],{"class":89,"line":256},[87,110812,110813],{"class":949},"\u003Cmujoco model=\"cartpole\">\n",[87,110815,110816],{"class":89,"line":269},[87,110817,102255],{"class":949},[87,110819,110820],{"class":89,"line":463},[87,110821,3355],{"emptyLinePlaceholder":1029},[87,110823,110824],{"class":89,"line":469},[87,110825,102264],{"class":949},[87,110827,110828],{"class":89,"line":2287},[87,110829,110830],{"class":949},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[87,110832,110833],{"class":89,"line":2568},[87,110834,3355],{"emptyLinePlaceholder":1029},[87,110836,110837],{"class":89,"line":2573},[87,110838,110839],{"class":949},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[87,110841,110842],{"class":89,"line":2579},[87,110843,110844],{"class":949},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[87,110846,110847],{"class":89,"line":2584},[87,110848,110849],{"class":949},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[87,110851,110852],{"class":89,"line":2598},[87,110853,3355],{"emptyLinePlaceholder":1029},[87,110855,110856],{"class":89,"line":2603},[87,110857,110858],{"class":949},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[87,110860,110861],{"class":89,"line":2609},[87,110862,110863],{"class":949},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[87,110865,110866],{"class":89,"line":2630},[87,110867,110868],{"class":949},"        \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",[87,110870,110871],{"class":89,"line":2635},[87,110872,107364],{"class":949},[87,110874,110875],{"class":89,"line":2649},[87,110876,102293],{"class":949},[87,110878,110879],{"class":89,"line":2654},[87,110880,102298],{"class":949},[87,110882,110883],{"class":89,"line":2683},[87,110884,3355],{"emptyLinePlaceholder":1029},[87,110886,110887],{"class":89,"line":2688},[87,110888,107381],{"class":949},[87,110890,110891],{"class":89,"line":2705},[87,110892,110893],{"class":949},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[87,110895,110896],{"class":89,"line":2710},[87,110897,107391],{"class":949},[87,110899,110900],{"class":89,"line":2715},[87,110901,102303],{"class":949},[87,110903,110904],{"class":89,"line":2720},[87,110905,96624],{"class":949},[87,110907,110908],{"class":89,"line":2734},[87,110909,3355],{"emptyLinePlaceholder":1029},[87,110911,110912],{"class":89,"line":2739},[87,110913,3355],{"emptyLinePlaceholder":1029},[87,110915,110916,110918,110921],{"class":89,"line":3532},[87,110917,32894],{"class":171},[87,110919,110920],{"class":205}," get_observation",[87,110922,110923],{"class":97},"(data: mujoco.MjData) -> np.ndarray:\n",[87,110925,110926,110928],{"class":89,"line":3546},[87,110927,5044],{"class":171},[87,110929,110930],{"class":97}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[87,110932,110933],{"class":89,"line":3554},[87,110934,3355],{"emptyLinePlaceholder":1029},[87,110936,110937],{"class":89,"line":3559},[87,110938,3355],{"emptyLinePlaceholder":1029},[87,110940,110941,110943,110946,110949,110951],{"class":89,"line":3565},[87,110942,32894],{"class":171},[87,110944,110945],{"class":205}," compute_reward",[87,110947,110948],{"class":97},"(obs: np.ndarray) -> ",[87,110950,1141],{"class":104},[87,110952,4693],{"class":97},[87,110954,110955,110958,110960,110963,110965],{"class":89,"line":3571},[87,110956,110957],{"class":97},"    cart_x ",[87,110959,946],{"class":171},[87,110961,110962],{"class":97}," obs[",[87,110964,111],{"class":104},[87,110966,34193],{"class":97},[87,110968,110969,110972,110974,110976,110978],{"class":89,"line":3576},[87,110970,110971],{"class":97},"    pole_angle ",[87,110973,946],{"class":171},[87,110975,110962],{"class":97},[87,110977,1313],{"class":104},[87,110979,34193],{"class":97},[87,110981,110982,110984,110986,110988,110990,110992,110994,110996,110998,111000,111002,111004,111006,111008],{"class":89,"line":8898},[87,110983,5044],{"class":171},[87,110985,110723],{"class":104},[87,110987,165],{"class":97},[87,110989,103329],{"class":104},[87,110991,53208],{"class":171},[87,110993,110732],{"class":104},[87,110995,7468],{"class":171},[87,110997,110737],{"class":97},[87,110999,1549],{"class":171},[87,111001,110737],{"class":97},[87,111003,1625],{"class":171},[87,111005,110746],{"class":97},[87,111007,1549],{"class":171},[87,111009,110751],{"class":97},[87,111011,111012],{"class":89,"line":8922},[87,111013,3355],{"emptyLinePlaceholder":1029},[87,111015,111016],{"class":89,"line":8927},[87,111017,3355],{"emptyLinePlaceholder":1029},[87,111019,111020,111022,111024,111026,111028],{"class":89,"line":8933},[87,111021,32894],{"class":171},[87,111023,2928],{"class":205},[87,111025,102324],{"class":97},[87,111027,96612],{"class":104},[87,111029,4693],{"class":97},[87,111031,111032,111034,111036,111038,111040],{"class":89,"line":8960},[87,111033,102333],{"class":97},[87,111035,946],{"class":171},[87,111037,102338],{"class":97},[87,111039,102240],{"class":104},[87,111041,1108],{"class":97},[87,111043,111044,111046,111048],{"class":89,"line":8965},[87,111045,102347],{"class":97},[87,111047,946],{"class":171},[87,111049,102352],{"class":97},[87,111051,111052],{"class":89,"line":8971},[87,111053,3355],{"emptyLinePlaceholder":1029},[87,111055,111056,111058,111060,111062,111064],{"class":89,"line":8983},[87,111057,105995],{"class":97},[87,111059,1313],{"class":104},[87,111061,5396],{"class":97},[87,111063,946],{"class":171},[87,111065,111066],{"class":104}," 0.1\n",[87,111068,111069],{"class":89,"line":8995},[87,111070,106008],{"class":97},[87,111072,111073],{"class":89,"line":9007},[87,111074,3355],{"emptyLinePlaceholder":1029},[87,111076,111077,111080,111082],{"class":89,"line":10666},[87,111078,111079],{"class":97},"    total_reward ",[87,111081,946],{"class":171},[87,111083,105687],{"class":104},[87,111085,111086],{"class":89,"line":10691},[87,111087,3355],{"emptyLinePlaceholder":1029},[87,111089,111090,111092,111094,111096,111098,111100,111102],{"class":89,"line":10714},[87,111091,4155],{"class":171},[87,111093,32563],{"class":97},[87,111095,26990],{"class":171},[87,111097,33390],{"class":104},[87,111099,165],{"class":97},[87,111101,7360],{"class":104},[87,111103,31733],{"class":97},[87,111105,111106,111109,111111],{"class":89,"line":10738},[87,111107,111108],{"class":97},"        obs ",[87,111110,946],{"class":171},[87,111112,111113],{"class":97}," get_observation(data)\n",[87,111115,111116,111119,111121,111123,111125],{"class":89,"line":10743},[87,111117,111118],{"class":97},"        pole_angle ",[87,111120,946],{"class":171},[87,111122,110962],{"class":97},[87,111124,1313],{"class":104},[87,111126,34193],{"class":97},[87,111128,111129,111132,111134,111136,111138],{"class":89,"line":10748},[87,111130,111131],{"class":97},"        pole_angular_velocity ",[87,111133,946],{"class":171},[87,111135,110962],{"class":97},[87,111137,1170],{"class":104},[87,111139,34193],{"class":97},[87,111141,111142],{"class":89,"line":10753},[87,111143,3355],{"emptyLinePlaceholder":1029},[87,111145,111146,111149,111151,111154,111156,111158,111160,111162,111164],{"class":89,"line":10762},[87,111147,111148],{"class":97},"        action ",[87,111150,946],{"class":171},[87,111152,111153],{"class":104}," 2.0",[87,111155,7468],{"class":171},[87,111157,110746],{"class":97},[87,111159,1575],{"class":171},[87,111161,62802],{"class":104},[87,111163,7468],{"class":171},[87,111165,111166],{"class":97}," pole_angular_velocity\n",[87,111168,111169,111171,111173,111175,111177,111179,111181,111183],{"class":89,"line":10767},[87,111170,111148],{"class":97},[87,111172,946],{"class":171},[87,111174,108373],{"class":97},[87,111176,1625],{"class":171},[87,111178,103329],{"class":104},[87,111180,13385],{"class":97},[87,111182,103329],{"class":104},[87,111184,1108],{"class":97},[87,111186,111187],{"class":89,"line":10773},[87,111188,3355],{"emptyLinePlaceholder":1029},[87,111190,111191,111193,111195,111197,111199],{"class":89,"line":10794},[87,111192,107543],{"class":97},[87,111194,111],{"class":104},[87,111196,5396],{"class":97},[87,111198,946],{"class":171},[87,111200,108396],{"class":97},[87,111202,111203],{"class":89,"line":10800},[87,111204,102442],{"class":97},[87,111206,111207],{"class":89,"line":10814},[87,111208,3355],{"emptyLinePlaceholder":1029},[87,111210,111211,111214,111216],{"class":89,"line":10820},[87,111212,111213],{"class":97},"        reward ",[87,111215,946],{"class":171},[87,111217,111218],{"class":97}," compute_reward(get_observation(data))\n",[87,111220,111221,111224,111226],{"class":89,"line":10847},[87,111222,111223],{"class":97},"        total_reward ",[87,111225,10427],{"class":171},[87,111227,111228],{"class":97}," reward\n",[87,111230,111231],{"class":89,"line":10856},[87,111232,3355],{"emptyLinePlaceholder":1029},[87,111234,111235,111237,111239,111241,111243,111245,111247],{"class":89,"line":10862},[87,111236,3452],{"class":171},[87,111238,32563],{"class":97},[87,111240,1423],{"class":171},[87,111242,6704],{"class":104},[87,111244,102485],{"class":171},[87,111246,577],{"class":104},[87,111248,4693],{"class":97},[87,111250,111251,111253,111255,111258,111261,111264,111267,111269,111272,111275,111277,111279,111281,111283,111286,111288],{"class":89,"line":10870},[87,111252,35597],{"class":104},[87,111254,165],{"class":97},[87,111256,111257],{"class":949},"\"step:\"",[87,111259,111260],{"class":97},", step, ",[87,111262,111263],{"class":949},"\"obs:\"",[87,111265,111266],{"class":97},", np.round(obs, ",[87,111268,1170],{"class":104},[87,111270,111271],{"class":97},"), ",[87,111273,111274],{"class":949},"\"action:\"",[87,111276,13385],{"class":97},[87,111278,32965],{"class":104},[87,111280,165],{"class":97},[87,111282,1141],{"class":104},[87,111284,111285],{"class":97},"(action), ",[87,111287,1170],{"class":104},[87,111289,31444],{"class":97},[87,111291,111292],{"class":89,"line":10875},[87,111293,3355],{"emptyLinePlaceholder":1029},[87,111295,111296,111298,111300,111303,111305,111307,111310,111312],{"class":89,"line":17553},[87,111297,32246],{"class":104},[87,111299,165],{"class":97},[87,111301,111302],{"class":949},"\"total_reward:\"",[87,111304,13385],{"class":97},[87,111306,32965],{"class":104},[87,111308,111309],{"class":97},"(total_reward, ",[87,111311,1170],{"class":104},[87,111313,31444],{"class":97},[87,111315,111316,111318,111320,111323,111326,111328],{"class":89,"line":17559},[87,111317,32246],{"class":104},[87,111319,165],{"class":97},[87,111321,111322],{"class":949},"\"final obs:\"",[87,111324,111325],{"class":97},", np.round(get_observation(data), ",[87,111327,1170],{"class":104},[87,111329,31444],{"class":97},[87,111331,111332],{"class":89,"line":17582},[87,111333,3355],{"emptyLinePlaceholder":1029},[87,111335,111336],{"class":89,"line":17588},[87,111337,3355],{"emptyLinePlaceholder":1029},[87,111339,111340,111342,111344,111346,111348],{"class":89,"line":17611},[87,111341,2488],{"class":171},[87,111343,32167],{"class":104},[87,111345,102485],{"class":171},[87,111347,102488],{"class":949},[87,111349,4693],{"class":97},[87,111351,111352],{"class":89,"line":17625},[87,111353,102495],{"class":97},[19,111355,104496],{},[77,111357,111359],{"className":24769,"code":111358,"language":24771,"meta":82,"style":82},"touch ch6_cartpole.py\n",[84,111360,111361],{"__ignoreMap":82},[87,111362,111363,111365],{"class":89,"line":90},[87,111364,102209],{"class":205},[87,111366,111367],{"class":949}," ch6_cartpole.py\n",[19,111369,111370],{},"运行：",[77,111372,111374],{"className":24769,"code":111373,"language":24771,"meta":82,"style":82},"python ch6_cartpole.py\n",[84,111375,111376],{"__ignoreMap":82},[87,111377,111378,111380],{"class":89,"line":90},[87,111379,31327],{"class":205},[87,111381,111367],{"class":949},[44,111383,102498],{"id":102498},[19,111385,111386],{},"构造观测：",[77,111388,111390],{"className":31325,"code":111389,"language":31327,"meta":82,"style":82},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[84,111391,111392,111400],{"__ignoreMap":82},[87,111393,111394,111396,111398],{"class":89,"line":90},[87,111395,32894],{"class":171},[87,111397,110920],{"class":205},[87,111399,110923],{"class":97},[87,111401,111402,111404],{"class":89,"line":101},[87,111403,5044],{"class":171},[87,111405,110930],{"class":97},[19,111407,111408,111411,111412,111414,111415,111417],{},[84,111409,111410],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[84,111413,104956],{}," 2 维，",[84,111416,105286],{}," 2 维，所以 obs 是 4 维。",[19,111419,111420],{},"设置初始角度：",[77,111422,111424],{"className":31325,"code":111423,"language":31327,"meta":82,"style":82},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[84,111425,111426,111438],{"__ignoreMap":82},[87,111427,111428,111430,111432,111434,111436],{"class":89,"line":90},[87,111429,105625],{"class":97},[87,111431,1313],{"class":104},[87,111433,5396],{"class":97},[87,111435,946],{"class":171},[87,111437,111066],{"class":104},[87,111439,111440],{"class":89,"line":101},[87,111441,105469],{"class":97},[19,111443,111444],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,111446,111447],{},"简单反馈控制：",[77,111449,111451],{"className":31325,"code":111450,"language":31327,"meta":82,"style":82},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[84,111452,111453,111473],{"__ignoreMap":82},[87,111454,111455,111457,111459,111461,111463,111465,111467,111469,111471],{"class":89,"line":90},[87,111456,108368],{"class":97},[87,111458,946],{"class":171},[87,111460,111153],{"class":104},[87,111462,7468],{"class":171},[87,111464,110746],{"class":97},[87,111466,1575],{"class":171},[87,111468,62802],{"class":104},[87,111470,7468],{"class":171},[87,111472,111166],{"class":97},[87,111474,111475,111477,111479,111481,111483,111485,111487,111489],{"class":89,"line":101},[87,111476,108368],{"class":97},[87,111478,946],{"class":171},[87,111480,108373],{"class":97},[87,111482,1625],{"class":171},[87,111484,103329],{"class":104},[87,111486,13385],{"class":97},[87,111488,103329],{"class":104},[87,111490,1108],{"class":97},[19,111492,111493],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,111495,111496],{},"限制动作：",[77,111498,111500],{"className":31325,"code":111499,"language":31327,"meta":82,"style":82},"np.clip(action, -1.0, 1.0)\n",[84,111501,111502],{"__ignoreMap":82},[87,111503,111504,111507,111509,111511,111513,111515],{"class":89,"line":90},[87,111505,111506],{"class":97},"np.clip(action, ",[87,111508,1625],{"class":171},[87,111510,103329],{"class":104},[87,111512,13385],{"class":97},[87,111514,103329],{"class":104},[87,111516,1108],{"class":97},[19,111518,111519,111520,111523],{},"因为 XML 里 ",[84,111521,111522],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[44,111525,102634],{"id":102634},[77,111527,111528],{"className":31325,"code":111389,"language":31327,"meta":82,"style":82},[84,111529,111530,111538],{"__ignoreMap":82},[87,111531,111532,111534,111536],{"class":89,"line":90},[87,111533,32894],{"class":171},[87,111535,110920],{"class":205},[87,111537,110923],{"class":97},[87,111539,111540,111542],{"class":89,"line":101},[87,111541,5044],{"class":171},[87,111543,110930],{"class":97},[19,111545,111546,111547,111550,111551,111554,111555,111558],{},"这段定义了一个函数，用来获取当前观测。",[84,111548,111549],{},"data.qpos.copy()"," 是位置数组副本，",[84,111552,111553],{},"data.qvel.copy()"," 是速度数组副本。",[84,111556,111557],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,111560,111561],{},"在本章模型里：",[77,111563,111566],{"className":111564,"code":111565,"language":599,"meta":82},[597],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[84,111567,111565],{"__ignoreMap":82},[19,111569,111570],{},"所以返回的 obs 是：",[77,111572,111575],{"className":111573,"code":111574,"language":599,"meta":82},[597],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[84,111576,111574],{"__ignoreMap":82},[77,111578,111580],{"className":31325,"code":111579,"language":31327,"meta":82,"style":82},"def compute_reward(obs: np.ndarray) -> float:\n",[84,111581,111582],{"__ignoreMap":82},[87,111583,111584,111586,111588,111590,111592],{"class":89,"line":90},[87,111585,32894],{"class":171},[87,111587,110945],{"class":205},[87,111589,110948],{"class":97},[87,111591,1141],{"class":104},[87,111593,4693],{"class":97},[19,111595,111596,111597,111600],{},"这行定义奖励函数。输入是观测 ",[84,111598,111599],{},"obs","，输出是一个浮点数奖励。",[77,111602,111604],{"className":31325,"code":111603,"language":31327,"meta":82,"style":82},"cart_x = obs[0]\npole_angle = obs[1]\n",[84,111605,111606,111619],{"__ignoreMap":82},[87,111607,111608,111611,111613,111615,111617],{"class":89,"line":90},[87,111609,111610],{"class":97},"cart_x ",[87,111612,946],{"class":171},[87,111614,110962],{"class":97},[87,111616,111],{"class":104},[87,111618,34193],{"class":97},[87,111620,111621,111624,111626,111628,111630],{"class":89,"line":101},[87,111622,111623],{"class":97},"pole_angle ",[87,111625,946],{"class":171},[87,111627,110962],{"class":97},[87,111629,1313],{"class":104},[87,111631,34193],{"class":97},[19,111633,111634,111635,111638,111639,111642],{},"数组索引从 0 开始。",[84,111636,111637],{},"obs[0]"," 是第一个元素，也就是小车位置。",[84,111640,111641],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[77,111644,111645],{"className":31325,"code":110714,"language":31327,"meta":82,"style":82},[84,111646,111647],{"__ignoreMap":82},[87,111648,111649,111651,111653,111655,111657,111659,111661,111663,111665,111667,111669,111671,111673,111675],{"class":89,"line":90},[87,111650,17995],{"class":171},[87,111652,110723],{"class":104},[87,111654,165],{"class":97},[87,111656,103329],{"class":104},[87,111658,53208],{"class":171},[87,111660,110732],{"class":104},[87,111662,7468],{"class":171},[87,111664,110737],{"class":97},[87,111666,1549],{"class":171},[87,111668,110737],{"class":97},[87,111670,1625],{"class":171},[87,111672,110746],{"class":97},[87,111674,1549],{"class":171},[87,111676,110751],{"class":97},[19,111678,111679,111680,111683,111684,111687],{},"这行计算奖励。",[84,111681,111682],{},"cart_x * cart_x"," 是小车位置的平方，",[84,111685,111686],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[77,111689,111691],{"className":31325,"code":111690,"language":31327,"meta":82,"style":82},"data.qpos[1] = 0.1\n",[84,111692,111693],{"__ignoreMap":82},[87,111694,111695,111697,111699,111701,111703],{"class":89,"line":90},[87,111696,105625],{"class":97},[87,111698,1313],{"class":104},[87,111700,5396],{"class":97},[87,111702,946],{"class":171},[87,111704,111066],{"class":104},[19,111706,111707,111708,111710,111711,111713],{},"手动设置杆子的初始角度。因为 ",[84,111709,106382],{}," 是小车位置，",[84,111712,106385],{}," 是杆子角度，所以这里改的是杆子。",[77,111715,111716],{"className":31325,"code":105469,"language":31327,"meta":82,"style":82},[84,111717,111718],{"__ignoreMap":82},[87,111719,111720],{"class":89,"line":90},[87,111721,105469],{"class":97},[19,111723,106428,111724,111726],{},[84,111725,104956],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[77,111728,111730],{"className":31325,"code":111729,"language":31327,"meta":82,"style":82},"total_reward = 0.0\n",[84,111731,111732],{"__ignoreMap":82},[87,111733,111734,111737,111739],{"class":89,"line":90},[87,111735,111736],{"class":97},"total_reward ",[87,111738,946],{"class":171},[87,111740,105687],{"class":104},[19,111742,111743],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[77,111745,111747],{"className":31325,"code":111746,"language":31327,"meta":82,"style":82},"for step in range(1000):\n",[84,111748,111749],{"__ignoreMap":82},[87,111750,111751,111753,111755,111757,111759,111761,111763],{"class":89,"line":90},[87,111752,3979],{"class":171},[87,111754,32563],{"class":97},[87,111756,26990],{"class":171},[87,111758,33390],{"class":104},[87,111760,165],{"class":97},[87,111762,7360],{"class":104},[87,111764,31733],{"class":97},[19,111766,111767,111768,111770],{},"循环 1000 步。",[84,111769,108060],{}," 是当前步数，从 0 到 999。",[77,111772,111774],{"className":31325,"code":111773,"language":31327,"meta":82,"style":82},"obs = get_observation(data)\n",[84,111775,111776],{"__ignoreMap":82},[87,111777,111778,111781,111783],{"class":89,"line":90},[87,111779,111780],{"class":97},"obs ",[87,111782,946],{"class":171},[87,111784,111113],{"class":97},[19,111786,111787,111788,29332],{},"读取当前状态，保存到 ",[84,111789,111599],{},[77,111791,111793],{"className":31325,"code":111792,"language":31327,"meta":82,"style":82},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[84,111794,111795,111807],{"__ignoreMap":82},[87,111796,111797,111799,111801,111803,111805],{"class":89,"line":90},[87,111798,111623],{"class":97},[87,111800,946],{"class":171},[87,111802,110962],{"class":97},[87,111804,1313],{"class":104},[87,111806,34193],{"class":97},[87,111808,111809,111812,111814,111816,111818],{"class":89,"line":101},[87,111810,111811],{"class":97},"pole_angular_velocity ",[87,111813,946],{"class":171},[87,111815,110962],{"class":97},[87,111817,1170],{"class":104},[87,111819,34193],{"class":97},[19,111821,111822,111823,111826,111827,29332],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[84,111824,111825],{},"obs[3]","？因为 obs 的顺序是 ",[84,111828,111829],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[77,111831,111833],{"className":31325,"code":111832,"language":31327,"meta":82,"style":82},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[84,111834,111835],{"__ignoreMap":82},[87,111836,111837,111839,111841,111843,111845,111847,111849,111851,111853],{"class":89,"line":90},[87,111838,108368],{"class":97},[87,111840,946],{"class":171},[87,111842,111153],{"class":104},[87,111844,7468],{"class":171},[87,111846,110746],{"class":97},[87,111848,1575],{"class":171},[87,111850,62802],{"class":104},[87,111852,7468],{"class":171},[87,111854,111166],{"class":97},[19,111856,111857,111858,101944,111860,111862],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[84,111859,106186],{},[84,111861,36276],{}," 是人为设置的系数，不是固定公式。",[77,111864,111866],{"className":31325,"code":111865,"language":31327,"meta":82,"style":82},"action = np.clip(action, -1.0, 1.0)\n",[84,111867,111868],{"__ignoreMap":82},[87,111869,111870,111872,111874,111876,111878,111880,111882,111884],{"class":89,"line":90},[87,111871,108368],{"class":97},[87,111873,946],{"class":171},[87,111875,108373],{"class":97},[87,111877,1625],{"class":171},[87,111879,103329],{"class":104},[87,111881,13385],{"class":97},[87,111883,103329],{"class":104},[87,111885,1108],{"class":97},[19,111887,111888],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[77,111890,111891],{"className":31325,"code":110699,"language":31327,"meta":82,"style":82},[84,111892,111893],{"__ignoreMap":82},[87,111894,111895,111897,111899,111901,111903],{"class":89,"line":90},[87,111896,106797],{"class":97},[87,111898,111],{"class":104},[87,111900,5396],{"class":97},[87,111902,946],{"class":171},[87,111904,108396],{"class":97},[19,111906,111907],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[77,111909,111910],{"className":31325,"code":105431,"language":31327,"meta":82,"style":82},[84,111911,111912],{"__ignoreMap":82},[87,111913,111914],{"class":89,"line":90},[87,111915,105431],{"class":97},[19,111917,111918,111919,111921],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[84,111920,107052],{}," 计算小车和杆子的下一刻状态。",[77,111923,111925],{"className":31325,"code":111924,"language":31327,"meta":82,"style":82},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[84,111926,111927,111936],{"__ignoreMap":82},[87,111928,111929,111932,111934],{"class":89,"line":90},[87,111930,111931],{"class":97},"reward ",[87,111933,946],{"class":171},[87,111935,111218],{"class":97},[87,111937,111938,111940,111942],{"class":89,"line":101},[87,111939,111736],{"class":97},[87,111941,10427],{"class":171},[87,111943,111228],{"class":97},[19,111945,111946,111947,111949,111950,111953,111954,29332],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[84,111948,10427],{}," 是简写，",[84,111951,111952],{},"total_reward += reward"," 等价于 ",[84,111955,111956],{},"total_reward = total_reward + reward",[77,111958,111960],{"className":31325,"code":111959,"language":31327,"meta":82,"style":82},"if step % 100 == 0:\n",[84,111961,111962],{"__ignoreMap":82},[87,111963,111964,111966,111968,111970,111972,111974,111976],{"class":89,"line":90},[87,111965,2488],{"class":171},[87,111967,32563],{"class":97},[87,111969,1423],{"class":171},[87,111971,6704],{"class":104},[87,111973,102485],{"class":171},[87,111975,577],{"class":104},[87,111977,4693],{"class":97},[19,111979,111980,111982,111983,111986],{},[84,111981,1423],{}," 是取余数。",[84,111984,111985],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[77,111988,111990],{"className":31325,"code":111989,"language":31327,"meta":82,"style":82},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[84,111991,111992],{"__ignoreMap":82},[87,111993,111994,111996,111998,112000,112002,112004,112006,112008,112010,112012,112014,112016,112018,112020,112022,112024],{"class":89,"line":90},[87,111995,31362],{"class":104},[87,111997,165],{"class":97},[87,111999,111257],{"class":949},[87,112001,111260],{"class":97},[87,112003,111263],{"class":949},[87,112005,111266],{"class":97},[87,112007,1170],{"class":104},[87,112009,111271],{"class":97},[87,112011,111274],{"class":949},[87,112013,13385],{"class":97},[87,112015,32965],{"class":104},[87,112017,165],{"class":97},[87,112019,1141],{"class":104},[87,112021,111285],{"class":97},[87,112023,1170],{"class":104},[87,112025,31444],{"class":97},[19,112027,112028,112029,112032,112033,112036],{},"打印当前步数、观测和动作。",[84,112030,112031],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[84,112034,112035],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112038,103242],{"id":103241},[19,112040,112041],{},"观测向量:",[77,112043,112046],{"className":112044,"code":112045,"language":599,"meta":82},[597],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[84,112047,112045],{"__ignoreMap":82},[19,112049,112050],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,112052,112053],{},"每隔 100 步会打印一次：",[77,112055,112058],{"className":112056,"code":112057,"language":599,"meta":82},[597],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[84,112059,112057],{"__ignoreMap":82},[19,112061,112062],{},"重点观察：",[1055,112064,112065,112071,112076],{},[29,112066,112067,112070],{},[84,112068,112069],{},"pole_angle"," 是否越来越大。",[29,112072,112073,112075],{},[84,112074,110652],{}," 是否跑得太远。",[29,112077,112078,112079,83465,112081,29332],{},"action 是否经常被 clip 到 ",[84,112080,104841],{},[84,112082,1313],{},[19,112084,112085],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112087,103274],{"id":103273},[1055,112089,112090,112096,112099,112105,112115,112121,112124],{},[29,112091,112092,112093,29332],{},"把初始角度改为 ",[84,112094,112095],{},"data.qpos[1] = 0.3",[29,112097,112098],{},"重新运行，观察控制是否变差。",[29,112100,112101,112102,112104],{},"把 actuator ",[84,112103,107993],{}," 改小。",[29,112106,112107,112108,112111,112112,29332],{},"打印 ",[84,112109,112110],{},"model.nq, model.nv, model.nu","，应为 ",[84,112113,112114],{},"2 2 1",[29,112116,112117,112118,112120],{},"把 reward 里的 ",[84,112119,111686],{}," 系数改大，观察总奖励变化。",[29,112122,112123],{},"把控制器改成反号，观察杆子是否更容易倒。",[29,112125,112126],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112128,103379],{"id":103378},[44,112130,112131],{"id":112131},"杆子方向和预期不一致",[19,112133,103322,112134,112136,112137,112139],{},[84,112135,107165],{}," 和 capsule 的 ",[84,112138,104102],{},"，必要时用 viewer 可视化确认。",[44,112141,112142],{"id":112142},"控制器越控越倒",[19,112144,112145],{},"说明反馈符号可能反了，尝试:",[77,112147,112149],{"className":31325,"code":112148,"language":31327,"meta":82,"style":82},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[84,112150,112151],{"__ignoreMap":82},[87,112152,112153,112155,112157,112159,112161,112163,112165,112167,112169,112171],{"class":89,"line":90},[87,112154,108368],{"class":97},[87,112156,946],{"class":171},[87,112158,53208],{"class":171},[87,112160,106186],{"class":104},[87,112162,7468],{"class":171},[87,112164,110746],{"class":97},[87,112166,1625],{"class":171},[87,112168,62802],{"class":104},[87,112170,7468],{"class":171},[87,112172,111166],{"class":97},[44,112174,112175],{"id":112175},"小车飞走",[19,112177,112178,112179,112181,112182,112185],{},"降低 ",[84,112180,107993],{}," 或缩小 ",[84,112183,112184],{},"action"," 的 clip 范围。",[44,112187,112189,112191],{"id":112188},"obs3-为什么是杆子角速度",[84,112190,111825],{}," 为什么是杆子角速度",[19,112193,112194],{},"因为这个模型里：",[77,112196,112199],{"className":112197,"code":112198,"language":599,"meta":82},[597],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[84,112200,112198],{"__ignoreMap":82},[19,112202,110673],{},[77,112204,112207],{"className":112205,"code":112206,"language":599,"meta":82},[597],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[84,112208,112206],{"__ignoreMap":82},[44,112210,112212],{"id":112211},"reward-变成负数是否错误","reward 变成负数是否错误",[19,112214,112215],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112217,103533],{"id":103532},[19,112219,112220],{},"一个控制任务通常包含：",[1055,112222,112223,112226,112234,112239,112242],{},[29,112224,112225],{},"模型：Cartpole 的 body、joint、actuator。",[29,112227,112228,112229,1308,112231,112233],{},"观测：从 ",[84,112230,104956],{},[84,112232,105286],{}," 里取状态。",[29,112235,112236,112237,29332],{},"动作：写入 ",[84,112238,102002],{},[29,112240,112241],{},"奖励：根据任务目标打分。",[29,112243,112244],{},"循环：obs -> action -> step -> reward。",[19,112246,112247],{},"这就是后面 Gymnasium 环境的基本骨架。",[1006,112249,105212],{},{"title":82,"searchDepth":101,"depth":101,"links":112251},[112252,112253,112254,112259,112263,112264,112265,112273],{"id":101572,"depth":101,"text":101573},{"id":101695,"depth":101,"text":101696},{"id":101970,"depth":101,"text":101971,"children":112255},[112256,112257,112258],{"id":110626,"depth":120,"text":110627},{"id":110691,"depth":120,"text":110692},{"id":110707,"depth":120,"text":110708},{"id":102178,"depth":101,"text":102179,"children":112260},[112261,112262],{"id":102498,"depth":120,"text":102498},{"id":102634,"depth":120,"text":102634},{"id":103241,"depth":101,"text":103242},{"id":103273,"depth":101,"text":103274},{"id":103378,"depth":101,"text":103379,"children":112266},[112267,112268,112269,112270,112272],{"id":112131,"depth":120,"text":112131},{"id":112142,"depth":120,"text":112142},{"id":112175,"depth":120,"text":112175},{"id":112188,"depth":120,"text":112271},"obs[3] 为什么是杆子角速度",{"id":112211,"depth":120,"text":112212},{"id":103532,"depth":101,"text":103533},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110362,"description":82},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112280,"title":112281,"body":112282,"description":82,"extension":1027,"meta":114296,"navigation":1029,"path":114297,"seo":114298,"stem":114299,"__hash__":114300},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112283,"toc":114272},[112284,112287,112289,112292,112294,112311,112314,112317,112323,112326,112328,112330,112354,112356,112370,112372,112413,112415,112433,112435,112438,112444,112447,112475,112479,112485,112510,112513,112544,112551,112554,112557,112563,112566,112572,112575,112581,112585,112588,112613,112616,112618,113378,113380,113392,113394,113405,113407,113410,113427,113430,113432,113443,113446,113448,113494,113497,113510,113513,113595,113598,113600,113616,113626,113639,113642,113681,113691,113702,113712,113725,113728,113757,113760,113770,113773,113779,113796,113807,113809,113815,113832,113843,113864,113867,113879,113882,113903,113906,113914,113922,113939,113942,114011,114018,114026,114029,114042,114049,114051,114054,114060,114063,114066,114072,114078,114080,114120,114122,114128,114137,114140,114142,114162,114165,114168,114174,114178,114180,114207,114210,114213,114240,114246,114249,114252,114254,114257,114260,114266,114269],[10,112285,112281],{"id":112286},"_7控制任务reacher-机械臂到达目标",[14,112288,101573],{"id":101572},[19,112290,112291],{},"本章搭建一个二维两关节 reacher 任务。",[19,112293,105257],{},[1055,112295,112296,112299,112302,112305,112308],{},[29,112297,112298],{},"两个 hinge joint",[29,112300,112301],{},"两个 motor actuator",[29,112303,112304],{},"site 作为末端点和目标点",[29,112306,112307],{},"根据末端和目标距离设计 reward",[29,112309,112310],{},"构造机械臂任务的基本形式",[19,112312,112313],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,112315,112316],{},"Reacher 任务可以理解为：",[77,112318,112321],{"className":112319,"code":112320,"language":599,"meta":82},[597],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[84,112322,112320],{"__ignoreMap":82},[19,112324,112325],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112327,101696],{"id":101695},[19,112329,101699],{},[77,112331,112332],{"className":24769,"code":105314,"language":24771,"meta":82,"style":82},[84,112333,112334],{"__ignoreMap":82},[87,112335,112336,112338,112340,112342,112344,112346,112348,112350,112352],{"class":89,"line":90},[87,112337,25524],{"class":205},[87,112339,27262],{"class":949},[87,112341,24781],{"class":949},[87,112343,27347],{"class":104},[87,112345,105329],{"class":949},[87,112347,101724],{"class":949},[87,112349,103427],{"class":949},[87,112351,101740],{"class":949},[87,112353,105338],{"class":949},[19,112355,103745],{},[77,112357,112358],{"className":24769,"code":101845,"language":24771,"meta":82,"style":82},[84,112359,112360],{"__ignoreMap":82},[87,112361,112362,112364,112366,112368],{"class":89,"line":90},[87,112363,24778],{"class":205},[87,112365,24781],{"class":949},[87,112367,101856],{"class":949},[87,112369,101859],{"class":949},[19,112371,103762],{},[77,112373,112375],{"className":24769,"code":112374,"language":24771,"meta":82,"style":82},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[84,112376,112377,112394,112403],{"__ignoreMap":82},[87,112378,112379,112381,112383,112385,112388,112390,112392],{"class":89,"line":90},[87,112380,31277],{"class":205},[87,112382,30123],{"class":949},[87,112384,26063],{"class":104},[87,112386,112387],{"class":949}," mujoco-reacher",[87,112389,101901],{"class":949},[87,112391,101904],{"class":104},[87,112393,101907],{"class":104},[87,112395,112396,112398,112400],{"class":89,"line":101},[87,112397,31277],{"class":205},[87,112399,101914],{"class":949},[87,112401,112402],{"class":949}," mujoco-reacher\n",[87,112404,112405,112407,112409,112411],{"class":89,"line":120},[87,112406,24778],{"class":205},[87,112408,24781],{"class":949},[87,112410,101856],{"class":949},[87,112412,101859],{"class":949},[19,112414,101930],{},[1055,112416,112417,112420,112423],{},[29,112418,112419],{},"本章使用低维状态，不使用图像输入。",[29,112421,112422],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[29,112424,112425,112426,1308,112428,1308,112430,112432],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[84,112427,104956],{},[84,112429,105286],{},[84,112431,104606],{}," 的方法一致。",[14,112434,101971],{"id":101970},[19,112436,112437],{},"Reacher 任务核心:",[77,112439,112442],{"className":112440,"code":112441,"language":599,"meta":82},[597],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[84,112443,112441],{"__ignoreMap":82},[19,112445,112446],{},"读取 site 世界坐标:",[77,112448,112450],{"className":31325,"code":112449,"language":31327,"meta":82,"style":82},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[84,112451,112452,112465],{"__ignoreMap":82},[87,112453,112454,112456,112458,112460,112463],{"class":89,"line":90},[87,112455,104560],{"class":97},[87,112457,946],{"class":171},[87,112459,104331],{"class":97},[87,112461,112462],{"class":949},"\"tip\"",[87,112464,1108],{"class":97},[87,112466,112467,112470,112472],{"class":89,"line":101},[87,112468,112469],{"class":97},"tip_pos ",[87,112471,946],{"class":171},[87,112473,112474],{"class":97}," data.site_xpos[site_id]\n",[44,112476,112478],{"id":112477},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,112480,112481,112482,112484],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[84,112483,104956],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[77,112486,112488],{"className":31325,"code":112487,"language":31327,"meta":82,"style":82},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[84,112489,112490,112500],{"__ignoreMap":82},[87,112491,112492,112495,112497],{"class":89,"line":90},[87,112493,112494],{"class":97},"tip ",[87,112496,946],{"class":171},[87,112498,112499],{"class":97}," data.site_xpos[tip_site_id]\n",[87,112501,112502,112505,112507],{"class":89,"line":101},[87,112503,112504],{"class":97},"target ",[87,112506,946],{"class":171},[87,112508,112509],{"class":97}," data.site_xpos[target_site_id]\n",[19,112511,112512],{},"这样 reward 就很容易写：",[77,112514,112516],{"className":31325,"code":112515,"language":31327,"meta":82,"style":82},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[84,112517,112518,112533],{"__ignoreMap":82},[87,112519,112520,112523,112525,112528,112530],{"class":89,"line":90},[87,112521,112522],{"class":97},"dist ",[87,112524,946],{"class":171},[87,112526,112527],{"class":97}," np.linalg.norm(tip ",[87,112529,1625],{"class":171},[87,112531,112532],{"class":97}," target)\n",[87,112534,112535,112537,112539,112541],{"class":89,"line":101},[87,112536,111931],{"class":97},[87,112538,946],{"class":171},[87,112540,53208],{"class":171},[87,112542,112543],{"class":97},"dist\n",[19,112545,112546,112547,112550],{},"距离越小，",[84,112548,112549],{},"-dist"," 越接近 0，奖励越高。",[44,112552,112553],{"id":112553},"两关节机械臂的状态",[19,112555,112556],{},"这个模型有两个 hinge joint：",[77,112558,112561],{"className":112559,"code":112560,"language":599,"meta":82},[597],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[84,112562,112560],{"__ignoreMap":82},[19,112564,112565],{},"再加上末端和目标位置：",[77,112567,112570],{"className":112568,"code":112569,"language":599,"meta":82},[597],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[84,112571,112569],{"__ignoreMap":82},[19,112573,112574],{},"总维度：",[77,112576,112579],{"className":112577,"code":112578,"language":599,"meta":82},[597],"2 + 2 + 3 + 3 = 10\n",[84,112580,112578],{"__ignoreMap":82},[44,112582,112584],{"id":112583},"为什么-gravity-是-0","为什么 gravity 是 0",[19,112586,112587],{},"本章把重力设为：",[77,112589,112591],{"className":54004,"code":112590,"language":54006,"meta":82,"style":82},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[84,112592,112593],{"__ignoreMap":82},[87,112594,112595,112597,112599,112601,112603,112605,112607,112609,112611],{"class":89,"line":90},[87,112596,938],{"class":97},[87,112598,70098],{"class":93},[87,112600,102120],{"class":205},[87,112602,946],{"class":97},[87,112604,102125],{"class":949},[87,112606,102128],{"class":205},[87,112608,946],{"class":97},[87,112610,104697],{"class":949},[87,112612,102070],{"class":97},[19,112614,112615],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112617,102179],{"id":102178},[77,112619,112621],{"className":31325,"code":112620,"language":31327,"meta":82,"style":82},"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",[84,112622,112623,112629,112639,112643,112647,112655,112660,112665,112669,112673,112678,112683,112687,112692,112697,112702,112706,112711,112716,112721,112726,112730,112734,112738,112742,112746,112751,112756,112760,112764,112768,112772,112776,112791,112800,112812,112835,112842,112846,112850,112860,112874,112888,112895,112899,112903,112917,112929,112941,112954,112969,112986,112990,112994,113006,113018,113026,113034,113038,113054,113059,113072,113085,113100,113104,113139,113171,113175,113179,113188,113192,113208,113218,113229,113245,113261,113277,113293,113297,113315,113335,113354,113358,113362,113374],{"__ignoreMap":82},[87,112624,112625,112627],{"class":89,"line":90},[87,112626,31339],{"class":171},[87,112628,102227],{"class":97},[87,112630,112631,112633,112635,112637],{"class":89,"line":101},[87,112632,31339],{"class":171},[87,112634,32327],{"class":97},[87,112636,32330],{"class":171},[87,112638,32333],{"class":97},[87,112640,112641],{"class":89,"line":120},[87,112642,3355],{"emptyLinePlaceholder":1029},[87,112644,112645],{"class":89,"line":222},[87,112646,3355],{"emptyLinePlaceholder":1029},[87,112648,112649,112651,112653],{"class":89,"line":234},[87,112650,102240],{"class":104},[87,112652,14514],{"class":171},[87,112654,102245],{"class":949},[87,112656,112657],{"class":89,"line":256},[87,112658,112659],{"class":949},"\u003Cmujoco model=\"two_link_reacher\">\n",[87,112661,112662],{"class":89,"line":269},[87,112663,112664],{"class":949},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[87,112666,112667],{"class":89,"line":463},[87,112668,3355],{"emptyLinePlaceholder":1029},[87,112670,112671],{"class":89,"line":469},[87,112672,102264],{"class":949},[87,112674,112675],{"class":89,"line":2287},[87,112676,112677],{"class":949},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[87,112679,112680],{"class":89,"line":2568},[87,112681,112682],{"class":949},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[87,112684,112685],{"class":89,"line":2573},[87,112686,3355],{"emptyLinePlaceholder":1029},[87,112688,112689],{"class":89,"line":2579},[87,112690,112691],{"class":949},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[87,112693,112694],{"class":89,"line":2584},[87,112695,112696],{"class":949},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[87,112698,112699],{"class":89,"line":2598},[87,112700,112701],{"class":949},"      \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",[87,112703,112704],{"class":89,"line":2603},[87,112705,3355],{"emptyLinePlaceholder":1029},[87,112707,112708],{"class":89,"line":2609},[87,112709,112710],{"class":949},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[87,112712,112713],{"class":89,"line":2630},[87,112714,112715],{"class":949},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[87,112717,112718],{"class":89,"line":2635},[87,112719,112720],{"class":949},"        \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",[87,112722,112723],{"class":89,"line":2649},[87,112724,112725],{"class":949},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[87,112727,112728],{"class":89,"line":2654},[87,112729,107364],{"class":949},[87,112731,112732],{"class":89,"line":2683},[87,112733,102293],{"class":949},[87,112735,112736],{"class":89,"line":2688},[87,112737,102298],{"class":949},[87,112739,112740],{"class":89,"line":2705},[87,112741,3355],{"emptyLinePlaceholder":1029},[87,112743,112744],{"class":89,"line":2710},[87,112745,107381],{"class":949},[87,112747,112748],{"class":89,"line":2715},[87,112749,112750],{"class":949},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[87,112752,112753],{"class":89,"line":2720},[87,112754,112755],{"class":949},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[87,112757,112758],{"class":89,"line":2734},[87,112759,107391],{"class":949},[87,112761,112762],{"class":89,"line":2739},[87,112763,102303],{"class":949},[87,112765,112766],{"class":89,"line":3532},[87,112767,96624],{"class":949},[87,112769,112770],{"class":89,"line":3546},[87,112771,3355],{"emptyLinePlaceholder":1029},[87,112773,112774],{"class":89,"line":3554},[87,112775,3355],{"emptyLinePlaceholder":1029},[87,112777,112778,112780,112783,112786,112788],{"class":89,"line":3559},[87,112779,32894],{"class":171},[87,112781,112782],{"class":205}," site_position",[87,112784,112785],{"class":97},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[87,112787,2259],{"class":104},[87,112789,112790],{"class":97},") -> np.ndarray:\n",[87,112792,112793,112795,112797],{"class":89,"line":3565},[87,112794,104326],{"class":97},[87,112796,946],{"class":171},[87,112798,112799],{"class":97}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[87,112801,112802,112804,112806,112808,112810],{"class":89,"line":3571},[87,112803,4055],{"class":171},[87,112805,104375],{"class":97},[87,112807,938],{"class":171},[87,112809,577],{"class":104},[87,112811,4693],{"class":97},[87,112813,112814,112816,112818,112820,112822,112825,112827,112829,112831,112833],{"class":89,"line":3576},[87,112815,104358],{"class":171},[87,112817,104361],{"class":104},[87,112819,165],{"class":97},[87,112821,1152],{"class":171},[87,112823,112824],{"class":949},"\"site not found: ",[87,112826,1988],{"class":104},[87,112828,80736],{"class":97},[87,112830,2037],{"class":104},[87,112832,1347],{"class":949},[87,112834,1108],{"class":97},[87,112836,112837,112839],{"class":89,"line":8898},[87,112838,5044],{"class":171},[87,112840,112841],{"class":97}," data.site_xpos[site_id].copy()\n",[87,112843,112844],{"class":89,"line":8922},[87,112845,3355],{"emptyLinePlaceholder":1029},[87,112847,112848],{"class":89,"line":8927},[87,112849,3355],{"emptyLinePlaceholder":1029},[87,112851,112852,112854,112857],{"class":89,"line":8933},[87,112853,32894],{"class":171},[87,112855,112856],{"class":205}," get_obs",[87,112858,112859],{"class":97},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[87,112861,112862,112865,112867,112870,112872],{"class":89,"line":8960},[87,112863,112864],{"class":97},"    tip ",[87,112866,946],{"class":171},[87,112868,112869],{"class":97}," site_position(model, data, ",[87,112871,112462],{"class":949},[87,112873,1108],{"class":97},[87,112875,112876,112879,112881,112883,112886],{"class":89,"line":8965},[87,112877,112878],{"class":97},"    target ",[87,112880,946],{"class":171},[87,112882,112869],{"class":97},[87,112884,112885],{"class":949},"\"target\"",[87,112887,1108],{"class":97},[87,112889,112890,112892],{"class":89,"line":8971},[87,112891,5044],{"class":171},[87,112893,112894],{"class":97}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[87,112896,112897],{"class":89,"line":8983},[87,112898,3355],{"emptyLinePlaceholder":1029},[87,112900,112901],{"class":89,"line":8995},[87,112902,3355],{"emptyLinePlaceholder":1029},[87,112904,112905,112907,112910,112913,112915],{"class":89,"line":9007},[87,112906,32894],{"class":171},[87,112908,112909],{"class":205}," reward",[87,112911,112912],{"class":97},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[87,112914,1141],{"class":104},[87,112916,4693],{"class":97},[87,112918,112919,112921,112923,112925,112927],{"class":89,"line":10666},[87,112920,112864],{"class":97},[87,112922,946],{"class":171},[87,112924,112869],{"class":97},[87,112926,112462],{"class":949},[87,112928,1108],{"class":97},[87,112930,112931,112933,112935,112937,112939],{"class":89,"line":10691},[87,112932,112878],{"class":97},[87,112934,946],{"class":171},[87,112936,112869],{"class":97},[87,112938,112885],{"class":949},[87,112940,1108],{"class":97},[87,112942,112943,112946,112948,112950,112952],{"class":89,"line":10714},[87,112944,112945],{"class":97},"    dist ",[87,112947,946],{"class":171},[87,112949,112527],{"class":97},[87,112951,1625],{"class":171},[87,112953,112532],{"class":97},[87,112955,112956,112959,112961,112964,112966],{"class":89,"line":10738},[87,112957,112958],{"class":97},"    control_cost ",[87,112960,946],{"class":171},[87,112962,112963],{"class":104}," 0.01",[87,112965,7468],{"class":171},[87,112967,112968],{"class":97}," np.sum(np.square(data.ctrl))\n",[87,112970,112971,112973,112975,112977,112979,112981,112983],{"class":89,"line":10743},[87,112972,5044],{"class":171},[87,112974,110723],{"class":104},[87,112976,165],{"class":97},[87,112978,1625],{"class":171},[87,112980,112522],{"class":97},[87,112982,1625],{"class":171},[87,112984,112985],{"class":97}," control_cost)\n",[87,112987,112988],{"class":89,"line":10748},[87,112989,3355],{"emptyLinePlaceholder":1029},[87,112991,112992],{"class":89,"line":10753},[87,112993,3355],{"emptyLinePlaceholder":1029},[87,112995,112996,112998,113000,113002,113004],{"class":89,"line":10762},[87,112997,32894],{"class":171},[87,112999,2928],{"class":205},[87,113001,102324],{"class":97},[87,113003,96612],{"class":104},[87,113005,4693],{"class":97},[87,113007,113008,113010,113012,113014,113016],{"class":89,"line":10767},[87,113009,102333],{"class":97},[87,113011,946],{"class":171},[87,113013,102338],{"class":97},[87,113015,102240],{"class":104},[87,113017,1108],{"class":97},[87,113019,113020,113022,113024],{"class":89,"line":10773},[87,113021,102347],{"class":97},[87,113023,946],{"class":171},[87,113025,102352],{"class":97},[87,113027,113028,113030,113032],{"class":89,"line":10794},[87,113029,111079],{"class":97},[87,113031,946],{"class":171},[87,113033,105687],{"class":104},[87,113035,113036],{"class":89,"line":10800},[87,113037,3355],{"emptyLinePlaceholder":1029},[87,113039,113040,113042,113044,113046,113048,113050,113052],{"class":89,"line":10814},[87,113041,4155],{"class":171},[87,113043,32563],{"class":97},[87,113045,26990],{"class":171},[87,113047,33390],{"class":104},[87,113049,165],{"class":97},[87,113051,839],{"class":104},[87,113053,31733],{"class":97},[87,113055,113056],{"class":89,"line":10820},[87,113057,113058],{"class":97},"        mujoco.mj_forward(model, data)\n",[87,113060,113061,113064,113066,113068,113070],{"class":89,"line":10847},[87,113062,113063],{"class":97},"        tip ",[87,113065,946],{"class":171},[87,113067,112869],{"class":97},[87,113069,112462],{"class":949},[87,113071,1108],{"class":97},[87,113073,113074,113077,113079,113081,113083],{"class":89,"line":10856},[87,113075,113076],{"class":97},"        target ",[87,113078,946],{"class":171},[87,113080,112869],{"class":97},[87,113082,112885],{"class":949},[87,113084,1108],{"class":97},[87,113086,113087,113090,113092,113095,113097],{"class":89,"line":10862},[87,113088,113089],{"class":97},"        error ",[87,113091,946],{"class":171},[87,113093,113094],{"class":97}," target ",[87,113096,1625],{"class":171},[87,113098,113099],{"class":97}," tip\n",[87,113101,113102],{"class":89,"line":10870},[87,113103,3355],{"emptyLinePlaceholder":1029},[87,113105,113106,113108,113110,113112,113114,113117,113119,113121,113124,113126,113129,113131,113133,113135,113137],{"class":89,"line":10875},[87,113107,107543],{"class":97},[87,113109,111],{"class":104},[87,113111,5396],{"class":97},[87,113113,946],{"class":171},[87,113115,113116],{"class":97}," np.clip(",[87,113118,106186],{"class":104},[87,113120,7468],{"class":171},[87,113122,113123],{"class":97}," error[",[87,113125,1176],{"class":104},[87,113127,113128],{"class":97},"], ",[87,113130,1625],{"class":171},[87,113132,103329],{"class":104},[87,113134,13385],{"class":97},[87,113136,103329],{"class":104},[87,113138,1108],{"class":97},[87,113140,113141,113143,113145,113147,113149,113151,113153,113155,113157,113159,113161,113163,113165,113167,113169],{"class":89,"line":17553},[87,113142,107543],{"class":97},[87,113144,1313],{"class":104},[87,113146,5396],{"class":97},[87,113148,946],{"class":171},[87,113150,113116],{"class":97},[87,113152,106186],{"class":104},[87,113154,7468],{"class":171},[87,113156,113123],{"class":97},[87,113158,111],{"class":104},[87,113160,113128],{"class":97},[87,113162,1625],{"class":171},[87,113164,103329],{"class":104},[87,113166,13385],{"class":97},[87,113168,103329],{"class":104},[87,113170,1108],{"class":97},[87,113172,113173],{"class":89,"line":17559},[87,113174,3355],{"emptyLinePlaceholder":1029},[87,113176,113177],{"class":89,"line":17582},[87,113178,102442],{"class":97},[87,113180,113181,113183,113185],{"class":89,"line":17588},[87,113182,111223],{"class":97},[87,113184,10427],{"class":171},[87,113186,113187],{"class":97}," reward(model, data)\n",[87,113189,113190],{"class":89,"line":17611},[87,113191,3355],{"emptyLinePlaceholder":1029},[87,113193,113194,113196,113198,113200,113202,113204,113206],{"class":89,"line":17625},[87,113195,3452],{"class":171},[87,113197,32563],{"class":97},[87,113199,1423],{"class":171},[87,113201,6704],{"class":104},[87,113203,102485],{"class":171},[87,113205,577],{"class":104},[87,113207,4693],{"class":97},[87,113209,113210,113213,113215],{"class":89,"line":17645},[87,113211,113212],{"class":97},"            obs ",[87,113214,946],{"class":171},[87,113216,113217],{"class":97}," get_obs(model, data)\n",[87,113219,113220,113222,113224,113226],{"class":89,"line":17651},[87,113221,35597],{"class":104},[87,113223,165],{"class":97},[87,113225,111257],{"class":949},[87,113227,113228],{"class":97},", step)\n",[87,113230,113231,113233,113235,113238,113241,113243],{"class":89,"line":17662},[87,113232,35597],{"class":104},[87,113234,165],{"class":97},[87,113236,113237],{"class":949},"\"  tip:\"",[87,113239,113240],{"class":97},", np.round(tip, ",[87,113242,1170],{"class":104},[87,113244,31444],{"class":97},[87,113246,113247,113249,113251,113254,113257,113259],{"class":89,"line":17685},[87,113248,35597],{"class":104},[87,113250,165],{"class":97},[87,113252,113253],{"class":949},"\"  target:\"",[87,113255,113256],{"class":97},", np.round(target, ",[87,113258,1170],{"class":104},[87,113260,31444],{"class":97},[87,113262,113263,113265,113267,113270,113273,113275],{"class":89,"line":17707},[87,113264,35597],{"class":104},[87,113266,165],{"class":97},[87,113268,113269],{"class":949},"\"  ctrl:\"",[87,113271,113272],{"class":97},", np.round(data.ctrl.copy(), ",[87,113274,1170],{"class":104},[87,113276,31444],{"class":97},[87,113278,113279,113281,113283,113286,113289,113291],{"class":89,"line":17712},[87,113280,35597],{"class":104},[87,113282,165],{"class":97},[87,113284,113285],{"class":949},"\"  obs_dim:\"",[87,113287,113288],{"class":97},", obs.shape[",[87,113290,111],{"class":104},[87,113292,5610],{"class":97},[87,113294,113295],{"class":89,"line":17718},[87,113296,3355],{"emptyLinePlaceholder":1029},[87,113298,113299,113301,113303,113305,113307,113309,113311,113313],{"class":89,"line":17732},[87,113300,32246],{"class":104},[87,113302,165],{"class":97},[87,113304,111302],{"class":949},[87,113306,13385],{"class":97},[87,113308,32965],{"class":104},[87,113310,111309],{"class":97},[87,113312,1170],{"class":104},[87,113314,31444],{"class":97},[87,113316,113317,113319,113321,113324,113327,113329,113331,113333],{"class":89,"line":17745},[87,113318,32246],{"class":104},[87,113320,165],{"class":97},[87,113322,113323],{"class":949},"\"final tip:\"",[87,113325,113326],{"class":97},", np.round(site_position(model, data, ",[87,113328,112462],{"class":949},[87,113330,111271],{"class":97},[87,113332,1170],{"class":104},[87,113334,31444],{"class":97},[87,113336,113337,113339,113341,113344,113346,113348,113350,113352],{"class":89,"line":17750},[87,113338,32246],{"class":104},[87,113340,165],{"class":97},[87,113342,113343],{"class":949},"\"target:\"",[87,113345,113326],{"class":97},[87,113347,112885],{"class":949},[87,113349,111271],{"class":97},[87,113351,1170],{"class":104},[87,113353,31444],{"class":97},[87,113355,113356],{"class":89,"line":17764},[87,113357,3355],{"emptyLinePlaceholder":1029},[87,113359,113360],{"class":89,"line":17769},[87,113361,3355],{"emptyLinePlaceholder":1029},[87,113363,113364,113366,113368,113370,113372],{"class":89,"line":17775},[87,113365,2488],{"class":171},[87,113367,32167],{"class":104},[87,113369,102485],{"class":171},[87,113371,102488],{"class":949},[87,113373,4693],{"class":97},[87,113375,113376],{"class":89,"line":17780},[87,113377,102495],{"class":97},[19,113379,104496],{},[77,113381,113383],{"className":24769,"code":113382,"language":24771,"meta":82,"style":82},"touch ch7_reacher.py\n",[84,113384,113385],{"__ignoreMap":82},[87,113386,113387,113389],{"class":89,"line":90},[87,113388,102209],{"class":205},[87,113390,113391],{"class":949}," ch7_reacher.py\n",[19,113393,111370],{},[77,113395,113397],{"className":24769,"code":113396,"language":24771,"meta":82,"style":82},"python ch7_reacher.py\n",[84,113398,113399],{"__ignoreMap":82},[87,113400,113401,113403],{"class":89,"line":90},[87,113402,31327],{"class":205},[87,113404,113391],{"class":949},[44,113406,102498],{"id":102498},[19,113408,113409],{},"读取 site 坐标：",[77,113411,113413],{"className":31325,"code":113412,"language":31327,"meta":82,"style":82},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[84,113414,113415],{"__ignoreMap":82},[87,113416,113417,113419,113421,113423,113425],{"class":89,"line":90},[87,113418,32894],{"class":171},[87,113420,112782],{"class":205},[87,113422,112785],{"class":97},[87,113424,2259],{"class":104},[87,113426,112790],{"class":97},[19,113428,113429],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,113431,111386],{},[77,113433,113435],{"className":31325,"code":113434,"language":31327,"meta":82,"style":82},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[84,113436,113437],{"__ignoreMap":82},[87,113438,113439,113441],{"class":89,"line":90},[87,113440,17995],{"class":171},[87,113442,112894],{"class":97},[19,113444,113445],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,113447,110711],{},[77,113449,113451],{"className":31325,"code":113450,"language":31327,"meta":82,"style":82},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[84,113452,113453,113465,113478],{"__ignoreMap":82},[87,113454,113455,113457,113459,113461,113463],{"class":89,"line":90},[87,113456,112522],{"class":97},[87,113458,946],{"class":171},[87,113460,112527],{"class":97},[87,113462,1625],{"class":171},[87,113464,112532],{"class":97},[87,113466,113467,113470,113472,113474,113476],{"class":89,"line":101},[87,113468,113469],{"class":97},"control_cost ",[87,113471,946],{"class":171},[87,113473,112963],{"class":104},[87,113475,7468],{"class":171},[87,113477,112968],{"class":97},[87,113479,113480,113482,113484,113486,113488,113490,113492],{"class":89,"line":120},[87,113481,17995],{"class":171},[87,113483,110723],{"class":104},[87,113485,165],{"class":97},[87,113487,1625],{"class":171},[87,113489,112522],{"class":97},[87,113491,1625],{"class":171},[87,113493,112985],{"class":97},[19,113495,113496],{},"奖励由两部分组成：",[1055,113498,113499,113504],{},[29,113500,113501,113503],{},[84,113502,112549],{},"：末端离目标越远，奖励越低。",[29,113505,113506,113509],{},[84,113507,113508],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,113511,113512],{},"简单控制器：",[77,113514,113516],{"className":31325,"code":113515,"language":31327,"meta":82,"style":82},"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",[84,113517,113518,113531,113563],{"__ignoreMap":82},[87,113519,113520,113523,113525,113527,113529],{"class":89,"line":90},[87,113521,113522],{"class":97},"error ",[87,113524,946],{"class":171},[87,113526,113094],{"class":97},[87,113528,1625],{"class":171},[87,113530,113099],{"class":97},[87,113532,113533,113535,113537,113539,113541,113543,113545,113547,113549,113551,113553,113555,113557,113559,113561],{"class":89,"line":101},[87,113534,106797],{"class":97},[87,113536,111],{"class":104},[87,113538,5396],{"class":97},[87,113540,946],{"class":171},[87,113542,113116],{"class":97},[87,113544,106186],{"class":104},[87,113546,7468],{"class":171},[87,113548,113123],{"class":97},[87,113550,1176],{"class":104},[87,113552,113128],{"class":97},[87,113554,1625],{"class":171},[87,113556,103329],{"class":104},[87,113558,13385],{"class":97},[87,113560,103329],{"class":104},[87,113562,1108],{"class":97},[87,113564,113565,113567,113569,113571,113573,113575,113577,113579,113581,113583,113585,113587,113589,113591,113593],{"class":89,"line":120},[87,113566,106797],{"class":97},[87,113568,1313],{"class":104},[87,113570,5396],{"class":97},[87,113572,946],{"class":171},[87,113574,113116],{"class":97},[87,113576,106186],{"class":104},[87,113578,7468],{"class":171},[87,113580,113123],{"class":97},[87,113582,111],{"class":104},[87,113584,113128],{"class":97},[87,113586,1625],{"class":171},[87,113588,103329],{"class":104},[87,113590,13385],{"class":97},[87,113592,103329],{"class":104},[87,113594,1108],{"class":97},[19,113596,113597],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[44,113599,102634],{"id":102634},[77,113601,113602],{"className":31325,"code":113412,"language":31327,"meta":82,"style":82},[84,113603,113604],{"__ignoreMap":82},[87,113605,113606,113608,113610,113612,113614],{"class":89,"line":90},[87,113607,32894],{"class":171},[87,113609,112782],{"class":205},[87,113611,112785],{"class":97},[87,113613,2259],{"class":104},[87,113615,112790],{"class":97},[19,113617,113618,113619,113621,113622,83465,113624,29332],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[84,113620,80736],{}," 是 site 的名字，比如 ",[84,113623,112462],{},[84,113625,112885],{},[77,113627,113629],{"className":31325,"code":113628,"language":31327,"meta":82,"style":82},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[84,113630,113631],{"__ignoreMap":82},[87,113632,113633,113635,113637],{"class":89,"line":90},[87,113634,104560],{"class":97},[87,113636,946],{"class":171},[87,113638,112799],{"class":97},[19,113640,113641],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[77,113643,113645],{"className":31325,"code":113644,"language":31327,"meta":82,"style":82},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[84,113646,113647,113659],{"__ignoreMap":82},[87,113648,113649,113651,113653,113655,113657],{"class":89,"line":90},[87,113650,2488],{"class":171},[87,113652,104375],{"class":97},[87,113654,938],{"class":171},[87,113656,577],{"class":104},[87,113658,4693],{"class":97},[87,113660,113661,113663,113665,113667,113669,113671,113673,113675,113677,113679],{"class":89,"line":101},[87,113662,104821],{"class":171},[87,113664,104361],{"class":104},[87,113666,165],{"class":97},[87,113668,1152],{"class":171},[87,113670,112824],{"class":949},[87,113672,1988],{"class":104},[87,113674,80736],{"class":97},[87,113676,2037],{"class":104},[87,113678,1347],{"class":949},[87,113680,1108],{"class":97},[19,113682,113683,113684,113687,113688,113690],{},"如果 site 没找到，就主动报错。",[84,113685,113686],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[84,113689,80736],{}," 的值放进字符串里。",[77,113692,113694],{"className":31325,"code":113693,"language":31327,"meta":82,"style":82},"return data.site_xpos[site_id].copy()\n",[84,113695,113696],{"__ignoreMap":82},[87,113697,113698,113700],{"class":89,"line":90},[87,113699,17995],{"class":171},[87,113701,112841],{"class":97},[19,113703,113704,113705,113707,113708,113711],{},"返回这个 site 的世界坐标。",[84,113706,104606],{}," 里的每一行都是一个 site 的 ",[84,113709,113710],{},"(x, y, z)"," 坐标。",[77,113713,113715],{"className":31325,"code":113714,"language":31327,"meta":82,"style":82},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[84,113716,113717],{"__ignoreMap":82},[87,113718,113719,113721,113723],{"class":89,"line":90},[87,113720,32894],{"class":171},[87,113722,112856],{"class":205},[87,113724,112859],{"class":97},[19,113726,113727],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[77,113729,113731],{"className":31325,"code":113730,"language":31327,"meta":82,"style":82},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[84,113732,113733,113745],{"__ignoreMap":82},[87,113734,113735,113737,113739,113741,113743],{"class":89,"line":90},[87,113736,112494],{"class":97},[87,113738,946],{"class":171},[87,113740,112869],{"class":97},[87,113742,112462],{"class":949},[87,113744,1108],{"class":97},[87,113746,113747,113749,113751,113753,113755],{"class":89,"line":101},[87,113748,112504],{"class":97},[87,113750,946],{"class":171},[87,113752,112869],{"class":97},[87,113754,112885],{"class":949},[87,113756,1108],{"class":97},[19,113758,113759],{},"分别读取末端点和目标点的世界坐标。",[77,113761,113762],{"className":31325,"code":113434,"language":31327,"meta":82,"style":82},[84,113763,113764],{"__ignoreMap":82},[87,113765,113766,113768],{"class":89,"line":90},[87,113767,17995],{"class":171},[87,113769,112894],{"class":97},[19,113771,113772],{},"把四部分拼成一个观测数组：",[77,113774,113777],{"className":113775,"code":113776,"language":599,"meta":82},[597],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[84,113778,113776],{"__ignoreMap":82},[77,113780,113782],{"className":31325,"code":113781,"language":31327,"meta":82,"style":82},"dist = np.linalg.norm(tip - target)\n",[84,113783,113784],{"__ignoreMap":82},[87,113785,113786,113788,113790,113792,113794],{"class":89,"line":90},[87,113787,112522],{"class":97},[87,113789,946],{"class":171},[87,113791,112527],{"class":97},[87,113793,1625],{"class":171},[87,113795,112532],{"class":97},[19,113797,113798,113799,113802,113803,113806],{},"计算 tip 到 target 的距离。",[84,113800,113801],{},"tip - target"," 得到一个三维向量，",[84,113804,113805],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,113808,15583],{},[77,113810,113813],{"className":113811,"code":113812,"language":599,"meta":82},[597],"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",[84,113814,113812],{"__ignoreMap":82},[77,113816,113818],{"className":31325,"code":113817,"language":31327,"meta":82,"style":82},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[84,113819,113820],{"__ignoreMap":82},[87,113821,113822,113824,113826,113828,113830],{"class":89,"line":90},[87,113823,113469],{"class":97},[87,113825,946],{"class":171},[87,113827,112963],{"class":104},[87,113829,7468],{"class":171},[87,113831,112968],{"class":97},[19,113833,113834,113835,113838,113839,113842],{},"计算动作惩罚。",[84,113836,113837],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[84,113840,113841],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[77,113844,113846],{"className":31325,"code":113845,"language":31327,"meta":82,"style":82},"return float(-dist - control_cost)\n",[84,113847,113848],{"__ignoreMap":82},[87,113849,113850,113852,113854,113856,113858,113860,113862],{"class":89,"line":90},[87,113851,17995],{"class":171},[87,113853,110723],{"class":104},[87,113855,165],{"class":97},[87,113857,1625],{"class":171},[87,113859,112522],{"class":97},[87,113861,1625],{"class":171},[87,113863,112985],{"class":97},[19,113865,113866],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[77,113868,113869],{"className":31325,"code":111729,"language":31327,"meta":82,"style":82},[84,113870,113871],{"__ignoreMap":82},[87,113872,113873,113875,113877],{"class":89,"line":90},[87,113874,111736],{"class":97},[87,113876,946],{"class":171},[87,113878,105687],{"class":104},[19,113880,113881],{},"累计奖励变量，记录整个运行过程的总分。",[77,113883,113885],{"className":31325,"code":113884,"language":31327,"meta":82,"style":82},"for step in range(500):\n",[84,113886,113887],{"__ignoreMap":82},[87,113888,113889,113891,113893,113895,113897,113899,113901],{"class":89,"line":90},[87,113890,3979],{"class":171},[87,113892,32563],{"class":97},[87,113894,26990],{"class":171},[87,113896,33390],{"class":104},[87,113898,165],{"class":97},[87,113900,839],{"class":104},[87,113902,31733],{"class":97},[19,113904,113905],{},"运行 500 个控制步。",[77,113907,113908],{"className":31325,"code":105469,"language":31327,"meta":82,"style":82},[84,113909,113910],{"__ignoreMap":82},[87,113911,113912],{"class":89,"line":90},[87,113913,105469],{"class":97},[19,113915,113916,113917,101944,113919,113921],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[84,113918,104157],{},[84,113920,104160],{}," 是当前状态下的坐标。",[77,113923,113925],{"className":31325,"code":113924,"language":31327,"meta":82,"style":82},"error = target - tip\n",[84,113926,113927],{"__ignoreMap":82},[87,113928,113929,113931,113933,113935,113937],{"class":89,"line":90},[87,113930,113522],{"class":97},[87,113932,946],{"class":171},[87,113934,113094],{"class":97},[87,113936,1625],{"class":171},[87,113938,113099],{"class":97},[19,113940,113941],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[77,113943,113945],{"className":31325,"code":113944,"language":31327,"meta":82,"style":82},"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",[84,113946,113947,113979],{"__ignoreMap":82},[87,113948,113949,113951,113953,113955,113957,113959,113961,113963,113965,113967,113969,113971,113973,113975,113977],{"class":89,"line":90},[87,113950,106797],{"class":97},[87,113952,111],{"class":104},[87,113954,5396],{"class":97},[87,113956,946],{"class":171},[87,113958,113116],{"class":97},[87,113960,106186],{"class":104},[87,113962,7468],{"class":171},[87,113964,113123],{"class":97},[87,113966,1176],{"class":104},[87,113968,113128],{"class":97},[87,113970,1625],{"class":171},[87,113972,103329],{"class":104},[87,113974,13385],{"class":97},[87,113976,103329],{"class":104},[87,113978,1108],{"class":97},[87,113980,113981,113983,113985,113987,113989,113991,113993,113995,113997,113999,114001,114003,114005,114007,114009],{"class":89,"line":101},[87,113982,106797],{"class":97},[87,113984,1313],{"class":104},[87,113986,5396],{"class":97},[87,113988,946],{"class":171},[87,113990,113116],{"class":97},[87,113992,106186],{"class":104},[87,113994,7468],{"class":171},[87,113996,113123],{"class":97},[87,113998,111],{"class":104},[87,114000,113128],{"class":97},[87,114002,1625],{"class":171},[87,114004,103329],{"class":104},[87,114006,13385],{"class":97},[87,114008,103329],{"class":104},[87,114010,1108],{"class":97},[19,114012,114013,114014,114017],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[84,114015,114016],{},"error -> ctrl -> step"," 的流程。",[77,114019,114020],{"className":31325,"code":105431,"language":31327,"meta":82,"style":82},[84,114021,114022],{"__ignoreMap":82},[87,114023,114024],{"class":89,"line":90},[87,114025,105431],{"class":97},[19,114027,114028],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[77,114030,114032],{"className":31325,"code":114031,"language":31327,"meta":82,"style":82},"obs = get_obs(model, data)\n",[84,114033,114034],{"__ignoreMap":82},[87,114035,114036,114038,114040],{"class":89,"line":90},[87,114037,111780],{"class":97},[87,114039,946],{"class":171},[87,114041,113217],{"class":97},[19,114043,114044,114045,114048],{},"读取最新观测。后面打印 ",[84,114046,114047],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114050,103242],{"id":103241},[19,114052,114053],{},"观测维度为:",[77,114055,114058],{"className":114056,"code":114057,"language":599,"meta":82},[597],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[84,114059,114057],{"__ignoreMap":82},[19,114061,114062],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,114064,114065],{},"程序每 100 步打印：",[77,114067,114070],{"className":114068,"code":114069,"language":599,"meta":82},[597],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[84,114071,114069],{"__ignoreMap":82},[19,114073,114074,114075,114077],{},"如果控制有效，你应该看到最终 ",[84,114076,104157],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114079,103274],{"id":103273},[1055,114081,114082,114085,114088,114094,114100,114107,114117],{},[29,114083,114084],{},"修改目标点位置。",[29,114086,114087],{},"重新运行，观察最终 tip 是否变化。",[29,114089,114090,114091,114093],{},"把 gravity 改成 ",[84,114092,103515],{},"，观察控制是否变差。",[29,114095,112107,114096,112111,114098,29332],{},[84,114097,103084],{},[84,114099,1176],{},[29,114101,103337,114102,103340,114104,114106],{},[84,114103,111522],{},[84,114105,108233],{},"，观察机械臂是否更难移动。",[29,114108,103337,114109,83456,114111,103340,114113,114116],{},[84,114110,104160],{},[84,114112,105072],{},[84,114114,114115],{},"0.2 0 0.6","，观察 reward 和 final tip。",[29,114118,114119],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114121,103379],{"id":103378},[44,114123,114125],{"id":114124},"site-not-found",[84,114126,114127],{},"site not found",[19,114129,114130,114131,101944,114134,29332],{},"检查 XML 中是否有 ",[84,114132,114133],{},"site name=\"tip\"",[84,114135,114136],{},"site name=\"target\"",[44,114138,114139],{"id":114139},"机械臂完全不动",[19,114141,103449],{},[1055,114143,114144,114149,114152,114157],{},[29,114145,114146,114148],{},[84,114147,103084],{}," 是否为 2",[29,114150,114151],{},"actuator 是否引用正确 joint",[29,114153,114154,114156],{},[84,114155,102002],{}," 是否被赋值",[29,114158,114159,114160],{},"是否执行了 ",[84,114161,101611],{},[44,114163,114164],{"id":114164},"控制效果不好",[19,114166,114167],{},"正常。本章重点不是控制器最优，而是任务结构:",[77,114169,114172],{"className":114170,"code":114171,"language":599,"meta":82},[597],"obs → action → mj_step → reward → next_obs\n",[84,114173,114171],{"__ignoreMap":82},[44,114175,114177],{"id":114176},"tip-坐标不变化","tip 坐标不变化",[19,114179,103501],{},[1055,114181,114182,114187,114195,114204],{},[29,114183,114184,114185,29332],{},"是否每步调用了 ",[84,114186,101611],{},[29,114188,114189,114190,101944,114192,29332],{},"是否写入了 ",[84,114191,107052],{},[84,114193,114194],{},"data.ctrl[1]",[29,114196,114197,114198,1308,114201,29332],{},"actuator 是否正确引用 ",[84,114199,114200],{},"joint1",[84,114202,114203],{},"joint2",[29,114205,114206],{},"控制输入是否太小。",[44,114208,114209],{"id":114209},"目标点不会动",[19,114211,114212],{},"本章的 target 是固定 site：",[77,114214,114216],{"className":54004,"code":114215,"language":54006,"meta":82,"style":82},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[84,114217,114218],{"__ignoreMap":82},[87,114219,114220,114222,114224,114226,114228,114230,114232,114234,114237],{"class":89,"line":90},[87,114221,938],{"class":97},[87,114223,104136],{"class":93},[87,114225,15870],{"class":205},[87,114227,946],{"class":97},[87,114229,112885],{"class":949},[87,114231,102032],{"class":205},[87,114233,946],{"class":97},[87,114235,114236],{"class":949},"\"0.5 0 0.4\"",[87,114238,114239],{"class":97}," ...\u002F>\n",[19,114241,114242,114243,114245],{},"它直接挂在 ",[84,114244,102767],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[44,114247,114248],{"id":114248},"机械臂不像真实机械臂",[19,114250,114251],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114253,103533],{"id":103532},[19,114255,114256],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114258,114259],{},"核心公式：",[77,114261,114264],{"className":114262,"code":114263,"language":599,"meta":82},[597],"distance = ||tip - target||\nreward = -distance - action_cost\n",[84,114265,114263],{"__ignoreMap":82},[19,114267,114268],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1006,114270,114271],{},"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":82,"searchDepth":101,"depth":101,"links":114273},[114274,114275,114276,114281,114285,114286,114287,114295],{"id":101572,"depth":101,"text":101573},{"id":101695,"depth":101,"text":101696},{"id":101970,"depth":101,"text":101971,"children":114277},[114278,114279,114280],{"id":112477,"depth":120,"text":112478},{"id":112553,"depth":120,"text":112553},{"id":112583,"depth":120,"text":112584},{"id":102178,"depth":101,"text":102179,"children":114282},[114283,114284],{"id":102498,"depth":120,"text":102498},{"id":102634,"depth":120,"text":102634},{"id":103241,"depth":101,"text":103242},{"id":103273,"depth":101,"text":103274},{"id":103378,"depth":101,"text":103379,"children":114288},[114289,114290,114291,114292,114293,114294],{"id":114124,"depth":120,"text":114127},{"id":114139,"depth":120,"text":114139},{"id":114164,"depth":120,"text":114164},{"id":114176,"depth":120,"text":114177},{"id":114209,"depth":120,"text":114209},{"id":114248,"depth":120,"text":114248},{"id":103532,"depth":101,"text":103533},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112281,"description":82},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114302,"title":114303,"body":114304,"description":82,"extension":1027,"meta":117766,"navigation":1029,"path":117767,"seo":117768,"stem":117769,"__hash__":117770},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114305,"toc":117737},[114306,114309,114311,114314,114317,114342,114345,114351,114354,114360,114362,114364,114388,114390,114408,114410,114453,114455,114482,114484,114487,114539,114542,114548,114557,114560,114598,114601,114640,114643,114651,114658,114661,114667,114669,114723,114730,114775,114778,114782,114798,114808,114810,116071,116073,116085,116087,116098,116100,116103,116124,116127,116130,116163,116169,116172,116205,116208,116211,116252,116257,116271,116274,116287,116292,116315,116317,116332,116342,116357,116364,116384,116399,116417,116420,116437,116445,116461,116467,116499,116512,116544,116554,116589,116603,116649,116663,116705,116716,116729,116735,116768,116771,116798,116808,116848,116858,116875,116882,116900,116903,116944,116957,116972,116975,116998,117001,117013,117016,117035,117040,117061,117064,117079,117082,117116,117128,117143,117146,117171,117174,117193,117196,117228,117231,117255,117261,117291,117298,117311,117314,117316,117318,117324,117327,117330,117342,117345,117347,117401,117403,117407,117413,117422,117425,117432,117434,117457,117460,117464,117466,117484,117490,117492,117525,117528,117534,117538,117541,117561,117566,117570,117577,117597,117602,117606,117609,117629,117632,117718,117722,117725,117731,117734],[10,114307,114303],{"id":114308},"_8gymnasium-风格强化学习接口基础",[14,114310,101573],{"id":101572},[19,114312,114313],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,114315,114316],{},"你将实现:",[77,114318,114320],{"className":31325,"code":114319,"language":31327,"meta":82,"style":82},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[84,114321,114322,114332],{"__ignoreMap":82},[87,114323,114324,114327,114329],{"class":89,"line":90},[87,114325,114326],{"class":97},"obs, info ",[87,114328,946],{"class":171},[87,114330,114331],{"class":97}," env.reset()\n",[87,114333,114334,114337,114339],{"class":89,"line":101},[87,114335,114336],{"class":97},"obs, reward, terminated, truncated, info ",[87,114338,946],{"class":171},[87,114340,114341],{"class":97}," env.step(action)\n",[19,114343,114344],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,114346,114347,114348,114350],{},"前面章节的代码都是“脚本式”的：在 ",[84,114349,103221],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,114352,114353],{},"可以先记住 Gymnasium 环境的核心交互：",[77,114355,114358],{"className":114356,"code":114357,"language":599,"meta":82},[597],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[84,114359,114357],{"__ignoreMap":82},[14,114361,101696],{"id":101695},[19,114363,101699],{},[77,114365,114366],{"className":24769,"code":105314,"language":24771,"meta":82,"style":82},[84,114367,114368],{"__ignoreMap":82},[87,114369,114370,114372,114374,114376,114378,114380,114382,114384,114386],{"class":89,"line":90},[87,114371,25524],{"class":205},[87,114373,27262],{"class":949},[87,114375,24781],{"class":949},[87,114377,27347],{"class":104},[87,114379,105329],{"class":949},[87,114381,101724],{"class":949},[87,114383,103427],{"class":949},[87,114385,101740],{"class":949},[87,114387,105338],{"class":949},[19,114389,103745],{},[77,114391,114393],{"className":24769,"code":114392,"language":24771,"meta":82,"style":82},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[84,114394,114395],{"__ignoreMap":82},[87,114396,114397,114399,114401,114403,114405],{"class":89,"line":90},[87,114398,24778],{"class":205},[87,114400,24781],{"class":949},[87,114402,101856],{"class":949},[87,114404,108637],{"class":949},[87,114406,114407],{"class":949}," gymnasium\n",[19,114409,103762],{},[77,114411,114413],{"className":24769,"code":114412,"language":24771,"meta":82,"style":82},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[84,114414,114415,114432,114441],{"__ignoreMap":82},[87,114416,114417,114419,114421,114423,114426,114428,114430],{"class":89,"line":90},[87,114418,31277],{"class":205},[87,114420,30123],{"class":949},[87,114422,26063],{"class":104},[87,114424,114425],{"class":949}," mujoco-gym-api",[87,114427,101901],{"class":949},[87,114429,101904],{"class":104},[87,114431,101907],{"class":104},[87,114433,114434,114436,114438],{"class":89,"line":101},[87,114435,31277],{"class":205},[87,114437,101914],{"class":949},[87,114439,114440],{"class":949}," mujoco-gym-api\n",[87,114442,114443,114445,114447,114449,114451],{"class":89,"line":120},[87,114444,24778],{"class":205},[87,114446,24781],{"class":949},[87,114448,101856],{"class":949},[87,114450,108637],{"class":949},[87,114452,114407],{"class":949},[19,114454,101930],{},[1055,114456,114457,114467,114470,114476],{},[29,114458,114459,114460,114463,114464,29332],{},"本章使用 ",[84,114461,114462],{},"gymnasium","，不是旧版 ",[84,114465,114466],{},"gym",[29,114468,114469],{},"Gymnasium API 与旧 Gym API 有差异。",[29,114471,114472,114473,29332],{},"旧 Gym 常见返回值是 4 个: ",[84,114474,114475],{},"obs, reward, done, info",[29,114477,114478,114479,29332],{},"Gymnasium 返回值是 5 个: ",[84,114480,114481],{},"obs, reward, terminated, truncated, info",[14,114483,101971],{"id":101970},[19,114485,114486],{},"强化学习环境接口包含:",[1235,114488,114489,114498],{},[1238,114490,114491],{},[1241,114492,114493,114496],{},[1244,114494,114495],{"align":24683},"方法",[1244,114497,103622],{"align":24683},[1281,114499,114500,114510,114520,114530],{},[1241,114501,114502,114507],{},[1286,114503,114504],{"align":24683},[84,114505,114506],{},"reset()",[1286,114508,114509],{"align":24683},"重置环境",[1241,114511,114512,114517],{},[1286,114513,114514],{"align":24683},[84,114515,114516],{},"step(action)",[1286,114518,114519],{"align":24683},"执行动作",[1241,114521,114522,114527],{},[1286,114523,114524],{"align":24683},[84,114525,114526],{},"observation_space",[1286,114528,114529],{"align":24683},"观测空间",[1241,114531,114532,114537],{},[1286,114533,114534],{"align":24683},[84,114535,114536],{},"action_space",[1286,114538,24601],{"align":24683},[19,114540,114541],{},"一个最小环境需要完成:",[77,114543,114546],{"className":114544,"code":114545,"language":599,"meta":82},[597],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[84,114547,114545],{"__ignoreMap":82},[44,114549,114551,101944,114554,105564],{"id":114550},"terminated-和-truncated-的区别",[84,114552,114553],{},"terminated",[84,114555,114556],{},"truncated",[19,114558,114559],{},"Gymnasium 把“结束”拆成两个概念：",[1235,114561,114562,114572],{},[1238,114563,114564],{},[1241,114565,114566,114568,114570],{},[1244,114567,105500],{"align":24683},[1244,114569,101626],{"align":24683},[1244,114571,22135],{"align":24683},[1281,114573,114574,114586],{},[1241,114575,114576,114580,114583],{},[1286,114577,114578],{"align":24683},[84,114579,114553],{},[1286,114581,114582],{"align":24683},"任务自然结束",[1286,114584,114585],{"align":24683},"机械臂到达目标、机器人摔倒",[1241,114587,114588,114592,114595],{},[1286,114589,114590],{"align":24683},[84,114591,114556],{},[1286,114593,114594],{"align":24683},"因外部限制截断",[1286,114596,114597],{"align":24683},"达到最大步数、时间限制",[19,114599,114600],{},"本章中：",[77,114602,114604],{"className":31325,"code":114603,"language":31327,"meta":82,"style":82},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[84,114605,114606,114621],{"__ignoreMap":82},[87,114607,114608,114611,114613,114616,114618],{"class":89,"line":90},[87,114609,114610],{"class":97},"terminated ",[87,114612,946],{"class":171},[87,114614,114615],{"class":97}," dist ",[87,114617,938],{"class":171},[87,114619,114620],{"class":104}," 0.05\n",[87,114622,114623,114626,114628,114630,114633,114635,114637],{"class":89,"line":101},[87,114624,114625],{"class":97},"truncated ",[87,114627,946],{"class":171},[87,114629,39820],{"class":104},[87,114631,114632],{"class":97},".steps ",[87,114634,2666],{"class":171},[87,114636,39820],{"class":104},[87,114638,114639],{"class":97},".max_steps\n",[19,114641,114642],{},"也就是：",[1055,114644,114645,114648],{},[29,114646,114647],{},"末端距离目标小于 0.05，任务成功结束。",[29,114649,114650],{},"步数超过上限，episode 被截断。",[44,114652,114654,101944,114656],{"id":114653},"observation_space-和-action_space",[84,114655,114526],{},[84,114657,114536],{},[19,114659,114660],{},"这两个对象告诉算法：",[77,114662,114665],{"className":114663,"code":114664,"language":599,"meta":82},[597],"观测长什么样\n动作允许多大\n",[84,114666,114664],{"__ignoreMap":82},[19,114668,15583],{},[77,114670,114672],{"className":31325,"code":114671,"language":31327,"meta":82,"style":82},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[84,114673,114674],{"__ignoreMap":82},[87,114675,114676,114678,114681,114683,114686,114689,114692,114694,114696,114699,114701,114703,114705,114707,114709,114711,114713,114716,114718,114720],{"class":89,"line":90},[87,114677,31770],{"class":104},[87,114679,114680],{"class":97},".action_space ",[87,114682,946],{"class":171},[87,114684,114685],{"class":97}," spaces.Box(",[87,114687,114688],{"class":492},"low",[87,114690,114691],{"class":171},"=-",[87,114693,103329],{"class":104},[87,114695,13385],{"class":97},[87,114697,114698],{"class":492},"high",[87,114700,946],{"class":171},[87,114702,103329],{"class":104},[87,114704,13385],{"class":97},[87,114706,96889],{"class":492},[87,114708,946],{"class":171},[87,114710,165],{"class":97},[87,114712,1176],{"class":104},[87,114714,114715],{"class":97},",), ",[87,114717,94426],{"class":492},[87,114719,946],{"class":171},[87,114721,114722],{"class":97},"np.float32)\n",[19,114724,114725,114726,114729],{},"表示动作是 2 维数组，每个值都在 ",[84,114727,114728],{},"[-1, 1]"," 范围内。",[77,114731,114733],{"className":31325,"code":114732,"language":31327,"meta":82,"style":82},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[84,114734,114735],{"__ignoreMap":82},[87,114736,114737,114739,114742,114744,114746,114748,114750,114753,114755,114757,114759,114761,114763,114765,114767,114769,114771,114773],{"class":89,"line":90},[87,114738,31770],{"class":104},[87,114740,114741],{"class":97},".observation_space ",[87,114743,946],{"class":171},[87,114745,114685],{"class":97},[87,114747,114688],{"class":492},[87,114749,114691],{"class":171},[87,114751,114752],{"class":97},"np.inf, ",[87,114754,114698],{"class":492},[87,114756,946],{"class":171},[87,114758,114752],{"class":97},[87,114760,96889],{"class":492},[87,114762,946],{"class":171},[87,114764,165],{"class":97},[87,114766,242],{"class":104},[87,114768,114715],{"class":97},[87,114770,94426],{"class":492},[87,114772,946],{"class":171},[87,114774,114722],{"class":97},[19,114776,114777],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[44,114779,114781],{"id":114780},"frame_skip-是什么","frame_skip 是什么",[77,114783,114785],{"className":31325,"code":114784,"language":31327,"meta":82,"style":82},"self.frame_skip = 5\n",[84,114786,114787],{"__ignoreMap":82},[87,114788,114789,114791,114794,114796],{"class":89,"line":90},[87,114790,31770],{"class":104},[87,114792,114793],{"class":97},".frame_skip ",[87,114795,946],{"class":171},[87,114797,55363],{"class":104},[19,114799,114800,114801,114804,114805,114807],{},"表示外部调用一次 ",[84,114802,114803],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[84,114806,102141],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114809,102179],{"id":102178},[77,114811,114813],{"className":31325,"code":114812,"language":31327,"meta":82,"style":82},"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",[84,114814,114815,114827,114833,114843,114854,114858,114862,114870,114875,114879,114883,114887,114891,114895,114899,114903,114908,114912,114916,114920,114925,114929,114933,114937,114941,114945,114949,114953,114957,114961,114965,114969,114973,114977,114995,115010,115014,115027,115037,115052,115069,115073,115094,115113,115138,115152,115156,115166,115178,115188,115192,115234,115272,115276,115286,115302,115317,115336,115343,115347,115360,115375,115390,115403,115422,115438,115442,115483,115498,115513,115517,115556,115567,115580,115584,115594,115603,115607,115617,115632,115650,115654,115665,115682,115695,115699,115709,115713,115724,115735,115739,115753,115767,115783,115787,115800,115817,115832,115839,115843,115847,115859,115869,115887,115899,115911,115915,115923,115939,115948,115957,115965,116007,116020,116025,116029,116047,116051,116055,116067],{"__ignoreMap":82},[87,114816,114817,114819,114822,114824],{"class":89,"line":90},[87,114818,31339],{"class":171},[87,114820,114821],{"class":97}," gymnasium ",[87,114823,32330],{"class":171},[87,114825,114826],{"class":97}," gym\n",[87,114828,114829,114831],{"class":89,"line":101},[87,114830,31339],{"class":171},[87,114832,102227],{"class":97},[87,114834,114835,114837,114839,114841],{"class":89,"line":120},[87,114836,31339],{"class":171},[87,114838,32327],{"class":97},[87,114840,32330],{"class":171},[87,114842,32333],{"class":97},[87,114844,114845,114847,114849,114851],{"class":89,"line":222},[87,114846,31684],{"class":171},[87,114848,114821],{"class":97},[87,114850,31339],{"class":171},[87,114852,114853],{"class":97}," spaces\n",[87,114855,114856],{"class":89,"line":234},[87,114857,3355],{"emptyLinePlaceholder":1029},[87,114859,114860],{"class":89,"line":256},[87,114861,3355],{"emptyLinePlaceholder":1029},[87,114863,114864,114866,114868],{"class":89,"line":269},[87,114865,102240],{"class":104},[87,114867,14514],{"class":171},[87,114869,102245],{"class":949},[87,114871,114872],{"class":89,"line":463},[87,114873,114874],{"class":949},"\u003Cmujoco model=\"gym_reacher\">\n",[87,114876,114877],{"class":89,"line":469},[87,114878,112664],{"class":949},[87,114880,114881],{"class":89,"line":2287},[87,114882,3355],{"emptyLinePlaceholder":1029},[87,114884,114885],{"class":89,"line":2568},[87,114886,102264],{"class":949},[87,114888,114889],{"class":89,"line":2573},[87,114890,112682],{"class":949},[87,114892,114893],{"class":89,"line":2579},[87,114894,3355],{"emptyLinePlaceholder":1029},[87,114896,114897],{"class":89,"line":2584},[87,114898,112691],{"class":949},[87,114900,114901],{"class":89,"line":2598},[87,114902,112696],{"class":949},[87,114904,114905],{"class":89,"line":2603},[87,114906,114907],{"class":949},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[87,114909,114910],{"class":89,"line":2609},[87,114911,3355],{"emptyLinePlaceholder":1029},[87,114913,114914],{"class":89,"line":2630},[87,114915,112710],{"class":949},[87,114917,114918],{"class":89,"line":2635},[87,114919,112715],{"class":949},[87,114921,114922],{"class":89,"line":2649},[87,114923,114924],{"class":949},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[87,114926,114927],{"class":89,"line":2654},[87,114928,112725],{"class":949},[87,114930,114931],{"class":89,"line":2683},[87,114932,107364],{"class":949},[87,114934,114935],{"class":89,"line":2688},[87,114936,102293],{"class":949},[87,114938,114939],{"class":89,"line":2705},[87,114940,102298],{"class":949},[87,114942,114943],{"class":89,"line":2710},[87,114944,3355],{"emptyLinePlaceholder":1029},[87,114946,114947],{"class":89,"line":2715},[87,114948,107381],{"class":949},[87,114950,114951],{"class":89,"line":2720},[87,114952,112750],{"class":949},[87,114954,114955],{"class":89,"line":2734},[87,114956,112755],{"class":949},[87,114958,114959],{"class":89,"line":2739},[87,114960,107391],{"class":949},[87,114962,114963],{"class":89,"line":3532},[87,114964,102303],{"class":949},[87,114966,114967],{"class":89,"line":3546},[87,114968,96624],{"class":949},[87,114970,114971],{"class":89,"line":3554},[87,114972,3355],{"emptyLinePlaceholder":1029},[87,114974,114975],{"class":89,"line":3559},[87,114976,3355],{"emptyLinePlaceholder":1029},[87,114978,114979,114981,114984,114986,114988,114990,114993],{"class":89,"line":3565},[87,114980,15644],{"class":171},[87,114982,114983],{"class":205}," ReacherEnv",[87,114985,165],{"class":97},[87,114987,114466],{"class":205},[87,114989,1651],{"class":97},[87,114991,114992],{"class":205},"Env",[87,114994,31733],{"class":97},[87,114996,114997,115000,115002,115004,115007],{"class":89,"line":3571},[87,114998,114999],{"class":97},"    metadata ",[87,115001,946],{"class":171},[87,115003,5401],{"class":97},[87,115005,115006],{"class":949},"\"render_modes\"",[87,115008,115009],{"class":97},": []}\n",[87,115011,115012],{"class":89,"line":3576},[87,115013,3355],{"emptyLinePlaceholder":1029},[87,115015,115016,115018,115020,115023,115025],{"class":89,"line":8898},[87,115017,31748],{"class":171},[87,115019,31751],{"class":104},[87,115021,115022],{"class":97},"(self) -> ",[87,115024,96612],{"class":104},[87,115026,4693],{"class":97},[87,115028,115029,115031,115033,115035],{"class":89,"line":8922},[87,115030,31764],{"class":104},[87,115032,18209],{"class":97},[87,115034,31776],{"class":104},[87,115036,2931],{"class":97},[87,115038,115039,115041,115044,115046,115048,115050],{"class":89,"line":8927},[87,115040,31792],{"class":104},[87,115042,115043],{"class":97},".model ",[87,115045,946],{"class":171},[87,115047,102338],{"class":97},[87,115049,102240],{"class":104},[87,115051,1108],{"class":97},[87,115053,115054,115056,115059,115061,115064,115066],{"class":89,"line":8933},[87,115055,31792],{"class":104},[87,115057,115058],{"class":97},".data ",[87,115060,946],{"class":171},[87,115062,115063],{"class":97}," mujoco.MjData(",[87,115065,31770],{"class":104},[87,115067,115068],{"class":97},".model)\n",[87,115070,115071],{"class":89,"line":8960},[87,115072,3355],{"emptyLinePlaceholder":1029},[87,115074,115075,115077,115080,115082,115085,115087,115090,115092],{"class":89,"line":8965},[87,115076,31792],{"class":104},[87,115078,115079],{"class":97},".tip_site_id ",[87,115081,946],{"class":171},[87,115083,115084],{"class":97}," mujoco.mj_name2id(",[87,115086,31770],{"class":104},[87,115088,115089],{"class":97},".model, mujoco.mjtObj.mjOBJ_SITE, ",[87,115091,112462],{"class":949},[87,115093,1108],{"class":97},[87,115095,115096,115098,115101,115103,115105,115107,115109,115111],{"class":89,"line":8971},[87,115097,31792],{"class":104},[87,115099,115100],{"class":97},".target_site_id ",[87,115102,946],{"class":171},[87,115104,115084],{"class":97},[87,115106,31770],{"class":104},[87,115108,115089],{"class":97},[87,115110,112885],{"class":949},[87,115112,1108],{"class":97},[87,115114,115115,115117,115119,115121,115123,115125,115128,115130,115132,115134,115136],{"class":89,"line":8983},[87,115116,3452],{"class":171},[87,115118,39820],{"class":104},[87,115120,115079],{"class":97},[87,115122,938],{"class":171},[87,115124,577],{"class":104},[87,115126,115127],{"class":171}," or",[87,115129,39820],{"class":104},[87,115131,115100],{"class":97},[87,115133,938],{"class":171},[87,115135,577],{"class":104},[87,115137,4693],{"class":97},[87,115139,115140,115143,115145,115147,115150],{"class":89,"line":8995},[87,115141,115142],{"class":171},"            raise",[87,115144,104361],{"class":104},[87,115146,165],{"class":97},[87,115148,115149],{"class":949},"\"required sites not found\"",[87,115151,1108],{"class":97},[87,115153,115154],{"class":89,"line":9007},[87,115155,3355],{"emptyLinePlaceholder":1029},[87,115157,115158,115160,115162,115164],{"class":89,"line":10666},[87,115159,31792],{"class":104},[87,115161,114793],{"class":97},[87,115163,946],{"class":171},[87,115165,55363],{"class":104},[87,115167,115168,115170,115173,115175],{"class":89,"line":10691},[87,115169,31792],{"class":104},[87,115171,115172],{"class":97},".max_steps ",[87,115174,946],{"class":171},[87,115176,115177],{"class":104}," 200\n",[87,115179,115180,115182,115184,115186],{"class":89,"line":10714},[87,115181,31792],{"class":104},[87,115183,114632],{"class":97},[87,115185,946],{"class":171},[87,115187,48280],{"class":104},[87,115189,115190],{"class":89,"line":10738},[87,115191,3355],{"emptyLinePlaceholder":1029},[87,115193,115194,115196,115198,115200,115202,115204,115206,115208,115210,115212,115214,115216,115218,115220,115222,115224,115226,115228,115230,115232],{"class":89,"line":10743},[87,115195,31792],{"class":104},[87,115197,114680],{"class":97},[87,115199,946],{"class":171},[87,115201,114685],{"class":97},[87,115203,114688],{"class":492},[87,115205,114691],{"class":171},[87,115207,103329],{"class":104},[87,115209,13385],{"class":97},[87,115211,114698],{"class":492},[87,115213,946],{"class":171},[87,115215,103329],{"class":104},[87,115217,13385],{"class":97},[87,115219,96889],{"class":492},[87,115221,946],{"class":171},[87,115223,165],{"class":97},[87,115225,1176],{"class":104},[87,115227,114715],{"class":97},[87,115229,94426],{"class":492},[87,115231,946],{"class":171},[87,115233,114722],{"class":97},[87,115235,115236,115238,115240,115242,115244,115246,115248,115250,115252,115254,115256,115258,115260,115262,115264,115266,115268,115270],{"class":89,"line":10748},[87,115237,31792],{"class":104},[87,115239,114741],{"class":97},[87,115241,946],{"class":171},[87,115243,114685],{"class":97},[87,115245,114688],{"class":492},[87,115247,114691],{"class":171},[87,115249,114752],{"class":97},[87,115251,114698],{"class":492},[87,115253,946],{"class":171},[87,115255,114752],{"class":97},[87,115257,96889],{"class":492},[87,115259,946],{"class":171},[87,115261,165],{"class":97},[87,115263,242],{"class":104},[87,115265,114715],{"class":97},[87,115267,94426],{"class":492},[87,115269,946],{"class":171},[87,115271,114722],{"class":97},[87,115273,115274],{"class":89,"line":10753},[87,115275,3355],{"emptyLinePlaceholder":1029},[87,115277,115278,115280,115283],{"class":89,"line":10762},[87,115279,31748],{"class":171},[87,115281,115282],{"class":205}," _get_obs",[87,115284,115285],{"class":97},"(self) -> np.ndarray:\n",[87,115287,115288,115290,115292,115294,115297,115299],{"class":89,"line":10767},[87,115289,113063],{"class":97},[87,115291,946],{"class":171},[87,115293,39820],{"class":104},[87,115295,115296],{"class":97},".data.site_xpos[",[87,115298,31770],{"class":104},[87,115300,115301],{"class":97},".tip_site_id].copy()\n",[87,115303,115304,115306,115308,115310,115312,115314],{"class":89,"line":10773},[87,115305,113076],{"class":97},[87,115307,946],{"class":171},[87,115309,39820],{"class":104},[87,115311,115296],{"class":97},[87,115313,31770],{"class":104},[87,115315,115316],{"class":97},".target_site_id].copy()\n",[87,115318,115319,115321,115323,115326,115328,115331,115333],{"class":89,"line":10794},[87,115320,111108],{"class":97},[87,115322,946],{"class":171},[87,115324,115325],{"class":97}," np.concatenate([",[87,115327,31770],{"class":104},[87,115329,115330],{"class":97},".data.qpos.copy(), ",[87,115332,31770],{"class":104},[87,115334,115335],{"class":97},".data.qvel.copy(), tip, target])\n",[87,115337,115338,115340],{"class":89,"line":10800},[87,115339,15702],{"class":171},[87,115341,115342],{"class":97}," obs.astype(np.float32)\n",[87,115344,115345],{"class":89,"line":10814},[87,115346,3355],{"emptyLinePlaceholder":1029},[87,115348,115349,115351,115354,115356,115358],{"class":89,"line":10820},[87,115350,31748],{"class":171},[87,115352,115353],{"class":205}," _get_reward",[87,115355,115022],{"class":97},[87,115357,1141],{"class":104},[87,115359,4693],{"class":97},[87,115361,115362,115364,115366,115368,115370,115372],{"class":89,"line":10847},[87,115363,113063],{"class":97},[87,115365,946],{"class":171},[87,115367,39820],{"class":104},[87,115369,115296],{"class":97},[87,115371,31770],{"class":104},[87,115373,115374],{"class":97},".tip_site_id]\n",[87,115376,115377,115379,115381,115383,115385,115387],{"class":89,"line":10856},[87,115378,113076],{"class":97},[87,115380,946],{"class":171},[87,115382,39820],{"class":104},[87,115384,115296],{"class":97},[87,115386,31770],{"class":104},[87,115388,115389],{"class":97},".target_site_id]\n",[87,115391,115392,115395,115397,115399,115401],{"class":89,"line":10862},[87,115393,115394],{"class":97},"        dist ",[87,115396,946],{"class":171},[87,115398,112527],{"class":97},[87,115400,1625],{"class":171},[87,115402,112532],{"class":97},[87,115404,115405,115408,115410,115412,115414,115417,115419],{"class":89,"line":10870},[87,115406,115407],{"class":97},"        control_cost ",[87,115409,946],{"class":171},[87,115411,112963],{"class":104},[87,115413,7468],{"class":171},[87,115415,115416],{"class":97}," np.sum(np.square(",[87,115418,31770],{"class":104},[87,115420,115421],{"class":97},".data.ctrl))\n",[87,115423,115424,115426,115428,115430,115432,115434,115436],{"class":89,"line":10875},[87,115425,15702],{"class":171},[87,115427,110723],{"class":104},[87,115429,165],{"class":97},[87,115431,1625],{"class":171},[87,115433,112522],{"class":97},[87,115435,1625],{"class":171},[87,115437,112985],{"class":97},[87,115439,115440],{"class":89,"line":17553},[87,115441,3355],{"emptyLinePlaceholder":1029},[87,115443,115444,115446,115449,115452,115454,115457,115459,115461,115463,115465,115467,115470,115473,115475,115477,115479,115481],{"class":89,"line":17559},[87,115445,31748],{"class":171},[87,115447,115448],{"class":205}," reset",[87,115450,115451],{"class":97},"(self, ",[87,115453,1549],{"class":171},[87,115455,115456],{"class":97},", seed: ",[87,115458,1105],{"class":104},[87,115460,26057],{"class":171},[87,115462,39880],{"class":104},[87,115464,14514],{"class":171},[87,115466,39880],{"class":104},[87,115468,115469],{"class":97},", options: ",[87,115471,115472],{"class":104},"dict",[87,115474,26057],{"class":171},[87,115476,39880],{"class":104},[87,115478,14514],{"class":171},[87,115480,39880],{"class":104},[87,115482,31733],{"class":97},[87,115484,115485,115487,115490,115493,115495],{"class":89,"line":17582},[87,115486,31764],{"class":104},[87,115488,115489],{"class":97},"().reset(",[87,115491,115492],{"class":492},"seed",[87,115494,946],{"class":171},[87,115496,115497],{"class":97},"seed)\n",[87,115499,115500,115503,115505,115508,115510],{"class":89,"line":17588},[87,115501,115502],{"class":97},"        mujoco.mj_resetData(",[87,115504,31770],{"class":104},[87,115506,115507],{"class":97},".model, ",[87,115509,31770],{"class":104},[87,115511,115512],{"class":97},".data)\n",[87,115514,115515],{"class":89,"line":17611},[87,115516,3355],{"emptyLinePlaceholder":1029},[87,115518,115519,115521,115524,115526,115528,115531,115533,115535,115537,115539,115541,115543,115545,115547,115549,115551,115553],{"class":89,"line":17625},[87,115520,31792],{"class":104},[87,115522,115523],{"class":97},".data.qpos[:] ",[87,115525,946],{"class":171},[87,115527,39820],{"class":104},[87,115529,115530],{"class":97},".np_random.uniform(",[87,115532,114688],{"class":492},[87,115534,114691],{"class":171},[87,115536,87136],{"class":104},[87,115538,13385],{"class":97},[87,115540,114698],{"class":492},[87,115542,946],{"class":171},[87,115544,87136],{"class":104},[87,115546,13385],{"class":97},[87,115548,32443],{"class":492},[87,115550,946],{"class":171},[87,115552,31770],{"class":104},[87,115554,115555],{"class":97},".model.nq)\n",[87,115557,115558,115560,115563,115565],{"class":89,"line":17645},[87,115559,31792],{"class":104},[87,115561,115562],{"class":97},".data.qvel[:] ",[87,115564,946],{"class":171},[87,115566,105687],{"class":104},[87,115568,115569,115572,115574,115576,115578],{"class":89,"line":17651},[87,115570,115571],{"class":97},"        mujoco.mj_forward(",[87,115573,31770],{"class":104},[87,115575,115507],{"class":97},[87,115577,31770],{"class":104},[87,115579,115512],{"class":97},[87,115581,115582],{"class":89,"line":17662},[87,115583,3355],{"emptyLinePlaceholder":1029},[87,115585,115586,115588,115590,115592],{"class":89,"line":17685},[87,115587,31792],{"class":104},[87,115589,114632],{"class":97},[87,115591,946],{"class":171},[87,115593,48280],{"class":104},[87,115595,115596,115598,115600],{"class":89,"line":17707},[87,115597,15702],{"class":171},[87,115599,39820],{"class":104},[87,115601,115602],{"class":97},"._get_obs(), {}\n",[87,115604,115605],{"class":89,"line":17712},[87,115606,3355],{"emptyLinePlaceholder":1029},[87,115608,115609,115611,115614],{"class":89,"line":17718},[87,115610,31748],{"class":171},[87,115612,115613],{"class":205}," step",[87,115615,115616],{"class":97},"(self, action):\n",[87,115618,115619,115621,115623,115626,115628,115630],{"class":89,"line":17732},[87,115620,111148],{"class":97},[87,115622,946],{"class":171},[87,115624,115625],{"class":97}," np.asarray(action, ",[87,115627,94426],{"class":492},[87,115629,946],{"class":171},[87,115631,114722],{"class":97},[87,115633,115634,115636,115638,115640,115642,115645,115647],{"class":89,"line":17745},[87,115635,111148],{"class":97},[87,115637,946],{"class":171},[87,115639,108373],{"class":97},[87,115641,31770],{"class":104},[87,115643,115644],{"class":97},".action_space.low, ",[87,115646,31770],{"class":104},[87,115648,115649],{"class":97},".action_space.high)\n",[87,115651,115652],{"class":89,"line":17750},[87,115653,3355],{"emptyLinePlaceholder":1029},[87,115655,115656,115658,115661,115663],{"class":89,"line":17764},[87,115657,31792],{"class":104},[87,115659,115660],{"class":97},".data.ctrl[:] ",[87,115662,946],{"class":171},[87,115664,108396],{"class":97},[87,115666,115667,115669,115671,115673,115675,115677,115679],{"class":89,"line":17769},[87,115668,4357],{"class":171},[87,115670,102427],{"class":97},[87,115672,26990],{"class":171},[87,115674,33390],{"class":104},[87,115676,165],{"class":97},[87,115678,31770],{"class":104},[87,115680,115681],{"class":97},".frame_skip):\n",[87,115683,115684,115687,115689,115691,115693],{"class":89,"line":17775},[87,115685,115686],{"class":97},"            mujoco.mj_step(",[87,115688,31770],{"class":104},[87,115690,115507],{"class":97},[87,115692,31770],{"class":104},[87,115694,115512],{"class":97},[87,115696,115697],{"class":89,"line":17780},[87,115698,3355],{"emptyLinePlaceholder":1029},[87,115700,115701,115703,115705,115707],{"class":89,"line":17794},[87,115702,31792],{"class":104},[87,115704,114632],{"class":97},[87,115706,10427],{"class":171},[87,115708,56635],{"class":104},[87,115710,115711],{"class":89,"line":17799},[87,115712,3355],{"emptyLinePlaceholder":1029},[87,115714,115715,115717,115719,115721],{"class":89,"line":17804},[87,115716,111108],{"class":97},[87,115718,946],{"class":171},[87,115720,39820],{"class":104},[87,115722,115723],{"class":97},"._get_obs()\n",[87,115725,115726,115728,115730,115732],{"class":89,"line":17818},[87,115727,111213],{"class":97},[87,115729,946],{"class":171},[87,115731,39820],{"class":104},[87,115733,115734],{"class":97},"._get_reward()\n",[87,115736,115737],{"class":89,"line":17830},[87,115738,3355],{"emptyLinePlaceholder":1029},[87,115740,115741,115743,115745,115747,115749,115751],{"class":89,"line":17835},[87,115742,113063],{"class":97},[87,115744,946],{"class":171},[87,115746,39820],{"class":104},[87,115748,115296],{"class":97},[87,115750,31770],{"class":104},[87,115752,115374],{"class":97},[87,115754,115755,115757,115759,115761,115763,115765],{"class":89,"line":17848},[87,115756,113076],{"class":97},[87,115758,946],{"class":171},[87,115760,39820],{"class":104},[87,115762,115296],{"class":97},[87,115764,31770],{"class":104},[87,115766,115389],{"class":97},[87,115768,115769,115771,115773,115775,115778,115780],{"class":89,"line":17853},[87,115770,115394],{"class":97},[87,115772,946],{"class":171},[87,115774,110723],{"class":104},[87,115776,115777],{"class":97},"(np.linalg.norm(tip ",[87,115779,1625],{"class":171},[87,115781,115782],{"class":97}," target))\n",[87,115784,115785],{"class":89,"line":17858},[87,115786,3355],{"emptyLinePlaceholder":1029},[87,115788,115789,115792,115794,115796,115798],{"class":89,"line":17863},[87,115790,115791],{"class":97},"        terminated ",[87,115793,946],{"class":171},[87,115795,114615],{"class":97},[87,115797,938],{"class":171},[87,115799,114620],{"class":104},[87,115801,115802,115805,115807,115809,115811,115813,115815],{"class":89,"line":17876},[87,115803,115804],{"class":97},"        truncated ",[87,115806,946],{"class":171},[87,115808,39820],{"class":104},[87,115810,114632],{"class":97},[87,115812,2666],{"class":171},[87,115814,39820],{"class":104},[87,115816,114639],{"class":97},[87,115818,115819,115822,115824,115826,115829],{"class":89,"line":17881},[87,115820,115821],{"class":97},"        info ",[87,115823,946],{"class":171},[87,115825,5401],{"class":97},[87,115827,115828],{"class":949},"\"distance\"",[87,115830,115831],{"class":97},": dist}\n",[87,115833,115834,115836],{"class":89,"line":33580},[87,115835,15702],{"class":171},[87,115837,115838],{"class":97}," obs, reward, terminated, truncated, info\n",[87,115840,115841],{"class":89,"line":33586},[87,115842,3355],{"emptyLinePlaceholder":1029},[87,115844,115845],{"class":89,"line":33592},[87,115846,3355],{"emptyLinePlaceholder":1029},[87,115848,115849,115851,115853,115855,115857],{"class":89,"line":33598},[87,115850,32894],{"class":171},[87,115852,2928],{"class":205},[87,115854,102324],{"class":97},[87,115856,96612],{"class":104},[87,115858,4693],{"class":97},[87,115860,115861,115864,115866],{"class":89,"line":33604},[87,115862,115863],{"class":97},"    env ",[87,115865,946],{"class":171},[87,115867,115868],{"class":97}," ReacherEnv()\n",[87,115870,115871,115874,115876,115879,115881,115883,115885],{"class":89,"line":33615},[87,115872,115873],{"class":97},"    obs, info ",[87,115875,946],{"class":171},[87,115877,115878],{"class":97}," env.reset(",[87,115880,115492],{"class":492},[87,115882,946],{"class":171},[87,115884,111],{"class":104},[87,115886,1108],{"class":97},[87,115888,115889,115891,115893,115896],{"class":89,"line":33621},[87,115890,32246],{"class":104},[87,115892,165],{"class":97},[87,115894,115895],{"class":949},"\"initial obs shape:\"",[87,115897,115898],{"class":97},", obs.shape)\n",[87,115900,115901,115903,115905,115908],{"class":89,"line":33641},[87,115902,32246],{"class":104},[87,115904,165],{"class":97},[87,115906,115907],{"class":949},"\"initial info:\"",[87,115909,115910],{"class":97},", info)\n",[87,115912,115913],{"class":89,"line":33647},[87,115914,3355],{"emptyLinePlaceholder":1029},[87,115916,115917,115919,115921],{"class":89,"line":33658},[87,115918,111079],{"class":97},[87,115920,946],{"class":171},[87,115922,105687],{"class":104},[87,115924,115925,115927,115929,115931,115933,115935,115937],{"class":89,"line":33664},[87,115926,4155],{"class":171},[87,115928,32563],{"class":97},[87,115930,26990],{"class":171},[87,115932,33390],{"class":104},[87,115934,165],{"class":97},[87,115936,1792],{"class":104},[87,115938,31733],{"class":97},[87,115940,115941,115943,115945],{"class":89,"line":33670},[87,115942,111148],{"class":97},[87,115944,946],{"class":171},[87,115946,115947],{"class":97}," env.action_space.sample()\n",[87,115949,115950,115953,115955],{"class":89,"line":33676},[87,115951,115952],{"class":97},"        obs, reward, terminated, truncated, info ",[87,115954,946],{"class":171},[87,115956,114341],{"class":97},[87,115958,115959,115961,115963],{"class":89,"line":33682},[87,115960,111223],{"class":97},[87,115962,10427],{"class":171},[87,115964,111228],{"class":97},[87,115966,115967,115969,115971,115973,115975,115978,115980,115982,115985,115987,115989,115992,115994,115996,115999,116001,116003,116005],{"class":89,"line":33688},[87,115968,33398],{"class":104},[87,115970,165],{"class":97},[87,115972,111257],{"class":949},[87,115974,111260],{"class":97},[87,115976,115977],{"class":949},"\"reward:\"",[87,115979,13385],{"class":97},[87,115981,32965],{"class":104},[87,115983,115984],{"class":97},"(reward, ",[87,115986,1170],{"class":104},[87,115988,111271],{"class":97},[87,115990,115991],{"class":949},"\"distance:\"",[87,115993,13385],{"class":97},[87,115995,32965],{"class":104},[87,115997,115998],{"class":97},"(info[",[87,116000,115828],{"class":949},[87,116002,113128],{"class":97},[87,116004,1170],{"class":104},[87,116006,31444],{"class":97},[87,116008,116009,116011,116014,116017],{"class":89,"line":33694},[87,116010,3452],{"class":171},[87,116012,116013],{"class":97}," terminated ",[87,116015,116016],{"class":171},"or",[87,116018,116019],{"class":97}," truncated:\n",[87,116021,116022],{"class":89,"line":33700},[87,116023,116024],{"class":171},"            break\n",[87,116026,116027],{"class":89,"line":33720},[87,116028,3355],{"emptyLinePlaceholder":1029},[87,116030,116031,116033,116035,116037,116039,116041,116043,116045],{"class":89,"line":33726},[87,116032,32246],{"class":104},[87,116034,165],{"class":97},[87,116036,111302],{"class":949},[87,116038,13385],{"class":97},[87,116040,32965],{"class":104},[87,116042,111309],{"class":97},[87,116044,1170],{"class":104},[87,116046,31444],{"class":97},[87,116048,116049],{"class":89,"line":33742},[87,116050,3355],{"emptyLinePlaceholder":1029},[87,116052,116053],{"class":89,"line":33748},[87,116054,3355],{"emptyLinePlaceholder":1029},[87,116056,116057,116059,116061,116063,116065],{"class":89,"line":33762},[87,116058,2488],{"class":171},[87,116060,32167],{"class":104},[87,116062,102485],{"class":171},[87,116064,102488],{"class":949},[87,116066,4693],{"class":97},[87,116068,116069],{"class":89,"line":33768},[87,116070,102495],{"class":97},[19,116072,104496],{},[77,116074,116076],{"className":24769,"code":116075,"language":24771,"meta":82,"style":82},"touch ch8_gym_env.py\n",[84,116077,116078],{"__ignoreMap":82},[87,116079,116080,116082],{"class":89,"line":90},[87,116081,102209],{"class":205},[87,116083,116084],{"class":949}," ch8_gym_env.py\n",[19,116086,111370],{},[77,116088,116090],{"className":24769,"code":116089,"language":24771,"meta":82,"style":82},"python ch8_gym_env.py\n",[84,116091,116092],{"__ignoreMap":82},[87,116093,116094,116096],{"class":89,"line":90},[87,116095,31327],{"class":205},[87,116097,116084],{"class":949},[44,116099,102498],{"id":102498},[19,116101,116102],{},"继承 Gymnasium 环境：",[77,116104,116106],{"className":31325,"code":116105,"language":31327,"meta":82,"style":82},"class ReacherEnv(gym.Env):\n",[84,116107,116108],{"__ignoreMap":82},[87,116109,116110,116112,116114,116116,116118,116120,116122],{"class":89,"line":90},[87,116111,15644],{"class":171},[87,116113,114983],{"class":205},[87,116115,165],{"class":97},[87,116117,114466],{"class":205},[87,116119,1651],{"class":97},[87,116121,114992],{"class":205},[87,116123,31733],{"class":97},[19,116125,116126],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116128,116129],{},"初始化模型：",[77,116131,116133],{"className":31325,"code":116132,"language":31327,"meta":82,"style":82},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[84,116134,116135,116149],{"__ignoreMap":82},[87,116136,116137,116139,116141,116143,116145,116147],{"class":89,"line":90},[87,116138,31770],{"class":104},[87,116140,115043],{"class":97},[87,116142,946],{"class":171},[87,116144,102338],{"class":97},[87,116146,102240],{"class":104},[87,116148,1108],{"class":97},[87,116150,116151,116153,116155,116157,116159,116161],{"class":89,"line":101},[87,116152,31770],{"class":104},[87,116154,115058],{"class":97},[87,116156,946],{"class":171},[87,116158,115063],{"class":97},[87,116160,31770],{"class":104},[87,116162,115068],{"class":97},[19,116164,116165,116166,116168],{},"这和前面章节一样，只是现在放到了类的 ",[84,116167,31776],{}," 里。",[19,116170,116171],{},"缓存 site ID：",[77,116173,116175],{"className":31325,"code":116174,"language":31327,"meta":82,"style":82},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[84,116176,116177,116191],{"__ignoreMap":82},[87,116178,116179,116181,116183,116185,116187,116189],{"class":89,"line":90},[87,116180,31770],{"class":104},[87,116182,115079],{"class":97},[87,116184,946],{"class":171},[87,116186,115084],{"class":97},[87,116188,90480],{"class":104},[87,116190,1108],{"class":97},[87,116192,116193,116195,116197,116199,116201,116203],{"class":89,"line":101},[87,116194,31770],{"class":104},[87,116196,115100],{"class":97},[87,116198,946],{"class":171},[87,116200,115084],{"class":97},[87,116202,90480],{"class":104},[87,116204,1108],{"class":97},[19,116206,116207],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116209,116210],{},"reset：",[77,116212,116214],{"className":31325,"code":116213,"language":31327,"meta":82,"style":82},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[84,116215,116216],{"__ignoreMap":82},[87,116217,116218,116220,116222,116224,116226,116228,116230,116232,116234,116236,116238,116240,116242,116244,116246,116248,116250],{"class":89,"line":90},[87,116219,32894],{"class":171},[87,116221,115448],{"class":205},[87,116223,115451],{"class":97},[87,116225,1549],{"class":171},[87,116227,115456],{"class":97},[87,116229,1105],{"class":104},[87,116231,26057],{"class":171},[87,116233,39880],{"class":104},[87,116235,14514],{"class":171},[87,116237,39880],{"class":104},[87,116239,115469],{"class":97},[87,116241,115472],{"class":104},[87,116243,26057],{"class":171},[87,116245,39880],{"class":104},[87,116247,14514],{"class":171},[87,116249,39880],{"class":104},[87,116251,31733],{"class":97},[19,116253,116254,116256],{},[84,116255,70988],{}," 做四件事：",[1055,116258,116259,116262,116265,116268],{},[29,116260,116261],{},"设置随机种子。",[29,116263,116264],{},"重置 MuJoCo data。",[29,116266,116267],{},"随机初始化关节角。",[29,116269,116270],{},"返回初始观测和 info。",[19,116272,116273],{},"step：",[77,116275,116277],{"className":31325,"code":116276,"language":31327,"meta":82,"style":82},"def step(self, action):\n",[84,116278,116279],{"__ignoreMap":82},[87,116280,116281,116283,116285],{"class":89,"line":90},[87,116282,32894],{"class":171},[87,116284,115613],{"class":205},[87,116286,115616],{"class":97},[19,116288,116289,116291],{},[84,116290,108060],{}," 做六件事：",[1055,116293,116294,116297,116303,116306,116309,116312],{},[29,116295,116296],{},"检查并裁剪 action。",[29,116298,116299,116300,29332],{},"写入 ",[84,116301,116302],{},"self.data.ctrl",[29,116304,116305],{},"连续推进若干个 MuJoCo 物理步。",[29,116307,116308],{},"计算新观测。",[29,116310,116311],{},"计算奖励和结束条件。",[29,116313,116314],{},"返回 Gymnasium 标准五元组。",[44,116316,102634],{"id":102634},[77,116318,116320],{"className":31325,"code":116319,"language":31327,"meta":82,"style":82},"import gymnasium as gym\n",[84,116321,116322],{"__ignoreMap":82},[87,116323,116324,116326,116328,116330],{"class":89,"line":90},[87,116325,31339],{"class":171},[87,116327,114821],{"class":97},[87,116329,32330],{"class":171},[87,116331,114826],{"class":97},[19,116333,116334,116335,116337,116338,116341],{},"导入 Gymnasium，并起别名 ",[84,116336,114466],{},"。后面写 ",[84,116339,116340],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[77,116343,116345],{"className":31325,"code":116344,"language":31327,"meta":82,"style":82},"from gymnasium import spaces\n",[84,116346,116347],{"__ignoreMap":82},[87,116348,116349,116351,116353,116355],{"class":89,"line":90},[87,116350,31684],{"class":171},[87,116352,114821],{"class":97},[87,116354,31339],{"class":171},[87,116356,114853],{"class":97},[19,116358,116359,116360,116363],{},"导入空间定义工具。",[84,116361,116362],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[77,116365,116366],{"className":31325,"code":116105,"language":31327,"meta":82,"style":82},[84,116367,116368],{"__ignoreMap":82},[87,116369,116370,116372,116374,116376,116378,116380,116382],{"class":89,"line":90},[87,116371,15644],{"class":171},[87,116373,114983],{"class":205},[87,116375,165],{"class":97},[87,116377,114466],{"class":205},[87,116379,1651],{"class":97},[87,116381,114992],{"class":205},[87,116383,31733],{"class":97},[19,116385,116386,116387,116390,116391,116393,116394,101944,116396,116398],{},"定义一个类，名字叫 ",[84,116388,116389],{},"ReacherEnv","。括号里的 ",[84,116392,116340],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[84,116395,70988],{},[84,116397,108060],{}," 这两个核心方法。",[77,116400,116402],{"className":31325,"code":116401,"language":31327,"meta":82,"style":82},"metadata = {\"render_modes\": []}\n",[84,116403,116404],{"__ignoreMap":82},[87,116405,116406,116409,116411,116413,116415],{"class":89,"line":90},[87,116407,116408],{"class":97},"metadata ",[87,116410,946],{"class":171},[87,116412,5401],{"class":97},[87,116414,115006],{"class":949},[87,116416,115009],{"class":97},[19,116418,116419],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[77,116421,116423],{"className":31325,"code":116422,"language":31327,"meta":82,"style":82},"def __init__(self) -> None:\n",[84,116424,116425],{"__ignoreMap":82},[87,116426,116427,116429,116431,116433,116435],{"class":89,"line":90},[87,116428,32894],{"class":171},[87,116430,31751],{"class":104},[87,116432,115022],{"class":97},[87,116434,96612],{"class":104},[87,116436,4693],{"class":97},[19,116438,116439,116441,116442,29332],{},[84,116440,31776],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[84,116443,116444],{},"env = ReacherEnv()",[77,116446,116448],{"className":31325,"code":116447,"language":31327,"meta":82,"style":82},"super().__init__()\n",[84,116449,116450],{"__ignoreMap":82},[87,116451,116452,116455,116457,116459],{"class":89,"line":90},[87,116453,116454],{"class":104},"super",[87,116456,18209],{"class":97},[87,116458,31776],{"class":104},[87,116460,2931],{"class":97},[19,116462,116463,116464,116466],{},"调用父类 ",[84,116465,116340],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[77,116468,116469],{"className":31325,"code":116132,"language":31327,"meta":82,"style":82},[84,116470,116471,116485],{"__ignoreMap":82},[87,116472,116473,116475,116477,116479,116481,116483],{"class":89,"line":90},[87,116474,31770],{"class":104},[87,116476,115043],{"class":97},[87,116478,946],{"class":171},[87,116480,102338],{"class":97},[87,116482,102240],{"class":104},[87,116484,1108],{"class":97},[87,116486,116487,116489,116491,116493,116495,116497],{"class":89,"line":101},[87,116488,31770],{"class":104},[87,116490,115058],{"class":97},[87,116492,946],{"class":171},[87,116494,115063],{"class":97},[87,116496,31770],{"class":104},[87,116498,115068],{"class":97},[19,116500,116501,116502,116504,116505,101944,116508,116511],{},"把 MuJoCo 模型和状态保存到 ",[84,116503,31770],{}," 上。",[84,116506,116507],{},"self.model",[84,116509,116510],{},"self.data"," 表示这个环境对象自己的模型和状态。",[77,116513,116514],{"className":31325,"code":116174,"language":31327,"meta":82,"style":82},[84,116515,116516,116530],{"__ignoreMap":82},[87,116517,116518,116520,116522,116524,116526,116528],{"class":89,"line":90},[87,116519,31770],{"class":104},[87,116521,115079],{"class":97},[87,116523,946],{"class":171},[87,116525,115084],{"class":97},[87,116527,90480],{"class":104},[87,116529,1108],{"class":97},[87,116531,116532,116534,116536,116538,116540,116542],{"class":89,"line":101},[87,116533,31770],{"class":104},[87,116535,115100],{"class":97},[87,116537,946],{"class":171},[87,116539,115084],{"class":97},[87,116541,90480],{"class":104},[87,116543,1108],{"class":97},[19,116545,116546,116547,101944,116550,116553],{},"提前查好 tip 和 target 的 site ID。这样 ",[84,116548,116549],{},"_get_obs",[84,116551,116552],{},"_get_reward"," 里就不用每次按名字查找。",[77,116555,116557],{"className":31325,"code":116556,"language":31327,"meta":82,"style":82},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[84,116558,116559,116569,116579],{"__ignoreMap":82},[87,116560,116561,116563,116565,116567],{"class":89,"line":90},[87,116562,31770],{"class":104},[87,116564,114793],{"class":97},[87,116566,946],{"class":171},[87,116568,55363],{"class":104},[87,116570,116571,116573,116575,116577],{"class":89,"line":101},[87,116572,31770],{"class":104},[87,116574,115172],{"class":97},[87,116576,946],{"class":171},[87,116578,115177],{"class":104},[87,116580,116581,116583,116585,116587],{"class":89,"line":120},[87,116582,31770],{"class":104},[87,116584,114632],{"class":97},[87,116586,946],{"class":171},[87,116588,48280],{"class":104},[19,116590,116591,116594,116595,116598,116599,116602],{},[84,116592,116593],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[84,116596,116597],{},"max_steps"," 是一个 episode 最多运行多少步。",[84,116600,116601],{},"steps"," 记录当前 episode 已经走了多少步。",[77,116604,116605],{"className":31325,"code":114671,"language":31327,"meta":82,"style":82},[84,116606,116607],{"__ignoreMap":82},[87,116608,116609,116611,116613,116615,116617,116619,116621,116623,116625,116627,116629,116631,116633,116635,116637,116639,116641,116643,116645,116647],{"class":89,"line":90},[87,116610,31770],{"class":104},[87,116612,114680],{"class":97},[87,116614,946],{"class":171},[87,116616,114685],{"class":97},[87,116618,114688],{"class":492},[87,116620,114691],{"class":171},[87,116622,103329],{"class":104},[87,116624,13385],{"class":97},[87,116626,114698],{"class":492},[87,116628,946],{"class":171},[87,116630,103329],{"class":104},[87,116632,13385],{"class":97},[87,116634,96889],{"class":492},[87,116636,946],{"class":171},[87,116638,165],{"class":97},[87,116640,1176],{"class":104},[87,116642,114715],{"class":97},[87,116644,94426],{"class":492},[87,116646,946],{"class":171},[87,116648,114722],{"class":97},[19,116650,116651,116652,116655,116656,101944,116659,116662],{},"定义动作空间。",[84,116653,116654],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[84,116657,116658],{},"low=-1.0",[84,116660,116661],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[77,116664,116665],{"className":31325,"code":114732,"language":31327,"meta":82,"style":82},[84,116666,116667],{"__ignoreMap":82},[87,116668,116669,116671,116673,116675,116677,116679,116681,116683,116685,116687,116689,116691,116693,116695,116697,116699,116701,116703],{"class":89,"line":90},[87,116670,31770],{"class":104},[87,116672,114741],{"class":97},[87,116674,946],{"class":171},[87,116676,114685],{"class":97},[87,116678,114688],{"class":492},[87,116680,114691],{"class":171},[87,116682,114752],{"class":97},[87,116684,114698],{"class":492},[87,116686,946],{"class":171},[87,116688,114752],{"class":97},[87,116690,96889],{"class":492},[87,116692,946],{"class":171},[87,116694,165],{"class":97},[87,116696,242],{"class":104},[87,116698,114715],{"class":97},[87,116700,94426],{"class":492},[87,116702,946],{"class":171},[87,116704,114722],{"class":97},[19,116706,116707,116708,116711,116712,116715],{},"定义观测空间。",[84,116709,116710],{},"shape=(10,)"," 表示观测是 10 个数。",[84,116713,116714],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[77,116717,116719],{"className":31325,"code":116718,"language":31327,"meta":82,"style":82},"def _get_obs(self) -> np.ndarray:\n",[84,116720,116721],{"__ignoreMap":82},[87,116722,116723,116725,116727],{"class":89,"line":90},[87,116724,32894],{"class":171},[87,116726,115282],{"class":205},[87,116728,115285],{"class":97},[19,116730,116731,116732,116734],{},"定义内部函数，用来生成观测。函数名前面的 ",[84,116733,2083],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[77,116736,116738],{"className":31325,"code":116737,"language":31327,"meta":82,"style":82},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[84,116739,116740,116754],{"__ignoreMap":82},[87,116741,116742,116744,116746,116748,116750,116752],{"class":89,"line":90},[87,116743,112494],{"class":97},[87,116745,946],{"class":171},[87,116747,39820],{"class":104},[87,116749,115296],{"class":97},[87,116751,31770],{"class":104},[87,116753,115301],{"class":97},[87,116755,116756,116758,116760,116762,116764,116766],{"class":89,"line":101},[87,116757,112504],{"class":97},[87,116759,946],{"class":171},[87,116761,39820],{"class":104},[87,116763,115296],{"class":97},[87,116765,31770],{"class":104},[87,116767,115316],{"class":97},[19,116769,116770],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[77,116772,116774],{"className":31325,"code":116773,"language":31327,"meta":82,"style":82},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[84,116775,116776,116792],{"__ignoreMap":82},[87,116777,116778,116780,116782,116784,116786,116788,116790],{"class":89,"line":90},[87,116779,111780],{"class":97},[87,116781,946],{"class":171},[87,116783,115325],{"class":97},[87,116785,31770],{"class":104},[87,116787,115330],{"class":97},[87,116789,31770],{"class":104},[87,116791,115335],{"class":97},[87,116793,116794,116796],{"class":89,"line":101},[87,116795,17995],{"class":171},[87,116797,115342],{"class":97},[19,116799,116800,116801,116804,116805,116807],{},"拼接观测，并转换成 ",[84,116802,116803],{},"float32","。很多强化学习库默认使用 ",[84,116806,116803],{},"，所以这里主动转换。",[77,116809,116810],{"className":31325,"code":116213,"language":31327,"meta":82,"style":82},[84,116811,116812],{"__ignoreMap":82},[87,116813,116814,116816,116818,116820,116822,116824,116826,116828,116830,116832,116834,116836,116838,116840,116842,116844,116846],{"class":89,"line":90},[87,116815,32894],{"class":171},[87,116817,115448],{"class":205},[87,116819,115451],{"class":97},[87,116821,1549],{"class":171},[87,116823,115456],{"class":97},[87,116825,1105],{"class":104},[87,116827,26057],{"class":171},[87,116829,39880],{"class":104},[87,116831,14514],{"class":171},[87,116833,39880],{"class":104},[87,116835,115469],{"class":97},[87,116837,115472],{"class":104},[87,116839,26057],{"class":171},[87,116841,39880],{"class":104},[87,116843,14514],{"class":171},[87,116845,39880],{"class":104},[87,116847,31733],{"class":97},[19,116849,116850,116851,116853,116854,116857],{},"定义 reset。",[84,116852,115492],{}," 用来控制随机数，保证实验可以复现。",[84,116855,116856],{},"options"," 用来接收额外配置，本章暂时不用。",[77,116859,116861],{"className":31325,"code":116860,"language":31327,"meta":82,"style":82},"super().reset(seed=seed)\n",[84,116862,116863],{"__ignoreMap":82},[87,116864,116865,116867,116869,116871,116873],{"class":89,"line":90},[87,116866,116454],{"class":104},[87,116868,115489],{"class":97},[87,116870,115492],{"class":492},[87,116872,946],{"class":171},[87,116874,115497],{"class":97},[19,116876,116877,116878,116881],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[84,116879,116880],{},"self.np_random"," 生成可复现的随机数。",[77,116883,116885],{"className":31325,"code":116884,"language":31327,"meta":82,"style":82},"mujoco.mj_resetData(self.model, self.data)\n",[84,116886,116887],{"__ignoreMap":82},[87,116888,116889,116892,116894,116896,116898],{"class":89,"line":90},[87,116890,116891],{"class":97},"mujoco.mj_resetData(",[87,116893,31770],{"class":104},[87,116895,115507],{"class":97},[87,116897,31770],{"class":104},[87,116899,115512],{"class":97},[19,116901,116902],{},"把 MuJoCo 状态重置到默认状态。",[77,116904,116906],{"className":31325,"code":116905,"language":31327,"meta":82,"style":82},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[84,116907,116908],{"__ignoreMap":82},[87,116909,116910,116912,116914,116916,116918,116920,116922,116924,116926,116928,116930,116932,116934,116936,116938,116940,116942],{"class":89,"line":90},[87,116911,31770],{"class":104},[87,116913,115523],{"class":97},[87,116915,946],{"class":171},[87,116917,39820],{"class":104},[87,116919,115530],{"class":97},[87,116921,114688],{"class":492},[87,116923,114691],{"class":171},[87,116925,87136],{"class":104},[87,116927,13385],{"class":97},[87,116929,114698],{"class":492},[87,116931,946],{"class":171},[87,116933,87136],{"class":104},[87,116935,13385],{"class":97},[87,116937,32443],{"class":492},[87,116939,946],{"class":171},[87,116941,31770],{"class":104},[87,116943,115555],{"class":97},[19,116945,116267,116946,116949,116950,116953,116954,116956],{},[84,116947,116948],{},"[:]"," 表示修改整个数组。",[84,116951,116952],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[84,116955,103076],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[77,116958,116960],{"className":31325,"code":116959,"language":31327,"meta":82,"style":82},"self.data.qvel[:] = 0.0\n",[84,116961,116962],{"__ignoreMap":82},[87,116963,116964,116966,116968,116970],{"class":89,"line":90},[87,116965,31770],{"class":104},[87,116967,115562],{"class":97},[87,116969,946],{"class":171},[87,116971,105687],{"class":104},[19,116973,116974],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[77,116976,116978],{"className":31325,"code":116977,"language":31327,"meta":82,"style":82},"self.steps = 0\nreturn self._get_obs(), {}\n",[84,116979,116980,116990],{"__ignoreMap":82},[87,116981,116982,116984,116986,116988],{"class":89,"line":90},[87,116983,31770],{"class":104},[87,116985,114632],{"class":97},[87,116987,946],{"class":171},[87,116989,48280],{"class":104},[87,116991,116992,116994,116996],{"class":89,"line":101},[87,116993,17995],{"class":171},[87,116995,39820],{"class":104},[87,116997,115602],{"class":97},[19,116999,117000],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[77,117002,117003],{"className":31325,"code":116276,"language":31327,"meta":82,"style":82},[84,117004,117005],{"__ignoreMap":82},[87,117006,117007,117009,117011],{"class":89,"line":90},[87,117008,32894],{"class":171},[87,117010,115613],{"class":205},[87,117012,115616],{"class":97},[19,117014,117015],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[77,117017,117019],{"className":31325,"code":117018,"language":31327,"meta":82,"style":82},"action = np.asarray(action, dtype=np.float32)\n",[84,117020,117021],{"__ignoreMap":82},[87,117022,117023,117025,117027,117029,117031,117033],{"class":89,"line":90},[87,117024,108368],{"class":97},[87,117026,946],{"class":171},[87,117028,115625],{"class":97},[87,117030,94426],{"class":492},[87,117032,946],{"class":171},[87,117034,114722],{"class":97},[19,117036,117037,117038,29332],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[84,117039,116803],{},[77,117041,117043],{"className":31325,"code":117042,"language":31327,"meta":82,"style":82},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[84,117044,117045],{"__ignoreMap":82},[87,117046,117047,117049,117051,117053,117055,117057,117059],{"class":89,"line":90},[87,117048,108368],{"class":97},[87,117050,946],{"class":171},[87,117052,108373],{"class":97},[87,117054,31770],{"class":104},[87,117056,115644],{"class":97},[87,117058,31770],{"class":104},[87,117060,115649],{"class":97},[19,117062,117063],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[77,117065,117067],{"className":31325,"code":117066,"language":31327,"meta":82,"style":82},"self.data.ctrl[:] = action\n",[84,117068,117069],{"__ignoreMap":82},[87,117070,117071,117073,117075,117077],{"class":89,"line":90},[87,117072,31770],{"class":104},[87,117074,115660],{"class":97},[87,117076,946],{"class":171},[87,117078,108396],{"class":97},[19,117080,117081],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[77,117083,117085],{"className":31325,"code":117084,"language":31327,"meta":82,"style":82},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[84,117086,117087,117103],{"__ignoreMap":82},[87,117088,117089,117091,117093,117095,117097,117099,117101],{"class":89,"line":90},[87,117090,3979],{"class":171},[87,117092,102427],{"class":97},[87,117094,26990],{"class":171},[87,117096,33390],{"class":104},[87,117098,165],{"class":97},[87,117100,31770],{"class":104},[87,117102,115681],{"class":97},[87,117104,117105,117108,117110,117112,117114],{"class":89,"line":101},[87,117106,117107],{"class":97},"    mujoco.mj_step(",[87,117109,31770],{"class":104},[87,117111,115507],{"class":97},[87,117113,31770],{"class":104},[87,117115,115512],{"class":97},[19,117117,117118,117119,117122,117123,117125,117126,29332],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[84,117120,117121],{},"frame_skip=5","，所以外部调用一次 ",[84,117124,114803],{},"，内部实际执行 5 次 ",[84,117127,102141],{},[77,117129,117131],{"className":31325,"code":117130,"language":31327,"meta":82,"style":82},"self.steps += 1\n",[84,117132,117133],{"__ignoreMap":82},[87,117134,117135,117137,117139,117141],{"class":89,"line":90},[87,117136,31770],{"class":104},[87,117138,114632],{"class":97},[87,117140,10427],{"class":171},[87,117142,56635],{"class":104},[19,117144,117145],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[77,117147,117149],{"className":31325,"code":117148,"language":31327,"meta":82,"style":82},"obs = self._get_obs()\nreward = self._get_reward()\n",[84,117150,117151,117161],{"__ignoreMap":82},[87,117152,117153,117155,117157,117159],{"class":89,"line":90},[87,117154,111780],{"class":97},[87,117156,946],{"class":171},[87,117158,39820],{"class":104},[87,117160,115723],{"class":97},[87,117162,117163,117165,117167,117169],{"class":89,"line":101},[87,117164,111931],{"class":97},[87,117166,946],{"class":171},[87,117168,39820],{"class":104},[87,117170,115734],{"class":97},[19,117172,117173],{},"计算新的观测和奖励。",[77,117175,117177],{"className":31325,"code":117176,"language":31327,"meta":82,"style":82},"dist = float(np.linalg.norm(tip - target))\n",[84,117178,117179],{"__ignoreMap":82},[87,117180,117181,117183,117185,117187,117189,117191],{"class":89,"line":90},[87,117182,112522],{"class":97},[87,117184,946],{"class":171},[87,117186,110723],{"class":104},[87,117188,115777],{"class":97},[87,117190,1625],{"class":171},[87,117192,115782],{"class":97},[19,117194,117195],{},"计算末端到目标的距离，并转换成 Python float。",[77,117197,117198],{"className":31325,"code":114603,"language":31327,"meta":82,"style":82},[84,117199,117200,117212],{"__ignoreMap":82},[87,117201,117202,117204,117206,117208,117210],{"class":89,"line":90},[87,117203,114610],{"class":97},[87,117205,946],{"class":171},[87,117207,114615],{"class":97},[87,117209,938],{"class":171},[87,117211,114620],{"class":104},[87,117213,117214,117216,117218,117220,117222,117224,117226],{"class":89,"line":101},[87,117215,114625],{"class":97},[87,117217,946],{"class":171},[87,117219,39820],{"class":104},[87,117221,114632],{"class":97},[87,117223,2666],{"class":171},[87,117225,39820],{"class":104},[87,117227,114639],{"class":97},[19,117229,117230],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[77,117232,117234],{"className":31325,"code":117233,"language":31327,"meta":82,"style":82},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[84,117235,117236,117249],{"__ignoreMap":82},[87,117237,117238,117241,117243,117245,117247],{"class":89,"line":90},[87,117239,117240],{"class":97},"info ",[87,117242,946],{"class":171},[87,117244,5401],{"class":97},[87,117246,115828],{"class":949},[87,117248,115831],{"class":97},[87,117250,117251,117253],{"class":89,"line":101},[87,117252,17995],{"class":171},[87,117254,115838],{"class":97},[19,117256,117257,117260],{},[84,117258,117259],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[77,117262,117264],{"className":31325,"code":117263,"language":31327,"meta":82,"style":82},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[84,117265,117266,117275],{"__ignoreMap":82},[87,117267,117268,117271,117273],{"class":89,"line":90},[87,117269,117270],{"class":97},"env ",[87,117272,946],{"class":171},[87,117274,115868],{"class":97},[87,117276,117277,117279,117281,117283,117285,117287,117289],{"class":89,"line":101},[87,117278,114326],{"class":97},[87,117280,946],{"class":171},[87,117282,115878],{"class":97},[87,117284,115492],{"class":492},[87,117286,946],{"class":171},[87,117288,111],{"class":104},[87,117290,1108],{"class":97},[19,117292,117293,117294,117297],{},"创建环境并重置。",[84,117295,117296],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[77,117299,117301],{"className":31325,"code":117300,"language":31327,"meta":82,"style":82},"action = env.action_space.sample()\n",[84,117302,117303],{"__ignoreMap":82},[87,117304,117305,117307,117309],{"class":89,"line":90},[87,117306,108368],{"class":97},[87,117308,946],{"class":171},[87,117310,115947],{"class":97},[19,117312,117313],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117315,103242],{"id":103241},[19,117317,106410],{},[77,117319,117322],{"className":117320,"code":117321,"language":599,"meta":82},[597],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[84,117323,117321],{"__ignoreMap":82},[19,117325,117326],{},"这个环境已经具备强化学习环境的基本结构。",[19,117328,117329],{},"主函数里使用随机动作：",[77,117331,117332],{"className":31325,"code":117300,"language":31327,"meta":82,"style":82},[84,117333,117334],{"__ignoreMap":82},[87,117335,117336,117338,117340],{"class":89,"line":90},[87,117337,108368],{"class":97},[87,117339,946],{"class":171},[87,117341,115947],{"class":97},[19,117343,117344],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117346,103274],{"id":103273},[1055,117348,117349,117352,117358,117367,117376,117385,117391],{},[29,117350,117351],{},"运行程序。",[29,117353,117354,117355,29332],{},"确认 ",[84,117356,117357],{},"obs.shape == (10,)",[29,117359,112107,117360,117363,117364,29332],{},[84,117361,117362],{},"env.action_space","，应类似 ",[84,117365,117366],{},"Box(-1.0, 1.0, (2,), float32)",[29,117368,106511,117369,117372,117373,29332],{},[84,117370,117371],{},"self.max_steps = 10","，确认环境会更快 ",[84,117374,117375],{},"truncated=True",[29,117377,103337,117378,103340,117381,117384],{},[84,117379,117380],{},"terminated = dist \u003C 0.05",[84,117382,117383],{},"dist \u003C 0.2","，观察是否更容易结束。",[29,117386,103337,117387,117390],{},[84,117388,117389],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[29,117392,117393,117394,117396,117397,117400],{},"在 ",[84,117395,117259],{}," 里加入 ",[84,117398,117399],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117402,103379],{"id":103378},[44,117404,117406],{"id":117405},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,117408,117409,117410,117412],{},"Gymnasium 的 ",[84,117411,108060],{}," 返回 5 个值:",[77,117414,117416],{"className":31325,"code":117415,"language":31327,"meta":82,"style":82},"obs, reward, terminated, truncated, info\n",[84,117417,117418],{"__ignoreMap":82},[87,117419,117420],{"class":89,"line":90},[87,117421,117415],{"class":97},[19,117423,117424],{},"不是旧 Gym 的 4 个值。",[44,117426,117428,117431],{"id":117427},"datactrl-action-维度错误",[84,117429,117430],{},"data.ctrl[:] = action"," 维度错误",[19,117433,103449],{},[77,117435,117437],{"className":31325,"code":117436,"language":31327,"meta":82,"style":82},"print(self.model.nu)\nprint(action.shape)\n",[84,117438,117439,117450],{"__ignoreMap":82},[87,117440,117441,117443,117445,117447],{"class":89,"line":90},[87,117442,31362],{"class":104},[87,117444,165],{"class":97},[87,117446,31770],{"class":104},[87,117448,117449],{"class":97},".model.nu)\n",[87,117451,117452,117454],{"class":89,"line":101},[87,117453,31362],{"class":104},[87,117455,117456],{"class":97},"(action.shape)\n",[19,117458,117459],{},"两者必须匹配。",[44,117461,117463],{"id":117462},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,117465,103388],{},[77,117467,117469],{"className":31325,"code":117468,"language":31327,"meta":82,"style":82},"mujoco.mj_forward(self.model, self.data)\n",[84,117470,117471],{"__ignoreMap":82},[87,117472,117473,117476,117478,117480,117482],{"class":89,"line":90},[87,117474,117475],{"class":97},"mujoco.mj_forward(",[87,117477,31770],{"class":104},[87,117479,115507],{"class":97},[87,117481,31770],{"class":104},[87,117483,115512],{"class":97},[44,117485,117487,117489],{"id":117486},"observation_space-维度和-obs-不一致",[84,117488,114526],{}," 维度和 obs 不一致",[19,117491,103501],{},[77,117493,117495],{"className":31325,"code":117494,"language":31327,"meta":82,"style":82},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[84,117496,117497,117507,117514],{"__ignoreMap":82},[87,117498,117499,117501,117503,117505],{"class":89,"line":90},[87,117500,111780],{"class":97},[87,117502,946],{"class":171},[87,117504,39820],{"class":104},[87,117506,115723],{"class":97},[87,117508,117509,117511],{"class":89,"line":101},[87,117510,31362],{"class":104},[87,117512,117513],{"class":97},"(obs.shape)\n",[87,117515,117516,117518,117520,117522],{"class":89,"line":120},[87,117517,31362],{"class":104},[87,117519,165],{"class":97},[87,117521,31770],{"class":104},[87,117523,117524],{"class":97},".observation_space.shape)\n",[19,117526,117527],{},"两者必须一致。本章观测是：",[77,117529,117532],{"className":117530,"code":117531,"language":599,"meta":82},[597],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[84,117533,117531],{"__ignoreMap":82},[44,117535,117537],{"id":117536},"action-超过范围","action 超过范围",[19,117539,117540],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[77,117542,117543],{"className":31325,"code":117042,"language":31327,"meta":82,"style":82},[84,117544,117545],{"__ignoreMap":82},[87,117546,117547,117549,117551,117553,117555,117557,117559],{"class":89,"line":90},[87,117548,108368],{"class":97},[87,117550,946],{"class":171},[87,117552,108373],{"class":97},[87,117554,31770],{"class":104},[87,117556,115644],{"class":97},[87,117558,31770],{"class":104},[87,117560,115649],{"class":97},[19,117562,117563,117564,29332],{},"这能避免无效动作直接写入 ",[84,117565,102002],{},[44,117567,117569],{"id":117568},"忘记返回-info","忘记返回 info",[19,117571,117409,117572,101944,117574,117576],{},[84,117573,70988],{},[84,117575,108060],{}," 都会返回 info：",[77,117578,117579],{"className":31325,"code":114319,"language":31327,"meta":82,"style":82},[84,117580,117581,117589],{"__ignoreMap":82},[87,117582,117583,117585,117587],{"class":89,"line":90},[87,117584,114326],{"class":97},[87,117586,946],{"class":171},[87,117588,114331],{"class":97},[87,117590,117591,117593,117595],{"class":89,"line":101},[87,117592,114336],{"class":97},[87,117594,946],{"class":171},[87,117596,114341],{"class":97},[19,117598,117599,117600,29332],{},"即使暂时没有额外信息，也返回 ",[84,117601,33406],{},[14,117603,117605],{"id":117604},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,117607,117608],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[1055,117610,117611,117614,117617,117620,117623,117626],{},[29,117612,117613],{},"更稳定的 reward。",[29,117615,117616],{},"合理的 episode 长度。",[29,117618,117619],{},"可重复的随机目标采样。",[29,117621,117622],{},"render 接口。",[29,117624,117625],{},"环境注册代码。",[29,117627,117628],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,117630,117631],{},"如果只是自己写训练循环，最小形式是：",[77,117633,117635],{"className":31325,"code":117634,"language":31327,"meta":82,"style":82},"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",[84,117636,117637,117645,117661,117665,117681,117690,117699,117709],{"__ignoreMap":82},[87,117638,117639,117641,117643],{"class":89,"line":90},[87,117640,117270],{"class":97},[87,117642,946],{"class":171},[87,117644,115868],{"class":97},[87,117646,117647,117649,117651,117653,117655,117657,117659],{"class":89,"line":101},[87,117648,114326],{"class":97},[87,117650,946],{"class":171},[87,117652,115878],{"class":97},[87,117654,115492],{"class":492},[87,117656,946],{"class":171},[87,117658,111],{"class":104},[87,117660,1108],{"class":97},[87,117662,117663],{"class":89,"line":120},[87,117664,3355],{"emptyLinePlaceholder":1029},[87,117666,117667,117669,117671,117673,117675,117677,117679],{"class":89,"line":222},[87,117668,3979],{"class":171},[87,117670,102427],{"class":97},[87,117672,26990],{"class":171},[87,117674,33390],{"class":104},[87,117676,165],{"class":97},[87,117678,7360],{"class":104},[87,117680,31733],{"class":97},[87,117682,117683,117686,117688],{"class":89,"line":234},[87,117684,117685],{"class":97},"    action ",[87,117687,946],{"class":171},[87,117689,115947],{"class":97},[87,117691,117692,117695,117697],{"class":89,"line":256},[87,117693,117694],{"class":97},"    obs, reward, terminated, truncated, info ",[87,117696,946],{"class":171},[87,117698,114341],{"class":97},[87,117700,117701,117703,117705,117707],{"class":89,"line":269},[87,117702,4055],{"class":171},[87,117704,116013],{"class":97},[87,117706,116016],{"class":171},[87,117708,116019],{"class":97},[87,117710,117711,117714,117716],{"class":89,"line":463},[87,117712,117713],{"class":97},"        obs, info ",[87,117715,946],{"class":171},[87,117717,114331],{"class":97},[14,117719,117721],{"id":117720},"_9本章小结","9.本章小结",[19,117723,117724],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[77,117726,117729],{"className":117727,"code":117728,"language":599,"meta":82},[597],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[84,117730,117728],{"__ignoreMap":82},[19,117732,117733],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1006,117735,117736],{},"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":82,"searchDepth":101,"depth":101,"links":117738},[117739,117740,117741,117748,117752,117753,117754,117764,117765],{"id":101572,"depth":101,"text":101573},{"id":101695,"depth":101,"text":101696},{"id":101970,"depth":101,"text":101971,"children":117742},[117743,117745,117747],{"id":114550,"depth":120,"text":117744},"terminated 和 truncated 的区别",{"id":114653,"depth":120,"text":117746},"observation_space 和 action_space",{"id":114780,"depth":120,"text":114781},{"id":102178,"depth":101,"text":102179,"children":117749},[117750,117751],{"id":102498,"depth":120,"text":102498},{"id":102634,"depth":120,"text":102634},{"id":103241,"depth":101,"text":103242},{"id":103273,"depth":101,"text":103274},{"id":103378,"depth":101,"text":103379,"children":117755},[117756,117757,117759,117760,117762,117763],{"id":117405,"depth":120,"text":117406},{"id":117427,"depth":120,"text":117758},"data.ctrl[:] = action 维度错误",{"id":117462,"depth":120,"text":117463},{"id":117486,"depth":120,"text":117761},"observation_space 维度和 obs 不一致",{"id":117536,"depth":120,"text":117537},{"id":117568,"depth":120,"text":117569},{"id":117604,"depth":101,"text":117605},{"id":117720,"depth":101,"text":117721},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114303,"description":82},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117772,"title":117773,"body":117774,"description":118197,"extension":1027,"meta":118198,"navigation":1029,"path":118199,"seo":118200,"stem":118201,"__hash__":118202},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117775,"toc":118187},[117776,117780,117783,117786,117806,117812,117818,117828,117831,117834,117854,117857,117861,117864,117870,117873,117887,117890,117893,117967,117970,117976,117979,118002,118005,118055,118058,118064,118067,118070,118073,118092,118095,118101,118104,118107,118110,118130,118133,118136,118139,118184],[10,117777,117779],{"id":117778},"mujoco-学习","MuJoCo 学习",[19,117781,117782],{},"初版",[19,117784,117785],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[1055,117787,117788,117791,117794,117803],{},[29,117789,117790],{},"MuJoCo 模型文件在描述什么。",[29,117792,117793],{},"Python 代码怎样读取和推进仿真。",[29,117795,117796,1308,117798,1308,117800,117802],{},[84,117797,104956],{},[84,117799,105286],{},[84,117801,105289],{}," 这些数组为什么重要。",[29,117804,117805],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,117807,117808,117809,117811],{},"默认环境为 Fedora 44、Python >= 3.10、",[84,117810,101953],{}," 官方 Python bindings。",[19,117813,117814,117815,117817],{},"注意：本文禁止使用 ",[84,117816,101938],{},"。所有示例均使用：",[77,117819,117820],{"className":31325,"code":102504,"language":31327,"meta":82,"style":82},[84,117821,117822],{"__ignoreMap":82},[87,117823,117824,117826],{"class":89,"line":90},[87,117825,31339],{"class":171},[87,117827,102227],{"class":97},[14,117829,117830],{"id":117830},"适合谁阅读",[19,117832,117833],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[1055,117835,117836,117839,117842,117845],{},[29,117837,117838],{},"没学过 MuJoCo，只会一点 Python。",[29,117840,117841],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[29,117843,117844],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[29,117846,117847,117848,117850,117851,117853],{},"以前接触过 ",[84,117849,101938],{},"，现在想迁移到官方 ",[84,117852,101947],{}," Python bindings。",[19,117855,117856],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117858,117860],{"id":117859},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117862,117863],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[77,117865,117868],{"className":117866,"code":117867,"language":599,"meta":82},[597],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[84,117869,117867],{"__ignoreMap":82},[19,117871,117872],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[1055,117874,117875,117878,117881,117884],{},[29,117876,117877],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[29,117879,117880],{},"快速测试控制算法，不必一开始就上真实机器人。",[29,117882,117883],{},"生成强化学习环境。",[29,117885,117886],{},"采集状态、动作、图像、奖励等训练数据。",[14,117888,117889],{"id":117889},"学习前的心智模型",[19,117891,117892],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[1235,117894,117895,117907],{},[1238,117896,117897],{},[1241,117898,117899,117902,117905],{},[1244,117900,117901],{"align":24683},"部分",[1244,117903,117904],{"align":24683},"负责什么",[1244,117906,22135],{"align":24683},[1281,117908,117909,117920,117932,117944,117956],{},[1241,117910,117911,117914,117917],{},[1286,117912,117913],{"align":24683},"MJCF XML",[1286,117915,117916],{"align":24683},"定义世界和机器人结构",[1286,117918,117919],{"align":24683},"地面、盒子、关节、电机、摄像头",[1241,117921,117922,117926,117929],{},[1286,117923,117924],{"align":24683},[84,117925,101635],{},[1286,117927,117928],{"align":24683},"编译后的静态模型",[1286,117930,117931],{"align":24683},"有几个关节、有几个电机、时间步长是多少",[1241,117933,117934,117938,117941],{},[1286,117935,117936],{"align":24683},[84,117937,101645],{},[1286,117939,117940],{"align":24683},"运行中的动态状态",[1286,117942,117943],{"align":24683},"当前时间、位置、速度、电机输入",[1241,117945,117946,117950,117953],{},[1286,117947,117948],{"align":24683},[84,117949,102141],{},[1286,117951,117952],{"align":24683},"推进一步物理仿真",[1286,117954,117955],{"align":24683},"根据重力、力、碰撞更新状态",[1241,117957,117958,117961,117964],{},[1286,117959,117960],{"align":24683},"Viewer \u002F Renderer",[1286,117962,117963],{"align":24683},"把仿真显示出来",[1286,117965,117966],{"align":24683},"打开窗口或保存图片",[19,117968,117969],{},"一句话总结：",[77,117971,117974],{"className":117972,"code":117973,"language":599,"meta":82},[597],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[84,117975,117973],{"__ignoreMap":82},[19,117977,117978],{},"参考来源：",[26,117980,117981,117988,117995],{},[29,117982,117983,117984],{},"MuJoCo Python 官方文档：",[1334,117985,117986],{"href":117986,"rel":117987},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24812],[29,117989,117990,117991],{},"MuJoCo XML Reference：",[1334,117992,117993],{"href":117993,"rel":117994},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24812],[29,117996,117997,117998],{},"MuJoCo Overview：",[1334,117999,118000],{"href":118000,"rel":118001},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24812],[14,118003,118004],{"id":118004},"章节目录",[1055,118006,118007,118013,118019,118025,118031,118037,118043,118049],{},[29,118008,118009],{},[1334,118010,118012],{"href":118011},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[29,118014,118015],{},[1334,118016,118018],{"href":118017},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[29,118020,118021],{},[1334,118022,118024],{"href":118023},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[29,118026,118027],{},[1334,118028,118030],{"href":118029},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[29,118032,118033],{},[1334,118034,118036],{"href":118035},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[29,118038,118039],{},[1334,118040,118042],{"href":118041},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[29,118044,118045],{},[1334,118046,118048],{"href":118047},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[29,118050,118051],{},[1334,118052,118054],{"href":118053},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118056,118057],{"id":118057},"推荐学习路线",[77,118059,118062],{"className":118060,"code":118061,"language":599,"meta":82},[597],"环境安装\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",[84,118063,118061],{"__ignoreMap":82},[19,118065,118066],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118068,118069],{"id":118069},"建议的目录结构",[19,118071,118072],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[77,118074,118076],{"className":24769,"code":118075,"language":24771,"meta":82,"style":82},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[84,118077,118078,118086],{"__ignoreMap":82},[87,118079,118080,118082,118084],{"class":89,"line":90},[87,118081,102192],{"class":205},[87,118083,30163],{"class":104},[87,118085,102197],{"class":949},[87,118087,118088,118090],{"class":89,"line":101},[87,118089,102202],{"class":104},[87,118091,102197],{"class":949},[19,118093,118094],{},"每一章的代码都单独保存：",[77,118096,118099],{"className":118097,"code":118098,"language":599,"meta":82},[597],"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",[84,118100,118098],{"__ignoreMap":82},[19,118102,118103],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118105,118106],{"id":118106},"学习方法",[19,118108,118109],{},"每章建议按这个顺序操作：",[1055,118111,118112,118115,118118,118121,118124,118127],{},[29,118113,118114],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[29,118116,118117],{},"复制最小可运行代码，保存成指定文件。",[29,118119,118120],{},"运行代码，确认没有报错。",[29,118122,118123],{},"对照“运行结果说明”理解输出。",[29,118125,118126],{},"做“验证步骤”，主动改一两个参数。",[29,118128,118129],{},"遇到报错先看“常见错误与解决方案”。",[19,118131,118132],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118134,118135],{"id":118135},"全局排错顺序",[19,118137,118138],{},"遇到问题时，按下面顺序查：",[1055,118140,118141,118147,118153,118158,118161,118164,118171,118181],{},[29,118142,118143,118144],{},"Python 环境是否激活：",[84,118145,118146],{},"which python",[29,118148,118149,118150],{},"MuJoCo 是否能导入：",[84,118151,118152],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[29,118154,118155,118156],{},"是否误装了 ",[84,118157,101938],{},[29,118159,118160],{},"XML 标签是否闭合、属性是否拼写正确",[29,118162,118163],{},"actuator 引用的 joint 名字是否存在",[29,118165,118166,118168,118169],{},[84,118167,102002],{}," 的长度是否等于 ",[84,118170,103084],{},[29,118172,106511,118173,83465,118175,118177,118178],{},[84,118174,104956],{},[84,118176,105286],{}," 后是否调用了 ",[84,118179,118180],{},"mujoco.mj_forward",[29,118182,118183],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1006,118185,118186],{},"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":82,"searchDepth":101,"depth":101,"links":118188},[118189,118190,118191,118192,118193,118194,118195,118196],{"id":117830,"depth":101,"text":117830},{"id":117859,"depth":101,"text":117860},{"id":117889,"depth":101,"text":117889},{"id":118004,"depth":101,"text":118004},{"id":118057,"depth":101,"text":118057},{"id":118069,"depth":101,"text":118069},{"id":118106,"depth":101,"text":118106},{"id":118135,"depth":101,"text":118135},"仿真搭建。",{"category":24325},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117773,"description":118197},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118204,"title":118205,"body":118206,"description":1026,"extension":1027,"meta":118661,"navigation":1029,"path":118662,"seo":118663,"stem":118664,"__hash__":118665},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118207,"toc":118659},[118208,118211,118214,118220,118656],[10,118209,118205],{"id":118210},"_1-最常用的基本操作更新",[19,118212,118213],{},"装linux系统教程：",[19,118215,118216],{},[1334,118217,118218],{"href":118218,"rel":118219},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24812],[77,118221,118225],{"className":118222,"code":118223,"language":118224,"meta":82,"style":82},"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",[84,118226,118227,118232,118237,118246,118251,118260,118265,118285,118290,118301,118306,118315,118320,118348,118353,118372,118377,118396,118400,118405,118421,118425,118430,118460,118464,118469,118485,118489,118494,118509,118513,118518,118534,118538,118543,118555,118567,118571,118576,118593,118597,118602,118620,118624,118629,118638,118642,118647],{"__ignoreMap":82},[87,118228,118229],{"class":89,"line":90},[87,118230,118231],{"class":199},"#更新相关的知识\n",[87,118233,118234],{"class":89,"line":101},[87,118235,118236],{"class":199},"# 更新软件包列表（从服务器获取最新软件信息）\n",[87,118238,118239,118241,118244],{"class":89,"line":120},[87,118240,25524],{"class":205},[87,118242,118243],{"class":949}," apt",[87,118245,27189],{"class":949},[87,118247,118248],{"class":89,"line":222},[87,118249,118250],{"class":199},"# 升级所有可更新的软件包（不删除旧包）\n",[87,118252,118253,118255,118257],{"class":89,"line":234},[87,118254,25524],{"class":205},[87,118256,118243],{"class":949},[87,118258,118259],{"class":949}," upgrade\n",[87,118261,118262],{"class":89,"line":256},[87,118263,118264],{"class":199},"#更新和升级软件包\n",[87,118266,118267,118269,118271,118274,118276,118278,118280,118283],{"class":89,"line":269},[87,118268,25524],{"class":205},[87,118270,118243],{"class":949},[87,118272,118273],{"class":949}," update",[87,118275,27137],{"class":97},[87,118277,25524],{"class":205},[87,118279,118243],{"class":949},[87,118281,118282],{"class":949}," upgrade",[87,118284,101907],{"class":104},[87,118286,118287],{"class":89,"line":463},[87,118288,118289],{"class":199},"#列出可更新的软件包及版本信息\n",[87,118291,118292,118295,118298],{"class":89,"line":469},[87,118293,118294],{"class":205},"apt",[87,118296,118297],{"class":949}," list",[87,118299,118300],{"class":104}," --upgradable\n",[87,118302,118303],{"class":89,"line":2287},[87,118304,118305],{"class":199},"#彻底升级（处理依赖关系，可能删除旧包）\n",[87,118307,118308,118310,118312],{"class":89,"line":2568},[87,118309,25524],{"class":205},[87,118311,118243],{"class":949},[87,118313,118314],{"class":949}," full-upgrade\n",[87,118316,118317],{"class":89,"line":2573},[87,118318,118319],{"class":199},"#设置指定版本\n",[87,118321,118322,118324,118326,118328,118330,118333,118335,118337,118339,118341,118344,118346],{"class":89,"line":2579},[87,118323,25524],{"class":205},[87,118325,118243],{"class":949},[87,118327,24781],{"class":949},[87,118329,29849],{"class":171},[87,118331,118332],{"class":949},"package_nam",[87,118334,1173],{"class":97},[87,118336,2051],{"class":171},[87,118338,946],{"class":949},[87,118340,938],{"class":171},[87,118342,118343],{"class":949},"version_numbe",[87,118345,1763],{"class":97},[87,118347,953],{"class":171},[87,118349,118350],{"class":89,"line":2584},[87,118351,118352],{"class":199},"#只安装软件包不升级\n",[87,118354,118355,118357,118359,118361,118363,118365,118367,118369],{"class":89,"line":2598},[87,118356,25524],{"class":205},[87,118358,118243],{"class":949},[87,118360,24781],{"class":949},[87,118362,29849],{"class":171},[87,118364,118332],{"class":949},[87,118366,1173],{"class":97},[87,118368,2051],{"class":171},[87,118370,118371],{"class":104}," --no-upgrade\n",[87,118373,118374],{"class":89,"line":2603},[87,118375,118376],{"class":199},"#只升级，不存在就不安装\n",[87,118378,118379,118381,118383,118385,118387,118389,118391,118393],{"class":89,"line":2609},[87,118380,25524],{"class":205},[87,118382,118243],{"class":949},[87,118384,24781],{"class":949},[87,118386,29849],{"class":171},[87,118388,118332],{"class":949},[87,118390,1173],{"class":97},[87,118392,2051],{"class":171},[87,118394,118395],{"class":104}," --only-upgrade\n",[87,118397,118398],{"class":89,"line":2630},[87,118399,3355],{"emptyLinePlaceholder":1029},[87,118401,118402],{"class":89,"line":2635},[87,118403,118404],{"class":199},"#安装指定的软件命令\n",[87,118406,118407,118409,118411,118413,118415,118417,118419],{"class":89,"line":2649},[87,118408,25524],{"class":205},[87,118410,118243],{"class":949},[87,118412,24781],{"class":949},[87,118414,29849],{"class":171},[87,118416,118332],{"class":949},[87,118418,1173],{"class":97},[87,118420,953],{"class":171},[87,118422,118423],{"class":89,"line":2654},[87,118424,3355],{"emptyLinePlaceholder":1029},[87,118426,118427],{"class":89,"line":2683},[87,118428,118429],{"class":199},"#安装多个软件包\n",[87,118431,118432,118434,118436,118438,118440,118443,118446,118448,118450,118453,118455,118457],{"class":89,"line":2688},[87,118433,25524],{"class":205},[87,118435,118243],{"class":949},[87,118437,24781],{"class":949},[87,118439,29849],{"class":171},[87,118441,118442],{"class":949},"package_",[87,118444,118445],{"class":171},"1>",[87,118447,29849],{"class":171},[87,118449,118442],{"class":949},[87,118451,118452],{"class":171},"2>",[87,118454,29849],{"class":171},[87,118456,118442],{"class":949},[87,118458,118459],{"class":171},"3>\n",[87,118461,118462],{"class":89,"line":2705},[87,118463,3355],{"emptyLinePlaceholder":1029},[87,118465,118466],{"class":89,"line":2710},[87,118467,118468],{"class":199},"#更新指定的软件命令\n",[87,118470,118471,118473,118475,118477,118479,118481,118483],{"class":89,"line":2715},[87,118472,25524],{"class":205},[87,118474,118243],{"class":949},[87,118476,118273],{"class":949},[87,118478,29849],{"class":171},[87,118480,118332],{"class":949},[87,118482,1173],{"class":97},[87,118484,953],{"class":171},[87,118486,118487],{"class":89,"line":2720},[87,118488,3355],{"emptyLinePlaceholder":1029},[87,118490,118491],{"class":89,"line":2734},[87,118492,118493],{"class":199},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[87,118495,118496,118498,118501,118503,118505,118507],{"class":89,"line":2739},[87,118497,118294],{"class":205},[87,118499,118500],{"class":949}," show",[87,118502,29849],{"class":171},[87,118504,118332],{"class":949},[87,118506,1173],{"class":97},[87,118508,953],{"class":171},[87,118510,118511],{"class":89,"line":3532},[87,118512,3355],{"emptyLinePlaceholder":1029},[87,118514,118515],{"class":89,"line":3546},[87,118516,118517],{"class":199},"#删除软件包命令\n",[87,118519,118520,118522,118524,118526,118528,118530,118532],{"class":89,"line":3554},[87,118521,25524],{"class":205},[87,118523,118243],{"class":949},[87,118525,27026],{"class":949},[87,118527,29849],{"class":171},[87,118529,118332],{"class":949},[87,118531,1173],{"class":97},[87,118533,953],{"class":171},[87,118535,118536],{"class":89,"line":3559},[87,118537,3355],{"emptyLinePlaceholder":1029},[87,118539,118540],{"class":89,"line":3565},[87,118541,118542],{"class":199},"# 清理旧版本和缓存（释放磁盘空间）\n",[87,118544,118545,118547,118549,118552],{"class":89,"line":3571},[87,118546,25524],{"class":205},[87,118548,118243],{"class":949},[87,118550,118551],{"class":949}," autoremove",[87,118553,118554],{"class":199},"  # 删除不再需要的依赖和库文件\n",[87,118556,118557,118559,118561,118564],{"class":89,"line":3576},[87,118558,25524],{"class":205},[87,118560,118243],{"class":949},[87,118562,118563],{"class":949}," clean",[87,118565,118566],{"class":199},"       # 清理下载的缓存包\n",[87,118568,118569],{"class":89,"line":8898},[87,118570,3355],{"emptyLinePlaceholder":1029},[87,118572,118573],{"class":89,"line":8922},[87,118574,118575],{"class":199},"#移除软件包及配置文件\n",[87,118577,118578,118580,118582,118585,118587,118589,118591],{"class":89,"line":8927},[87,118579,25524],{"class":205},[87,118581,118243],{"class":949},[87,118583,118584],{"class":949}," purge",[87,118586,29849],{"class":171},[87,118588,118332],{"class":949},[87,118590,1173],{"class":97},[87,118592,953],{"class":171},[87,118594,118595],{"class":89,"line":8933},[87,118596,3355],{"emptyLinePlaceholder":1029},[87,118598,118599],{"class":89,"line":8960},[87,118600,118601],{"class":199},"#查找软件包命令\n",[87,118603,118604,118606,118608,118611,118613,118616,118618],{"class":89,"line":8965},[87,118605,25524],{"class":205},[87,118607,118243],{"class":949},[87,118609,118610],{"class":949}," search",[87,118612,29849],{"class":171},[87,118614,118615],{"class":949},"keywor",[87,118617,1409],{"class":97},[87,118619,953],{"class":171},[87,118621,118622],{"class":89,"line":8971},[87,118623,3355],{"emptyLinePlaceholder":1029},[87,118625,118626],{"class":89,"line":8983},[87,118627,118628],{"class":199},"#列出所有已安装的包\n",[87,118630,118631,118633,118635],{"class":89,"line":8995},[87,118632,118294],{"class":205},[87,118634,118297],{"class":949},[87,118636,118637],{"class":104}," --installed\n",[87,118639,118640],{"class":89,"line":9007},[87,118641,3355],{"emptyLinePlaceholder":1029},[87,118643,118644],{"class":89,"line":10666},[87,118645,118646],{"class":199},"#列出所有已安装的包的版本信息\n",[87,118648,118649,118651,118653],{"class":89,"line":10691},[87,118650,118294],{"class":205},[87,118652,118297],{"class":949},[87,118654,118655],{"class":104}," --all-versions\n",[1006,118657,118658],{},"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":82,"searchDepth":101,"depth":101,"links":118660},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118205,"description":1026},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118667,"title":118668,"body":118669,"description":1026,"extension":1027,"meta":119410,"navigation":1029,"path":119411,"seo":119412,"stem":119413,"__hash__":119414},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118670,"toc":119397},[118671,118674,118678,118681,118687,118691,118695,118701,118706,118711,118716,118721,118726,118729,118732,118735,118738,118742,118745,118750,118753,118758,118761,118766,118773,118776,118779,118782,118785,118788,118799,118803,118807,118812,118817,118821,118826,118830,118835,118839,118843,118848,118851,118896,118901,118905,118909,118914,118920,118925,118935,118940,118950,118955,118960,118987,118991,118994,118999,119002,119027,119031,119036,119039,119044,119049,119069,119074,119077,119092,119096,119149,119152,119157,119161,119164,119179,119182,119185,119190,119194,119198,119201,119205,119209,119212,119217,119222,119226,119233,119241,119244,119251,119256,119261,119264,119269,119276,119281,119288,119292,119294,119299,119303,119306,119309,119314,119317,119322,119325,119330,119335,119340,119344,119349,119353,119394],[10,118672,118668],{"id":118673},"_2-linux装机教程",[14,118675,118677],{"id":118676},"_21-实体机","2.1 实体机",[19,118679,118680],{},"使用清华源：（Ubuntu24.04）",[19,118682,118683],{},[1334,118684,118685],{"href":118685,"rel":118686},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24812],[14,118688,118690],{"id":118689},"_22-普通虚拟机","2.2 普通虚拟机",[44,118692,118694],{"id":118693},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,118696,118697],{},[1334,118698,118699],{"href":118699,"rel":118700},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24812],[19,118702,118703],{},[39,118704],{"alt":82,"src":118705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,118707,118708],{},[39,118709],{"alt":82,"src":118710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,118712,118713],{},[39,118714],{"alt":82,"src":118715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,118717,118718],{},[39,118719],{"alt":82,"src":118720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,118722,118723],{},[39,118724],{"alt":82,"src":118725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,118727,118728],{},"内存4G（4096MB）；",[19,118730,118731],{},"CPU给4个核；",[19,118733,118734],{},"硬盘动态分配60G；",[19,118736,118737],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[44,118739,118741],{"id":118740},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,118743,118744],{},"按照1.1的步骤下载Ubuntu",[19,118746,118747],{},[39,118748],{"alt":82,"src":118749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,118751,118752],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,118754,118755],{},[39,118756],{"alt":82,"src":118757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,118759,118760],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,118762,118763],{},[39,118764],{"alt":82,"src":118765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,118767,118768,118769,118772],{},"选择“正常安装”(找不到都用Alt+F7)， ",[57,118770,118771],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,118774,118775],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,118777,118778],{},"将改动写入磁盘吗 继续",[19,118780,118781],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,118783,118784],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,118786,118787],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,118789,118790,118791,118794,118795,118798],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[57,118792,118793],{},"除了"," 选不发送系统信息与不升级之外， ",[57,118796,118797],{},"其它"," 都跳过或前进）",[44,118800,118802],{"id":118801},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[49,118804,118806],{"id":118805},"_2231-全屏","2.2.3.1 全屏",[19,118808,118809],{},[39,118810],{"alt":82,"src":118811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,118813,118814],{},[39,118815],{"alt":82,"src":118816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[49,118818,118820],{"id":118819},"_2232-文件交换","2.2.3.2 文件交换",[19,118822,118823],{},[39,118824],{"alt":82,"src":118825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[49,118827,118829],{"id":118828},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,118831,118832],{},[39,118833],{"alt":82,"src":118834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118836,118838],{"id":118837},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[44,118840,118842],{"id":118841},"_231-简介与优缺点","2.3.1 简介与优缺点",[1055,118844,118845],{},[29,118846,118847],{},"什么情况下推荐？",[19,118849,118850],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[1055,118852,118853],{"start":101},[29,118854,118855,118856],{},"优缺点：",[1055,118857,118858,118888],{},[29,118859,118860,118861],{},"优点：",[1055,118862,118863,118866,118873,118876,118879,118882,118885],{},[29,118864,118865],{},"WSL2是最好的Linux发行版;(bushi)",[29,118867,118868,118869,118872],{},"性能损耗极低。且比在Windows上跑深度性能 ",[57,118870,118871],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[29,118874,118875],{},"非常方便调用USB设备，可以USB直通;",[29,118877,118878],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[29,118880,118881],{},"非常方便Win与WSL2互相传文件等协同操作;",[29,118883,118884],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[29,118886,118887],{},"非常方便使用Windows的VScode远程开发;",[29,118889,118890,118891],{},"缺点：",[1055,118892,118893],{},[29,118894,118895],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118897,118898],{},[39,118899],{"alt":82,"src":118900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[44,118902,118904],{"id":118903},"_232-安装教程","2.3.2 安装教程",[49,118906,118908],{"id":118907},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[1055,118910,118911],{},[29,118912,118913],{},"方法一(图形界面)",[19,118915,118916,118917,25566],{},"用Win+R输入",[84,118918,118919],{},"appwiz.cpl",[19,118921,118922],{},[39,118923],{"alt":82,"src":118924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118926,118927,118928,118931,118932,27420],{},"点击OK进入 ",[57,118929,118930],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[57,118933,118934],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118936,118937],{},[39,118938],{"alt":82,"src":118939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118941,118942,118943,101944,118946,118949],{},"选择 ",[57,118944,118945],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[57,118947,118948],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118951,118952],{},[39,118953],{"alt":82,"src":118954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[1055,118956,118957],{"start":101},[29,118958,118959],{},"方法二(命令行)",[77,118961,118965],{"className":118962,"code":118963,"language":118964,"meta":82,"style":82},"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",[84,118966,118967,118972,118977,118982],{"__ignoreMap":82},[87,118968,118969],{"class":89,"line":90},[87,118970,118971],{},"# 开启 Linux 子系统\n",[87,118973,118974],{"class":89,"line":101},[87,118975,118976],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[87,118978,118979],{"class":89,"line":120},[87,118980,118981],{},"# 开启虚拟机平台\n",[87,118983,118984],{"class":89,"line":222},[87,118985,118986],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[49,118988,118990],{"id":118989},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118992,118993],{},"用管理员权限打开powershell",[19,118995,118996],{},[39,118997],{"alt":82,"src":118998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119000,119001],{},"升级WSL并设置默认版本为WSL2",[77,119003,119005],{"className":118962,"code":119004,"language":118964,"meta":82,"style":82},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[84,119006,119007,119012,119017,119022],{"__ignoreMap":82},[87,119008,119009],{"class":89,"line":90},[87,119010,119011],{},"# 更新 wsl\n",[87,119013,119014],{"class":89,"line":101},[87,119015,119016],{},"wsl --update\n",[87,119018,119019],{"class":89,"line":120},[87,119020,119021],{},"# 将 wsl 版本设置为 wsl2\n",[87,119023,119024],{"class":89,"line":222},[87,119025,119026],{},"wsl --set-default-version 2\n",[49,119028,119030],{"id":119029},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[1055,119032,119033],{},[29,119034,119035],{},"方式一(商店下载)",[19,119037,119038],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119040,119041],{},[39,119042],{"alt":82,"src":119043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[1055,119045,119046],{"start":101},[29,119047,119048],{},"方式二(命令行安装)",[77,119050,119052],{"className":118962,"code":119051,"language":118964,"meta":82,"style":82},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[84,119053,119054,119059,119064],{"__ignoreMap":82},[87,119055,119056],{"class":89,"line":90},[87,119057,119058],{},"# 列出可安装的 Linux 版本\n",[87,119060,119061],{"class":89,"line":101},[87,119062,119063],{},"#（需要科学手段）\n",[87,119065,119066],{"class":89,"line":120},[87,119067,119068],{},"wsl --list --online\n",[19,119070,119071],{},[39,119072],{"alt":82,"src":119073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119075,119076],{},"选择对应发行版并安装",[77,119078,119080],{"className":118962,"code":119079,"language":118964,"meta":82,"style":82},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[84,119081,119082,119087],{"__ignoreMap":82},[87,119083,119084],{"class":89,"line":90},[87,119085,119086],{},"# Ubuntu安装完毕后需要重启系统\n",[87,119088,119089],{"class":89,"line":101},[87,119090,119091],{},"wsl --install -d Ubuntu-24.04\n",[49,119093,119095],{"id":119094},"_2324-查看系统状态","2.3.2.4 查看系统状态",[77,119097,119099],{"className":118962,"code":119098,"language":118964,"meta":82,"style":82},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[84,119100,119101,119106,119111,119116,119121,119125,119129,119134,119139,119144],{"__ignoreMap":82},[87,119102,119103],{"class":89,"line":90},[87,119104,119105],{},"# 查看 wsl\n",[87,119107,119108],{"class":89,"line":101},[87,119109,119110],{},"wsl -l\n",[87,119112,119113],{"class":89,"line":120},[87,119114,119115],{},"# 查看 wsl 运行版本或模式\n",[87,119117,119118],{"class":89,"line":222},[87,119119,119120],{},"wsl -l -v\n",[87,119122,119123],{"class":89,"line":234},[87,119124,3355],{"emptyLinePlaceholder":1029},[87,119126,119127],{"class":89,"line":256},[87,119128,3355],{"emptyLinePlaceholder":1029},[87,119130,119131],{"class":89,"line":269},[87,119132,119133],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[87,119135,119136],{"class":89,"line":463},[87,119137,119138],{},"wsl --set-version \u003Cdistro> 2\n",[87,119140,119141],{"class":89,"line":469},[87,119142,119143],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[87,119145,119146],{"class":89,"line":2287},[87,119147,119148],{},"wsl --unregister \u003Cdistro>\n",[19,119150,119151],{},"输出Version为2即正常",[19,119153,119154],{},[39,119155],{"alt":82,"src":119156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[49,119158,119160],{"id":119159},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,119162,119163],{},"直接在Powershell里输入wsl命令进入子系统",[77,119165,119167],{"className":118962,"code":119166,"language":118964,"meta":82,"style":82},"# 进入子系统\nwsl\n",[84,119168,119169,119174],{"__ignoreMap":82},[87,119170,119171],{"class":89,"line":90},[87,119172,119173],{},"# 进入子系统\n",[87,119175,119176],{"class":89,"line":101},[87,119177,119178],{},"wsl\n",[19,119180,119181],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,119183,119184],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,119186,119187],{},[39,119188],{"alt":82,"src":119189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[44,119191,119193],{"id":119192},"_233-配置各种环境","2.3.3 配置各种环境",[49,119195,119197],{"id":119196},"_2331-换源","2.3.3.1 换源",[19,119199,119200],{},"(同实体机LINUX，往下找教程)",[49,119202,119204],{"id":119203},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23857,119206,119208],{"id":119207},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,119210,119211],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,119213,119214],{},[39,119215],{"alt":82,"src":119216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,119218,119219],{},[39,119220],{"alt":82,"src":119221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23857,119223,119225],{"id":119224},"_23322-cuda","2.3.3.2.2 CUDA",[19,119227,119228,119229],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[1334,119230,119231],{"href":119231,"rel":119232},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24812],[19,119234,119235,119238],{},[39,119236],{"alt":82,"src":119237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[39,119239],{"alt":82,"src":119240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,119242,119243],{},"在下方的网站，选择合适的版本。",[19,119245,119246,119247],{},"WSL2 专属 CUDA 指南：",[1334,119248,119249],{"href":119249,"rel":119250},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24812],[19,119252,119253],{},[57,119254,119255],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,119257,119258],{},[39,119259],{"alt":82,"src":119260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,119262,119263],{},"挨行敲一遍",[19,119265,119266],{},[39,119267],{"alt":82,"src":119268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,119270,119271,119272,119275],{},"敲完后，输入",[84,119273,119274],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,119277,119278],{},[39,119279],{"alt":82,"src":119280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,119282,119283,119284,119287],{},"（请详看下方教程的",[57,119285,119286],{},"安装CUDA的配置环境来看","如何配置环境）",[23857,119289,119291],{"id":119290},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,119293,119200],{},[19,119295,119296],{},[39,119297],{"alt":82,"src":119298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[49,119300,119302],{"id":119301},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,119304,119305],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,119307,119308],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,119310,119311],{},[39,119312],{"alt":82,"src":119313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,119315,119316],{},"连接WSL2",[19,119318,119319],{},[39,119320],{"alt":82,"src":119321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,119323,119324],{},"远程开发成功。",[19,119326,119327],{},[39,119328],{"alt":82,"src":119329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,119331,119332],{},[39,119333],{"alt":82,"src":119334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,119336,119337],{},[39,119338],{"alt":82,"src":119339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[49,119341,119343],{"id":119342},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,119345,119346],{},[39,119347],{"alt":82,"src":119348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[49,119350,119352],{"id":119351},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[77,119354,119356],{"className":118222,"code":119355,"language":118224,"meta":82,"style":82},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[84,119357,119358,119366,119374,119385,119389],{"__ignoreMap":82},[87,119359,119360,119362,119364],{"class":89,"line":90},[87,119361,25524],{"class":205},[87,119363,118243],{"class":949},[87,119365,27189],{"class":949},[87,119367,119368,119370,119372],{"class":89,"line":101},[87,119369,25524],{"class":205},[87,119371,118243],{"class":949},[87,119373,118259],{"class":949},[87,119375,119376,119378,119380,119382],{"class":89,"line":120},[87,119377,25524],{"class":205},[87,119379,118243],{"class":949},[87,119381,24781],{"class":949},[87,119383,119384],{"class":949}," mesa-utils\n",[87,119386,119387],{"class":89,"line":222},[87,119388,3355],{"emptyLinePlaceholder":1029},[87,119390,119391],{"class":89,"line":234},[87,119392,119393],{"class":199},"#然后重启wsl2即可\n",[1006,119395,119396],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":82,"searchDepth":101,"depth":101,"links":119398},[119399,119400,119405],{"id":118676,"depth":101,"text":118677},{"id":118689,"depth":101,"text":118690,"children":119401},[119402,119403,119404],{"id":118693,"depth":120,"text":118694},{"id":118740,"depth":120,"text":118741},{"id":118801,"depth":120,"text":118802},{"id":118837,"depth":101,"text":118838,"children":119406},[119407,119408,119409],{"id":118841,"depth":120,"text":118842},{"id":118903,"depth":120,"text":118904},{"id":119192,"depth":120,"text":119193},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118668,"description":1026},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119416,"title":119417,"body":119418,"description":1026,"extension":1027,"meta":122354,"navigation":1029,"path":122355,"seo":122356,"stem":122357,"__hash__":122358},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119419,"toc":122326},[119420,119423,119427,119433,119437,119443,119447,119635,119638,119643,119647,119651,119654,119657,119663,119668,119671,119674,119679,119712,119717,119721,119798,119801,119806,119810,119813,119852,119855,119864,119882,119887,119894,120011,120016,120019,120046,120051,120055,120064,120114,120121,120125,120128,120142,120149,120183,120188,120192,120215,120218,120223,120227,120230,120233,120236,120278,120282,120285,120288,120329,120333,120337,120340,120345,120350,120353,120376,120379,120387,120392,120395,120400,120405,120408,120413,120417,120422,120445,120450,120512,120520,120525,120530,120533,120538,120541,120546,120551,120569,120574,120580,120585,120599,120603,120606,120609,120612,120655,120658,120663,120764,120767,120772,120776,120780,120817,120821,120825,120829,120875,120879,120924,120928,120935,120943,120998,121001,121078,121081,121104,121108,121111,121116,121121,121129,121132,121137,121142,121147,121150,121155,121164,121167,121172,121175,121246,121251,121254,121259,121262,121267,121270,121275,121278,121283,121288,121291,121366,121369,121382,121387,121390,121404,121407,121436,121441,121470,121473,121478,121482,121487,121496,121499,121504,121507,121512,121515,121518,121523,121526,121531,121536,121539,121544,121547,121672,121677,121707,121710,121715,121720,121737,121740,121783,121786,121813,121818,121831,121974,121978,121983,121997,122000,122051,122054,122084,122087,122103,122108,122122,122125,122192,122197,122206,122211,122214,122226,122231,122238,122262,122265,122270,122273,122292,122297,122304,122316,122323],[10,119421,119417],{"id":119422},"_3-安装必备配置",[14,119424,119426],{"id":119425},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[77,119428,119431],{"className":119429,"code":119430,"language":599},[597],"  打开下方网站（注意，该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",[84,119432,119430],{"__ignoreMap":82},[44,119434,119436],{"id":119435},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[77,119438,119441],{"className":119439,"code":119440,"language":599},[597],"  输入以下命令\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",[84,119442,119440],{"__ignoreMap":82},[44,119444,119446],{"id":119445},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[77,119448,119452],{"className":119449,"code":119450,"language":119451,"meta":82,"style":82},"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",[84,119453,119454,119462,119473,119485,119499,119503,119513,119518,119522,119526,119531,119535,119547,119551,119556,119560,119571,119575,119591,119595,119606,119610,119615,119619,119627],{"__ignoreMap":82},[87,119455,119456,119458,119460],{"class":89,"line":90},[87,119457,25524],{"class":205},[87,119459,118243],{"class":949},[87,119461,27189],{"class":949},[87,119463,119464,119466,119468,119470],{"class":89,"line":101},[87,119465,25524],{"class":205},[87,119467,118243],{"class":949},[87,119469,24781],{"class":949},[87,119471,119472],{"class":949}," vim\n",[87,119474,119475,119477,119480,119482],{"class":89,"line":120},[87,119476,25524],{"class":205},[87,119478,119479],{"class":949}," rm",[87,119481,26272],{"class":104},[87,119483,119484],{"class":949}," \u002Fetc\u002Fapt\u002Fsources.list\n",[87,119486,119487,119489,119491,119493,119496],{"class":89,"line":222},[87,119488,25524],{"class":205},[87,119490,119479],{"class":949},[87,119492,26272],{"class":104},[87,119494,119495],{"class":949}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[87,119497,119498],{"class":104},"**\n",[87,119500,119501],{"class":89,"line":234},[87,119502,3355],{"emptyLinePlaceholder":1029},[87,119504,119505,119507,119510],{"class":89,"line":256},[87,119506,25524],{"class":205},[87,119508,119509],{"class":949}," vim",[87,119511,119512],{"class":949}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[87,119514,119515],{"class":89,"line":269},[87,119516,119517],{"class":949},"```\n",[87,119519,119520],{"class":89,"line":463},[87,119521,3355],{"emptyLinePlaceholder":1029},[87,119523,119524],{"class":89,"line":469},[87,119525,3355],{"emptyLinePlaceholder":1029},[87,119527,119528],{"class":89,"line":2287},[87,119529,119530],{"class":205},"选择好Ubuntu版本后，复制下方的内容。\n",[87,119532,119533],{"class":89,"line":2568},[87,119534,3355],{"emptyLinePlaceholder":1029},[87,119536,119537,119539,119542,119545],{"class":89,"line":2573},[87,119538,1322],{"class":171},[87,119540,119541],{"class":949},"[](",[87,119543,119544],{"class":205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[87,119546,1108],{"class":949},[87,119548,119549],{"class":89,"line":2579},[87,119550,3355],{"emptyLinePlaceholder":1029},[87,119552,119553],{"class":89,"line":2584},[87,119554,119555],{"class":205},"粘贴进去\n",[87,119557,119558],{"class":89,"line":2598},[87,119559,3355],{"emptyLinePlaceholder":1029},[87,119561,119562,119564,119566,119569],{"class":89,"line":2603},[87,119563,1322],{"class":171},[87,119565,119541],{"class":949},[87,119567,119568],{"class":205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[87,119570,1108],{"class":949},[87,119572,119573],{"class":89,"line":2609},[87,119574,3355],{"emptyLinePlaceholder":1029},[87,119576,119577,119580,119583,119586,119588],{"class":89,"line":2630},[87,119578,119579],{"class":205},"按一下ESC，然后英文冒号，输入",[87,119581,119582],{"class":949}," `",[87,119584,119585],{"class":205},":wq!",[87,119587,2063],{"class":949},[87,119589,119590],{"class":205},"然后回车\n",[87,119592,119593],{"class":89,"line":2635},[87,119594,3355],{"emptyLinePlaceholder":1029},[87,119596,119597,119599,119601,119604],{"class":89,"line":2649},[87,119598,1322],{"class":171},[87,119600,119541],{"class":949},[87,119602,119603],{"class":205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[87,119605,1108],{"class":949},[87,119607,119608],{"class":89,"line":2654},[87,119609,3355],{"emptyLinePlaceholder":1029},[87,119611,119612],{"class":89,"line":2683},[87,119613,119614],{"class":205},"输入以下命令\n",[87,119616,119617],{"class":89,"line":2688},[87,119618,3355],{"emptyLinePlaceholder":1029},[87,119620,119621,119624],{"class":89,"line":2705},[87,119622,119623],{"class":949},"```",[87,119625,119626],{"class":205},"Bash\n",[87,119628,119629,119631,119633],{"class":89,"line":2710},[87,119630,25524],{"class":205},[87,119632,118243],{"class":949},[87,119634,27189],{"class":949},[19,119636,119637],{},"这里被替换成对应学校则成功",[19,119639,119640],{},[39,119641],{"alt":82,"src":119642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119644,119646],{"id":119645},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[44,119648,119650],{"id":119649},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,119652,119653],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,119655,119656],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,119658,119659],{},[1334,119660,119661],{"href":119661,"rel":119662},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24812],[19,119664,119665],{},[39,119666],{"alt":82,"src":119667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,119669,119670],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,119672,119673],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,119675,119676],{},[39,119677],{"alt":82,"src":119678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[77,119680,119682],{"className":118222,"code":119681,"language":118224,"meta":82,"style":82},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[84,119683,119684,119689,119696,119701],{"__ignoreMap":82},[87,119685,119686],{"class":89,"line":90},[87,119687,119688],{"class":199},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[87,119690,119691,119693],{"class":89,"line":101},[87,119692,102202],{"class":104},[87,119694,119695],{"class":949}," ~\u002FDownloads\n",[87,119697,119698],{"class":89,"line":120},[87,119699,119700],{"class":199},"#下方chrome安装包名不一定是这个，根据名字来看\n",[87,119702,119703,119705,119707,119709],{"class":89,"line":222},[87,119704,25524],{"class":205},[87,119706,118243],{"class":949},[87,119708,24781],{"class":949},[87,119710,119711],{"class":949}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,119713,119714],{},[39,119715],{"alt":82,"src":119716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[44,119718,119720],{"id":119719},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[77,119722,119724],{"className":118222,"code":119723,"language":118224,"meta":82,"style":82},"# 老版\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",[84,119725,119726,119731,119739,119750,119755,119759,119764,119774,119782,119793],{"__ignoreMap":82},[87,119727,119728],{"class":89,"line":90},[87,119729,119730],{"class":199},"# 老版\n",[87,119732,119733,119735,119737],{"class":89,"line":101},[87,119734,25524],{"class":205},[87,119736,118243],{"class":949},[87,119738,27189],{"class":949},[87,119740,119741,119743,119745,119747],{"class":89,"line":120},[87,119742,25524],{"class":205},[87,119744,118243],{"class":949},[87,119746,24781],{"class":949},[87,119748,119749],{"class":949}," neofetch\n",[87,119751,119752],{"class":89,"line":222},[87,119753,119754],{"class":205},"neofetch\n",[87,119756,119757],{"class":89,"line":234},[87,119758,3355],{"emptyLinePlaceholder":1029},[87,119760,119761],{"class":89,"line":256},[87,119762,119763],{"class":199},"# 新版\n",[87,119765,119766,119768,119771],{"class":89,"line":269},[87,119767,25524],{"class":205},[87,119769,119770],{"class":949}," add-apt-repository",[87,119772,119773],{"class":949}," ppa:zhangsongcui3371\u002Ffastfetch\n",[87,119775,119776,119778,119780],{"class":89,"line":463},[87,119777,25524],{"class":205},[87,119779,118243],{"class":949},[87,119781,27189],{"class":949},[87,119783,119784,119786,119788,119790],{"class":89,"line":469},[87,119785,25524],{"class":205},[87,119787,118243],{"class":949},[87,119789,24781],{"class":949},[87,119791,119792],{"class":949}," fastfetch\n",[87,119794,119795],{"class":89,"line":2287},[87,119796,119797],{"class":205},"fastfetch\n",[19,119799,119800],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,119802,119803],{},[39,119804],{"alt":82,"src":119805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[44,119807,119809],{"id":119808},"_323-移除snap应用","3.2.3 移除snap应用",[19,119811,119812],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[77,119814,119816],{"className":118222,"code":119815,"language":118224,"meta":82,"style":82},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[84,119817,119818,119830,119841],{"__ignoreMap":82},[87,119819,119820,119822,119824,119827],{"class":89,"line":90},[87,119821,25524],{"class":205},[87,119823,27460],{"class":949},[87,119825,119826],{"class":949}," disable",[87,119828,119829],{"class":949}," snapd.service\n",[87,119831,119832,119834,119836,119838],{"class":89,"line":101},[87,119833,25524],{"class":205},[87,119835,27460],{"class":949},[87,119837,119826],{"class":949},[87,119839,119840],{"class":949}," snapd.socket\n",[87,119842,119843,119845,119847,119849],{"class":89,"line":120},[87,119844,25524],{"class":205},[87,119846,27460],{"class":949},[87,119848,119826],{"class":949},[87,119850,119851],{"class":949}," snapd.seeded.service\n",[19,119853,119854],{},"然后查看snap应用列表",[19,119856,119857,119858,119863],{},"根据你安装的选择不同（最小安装或普通安装），有",[1334,119859,119862],{"href":119860,"rel":119861},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24812],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[77,119865,119867],{"className":118222,"code":119866,"language":118224,"meta":82,"style":82},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[84,119868,119869,119874],{"__ignoreMap":82},[87,119870,119871],{"class":89,"line":90},[87,119872,119873],{"class":199},"# 查询当前系统上snap安装了哪些app\n",[87,119875,119876,119879],{"class":89,"line":101},[87,119877,119878],{"class":205},"snap",[87,119880,119881],{"class":949}," list\n",[19,119883,119884],{},[39,119885],{"alt":82,"src":119886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119888,119889,119890,119893],{},"卸载掉图中所有应用，按照 ",[57,119891,119892],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[77,119895,119897],{"className":118222,"code":119896,"language":118224,"meta":82,"style":82},"#移除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",[84,119898,119899,119904,119916,119921,119932,119937,119948,119953,119964,119969,119973,119978,119989,120000],{"__ignoreMap":82},[87,119900,119901],{"class":89,"line":90},[87,119902,119903],{"class":199},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[87,119905,119906,119908,119911,119913],{"class":89,"line":101},[87,119907,25524],{"class":205},[87,119909,119910],{"class":949}," snap",[87,119912,27026],{"class":949},[87,119914,119915],{"class":949}," snap-store\n",[87,119917,119918],{"class":89,"line":120},[87,119919,119920],{"class":199},"#移除firefox浏览器\n",[87,119922,119923,119925,119927,119929],{"class":89,"line":222},[87,119924,25524],{"class":205},[87,119926,119910],{"class":949},[87,119928,27026],{"class":949},[87,119930,119931],{"class":949}," firefox\n",[87,119933,119934],{"class":89,"line":234},[87,119935,119936],{"class":199},"#移除gnome-42-2204\n",[87,119938,119939,119941,119943,119945],{"class":89,"line":256},[87,119940,25524],{"class":205},[87,119942,119910],{"class":949},[87,119944,27026],{"class":949},[87,119946,119947],{"class":949}," gnome-42-2204\n",[87,119949,119950],{"class":89,"line":269},[87,119951,119952],{"class":199},"#移除gtk-common-themes\n",[87,119954,119955,119957,119959,119961],{"class":89,"line":463},[87,119956,25524],{"class":205},[87,119958,119910],{"class":949},[87,119960,27026],{"class":949},[87,119962,119963],{"class":949}," gtk-common-themes\n",[87,119965,119966],{"class":89,"line":469},[87,119967,119968],{"class":199},"#移除其它...\n",[87,119970,119971],{"class":89,"line":2287},[87,119972,3629],{"class":97},[87,119974,119975],{"class":89,"line":2568},[87,119976,119977],{"class":199},"#移除core22,bare以及snapd\n",[87,119979,119980,119982,119984,119986],{"class":89,"line":2573},[87,119981,25524],{"class":205},[87,119983,119910],{"class":949},[87,119985,27026],{"class":949},[87,119987,119988],{"class":949}," core22\n",[87,119990,119991,119993,119995,119997],{"class":89,"line":2579},[87,119992,25524],{"class":205},[87,119994,119910],{"class":949},[87,119996,27026],{"class":949},[87,119998,119999],{"class":949}," bare\n",[87,120001,120002,120004,120006,120008],{"class":89,"line":2584},[87,120003,25524],{"class":205},[87,120005,119910],{"class":949},[87,120007,27026],{"class":949},[87,120009,120010],{"class":949}," snapd\n",[19,120012,120013],{},[39,120014],{"alt":82,"src":120015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120017,120018],{},"输入以下命令查看是否还有snap包",[77,120020,120022],{"className":118222,"code":120021,"language":118224,"meta":82,"style":82},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[84,120023,120024,120030,120034,120038,120042],{"__ignoreMap":82},[87,120025,120026,120028],{"class":89,"line":90},[87,120027,119878],{"class":205},[87,120029,119881],{"class":949},[87,120031,120032],{"class":89,"line":101},[87,120033,119730],{"class":199},[87,120035,120036],{"class":89,"line":120},[87,120037,119754],{"class":205},[87,120039,120040],{"class":89,"line":222},[87,120041,119763],{"class":199},[87,120043,120044],{"class":89,"line":234},[87,120045,119797],{"class":205},[19,120047,120048],{},[39,120049],{"alt":82,"src":120050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[44,120052,120054],{"id":120053},"_324-移除snap","3.2.4 移除snap",[19,120056,120057,120058,120063],{},"在删除掉",[1334,120059,120062],{"href":120060,"rel":120061},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24812],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[77,120065,120067],{"className":118222,"code":120066,"language":118224,"meta":82,"style":82}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[84,120068,120069,120074,120087,120092,120103],{"__ignoreMap":82},[87,120070,120071],{"class":89,"line":90},[87,120072,120073],{"class":199}," #使用apt移除掉snap\n",[87,120075,120076,120078,120080,120082,120085],{"class":89,"line":101},[87,120077,25524],{"class":205},[87,120079,118243],{"class":949},[87,120081,118551],{"class":949},[87,120083,120084],{"class":104}," --purge",[87,120086,120010],{"class":949},[87,120088,120089],{"class":89,"line":120},[87,120090,120091],{"class":199},"#移除snapd的一些目录\n",[87,120093,120094,120096,120098,120100],{"class":89,"line":222},[87,120095,25524],{"class":205},[87,120097,119479],{"class":949},[87,120099,26272],{"class":104},[87,120101,120102],{"class":949}," \u002Fvar\u002Fcache\u002Fsnapd\n",[87,120104,120105,120107,120109,120111],{"class":89,"line":234},[87,120106,25524],{"class":205},[87,120108,119479],{"class":949},[87,120110,26272],{"class":104},[87,120112,120113],{"class":949}," ~\u002Fsnap\n",[19,120115,120116,120117,120120],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[84,120118,120119],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[44,120122,120124],{"id":120123},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120126,120127],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[77,120129,120131],{"className":118222,"code":120130,"language":118224,"meta":82,"style":82},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[84,120132,120133],{"__ignoreMap":82},[87,120134,120135,120137,120139],{"class":89,"line":90},[87,120136,25524],{"class":205},[87,120138,119509],{"class":949},[87,120140,120141],{"class":949}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120143,120144,120145,120148],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[84,120146,120147],{},":wq"," 回车",[77,120150,120152],{"className":118222,"code":120151,"language":118224,"meta":82,"style":82},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[84,120153,120154,120161,120175],{"__ignoreMap":82},[87,120155,120156,120159],{"class":89,"line":90},[87,120157,120158],{"class":205},"Package:",[87,120160,120010],{"class":949},[87,120162,120163,120166,120169,120172],{"class":89,"line":101},[87,120164,120165],{"class":205},"Pin:",[87,120167,120168],{"class":949}," release",[87,120170,120171],{"class":949}," a=",[87,120173,120174],{"class":104},"*\n",[87,120176,120177,120180],{"class":89,"line":120},[87,120178,120179],{"class":205},"Pin-Priority:",[87,120181,120182],{"class":104}," -10\n",[19,120184,120185],{},[39,120186],{"alt":82,"src":120187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[44,120189,120191],{"id":120190},"_326-测试是否成功","3.2.6 测试是否成功",[77,120193,120195],{"className":118222,"code":120194,"language":118224,"meta":82,"style":82},"sudo apt update\nsudo apt install firefox\n",[84,120196,120197,120205],{"__ignoreMap":82},[87,120198,120199,120201,120203],{"class":89,"line":90},[87,120200,25524],{"class":205},[87,120202,118243],{"class":949},[87,120204,27189],{"class":949},[87,120206,120207,120209,120211,120213],{"class":89,"line":101},[87,120208,25524],{"class":205},[87,120210,118243],{"class":949},[87,120212,24781],{"class":949},[87,120214,119931],{"class":949},[19,120216,120217],{},"这里提示snapd无法被安装，就证明成功了",[19,120219,120220],{},[39,120221],{"alt":82,"src":120222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[44,120224,120226],{"id":120225},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,120228,120229],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,120231,120232],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,120234,120235],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[77,120237,120239],{"className":118222,"code":120238,"language":118224,"meta":82,"style":82},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[84,120240,120241,120246,120255,120260,120268],{"__ignoreMap":82},[87,120242,120243],{"class":89,"line":90},[87,120244,120245],{"class":199},"# 添加Mozilla提供的源\n",[87,120247,120248,120250,120252],{"class":89,"line":101},[87,120249,25524],{"class":205},[87,120251,119770],{"class":949},[87,120253,120254],{"class":949}," ppa:mozillateam\u002Fppa\n",[87,120256,120257],{"class":89,"line":120},[87,120258,120259],{"class":199},"# 安装Firefox\n",[87,120261,120262,120264,120266],{"class":89,"line":222},[87,120263,25524],{"class":205},[87,120265,118243],{"class":949},[87,120267,27189],{"class":949},[87,120269,120270,120272,120274,120276],{"class":89,"line":234},[87,120271,25524],{"class":205},[87,120273,118243],{"class":949},[87,120275,24781],{"class":949},[87,120277,119931],{"class":949},[44,120279,120281],{"id":120280},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,120283,120284],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,120286,120287],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[77,120289,120291],{"className":118222,"code":120290,"language":118224,"meta":82,"style":82},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[84,120292,120293,120298,120308,120316,120320],{"__ignoreMap":82},[87,120294,120295],{"class":89,"line":90},[87,120296,120297],{"class":199},"#删掉禁止安装snap的配置文件\n",[87,120299,120300,120302,120304,120306],{"class":89,"line":101},[87,120301,25524],{"class":205},[87,120303,119479],{"class":949},[87,120305,26272],{"class":104},[87,120307,120141],{"class":949},[87,120309,120310,120312,120314],{"class":89,"line":120},[87,120311,25524],{"class":205},[87,120313,118243],{"class":949},[87,120315,27189],{"class":949},[87,120317,120318],{"class":89,"line":222},[87,120319,3355],{"emptyLinePlaceholder":1029},[87,120321,120322,120324,120326],{"class":89,"line":234},[87,120323,25524],{"class":205},[87,120325,118243],{"class":949},[87,120327,120328],{"class":949}," dist-update\n",[14,120330,120332],{"id":120331},"_33-中文输入法","3.3 中文输入法",[44,120334,120336],{"id":120335},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,120338,120339],{},"官网下载搜狗输入法",[19,120341,120342],{},[39,120343],{"alt":82,"src":120344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,120346,120347],{},[39,120348],{"alt":82,"src":120349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,120351,120352],{},"打开终端输入如下",[77,120354,120356],{"className":118222,"code":120355,"language":118224,"meta":82,"style":82},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[84,120357,120358,120365],{"__ignoreMap":82},[87,120359,120360,120362],{"class":89,"line":90},[87,120361,102202],{"class":104},[87,120363,120364],{"class":949}," ~\u002FDownloads\u002F\n",[87,120366,120367,120369,120371,120373],{"class":89,"line":101},[87,120368,25524],{"class":205},[87,120370,118243],{"class":949},[87,120372,24781],{"class":949},[87,120374,120375],{"class":949}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,120377,120378],{},"打开Fcitx",[19,120380,120381,120384],{},[39,120382],{"alt":82,"src":120383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[39,120385],{"alt":82,"src":120386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,120388,120389],{},[39,120390],{"alt":82,"src":120391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,120393,120394],{},"添加搜狗输入法",[19,120396,120397],{},[39,120398],{"alt":82,"src":120399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,120401,120402],{},[39,120403],{"alt":82,"src":120404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,120406,120407],{},"将搜狗输入法设置为唯一输入法",[19,120409,120410],{},[39,120411],{"alt":82,"src":120412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[44,120414,120416],{"id":120415},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[1055,120418,120419],{},[29,120420,120421],{},"卸载旧输入法",[77,120423,120425],{"className":119449,"code":120424,"language":119451,"meta":82,"style":82},"sudo apt purge fcitx* ibus*\n",[84,120426,120427],{"__ignoreMap":82},[87,120428,120429,120431,120433,120435,120438,120440,120443],{"class":89,"line":90},[87,120430,25524],{"class":205},[87,120432,118243],{"class":949},[87,120434,118584],{"class":949},[87,120436,120437],{"class":949}," fcitx",[87,120439,1549],{"class":104},[87,120441,120442],{"class":949}," ibus",[87,120444,120174],{"class":104},[1055,120446,120447],{"start":101},[29,120448,120449],{},"安装Fcitx5",[77,120451,120453],{"className":118222,"code":120452,"language":118224,"meta":82,"style":82},"# 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",[84,120454,120455,120460,120474,120478,120483,120492,120500],{"__ignoreMap":82},[87,120456,120457],{"class":89,"line":90},[87,120458,120459],{"class":199},"# Ubuntu22.04及以上、Debian12及以上\n",[87,120461,120462,120464,120466,120468,120471],{"class":89,"line":101},[87,120463,25524],{"class":205},[87,120465,118243],{"class":949},[87,120467,24781],{"class":949},[87,120469,120470],{"class":949}," fcitx5",[87,120472,120473],{"class":949}," fcitx5-chinese-addons\n",[87,120475,120476],{"class":89,"line":120},[87,120477,3355],{"emptyLinePlaceholder":1029},[87,120479,120480],{"class":89,"line":222},[87,120481,120482],{"class":199},"# Ubuntu20.04\n",[87,120484,120485,120487,120489],{"class":89,"line":234},[87,120486,25524],{"class":205},[87,120488,119770],{"class":949},[87,120490,120491],{"class":949}," ppa:zhsj\u002Ffcitx5\n",[87,120493,120494,120496,120498],{"class":89,"line":256},[87,120495,25524],{"class":205},[87,120497,118243],{"class":949},[87,120499,27189],{"class":949},[87,120501,120502,120504,120506,120508,120510],{"class":89,"line":269},[87,120503,25524],{"class":205},[87,120505,118243],{"class":949},[87,120507,24781],{"class":949},[87,120509,120470],{"class":949},[87,120511,120473],{"class":949},[1055,120513,120514,120517],{"start":120},[29,120515,120516],{},"Reboot System",[29,120518,120519],{},"启动Fcitx5",[19,120521,120522],{},[39,120523],{"alt":82,"src":120524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[1055,120526,120527],{"start":234},[29,120528,120529],{},"修改一些设置",[19,120531,120532],{},"将Pinyin和Keyboard - English US加入到左边。",[19,120534,120535],{},[39,120536],{"alt":82,"src":120537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,120539,120540],{},"添加快捷键以便于更好切换中英文",[19,120542,120543],{},[39,120544],{"alt":82,"src":120545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[1055,120547,120548],{"start":256},[29,120549,120550],{},"重启",[77,120552,120554],{"className":119449,"code":120553,"language":119451,"meta":82,"style":82},"sudo shutdown -r now\n",[84,120555,120556],{"__ignoreMap":82},[87,120557,120558,120560,120563,120566],{"class":89,"line":90},[87,120559,25524],{"class":205},[87,120561,120562],{"class":949}," shutdown",[87,120564,120565],{"class":104}," -r",[87,120567,120568],{"class":949}," now\n",[1055,120570,120571],{"start":269},[29,120572,120573],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,120575,120576],{},[1334,120577,120578],{"href":120578,"rel":120579},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24812],[1055,120581,120582],{"start":463},[29,120583,120584],{},"再重启",[77,120586,120587],{"className":119449,"code":120553,"language":119451,"meta":82,"style":82},[84,120588,120589],{"__ignoreMap":82},[87,120590,120591,120593,120595,120597],{"class":89,"line":90},[87,120592,25524],{"class":205},[87,120594,120562],{"class":949},[87,120596,120565],{"class":104},[87,120598,120568],{"class":949},[14,120600,120602],{"id":120601},"_34-pip3源替换","3.4 pip3源替换",[19,120604,120605],{},"非Debian系发行版需要做。",[19,120607,120608],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,120610,120611],{},"使用dnf的系统也可能不用做。",[77,120613,120615],{"className":118222,"code":120614,"language":118224,"meta":82,"style":82},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[84,120616,120617,120622,120629,120634,120639],{"__ignoreMap":82},[87,120618,120619],{"class":89,"line":90},[87,120620,120621],{"class":199},"# 检查是否已安装 pip\n",[87,120623,120624,120627],{"class":89,"line":101},[87,120625,120626],{"class":205},"pip3",[87,120628,27240],{"class":104},[87,120630,120631],{"class":89,"line":120},[87,120632,120633],{"class":199},"# 如果未安装，先安装 pip3（见下方）\n",[87,120635,120636],{"class":89,"line":222},[87,120637,120638],{"class":199},"# 配置 pip 使用清华源\n",[87,120640,120641,120643,120646,120649,120652],{"class":89,"line":234},[87,120642,120626],{"class":205},[87,120644,120645],{"class":949}," config",[87,120647,120648],{"class":949}," set",[87,120650,120651],{"class":949}," global.index-url",[87,120653,120654],{"class":949}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,120656,120657],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,120659,120660],{},[39,120661],{"alt":82,"src":120662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[77,120664,120666],{"className":118222,"code":120665,"language":118224,"meta":82,"style":82},"#安装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",[84,120667,120668,120673,120681,120692,120696,120701,120720,120724,120729,120741,120745,120750],{"__ignoreMap":82},[87,120669,120670],{"class":89,"line":90},[87,120671,120672],{"class":199},"#安装pip3\n",[87,120674,120675,120677,120679],{"class":89,"line":101},[87,120676,25524],{"class":205},[87,120678,118243],{"class":949},[87,120680,27189],{"class":949},[87,120682,120683,120685,120687,120689],{"class":89,"line":120},[87,120684,25524],{"class":205},[87,120686,27023],{"class":949},[87,120688,24781],{"class":949},[87,120690,120691],{"class":949}," python3-pip\n",[87,120693,120694],{"class":89,"line":222},[87,120695,3355],{"emptyLinePlaceholder":1029},[87,120697,120698],{"class":89,"line":234},[87,120699,120700],{"class":199},"#更新pip3\n",[87,120702,120703,120705,120707,120709,120711,120713,120716,120718],{"class":89,"line":256},[87,120704,101805],{"class":205},[87,120706,101808],{"class":104},[87,120708,101831],{"class":949},[87,120710,24781],{"class":949},[87,120712,27377],{"class":104},[87,120714,120715],{"class":949}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[87,120717,101836],{"class":104},[87,120719,101839],{"class":949},[87,120721,120722],{"class":89,"line":269},[87,120723,3355],{"emptyLinePlaceholder":1029},[87,120725,120726],{"class":89,"line":463},[87,120727,120728],{"class":199},"#设置pip源为清华源\n",[87,120730,120731,120733,120735,120737,120739],{"class":89,"line":469},[87,120732,120626],{"class":205},[87,120734,120645],{"class":949},[87,120736,120648],{"class":949},[87,120738,120651],{"class":949},[87,120740,120654],{"class":949},[87,120742,120743],{"class":89,"line":2287},[87,120744,3355],{"emptyLinePlaceholder":1029},[87,120746,120747],{"class":89,"line":2568},[87,120748,120749],{"class":199},"#测试\n",[87,120751,120752,120754,120756,120758,120760,120762],{"class":89,"line":2573},[87,120753,101805],{"class":205},[87,120755,101808],{"class":104},[87,120757,101831],{"class":949},[87,120759,24781],{"class":949},[87,120761,101836],{"class":104},[87,120763,101839],{"class":949},[19,120765,120766],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,120768,120769],{},[39,120770],{"alt":82,"src":120771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120773,120775],{"id":120774},"_35-显卡驱动安装","3.5 显卡驱动安装",[44,120777,120779],{"id":120778},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[77,120781,120783],{"className":119449,"code":120782,"language":119451,"meta":82,"style":82},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[84,120784,120785,120790,120805,120810],{"__ignoreMap":82},[87,120786,120787],{"class":89,"line":90},[87,120788,120789],{"class":199},"# 如果是使用apt安装的驱动\n",[87,120791,120792,120794,120796,120798,120800,120803],{"class":89,"line":101},[87,120793,25524],{"class":205},[87,120795,27023],{"class":949},[87,120797,27026],{"class":949},[87,120799,120084],{"class":104},[87,120801,120802],{"class":949}," nvidia",[87,120804,120174],{"class":104},[87,120806,120807],{"class":89,"line":120},[87,120808,120809],{"class":199},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[87,120811,120812,120814],{"class":89,"line":222},[87,120813,25524],{"class":205},[87,120815,120816],{"class":949}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[44,120818,120820],{"id":120819},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[49,120822,120824],{"id":120823},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23857,120826,120828],{"id":120827},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[77,120830,120832],{"className":119449,"code":120831,"language":119451,"meta":82,"style":82},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[84,120833,120834,120839,120850,120855,120865,120870],{"__ignoreMap":82},[87,120835,120836],{"class":89,"line":90},[87,120837,120838],{"class":199},"# 安装英伟达驱动\n",[87,120840,120841,120843,120845,120847],{"class":89,"line":101},[87,120842,25524],{"class":205},[87,120844,118243],{"class":949},[87,120846,24781],{"class":949},[87,120848,120849],{"class":949}," nvidia-driver-版本号\n",[87,120851,120852],{"class":89,"line":120},[87,120853,120854],{"class":199},"# 重启 \n",[87,120856,120857,120859,120861,120863],{"class":89,"line":222},[87,120858,25524],{"class":205},[87,120860,120562],{"class":949},[87,120862,120565],{"class":104},[87,120864,120568],{"class":949},[87,120866,120867],{"class":89,"line":234},[87,120868,120869],{"class":199},"# 检查驱动是否安装成功\n",[87,120871,120872],{"class":89,"line":256},[87,120873,120874],{"class":205},"nvidia-smi\n",[23857,120876,120878],{"id":120877},"_35212-debian","3.5.2.1.2 Debian",[77,120880,120882],{"className":119449,"code":120881,"language":119451,"meta":82,"style":82},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[84,120883,120884,120888,120902,120906,120916,120920],{"__ignoreMap":82},[87,120885,120886],{"class":89,"line":90},[87,120887,120838],{"class":199},[87,120889,120890,120892,120894,120896,120899],{"class":89,"line":101},[87,120891,25524],{"class":205},[87,120893,118243],{"class":949},[87,120895,24781],{"class":949},[87,120897,120898],{"class":949}," nvidia-driver",[87,120900,120901],{"class":949}," nvidia-settings\n",[87,120903,120904],{"class":89,"line":120},[87,120905,120854],{"class":199},[87,120907,120908,120910,120912,120914],{"class":89,"line":222},[87,120909,25524],{"class":205},[87,120911,120562],{"class":949},[87,120913,120565],{"class":104},[87,120915,120568],{"class":949},[87,120917,120918],{"class":89,"line":234},[87,120919,120869],{"class":199},[87,120921,120922],{"class":89,"line":256},[87,120923,120874],{"class":205},[49,120925,120927],{"id":120926},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120929,120930,120931,120934],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[57,120932,120933],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120936,120937,120938],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24500,120939,120940],{},[57,120941,120942],{},"（也可以不禁用桌面环境，直接进行下一步。）",[77,120944,120946],{"className":119449,"code":120945,"language":119451,"meta":82,"style":82},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[84,120947,120948,120953,120963,120968,120981,120986],{"__ignoreMap":82},[87,120949,120950],{"class":89,"line":90},[87,120951,120952],{"class":199},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[87,120954,120955,120957,120960],{"class":89,"line":101},[87,120956,25524],{"class":205},[87,120958,120959],{"class":949}," telinit",[87,120961,120962],{"class":104}," 3\n",[87,120964,120965],{"class":89,"line":120},[87,120966,120967],{"class":199},"# ubuntu 使用下方命令\n",[87,120969,120970,120972,120975,120978],{"class":89,"line":222},[87,120971,25524],{"class":205},[87,120973,120974],{"class":949}," service",[87,120976,120977],{"class":949}," lightdm",[87,120979,120980],{"class":949}," stop\n",[87,120982,120983],{"class":89,"line":234},[87,120984,120985],{"class":199},"# Fedora 使用下方命令\n",[87,120987,120988,120990,120992,120995],{"class":89,"line":256},[87,120989,25524],{"class":205},[87,120991,27460],{"class":949},[87,120993,120994],{"class":949}," isolate",[87,120996,120997],{"class":949}," multi-user.target\n",[19,120999,121000],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[77,121002,121004],{"className":119449,"code":121003,"language":119451,"meta":82,"style":82},"# 编译环境+准备工作\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",[84,121005,121006,121011,121022,121027,121034,121039,121051,121056,121063,121068],{"__ignoreMap":82},[87,121007,121008],{"class":89,"line":90},[87,121009,121010],{"class":199},"# 编译环境+准备工作\n",[87,121012,121013,121015,121017,121019],{"class":89,"line":101},[87,121014,25524],{"class":205},[87,121016,118243],{"class":949},[87,121018,24781],{"class":949},[87,121020,121021],{"class":949}," build-essential\n",[87,121023,121024],{"class":89,"line":120},[87,121025,121026],{"class":199},"# 进入到.run目录中\n",[87,121028,121029,121031],{"class":89,"line":222},[87,121030,102202],{"class":104},[87,121032,121033],{"class":949}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[87,121035,121036],{"class":89,"line":234},[87,121037,121038],{"class":199},"# 给驱动文件增加可执行权限：\n",[87,121040,121041,121043,121045,121048],{"class":89,"line":256},[87,121042,25524],{"class":205},[87,121044,25527],{"class":949},[87,121046,121047],{"class":949}," a+x",[87,121049,121050],{"class":949}," NVIDIA-Linux-x86_64-550.107.02.run\n",[87,121052,121053],{"class":89,"line":269},[87,121054,121055],{"class":199},"# 然后执行安装：\n",[87,121057,121058,121060],{"class":89,"line":463},[87,121059,25524],{"class":205},[87,121061,121062],{"class":949}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[87,121064,121065],{"class":89,"line":469},[87,121066,121067],{"class":199},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[87,121069,121070,121072,121075],{"class":89,"line":2287},[87,121071,25524],{"class":205},[87,121073,121074],{"class":949}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[87,121076,121077],{"class":104},"  --no-opengl-files\n",[19,121079,121080],{},"安装完毕重启即可",[77,121082,121084],{"className":119449,"code":121083,"language":119451,"meta":82,"style":82},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[84,121085,121086,121090,121096,121100],{"__ignoreMap":82},[87,121087,121088],{"class":89,"line":90},[87,121089,120854],{"class":199},[87,121091,121092,121094],{"class":89,"line":101},[87,121093,25524],{"class":205},[87,121095,27594],{"class":949},[87,121097,121098],{"class":89,"line":120},[87,121099,120869],{"class":199},[87,121101,121102],{"class":89,"line":222},[87,121103,120874],{"class":205},[44,121105,121107],{"id":121106},"_353-安装cuda","3.5.3 安装CUDA",[19,121109,121110],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121112,121113],{},[39,121114],{"alt":82,"src":121115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[1055,121117,121118],{},[29,121119,121120],{},"先查看显卡驱动所支持的最高CUDA版本",[77,121122,121123],{"className":119449,"code":120874,"language":119451,"meta":82,"style":82},[84,121124,121125],{"__ignoreMap":82},[87,121126,121127],{"class":89,"line":90},[87,121128,120874],{"class":205},[19,121130,121131],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121133,121134],{},[39,121135],{"alt":82,"src":121136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[1055,121138,121139],{"start":101},[29,121140,121141],{},"下载CUDA并安装CUDA",[19,121143,119228,121144],{},[1334,121145,119231],{"href":119231,"rel":121146},[24812],[19,121148,121149],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121151,121152],{},[39,121153],{"alt":82,"src":121154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,121156,121157,121158,121163],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[1334,121159,121162],{"href":121160,"rel":121161},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24812],"Vinci机器人队单片机教程","）",[19,121165,121166],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,121168,121169],{},[39,121170],{"alt":82,"src":121171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121173,121174],{},"将最下方框框里的命令敲入终端",[77,121176,121178],{"className":119449,"code":121177,"language":119451,"meta":82,"style":82},"# 在当前文件夹下创建一个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",[84,121179,121180,121185,121194,121199,121206,121211,121219,121224,121235,121240],{"__ignoreMap":82},[87,121181,121182],{"class":89,"line":90},[87,121183,121184],{"class":199},"# 在当前文件夹下创建一个ttt的子文件夹\n",[87,121186,121187,121189,121191],{"class":89,"line":101},[87,121188,102192],{"class":205},[87,121190,30163],{"class":104},[87,121192,121193],{"class":949}," .\u002Fttt\n",[87,121195,121196],{"class":89,"line":120},[87,121197,121198],{"class":199},"# 进入ttt文件夹\n",[87,121200,121201,121203],{"class":89,"line":222},[87,121202,102202],{"class":104},[87,121204,121205],{"class":949}," ttt\n",[87,121207,121208],{"class":89,"line":234},[87,121209,121210],{"class":199},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[87,121212,121213,121216],{"class":89,"line":256},[87,121214,121215],{"class":205},"wget",[87,121217,121218],{"class":949}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[87,121220,121221],{"class":89,"line":269},[87,121222,121223],{"class":199},"# 给予权限\n",[87,121225,121226,121228,121230,121232],{"class":89,"line":463},[87,121227,25524],{"class":205},[87,121229,25527],{"class":949},[87,121231,121047],{"class":949},[87,121233,121234],{"class":949}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[87,121236,121237],{"class":89,"line":469},[87,121238,121239],{"class":199},"# 运行脚本\n",[87,121241,121242,121244],{"class":89,"line":2287},[87,121243,25524],{"class":205},[87,121245,121234],{"class":949},[19,121247,121248],{},[39,121249],{"alt":82,"src":121250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,121252,121253],{},"正在安装中：",[19,121255,121256],{},[39,121257],{"alt":82,"src":121258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,121260,121261],{},"输入accept接受即可",[19,121263,121264],{},[39,121265],{"alt":82,"src":121266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,121268,121269],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,121271,121272],{},[39,121273],{"alt":82,"src":121274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,121276,121277],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,121279,121280],{},[39,121281],{"alt":82,"src":121282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[1055,121284,121285],{"start":120},[29,121286,121287],{},"配置环境",[19,121289,121290],{},"根据上方确认一下路径，比如我上面红色框起来的为",[77,121292,121294],{"className":119449,"code":121293,"language":119451,"meta":82,"style":82},"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",[84,121295,121296,121312,121327],{"__ignoreMap":82},[87,121297,121298,121301,121304,121307,121310],{"class":89,"line":90},[87,121299,121300],{"class":205},"Please",[87,121302,121303],{"class":949}," make",[87,121305,121306],{"class":949}," sure",[87,121308,121309],{"class":949}," that",[87,121311,3629],{"class":97},[87,121313,121314,121316,121319,121322,121325],{"class":89,"line":101},[87,121315,53208],{"class":205},[87,121317,121318],{"class":949},"   PATH",[87,121320,121321],{"class":949}," includes",[87,121323,121324],{"class":949}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[87,121326,3629],{"class":97},[87,121328,121329,121331,121334,121336,121339,121342,121344,121347,121350,121353,121356,121358,121361,121363],{"class":89,"line":120},[87,121330,53208],{"class":205},[87,121332,121333],{"class":949},"   LD_LIBRARY_PATH",[87,121335,121321],{"class":949},[87,121337,121338],{"class":949}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[87,121340,121341],{"class":949}," or,",[87,121343,6160],{"class":949},[87,121345,121346],{"class":949}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[87,121348,121349],{"class":949}," to",[87,121351,121352],{"class":949}," \u002Fetc\u002Fld.so.conf",[87,121354,121355],{"class":949}," and",[87,121357,28177],{"class":949},[87,121359,121360],{"class":949}," ldconfig",[87,121362,65537],{"class":949},[87,121364,121365],{"class":949}," root\n",[19,121367,121368],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[77,121370,121372],{"className":119449,"code":121371,"language":119451,"meta":82,"style":82},"which nvcc\n",[84,121373,121374],{"__ignoreMap":82},[87,121375,121376,121379],{"class":89,"line":90},[87,121377,121378],{"class":104},"which",[87,121380,121381],{"class":949}," nvcc\n",[19,121383,121384],{},[39,121385],{"alt":82,"src":121386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,121388,121389],{},"所以我进行以下操作：",[77,121391,121393],{"className":119449,"code":121392,"language":119451,"meta":82,"style":82},"sudo vim ~\u002F.bashrc\n",[84,121394,121395],{"__ignoreMap":82},[87,121396,121397,121399,121401],{"class":89,"line":90},[87,121398,25524],{"class":205},[87,121400,119509],{"class":949},[87,121402,121403],{"class":949}," ~\u002F.bashrc\n",[19,121405,121406],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[77,121408,121410],{"className":119449,"code":121409,"language":119451,"meta":82,"style":82},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[84,121411,121412,121424],{"__ignoreMap":82},[87,121413,121414,121416,121419,121421],{"class":89,"line":90},[87,121415,25990],{"class":171},[87,121417,121418],{"class":97}," PATH",[87,121420,946],{"class":171},[87,121422,121423],{"class":97},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[87,121425,121426,121428,121431,121433],{"class":89,"line":101},[87,121427,25990],{"class":171},[87,121429,121430],{"class":97}," LD_LIBRARY_PATH",[87,121432,946],{"class":171},[87,121434,121435],{"class":97},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,121437,121438],{},[39,121439],{"alt":82,"src":121440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[77,121442,121444],{"className":119449,"code":121443,"language":119451,"meta":82,"style":82},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[84,121445,121446,121451,121457,121462],{"__ignoreMap":82},[87,121447,121448],{"class":89,"line":90},[87,121449,121450],{"class":199},"# 刷新当前终端的环境变量\n",[87,121452,121453,121455],{"class":89,"line":101},[87,121454,101819],{"class":104},[87,121456,121403],{"class":949},[87,121458,121459],{"class":89,"line":120},[87,121460,121461],{"class":199},"# 验证CUDA是否安装成功\n",[87,121463,121464,121467],{"class":89,"line":222},[87,121465,121466],{"class":205},"nvcc",[87,121468,121469],{"class":104}," -V\n",[19,121471,121472],{},"出现下图这种则安装成功。",[19,121474,121475],{},[39,121476],{"alt":82,"src":121477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[44,121479,121481],{"id":121480},"_354-安装cudnn","3.5.4 安装cuDNN",[1055,121483,121484],{},[29,121485,121486],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,121488,121489,121490,121495],{},"前往 NVIDIA cuDNN 下载页面：",[1334,121491,121494],{"href":121492,"rel":121493},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24812],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,121497,121498],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,121500,121501],{},[39,121502],{"alt":82,"src":121503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,121505,121506],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,121508,121509],{},[39,121510],{"alt":82,"src":121511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,121513,121514],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,121516,121517],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,121519,121520],{},[57,121521,121522],{},"我这里选择所有Linux X86_64最通用的办法：",[19,121524,121525],{},"下载好的：",[19,121527,121528],{},[39,121529],{"alt":82,"src":121530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[1055,121532,121533],{"start":101},[29,121534,121535],{},"安装cuDNN",[19,121537,121538],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,121540,121541],{},[39,121542],{"alt":82,"src":121543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,121545,121546],{},"解压文件，并复制到对应位置完成安装",[77,121548,121550],{"className":119449,"code":121549,"language":119451,"meta":82,"style":82},"# 解压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",[84,121551,121552,121557,121568,121573,121580,121585,121601,121615,121620,121631,121640,121644,121660],{"__ignoreMap":82},[87,121553,121554],{"class":89,"line":90},[87,121555,121556],{"class":199},"# 解压cuDNN文件\n",[87,121558,121559,121562,121565],{"class":89,"line":101},[87,121560,121561],{"class":205},"tar",[87,121563,121564],{"class":104}," -xvf",[87,121566,121567],{"class":949}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[87,121569,121570],{"class":89,"line":120},[87,121571,121572],{"class":199},"# cd进文件夹\n",[87,121574,121575,121577],{"class":89,"line":222},[87,121576,102202],{"class":104},[87,121578,121579],{"class":949}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[87,121581,121582],{"class":89,"line":234},[87,121583,121584],{"class":199},"# 复制cuDNN文件到CUDA目录\n",[87,121586,121587,121589,121591,121594,121596,121599],{"class":89,"line":256},[87,121588,25524],{"class":205},[87,121590,28808],{"class":949},[87,121592,121593],{"class":949}," include\u002Fcudnn",[87,121595,1549],{"class":104},[87,121597,121598],{"class":949},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[87,121600,3629],{"class":97},[87,121602,121603,121605,121607,121610,121612],{"class":89,"line":269},[87,121604,25524],{"class":205},[87,121606,28808],{"class":949},[87,121608,121609],{"class":949}," lib\u002Flibcudnn",[87,121611,1549],{"class":104},[87,121613,121614],{"class":949},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[87,121616,121617],{"class":89,"line":463},[87,121618,121619],{"class":199},"# 对比一下有没有缺文件\n",[87,121621,121622,121624,121627,121629],{"class":89,"line":469},[87,121623,27708],{"class":205},[87,121625,121626],{"class":949}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[87,121628,1549],{"class":104},[87,121630,3629],{"class":97},[87,121632,121633,121635,121638],{"class":89,"line":2287},[87,121634,27708],{"class":205},[87,121636,121637],{"class":949}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[87,121639,120174],{"class":104},[87,121641,121642],{"class":89,"line":2568},[87,121643,121223],{"class":199},[87,121645,121646,121648,121650,121653,121655,121657],{"class":89,"line":2573},[87,121647,25524],{"class":205},[87,121649,25527],{"class":949},[87,121651,121652],{"class":949}," a+r",[87,121654,121626],{"class":949},[87,121656,1549],{"class":104},[87,121658,121659],{"class":97},"   \n",[87,121661,121662,121664,121666,121668,121670],{"class":89,"line":2579},[87,121663,25524],{"class":205},[87,121665,25527],{"class":949},[87,121667,121652],{"class":949},[87,121669,121637],{"class":949},[87,121671,120174],{"class":104},[1055,121673,121674],{"start":120},[29,121675,121676],{},"检查是否安装成功",[77,121678,121680],{"className":119449,"code":121679,"language":119451,"meta":82,"style":82},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[84,121681,121682,121687],{"__ignoreMap":82},[87,121683,121684],{"class":89,"line":90},[87,121685,121686],{"class":199},"# 检查cuDNN版本命令\n",[87,121688,121689,121692,121695,121697,121699,121702,121705],{"class":89,"line":101},[87,121690,121691],{"class":205},"cat",[87,121693,121694],{"class":949}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[87,121696,26057],{"class":171},[87,121698,31183],{"class":205},[87,121700,121701],{"class":949}," CUDNN_MAJOR",[87,121703,121704],{"class":104}," -A",[87,121706,48670],{"class":104},[19,121708,121709],{},"出现下图这样的就是安装成功了",[19,121711,121712],{},[39,121713],{"alt":82,"src":121714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[1055,121716,121717],{"start":222},[29,121718,121719],{},"软链接(一般不需要)",[77,121721,121723],{"className":119449,"code":121722,"language":119451,"meta":82,"style":82},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[84,121724,121725,121730],{"__ignoreMap":82},[87,121726,121727],{"class":89,"line":90},[87,121728,121729],{"class":199},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[87,121731,121732,121734],{"class":89,"line":101},[87,121733,25524],{"class":205},[87,121735,121736],{"class":949}," ldconfig\n",[19,121738,121739],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[77,121741,121746],{"className":121742,"code":121743,"language":121744,"meta":121745,"style":82},"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",[84,121747,121748,121753,121758,121763,121768,121773,121778],{"__ignoreMap":82},[87,121749,121750],{"class":89,"line":90},[87,121751,121752],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[87,121754,121755],{"class":89,"line":101},[87,121756,121757],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[87,121759,121760],{"class":89,"line":120},[87,121761,121762],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[87,121764,121765],{"class":89,"line":222},[87,121766,121767],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[87,121769,121770],{"class":89,"line":234},[87,121771,121772],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[87,121774,121775],{"class":89,"line":256},[87,121776,121777],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[87,121779,121780],{"class":89,"line":269},[87,121781,121782],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,121784,121785],{},"运行下方的命令",[77,121787,121789],{"className":119449,"code":121788,"language":119451,"meta":82,"style":82},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[84,121790,121791,121796,121803,121808],{"__ignoreMap":82},[87,121792,121793],{"class":89,"line":90},[87,121794,121795],{"class":199},"# cd进入CUDA路径\n",[87,121797,121798,121800],{"class":89,"line":101},[87,121799,102202],{"class":104},[87,121801,121802],{"class":949}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[87,121804,121805],{"class":89,"line":120},[87,121806,121807],{"class":199}," # 查看本路径下的需要软链接的文件名\n",[87,121809,121810],{"class":89,"line":222},[87,121811,121812],{"class":205}," ls\n",[19,121814,121815],{},[39,121816],{"alt":82,"src":121817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,121819,121820,121821,19358,121824,19358,121827,121830],{},"如上图，我需要将",[84,121822,121823],{},"libcudnn_xxx_xxxxx.so.8.9.7",[84,121825,121826],{},"libcudnn_xxx_xxxxx.so.8",[84,121828,121829],{},"libcudnn_xxx_xxxxx.so","软链接",[77,121832,121834],{"className":119449,"code":121833,"language":119451,"meta":82,"style":82},"# 创建符号链接。对于每个 .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",[84,121835,121836,121841,121857,121871,121885,121899,121913,121927,121941,121946,121952,121957],{"__ignoreMap":82},[87,121837,121838],{"class":89,"line":90},[87,121839,121840],{"class":199},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[87,121842,121843,121845,121848,121851,121854],{"class":89,"line":101},[87,121844,25524],{"class":205},[87,121846,121847],{"class":949}," ln",[87,121849,121850],{"class":104}," -sf",[87,121852,121853],{"class":949}," libcudnn_cnn_train.so.8.9.7",[87,121855,121856],{"class":949}," libcudnn_cnn_train.so.8\n",[87,121858,121859,121861,121863,121865,121868],{"class":89,"line":120},[87,121860,25524],{"class":205},[87,121862,121847],{"class":949},[87,121864,121850],{"class":104},[87,121866,121867],{"class":949}," libcudnn_adv_infer.so.8.9.7",[87,121869,121870],{"class":949}," libcudnn_adv_infer.so.8\n",[87,121872,121873,121875,121877,121879,121882],{"class":89,"line":222},[87,121874,25524],{"class":205},[87,121876,121847],{"class":949},[87,121878,121850],{"class":104},[87,121880,121881],{"class":949}," libcudnn_adv_train.so.8.9.7",[87,121883,121884],{"class":949}," libcudnn_adv_train.so.8\n",[87,121886,121887,121889,121891,121893,121896],{"class":89,"line":234},[87,121888,25524],{"class":205},[87,121890,121847],{"class":949},[87,121892,121850],{"class":104},[87,121894,121895],{"class":949}," libcudnn_cnn_infer.so.8.9.7",[87,121897,121898],{"class":949}," libcudnn_cnn_infer.so.8\n",[87,121900,121901,121903,121905,121907,121910],{"class":89,"line":256},[87,121902,25524],{"class":205},[87,121904,121847],{"class":949},[87,121906,121850],{"class":104},[87,121908,121909],{"class":949}," libcudnn.so.8.9.7",[87,121911,121912],{"class":949}," libcudnn.so.8\n",[87,121914,121915,121917,121919,121921,121924],{"class":89,"line":269},[87,121916,25524],{"class":205},[87,121918,121847],{"class":949},[87,121920,121850],{"class":104},[87,121922,121923],{"class":949}," libcudnn_ops_infer.so.8.9.7",[87,121925,121926],{"class":949}," libcudnn_ops_infer.so.8\n",[87,121928,121929,121931,121933,121935,121938],{"class":89,"line":463},[87,121930,25524],{"class":205},[87,121932,121847],{"class":949},[87,121934,121850],{"class":104},[87,121936,121937],{"class":949}," libcudnn_ops_train.so.8.9.7",[87,121939,121940],{"class":949}," libcudnn_ops_train.so.8\n",[87,121942,121943],{"class":89,"line":469},[87,121944,121945],{"class":199},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[87,121947,121948,121950],{"class":89,"line":2287},[87,121949,25524],{"class":205},[87,121951,121736],{"class":949},[87,121953,121954],{"class":89,"line":2568},[87,121955,121956],{"class":199},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[87,121958,121959,121961,121964,121967,121969,121972],{"class":89,"line":2573},[87,121960,27708],{"class":205},[87,121962,121963],{"class":104}," -l",[87,121965,121966],{"class":949}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[87,121968,1549],{"class":104},[87,121970,121971],{"class":949},".so",[87,121973,120174],{"class":104},[44,121975,121977],{"id":121976},"_355-常见问题","3.5.5 常见问题",[1055,121979,121980],{},[29,121981,121982],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[77,121984,121986],{"className":119449,"code":121985,"language":119451,"meta":82,"style":82},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[84,121987,121988],{"__ignoreMap":82},[87,121989,121990,121992,121994],{"class":89,"line":90},[87,121991,25524],{"class":205},[87,121993,119509],{"class":949},[87,121995,121996],{"class":949}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121998,121999],{},"blacklist-nouveau.conf文件内容如下：",[77,122001,122003],{"className":119449,"code":122002,"language":119451,"meta":82,"style":82},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[84,122004,122005,122013,122020,122032,122042],{"__ignoreMap":82},[87,122006,122007,122010],{"class":89,"line":90},[87,122008,122009],{"class":205},"blacklist",[87,122011,122012],{"class":949}," nouveau\n",[87,122014,122015,122017],{"class":89,"line":101},[87,122016,122009],{"class":205},[87,122018,122019],{"class":949}," lbm-nouveau\n",[87,122021,122022,122024,122027,122030],{"class":89,"line":120},[87,122023,116856],{"class":205},[87,122025,122026],{"class":949}," nouveau",[87,122028,122029],{"class":949}," modeset=",[87,122031,4039],{"class":104},[87,122033,122034,122037,122039],{"class":89,"line":222},[87,122035,122036],{"class":104},"alias",[87,122038,122026],{"class":949},[87,122040,122041],{"class":949}," off\n",[87,122043,122044,122046,122049],{"class":89,"line":234},[87,122045,122036],{"class":104},[87,122047,122048],{"class":949}," lbm-nouveau",[87,122050,122041],{"class":949},[19,122052,122053],{},"接着运行下方命令",[77,122055,122057],{"className":119449,"code":122056,"language":119451,"meta":82,"style":82},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[84,122058,122059,122069,122074],{"__ignoreMap":82},[87,122060,122061,122063,122066],{"class":89,"line":90},[87,122062,25524],{"class":205},[87,122064,122065],{"class":949}," update-initramfs",[87,122067,122068],{"class":104}," -u\n",[87,122070,122071],{"class":89,"line":101},[87,122072,122073],{"class":205},"或者\n",[87,122075,122076,122078,122081],{"class":89,"line":120},[87,122077,25524],{"class":205},[87,122079,122080],{"class":949}," dracut",[87,122082,122083],{"class":104}," --force\n",[19,122085,122086],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[77,122088,122090],{"className":119449,"code":122089,"language":119451,"meta":82,"style":82},"lsmod | grep nouveau\n",[84,122091,122092],{"__ignoreMap":82},[87,122093,122094,122097,122099,122101],{"class":89,"line":90},[87,122095,122096],{"class":205},"lsmod",[87,122098,26057],{"class":171},[87,122100,31183],{"class":205},[87,122102,122012],{"class":949},[1055,122104,122105],{"start":101},[29,122106,122107],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[77,122109,122111],{"className":119449,"code":122110,"language":119451,"meta":82,"style":82},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[84,122112,122113],{"__ignoreMap":82},[87,122114,122115,122117,122119],{"class":89,"line":90},[87,122116,25524],{"class":205},[87,122118,119509],{"class":949},[87,122120,122121],{"class":949}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122123,122124],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[77,122126,122128],{"className":119449,"code":122127,"language":119451,"meta":82,"style":82},"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",[84,122129,122130,122138,122146,122154,122161,122169,122179,122187],{"__ignoreMap":82},[87,122131,122132,122135],{"class":89,"line":90},[87,122133,122134],{"class":205},"Section",[87,122136,122137],{"class":949}," \"OutputClass\"\n",[87,122139,122140,122143],{"class":89,"line":101},[87,122141,122142],{"class":205},"   Identifier",[87,122144,122145],{"class":949}," \"nvidia\"\n",[87,122147,122148,122151],{"class":89,"line":120},[87,122149,122150],{"class":205},"   MatchDriver",[87,122152,122153],{"class":949}," \"nvidia-drm\"\n",[87,122155,122156,122159],{"class":89,"line":222},[87,122157,122158],{"class":205},"   Driver",[87,122160,122145],{"class":949},[87,122162,122163,122166],{"class":89,"line":234},[87,122164,122165],{"class":205},"   Option",[87,122167,122168],{"class":949}," \"AllowEmptyInitialConfiguration\"\n",[87,122170,122171,122173,122176],{"class":89,"line":256},[87,122172,122165],{"class":205},[87,122174,122175],{"class":949}," \"PrimaryGPU\"",[87,122177,122178],{"class":949}," \"yes\"\n",[87,122180,122181,122184],{"class":89,"line":269},[87,122182,122183],{"class":205},"   ModulePath",[87,122185,122186],{"class":949}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[87,122188,122189],{"class":89,"line":463},[87,122190,122191],{"class":205},"EndSection\n",[1055,122193,122194],{"start":120},[29,122195,122196],{},"安装N卡驱动提示错误",[77,122198,122200],{"className":121742,"code":122199,"language":121744,"meta":121745,"style":82},"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",[84,122201,122202],{"__ignoreMap":82},[87,122203,122204],{"class":89,"line":90},[87,122205,122199],{},[1055,122207,122208],{},[29,122209,122210],{},"检查当前运行的内核版本：",[19,122212,122213],{},"运行以下命令以查看你当前正在使用的内核版本：",[77,122215,122217],{"className":118222,"code":122216,"language":118224,"meta":82,"style":82},"uname -r\n",[84,122218,122219],{"__ignoreMap":82},[87,122220,122221,122223],{"class":89,"line":90},[87,122222,71136],{"class":205},[87,122224,122225],{"class":104}," -r\n",[1055,122227,122228],{"start":101},[29,122229,122230],{},"安装内核开发文件：",[19,122232,122233,122234,122237],{},"确保你已经安装了与当前内核版本相匹配的 ",[84,122235,122236],{},"kernel-devel"," 包。运行以下命令来安装：",[77,122239,122241],{"className":118222,"code":122240,"language":118224,"meta":82,"style":82},"sudo dnf install kernel-devel-$(uname -r)\n",[84,122242,122243],{"__ignoreMap":82},[87,122244,122245,122247,122249,122251,122254,122256,122258,122260],{"class":89,"line":90},[87,122246,25524],{"class":205},[87,122248,27262],{"class":949},[87,122250,24781],{"class":949},[87,122252,122253],{"class":949}," kernel-devel-",[87,122255,26047],{"class":97},[87,122257,71136],{"class":205},[87,122259,120565],{"class":104},[87,122261,1108],{"class":97},[19,122263,122264],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[1055,122266,122267],{"start":120},[29,122268,122269],{},"安装内核源代码（如果需要）：",[19,122271,122272],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[77,122274,122276],{"className":118222,"code":122275,"language":118224,"meta":82,"style":82},"sudo dnf install kernel-headers kernel-source\n",[84,122277,122278],{"__ignoreMap":82},[87,122279,122280,122282,122284,122286,122289],{"class":89,"line":90},[87,122281,25524],{"class":205},[87,122283,27262],{"class":949},[87,122285,24781],{"class":949},[87,122287,122288],{"class":949}," kernel-headers",[87,122290,122291],{"class":949}," kernel-source\n",[1055,122293,122294],{"start":222},[29,122295,122296],{},"检查安装：",[19,122298,122299,122300,122303],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[84,122301,122302],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[77,122305,122307],{"className":118222,"code":122306,"language":118224,"meta":82,"style":82},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[84,122308,122309],{"__ignoreMap":82},[87,122310,122311,122313],{"class":89,"line":90},[87,122312,27708],{"class":205},[87,122314,122315],{"class":949}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,122317,122318,122319,122322],{},"如果仍然遇到问题，可以通过 ",[84,122320,122321],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1006,122324,122325],{},"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":82,"searchDepth":101,"depth":101,"links":122327},[122328,122332,122342,122346,122347],{"id":119425,"depth":101,"text":119426,"children":122329},[122330,122331],{"id":119435,"depth":120,"text":119436},{"id":119445,"depth":120,"text":119446},{"id":119645,"depth":101,"text":119646,"children":122333},[122334,122335,122336,122337,122338,122339,122340,122341],{"id":119649,"depth":120,"text":119650},{"id":119719,"depth":120,"text":119720},{"id":119808,"depth":120,"text":119809},{"id":120053,"depth":120,"text":120054},{"id":120123,"depth":120,"text":120124},{"id":120190,"depth":120,"text":120191},{"id":120225,"depth":120,"text":120226},{"id":120280,"depth":120,"text":120281},{"id":120331,"depth":101,"text":120332,"children":122343},[122344,122345],{"id":120335,"depth":120,"text":120336},{"id":120415,"depth":120,"text":120416},{"id":120601,"depth":101,"text":120602},{"id":120774,"depth":101,"text":120775,"children":122348},[122349,122350,122351,122352,122353],{"id":120778,"depth":120,"text":120779},{"id":120819,"depth":120,"text":120820},{"id":121106,"depth":120,"text":121107},{"id":121480,"depth":120,"text":121481},{"id":121976,"depth":120,"text":121977},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119417,"description":1026},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122360,"title":122361,"body":122362,"description":1026,"extension":1027,"meta":122702,"navigation":1029,"path":122703,"seo":122704,"stem":122705,"__hash__":122706},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122363,"toc":122700},[122364,122367,122372,122375,122621,122626,122629,122665,122668,122697],[10,122365,122361],{"id":122366},"_4-命令教程长期积累",[1055,122368,122369],{},[29,122370,122371],{},"大多数命令",[19,122373,122374],{},"常用 Linux 命令速查：",[77,122376,122378],{"className":118222,"code":122377,"language":118224,"meta":82,"style":82},"# 文件与目录\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",[84,122379,122380,122385,122392,122399,122407,122414,122421,122429,122437,122444,122451,122459,122463,122468,122475,122483,122490,122494,122499,122506,122514,122522,122530,122538,122542,122547,122555,122562,122569,122577,122585,122589,122594,122603,122612],{"__ignoreMap":82},[87,122381,122382],{"class":89,"line":90},[87,122383,122384],{"class":199},"# 文件与目录\n",[87,122386,122387,122389],{"class":89,"line":101},[87,122388,27708],{"class":205},[87,122390,122391],{"class":199},"        # 列出目录内容\n",[87,122393,122394,122396],{"class":89,"line":120},[87,122395,102202],{"class":104},[87,122397,122398],{"class":199},"        # 切换目录\n",[87,122400,122401,122404],{"class":89,"line":222},[87,122402,122403],{"class":104},"pwd",[87,122405,122406],{"class":199},"       # 显示当前路径\n",[87,122408,122409,122411],{"class":89,"line":234},[87,122410,102192],{"class":205},[87,122412,122413],{"class":199},"     # 创建目录\n",[87,122415,122416,122418],{"class":89,"line":256},[87,122417,26269],{"class":205},[87,122419,122420],{"class":199},"        # 删除文件或目录\n",[87,122422,122423,122426],{"class":89,"line":269},[87,122424,122425],{"class":205},"cp",[87,122427,122428],{"class":199},"        # 复制文件或目录\n",[87,122430,122431,122434],{"class":89,"line":463},[87,122432,122433],{"class":205},"mv",[87,122435,122436],{"class":199},"        # 移动\u002F重命名文件或目录\n",[87,122438,122439,122441],{"class":89,"line":469},[87,122440,102209],{"class":205},[87,122442,122443],{"class":199},"     # 创建空文件\n",[87,122445,122446,122448],{"class":89,"line":2287},[87,122447,121691],{"class":205},[87,122449,122450],{"class":199},"       # 查看文件内容\n",[87,122452,122453,122456],{"class":89,"line":2568},[87,122454,122455],{"class":205},"head\u002Ftail",[87,122457,122458],{"class":199}," # 查看文件头部\u002F尾部\n",[87,122460,122461],{"class":89,"line":2573},[87,122462,3355],{"emptyLinePlaceholder":1029},[87,122464,122465],{"class":89,"line":2579},[87,122466,122467],{"class":199},"# 权限管理\n",[87,122469,122470,122472],{"class":89,"line":2584},[87,122471,25559],{"class":205},[87,122473,122474],{"class":199},"     # 修改文件权限\n",[87,122476,122477,122480],{"class":89,"line":2598},[87,122478,122479],{"class":205},"chown",[87,122481,122482],{"class":199},"     # 修改文件所有者\n",[87,122484,122485,122487],{"class":89,"line":2603},[87,122486,25524],{"class":205},[87,122488,122489],{"class":199},"      # 以管理员身份执行\n",[87,122491,122492],{"class":89,"line":2609},[87,122493,3355],{"emptyLinePlaceholder":1029},[87,122495,122496],{"class":89,"line":2630},[87,122497,122498],{"class":199},"# 系统信息\n",[87,122500,122501,122503],{"class":89,"line":2635},[87,122502,71136],{"class":205},[87,122504,122505],{"class":199},"     # 系统信息\n",[87,122507,122508,122511],{"class":89,"line":2649},[87,122509,122510],{"class":205},"df",[87,122512,122513],{"class":199},"        # 磁盘使用情况\n",[87,122515,122516,122519],{"class":89,"line":2654},[87,122517,122518],{"class":205},"free",[87,122520,122521],{"class":199},"      # 内存使用情况\n",[87,122523,122524,122527],{"class":89,"line":2683},[87,122525,122526],{"class":205},"top\u002Fhtop",[87,122528,122529],{"class":199},"  # 进程监控\n",[87,122531,122532,122535],{"class":89,"line":2688},[87,122533,122534],{"class":205},"ps",[87,122536,122537],{"class":199},"        # 查看进程\n",[87,122539,122540],{"class":89,"line":2705},[87,122541,3355],{"emptyLinePlaceholder":1029},[87,122543,122544],{"class":89,"line":2710},[87,122545,122546],{"class":199},"# 网络\n",[87,122548,122549,122552],{"class":89,"line":2715},[87,122550,122551],{"class":205},"ping",[87,122553,122554],{"class":199},"      # 测试网络连通性\n",[87,122556,122557,122559],{"class":89,"line":2720},[87,122558,27796],{"class":205},[87,122560,122561],{"class":199},"      # 发送 HTTP 请求\n",[87,122563,122564,122566],{"class":89,"line":2734},[87,122565,121215],{"class":205},[87,122567,122568],{"class":199},"      # 下载文件\n",[87,122570,122571,122574],{"class":89,"line":2739},[87,122572,122573],{"class":205},"ssh",[87,122575,122576],{"class":199},"       # 远程登录\n",[87,122578,122579,122582],{"class":89,"line":3532},[87,122580,122581],{"class":205},"scp",[87,122583,122584],{"class":199},"       # 远程文件传输\n",[87,122586,122587],{"class":89,"line":3546},[87,122588,3355],{"emptyLinePlaceholder":1029},[87,122590,122591],{"class":89,"line":3554},[87,122592,122593],{"class":199},"# 包管理（Debian\u002FUbuntu）\n",[87,122595,122596,122598,122600],{"class":89,"line":3559},[87,122597,118294],{"class":205},[87,122599,118273],{"class":949},[87,122601,122602],{"class":199},"   # 更新软件源\n",[87,122604,122605,122607,122609],{"class":89,"line":3565},[87,122606,118294],{"class":205},[87,122608,24781],{"class":949},[87,122610,122611],{"class":199},"  # 安装软件包\n",[87,122613,122614,122616,122618],{"class":89,"line":3571},[87,122615,118294],{"class":205},[87,122617,27026],{"class":949},[87,122619,122620],{"class":199},"   # 卸载软件包\n",[1055,122622,122623],{"start":101},[29,122624,122625],{},"KDE Dolphin 以root打开",[19,122627,122628],{},"kde5",[77,122630,122632],{"className":118222,"code":122631,"language":118224,"meta":82,"style":82},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[84,122633,122634],{"__ignoreMap":82},[87,122635,122636,122639,122642,122645,122647,122649,122652,122655,122657,122660,122662],{"class":89,"line":90},[87,122637,122638],{"class":205},"pkexec",[87,122640,122641],{"class":949}," env",[87,122643,122644],{"class":949}," DISPLAY=",[87,122646,29090],{"class":97},[87,122648,29148],{"class":949},[87,122650,122651],{"class":97},"$XAUTHORITY ",[87,122653,122654],{"class":949},"KDE_SESSION_VERSION=",[87,122656,1414],{"class":104},[87,122658,122659],{"class":949}," KDE_FULL_SESSION=",[87,122661,2320],{"class":104},[87,122663,122664],{"class":949}," dolphin\n",[19,122666,122667],{},"kde6",[77,122669,122671],{"className":118222,"code":122670,"language":118224,"meta":82,"style":82},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[84,122672,122673],{"__ignoreMap":82},[87,122674,122675,122677,122679,122681,122683,122685,122687,122689,122691,122693,122695],{"class":89,"line":90},[87,122676,122638],{"class":205},[87,122678,122641],{"class":949},[87,122680,122644],{"class":949},[87,122682,29090],{"class":97},[87,122684,29148],{"class":949},[87,122686,122651],{"class":97},[87,122688,122654],{"class":949},[87,122690,1439],{"class":104},[87,122692,122659],{"class":949},[87,122694,2320],{"class":104},[87,122696,122664],{"class":949},[1006,122698,122699],{},"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":82,"searchDepth":101,"depth":101,"links":122701},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122361,"description":1026},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122708,"title":122709,"body":122710,"description":1026,"extension":1027,"meta":122724,"navigation":1029,"path":122725,"seo":122726,"stem":122727,"__hash__":122728},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122711,"toc":122722},[122712,122715],[10,122713,122709],{"id":122714},"_5-各种环境配置",[19,122716,122717],{},[1334,122718,122721],{"href":122719,"rel":122720},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24812],"电控组环境搭建大全",{"title":82,"searchDepth":101,"depth":101,"links":122723},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122709,"description":1026},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122730,"title":122731,"body":122732,"description":1026,"extension":1027,"meta":123080,"navigation":1029,"path":123081,"seo":123082,"stem":123083,"__hash__":123084},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122733,"toc":123072},[122734,122737,122741,122745,122749,122754,122761,122765,123058,123062,123069],[10,122735,122731],{"id":122736},"_6-拓展功能",[14,122738,122740],{"id":122739},"_61-wine","6.1 Wine",[14,122742,122744],{"id":122743},"_62-android","6.2 Android",[44,122746,122748],{"id":122747},"_621-i卡a卡","6.2.1 I卡、A卡",[1055,122750,122751],{},[29,122752,122753],{},"Wayland-Waydroid(体验超级好)",[19,122755,122756,122757],{},"Waydroid 官网与安装指南：",[1334,122758,122759],{"href":122759,"rel":122760},"https:\u002F\u002Fwaydro.id\u002F",[24812],[44,122762,122764],{"id":122763},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[1055,122766,122767],{},[29,122768,122769,122770,122772,122773,122777,122779,122782,122787,122984],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54652,122771],{},"BlissOS 官网下载：",[1334,122774,122775],{"href":122775,"rel":122776},"https:\u002F\u002Fblissos.org\u002F",[24812],[54652,122778],{},[39,122780],{"alt":82,"src":122781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[1055,122783,122784],{"start":120},[29,122785,122786],{},"比较推荐的配置",[77,122788,122790],{"className":118222,"code":122789,"language":118224,"meta":82,"style":82},"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",[84,122791,122792,122799,122809,122819,122829,122841,122851,122858,122868,122877,122886,122896,122906,122915,122925,122935,122947,122957,122966,122976],{"__ignoreMap":82},[87,122793,122794,122797],{"class":89,"line":90},[87,122795,122796],{"class":205},"qemu-system-x86_64",[87,122798,25626],{"class":104},[87,122800,122801,122804,122807],{"class":89,"line":101},[87,122802,122803],{"class":104},"        -M",[87,122805,122806],{"class":949}," q35,vmport=off",[87,122808,25626],{"class":104},[87,122810,122811,122814,122817],{"class":89,"line":120},[87,122812,122813],{"class":104},"        -accel",[87,122815,122816],{"class":949}," kvm",[87,122818,25626],{"class":104},[87,122820,122821,122824,122827],{"class":89,"line":222},[87,122822,122823],{"class":104},"        -cpu",[87,122825,122826],{"class":949}," qemu64,+sse3,+sse4.2",[87,122828,25626],{"class":104},[87,122830,122831,122834,122837,122839],{"class":89,"line":234},[87,122832,122833],{"class":104},"        -smp",[87,122835,122836],{"class":949}," 8,cores=",[87,122838,1389],{"class":104},[87,122840,25626],{"class":104},[87,122842,122843,122846,122849],{"class":89,"line":256},[87,122844,122845],{"class":104},"        -m",[87,122847,122848],{"class":949}," 6G",[87,122850,25626],{"class":104},[87,122852,122853,122856],{"class":89,"line":269},[87,122854,122855],{"class":104},"        -usb",[87,122857,25626],{"class":104},[87,122859,122860,122863,122866],{"class":89,"line":463},[87,122861,122862],{"class":104},"        -device",[87,122864,122865],{"class":949}," virtio-tablet",[87,122867,25626],{"class":104},[87,122869,122870,122872,122875],{"class":89,"line":469},[87,122871,122862],{"class":104},[87,122873,122874],{"class":949}," virtio-keyboard",[87,122876,25626],{"class":104},[87,122878,122879,122881,122884],{"class":89,"line":2287},[87,122880,122862],{"class":104},[87,122882,122883],{"class":949}," usb-tablet",[87,122885,25626],{"class":104},[87,122887,122888,122891,122894],{"class":89,"line":2568},[87,122889,122890],{"class":104},"        -bios",[87,122892,122893],{"class":949}," OVMF-pure-efi64.fd",[87,122895,25626],{"class":104},[87,122897,122898,122901,122904],{"class":89,"line":2573},[87,122899,122900],{"class":104},"        -net",[87,122902,122903],{"class":949}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[87,122905,25626],{"class":104},[87,122907,122908,122910,122913],{"class":89,"line":2579},[87,122909,122900],{"class":104},[87,122911,122912],{"class":949}," nic,model=virtio",[87,122914,25626],{"class":104},[87,122916,122917,122920,122923],{"class":89,"line":2584},[87,122918,122919],{"class":104},"        -audio",[87,122921,122922],{"class":949}," sdl,model=hda",[87,122924,25626],{"class":104},[87,122926,122927,122930,122933],{"class":89,"line":2598},[87,122928,122929],{"class":104},"        -display",[87,122931,122932],{"class":949}," sdl,gl=on,show-cursor=on",[87,122934,25626],{"class":104},[87,122936,122937,122939,122942,122945],{"class":89,"line":2603},[87,122938,122862],{"class":104},[87,122940,122941],{"class":949}," virtio-vga-gl,xres=1920,yres=",[87,122943,122944],{"class":104},"1080",[87,122946,25626],{"class":104},[87,122948,122949,122952,122955],{"class":89,"line":2609},[87,122950,122951],{"class":104},"        -drive",[87,122953,122954],{"class":949}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[87,122956,25626],{"class":104},[87,122958,122959,122961,122964],{"class":89,"line":2630},[87,122960,122951],{"class":104},[87,122962,122963],{"class":949}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[87,122965,25626],{"class":104},[87,122967,122968,122971,122974],{"class":89,"line":2635},[87,122969,122970],{"class":104},"        -monitor",[87,122972,122973],{"class":949}," stdio",[87,122975,25626],{"class":104},[87,122977,122978,122981],{"class":89,"line":2649},[87,122979,122980],{"class":104},"        -serial",[87,122982,122983],{"class":949}," none\n",[1055,122985,122986],{"start":234},[29,122987,122988,122989],{},"常用操作：",[1055,122990,122991,122994,123050],{},[29,122992,122993],{},"全屏：Ctrl+Alt+F",[29,122995,122996,122997,123002],{},"adb调试",[1055,122998,122999],{},[29,123000,123001],{},"使Linux与Android用ADB连接。",[77,123003,123005],{"className":118222,"code":123004,"language":118224,"meta":82,"style":82},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[84,123006,123007,123012,123023,123028,123040,123045],{"__ignoreMap":82},[87,123008,123009],{"class":89,"line":90},[87,123010,123011],{"class":199},"# 连接安卓\n",[87,123013,123014,123017,123020],{"class":89,"line":101},[87,123015,123016],{"class":205},"adb",[87,123018,123019],{"class":949}," connect",[87,123021,123022],{"class":104}," 127.0.0.1\n",[87,123024,123025],{"class":89,"line":120},[87,123026,123027],{"class":199},"# 打开shell\n",[87,123029,123030,123032,123034,123037],{"class":89,"line":222},[87,123031,123016],{"class":205},[87,123033,27830],{"class":104},[87,123035,123036],{"class":949}," 127.0.0.1:5555",[87,123038,123039],{"class":949}," shell\n",[87,123041,123042],{"class":89,"line":234},[87,123043,123044],{"class":199},"# 使用root权限\n",[87,123046,123047],{"class":89,"line":256},[87,123048,123049],{"class":205},"su\n",[29,123051,123052,123053],{},"中文输入法",[1055,123054,123055],{},[29,123056,123057],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123059,123061],{"id":123060},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123063,123064,123065],{},"rEFInd 官网与文档：",[1334,123066,123067],{"href":123067,"rel":123068},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24812],[1006,123070,123071],{},"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":82,"searchDepth":101,"depth":101,"links":123073},[123074,123075,123079],{"id":122739,"depth":101,"text":122740},{"id":122743,"depth":101,"text":122744,"children":123076},[123077,123078],{"id":122747,"depth":120,"text":122748},{"id":122763,"depth":120,"text":122764},{"id":123060,"depth":101,"text":123061},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122731,"description":1026},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123086,"title":123087,"body":123088,"description":1026,"extension":1027,"meta":126387,"navigation":1029,"path":126388,"seo":126389,"stem":126390,"__hash__":126391},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123089,"toc":126361},[123090,123093,123097,123100,123107,123357,123360,123432,123435,123439,123443,123448,123451,123454,123457,123462,123465,123468,123471,123476,123479,123484,123487,123490,123495,123498,123503,123506,123510,123514,123517,123522,123525,123539,123542,123545,123554,123557,123566,123569,123572,123581,123584,123593,123596,123599,123608,123611,123614,123629,123632,123635,123644,123649,123652,123655,123664,123667,123676,123679,123688,123691,123700,123705,123708,123716,123721,123724,123733,123736,123744,123749,123752,123761,123764,123767,123771,123774,123779,123782,123787,123801,123806,123811,123822,123827,123833,123838,123853,123858,123861,123866,123871,123876,123884,123889,123896,123901,123912,123917,123920,123924,123927,123930,123935,123938,123957,123962,123965,123974,123979,123982,124004,124007,124037,124040,124045,124048,124062,124067,124086,124089,124092,124097,124109,124114,124119,124122,124127,124130,124145,124148,124153,124158,124162,124167,124207,124210,124214,124220,124226,124231,124234,124241,124246,124253,124256,124259,124266,124280,124283,124343,124346,124360,124372,124375,124378,124381,124445,124448,124451,124454,124474,124477,124482,124489,124493,124496,124500,124505,124510,124514,124517,124520,124562,124567,124570,124592,124607,124609,124614,124626,124686,124688,124690,124744,124746,124748,124754,124759,124762,124767,124771,124774,124836,124841,124844,124846,124850,124862,124944,124946,124948,125002,125008,125010,125014,125019,125021,125026,125030,125050,125085,125089,125092,125095,125098,125105,125108,125120,125123,125138,125141,125160,125208,125211,125228,125231,125245,125250,125253,125262,125277,125289,125327,125332,125341,125346,125351,125377,125386,125390,125394,125399,125402,125406,125410,125415,125418,125423,125426,125431,125434,125439,125442,125446,125451,125454,125459,125462,125466,125471,125474,125479,125482,125487,125490,125494,125499,125502,125507,125510,125515,125518,125522,125527,125530,125535,125538,125543,125546,125551,125554,125559,125562,125567,125570,125574,125579,125582,125587,125594,125598,125603,125606,125611,125614,125618,125623,125626,125629,125632,125635,125638,125642,125645,125655,125660,125665,125687,125692,125697,125704,125708,125713,125716,125719,125724,125727,125730,125733,125736,125739,125742,125745,125748,125751,125754,125757,125760,125765,125770,125775,125780,125785,125790,125795,125798,125802,125805,125809,125814,125819,125824,125829,125833,125839,125847,125852,125855,125860,125875,125878,125883,125917,125932,125935,125990,126016,126028,126031,126040,126043,126058,126063,126066,126072,126077,126080,126085,126088,126093,126098,126105,126108,126123,126126,126161,126166,126174,126212,126215,126218,126223,126226,126231,126242,126276,126281,126284,126293,126298,126304,126307,126312,126321,126326,126329,126332,126337,126345,126348,126353,126358],[10,123091,123087],{"id":123092},"_7-其他操作",[14,123094,123096],{"id":123095},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123098,123099],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123101,123102,123103,123106],{},"进入工控机的硬盘目录，进入",[84,123104,123105],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[77,123108,123112],{"className":123109,"code":123110,"language":123111,"meta":82,"style":82},"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",[84,123113,123114,123122,123133,123140,123147,123159,123166,123178,123189,123200,123207,123214,123221,123233,123245,123252,123264,123276,123283,123295,123307,123319,123330,123337,123348],{"__ignoreMap":82},[87,123115,123116,123119],{"class":89,"line":90},[87,123117,123118],{"class":93},"network",[87,123120,123121],{"class":97},": \n",[87,123123,123124,123127,123129,123131],{"class":89,"line":101},[87,123125,123126],{"class":93},"  version",[87,123128,108],{"class":97},[87,123130,1176],{"class":104},[87,123132,3629],{"class":97},[87,123134,123135,123138],{"class":89,"line":120},[87,123136,123137],{"class":93},"  wifis",[87,123139,123121],{"class":97},[87,123141,123142,123145],{"class":89,"line":222},[87,123143,123144],{"class":93},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[87,123146,123121],{"class":97},[87,123148,123149,123152,123154,123157],{"class":89,"line":234},[87,123150,123151],{"class":93},"      renderer",[87,123153,108],{"class":97},[87,123155,123156],{"class":949},"NetworkManager",[87,123158,3629],{"class":97},[87,123160,123161,123164],{"class":89,"line":256},[87,123162,123163],{"class":93},"      match",[87,123165,123121],{"class":97},[87,123167,123168,123171,123173,123176],{"class":89,"line":269},[87,123169,123170],{"class":93},"        name",[87,123172,108],{"class":97},[87,123174,123175],{"class":949},"\"wlan0\"",[87,123177,3629],{"class":97},[87,123179,123180,123183,123185,123187],{"class":89,"line":463},[87,123181,123182],{"class":93},"      dhcp4",[87,123184,108],{"class":97},[87,123186,2320],{"class":104},[87,123188,3629],{"class":97},[87,123190,123191,123194,123196,123198],{"class":89,"line":469},[87,123192,123193],{"class":93},"      dhcp6",[87,123195,108],{"class":97},[87,123197,2320],{"class":104},[87,123199,3629],{"class":97},[87,123201,123202,123205],{"class":89,"line":2287},[87,123203,123204],{"class":93},"      access-points",[87,123206,123121],{"class":97},[87,123208,123209,123212],{"class":89,"line":2568},[87,123210,123211],{"class":949},"        \"EMIS_Vinci_Robocon_5G\"",[87,123213,123121],{"class":97},[87,123215,123216,123219],{"class":89,"line":2573},[87,123217,123218],{"class":93},"          auth",[87,123220,123121],{"class":97},[87,123222,123223,123226,123228,123231],{"class":89,"line":2579},[87,123224,123225],{"class":93},"            key-management",[87,123227,108],{"class":97},[87,123229,123230],{"class":949},"\"psk\"",[87,123232,3629],{"class":97},[87,123234,123235,123238,123240,123243],{"class":89,"line":2584},[87,123236,123237],{"class":93},"            password",[87,123239,108],{"class":97},[87,123241,123242],{"class":949},"\"vinci666\"",[87,123244,3629],{"class":97},[87,123246,123247,123250],{"class":89,"line":2598},[87,123248,123249],{"class":93},"          networkmanager",[87,123251,123121],{"class":97},[87,123253,123254,123257,123259,123262],{"class":89,"line":2603},[87,123255,123256],{"class":93},"            uuid",[87,123258,108],{"class":97},[87,123260,123261],{"class":949},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[87,123263,3629],{"class":97},[87,123265,123266,123269,123271,123274],{"class":89,"line":2609},[87,123267,123268],{"class":93},"            name",[87,123270,108],{"class":97},[87,123272,123273],{"class":949},"\"EMIS_Vinci_Robocon_5G\"",[87,123275,3629],{"class":97},[87,123277,123278,123281],{"class":89,"line":2630},[87,123279,123280],{"class":93},"            passthrough",[87,123282,123121],{"class":97},[87,123284,123285,123288,123290,123293],{"class":89,"line":2635},[87,123286,123287],{"class":93},"              wifi-security.auth-alg",[87,123289,108],{"class":97},[87,123291,123292],{"class":949},"\"open\"",[87,123294,3629],{"class":97},[87,123296,123297,123300,123302,123305],{"class":89,"line":2649},[87,123298,123299],{"class":93},"              ipv6.addr-gen-mode",[87,123301,108],{"class":97},[87,123303,123304],{"class":949},"\"default\"",[87,123306,3629],{"class":97},[87,123308,123309,123312,123314,123317],{"class":89,"line":2654},[87,123310,123311],{"class":93},"              ipv6.ip6-privacy",[87,123313,108],{"class":97},[87,123315,123316],{"class":949},"\"-1\"",[87,123318,3629],{"class":97},[87,123320,123321,123324,123326,123328],{"class":89,"line":2683},[87,123322,123323],{"class":93},"              proxy._",[87,123325,108],{"class":97},[87,123327,8602],{"class":949},[87,123329,3629],{"class":97},[87,123331,123332,123335],{"class":89,"line":2688},[87,123333,123334],{"class":93},"      networkmanager",[87,123336,123121],{"class":97},[87,123338,123339,123342,123344,123346],{"class":89,"line":2705},[87,123340,123341],{"class":93},"        uuid",[87,123343,108],{"class":97},[87,123345,123261],{"class":949},[87,123347,3629],{"class":97},[87,123349,123350,123352,123354],{"class":89,"line":2710},[87,123351,123170],{"class":93},[87,123353,108],{"class":97},[87,123355,123356],{"class":949},"\"EMIS_Vinci_Robocon_5G\"\n",[19,123358,123359],{},"将其改为新wifi的名和密码：",[77,123361,123363],{"className":123109,"code":123362,"language":123111,"meta":82,"style":82},"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",[84,123364,123365,123371,123380,123386,123393,123402,123410,123416,123422],{"__ignoreMap":82},[87,123366,123367,123369],{"class":89,"line":90},[87,123368,123118],{"class":93},[87,123370,4693],{"class":97},[87,123372,123373,123375,123377],{"class":89,"line":101},[87,123374,123126],{"class":93},[87,123376,108],{"class":97},[87,123378,123379],{"class":104},"2\n",[87,123381,123382,123384],{"class":89,"line":120},[87,123383,123137],{"class":93},[87,123385,4693],{"class":97},[87,123387,123388,123391],{"class":89,"line":222},[87,123389,123390],{"class":93},"    wlan0",[87,123392,4693],{"class":97},[87,123394,123395,123397,123399],{"class":89,"line":234},[87,123396,123182],{"class":93},[87,123398,108],{"class":97},[87,123400,123401],{"class":104},"true\n",[87,123403,123404,123406,123408],{"class":89,"line":256},[87,123405,123193],{"class":93},[87,123407,108],{"class":97},[87,123409,123401],{"class":104},[87,123411,123412,123414],{"class":89,"line":269},[87,123413,123204],{"class":93},[87,123415,4693],{"class":97},[87,123417,123418,123420],{"class":89,"line":463},[87,123419,123211],{"class":949},[87,123421,4693],{"class":97},[87,123423,123424,123427,123429],{"class":89,"line":469},[87,123425,123426],{"class":93},"          password",[87,123428,108],{"class":97},[87,123430,123431],{"class":949},"\"vinci666\"\n",[19,123433,123434],{},"工控机开机即可连上网。",[14,123436,123438],{"id":123437},"_72-ssh远程开发","7.2 SSH远程开发",[44,123440,123442],{"id":123441},"_721-环境准备","7.2.1 环境准备",[19,123444,123445],{},[57,123446,123447],{},"1.硬件准备",[19,123449,123450],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,123452,123453],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,123455,123456],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,123458,123459],{},[57,123460,123461],{},"2.设置固定IP",[19,123463,123464],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,123466,123467],{},"1.进入设置界面",[19,123469,123470],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,123472,123473],{},[39,123474],{"alt":82,"src":123475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,123477,123478],{},"2.配置所连接的网络",[19,123480,123481],{},[39,123482],{"alt":82,"src":123483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,123485,123486],{},"3.设置固定IP",[19,123488,123489],{},"查看当前IP地址。",[19,123491,123492],{},[39,123493],{"alt":82,"src":123494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,123496,123497],{},"设置固定IP。",[19,123499,123500],{},[39,123501],{"alt":82,"src":123502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,123504,123505],{},"至此，IP配置完毕。",[44,123507,123509],{"id":123508},"_722-环境搭建","7.2.2 环境搭建",[19,123511,123512],{},[57,123513,26700],{},[19,123515,123516],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,123518,123519],{},[57,123520,123521],{},"实现",[19,123523,123524],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[1055,123526,123527,123530,123533,123536],{},[29,123528,123529],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[29,123531,123532],{},"远程主机启动SSH服务；",[29,123534,123535],{},"本地主机登陆远程主机；",[29,123537,123538],{},"实现数据传输。",[19,123540,123541],{},"1.安装SSH客户端与服务端",[19,123543,123544],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[77,123546,123548],{"className":121742,"code":123547,"language":121744,"meta":121745,"style":82}," sudo apt install openssh-server\n",[84,123549,123550],{"__ignoreMap":82},[87,123551,123552],{"class":89,"line":90},[87,123553,123547],{},[19,123555,123556],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[77,123558,123560],{"className":121742,"code":123559,"language":121744,"meta":121745,"style":82},"sudo apt install openssh-client\n",[84,123561,123562],{"__ignoreMap":82},[87,123563,123564],{"class":89,"line":90},[87,123565,123559],{},[19,123567,123568],{},"2.远程主机启动SSH服务",[19,123570,123571],{},"远程主机启动 ssh 服务命令如下：",[77,123573,123575],{"className":121742,"code":123574,"language":121744,"meta":121745,"style":82},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[84,123576,123577],{"__ignoreMap":82},[87,123578,123579],{"class":89,"line":90},[87,123580,123574],{},[19,123582,123583],{},"启动后可使用如下命令查看服务是否正常运行：",[77,123585,123587],{"className":121742,"code":123586,"language":121744,"meta":121745,"style":82},"ps -e | grep ssh\n",[84,123588,123589],{"__ignoreMap":82},[87,123590,123591],{"class":89,"line":90},[87,123592,123586],{},[19,123594,123595],{},"如果启动成功，会包含 sshd 程序。",[19,123597,123598],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[77,123600,123602],{"className":121742,"code":123601,"language":121744,"meta":121745,"style":82},"sudo systemctl enable ssh\n",[84,123603,123604],{"__ignoreMap":82},[87,123605,123606],{"class":89,"line":90},[87,123607,123601],{},[19,123609,123610],{},"3.本地远程登录",[19,123612,123613],{},"登录远程主机可以调用如下命令:",[77,123615,123617],{"className":118222,"code":123616,"language":118224,"meta":82,"style":82},"ssh -X 用户名@ip地址\n",[84,123618,123619],{"__ignoreMap":82},[87,123620,123621,123623,123626],{"class":89,"line":90},[87,123622,122573],{"class":205},[87,123624,123625],{"class":104}," -X",[87,123627,123628],{"class":949}," 用户名@ip地址\n",[19,123630,123631],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,123633,123634],{},"如果退出，可以调用exit命令：",[77,123636,123638],{"className":121742,"code":123637,"language":121744,"meta":121745,"style":82},"exit\n",[84,123639,123640],{"__ignoreMap":82},[87,123641,123642],{"class":89,"line":90},[87,123643,123637],{},[19,123645,123646],{},[57,123647,123648],{},"4.实现数据传输",[19,123650,123651],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,123653,123654],{},"上传文件指令格式如下：",[77,123656,123658],{"className":121742,"code":123657,"language":121744,"meta":121745,"style":82},"scp 本地文件路径 账号@ip:路径\n",[84,123659,123660],{"__ignoreMap":82},[87,123661,123662],{"class":89,"line":90},[87,123663,123657],{},[19,123665,123666],{},"上传文件夹指令格式如下：",[77,123668,123670],{"className":121742,"code":123669,"language":121744,"meta":121745,"style":82},"scp -r 本地文件夹路径 账号@ip:路径\n",[84,123671,123672],{"__ignoreMap":82},[87,123673,123674],{"class":89,"line":90},[87,123675,123669],{},[19,123677,123678],{},"下载文件指令格式如下：",[77,123680,123682],{"className":121742,"code":123681,"language":121744,"meta":121745,"style":82},"scp 账号@ip:路径 本地文件夹路径\n",[84,123683,123684],{"__ignoreMap":82},[87,123685,123686],{"class":89,"line":90},[87,123687,123681],{},[19,123689,123690],{},"下载文件夹指令格式如下：",[77,123692,123694],{"className":121742,"code":123693,"language":121744,"meta":121745,"style":82},"scp -r 账号@ip:路径 本地文件夹路径\n",[84,123695,123696],{"__ignoreMap":82},[87,123697,123698],{"class":89,"line":90},[87,123699,123693],{},[19,123701,123702],{},[57,123703,123704],{},"优化",[19,123706,123707],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[1055,123709,123710,123713],{},[29,123711,123712],{},"本地生成密钥对；",[29,123714,123715],{},"将公钥上传至远程主机。",[19,123717,123718],{},[57,123719,123720],{},"1.生成密钥对",[19,123722,123723],{},"本地客户端生成公私钥：（一路回车默认即可）",[77,123725,123727],{"className":121742,"code":123726,"language":121744,"meta":121745,"style":82},"ssh-keygen\n",[84,123728,123729],{"__ignoreMap":82},[87,123730,123731],{"class":89,"line":90},[87,123732,123726],{},[19,123734,123735],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[1055,123737,123738,123741],{},[29,123739,123740],{},"id_rsa （私钥）；",[29,123742,123743],{},"id_rsa.pub (公钥)。",[19,123745,123746],{},[57,123747,123748],{},"2.公钥上传",[19,123750,123751],{},"上传指令如下：",[77,123753,123755],{"className":121742,"code":123754,"language":121744,"meta":121745,"style":82},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[84,123756,123757],{"__ignoreMap":82},[87,123758,123759],{"class":89,"line":90},[87,123760,123754],{},[19,123762,123763],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,123765,123766],{},"以后再远程登录就无需录入密码了。",[44,123768,123770],{"id":123769},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,123772,123773],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,123775,123776],{},[57,123777,123778],{},"1.准备工作",[19,123780,123781],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,123783,123784],{},[57,123785,123786],{},"2.为VScode安装远程开发插件",[19,123788,123789,123790,123793,123794,123797,123798,29332],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[84,123791,123792],{},"扩展：商店","的搜索栏输入",[84,123795,123796],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[84,123799,123800],{},"安装",[19,123802,123803],{},[39,123804],{"alt":82,"src":123805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,123807,123808],{},[57,123809,123810],{},"3.配置远程连接",[19,123812,123813,123814,123817,123818,123821],{},"步骤1：使用快捷键",[84,123815,123816],{},"ctrl + shift + p","打开命令输入窗口，并输入",[84,123819,123820],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,123823,123824],{},[39,123825],{"alt":82,"src":123826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,123828,123829,123830,29332],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[84,123831,123832],{},"Add New SSH Host",[19,123834,123835],{},[39,123836],{"alt":82,"src":123837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,123839,123840,123841,123844,123845,123848,123849,123852],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[84,123842,123843],{},"ssh +X ubuntu@192.168.43.164","，其中，",[84,123846,123847],{},"ubuntu","需要替换为你的登录用户名，",[84,123850,123851],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123854,123855],{},[39,123856],{"alt":82,"src":123857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123859,123860],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123862,123863],{},[39,123864],{"alt":82,"src":123865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123867,123868],{},[39,123869],{"alt":82,"src":123870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123872,123873],{},[57,123874,123875],{},"4.使用",[19,123877,123878,123879,123817,123881,123883],{},"步骤1：继续使用快捷键",[84,123880,123816],{},[84,123882,123820],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123885,123886],{},[39,123887],{"alt":82,"src":123888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123890,123891,123892,123895],{},"或者，也可以点击侧边栏的",[84,123893,123894],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123897,123898],{},[39,123899],{"alt":82,"src":123900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123902,123903,123904,123907,123908,123911],{},"步骤2：选择菜单栏的",[84,123905,123906],{},"文件","下的",[84,123909,123910],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123913,123914],{},[39,123915],{"alt":82,"src":123916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123918,123919],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123921,123923],{"id":123922},"_73-远程桌面","7.3 远程桌面",[19,123925,123926],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123928,123929],{},"我们选择使用VNC来看。",[1055,123931,123932],{},[29,123933,123934],{},"安装VNC服务器：",[19,123936,123937],{},"这里以TigerVNC为例进行安装：",[77,123939,123941],{"className":118222,"code":123940,"language":118224,"meta":82,"style":82},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[84,123942,123943],{"__ignoreMap":82},[87,123944,123945,123947,123949,123951,123954],{"class":89,"line":90},[87,123946,25524],{"class":205},[87,123948,118243],{"class":949},[87,123950,24781],{"class":949},[87,123952,123953],{"class":949}," tigervnc-standalone-server",[87,123955,123956],{"class":949}," tigervnc-common\n",[1055,123958,123959],{"start":101},[29,123960,123961],{},"设置VNC密码：",[19,123963,123964],{},"为VNC用户设置密码，运行以下命令：",[77,123966,123968],{"className":118222,"code":123967,"language":118224,"meta":82,"style":82},"vncpasswd\n",[84,123969,123970],{"__ignoreMap":82},[87,123971,123972],{"class":89,"line":90},[87,123973,123967],{"class":205},[1055,123975,123976],{"start":120},[29,123977,123978],{},"配置VNC启动脚本:",[19,123980,123981],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[77,123983,123985],{"className":118222,"code":123984,"language":118224,"meta":82,"style":82},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[84,123986,123987,123996],{"__ignoreMap":82},[87,123988,123989,123991,123993],{"class":89,"line":90},[87,123990,102192],{"class":205},[87,123992,30163],{"class":104},[87,123994,123995],{"class":949}," ~\u002F.vnc\n",[87,123997,123998,124001],{"class":89,"line":101},[87,123999,124000],{"class":205},"nano",[87,124002,124003],{"class":949}," ~\u002F.vnc\u002Fxstartup\n",[19,124005,124006],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[77,124008,124010],{"className":118222,"code":124009,"language":118224,"meta":82,"style":82},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[84,124011,124012,124017,124025,124032],{"__ignoreMap":82},[87,124013,124014],{"class":89,"line":90},[87,124015,124016],{"class":199},"#!\u002Fbin\u002Fsh\n",[87,124018,124019,124022],{"class":89,"line":101},[87,124020,124021],{"class":104},"unset",[87,124023,124024],{"class":949}," SESSION_MANAGER\n",[87,124026,124027,124029],{"class":89,"line":120},[87,124028,124021],{"class":104},[87,124030,124031],{"class":949}," DBUS_SESSION_BUS_ADDRESS\n",[87,124033,124034],{"class":89,"line":222},[87,124035,124036],{"class":205},"gnome-session\n",[19,124038,124039],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[1055,124041,124042],{"start":222},[29,124043,124044],{},"给予执行权限：",[19,124046,124047],{},"为xstartup文件设置执行权限：",[77,124049,124051],{"className":118222,"code":124050,"language":118224,"meta":82,"style":82},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[84,124052,124053],{"__ignoreMap":82},[87,124054,124055,124057,124060],{"class":89,"line":90},[87,124056,25559],{"class":205},[87,124058,124059],{"class":949}," +x",[87,124061,124003],{"class":949},[1055,124063,124064],{"start":234},[29,124065,124066],{},"启动VNC服务器：",[77,124068,124070],{"className":118222,"code":124069,"language":118224,"meta":82,"style":82},"vncserver -geometry 1920x1080 -localhost=0\n",[84,124071,124072],{"__ignoreMap":82},[87,124073,124074,124077,124080,124083],{"class":89,"line":90},[87,124075,124076],{"class":205},"vncserver",[87,124078,124079],{"class":104}," -geometry",[87,124081,124082],{"class":949}," 1920x1080",[87,124084,124085],{"class":104}," -localhost=0\n",[19,124087,124088],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124090,124091],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[1055,124093,124094],{"start":256},[29,124095,124096],{},"查看已开启的VNC服务器：",[77,124098,124100],{"className":118222,"code":124099,"language":118224,"meta":82,"style":82},"vncserver -list\n",[84,124101,124102],{"__ignoreMap":82},[87,124103,124104,124106],{"class":89,"line":90},[87,124105,124076],{"class":205},[87,124107,124108],{"class":104}," -list\n",[19,124110,124111],{},[39,124112],{"alt":82,"src":124113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[1055,124115,124116],{"start":269},[29,124117,124118],{},"连接到VNC服务器：",[19,124120,124121],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[1055,124123,124124],{"start":463},[29,124125,124126],{},"停止VNC服务器：",[19,124128,124129],{},"如果需要停止VNC服务器，可以使用以下命令：",[77,124131,124133],{"className":118222,"code":124132,"language":118224,"meta":82,"style":82},"vncserver -kill :1\n",[84,124134,124135],{"__ignoreMap":82},[87,124136,124137,124139,124142],{"class":89,"line":90},[87,124138,124076],{"class":205},[87,124140,124141],{"class":104}," -kill",[87,124143,124144],{"class":949}," :1\n",[19,124146,124147],{},"将:1替换为你实际使用的显示编号。",[19,124149,124150],{},[39,124151],{"alt":82,"src":124152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124154,124155],{},[39,124156],{"alt":82,"src":124157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124159,124161],{"id":124160},"_74-usb端口设置","7.4 USB端口设置",[19,124163,124164],{},[57,124165,124166],{},"首先先配置好权限",[77,124168,124170],{"className":118222,"code":124169,"language":118224,"meta":82,"style":82},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[84,124171,124172,124177,124190,124197,124202],{"__ignoreMap":82},[87,124173,124174],{"class":89,"line":90},[87,124175,124176],{"class":199},"# 将用户权限提高\n",[87,124178,124179,124181,124183,124185,124188],{"class":89,"line":101},[87,124180,25524],{"class":205},[87,124182,27521],{"class":949},[87,124184,27524],{"class":104},[87,124186,124187],{"class":949}," dialout",[87,124189,27529],{"class":97},[87,124191,124192,124194],{"class":89,"line":120},[87,124193,27548],{"class":205},[87,124195,124196],{"class":949}," dialout\n",[87,124198,124199],{"class":89,"line":222},[87,124200,124201],{"class":199},"# 查看下面命令是否输出dialout（若输出才正常）\n",[87,124203,124204],{"class":89,"line":234},[87,124205,124206],{"class":205},"groups\n",[19,124208,124209],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[44,124211,124213],{"id":124212},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,124215,124216,124219],{},[57,124217,124218],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,124221,124222,124225],{},[57,124223,124224],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,124227,124228],{},[57,124229,124230],{},"流程如下：",[19,124232,124233],{},"（1）.查找设备idVendor和idProduct",[19,124235,124236,124237,124240],{},"接入两个USB设备，在终端调用指令",[84,124238,124239],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,124242,124243],{},[39,124244],{"alt":82,"src":124245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,124247,124248,124249,124252],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[84,124250,124251],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,124254,124255],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,124257,124258],{},"（2）.编写映射规则",[19,124260,124261,124262,124265],{},"在",[84,124263,124264],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[77,124267,124269],{"className":118222,"code":124268,"language":118224,"meta":82,"style":82},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[84,124270,124271],{"__ignoreMap":82},[87,124272,124273,124275,124277],{"class":89,"line":90},[87,124274,25524],{"class":205},[87,124276,119509],{"class":949},[87,124278,124279],{"class":949}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,124281,124282],{},"输入如下内容：",[77,124284,124286],{"className":118222,"code":124285,"language":118224,"meta":82,"style":82},"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",[84,124287,124288,124318],{"__ignoreMap":82},[87,124289,124290,124293,124295,124298,124301,124304,124307,124309,124312,124315],{"class":89,"line":90},[87,124291,124292],{"class":97},"KERNEL",[87,124294,946],{"class":171},[87,124296,124297],{"class":949},"=\"ttyUSB*\",",[87,124299,124300],{"class":205}," ATTRS",[87,124302,124303],{"class":949},"{idVendor}==",[87,124305,124306],{"class":205},"\"10c4\"",[87,124308,1473],{"class":205},[87,124310,124311],{"class":949}," ATTRS{idProduct}==\"ea60\",",[87,124313,124314],{"class":949}," MODE:=\"0777\",",[87,124316,124317],{"class":949}," SYMLINK+=\"mylidar\"\n",[87,124319,124320,124322,124324,124326,124328,124330,124333,124335,124338,124340],{"class":89,"line":101},[87,124321,124292],{"class":97},[87,124323,946],{"class":171},[87,124325,124297],{"class":949},[87,124327,124300],{"class":205},[87,124329,124303],{"class":949},[87,124331,124332],{"class":205},"\"1a86\"",[87,124334,1473],{"class":205},[87,124336,124337],{"class":949}," ATTRS{idProduct}==\"7523\",",[87,124339,124314],{"class":949},[87,124341,124342],{"class":949}," SYMLINK+=\"mycar\"\n",[19,124344,124345],{},"代码解释：",[26,124347,124348,124351,124354,124357],{},[29,124349,124350],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[29,124352,124353],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[29,124355,124356],{},"SYMLINK是符号连接，即绑定的别名；",[29,124358,124359],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,124361,124362,124363,124366,124369],{},"***小提示：***",[24500,124364,124365],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[84,124367,124368],{},"\u002Fetc\u002Fudev\u002Frule.d",[24500,124370,124371],{},"目录即可。",[19,124373,124374],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,124376,124377],{},"（3）.使规则生效",[19,124379,124380],{},"在终端下输入如下指令：",[77,124382,124384],{"className":118222,"code":124383,"language":118224,"meta":82,"style":82},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[84,124385,124386,124391,124403,124414,124418,124423,124436],{"__ignoreMap":82},[87,124387,124388],{"class":89,"line":90},[87,124389,124390],{"class":199},"# Ubuntu用下方命令\n",[87,124392,124393,124395,124397,124400],{"class":89,"line":101},[87,124394,25524],{"class":205},[87,124396,120974],{"class":949},[87,124398,124399],{"class":949}," udev",[87,124401,124402],{"class":949}," reload\n",[87,124404,124405,124407,124409,124411],{"class":89,"line":120},[87,124406,25524],{"class":205},[87,124408,120974],{"class":949},[87,124410,124399],{"class":949},[87,124412,124413],{"class":949}," restart\n",[87,124415,124416],{"class":89,"line":222},[87,124417,3355],{"emptyLinePlaceholder":1029},[87,124419,124420],{"class":89,"line":234},[87,124421,124422],{"class":199},"#Fedora用下方命令\n",[87,124424,124425,124427,124430,124433],{"class":89,"line":256},[87,124426,25524],{"class":205},[87,124428,124429],{"class":949}," udevadm",[87,124431,124432],{"class":949}," control",[87,124434,124435],{"class":104}," --reload\n",[87,124437,124438,124440,124442],{"class":89,"line":269},[87,124439,25524],{"class":205},[87,124441,124429],{"class":949},[87,124443,124444],{"class":949}," trigger\n",[19,124446,124447],{},"再重新插拔设备即可。",[19,124449,124450],{},"（4）.测试",[19,124452,124453],{},"终端下输入如下指令",[77,124455,124457],{"className":118222,"code":124456,"language":118224,"meta":82,"style":82},"ll \u002Fdev | grep ttyUSB\n",[84,124458,124459],{"__ignoreMap":82},[87,124460,124461,124464,124467,124469,124471],{"class":89,"line":90},[87,124462,124463],{"class":205},"ll",[87,124465,124466],{"class":949}," \u002Fdev",[87,124468,26057],{"class":171},[87,124470,31183],{"class":205},[87,124472,124473],{"class":949}," ttyUSB\n",[19,124475,124476],{},"运行结果如下：",[19,124478,124479],{},[39,124480],{"alt":82,"src":124481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,124483,124484,124485,124488],{},"也可以多次插拔USB设备，会发现设备端口",[84,124486,124487],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,124490,124491],{},[57,124492,118890],{},[19,124494,124495],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[44,124497,124499],{"id":124498},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,124501,124502,124504],{},[57,124503,124218],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,124506,124507,124509],{},[57,124508,124224],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,124511,124512],{},[57,124513,124230],{},[19,124515,124516],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,124518,124519],{},"调用如下指令查看第一台雷达的USB信息：",[77,124521,124523],{"className":118222,"code":124522,"language":118224,"meta":82,"style":82},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[84,124524,124525,124545],{"__ignoreMap":82},[87,124526,124527,124530,124532,124535,124538,124540,124542],{"class":89,"line":90},[87,124528,124529],{"class":205},"udevadm",[87,124531,70753],{"class":949},[87,124533,124534],{"class":104}," --attribute-walk",[87,124536,124537],{"class":104}," --name=\u002Fdev\u002FttyUSB0",[87,124539,26057],{"class":171},[87,124541,31183],{"class":205},[87,124543,124544],{"class":949}," KERNELS\n",[87,124546,124547,124549,124551,124553,124556,124558,124560],{"class":89,"line":101},[87,124548,124529],{"class":205},[87,124550,70753],{"class":949},[87,124552,124534],{"class":104},[87,124554,124555],{"class":104}," --name=\u002Fdev\u002FttyACM0",[87,124557,26057],{"class":171},[87,124559,31183],{"class":205},[87,124561,124544],{"class":949},[19,124563,124564],{},[39,124565],{"alt":82,"src":124566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,124568,124569],{},"调用如下指令查看第二台雷达的USB信息：",[77,124571,124573],{"className":118222,"code":124572,"language":118224,"meta":82,"style":82},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[84,124574,124575],{"__ignoreMap":82},[87,124576,124577,124579,124581,124583,124586,124588,124590],{"class":89,"line":90},[87,124578,124529],{"class":205},[87,124580,70753],{"class":949},[87,124582,124534],{"class":104},[87,124584,124585],{"class":104}," --name=\u002Fdev\u002FttyUSB1",[87,124587,26057],{"class":171},[87,124589,31183],{"class":205},[87,124591,124544],{"class":949},[19,124593,124594,124595,124598,124599,124602,124603,124606],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[84,124596,124597],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[84,124600,124601],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[57,124604,124605],{},"唯一性标识","”。",[19,124608,124258],{},[19,124610,124261,124611,124613],{},[84,124612,124264],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[77,124615,124616],{"className":118222,"code":124268,"language":118224,"meta":82,"style":82},[84,124617,124618],{"__ignoreMap":82},[87,124619,124620,124622,124624],{"class":89,"line":90},[87,124621,25524],{"class":205},[87,124623,119509],{"class":949},[87,124625,124279],{"class":949},[77,124627,124629],{"className":118222,"code":124628,"language":118224,"meta":82,"style":82},"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",[84,124630,124631,124660],{"__ignoreMap":82},[87,124632,124633,124635,124637,124639,124642,124644,124647,124650,124652,124655,124657],{"class":89,"line":90},[87,124634,124292],{"class":97},[87,124636,946],{"class":171},[87,124638,124297],{"class":949},[87,124640,124641],{"class":97}," KERNELS",[87,124643,946],{"class":171},[87,124645,124646],{"class":949},"=\"1-1.3:1.0\",",[87,124648,124649],{"class":205}," MODE:",[87,124651,946],{"class":949},[87,124653,124654],{"class":205},"\"0777\"",[87,124656,1473],{"class":205},[87,124658,124659],{"class":949}," SYMLINK+=\"rplidar_front\"\n",[87,124661,124662,124664,124666,124668,124670,124672,124675,124677,124679,124681,124683],{"class":89,"line":101},[87,124663,124292],{"class":97},[87,124665,946],{"class":171},[87,124667,124297],{"class":949},[87,124669,124641],{"class":97},[87,124671,946],{"class":171},[87,124673,124674],{"class":949},"=\"1-1.4:1.0\",",[87,124676,124649],{"class":205},[87,124678,946],{"class":949},[87,124680,124654],{"class":205},[87,124682,1473],{"class":205},[87,124684,124685],{"class":949}," SYMLINK+=\"rplidar_back\"\n",[19,124687,124377],{},[19,124689,124380],{},[77,124691,124692],{"className":118222,"code":124383,"language":118224,"meta":82,"style":82},[84,124693,124694,124698,124708,124718,124722,124726,124736],{"__ignoreMap":82},[87,124695,124696],{"class":89,"line":90},[87,124697,124390],{"class":199},[87,124699,124700,124702,124704,124706],{"class":89,"line":101},[87,124701,25524],{"class":205},[87,124703,120974],{"class":949},[87,124705,124399],{"class":949},[87,124707,124402],{"class":949},[87,124709,124710,124712,124714,124716],{"class":89,"line":120},[87,124711,25524],{"class":205},[87,124713,120974],{"class":949},[87,124715,124399],{"class":949},[87,124717,124413],{"class":949},[87,124719,124720],{"class":89,"line":222},[87,124721,3355],{"emptyLinePlaceholder":1029},[87,124723,124724],{"class":89,"line":234},[87,124725,124422],{"class":199},[87,124727,124728,124730,124732,124734],{"class":89,"line":256},[87,124729,25524],{"class":205},[87,124731,124429],{"class":949},[87,124733,124432],{"class":949},[87,124735,124435],{"class":104},[87,124737,124738,124740,124742],{"class":89,"line":269},[87,124739,25524],{"class":205},[87,124741,124429],{"class":949},[87,124743,124444],{"class":949},[19,124745,124447],{},[19,124747,124450],{},[19,124749,124453,124750,124753],{},[84,124751,124752],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,124755,124756],{},[39,124757],{"alt":82,"src":124758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,124760,124761],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,124763,124764,124766],{},[57,124765,118890],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[44,124768,124770],{"id":124769},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,124772,124773],{},"（1）.查看所连接的主机USB接口的信息",[77,124775,124777],{"className":118222,"code":124776,"language":118224,"meta":82,"style":82},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[84,124778,124779,124809],{"__ignoreMap":82},[87,124780,124781,124783,124785,124788,124790,124792,124794,124796,124799,124802,124804,124807],{"class":89,"line":90},[87,124782,124529],{"class":205},[87,124784,70753],{"class":949},[87,124786,124787],{"class":104}," -a",[87,124789,30163],{"class":104},[87,124791,29369],{"class":97},[87,124793,124529],{"class":205},[87,124795,70753],{"class":949},[87,124797,124798],{"class":104}," -q",[87,124800,124801],{"class":949}," path",[87,124803,26063],{"class":104},[87,124805,124806],{"class":949}," \u002Fdev\u002FttyACM0",[87,124808,1108],{"class":97},[87,124810,124811,124813,124815,124817,124819,124821,124823,124825,124827,124829,124831,124834],{"class":89,"line":101},[87,124812,124529],{"class":205},[87,124814,70753],{"class":949},[87,124816,124787],{"class":104},[87,124818,30163],{"class":104},[87,124820,29369],{"class":97},[87,124822,124529],{"class":205},[87,124824,70753],{"class":949},[87,124826,124798],{"class":104},[87,124828,124801],{"class":949},[87,124830,26063],{"class":104},[87,124832,124833],{"class":949}," \u002Fdev\u002FttyUSB0",[87,124835,1108],{"class":97},[19,124837,124838],{},[39,124839],{"alt":82,"src":124840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124842,124843],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124845,124258],{},[19,124847,124261,124848,124613],{},[84,124849,124264],{},[77,124851,124852],{"className":118222,"code":124268,"language":118224,"meta":82,"style":82},[84,124853,124854],{"__ignoreMap":82},[87,124855,124856,124858,124860],{"class":89,"line":90},[87,124857,25524],{"class":205},[87,124859,119509],{"class":949},[87,124861,124279],{"class":949},[77,124863,124865],{"className":118222,"code":124864,"language":118224,"meta":82,"style":82},"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",[84,124866,124867,124895,124921],{"__ignoreMap":82},[87,124868,124869,124871,124873,124876,124878,124880,124882,124884,124887,124890,124892],{"class":89,"line":90},[87,124870,124292],{"class":97},[87,124872,946],{"class":171},[87,124874,124875],{"class":949},"=\"ttyACM*\",",[87,124877,124300],{"class":205},[87,124879,124303],{"class":949},[87,124881,124332],{"class":205},[87,124883,1473],{"class":205},[87,124885,124886],{"class":949}," ATTRS{idProduct}==\"55d4\",",[87,124888,124889],{"class":949}," ATTRS{serial}==\"0001\",",[87,124891,124314],{"class":949},[87,124893,124894],{"class":949}," SYMLINK+=\"ttyACM_MCU\"\n",[87,124896,124897,124899,124901,124903,124905,124907,124909,124911,124913,124916,124918],{"class":89,"line":101},[87,124898,124292],{"class":97},[87,124900,946],{"class":171},[87,124902,124875],{"class":949},[87,124904,124300],{"class":205},[87,124906,124303],{"class":949},[87,124908,124332],{"class":205},[87,124910,1473],{"class":205},[87,124912,124886],{"class":949},[87,124914,124915],{"class":949}," ATTRS{serial}==\"0002\",",[87,124917,124314],{"class":949},[87,124919,124920],{"class":949}," SYMLINK+=\"ttyACM_Lidar\"\n",[87,124922,124923,124925,124927,124929,124931,124933,124935,124937,124939,124941],{"class":89,"line":120},[87,124924,124292],{"class":97},[87,124926,946],{"class":171},[87,124928,124297],{"class":949},[87,124930,124300],{"class":205},[87,124932,124303],{"class":949},[87,124934,124332],{"class":205},[87,124936,1473],{"class":205},[87,124938,124337],{"class":949},[87,124940,124314],{"class":949},[87,124942,124943],{"class":949}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124945,124377],{},[19,124947,124380],{},[77,124949,124950],{"className":118222,"code":124383,"language":118224,"meta":82,"style":82},[84,124951,124952,124956,124966,124976,124980,124984,124994],{"__ignoreMap":82},[87,124953,124954],{"class":89,"line":90},[87,124955,124390],{"class":199},[87,124957,124958,124960,124962,124964],{"class":89,"line":101},[87,124959,25524],{"class":205},[87,124961,120974],{"class":949},[87,124963,124399],{"class":949},[87,124965,124402],{"class":949},[87,124967,124968,124970,124972,124974],{"class":89,"line":120},[87,124969,25524],{"class":205},[87,124971,120974],{"class":949},[87,124973,124399],{"class":949},[87,124975,124413],{"class":949},[87,124977,124978],{"class":89,"line":222},[87,124979,3355],{"emptyLinePlaceholder":1029},[87,124981,124982],{"class":89,"line":234},[87,124983,124422],{"class":199},[87,124985,124986,124988,124990,124992],{"class":89,"line":256},[87,124987,25524],{"class":205},[87,124989,124429],{"class":949},[87,124991,124432],{"class":949},[87,124993,124435],{"class":104},[87,124995,124996,124998,125000],{"class":89,"line":269},[87,124997,25524],{"class":205},[87,124999,124429],{"class":949},[87,125001,124444],{"class":949},[19,125003,125004,125005],{},"再重新插拔设备即可，或者 ",[57,125006,125007],{},"直接重启系统。",[19,125009,124450],{},[19,125011,124453,125012,124753],{},[84,125013,124752],{},[19,125015,125016],{},[39,125017],{"alt":82,"src":125018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125020,124761],{},[19,125022,125023,125025],{},[57,125024,118890],{}," 一些设备可能没有串口号等。",[44,125027,125029],{"id":125028},"_744-其他注意事项","7.4.4 其他注意事项",[19,125031,125032,125033,125035,125036,125039,125040,19358,125043,125046,125047,125049],{},"并非所有的USB设备端口号都是",[84,125034,124487],{},"的格式，比如Arduino的端口号可能是",[84,125037,125038],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[84,125041,125042],{},"videon",[84,125044,125045],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[84,125048,125042],{},"端口，绑定时需要关联的也是该接口。",[19,125051,125052,125053,125056,125057,125060,125061,125063,125064,125067,125068,125071,125072,125075,125076,125075,125079,125075,125082,29332],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[84,125054,125055],{},"KERNEL==\"ttyUSB*\"","修改为",[84,125058,125059],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[84,125062,125055],{},"修改为类似于",[84,125065,125066],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[84,125069,125070],{},"video[0,2,4,6]","表示可以绑定的端口为",[84,125073,125074],{},"video0","或",[84,125077,125078],{},"video2",[84,125080,125081],{},"video4",[84,125083,125084],{},"video6",[14,125086,125088],{"id":125087},"_75-挂载内网网页","7.5 挂载内网网页",[19,125090,125091],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125093,125094],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125096,125097],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125099,125100,125101],{},"Termux 下载地址（F-Droid）：",[1334,125102,125103],{"href":125103,"rel":125104},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24812],[19,125106,125107],{},"首先打开app后，先更新软件缓存：",[77,125109,125111],{"className":118222,"code":125110,"language":118224,"meta":82,"style":82},"pkg update\n",[84,125112,125113],{"__ignoreMap":82},[87,125114,125115,125118],{"class":89,"line":90},[87,125116,125117],{"class":205},"pkg",[87,125119,27189],{"class":949},[19,125121,125122],{},"然后换源",[77,125124,125126],{"className":118222,"code":125125,"language":118224,"meta":82,"style":82},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[84,125127,125128],{"__ignoreMap":82},[87,125129,125130,125132,125135],{"class":89,"line":90},[87,125131,124000],{"class":205},[87,125133,125134],{"class":97}," $PREFIX",[87,125136,125137],{"class":949},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125139,125140],{},"将该文件内容替换为下面：",[77,125142,125144],{"className":118222,"code":125143,"language":118224,"meta":82,"style":82},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[84,125145,125146],{"__ignoreMap":82},[87,125147,125148,125151,125154,125157],{"class":89,"line":90},[87,125149,125150],{"class":205},"deb",[87,125152,125153],{"class":949}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[87,125155,125156],{"class":949}," stable",[87,125158,125159],{"class":949}," main\n",[26,125161,125162,125189],{},[29,125163,125164,125165,125167,125168],{},"如果你使用的是",[84,125166,124000],{},"编辑器：",[26,125169,125170,125177,125183],{},[29,125171,125172,125173,125176],{},"按 ",[84,125174,125175],{},"Ctrl+O"," 保存文件。",[29,125178,125172,125179,125182],{},[84,125180,125181],{},"Enter"," 确认文件名。",[29,125184,125172,125185,125188],{},[84,125186,125187],{},"Ctrl+X"," 退出编辑器。",[29,125190,125164,125191,125167,125194],{},[84,125192,125193],{},"vim",[26,125195,125196,125202],{},[29,125197,125172,125198,125201],{},[84,125199,125200],{},"Esc"," 退出编辑模式。",[29,125203,125204,125205,125207],{},"输入 ",[84,125206,120147],{}," 保存并退出。",[19,125209,125210],{},"接下来重新更新软件源：",[77,125212,125214],{"className":118222,"code":125213,"language":118224,"meta":82,"style":82},"pkg update && pkg upgrade\n",[84,125215,125216],{"__ignoreMap":82},[87,125217,125218,125220,125222,125224,125226],{"class":89,"line":90},[87,125219,125117],{"class":205},[87,125221,118273],{"class":949},[87,125223,27137],{"class":97},[87,125225,125117],{"class":205},[87,125227,118259],{"class":949},[19,125229,125230],{},"安装python：",[77,125232,125234],{"className":118222,"code":125233,"language":118224,"meta":82,"style":82},"pkg install python\n",[84,125235,125236],{"__ignoreMap":82},[87,125237,125238,125240,125242],{"class":89,"line":90},[87,125239,125117],{"class":205},[87,125241,24781],{"class":949},[87,125243,125244],{"class":949}," python\n",[19,125246,125247,27420],{},[57,125248,125249],{},"通过Termux访问设备存储",[19,125251,125252],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[77,125254,125256],{"className":118222,"code":125255,"language":118224,"meta":82,"style":82},"termux-setup-storage\n",[84,125257,125258],{"__ignoreMap":82},[87,125259,125260],{"class":89,"line":90},[87,125261,125255],{"class":205},[1055,125263,125264],{},[29,125265,125266,27420,125269],{},[57,125267,125268],{},"进入HTML文件所在的目录",[1055,125270,125271],{},[29,125272,125273,125274,125276],{},"使用",[84,125275,102202],{},"命令进入HTML文件所在的目录：",[77,125278,125280],{"className":118222,"code":125279,"language":118224,"meta":82,"style":82},"cd ~\u002Fyour_html_folder\n",[84,125281,125282],{"__ignoreMap":82},[87,125283,125284,125286],{"class":89,"line":90},[87,125285,102202],{"class":104},[87,125287,125288],{"class":949}," ~\u002Fyour_html_folder\n",[1055,125290,125291],{"start":101},[29,125292,125293,27420,125296,125301,125318],{},[57,125294,125295],{},"启动Python HTTP服务器",[1055,125297,125298],{},[29,125299,125300],{},"运行以下命令启动一个简单的HTTP服务器：",[77,125302,125304],{"className":118222,"code":125303,"language":118224,"meta":82,"style":82},"python -m http.server 8000\n",[84,125305,125306],{"__ignoreMap":82},[87,125307,125308,125310,125312,125315],{"class":89,"line":90},[87,125309,31327],{"class":205},[87,125311,101808],{"class":104},[87,125313,125314],{"class":949}," http.server",[87,125316,125317],{"class":104}," 8000\n",[1055,125319,125320],{"start":120},[29,125321,125322,125323,125326],{},"这会在端口",[84,125324,125325],{},"8000","上启动一个Web服务器。",[26,125328,125329],{},[29,125330,125331],{},"启动服务器后，Termux会显示日志信息，例如：",[77,125333,125335],{"className":121742,"code":125334,"language":121744,"meta":121745,"style":82},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[84,125336,125337],{"__ignoreMap":82},[87,125338,125339],{"class":89,"line":90},[87,125340,125334],{},[26,125342,125343],{},[29,125344,125345],{},"这表示服务器已成功启动。",[19,125347,125348],{},[57,125349,125350],{},"在浏览器中访问HTML文件",[1055,125352,125353],{},[29,125354,125355,27420,125358,125363],{},[57,125356,125357],{},"在同一设备上访问",[1055,125359,125360],{},[29,125361,125362],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[77,125364,125367],{"className":125365,"code":125366,"language":72592,"meta":82,"style":82},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[84,125368,125369],{"__ignoreMap":82},[87,125370,125371,125374],{"class":89,"line":90},[87,125372,125373],{"class":97},"http:",[87,125375,125376],{"class":199},"\u002F\u002Flocalhost:8000\n",[26,125378,125379],{},[29,125380,125381,125382,125385],{},"如果HTML文件中有",[84,125383,125384],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125387,125389],{"id":125388},"_76-linux重点知识","7.6 Linux重点知识",[44,125391,125393],{"id":125392},"_761-关于点的说明","7.6.1 关于点的说明",[19,125395,125396],{},[39,125397],{"alt":82,"src":125398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,125400,125401],{},"一点本目录，两点上目录",[44,125403,125405],{"id":125404},"_762-目录","7.6.2 目录",[49,125407,125409],{"id":125408},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,125411,125412],{},[57,125413,125414],{},"\u002Fboot:",[19,125416,125417],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,125419,125420],{},[57,125421,125422],{},"\u002Fetc:",[19,125424,125425],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,125427,125428],{},[57,125429,125430],{},"\u002Flib：",[19,125432,125433],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,125435,125436],{},[57,125437,125438],{},"\u002Fsys:",[19,125440,125441],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[49,125443,125445],{"id":125444},"_7622-指令集合","7.6.2.2 指令集合",[19,125447,125448],{},[57,125449,125450],{},"\u002Fbin:",[19,125452,125453],{},"为二进制文件的缩写，存放最经常使用的命令",[19,125455,125456],{},[57,125457,125458],{},"\u002Fsbin:",[19,125460,125461],{},"只有系统管理员才能使用的程序和指令",[49,125463,125465],{"id":125464},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,125467,125468],{},[57,125469,125470],{},"\u002Fdev:",[19,125472,125473],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,125475,125476],{},[57,125477,125478],{},"\u002Fmedia:",[19,125480,125481],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,125483,125484],{},[57,125485,125486],{},"\u002Fmnt:",[19,125488,125489],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[49,125491,125493],{"id":125492},"_7624-临时文件","7.6.2.4 临时文件",[19,125495,125496],{},[57,125497,125498],{},"\u002Frun:",[19,125500,125501],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,125503,125504],{},[57,125505,125506],{},"\u002Flost+found:",[19,125508,125509],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,125511,125512],{},[57,125513,125514],{},"\u002Ftmp:",[19,125516,125517],{},"这个目录是用来存放一些临时文件的",[49,125519,125521],{"id":125520},"_7625-账户","7.6.2.5 账户",[19,125523,125524],{},[57,125525,125526],{},"\u002Froot：",[19,125528,125529],{},"系统管理员的用户主目录",[19,125531,125532,27420],{},[57,125533,125534],{},"\u002Fhome",[19,125536,125537],{},"用户的主目录，以用户的账号命名的",[19,125539,125540,27420],{},[57,125541,125542],{},"\u002Fusr",[19,125544,125545],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,125547,125548],{},[57,125549,125550],{},"\u002Fusr\u002Fbin：",[19,125552,125553],{},"系统用户使用的应用程序与指令",[19,125555,125556],{},[57,125557,125558],{},"\u002Fusr\u002Fsbin：",[19,125560,125561],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,125563,125564],{},[57,125565,125566],{},"\u002Fusr\u002Fsrc：",[19,125568,125569],{},"内核源代码默认的放置目录",[49,125571,125573],{"id":125572},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,125575,125576],{},[57,125577,125578],{},"\u002Fvar：",[19,125580,125581],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,125583,125584],{},[57,125585,125586],{},"\u002Fproc:",[19,125588,125589,125590,125593],{},"管理 ",[57,125591,125592],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[49,125595,125597],{"id":125596},"_7627-扩展用的","7.6.2.7 扩展用的",[19,125599,125600],{},[57,125601,125602],{},"\u002Fopt:",[19,125604,125605],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,125607,125608],{},[57,125609,125610],{},"\u002Fsrv:",[19,125612,125613],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[44,125615,125617],{"id":125616},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,125619,125620],{},[39,125621],{"alt":82,"src":125622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,125624,125625],{},"windows-->linux:",[19,125627,125628],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,125630,125631],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,125633,125634],{},"linux传输文件到windows",[19,125636,125637],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[44,125639,125641],{"id":125640},"_764-易忘知识","7.6.4 易忘知识",[19,125643,125644],{},"操作系统内核查看",[77,125646,125647],{"className":118222,"code":122216,"language":118224,"meta":82,"style":82},[84,125648,125649],{"__ignoreMap":82},[87,125650,125651,125653],{"class":89,"line":90},[87,125652,71136],{"class":205},[87,125654,122225],{"class":104},[19,125656,125657],{},[39,125658],{"alt":82,"src":125659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,125661,125662],{},[39,125663],{"alt":82,"src":125664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[77,125666,125668],{"className":118222,"code":125667,"language":118224,"meta":82,"style":82},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[84,125669,125670,125682],{"__ignoreMap":82},[87,125671,125672,125674,125677,125680],{"class":89,"line":90},[87,125673,122433],{"class":205},[87,125675,125676],{"class":949}," mvtest",[87,125678,125679],{"class":949}," mvtest2",[87,125681,3629],{"class":97},[87,125683,125684],{"class":89,"line":101},[87,125685,125686],{"class":205},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,125688,125689],{},[39,125690],{"alt":82,"src":125691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,125693,125694],{},[39,125695],{"alt":82,"src":125696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,125698,125699,125700,125703],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[84,125701,125702],{},"du -a"," 可以快速查看磁盘使用细节。",[44,125705,125707],{"id":125706},"_765-vim","7.6.5 Vim",[19,125709,125710],{},[39,125711],{"alt":82,"src":125712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,125714,125715],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,125717,125718],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,125720,125721],{},[57,125722,125723],{},"1.命令模式：",[19,125725,125726],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,125728,125729],{},"x 删除当前光标所在处的字符",[19,125731,125732],{},"：切换到底线命令模式，以在最底一行输入命令",[19,125734,125735],{},"a 进行插入模式，在光标下一个位置输入文本",[19,125737,125738],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,125740,125741],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,125743,125744],{},"dd 剪切当前行",[19,125746,125747],{},"yy 复制当前行",[19,125749,125750],{},"p 粘贴剪贴板内容到光标下方",[19,125752,125753],{},"P 粘贴剪贴板内容到光标上方",[19,125755,125756],{},"u 撤销上一次操作",[19,125758,125759],{},"ctrl+r 重做上一次操作",[19,125761,125762,125764],{},[1887,125763],{}," 保存文件",[19,125766,125767,125769],{},[1738,125768],{}," 退出Vim编辑器",[19,125771,125772,125774],{},[1738,125773],{},"! 强制退出Vim编辑器，不保存修改",[19,125776,125777],{},[57,125778,125779],{},"2.输入模式：",[19,125781,125782],{},[39,125783],{"alt":82,"src":125784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,125786,125787],{},[57,125788,125789],{},"3.底线命令模式：",[19,125791,125792],{},[39,125793],{"alt":82,"src":125794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,125796,125797],{},"按下esc可以退出底线命令模式",[44,125799,125801],{"id":125800},"_766-apt","7.6.6 apt",[19,125803,125804],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[44,125806,125808],{"id":125807},"_767-home与root的区别","7.6.7 home与root的区别",[19,125810,125811],{},[39,125812],{"alt":82,"src":125813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,125815,125816],{},[39,125817],{"alt":82,"src":125818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,125820,125821],{},[39,125822],{"alt":82,"src":125823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,125825,125826],{},[39,125827],{"alt":82,"src":125828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[44,125830,125832],{"id":125831},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,125834,125835],{},[1334,125836,125837],{"href":125837,"rel":125838},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24812],[1055,125840,125841,125844],{},[29,125842,125843],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[29,125845,125846],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125848,125849],{},[39,125850],{"alt":82,"src":125851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125853,125854],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125856,125857],{},[39,125858],{"alt":82,"src":125859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[77,125861,125863],{"className":121742,"code":125862,"language":121744,"meta":121745,"style":82},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[84,125864,125865,125870],{"__ignoreMap":82},[87,125866,125867],{"class":89,"line":90},[87,125868,125869],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[87,125871,125872],{"class":89,"line":101},[87,125873,125874],{},".\u002Fpycharm.sh\n",[19,125876,125877],{},"3️⃣创建.desktop文件",[19,125879,125880],{},[57,125881,125882],{},"原理：",[26,125884,125885,125895],{},[29,125886,125887,125888,125894],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[57,125889,125890,125893],{},[84,125891,125892],{},".desktop"," 文件"," 来识别应用。",[29,125896,125897,125899,125900],{},[84,125898,125892],{}," 文件相当于一个“应用注册表”，告诉系统：",[26,125901,125902,125905,125908,125911,125914],{},[29,125903,125904],{},"应用名字（Name）",[29,125906,125907],{},"图标（Icon）",[29,125909,125910],{},"执行命令（Exec）",[29,125912,125913],{},"分类（Categories）",[29,125915,125916],{},"是否需要终端（Terminal）",[77,125918,125920],{"className":121742,"code":125919,"language":121744,"meta":121745,"style":82},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[84,125921,125922,125927],{"__ignoreMap":82},[87,125923,125924],{"class":89,"line":90},[87,125925,125926],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[87,125928,125929],{"class":89,"line":101},[87,125930,125931],{},"nano pycharm.desktop\n",[19,125933,125934],{},"nano是一个命令行下的编辑器，也可以使用vim",[77,125936,125938],{"className":121742,"code":125937,"language":121744,"meta":121745,"style":82},"[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",[84,125939,125940,125945,125950,125955,125960,125965,125970,125975,125980,125985],{"__ignoreMap":82},[87,125941,125942],{"class":89,"line":90},[87,125943,125944],{},"[Desktop Entry]\n",[87,125946,125947],{"class":89,"line":101},[87,125948,125949],{},"Version=1.0\n",[87,125951,125952],{"class":89,"line":120},[87,125953,125954],{},"Type=Application\n",[87,125956,125957],{"class":89,"line":222},[87,125958,125959],{},"Name=PyCharm\n",[87,125961,125962],{"class":89,"line":234},[87,125963,125964],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[87,125966,125967],{"class":89,"line":256},[87,125968,125969],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[87,125971,125972],{"class":89,"line":269},[87,125973,125974],{},"Comment=JetBrains PyCharm IDE\n",[87,125976,125977],{"class":89,"line":463},[87,125978,125979],{},"Categories=Development;IDE;\n",[87,125981,125982],{"class":89,"line":469},[87,125983,125984],{},"Terminal=false\n",[87,125986,125987],{"class":89,"line":2287},[87,125988,125989],{},"StartupWMClass=jetbrains-pycharm\n",[26,125991,125992,125998,126004,126010],{},[29,125993,125994,125997],{},[84,125995,125996],{},"Exec"," → 点击图标时执行的命令",[29,125999,126000,126003],{},[84,126001,126002],{},"Icon"," → 显示在菜单和桌面上的图标",[29,126005,126006,126009],{},[84,126007,126008],{},"Terminal=false"," → 不打开终端",[29,126011,126012,126015],{},[84,126013,126014],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126017,126018,126019],"blockquote",{},[19,126020,126021,126022,126024,126025],{},"可以理解成 ",[84,126023,125892],{}," 文件是 Linux 的 ",[57,126026,126027],{},"快捷方式配置文件",[19,126029,126030],{},"4️⃣设置可执行权限",[77,126032,126034],{"className":121742,"code":126033,"language":121744,"meta":121745,"style":82},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[84,126035,126036],{"__ignoreMap":82},[87,126037,126038],{"class":89,"line":90},[87,126039,126033],{},[19,126041,126042],{},"5️⃣桌面图标启动的话如下：",[77,126044,126046],{"className":121742,"code":126045,"language":121744,"meta":121745,"style":82},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[84,126047,126048,126053],{"__ignoreMap":82},[87,126049,126050],{"class":89,"line":90},[87,126051,126052],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[87,126054,126055],{"class":89,"line":101},[87,126056,126057],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[1055,126059,126060],{"start":120},[29,126061,126062],{},"下载Appimage文件实现软件的安装",[19,126064,126065],{},"1️⃣先下载appimage",[19,126067,126068],{},[1334,126069,126070],{"href":126070,"rel":126071},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24812],[19,126073,126074],{},[39,126075],{"alt":82,"src":126076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126078,126079],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126081,126082],{},[39,126083],{"alt":82,"src":126084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126086,126087],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126089,126090],{},[39,126091],{"alt":82,"src":126092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126094,126095],{},[39,126096],{"alt":82,"src":126097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126099,126100,126101,126104],{},"3️⃣给他们放在",[84,126102,126103],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126106,126107],{},"4️⃣给软件执行权限",[77,126109,126111],{"className":121742,"code":126110,"language":121744,"meta":121745,"style":82},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[84,126112,126113,126118],{"__ignoreMap":82},[87,126114,126115],{"class":89,"line":90},[87,126116,126117],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[87,126119,126120],{"class":89,"line":101},[87,126121,126122],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126124,126125],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[77,126127,126129],{"className":118222,"code":126128,"language":118224,"meta":82,"style":82},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[84,126130,126131,126138,126145,126151],{"__ignoreMap":82},[87,126132,126133,126135],{"class":89,"line":90},[87,126134,102202],{"class":104},[87,126136,126137],{"class":949}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[87,126139,126140,126142],{"class":89,"line":101},[87,126141,102209],{"class":205},[87,126143,126144],{"class":949}," .\u002Fqqmusic.desktop\n",[87,126146,126147,126149],{"class":89,"line":120},[87,126148,125193],{"class":205},[87,126150,126144],{"class":949},[87,126152,126153,126155,126157,126159],{"class":89,"line":222},[87,126154,25524],{"class":205},[87,126156,25527],{"class":949},[87,126158,124059],{"class":949},[87,126160,126144],{"class":949},[19,126162,126163,126165],{},[84,126164,102209],{},"：一个 Linux 命令，主要功能是：",[26,126167,126168,126171],{},[29,126169,126170],{},"如果文件不存在，就创建一个新的空文件",[29,126172,126173],{},"如果文件已存在，就更新该文件的最后修改时间",[77,126175,126177],{"className":121742,"code":126176,"language":121744,"meta":121745,"style":82},"[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",[84,126178,126179,126183,126188,126193,126198,126202,126207],{"__ignoreMap":82},[87,126180,126181],{"class":89,"line":90},[87,126182,125944],{},[87,126184,126185],{"class":89,"line":101},[87,126186,126187],{},"Name=QQ音乐\n",[87,126189,126190],{"class":89,"line":120},[87,126191,126192],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[87,126194,126195],{"class":89,"line":222},[87,126196,126197],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[87,126199,126200],{"class":89,"line":234},[87,126201,125954],{},[87,126203,126204],{"class":89,"line":256},[87,126205,126206],{},"Categories=Audio;Music;Player;\n",[87,126208,126209],{"class":89,"line":269},[87,126210,126211],{},"Comment=QQ Music Client for Linux\n",[19,126213,126214],{},"将文件复制进去",[19,126216,126217],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,126219,126220],{},[39,126221],{"alt":82,"src":126222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,126224,126225],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,126227,126228],{},[39,126229],{"alt":82,"src":126230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,126232,126233,126234,126237,126238,126241],{},"如果你用的不是KDE，那么也可以直接修改",[84,126235,126236],{},"qqmuic.desktop","：在exec的末尾加上",[84,126239,126240],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[77,126243,126245],{"className":121742,"code":126244,"language":121744,"meta":121745,"style":82},"[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",[84,126246,126247,126251,126255,126260,126264,126268,126272],{"__ignoreMap":82},[87,126248,126249],{"class":89,"line":90},[87,126250,125944],{},[87,126252,126253],{"class":89,"line":101},[87,126254,126187],{},[87,126256,126257],{"class":89,"line":120},[87,126258,126259],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[87,126261,126262],{"class":89,"line":222},[87,126263,126197],{},[87,126265,126266],{"class":89,"line":234},[87,126267,125954],{},[87,126269,126270],{"class":89,"line":256},[87,126271,126206],{},[87,126273,126274],{"class":89,"line":269},[87,126275,126211],{},[19,126277,126278],{},[39,126279],{"alt":82,"src":126280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,126282,126283],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[77,126285,126287],{"className":121742,"code":126286,"language":121744,"meta":121745,"style":82},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[84,126288,126289],{"__ignoreMap":82},[87,126290,126291],{"class":89,"line":90},[87,126292,126286],{},[1055,126294,126295],{"start":222},[29,126296,126297],{},"去Flathub上安装软件",[19,126299,126300],{},[1334,126301,126302],{"href":126302,"rel":126303},"https:\u002F\u002Fflathub.org\u002F",[24812],[19,126305,126306],{},"1️⃣去上面的官网搜索软件+下载软件",[19,126308,126309],{},[39,126310],{"alt":82,"src":126311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[77,126313,126315],{"className":121742,"code":126314,"language":121744,"meta":121745,"style":82},"flatpak install flathub com.obsproject.Studio\n",[84,126316,126317],{"__ignoreMap":82},[87,126318,126319],{"class":89,"line":90},[87,126320,126314],{},[19,126322,126323],{},[39,126324],{"alt":82,"src":126325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,126327,126328],{},"2️⃣运行软件",[19,126330,126331],{},"a.官方方式：",[19,126333,126334],{},[39,126335],{"alt":82,"src":126336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[77,126338,126339],{"className":121742,"code":126314,"language":121744,"meta":121745,"style":82},[84,126340,126341],{"__ignoreMap":82},[87,126342,126343],{"class":89,"line":90},[87,126344,126314],{},[19,126346,126347],{},"b.当普通软件运行：",[19,126349,126350],{},[39,126351],{"alt":82,"src":126352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,126354,126355],{},[39,126356],{"alt":82,"src":126357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1006,126359,126360],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":82,"searchDepth":101,"depth":101,"links":126362},[126363,126364,126369,126370,126376,126377],{"id":123095,"depth":101,"text":123096},{"id":123437,"depth":101,"text":123438,"children":126365},[126366,126367,126368],{"id":123441,"depth":120,"text":123442},{"id":123508,"depth":120,"text":123509},{"id":123769,"depth":120,"text":123770},{"id":123922,"depth":101,"text":123923},{"id":124160,"depth":101,"text":124161,"children":126371},[126372,126373,126374,126375],{"id":124212,"depth":120,"text":124213},{"id":124498,"depth":120,"text":124499},{"id":124769,"depth":120,"text":124770},{"id":125028,"depth":120,"text":125029},{"id":125087,"depth":101,"text":125088},{"id":125388,"depth":101,"text":125389,"children":126378},[126379,126380,126381,126382,126383,126384,126385,126386],{"id":125392,"depth":120,"text":125393},{"id":125404,"depth":120,"text":125405},{"id":125616,"depth":120,"text":125617},{"id":125640,"depth":120,"text":125641},{"id":125706,"depth":120,"text":125707},{"id":125800,"depth":120,"text":125801},{"id":125807,"depth":120,"text":125808},{"id":125831,"depth":120,"text":125832},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123087,"description":1026},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126393,"title":126394,"body":126395,"description":1026,"extension":1027,"meta":126399,"navigation":1029,"path":126400,"seo":126401,"stem":126402,"__hash__":126403},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126396,"toc":126397},[],{"title":82,"searchDepth":101,"depth":101,"links":126398},[],{"category":31210},"\u002Fwiki\u002F2025-01-27-linux",{"title":126394,"description":1026},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126405,"title":126406,"body":126407,"description":126411,"extension":1027,"meta":126802,"navigation":1029,"path":126803,"seo":126804,"stem":126805,"__hash__":126806},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126408,"toc":126800},[126409,126412,126416,126433,126436,126489,126493,126495,126535,126544,126548,126551,126792,126797],[19,126410,126411],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126413,126415],{"id":126414},"_1ubuntu环境配置","1.Ubuntu环境配置",[1055,126417,126418,126421,126424,126427,126430],{},[29,126419,126420],{},"ubuntu环境换源",[29,126422,126423],{},"安装cuda",[29,126425,126426],{},"安装miniconda",[29,126428,126429],{},"安装pytorch",[29,126431,126432],{},"安装genesis",[19,126434,126435],{},"参考链接：",[77,126437,126439],{"className":24769,"code":126438,"language":24771,"meta":82,"style":82},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[84,126440,126441],{"__ignoreMap":82},[87,126442,126443,126446,126449,126452,126454,126457,126460,126462,126465,126468,126470,126473,126476,126478,126481,126484,126486],{"class":89,"line":90},[87,126444,126445],{"class":205},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[87,126447,126448],{"class":949},"=blogdetail",[87,126450,126451],{"class":97},"&sharetype",[87,126453,946],{"class":171},[87,126455,126456],{"class":949},"blogdetail",[87,126458,126459],{"class":97},"&sharerId",[87,126461,946],{"class":171},[87,126463,126464],{"class":949},"144728092",[87,126466,126467],{"class":97},"&sharerefer",[87,126469,946],{"class":171},[87,126471,126472],{"class":949},"PC",[87,126474,126475],{"class":97},"&sharesource",[87,126477,946],{"class":171},[87,126479,126480],{"class":949},"qq_69379513",[87,126482,126483],{"class":97},"&sharefrom",[87,126485,946],{"class":171},[87,126487,126488],{"class":949},"from_link\n",[10,126490,126492],{"id":126491},"_2genesis-报错issue","2.Genesis 报错issue",[19,126494,126435],{},[77,126496,126497],{"className":24769,"code":126438,"language":24771,"meta":82,"style":82},[84,126498,126499],{"__ignoreMap":82},[87,126500,126501,126503,126505,126507,126509,126511,126513,126515,126517,126519,126521,126523,126525,126527,126529,126531,126533],{"class":89,"line":90},[87,126502,126445],{"class":205},[87,126504,126448],{"class":949},[87,126506,126451],{"class":97},[87,126508,946],{"class":171},[87,126510,126456],{"class":949},[87,126512,126459],{"class":97},[87,126514,946],{"class":171},[87,126516,126464],{"class":949},[87,126518,126467],{"class":97},[87,126520,946],{"class":171},[87,126522,126472],{"class":949},[87,126524,126475],{"class":97},[87,126526,946],{"class":171},[87,126528,126480],{"class":949},[87,126530,126483],{"class":97},[87,126532,946],{"class":171},[87,126534,126488],{"class":949},[77,126536,126538],{"className":24769,"code":126537,"language":24771,"meta":82,"style":82},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[84,126539,126540],{"__ignoreMap":82},[87,126541,126542],{"class":89,"line":90},[87,126543,126537],{"class":205},[10,126545,126547],{"id":126546},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,126549,126550],{},"hello_robot.py",[77,126552,126554],{"className":31325,"code":126553,"language":31327,"meta":82,"style":82},"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",[84,126555,126556,126562,126577,126581,126593,126605,126609,126622,126626,126645,126655,126665,126679,126683,126687,126692,126696,126706,126713,126727,126734,126744,126749,126753,126771,126776,126780,126787],{"__ignoreMap":82},[87,126557,126558,126560],{"class":89,"line":90},[87,126559,31339],{"class":171},[87,126561,46252],{"class":97},[87,126563,126564,126567,126570,126572,126574],{"class":89,"line":101},[87,126565,126566],{"class":97},"os.environ[",[87,126568,126569],{"class":949},"'PYOPENGL_PLATFORM'",[87,126571,5396],{"class":97},[87,126573,946],{"class":171},[87,126575,126576],{"class":949}," 'glx'\n",[87,126578,126579],{"class":89,"line":120},[87,126580,3355],{"emptyLinePlaceholder":1029},[87,126582,126583,126585,126588,126590],{"class":89,"line":222},[87,126584,31339],{"class":171},[87,126586,126587],{"class":97}," genesis ",[87,126589,32330],{"class":171},[87,126591,126592],{"class":97}," gs\n",[87,126594,126595,126597,126600,126602],{"class":89,"line":234},[87,126596,31684],{"class":171},[87,126598,126599],{"class":97}," pynput ",[87,126601,31339],{"class":171},[87,126603,126604],{"class":97}," keyboard\n",[87,126606,126607],{"class":89,"line":256},[87,126608,3355],{"emptyLinePlaceholder":1029},[87,126610,126611,126614,126617,126619],{"class":89,"line":269},[87,126612,126613],{"class":97},"gs.init(",[87,126615,126616],{"class":492},"backend",[87,126618,946],{"class":171},[87,126620,126621],{"class":97},"gs.gpu)\n",[87,126623,126624],{"class":89,"line":463},[87,126625,3355],{"emptyLinePlaceholder":1029},[87,126627,126628,126631,126633,126636,126639,126641,126643],{"class":89,"line":469},[87,126629,126630],{"class":97},"scene ",[87,126632,946],{"class":171},[87,126634,126635],{"class":97}," gs.Scene(",[87,126637,126638],{"class":492},"show_viewer",[87,126640,946],{"class":171},[87,126642,32423],{"class":104},[87,126644,1108],{"class":97},[87,126646,126647,126650,126652],{"class":89,"line":2287},[87,126648,126649],{"class":97},"plane ",[87,126651,946],{"class":171},[87,126653,126654],{"class":97}," scene.add_entity(gs.morphs.Plane())\n",[87,126656,126657,126660,126662],{"class":89,"line":2568},[87,126658,126659],{"class":97},"franka ",[87,126661,946],{"class":171},[87,126663,126664],{"class":97}," scene.add_entity(\n",[87,126666,126667,126670,126672,126674,126677],{"class":89,"line":2573},[87,126668,126669],{"class":97},"    gs.morphs.MJCF(",[87,126671,46301],{"class":492},[87,126673,946],{"class":171},[87,126675,126676],{"class":949},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[87,126678,38994],{"class":97},[87,126680,126681],{"class":89,"line":2579},[87,126682,1108],{"class":97},[87,126684,126685],{"class":89,"line":2584},[87,126686,3355],{"emptyLinePlaceholder":1029},[87,126688,126689],{"class":89,"line":2598},[87,126690,126691],{"class":97},"scene.build()\n",[87,126693,126694],{"class":89,"line":2603},[87,126695,3355],{"emptyLinePlaceholder":1029},[87,126697,126698,126700,126703],{"class":89,"line":2609},[87,126699,32894],{"class":171},[87,126701,126702],{"class":205}," on_press",[87,126704,126705],{"class":97},"(key):\n",[87,126707,126708,126711],{"class":89,"line":2630},[87,126709,126710],{"class":171},"    try",[87,126712,4693],{"class":97},[87,126714,126715,126717,126720,126722,126725],{"class":89,"line":2635},[87,126716,3452],{"class":171},[87,126718,126719],{"class":97}," key.char ",[87,126721,3903],{"class":171},[87,126723,126724],{"class":949}," 'q'",[87,126726,4693],{"class":97},[87,126728,126729,126731],{"class":89,"line":2649},[87,126730,16681],{"class":171},[87,126732,126733],{"class":104}," False\n",[87,126735,126736,126739,126742],{"class":89,"line":2654},[87,126737,126738],{"class":171},"    except",[87,126740,126741],{"class":104}," AttributeError",[87,126743,4693],{"class":97},[87,126745,126746],{"class":89,"line":2683},[87,126747,126748],{"class":171},"        pass\n",[87,126750,126751],{"class":89,"line":2688},[87,126752,3355],{"emptyLinePlaceholder":1029},[87,126754,126755,126758,126760,126763,126766,126768],{"class":89,"line":2705},[87,126756,126757],{"class":97},"listener ",[87,126759,946],{"class":171},[87,126761,126762],{"class":97}," keyboard.Listener(",[87,126764,126765],{"class":492},"on_press",[87,126767,946],{"class":171},[87,126769,126770],{"class":97},"on_press)\n",[87,126772,126773],{"class":89,"line":2710},[87,126774,126775],{"class":97},"listener.start()\n",[87,126777,126778],{"class":89,"line":2715},[87,126779,3355],{"emptyLinePlaceholder":1029},[87,126781,126782,126784],{"class":89,"line":2720},[87,126783,109589],{"class":171},[87,126785,126786],{"class":97}," listener.running:\n",[87,126788,126789],{"class":89,"line":2734},[87,126790,126791],{"class":97},"    scene.step()\n",[19,126793,126794],{},[39,126795],{"alt":82,"src":126796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1006,126798,126799],{},"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":82,"searchDepth":101,"depth":101,"links":126801},[],{"category":24325},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126406,"description":126411},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126808,"title":126809,"body":126810,"description":1026,"extension":1027,"meta":126825,"navigation":1029,"path":126826,"seo":126827,"stem":126828,"__hash__":126829},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126811,"toc":126822},[126812,126815,126819],[10,126813,126809],{"id":126814},"_1-基础知识",[14,126816,126818],{"id":126817},"_11-js的组成","1.1 js的组成",[19,126820,126821],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":82,"searchDepth":101,"depth":101,"links":126823},[126824],{"id":126817,"depth":101,"text":126818},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126809,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126831,"title":126832,"body":126833,"description":1026,"extension":1027,"meta":126972,"navigation":1029,"path":126973,"seo":126974,"stem":126975,"__hash__":126976},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126834,"toc":126960},[126835,126838,126842,126845,126849,126859,126863,126866,126869,126872,126876,126883,126889,126893,126899,126910,126914,126917,126921,126924,126928,126931,126935,126938,126942,126945,126948,126951,126954,126957],[10,126836,126832],{"id":126837},"_2-vscode必备内容",[14,126839,126841],{"id":126840},"_21-标签分类","2.1 标签分类",[19,126843,126844],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126846,126848],{"id":126847},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,126850,126851,126852,126854,126855,126858],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[84,126853,1322],{}," 然后按 ",[84,126856,126857],{},"Tab","，快速自动生成基本结构。",[14,126860,126862],{"id":126861},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,126864,126865],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,126867,126868],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126870,126871],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126873,126875],{"id":126874},"_24-视图缩放","2.4 视图缩放",[19,126877,126878,126879,126882],{},"缩放视图 ",[84,126880,126881],{},"ctrl+"," 可实现代码增大。",[19,126884,126885,126888],{},[84,126886,126887],{},"ctrl-"," 可实现代码减小。",[14,126890,126892],{"id":126891},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126894,126895,126896,29332],{},"VSCode 新建文件快捷键为 ",[84,126897,126898],{},"ctrl+N",[19,126900,126901,126902,126905,126906,126909],{},"保存快捷键为 ",[84,126903,126904],{},"ctrl+S","，将文本保存为 ",[84,126907,126908],{},".html"," 文件。",[14,126911,126913],{"id":126912},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126915,126916],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126918,126920],{"id":126919},"_27-vscode-icons","2.7 vscode-icons",[19,126922,126923],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126925,126927],{"id":126926},"_28-easy-less","2.8 Easy LESS",[19,126929,126930],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126932,126934],{"id":126933},"_29-会了吧插件","2.9 会了吧插件",[19,126936,126937],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126939,126941],{"id":126940},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126943,126944],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126946,126947],{},"②选定多个相同的单词:ctrl+D",[19,126949,126950],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126952,126953],{},"④全局替换某些单词:ctrl+h",[19,126955,126956],{},"⑤快速定位到某一行:ctrl+g",[19,126958,126959],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":82,"searchDepth":101,"depth":101,"links":126961},[126962,126963,126964,126965,126966,126967,126968,126969,126970,126971],{"id":126840,"depth":101,"text":126841},{"id":126847,"depth":101,"text":126848},{"id":126861,"depth":101,"text":126862},{"id":126874,"depth":101,"text":126875},{"id":126891,"depth":101,"text":126892},{"id":126912,"depth":101,"text":126913},{"id":126919,"depth":101,"text":126920},{"id":126926,"depth":101,"text":126927},{"id":126933,"depth":101,"text":126934},{"id":126940,"depth":101,"text":126941},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126832,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126978,"title":126979,"body":126980,"description":1026,"extension":1027,"meta":127139,"navigation":1029,"path":127140,"seo":127141,"stem":127142,"__hash__":127143},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126981,"toc":127131},[126982,126985,126989,126999,127005,127011,127015,127024,127028,127033,127036,127039,127043,127046,127056,127065,127074,127083,127093,127100,127105,127110,127123],[10,126983,126979],{"id":126984},"_3-html文本与容器标签",[14,126986,126988],{"id":126987},"_31-标题标签","3.1 标题标签",[19,126990,126991,126994,126995,126998],{},[84,126992,126993],{},"\u003Ch1>","我是一级标签",[84,126996,126997],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127000,127001,126994,127003],{},[84,127002,126993],{},[84,127004,126997],{},[19,127006,124261,127007,127010],{},[84,127008,127009],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127012,127014],{"id":127013},"_32-段落标签","3.2 段落标签",[19,127016,127017,127020,127021],{},[84,127018,127019],{},"\u003Cp>","....",[84,127022,127023],{},"\u003C\u002Fp>",[14,127025,127027],{"id":127026},"_33-换行标签","3.3 换行标签",[19,127029,127030],{},[84,127031,127032],{},"\u003Cbr \u002F>",[19,127034,127035],{},"具有强制换行的作用",[19,127037,127038],{},"单标签",[14,127040,127042],{"id":127041},"_34-文本格式化标签","3.4 文本格式化标签",[19,127044,127045],{},"提供粗体、斜体和下划线等效果",[19,127047,127048,127049,83465,127052,127055],{},"加粗：",[84,127050,127051],{},"\u003Cstrong>...\u003C\u002Fstrong>",[84,127053,127054],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127057,127058,127059,83465,127062,127055],{},"斜体：",[84,127060,127061],{},"\u003Cem>...\u003C\u002Fem>",[84,127063,127064],{},"\u003Ci>...\u003C\u002Fi>",[19,127066,127067,127068,83465,127071,127055],{},"删除线：",[84,127069,127070],{},"\u003Cdel>...\u003C\u002Fdel>",[84,127072,127073],{},"\u003Cs>...\u003C\u002Fs>",[19,127075,127076,127077,83465,127080,127055],{},"下划线：",[84,127078,127079],{},"\u003Cins>...\u003C\u002Fins>",[84,127081,127082],{},"\u003Cu>...\u003C\u002Fu>",[14,127084,127086,127087,19358,127090,103619],{"id":127085},"_35-div和span标签","3.5 ",[84,127088,127089],{},"\u003Cdiv>",[84,127091,127092],{},"\u003Cspan>",[19,127094,127095,101944,127097,127099],{},[84,127096,127089],{},[84,127098,127092],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127101,127102],{},[84,127103,127104],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127106,127107],{},[84,127108,127109],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127111,127112,127113,127115,127116,127118,127119,127122],{},"两者特点：①",[84,127114,127089],{}," 标签用来布局，但一行通常只放一个 ",[84,127117,127089],{},"。可以理解为一个大盒子，独占一行，在 ",[84,127120,127121],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127124,78177,127125,127127,127128,127130],{},[84,127126,127092],{}," 标签也可用于布局，一行可以放多个 ",[84,127129,127092],{},"，可理解为小盒子。",{"title":82,"searchDepth":101,"depth":101,"links":127132},[127133,127134,127135,127136,127137],{"id":126987,"depth":101,"text":126988},{"id":127013,"depth":101,"text":127014},{"id":127026,"depth":101,"text":127027},{"id":127041,"depth":101,"text":127042},{"id":127085,"depth":101,"text":127138},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126979,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127145,"title":127146,"body":127147,"description":1026,"extension":1027,"meta":127343,"navigation":1029,"path":127344,"seo":127345,"stem":127346,"__hash__":127347},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127148,"toc":127335},[127149,127152,127156,127159,127165,127172,127178,127184,127187,127190,127193,127196,127199,127202,127205,127209,127212,127215,127218,127224,127230,127236,127243,127247,127253,127259,127262,127265,127271,127277,127283,127286,127289,127293,127296,127306,127312,127316,127325,127329,127332],[10,127150,127146],{"id":127151},"_4-html图像与链接",[14,127153,127155],{"id":127154},"_41-图像标签","4.1 图像标签",[19,127157,127158],{},"（1）标签",[19,127160,127161,127164],{},[84,127162,127163],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,127166,127167,127168,127171],{},"src是",[84,127169,127170],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127173,127174,127175],{},"alt:文本，替换文本。图像不能显示的文字 ",[84,127176,127177],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,127179,127180,127181],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[84,127182,127183],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,127185,127186],{},"width:像素，设置图像的宽度",[19,127188,127189],{},"height:像素，设置图像的高度",[19,127191,127192],{},"border：像素，设置图像的边框粗细",[19,127194,127195],{},"（2）图像标签属性的注意点：",[19,127197,127198],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,127200,127201],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,127203,127204],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127206,127208],{"id":127207},"_42-路径注意要点","4.2 路径注意要点：",[19,127210,127211],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,127213,127214],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,127216,127217],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,127219,127220,127221],{},"①同一级路径：图像文件位于HTML文件同一级，如",[84,127222,127223],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,127225,127226,127227],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[84,127228,127229],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,127231,127232,127233],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[84,127234,127235],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,127237,127238,127239,1347],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[1334,127240,127241],{"href":127241,"rel":127242},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24812],[14,127244,127246],{"id":127245},"_43-超链接标签","4.3 超链接标签",[19,127248,127249,127252],{},[84,127250,127251],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,127254,127255,127256],{},"①语法格式：",[84,127257,127258],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127260,127261],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,127263,127264],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,127266,127267,127268],{},"③链接分类：外部链接：",[84,127269,127270],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,127272,127273,127274],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[84,127275,127276],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,127278,127279,127280],{},"空链接：如果当时没有确定链接目标时，",[84,127281,127282],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,127284,127285],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,127287,127288],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127290,127292],{"id":127291},"_44-锚点链接","4.4 锚点链接",[19,127294,127295],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,127297,127298,127299,127302,127303],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[84,127300,127301],{},"\u003Ca href=\"#two\">","第二级",[84,127304,127305],{},"\u003C\u002Fa>",[19,127307,127308,127309],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[84,127310,127311],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127313,127315],{"id":127314},"_45-注释标签","4.5 注释标签",[19,127317,127318,127321,127322],{},[84,127319,127320],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[84,127323,127324],{},"ctrl+\u002F",[14,127326,127328],{"id":127327},"_46-特殊字符","4.6 特殊字符",[19,127330,127331],{},"可以实现添加多个空格",[39,127333],{"style":41,"src":127334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":82,"searchDepth":101,"depth":101,"links":127336},[127337,127338,127339,127340,127341,127342],{"id":127154,"depth":101,"text":127155},{"id":127207,"depth":101,"text":127208},{"id":127245,"depth":101,"text":127246},{"id":127291,"depth":101,"text":127292},{"id":127314,"depth":101,"text":127315},{"id":127327,"depth":101,"text":127328},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127146,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127349,"title":127350,"body":127351,"description":1026,"extension":1027,"meta":127642,"navigation":1029,"path":127643,"seo":127644,"stem":127645,"__hash__":127646},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127352,"toc":127633},[127353,127356,127360,127363,127366,127369,127372,127375,127378,127381,127384,127387,127407,127413,127417,127420,127423,127426,127429,127432,127435,127439,127442,127445,127448,127451,127464,127469,127472,127475,127488,127491,127494,127497,127500,127503,127507,127510,127517,127520,127523,127526,127529,127532,127538,127541,127544,127550,127553,127556,127559,127565,127568,127571,127585,127592,127595,127598,127605,127614,127617,127620,127623,127627,127630],[10,127354,127350],{"id":127355},"_5-html表格列表与表单",[14,127357,127359],{"id":127358},"_51-表格标签","5.1 表格标签",[19,127361,127362],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,127364,127365],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,127367,127368],{},"②表格基本语法：",[39,127370],{"style":41,"src":127371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,127373,127374],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[39,127376],{"style":41,"src":127377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,127379,127380],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[39,127382],{"style":41,"src":127383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,127385,127386],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,127388,127389,127392,127393,127395,127396,127399,127400,127402,127403,127406],{},[84,127390,127391],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[84,127394,127391],{},"内部必须拥有",[84,127397,127398],{},"\u003Ctr>","标签，一般位于第一行，",[84,127401,127391],{},"比",[84,127404,127405],{},"\u003Cth>","范围广",[19,127408,127409,127412],{},[84,127410,127411],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127414,127416],{"id":127415},"_52-合并单元格","5.2 合并单元格",[19,127418,127419],{},"（1）合并单元格方式：",[19,127421,127422],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,127424,127425],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,127427,127428],{},"（2）目标单元格：",[19,127430,127431],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,127433,127434],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127436,127438],{"id":127437},"_53-列表标签","5.3 列表标签",[19,127440,127441],{},"（1）分类：无序列表、有序列表、自定义列表",[19,127443,127444],{},"①无序列表：",[39,127446],{"style":41,"src":127447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,127449,127450],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,127452,127453,127456,127457,127460,127461,127463],{},[84,127454,127455],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[84,127458,127459],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[84,127462,127455],{},"中输入其他标签或文字是不对的",[19,127465,127466,127468],{},[84,127467,127459],{},"之间相当于一个容器，可以容纳所有元素",[19,127470,127471],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,127473,127474],{},"在css中去除前边的小圆点采用如下代码:",[77,127476,127478],{"className":79,"code":127477,"language":81,"meta":82,"style":82},"list-style: none;\n",[84,127479,127480],{"__ignoreMap":82},[87,127481,127482,127485],{"class":89,"line":90},[87,127483,127484],{"class":93},"list-style",[87,127486,127487],{"class":97},": none;\n",[19,127489,127490],{},"②有序列表：",[39,127492],{"style":41,"src":127493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,127495,127496],{},"③自定义列表：",[39,127498],{"style":41,"src":127499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[39,127501],{"style":41,"src":127502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127504,127506],{"id":127505},"_54-表单标签","5.4 表单标签",[19,127508,127509],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,127511,127512,127513,127516],{},"（1）表单域：包含单元素的区域，",[84,127514,127515],{},"\u003Cform>","标签可以实现信息的收集和传递。",[39,127518],{"style":41,"src":127519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,127521,127522],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,127524,127525],{},"表单元素提交必须有name属性",[19,127527,127528],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,127530,127531],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,127533,78154,127534,127537],{},[84,127535,127536],{},"\u003Cinput>","输入表单元素",[39,127539],{"style":41,"src":127540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[39,127542],{"style":41,"src":127543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,127545,127546,127547],{},"单选按钮：",[84,127548,127549],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[39,127551],{"style":41,"src":127552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,127554,127555],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[39,127557],{"style":41,"src":127558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,127560,127561,127564],{},[57,127562,127563],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,127566,127567],{},"②select下拉表单元素：可以节约页面控件",[39,127569],{"style":41,"src":127570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,127572,127573,14745,127575,127578,127579,127581,127582,127584],{},[57,127574,1131],{},[84,127576,127577],{},"\u003Cselect>","中至少包含一对",[84,127580,103640],{},"；在",[84,127583,103640],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,127586,127587,127588,127591],{},"③",[84,127589,127590],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[39,127593],{"style":41,"src":127594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,127596,127597],{},"3行20列",[14,127599,127601,127602,103619],{"id":127600},"_55-lable标签","5.5 ",[84,127603,127604],{},"\u003Clable>",[19,127606,127607,127608,127610,127611,127613],{},"它不是表单标签，但常常与表单标签搭配使用，",[84,127609,127604],{},"标签用于绑定一个表单标签，当点击",[84,127612,127604],{},"标签内的文本",[19,127615,127616],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[39,127618],{"style":41,"src":127619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[39,127621],{"style":41,"src":127622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,127624,127626],{"id":127625},"_56-实例","5.6 实例",[39,127628],{"style":41,"src":127629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1006,127631,127632],{},"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":82,"searchDepth":101,"depth":101,"links":127634},[127635,127636,127637,127638,127639,127641],{"id":127358,"depth":101,"text":127359},{"id":127415,"depth":101,"text":127416},{"id":127437,"depth":101,"text":127438},{"id":127505,"depth":101,"text":127506},{"id":127600,"depth":101,"text":127640},"5.5 \u003Clable>标签",{"id":127625,"depth":101,"text":127626},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127350,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127648,"title":127649,"body":127650,"description":1026,"extension":1027,"meta":128199,"navigation":1029,"path":128200,"seo":128201,"stem":128202,"__hash__":128203},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127651,"toc":128174},[127652,127655,127659,127662,127665,127669,127672,127675,127678,127681,127684,127687,127690,127694,127697,127701,127704,127707,127710,127714,127717,127720,127723,127729,127732,127735,127738,127741,127744,127747,127750,127783,127787,127790,127793,127796,127800,127803,127806,127809,127812,127815,127819,127822,127825,127828,127832,127835,127839,127842,127846,127849,127854,127858,127861,127865,127868,127871,127874,127877,127904,127907,127911,127914,127917,127922,127925,127928,127932,127935,127940,127943,127946,127949,127953,127956,127959,127962,127966,127969,127972,127975,127979,127983,127986,128026,128029,128033,128040,128043,128047,128050,128096,128100,128103,128106,128109,128137,128141,128144,128171],[10,127653,127649],{"id":127654},"_6-css语法与文本样式",[14,127656,127658],{"id":127657},"_61-css语法规范","6.1 css语法规范",[19,127660,127661],{},"由两部分组成，选择器及一条或多条声明",[39,127663],{"style":41,"src":127664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,127666,127667],{},[57,127668,1131],{},[19,127670,127671],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,127673,127674],{},"②属性与属性值以“键值对”的形式出现",[19,127676,127677],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,127679,127680],{},"④属性和属性值之间用英文“;”分开",[39,127682],{"style":41,"src":127683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[39,127685],{"style":41,"src":127686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[39,127688],{"style":41,"src":127689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,127691,127693],{"id":127692},"_62-css选择器","6.2 css选择器",[19,127695,127696],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[44,127698,127700],{"id":127699},"_621-标签选择器","6.2.1 标签选择器",[19,127702,127703],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,127705,127706],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[39,127708],{"style":41,"src":127709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[44,127711,127713],{"id":127712},"_622-类选择器","6.2.2 类选择器",[19,127715,127716],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,127718,127719],{},"②样例",[39,127721],{"style":41,"src":127722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,127724,127725,127726,127728],{},"③ ",[57,127727,127563],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,127730,127731],{},"可以理解为给这个标签起了个名字，来表示；",[19,127733,127734],{},"长名称或词组可以使用横线来为选择器命名；",[19,127736,127737],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,127739,127740],{},"命名要有意义；",[39,127742],{"style":41,"src":127743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,127745,127746],{},"类选择器也可以指定特殊的元素p.center{}",[19,127748,127749],{},"p.center和.center都对",[77,127751,127753],{"className":79,"code":127752,"language":81,"meta":82,"style":82},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[84,127754,127755,127760,127769,127779],{"__ignoreMap":82},[87,127756,127757],{"class":89,"line":90},[87,127758,127759],{"class":199},"\u002F* 类选择器指定特殊元素 *\u002F\n",[87,127761,127762,127764,127767],{"class":89,"line":101},[87,127763,19],{"class":93},[87,127765,127766],{"class":205},".center",[87,127768,98],{"class":97},[87,127770,127771,127773,127775,127777],{"class":89,"line":120},[87,127772,71457],{"class":104},[87,127774,108],{"class":97},[87,127776,318],{"class":104},[87,127778,117],{"class":97},[87,127780,127781],{"class":89,"line":222},[87,127782,123],{"class":97},[44,127784,127786],{"id":127785},"_623-多类名使用","6.2.3 多类名使用",[19,127788,127789],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[39,127791],{"style":41,"src":127792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,127794,127795],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[44,127797,127799],{"id":127798},"_624-id选择器","6.2.4 id选择器",[19,127801,127802],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,127804,127805],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[39,127807],{"style":41,"src":127808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,127810,127811],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,127813,127814],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[44,127816,127818],{"id":127817},"_625-通配符选择器","6.2.5 通配符选择器",[19,127820,127821],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,127823,127824],{},"* {",[19,127826,127827],{},"color=\"red\"}",[44,127829,127831],{"id":127830},"_626-总结","6.2.6 总结",[39,127833],{"style":41,"src":127834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127836,127838],{"id":127837},"_63-css字体属性","6.3 css字体属性",[19,127840,127841],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[44,127843,127845],{"id":127844},"_631-字体系列","6.3.1 字体系列",[19,127847,127848],{},"font-family: '宋体';",[19,127850,127851,127853],{},[57,127852,1131],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[44,127855,127857],{"id":127856},"_632-字体大小","6.3.2 字体大小",[19,127859,127860],{},"font-size: 20px",[19,127862,127863,27420],{},[57,127864,127563],{},[19,127866,127867],{},"①px（像素）大小是网页的最常用单位",[19,127869,127870],{},"②谷歌浏览器默认为16px",[19,127872,127873],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127875,127876],{},"④可以给body指定整个页面的大小：会自动引用",[77,127878,127880],{"className":79,"code":127879,"language":81,"meta":82,"style":82},"body {\n  font-size: 16px;\n}\n",[84,127881,127882,127888,127900],{"__ignoreMap":82},[87,127883,127884,127886],{"class":89,"line":90},[87,127885,52737],{"class":93},[87,127887,98],{"class":97},[87,127889,127890,127892,127894,127896,127898],{"class":89,"line":101},[87,127891,71556],{"class":104},[87,127893,108],{"class":97},[87,127895,1694],{"class":104},[87,127897,245],{"class":171},[87,127899,117],{"class":97},[87,127901,127902],{"class":89,"line":120},[87,127903,123],{"class":97},[19,127905,127906],{},"⑤标题标签比较特殊，需要单独指定大小",[44,127908,127910],{"id":127909},"_633-字体粗细","6.3.3 字体粗细",[19,127912,127913],{},"font-weight: bold;",[19,127915,127916],{},"font-weight: 100；",[19,127918,127919,127921],{},[57,127920,1131],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127923,127924],{},"font-weight= 400;",[19,127926,127927],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[44,127929,127931],{"id":127930},"_634-文字样式","6.3.4 文字样式",[19,127933,127934],{},"font-style: normal；",[19,127936,127937,27420],{},[57,127938,127939],{},"属性值",[19,127941,127942],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127944,127945],{},"②italic：浏览器会显示斜体的字体样式",[39,127947],{"style":41,"src":127948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[44,127950,127952],{"id":127951},"_635-字体符合属性","6.3.5 字体符合属性",[39,127954],{"style":41,"src":127955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[39,127957],{"style":41,"src":127958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127960,127961],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127963,127964,27420],{},[57,127965,127563],{},[19,127967,127968],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127970,127971],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127973,127974],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127976,127978],{"id":127977},"_64-css-test文本属性","6.4 css test文本属性",[44,127980,127982],{"id":127981},"_641-文本颜色","6.4.1 文本颜色",[19,127984,127985],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[77,127987,127989],{"className":79,"code":127988,"language":81,"meta":82,"style":82},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[84,127990,127991,127996,128002,128012,128017,128022],{"__ignoreMap":82},[87,127992,127993],{"class":89,"line":90},[87,127994,127995],{"class":199},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[87,127997,127998,128000],{"class":89,"line":101},[87,127999,19],{"class":93},[87,128001,98],{"class":97},[87,128003,128004,128006,128008,128010],{"class":89,"line":120},[87,128005,71833],{"class":104},[87,128007,108],{"class":97},[87,128009,58357],{"class":104},[87,128011,117],{"class":97},[87,128013,128014],{"class":89,"line":222},[87,128015,128016],{"class":199},"  \u002F* color: #ff0000; *\u002F\n",[87,128018,128019],{"class":89,"line":234},[87,128020,128021],{"class":199},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[87,128023,128024],{"class":89,"line":256},[87,128025,123],{"class":97},[39,128027],{"style":41,"src":128028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[44,128030,128032],{"id":128031},"_642-对齐文本","6.4.2 对齐文本",[19,128034,128035,128036,128039],{},"text-align属于用于设置元素内文本内容的 ",[57,128037,128038],{},"水平对齐"," 方式",[19,128041,128042],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[44,128044,128046],{"id":128045},"_643-装饰文本","6.4.3 装饰文本",[19,128048,128049],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[77,128051,128053],{"className":79,"code":128052,"language":81,"meta":82,"style":82},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[84,128054,128055,128061,128071,128075,128081,128092],{"__ignoreMap":82},[87,128056,128057,128059],{"class":89,"line":90},[87,128058,1334],{"class":93},[87,128060,98],{"class":97},[87,128062,128063,128065,128067,128069],{"class":89,"line":101},[87,128064,71433],{"class":104},[87,128066,108],{"class":97},[87,128068,55673],{"class":104},[87,128070,117],{"class":97},[87,128072,128073],{"class":89,"line":120},[87,128074,123],{"class":97},[87,128076,128077,128079],{"class":89,"line":222},[87,128078,19],{"class":93},[87,128080,98],{"class":97},[87,128082,128083,128085,128087,128090],{"class":89,"line":234},[87,128084,71433],{"class":104},[87,128086,108],{"class":97},[87,128088,128089],{"class":104},"underline",[87,128091,117],{"class":97},[87,128093,128094],{"class":89,"line":256},[87,128095,123],{"class":97},[44,128097,128099],{"id":128098},"_644-文本缩进","6.4.4 文本缩进",[19,128101,128102],{},"实现文本的第一行首行缩进自己指定的距离",[19,128104,128105],{},"20px往右边走；-20px往左边走",[19,128107,128108],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[77,128110,128112],{"className":79,"code":128111,"language":81,"meta":82,"style":82},"p {\n  text-indent: 2em;\n}\n",[84,128113,128114,128120,128133],{"__ignoreMap":82},[87,128115,128116,128118],{"class":89,"line":90},[87,128117,19],{"class":93},[87,128119,98],{"class":97},[87,128121,128122,128125,128127,128129,128131],{"class":89,"line":101},[87,128123,128124],{"class":104},"  text-indent",[87,128126,108],{"class":97},[87,128128,1176],{"class":104},[87,128130,24500],{"class":171},[87,128132,117],{"class":97},[87,128134,128135],{"class":89,"line":120},[87,128136,123],{"class":97},[44,128138,128140],{"id":128139},"_645-行间距","6.4.5 行间距",[19,128142,128143],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[77,128145,128147],{"className":79,"code":128146,"language":81,"meta":82,"style":82},"p {\n  line-height: 1.6;\n}\n",[84,128148,128149,128155,128167],{"__ignoreMap":82},[87,128150,128151,128153],{"class":89,"line":90},[87,128152,19],{"class":93},[87,128154,98],{"class":97},[87,128156,128157,128160,128162,128165],{"class":89,"line":101},[87,128158,128159],{"class":104},"  line-height",[87,128161,108],{"class":97},[87,128163,128164],{"class":104},"1.6",[87,128166,117],{"class":97},[87,128168,128169],{"class":89,"line":120},[87,128170,123],{"class":97},[1006,128172,128173],{},"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":82,"searchDepth":101,"depth":101,"links":128175},[128176,128177,128185,128192],{"id":127657,"depth":101,"text":127658},{"id":127692,"depth":101,"text":127693,"children":128178},[128179,128180,128181,128182,128183,128184],{"id":127699,"depth":120,"text":127700},{"id":127712,"depth":120,"text":127713},{"id":127785,"depth":120,"text":127786},{"id":127798,"depth":120,"text":127799},{"id":127817,"depth":120,"text":127818},{"id":127830,"depth":120,"text":127831},{"id":127837,"depth":101,"text":127838,"children":128186},[128187,128188,128189,128190,128191],{"id":127844,"depth":120,"text":127845},{"id":127856,"depth":120,"text":127857},{"id":127909,"depth":120,"text":127910},{"id":127930,"depth":120,"text":127931},{"id":127951,"depth":120,"text":127952},{"id":127977,"depth":101,"text":127978,"children":128193},[128194,128195,128196,128197,128198],{"id":127981,"depth":120,"text":127982},{"id":128031,"depth":120,"text":128032},{"id":128045,"depth":120,"text":128046},{"id":128098,"depth":120,"text":128099},{"id":128139,"depth":120,"text":128140},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127649,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128205,"title":128206,"body":128207,"description":1026,"extension":1027,"meta":128854,"navigation":1029,"path":128855,"seo":128856,"stem":128857,"__hash__":128858},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128208,"toc":128835},[128209,128212,128216,128220,128278,128282,128292,128295,128298,128302,128327,128331,128334,128337,128340,128343,128346,128350,128353,128356,128398,128401,128427,128433,128436,128440,128444,128450,128453,128456,128459,128462,128465,128468,128513,128517,128520,128523,128527,128531,128560,128563,128568,128571,128574,128577,128580,128584,128588,128591,128593,128596,128600,128603,128607,128610,128613,128616,128620,128624,128630,128640,128643,128646,128649,128652,128655,128778,128786,128794,128832],[10,128210,128206],{"id":128211},"_7-css引入方式与选择器进阶",[14,128213,128215],{"id":128214},"_71-css引入方式","7.1 css引入方式",[44,128217,128219],{"id":128218},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[77,128221,128223],{"className":924,"code":128222,"language":926,"meta":82,"style":82},"\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n",[84,128224,128225,128233,128240,128252,128265,128270],{"__ignoreMap":82},[87,128226,128227,128229,128231],{"class":89,"line":90},[87,128228,938],{"class":97},[87,128230,1006],{"class":93},[87,128232,953],{"class":97},[87,128234,128235,128238],{"class":89,"line":101},[87,128236,128237],{"class":93},"  h1",[87,128239,98],{"class":97},[87,128241,128242,128245,128247,128250],{"class":89,"line":120},[87,128243,128244],{"class":104},"    color",[87,128246,108],{"class":97},[87,128248,128249],{"class":104},"blue",[87,128251,117],{"class":97},[87,128253,128254,128257,128259,128261,128263],{"class":89,"line":222},[87,128255,128256],{"class":104},"    font-size",[87,128258,108],{"class":97},[87,128260,1892],{"class":104},[87,128262,245],{"class":171},[87,128264,117],{"class":97},[87,128266,128267],{"class":89,"line":234},[87,128268,128269],{"class":97},"  }\n",[87,128271,128272,128274,128276],{"class":89,"line":256},[87,128273,963],{"class":97},[87,128275,1006],{"class":93},[87,128277,953],{"class":97},[19,128279,128280,27420],{},[57,128281,127563],{},[19,128283,78154,128284,128287,128288,128291],{},[84,128285,128286],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[84,128289,128290],{},"\u003Chead>","标签中",[19,128293,128294],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,128296,128297],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[44,128299,128301],{"id":128300},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[77,128303,128305],{"className":924,"code":128304,"language":926,"meta":82,"style":82},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[84,128306,128307],{"__ignoreMap":82},[87,128308,128309,128311,128313,128315,128317,128320,128323,128325],{"class":89,"line":90},[87,128310,938],{"class":97},[87,128312,19],{"class":93},[87,128314,63560],{"class":205},[87,128316,946],{"class":97},[87,128318,128319],{"class":949},"\"color: red; font-size: 16px;\"",[87,128321,128322],{"class":97},">这是一个段落\u003C\u002F",[87,128324,19],{"class":93},[87,128326,953],{"class":97},[19,128328,128329,27420],{},[57,128330,127563],{},[19,128332,128333],{},"①style其实就是标签的属性",[19,128335,128336],{},"②在双引号中间，写法要符合css规范",[19,128338,128339],{},"③可以控制当前的标签设置样式",[19,128341,128342],{},"④书写繁琐，简单时才用",[19,128344,128345],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[44,128347,128349],{"id":128348},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,128351,128352],{},"使用最多，单独建一个css文件，然后html引用",[19,128354,128355],{},"①css文件部分： style.css",[77,128357,128359],{"className":79,"code":128358,"language":81,"meta":82,"style":82},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[84,128360,128361,128366,128372,128382,128394],{"__ignoreMap":82},[87,128362,128363],{"class":89,"line":90},[87,128364,128365],{"class":199},"\u002F* style.css *\u002F\n",[87,128367,128368,128370],{"class":89,"line":101},[87,128369,10],{"class":93},[87,128371,98],{"class":97},[87,128373,128374,128376,128378,128380],{"class":89,"line":120},[87,128375,71833],{"class":104},[87,128377,108],{"class":97},[87,128379,128249],{"class":104},[87,128381,117],{"class":97},[87,128383,128384,128386,128388,128390,128392],{"class":89,"line":222},[87,128385,71556],{"class":104},[87,128387,108],{"class":97},[87,128389,1892],{"class":104},[87,128391,245],{"class":171},[87,128393,117],{"class":97},[87,128395,128396],{"class":89,"line":234},[87,128397,123],{"class":97},[19,128399,128400],{},"②html部分",[77,128402,128404],{"className":924,"code":128403,"language":926,"meta":82,"style":82},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[84,128405,128406],{"__ignoreMap":82},[87,128407,128408,128410,128412,128414,128416,128418,128420,128422,128425],{"class":89,"line":90},[87,128409,938],{"class":97},[87,128411,69937],{"class":93},[87,128413,69940],{"class":205},[87,128415,946],{"class":97},[87,128417,69945],{"class":949},[87,128419,61993],{"class":205},[87,128421,946],{"class":97},[87,128423,128424],{"class":949},"\"style.css\"",[87,128426,953],{"class":97},[19,128428,128429,128432],{},[84,128430,128431],{},"\u003Chr>","水平线标签（但是不常用！）",[19,128434,128435],{},"ctrl+0回到页面原来大小",[14,128437,128439],{"id":128438},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[44,128441,128443],{"id":128442},"_721-快速生成html","7.2.1 快速生成html",[19,128445,128446,128447],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[84,128448,128449],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,128451,128452],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,128454,128455],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,128457,128458],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,128460,128461],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,128463,128464],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,128466,128467],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[77,128469,128471],{"className":924,"code":128470,"language":926,"meta":82,"style":82},"\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",[84,128472,128473,128478,128483,128488,128493,128498,128503,128508],{"__ignoreMap":82},[87,128474,128475],{"class":89,"line":90},[87,128476,128477],{"class":199},"\u003C!-- Emmet 语法示例 -->\n",[87,128479,128480],{"class":89,"line":101},[87,128481,128482],{"class":199},"\u003C!-- div*3        → 生成3个div -->\n",[87,128484,128485],{"class":89,"line":120},[87,128486,128487],{"class":199},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[87,128489,128490],{"class":89,"line":222},[87,128491,128492],{"class":199},"\u003C!-- div+p        → 兄弟div和p -->\n",[87,128494,128495],{"class":89,"line":234},[87,128496,128497],{"class":199},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[87,128499,128500],{"class":89,"line":256},[87,128501,128502],{"class":199},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[87,128504,128505],{"class":89,"line":269},[87,128506,128507],{"class":199},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[87,128509,128510],{"class":89,"line":463},[87,128511,128512],{"class":199},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[44,128514,128516],{"id":128515},"_722-快速生成css","7.2.2 快速生成css",[19,128518,128519],{},"简写开头",[19,128521,128522],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,128524,128526],{"id":128525},"_73-css复合选择器","7.3 css复合选择器",[44,128528,128530],{"id":128529},"_731-后代选择器","7.3.1 后代选择器",[77,128532,128534],{"className":79,"code":128533,"language":81,"meta":82,"style":82},".parent .child {\n  color: blue;\n}\n",[84,128535,128536,128546,128556],{"__ignoreMap":82},[87,128537,128538,128541,128544],{"class":89,"line":90},[87,128539,128540],{"class":205},".parent",[87,128542,128543],{"class":205}," .child",[87,128545,98],{"class":97},[87,128547,128548,128550,128552,128554],{"class":89,"line":101},[87,128549,71833],{"class":104},[87,128551,108],{"class":97},[87,128553,128249],{"class":104},[87,128555,117],{"class":97},[87,128557,128558],{"class":89,"line":120},[87,128559,123],{"class":97},[19,128561,128562],{},"元素1 元素2 {样式声明}",[19,128564,128565],{},[57,128566,128567],{},"注意点:",[19,128569,128570],{},"①元素1和元素2中间用空格隔开",[19,128572,128573],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,128575,128576],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,128578,128579],{},"④元素1和元素2可以是任意基础选择器",[44,128581,128583],{"id":128582},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,128585,128586],{},[57,128587,128567],{},[19,128589,128590],{},"①元素1和元素2中间用大于号隔开",[19,128592,128573],{},[19,128594,128595],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[44,128597,128599],{"id":128598},"_733-并集选择器","7.3.3 并集选择器",[19,128601,128602],{},"元素1，元素2 {样式声明}",[19,128604,128605],{},[57,128606,128567],{},[19,128608,128609],{},"①元素1和元素2中间用逗号隔开",[19,128611,128612],{},"②逗号可以理解为和的意思",[19,128614,128615],{},"③并集选择器通常用于集体声明",[44,128617,128619],{"id":128618},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,128621,128622],{},[57,128623,128567],{},[19,128625,128626,128627,128629],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69937,128628],{},"－:visited－:hover－:active。",[19,128631,128632,128633,128636,128637,26687],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128634,128635],"hover",{}," 、 ",[128638,128639],"first-child",{},[19,128641,128642],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,128644,128645],{},"link对没访问的进行设置",[19,128647,128648],{},"vistied对已访问的进行改变",[19,128650,128651],{},"hover鼠标经过就会变",[19,128653,128654],{},"active常按(点)就会变",[77,128656,128658],{"className":79,"code":128657,"language":81,"meta":82,"style":82},"\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",[84,128659,128660,128665,128674,128684,128694,128698,128707,128718,128722,128730,128740,128750,128754,128763,128774],{"__ignoreMap":82},[87,128661,128662],{"class":89,"line":90},[87,128663,128664],{"class":199},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[87,128666,128667,128669,128672],{"class":89,"line":101},[87,128668,1334],{"class":93},[87,128670,128671],{"class":205},":link",[87,128673,98],{"class":97},[87,128675,128676,128678,128680,128682],{"class":89,"line":120},[87,128677,71833],{"class":104},[87,128679,108],{"class":97},[87,128681,264],{"class":104},[87,128683,117],{"class":97},[87,128685,128686,128688,128690,128692],{"class":89,"line":222},[87,128687,71433],{"class":104},[87,128689,108],{"class":97},[87,128691,55673],{"class":104},[87,128693,117],{"class":97},[87,128695,128696],{"class":89,"line":234},[87,128697,123],{"class":97},[87,128699,128700,128702,128705],{"class":89,"line":256},[87,128701,1334],{"class":93},[87,128703,128704],{"class":205},":visited",[87,128706,98],{"class":97},[87,128708,128709,128711,128713,128716],{"class":89,"line":269},[87,128710,71833],{"class":104},[87,128712,108],{"class":97},[87,128714,128715],{"class":104},"purple",[87,128717,117],{"class":97},[87,128719,128720],{"class":89,"line":463},[87,128721,123],{"class":97},[87,128723,128724,128726,128728],{"class":89,"line":469},[87,128725,1334],{"class":93},[87,128727,61876],{"class":205},[87,128729,98],{"class":97},[87,128731,128732,128734,128736,128738],{"class":89,"line":2287},[87,128733,71833],{"class":104},[87,128735,108],{"class":97},[87,128737,55825],{"class":104},[87,128739,117],{"class":97},[87,128741,128742,128744,128746,128748],{"class":89,"line":2568},[87,128743,71433],{"class":104},[87,128745,108],{"class":97},[87,128747,128089],{"class":104},[87,128749,117],{"class":97},[87,128751,128752],{"class":89,"line":2573},[87,128753,123],{"class":97},[87,128755,128756,128758,128761],{"class":89,"line":2579},[87,128757,1334],{"class":93},[87,128759,128760],{"class":205},":active",[87,128762,98],{"class":97},[87,128764,128765,128767,128769,128772],{"class":89,"line":2584},[87,128766,71833],{"class":104},[87,128768,108],{"class":97},[87,128770,128771],{"class":104},"green",[87,128773,117],{"class":97},[87,128775,128776],{"class":89,"line":2598},[87,128777,123],{"class":97},[44,128779,128781,128782,128785],{"id":128780},"_735-伪类选择器","7.3.5 ",[128783,128784],"focus",{},"伪类选择器",[19,128787,128788,128790,128791,128793],{},[128783,128789],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[84,128792,127536],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[77,128795,128797],{"className":79,"code":128796,"language":81,"meta":82,"style":82},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[84,128798,128799,128807,128818,128828],{"__ignoreMap":82},[87,128800,128801,128803,128805],{"class":89,"line":90},[87,128802,54757],{"class":93},[87,128804,62835],{"class":205},[87,128806,98],{"class":97},[87,128808,128809,128812,128814,128816],{"class":89,"line":101},[87,128810,128811],{"class":104},"  border-color",[87,128813,108],{"class":97},[87,128815,55825],{"class":104},[87,128817,117],{"class":97},[87,128819,128820,128822,128824,128826],{"class":89,"line":120},[87,128821,71727],{"class":104},[87,128823,108],{"class":97},[87,128825,55673],{"class":104},[87,128827,117],{"class":97},[87,128829,128830],{"class":89,"line":222},[87,128831,123],{"class":97},[1006,128833,128834],{},"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":82,"searchDepth":101,"depth":101,"links":128836},[128837,128842,128846],{"id":128214,"depth":101,"text":128215,"children":128838},[128839,128840,128841],{"id":128218,"depth":120,"text":128219},{"id":128300,"depth":120,"text":128301},{"id":128348,"depth":120,"text":128349},{"id":128438,"depth":101,"text":128439,"children":128843},[128844,128845],{"id":128442,"depth":120,"text":128443},{"id":128515,"depth":120,"text":128516},{"id":128525,"depth":101,"text":128526,"children":128847},[128848,128849,128850,128851,128852],{"id":128529,"depth":120,"text":128530},{"id":128582,"depth":120,"text":128583},{"id":128598,"depth":120,"text":128599},{"id":128618,"depth":120,"text":128619},{"id":128780,"depth":120,"text":128853},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128206,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128860,"title":128861,"body":128862,"description":1026,"extension":1027,"meta":130783,"navigation":1029,"path":130784,"seo":130785,"stem":130786,"__hash__":130787},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128863,"toc":130757},[128864,128867,128871,128880,128884,128910,128915,128918,128921,128924,128927,128931,128934,128944,128952,128956,128991,128996,128999,129002,129005,129008,129012,129015,129024,129028,129041,129046,129049,129052,129055,129059,129062,129066,129069,129124,129127,129158,129161,129215,129219,129222,129388,129511,129514,129517,129520,129523,129527,129530,129534,129537,129540,129544,129547,129578,129605,129633,129636,129640,129664,129707,129711,129805,129808,129835,129838,129841,129844,129847,129850,129853,129856,129859,129862,129866,129923,129950,129954,130002,130006,130047,130049,130052,130055,130058,130061,130065,130157,130160,130163,130166,130170,130293,130494,130498,130502,130505,130508,130511,130515,130518,130521,130546,130549,130552,130555,130558,130561,130565,130573,130635,130638,130696,130699,130702,130705,130708,130711,130714,130717,130754],[10,128865,128861],{"id":128866},"_8-css显示模式与背景特性",[14,128868,128870],{"id":128869},"_81-css元素显示模式","8.1 css元素显示模式",[19,128872,128873,128874,128876,128877,128879],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[84,128875,127089],{},"自己占一行，比如一行可以放多个",[84,128878,127092],{},"，HTML 元素一般分为块元素和行内元素两种类型",[44,128881,128883],{"id":128882},"_811-块元素","8.1.1 块元素",[19,128885,128886,128887,128889,128890,1308,128893,1308,128895,1308,128897,1308,128900,1308,128903,128906,128907,128909],{},"常见的块元素有",[84,128888,126993],{},"~",[84,128891,128892],{},"\u003Ch6>",[84,128894,127019],{},[84,128896,127089],{},[84,128898,128899],{},"\u003Cul>",[84,128901,128902],{},"\u003Col>",[84,128904,128905],{},"\u003Cli>","等，其中 ",[84,128908,127089],{}," 标签是最典型的块元素",[19,128911,128912],{},[57,128913,128914],{},"块级元素的特点：",[19,128916,128917],{},"① 比较霸道，自己独占一行。",[19,128919,128920],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128922,128923],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128925,128926],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128928,128929],{},[57,128930,1131],{},[19,128932,128933],{},"①文字类的元素内不能使用块级元素",[19,128935,78177,128936,128938,128939,128941,128942],{},[84,128937,127019],{}," 标签主要用于存放文字，因此 ",[84,128940,127019],{}," 里面不能放块级元素，特别是不能放",[84,128943,127089],{},[19,128945,128946,128947,128889,128949,128951],{},"⑥同理， ",[84,128948,126993],{},[84,128950,128892],{},"等都是文字类块级标签，里面也不能放其他块级元素",[44,128953,128955],{"id":128954},"_812-行内元素","8.1.2 行内元素",[19,128957,128958,128959,1308,128961,1308,128964,1308,128967,1308,128970,1308,128973,1308,128976,1308,128979,1308,128982,1308,128985,128987,128988,128990],{},"常见的行内元素有 ",[84,128960,127251],{},[84,128962,128963],{},"\u003Cstrong>",[84,128965,128966],{},"\u003Cb>",[84,128968,128969],{},"\u003Cem>",[84,128971,128972],{},"\u003Ci>",[84,128974,128975],{},"\u003Cdel>",[84,128977,128978],{},"\u003Cs>",[84,128980,128981],{},"\u003Cins>",[84,128983,128984],{},"\u003Cu>",[84,128986,127092],{}," 等，其中 ",[84,128989,127092],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128992,128993],{},[57,128994,128995],{},"特点：",[19,128997,128998],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129000,129001],{},"② 高、宽直接设置是无效的。",[19,129003,129004],{},"③ 默认宽度就是它本身内容的宽度。",[19,129006,129007],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129009,129010],{},[57,129011,1131],{},[19,129013,129014],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129016,129017,129018,129020,129021,129023],{},"②特殊情况链接 ",[84,129019,127251],{}," 里面可以放块级元素，但是给 ",[84,129022,127251],{}," 转换一下块级模式最安全",[44,129025,129027],{"id":129026},"_813-行内块元素","8.1.3 行内块元素",[19,129029,129030,129031,1308,129034,1308,129037,129040],{},"在行内元素中有几个特殊的标签 —— ",[84,129032,129033],{},"\u003Cimg \u002F>",[84,129035,129036],{},"\u003Cinput \u002F>",[84,129038,129039],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129042,129043],{},[57,129044,129045],{},"行内块元素的特点：",[19,129047,129048],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129050,129051],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129053,129054],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[44,129056,129058],{"id":129057},"_814-总结","8.1.4 总结",[39,129060],{"style":41,"src":129061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[44,129063,129065],{"id":129064},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129067,129068],{},"①转换为块元素：display:block;",[77,129070,129072],{"className":79,"code":129071,"language":81,"meta":82,"style":82},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[84,129073,129074,129079,129085,129096,129108,129120],{"__ignoreMap":82},[87,129075,129076],{"class":89,"line":90},[87,129077,129078],{"class":199},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[87,129080,129081,129083],{"class":89,"line":101},[87,129082,1334],{"class":93},[87,129084,98],{"class":97},[87,129086,129087,129090,129092,129094],{"class":89,"line":120},[87,129088,129089],{"class":104},"  display",[87,129091,108],{"class":97},[87,129093,61805],{"class":104},[87,129095,117],{"class":97},[87,129097,129098,129100,129102,129104,129106],{"class":89,"line":222},[87,129099,213],{"class":104},[87,129101,108],{"class":97},[87,129103,536],{"class":104},[87,129105,245],{"class":171},[87,129107,117],{"class":97},[87,129109,129110,129112,129114,129116,129118],{"class":89,"line":234},[87,129111,225],{"class":104},[87,129113,108],{"class":97},[87,129115,1496],{"class":104},[87,129117,245],{"class":171},[87,129119,117],{"class":97},[87,129121,129122],{"class":89,"line":256},[87,129123,123],{"class":97},[19,129125,129126],{},"②转换为行内元素：display:inline;",[77,129128,129130],{"className":79,"code":129129,"language":81,"meta":82,"style":82},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[84,129131,129132,129137,129143,129154],{"__ignoreMap":82},[87,129133,129134],{"class":89,"line":90},[87,129135,129136],{"class":199},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[87,129138,129139,129141],{"class":89,"line":101},[87,129140,94],{"class":93},[87,129142,98],{"class":97},[87,129144,129145,129147,129149,129152],{"class":89,"line":120},[87,129146,129089],{"class":104},[87,129148,108],{"class":97},[87,129150,129151],{"class":104},"inline",[87,129153,117],{"class":97},[87,129155,129156],{"class":89,"line":222},[87,129157,123],{"class":97},[19,129159,129160],{},"③转换为行内块：display:inline-block;",[77,129162,129164],{"className":79,"code":129163,"language":81,"meta":82,"style":82},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[84,129165,129166,129171,129177,129187,129199,129211],{"__ignoreMap":82},[87,129167,129168],{"class":89,"line":90},[87,129169,129170],{"class":199},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[87,129172,129173,129175],{"class":89,"line":101},[87,129174,87],{"class":93},[87,129176,98],{"class":97},[87,129178,129179,129181,129183,129185],{"class":89,"line":120},[87,129180,129089],{"class":104},[87,129182,108],{"class":97},[87,129184,73311],{"class":104},[87,129186,117],{"class":97},[87,129188,129189,129191,129193,129195,129197],{"class":89,"line":222},[87,129190,213],{"class":104},[87,129192,108],{"class":97},[87,129194,1705],{"class":104},[87,129196,245],{"class":171},[87,129198,117],{"class":97},[87,129200,129201,129203,129205,129207,129209],{"class":89,"line":234},[87,129202,225],{"class":104},[87,129204,108],{"class":97},[87,129206,2042],{"class":104},[87,129208,245],{"class":171},[87,129210,117],{"class":97},[87,129212,129213],{"class":89,"line":256},[87,129214,123],{"class":97},[44,129216,129218],{"id":129217},"_816-小米侧边栏","8.1.6 小米侧边栏",[39,129220],{"style":41,"src":129221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[77,129223,129225],{"className":924,"code":129224,"language":926,"meta":82,"style":82},"\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",[84,129226,129227,129232,129247,129266,129285,129304,129323,129342,129361,129380],{"__ignoreMap":82},[87,129228,129229],{"class":89,"line":90},[87,129230,129231],{"class":199},"\u003C!-- 小米侧边栏案例 -->\n",[87,129233,129234,129236,129238,129240,129242,129245],{"class":89,"line":101},[87,129235,938],{"class":97},[87,129237,94],{"class":93},[87,129239,943],{"class":205},[87,129241,946],{"class":97},[87,129243,129244],{"class":949},"\"sidebar\"",[87,129246,953],{"class":97},[87,129248,129249,129251,129253,129255,129257,129259,129262,129264],{"class":89,"line":120},[87,129250,53081],{"class":97},[87,129252,1334],{"class":93},[87,129254,61993],{"class":205},[87,129256,946],{"class":97},[87,129258,61998],{"class":949},[87,129260,129261],{"class":97},">手机 电话卡\u003C\u002F",[87,129263,1334],{"class":93},[87,129265,953],{"class":97},[87,129267,129268,129270,129272,129274,129276,129278,129281,129283],{"class":89,"line":222},[87,129269,53081],{"class":97},[87,129271,1334],{"class":93},[87,129273,61993],{"class":205},[87,129275,946],{"class":97},[87,129277,61998],{"class":949},[87,129279,129280],{"class":97},">电视 盒子\u003C\u002F",[87,129282,1334],{"class":93},[87,129284,953],{"class":97},[87,129286,129287,129289,129291,129293,129295,129297,129300,129302],{"class":89,"line":234},[87,129288,53081],{"class":97},[87,129290,1334],{"class":93},[87,129292,61993],{"class":205},[87,129294,946],{"class":97},[87,129296,61998],{"class":949},[87,129298,129299],{"class":97},">笔记本 平板\u003C\u002F",[87,129301,1334],{"class":93},[87,129303,953],{"class":97},[87,129305,129306,129308,129310,129312,129314,129316,129319,129321],{"class":89,"line":256},[87,129307,53081],{"class":97},[87,129309,1334],{"class":93},[87,129311,61993],{"class":205},[87,129313,946],{"class":97},[87,129315,61998],{"class":949},[87,129317,129318],{"class":97},">出行 穿戴\u003C\u002F",[87,129320,1334],{"class":93},[87,129322,953],{"class":97},[87,129324,129325,129327,129329,129331,129333,129335,129338,129340],{"class":89,"line":269},[87,129326,53081],{"class":97},[87,129328,1334],{"class":93},[87,129330,61993],{"class":205},[87,129332,946],{"class":97},[87,129334,61998],{"class":949},[87,129336,129337],{"class":97},">智能 路由器\u003C\u002F",[87,129339,1334],{"class":93},[87,129341,953],{"class":97},[87,129343,129344,129346,129348,129350,129352,129354,129357,129359],{"class":89,"line":463},[87,129345,53081],{"class":97},[87,129347,1334],{"class":93},[87,129349,61993],{"class":205},[87,129351,946],{"class":97},[87,129353,61998],{"class":949},[87,129355,129356],{"class":97},">健康 儿童\u003C\u002F",[87,129358,1334],{"class":93},[87,129360,953],{"class":97},[87,129362,129363,129365,129367,129369,129371,129373,129376,129378],{"class":89,"line":469},[87,129364,53081],{"class":97},[87,129366,1334],{"class":93},[87,129368,61993],{"class":205},[87,129370,946],{"class":97},[87,129372,61998],{"class":949},[87,129374,129375],{"class":97},">耳机 音响\u003C\u002F",[87,129377,1334],{"class":93},[87,129379,953],{"class":97},[87,129381,129382,129384,129386],{"class":89,"line":2287},[87,129383,963],{"class":97},[87,129385,94],{"class":93},[87,129387,953],{"class":97},[77,129389,129391],{"className":79,"code":129390,"language":81,"meta":82,"style":82},".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",[84,129392,129393,129402,129412,129425,129437,129449,129461,129471,129482,129486,129496,129507],{"__ignoreMap":82},[87,129394,129395,129398,129400],{"class":89,"line":90},[87,129396,129397],{"class":205},".sidebar",[87,129399,2356],{"class":93},[87,129401,98],{"class":97},[87,129403,129404,129406,129408,129410],{"class":89,"line":101},[87,129405,129089],{"class":104},[87,129407,108],{"class":97},[87,129409,61805],{"class":104},[87,129411,117],{"class":97},[87,129413,129414,129416,129418,129421,129423],{"class":89,"line":120},[87,129415,213],{"class":104},[87,129417,108],{"class":97},[87,129419,129420],{"class":104},"234",[87,129422,245],{"class":171},[87,129424,117],{"class":97},[87,129426,129427,129429,129431,129433,129435],{"class":89,"line":222},[87,129428,225],{"class":104},[87,129430,108],{"class":97},[87,129432,1546],{"class":104},[87,129434,245],{"class":171},[87,129436,117],{"class":97},[87,129438,129439,129441,129443,129445,129447],{"class":89,"line":234},[87,129440,128159],{"class":104},[87,129442,108],{"class":97},[87,129444,1546],{"class":104},[87,129446,245],{"class":171},[87,129448,117],{"class":97},[87,129450,129451,129453,129455,129457,129459],{"class":89,"line":256},[87,129452,71752],{"class":104},[87,129454,108],{"class":97},[87,129456,2042],{"class":104},[87,129458,245],{"class":171},[87,129460,117],{"class":97},[87,129462,129463,129465,129467,129469],{"class":89,"line":269},[87,129464,71833],{"class":104},[87,129466,108],{"class":97},[87,129468,61778],{"class":104},[87,129470,117],{"class":97},[87,129472,129473,129475,129477,129480],{"class":89,"line":463},[87,129474,71807],{"class":104},[87,129476,108],{"class":97},[87,129478,129479],{"class":104},"#55585a",[87,129481,117],{"class":97},[87,129483,129484],{"class":89,"line":469},[87,129485,123],{"class":97},[87,129487,129488,129490,129492,129494],{"class":89,"line":2287},[87,129489,129397],{"class":205},[87,129491,2356],{"class":93},[87,129493,61876],{"class":205},[87,129495,98],{"class":97},[87,129497,129498,129500,129502,129505],{"class":89,"line":2568},[87,129499,71807],{"class":104},[87,129501,108],{"class":97},[87,129503,129504],{"class":104},"#ff6700",[87,129506,117],{"class":97},[87,129508,129509],{"class":89,"line":2573},[87,129510,123],{"class":97},[39,129512],{"style":41,"src":129513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,129515,129516],{},"行高=盒子高度：实现文字的垂直居中",[19,129518,129519],{},"原理讲解：",[39,129521],{"style":41,"src":129522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129524,129526],{"id":129525},"_82-css背景","8.2 css背景",[19,129528,129529],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[44,129531,129533],{"id":129532},"_821-背景颜色","8.2.1 背景颜色",[19,129535,129536],{},"background-color:颜色值;",[19,129538,129539],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[44,129541,129543],{"id":129542},"_822-背景图片","8.2.2 背景图片",[19,129545,129546],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[77,129548,129550],{"className":79,"code":129549,"language":81,"meta":82,"style":82},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[84,129551,129552,129558,129574],{"__ignoreMap":82},[87,129553,129554,129556],{"class":89,"line":90},[87,129555,94],{"class":93},[87,129557,98],{"class":97},[87,129559,129560,129563,129565,129567,129569,129572],{"class":89,"line":101},[87,129561,129562],{"class":104},"  background-image",[87,129564,108],{"class":97},[87,129566,62662],{"class":104},[87,129568,165],{"class":97},[87,129570,129571],{"class":492},"images\u002Fbg.png",[87,129573,175],{"class":97},[87,129575,129576],{"class":89,"line":120},[87,129577,123],{"class":97},[1235,129579,129580,129589],{},[1238,129581,129582],{},[1241,129583,129584,129587],{},[1244,129585,129586],{"align":24683},"参数值",[1244,129588,103622],{"align":24683},[1281,129590,129591,129598],{},[1241,129592,129593,129595],{},[1286,129594,55673],{"align":24683},[1286,129596,129597],{"align":24683},"无背景图（默认的）",[1241,129599,129600,129602],{},[1286,129601,62662],{"align":24683},[1286,129603,129604],{"align":24683},"使用绝对或相对地址指定背景图像",[77,129606,129607],{"className":79,"code":129549,"language":81,"meta":82,"style":82},[84,129608,129609,129615,129629],{"__ignoreMap":82},[87,129610,129611,129613],{"class":89,"line":90},[87,129612,94],{"class":93},[87,129614,98],{"class":97},[87,129616,129617,129619,129621,129623,129625,129627],{"class":89,"line":101},[87,129618,129562],{"class":104},[87,129620,108],{"class":97},[87,129622,62662],{"class":104},[87,129624,165],{"class":97},[87,129626,129571],{"class":492},[87,129628,175],{"class":97},[87,129630,129631],{"class":89,"line":120},[87,129632,123],{"class":97},[19,129634,129635],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[44,129637,129639],{"id":129638},"_823-背景平铺","8.2.3 背景平铺",[77,129641,129642],{"className":79,"code":717,"language":81,"meta":82,"style":82},[84,129643,129644,129650,129660],{"__ignoreMap":82},[87,129645,129646,129648],{"class":89,"line":90},[87,129647,94],{"class":93},[87,129649,98],{"class":97},[87,129651,129652,129654,129656,129658],{"class":89,"line":101},[87,129653,730],{"class":104},[87,129655,108],{"class":97},[87,129657,735],{"class":104},[87,129659,117],{"class":97},[87,129661,129662],{"class":89,"line":120},[87,129663,123],{"class":97},[1235,129665,129666,129674],{},[1238,129667,129668],{},[1241,129669,129670,129672],{},[1244,129671,129586],{"align":24683},[1244,129673,103622],{"align":24683},[1281,129675,129676,129684,129691,129699],{},[1241,129677,129678,129681],{},[1286,129679,129680],{"align":24683},"repeat",[1286,129682,129683],{"align":24683},"背景图像在纵向和横向上平铺（默认的）",[1241,129685,129686,129688],{},[1286,129687,735],{"align":24683},[1286,129689,129690],{"align":24683},"背景图像不平铺",[1241,129692,129693,129696],{},[1286,129694,129695],{"align":24683},"repeat-x",[1286,129697,129698],{"align":24683},"背景图像在横向上平铺",[1241,129700,129701,129704],{},[1286,129702,129703],{"align":24683},"repeat-y",[1286,129705,129706],{"align":24683},"背景图像在纵向平铺",[44,129708,129710],{"id":129709},"_824-背景图片位置","8.2.4 背景图片位置",[77,129712,129714],{"className":79,"code":129713,"language":81,"meta":82,"style":82},"\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",[84,129715,129716,129721,129727,129741,129745,129750,129756,129772,129776,129781,129787,129801],{"__ignoreMap":82},[87,129717,129718],{"class":89,"line":90},[87,129719,129720],{"class":199},"\u002F* 方位名词 *\u002F\n",[87,129722,129723,129725],{"class":89,"line":101},[87,129724,94],{"class":93},[87,129726,98],{"class":97},[87,129728,129729,129732,129734,129736,129739],{"class":89,"line":120},[87,129730,129731],{"class":104},"  background-position",[87,129733,108],{"class":97},[87,129735,318],{"class":104},[87,129737,129738],{"class":104}," top",[87,129740,117],{"class":97},[87,129742,129743],{"class":89,"line":222},[87,129744,123],{"class":97},[87,129746,129747],{"class":89,"line":234},[87,129748,129749],{"class":199},"\u002F* 精确单位 *\u002F\n",[87,129751,129752,129754],{"class":89,"line":256},[87,129753,94],{"class":93},[87,129755,98],{"class":97},[87,129757,129758,129760,129762,129764,129766,129768,129770],{"class":89,"line":269},[87,129759,129731],{"class":104},[87,129761,108],{"class":97},[87,129763,1792],{"class":104},[87,129765,245],{"class":171},[87,129767,58440],{"class":104},[87,129769,245],{"class":171},[87,129771,117],{"class":97},[87,129773,129774],{"class":89,"line":463},[87,129775,123],{"class":97},[87,129777,129778],{"class":89,"line":469},[87,129779,129780],{"class":199},"\u002F* 混合单位 *\u002F\n",[87,129782,129783,129785],{"class":89,"line":2287},[87,129784,94],{"class":93},[87,129786,98],{"class":97},[87,129788,129789,129791,129793,129795,129797,129799],{"class":89,"line":2568},[87,129790,129731],{"class":104},[87,129792,108],{"class":97},[87,129794,1792],{"class":104},[87,129796,245],{"class":171},[87,129798,321],{"class":104},[87,129800,117],{"class":97},[87,129802,129803],{"class":89,"line":2573},[87,129804,123],{"class":97},[19,129806,129807],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[1235,129809,129810,129818],{},[1238,129811,129812],{},[1241,129813,129814,129816],{},[1244,129815,129586],{"align":24683},[1244,129817,26816],{"align":24683},[1281,129819,129820,129827],{},[1241,129821,129822,129824],{},[1286,129823,52905],{"align":24683},[1286,129825,129826],{"align":24683},"百分数|由浮点数和单位标识符组成的长度值",[1241,129828,129829,129832],{},[1286,129830,129831],{"align":24683},"position",[1286,129833,129834],{"align":24683},"top|center|bottom|left|center|right 方位名词",[19,129836,129837],{},"其他说明：",[19,129839,129840],{},"①参数是方位名词",[19,129842,129843],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,129845,129846],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,129848,129849],{},"②参数是精确单位",[19,129851,129852],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,129854,129855],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,129857,129858],{},"③参数是混合单位",[19,129860,129861],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[44,129863,129865],{"id":129864},"_825-背景图片固定","8.2.5 背景图片固定",[77,129867,129869],{"className":79,"code":129868,"language":81,"meta":82,"style":82},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[84,129870,129871,129876,129882,129894,129898,129903,129909,129919],{"__ignoreMap":82},[87,129872,129873],{"class":89,"line":90},[87,129874,129875],{"class":199},"\u002F* 背景滚动（默认） *\u002F\n",[87,129877,129878,129880],{"class":89,"line":101},[87,129879,94],{"class":93},[87,129881,98],{"class":97},[87,129883,129884,129887,129889,129892],{"class":89,"line":120},[87,129885,129886],{"class":104},"  background-attachment",[87,129888,108],{"class":97},[87,129890,129891],{"class":104},"scroll",[87,129893,117],{"class":97},[87,129895,129896],{"class":89,"line":222},[87,129897,123],{"class":97},[87,129899,129900],{"class":89,"line":234},[87,129901,129902],{"class":199},"\u002F* 背景固定 *\u002F\n",[87,129904,129905,129907],{"class":89,"line":256},[87,129906,94],{"class":93},[87,129908,98],{"class":97},[87,129910,129911,129913,129915,129917],{"class":89,"line":269},[87,129912,129886],{"class":104},[87,129914,108],{"class":97},[87,129916,87159],{"class":104},[87,129918,117],{"class":97},[87,129920,129921],{"class":89,"line":463},[87,129922,123],{"class":97},[1235,129924,129925,129934],{},[1238,129926,129927],{},[1241,129928,129929,129932],{},[1244,129930,129931],{"align":24683},"参数",[1244,129933,103622],{"align":24683},[1281,129935,129936,129943],{},[1241,129937,129938,129940],{},[1286,129939,129891],{"align":24683},[1286,129941,129942],{"align":24683},"背景图像是随对象内容滚动",[1241,129944,129945,129947],{},[1286,129946,87159],{"align":24683},[1286,129948,129949],{"align":24683},"背景图像固定",[44,129951,129953],{"id":129952},"_826-背景样式合写","8.2.6 背景样式合写",[77,129955,129957],{"className":79,"code":129956,"language":81,"meta":82,"style":82},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[84,129958,129959,129964,129970,129998],{"__ignoreMap":82},[87,129960,129961],{"class":89,"line":90},[87,129962,129963],{"class":199},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[87,129965,129966,129968],{"class":89,"line":101},[87,129967,94],{"class":93},[87,129969,98],{"class":97},[87,129971,129972,129974,129976,129978,129981,129983,129985,129987,129989,129992,129994,129996],{"class":89,"line":120},[87,129973,71541],{"class":104},[87,129975,108],{"class":97},[87,129977,61778],{"class":104},[87,129979,129980],{"class":104}," url",[87,129982,165],{"class":97},[87,129984,129571],{"class":492},[87,129986,14664],{"class":97},[87,129988,735],{"class":104},[87,129990,129991],{"class":104}," fixed",[87,129993,321],{"class":104},[87,129995,129738],{"class":104},[87,129997,117],{"class":97},[87,129999,130000],{"class":89,"line":222},[87,130001,123],{"class":97},[44,130003,130005],{"id":130004},"_827-背景色半透明","8.2.7 背景色半透明",[77,130007,130009],{"className":79,"code":130008,"language":81,"meta":82,"style":82},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[84,130010,130011,130017,130043],{"__ignoreMap":82},[87,130012,130013,130015],{"class":89,"line":90},[87,130014,94],{"class":93},[87,130016,98],{"class":97},[87,130018,130019,130021,130023,130025,130027,130029,130031,130033,130035,130037,130039,130041],{"class":89,"line":101},[87,130020,71541],{"class":104},[87,130022,108],{"class":97},[87,130024,56046],{"class":104},[87,130026,165],{"class":97},[87,130028,111],{"class":104},[87,130030,13385],{"class":97},[87,130032,111],{"class":104},[87,130034,13385],{"class":97},[87,130036,111],{"class":104},[87,130038,13385],{"class":97},[87,130040,101447],{"class":104},[87,130042,175],{"class":97},[87,130044,130045],{"class":89,"line":120},[87,130046,123],{"class":97},[19,130048,100322],{},[19,130050,130051],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130053,130054],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130056,130057],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130059,130060],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[44,130062,130064],{"id":130063},"_828-总结","8.2.8 总结",[1235,130066,130067,130078],{},[1238,130068,130069],{},[1241,130070,130071,130074,130076],{},[1244,130072,130073],{"align":24683},"属性",[1244,130075,103622],{"align":24683},[1244,130077,1249],{"align":24683},[1281,130079,130080,130091,130102,130113,130124,130135,130146],{},[1241,130081,130082,130085,130088],{},[1286,130083,130084],{"align":24683},"background-color",[1286,130086,130087],{"align":24683},"背景颜色",[1286,130089,130090],{"align":24683},"预定义的颜色值\u002F十六进制\u002FRGB代码",[1241,130092,130093,130096,130099],{},[1286,130094,130095],{"align":24683},"background-image",[1286,130097,130098],{"align":24683},"背景图片",[1286,130100,130101],{"align":24683},"url(图片路径)",[1241,130103,130104,130107,130110],{},[1286,130105,130106],{"align":24683},"background-repeat",[1286,130108,130109],{"align":24683},"是否平铺",[1286,130111,130112],{"align":24683},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[1241,130114,130115,130118,130121],{},[1286,130116,130117],{"align":24683},"background-position",[1286,130119,130120],{"align":24683},"背景位置",[1286,130122,130123],{"align":24683},"length\u002Fposition 分别是x和y坐标",[1241,130125,130126,130129,130132],{},[1286,130127,130128],{"align":24683},"background-attachment",[1286,130130,130131],{"align":24683},"背景附着",[1286,130133,130134],{"align":24683},"scroll(背景滚动) \u002Ffixed (背景固定)",[1241,130136,130137,130140,130143],{},[1286,130138,130139],{"align":24683},"背景简写",[1286,130141,130142],{"align":24683},"书写更简单",[1286,130144,130145],{"align":24683},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[1241,130147,130148,130151,130154],{},[1286,130149,130150],{"align":24683},"背景半透明",[1286,130152,130153],{"align":24683},"背景颜色半透明",[1286,130155,130156],{"align":24683},"background: rgba(0,0,0.3); 后面必须是4个值",[19,130158,130159],{},"颜色渐变：",[39,130161],{"style":41,"src":130162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[39,130164],{"style":41,"src":130165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[44,130167,130169],{"id":130168},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[77,130171,130173],{"className":924,"code":130172,"language":926,"meta":82,"style":82},"\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",[84,130174,130175,130190,130209,130228,130247,130266,130285],{"__ignoreMap":82},[87,130176,130177,130179,130181,130183,130185,130188],{"class":89,"line":90},[87,130178,938],{"class":97},[87,130180,94],{"class":93},[87,130182,943],{"class":205},[87,130184,946],{"class":97},[87,130186,130187],{"class":949},"\"nav\"",[87,130189,953],{"class":97},[87,130191,130192,130194,130196,130198,130200,130202,130205,130207],{"class":89,"line":101},[87,130193,53081],{"class":97},[87,130195,1334],{"class":93},[87,130197,61993],{"class":205},[87,130199,946],{"class":97},[87,130201,61998],{"class":949},[87,130203,130204],{"class":97},">五彩导航1\u003C\u002F",[87,130206,1334],{"class":93},[87,130208,953],{"class":97},[87,130210,130211,130213,130215,130217,130219,130221,130224,130226],{"class":89,"line":120},[87,130212,53081],{"class":97},[87,130214,1334],{"class":93},[87,130216,61993],{"class":205},[87,130218,946],{"class":97},[87,130220,61998],{"class":949},[87,130222,130223],{"class":97},">五彩导航2\u003C\u002F",[87,130225,1334],{"class":93},[87,130227,953],{"class":97},[87,130229,130230,130232,130234,130236,130238,130240,130243,130245],{"class":89,"line":222},[87,130231,53081],{"class":97},[87,130233,1334],{"class":93},[87,130235,61993],{"class":205},[87,130237,946],{"class":97},[87,130239,61998],{"class":949},[87,130241,130242],{"class":97},">五彩导航3\u003C\u002F",[87,130244,1334],{"class":93},[87,130246,953],{"class":97},[87,130248,130249,130251,130253,130255,130257,130259,130262,130264],{"class":89,"line":234},[87,130250,53081],{"class":97},[87,130252,1334],{"class":93},[87,130254,61993],{"class":205},[87,130256,946],{"class":97},[87,130258,61998],{"class":949},[87,130260,130261],{"class":97},">五彩导航4\u003C\u002F",[87,130263,1334],{"class":93},[87,130265,953],{"class":97},[87,130267,130268,130270,130272,130274,130276,130278,130281,130283],{"class":89,"line":256},[87,130269,53081],{"class":97},[87,130271,1334],{"class":93},[87,130273,61993],{"class":205},[87,130275,946],{"class":97},[87,130277,61998],{"class":949},[87,130279,130280],{"class":97},">五彩导航5\u003C\u002F",[87,130282,1334],{"class":93},[87,130284,953],{"class":97},[87,130286,130287,130289,130291],{"class":89,"line":269},[87,130288,963],{"class":97},[87,130290,94],{"class":93},[87,130292,953],{"class":97},[77,130294,130296],{"className":79,"code":130295,"language":81,"meta":82,"style":82},".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",[84,130297,130298,130307,130317,130329,130341,130351,130363,130373,130377,130402,130425,130448,130471],{"__ignoreMap":82},[87,130299,130300,130303,130305],{"class":89,"line":90},[87,130301,130302],{"class":205},".nav",[87,130304,2356],{"class":93},[87,130306,98],{"class":97},[87,130308,130309,130311,130313,130315],{"class":89,"line":101},[87,130310,129089],{"class":104},[87,130312,108],{"class":97},[87,130314,73311],{"class":104},[87,130316,117],{"class":97},[87,130318,130319,130321,130323,130325,130327],{"class":89,"line":120},[87,130320,213],{"class":104},[87,130322,108],{"class":97},[87,130324,1909],{"class":104},[87,130326,245],{"class":171},[87,130328,117],{"class":97},[87,130330,130331,130333,130335,130337,130339],{"class":89,"line":222},[87,130332,225],{"class":104},[87,130334,108],{"class":97},[87,130336,1948],{"class":104},[87,130338,245],{"class":171},[87,130340,117],{"class":97},[87,130342,130343,130345,130347,130349],{"class":89,"line":234},[87,130344,71457],{"class":104},[87,130346,108],{"class":97},[87,130348,318],{"class":104},[87,130350,117],{"class":97},[87,130352,130353,130355,130357,130359,130361],{"class":89,"line":256},[87,130354,128159],{"class":104},[87,130356,108],{"class":97},[87,130358,1948],{"class":104},[87,130360,245],{"class":171},[87,130362,117],{"class":97},[87,130364,130365,130367,130369,130371],{"class":89,"line":269},[87,130366,71833],{"class":104},[87,130368,108],{"class":97},[87,130370,61778],{"class":104},[87,130372,117],{"class":97},[87,130374,130375],{"class":89,"line":463},[87,130376,123],{"class":97},[87,130378,130379,130381,130383,130386,130388,130390,130393,130395,130397,130399],{"class":89,"line":469},[87,130380,130302],{"class":205},[87,130382,2356],{"class":93},[87,130384,130385],{"class":205},":nth-child",[87,130387,165],{"class":97},[87,130389,1313],{"class":104},[87,130391,130392],{"class":97},") { ",[87,130394,130084],{"class":104},[87,130396,108],{"class":97},[87,130398,129504],{"class":104},[87,130400,130401],{"class":97},"; }\n",[87,130403,130404,130406,130408,130410,130412,130414,130416,130418,130420,130423],{"class":89,"line":2287},[87,130405,130302],{"class":205},[87,130407,2356],{"class":93},[87,130409,130385],{"class":205},[87,130411,165],{"class":97},[87,130413,1176],{"class":104},[87,130415,130392],{"class":97},[87,130417,130084],{"class":104},[87,130419,108],{"class":97},[87,130421,130422],{"class":104},"#ff0000",[87,130424,130401],{"class":97},[87,130426,130427,130429,130431,130433,130435,130437,130439,130441,130443,130446],{"class":89,"line":2568},[87,130428,130302],{"class":205},[87,130430,2356],{"class":93},[87,130432,130385],{"class":205},[87,130434,165],{"class":97},[87,130436,1170],{"class":104},[87,130438,130392],{"class":97},[87,130440,130084],{"class":104},[87,130442,108],{"class":97},[87,130444,130445],{"class":104},"#00a4ff",[87,130447,130401],{"class":97},[87,130449,130450,130452,130454,130456,130458,130460,130462,130464,130466,130469],{"class":89,"line":2573},[87,130451,130302],{"class":205},[87,130453,2356],{"class":93},[87,130455,130385],{"class":205},[87,130457,165],{"class":97},[87,130459,1389],{"class":104},[87,130461,130392],{"class":97},[87,130463,130084],{"class":104},[87,130465,108],{"class":97},[87,130467,130468],{"class":104},"#ff00ff",[87,130470,130401],{"class":97},[87,130472,130473,130475,130477,130479,130481,130483,130485,130487,130489,130492],{"class":89,"line":2579},[87,130474,130302],{"class":205},[87,130476,2356],{"class":93},[87,130478,130385],{"class":205},[87,130480,165],{"class":97},[87,130482,1414],{"class":104},[87,130484,130392],{"class":97},[87,130486,130084],{"class":104},[87,130488,108],{"class":97},[87,130490,130491],{"class":104},"#00ff00",[87,130493,130401],{"class":97},[14,130495,130497],{"id":130496},"_83-css三大特性","8.3 css三大特性",[44,130499,130501],{"id":130500},"_831-层叠性","8.3.1 层叠性",[19,130503,130504],{},"为了解决样式冲突问题",[19,130506,130507],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,130509,130510],{},"   ②样式不冲突，不会层叠",[44,130512,130514],{"id":130513},"_832-继承性","8.3.2 继承性",[19,130516,130517],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,130519,130520],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[77,130522,130524],{"className":79,"code":130523,"language":81,"meta":82,"style":82},"p {\n  color: #333;\n}\n",[84,130525,130526,130532,130542],{"__ignoreMap":82},[87,130527,130528,130530],{"class":89,"line":90},[87,130529,19],{"class":93},[87,130531,98],{"class":97},[87,130533,130534,130536,130538,130540],{"class":89,"line":101},[87,130535,71833],{"class":104},[87,130537,108],{"class":97},[87,130539,264],{"class":104},[87,130541,117],{"class":97},[87,130543,130544],{"class":89,"line":120},[87,130545,123],{"class":97},[39,130547],{"style":41,"src":130548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,130550,130551],{},"解释：①行高可以跟单位也可以不跟单位",[19,130553,130554],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,130556,130557],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,130559,130560],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[44,130562,130564],{"id":130563},"_833-优先级","8.3.3 优先级",[1055,130566,130567,130570],{},[29,130568,130569],{},"选择器相同，则执行层叠性",[29,130571,130572],{},"选择器不同，则根据选择器权重执行",[1235,130574,130575,130585],{},[1238,130576,130577],{},[1241,130578,130579,130582],{},[1244,130580,130581],{"align":24683},"选择器",[1244,130583,130584],{"align":24683},"选择器权重",[1281,130586,130587,130595,130603,130611,130619,130627],{},[1241,130588,130589,130592],{},[1286,130590,130591],{"align":24683},"继承 或者*",[1286,130593,130594],{"align":24683},"0，0，0，0",[1241,130596,130597,130600],{},[1286,130598,130599],{"align":24683},"标签选择器",[1286,130601,130602],{"align":24683},"0，0，0，1",[1241,130604,130605,130608],{},[1286,130606,130607],{"align":24683},"类选择器，伪类选择器",[1286,130609,130610],{"align":24683},"0，0，1，0",[1241,130612,130613,130616],{},[1286,130614,130615],{"align":24683},"ID选择器",[1286,130617,130618],{"align":24683},"0，1，0，0",[1241,130620,130621,130624],{},[1286,130622,130623],{"align":24683},"行内样式",[1286,130625,130626],{"align":24683},"1，0，0，0",[1241,130628,130629,130632],{},[1286,130630,130631],{"align":24683},"！important",[1286,130633,130634],{"align":24683},"无穷大",[19,130636,130637],{},"! important用法：",[77,130639,130641],{"className":79,"code":130640,"language":81,"meta":82,"style":82},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[84,130642,130643,130648,130654,130667,130671,130676,130682,130692],{"__ignoreMap":82},[87,130644,130645],{"class":89,"line":90},[87,130646,130647],{"class":199},"\u002F* !important 拥有最高优先级 *\u002F\n",[87,130649,130650,130652],{"class":89,"line":101},[87,130651,94],{"class":93},[87,130653,98],{"class":97},[87,130655,130656,130658,130660,130662,130665],{"class":89,"line":120},[87,130657,71833],{"class":104},[87,130659,108],{"class":97},[87,130661,52583],{"class":104},[87,130663,130664],{"class":171}," !important",[87,130666,117],{"class":97},[87,130668,130669],{"class":89,"line":222},[87,130670,123],{"class":97},[87,130672,130673],{"class":89,"line":234},[87,130674,130675],{"class":199},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[87,130677,130678,130680],{"class":89,"line":256},[87,130679,94],{"class":93},[87,130681,98],{"class":97},[87,130683,130684,130686,130688,130690],{"class":89,"line":269},[87,130685,71833],{"class":104},[87,130687,108],{"class":97},[87,130689,58357],{"class":104},[87,130691,117],{"class":97},[87,130693,130694],{"class":89,"line":463},[87,130695,123],{"class":97},[19,130697,130698],{},"优先级注意点：",[19,130700,130701],{},"①权重是有4组数字组成,但是不会有进位",[19,130703,130704],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,130706,130707],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,130709,130710],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,130712,130713],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,130715,130716],{},"⑥复合选择器",[1235,130718,130719,130729],{},[1238,130720,130721],{},[1241,130722,130723,130726],{},[1244,130724,130725],{"align":24683},"div ul li",[1244,130727,130728],{"align":24683},"0,0,0,3",[1281,130730,130731,130739,130747],{},[1241,130732,130733,130736],{},[1286,130734,130735],{"align":24683},".nav ul li",[1286,130737,130738],{"align":24683},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[1241,130740,130741,130744],{},[1286,130742,130743],{"align":24683},"a:hover",[1286,130745,130746],{"align":24683},"0,0,1,1",[1241,130748,130749,130752],{},[1286,130750,130751],{"align":24683},".nav a",[1286,130753,130746],{"align":24683},[1006,130755,130756],{},"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":82,"searchDepth":101,"depth":101,"links":130758},[130759,130767,130778],{"id":128869,"depth":101,"text":128870,"children":130760},[130761,130762,130763,130764,130765,130766],{"id":128882,"depth":120,"text":128883},{"id":128954,"depth":120,"text":128955},{"id":129026,"depth":120,"text":129027},{"id":129057,"depth":120,"text":129058},{"id":129064,"depth":120,"text":129065},{"id":129217,"depth":120,"text":129218},{"id":129525,"depth":101,"text":129526,"children":130768},[130769,130770,130771,130772,130773,130774,130775,130776,130777],{"id":129532,"depth":120,"text":129533},{"id":129542,"depth":120,"text":129543},{"id":129638,"depth":120,"text":129639},{"id":129709,"depth":120,"text":129710},{"id":129864,"depth":120,"text":129865},{"id":129952,"depth":120,"text":129953},{"id":130004,"depth":120,"text":130005},{"id":130063,"depth":120,"text":130064},{"id":130168,"depth":120,"text":130169},{"id":130496,"depth":101,"text":130497,"children":130779},[130780,130781,130782],{"id":130500,"depth":120,"text":130501},{"id":130513,"depth":120,"text":130514},{"id":130563,"depth":120,"text":130564},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128861,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130789,"title":130790,"body":130791,"description":1026,"extension":1027,"meta":132376,"navigation":1029,"path":132377,"seo":132378,"stem":132379,"__hash__":132380},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130792,"toc":132355},[130793,130796,130800,130803,130806,130809,130812,130815,130818,130821,130825,130833,130870,130906,130909,130923,130928,130962,130965,131058,131063,131066,131096,131099,131104,131112,131116,131123,131169,131213,131218,131221,131224,131227,131230,131233,131236,131238,131241,131245,131250,131294,131299,131302,131305,131341,131346,131349,131352,131355,131358,131390,131393,131396,131399,131431,131434,131437,131440,131444,131447,131479,131482,131486,131506,131509,131517,131520,131524,131529,131532,131564,131569,131572,131606,131610,131615,131618,131621,131652,131655,131672,131677,131729,131789,131794,131848,131886,131890,131894,131897,131901,131909,131912,131914,131925,131930,131978,132012,132015,132018,132021,132024,132068,132071,132074,132077,132080,132083,132086,132130,132133,132136,132139,132142,132145,132148,132154,132157,132201,132204,132207,132210,132213,132216,132260,132263,132265,132268,132272,132276,132314,132318,132321,132324,132328,132336,132340,132343,132346,132349,132352],[10,130794,130790],{"id":130795},"_9-css盒模型浮动与切图",[14,130797,130799],{"id":130798},"_91-盒子模型","9.1 盒子模型",[19,130801,130802],{},"利用盒子来设计网页",[19,130804,130805],{},"盒子包含：边框、外边距、内边距、实际内容",[19,130807,130808],{},"网页布局设置：",[19,130810,130811],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,130813,130814],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,130816,130817],{},"③往盒子里装内容",[39,130819],{"style":41,"src":130820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[44,130822,130824],{"id":130823},"_911-边框border","9.1.1 边框（border）",[1055,130826,130827,130830],{},[29,130828,130829],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[29,130831,130832],{},"语法",[77,130834,130836],{"className":79,"code":130835,"language":81,"meta":82,"style":82},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[84,130837,130838,130843,130849,130866],{"__ignoreMap":82},[87,130839,130840],{"class":89,"line":90},[87,130841,130842],{"class":199},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[87,130844,130845,130847],{"class":89,"line":101},[87,130846,94],{"class":93},[87,130848,98],{"class":97},[87,130850,130851,130853,130855,130857,130859,130861,130864],{"class":89,"line":120},[87,130852,237],{"class":104},[87,130854,108],{"class":97},[87,130856,1313],{"class":104},[87,130858,245],{"class":171},[87,130860,248],{"class":104},[87,130862,130863],{"class":104}," #ccc",[87,130865,117],{"class":97},[87,130867,130868],{"class":89,"line":222},[87,130869,123],{"class":97},[1235,130871,130872,130880],{},[1238,130873,130874],{},[1241,130875,130876,130878],{},[1244,130877,130073],{"align":24683},[1244,130879,103622],{"align":24683},[1281,130881,130882,130890,130898],{},[1241,130883,130884,130887],{},[1286,130885,130886],{"align":24683},"border-width",[1286,130888,130889],{"align":24683},"定义边框粗细，单位是px",[1241,130891,130892,130895],{},[1286,130893,130894],{"align":24683},"border-style",[1286,130896,130897],{"align":24683},"边框的样式",[1241,130899,130900,130903],{},[1286,130901,130902],{"align":24683},"border-color",[1286,130904,130905],{"align":24683},"边框的颜色",[19,130907,130908],{},"边框样式 border-style 可以设置如下值：",[26,130910,130911,130914,130917,130920],{},[29,130912,130913],{},"none：没有边框即忽略所有边框的宽度（默认值）",[29,130915,130916],{},"solid：边框为单实线(最为常用的)",[29,130918,130919],{},"dashed：边框为虚线",[29,130921,130922],{},"dotted：边框为点线",[1055,130924,130925],{"start":120},[29,130926,130927],{},"边框的合写分写",[77,130929,130930],{"className":79,"code":130835,"language":81,"meta":82,"style":82},[84,130931,130932,130936,130942,130958],{"__ignoreMap":82},[87,130933,130934],{"class":89,"line":90},[87,130935,130842],{"class":199},[87,130937,130938,130940],{"class":89,"line":101},[87,130939,94],{"class":93},[87,130941,98],{"class":97},[87,130943,130944,130946,130948,130950,130952,130954,130956],{"class":89,"line":120},[87,130945,237],{"class":104},[87,130947,108],{"class":97},[87,130949,1313],{"class":104},[87,130951,245],{"class":171},[87,130953,248],{"class":104},[87,130955,130863],{"class":104},[87,130957,117],{"class":97},[87,130959,130960],{"class":89,"line":222},[87,130961,123],{"class":97},[19,130963,130964],{},"边框分开写法：",[77,130966,130968],{"className":79,"code":130967,"language":81,"meta":82,"style":82},"\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",[84,130969,130970,130975,130981,130999,131017,131036,131054],{"__ignoreMap":82},[87,130971,130972],{"class":89,"line":90},[87,130973,130974],{"class":199},"\u002F* 边框分开写法 *\u002F\n",[87,130976,130977,130979],{"class":89,"line":101},[87,130978,94],{"class":93},[87,130980,98],{"class":97},[87,130982,130983,130986,130988,130990,130992,130994,130997],{"class":89,"line":120},[87,130984,130985],{"class":104},"  border-top",[87,130987,108],{"class":97},[87,130989,1313],{"class":104},[87,130991,245],{"class":171},[87,130993,248],{"class":104},[87,130995,130996],{"class":104}," #000",[87,130998,117],{"class":97},[87,131000,131001,131004,131006,131008,131010,131012,131015],{"class":89,"line":222},[87,131002,131003],{"class":104},"  border-right",[87,131005,108],{"class":97},[87,131007,1176],{"class":104},[87,131009,245],{"class":171},[87,131011,63176],{"class":104},[87,131013,131014],{"class":104}," #333",[87,131016,117],{"class":97},[87,131018,131019,131022,131024,131026,131028,131031,131034],{"class":89,"line":234},[87,131020,131021],{"class":104},"  border-bottom",[87,131023,108],{"class":97},[87,131025,1170],{"class":104},[87,131027,245],{"class":171},[87,131029,131030],{"class":104}," dotted",[87,131032,131033],{"class":104}," #666",[87,131035,117],{"class":97},[87,131037,131038,131041,131043,131045,131047,131049,131052],{"class":89,"line":256},[87,131039,131040],{"class":104},"  border-left",[87,131042,108],{"class":97},[87,131044,1313],{"class":104},[87,131046,245],{"class":171},[87,131048,248],{"class":104},[87,131050,131051],{"class":104}," #999",[87,131053,117],{"class":97},[87,131055,131056],{"class":89,"line":269},[87,131057,123],{"class":97},[1055,131059,131060],{"start":222},[29,131061,131062],{},"表格的细线边框",[19,131064,131065],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[77,131067,131069],{"className":79,"code":131068,"language":81,"meta":82,"style":82},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[84,131070,131071,131076,131082,131092],{"__ignoreMap":82},[87,131072,131073],{"class":89,"line":90},[87,131074,131075],{"class":199},"\u002F* 表格细线边框合并 *\u002F\n",[87,131077,131078,131080],{"class":89,"line":101},[87,131079,1235],{"class":93},[87,131081,98],{"class":97},[87,131083,131084,131086,131088,131090],{"class":89,"line":120},[87,131085,71508],{"class":104},[87,131087,108],{"class":97},[87,131089,65968],{"class":104},[87,131091,117],{"class":97},[87,131093,131094],{"class":89,"line":222},[87,131095,123],{"class":97},[19,131097,131098],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[1055,131100,131101],{"start":234},[29,131102,131103],{},"解决边框额外增加盒子的实际大小的方法：",[26,131105,131106,131109],{},[29,131107,131108],{},"测量盒子大小的时候,不量边框",[29,131110,131111],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[44,131113,131115],{"id":131114},"_912-内边距","9.1.2 内边距",[1055,131117,131118,131121],{},[29,131119,131120],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[29,131122,130832],{},[1235,131124,131125,131135],{},[1238,131126,131127],{},[1241,131128,131129,131132],{},[1244,131130,131131],{"align":24683},"值的个数",[1244,131133,131134],{"align":24683},"表达意思",[1281,131136,131137,131145,131153,131161],{},[1241,131138,131139,131142],{},[1286,131140,131141],{"align":24683},"padding: 5px;",[1286,131143,131144],{"align":24683},"1个值，代表上下左右都有5个元素",[1241,131146,131147,131150],{},[1286,131148,131149],{"align":24683},"padding: 5px 10px;",[1286,131151,131152],{"align":24683},"2个值，代表上下内边距为5像素，左右内边距为10像素",[1241,131154,131155,131158],{},[1286,131156,131157],{"align":24683},"padding: 5px 10px 20px;",[1286,131159,131160],{"align":24683},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[1241,131162,131163,131166],{},[1286,131164,131165],{"align":24683},"padding: 5px 10px 20px 30px;",[1286,131167,131168],{"align":24683},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[1235,131170,131171,131179],{},[1238,131172,131173],{},[1241,131174,131175,131177],{},[1244,131176,130073],{"align":24683},[1244,131178,103622],{"align":24683},[1281,131180,131181,131189,131197,131205],{},[1241,131182,131183,131186],{},[1286,131184,131185],{"align":24683},"padding-left",[1286,131187,131188],{"align":24683},"左内边距",[1241,131190,131191,131194],{},[1286,131192,131193],{"align":24683},"padding-right",[1286,131195,131196],{"align":24683},"右内边距",[1241,131198,131199,131202],{},[1286,131200,131201],{"align":24683},"padding-top",[1286,131203,131204],{"align":24683},"上内边距",[1241,131206,131207,131210],{},[1286,131208,131209],{"align":24683},"padding-bottom",[1286,131211,131212],{"align":24683},"下内边距",[1055,131214,131215],{"start":120},[29,131216,131217],{},"内边距会影响盒子的实际大小",[19,131219,131220],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,131222,131223],{},"①内容和边框有了距离，添加了内边距",[19,131225,131226],{},"②padding影响了盒子实际大小",[19,131228,131229],{},"内边距对盒子大小的影响：",[19,131231,131232],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,131234,131235],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,131237,96146],{},[19,131239,131240],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[44,131242,131244],{"id":131243},"_913-外边距","9.1.3 外边距",[1055,131246,131247],{},[29,131248,131249],{},"控制盒子与盒子之间的距离",[1235,131251,131252,131260],{},[1238,131253,131254],{},[1241,131255,131256,131258],{},[1244,131257,130073],{"align":24683},[1244,131259,103622],{"align":24683},[1281,131261,131262,131270,131278,131286],{},[1241,131263,131264,131267],{},[1286,131265,131266],{"align":24683},"margin-left",[1286,131268,131269],{"align":24683},"左外边距",[1241,131271,131272,131275],{},[1286,131273,131274],{"align":24683},"margin-right",[1286,131276,131277],{"align":24683},"右外边距",[1241,131279,131280,131283],{},[1286,131281,131282],{"align":24683},"margin-top",[1286,131284,131285],{"align":24683},"上外边距",[1241,131287,131288,131291],{},[1286,131289,131290],{"align":24683},"margin-bottom",[1286,131292,131293],{"align":24683},"下外边距",[1055,131295,131296],{"start":101},[29,131297,131298],{},"外边距可以让块级盒子水平居中的两个条件：",[19,131300,131301],{},"①盒子必须指定了宽度（width）",[19,131303,131304],{},"②盒子左右的外边距都设置为 auto",[77,131306,131308],{"className":79,"code":131307,"language":81,"meta":82,"style":82},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[84,131309,131310,131315,131322,131337],{"__ignoreMap":82},[87,131311,131312],{"class":89,"line":90},[87,131313,131314],{"class":199},"\u002F* margin 复合写法（同上） *\u002F\n",[87,131316,131317,131320],{"class":89,"line":101},[87,131318,131319],{"class":205},".box",[87,131321,98],{"class":97},[87,131323,131324,131326,131328,131330,131332,131334],{"class":89,"line":120},[87,131325,105],{"class":104},[87,131327,108],{"class":97},[87,131329,111],{"class":104},[87,131331,114],{"class":104},[87,131333,324],{"class":97},[87,131335,131336],{"class":199},"\u002F* 块级盒子水平居中 *\u002F\n",[87,131338,131339],{"class":89,"line":222},[87,131340,123],{"class":97},[1055,131342,131343],{"start":120},[29,131344,131345],{},"外边距塌陷问题",[19,131347,131348],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[39,131350],{"style":41,"src":131351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,131353,131354],{},"解决方案：",[19,131356,131357],{},"①可以为父亲元素定义上边距",[77,131359,131360],{"className":79,"code":131307,"language":81,"meta":82,"style":82},[84,131361,131362,131366,131372,131386],{"__ignoreMap":82},[87,131363,131364],{"class":89,"line":90},[87,131365,131314],{"class":199},[87,131367,131368,131370],{"class":89,"line":101},[87,131369,131319],{"class":205},[87,131371,98],{"class":97},[87,131373,131374,131376,131378,131380,131382,131384],{"class":89,"line":120},[87,131375,105],{"class":104},[87,131377,108],{"class":97},[87,131379,111],{"class":104},[87,131381,114],{"class":104},[87,131383,324],{"class":97},[87,131385,131336],{"class":199},[87,131387,131388],{"class":89,"line":222},[87,131389,123],{"class":97},[19,131391,131392],{},"②可以为父亲元素定义上内边距",[19,131394,131395],{},"③可以为父亲元素添加overflow:hidden",[39,131397],{"style":41,"src":131398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[77,131400,131401],{"className":79,"code":131307,"language":81,"meta":82,"style":82},[84,131402,131403,131407,131413,131427],{"__ignoreMap":82},[87,131404,131405],{"class":89,"line":90},[87,131406,131314],{"class":199},[87,131408,131409,131411],{"class":89,"line":101},[87,131410,131319],{"class":205},[87,131412,98],{"class":97},[87,131414,131415,131417,131419,131421,131423,131425],{"class":89,"line":120},[87,131416,105],{"class":104},[87,131418,108],{"class":97},[87,131420,111],{"class":104},[87,131422,114],{"class":104},[87,131424,324],{"class":97},[87,131426,131336],{"class":199},[87,131428,131429],{"class":89,"line":222},[87,131430,123],{"class":97},[39,131432],{"style":41,"src":131433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,131435,131436],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,131438,131439],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[44,131441,131443],{"id":131442},"_914-清除内外边距","9.1.4 清除内外边距",[19,131445,131446],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[77,131448,131449],{"className":79,"code":131307,"language":81,"meta":82,"style":82},[84,131450,131451,131455,131461,131475],{"__ignoreMap":82},[87,131452,131453],{"class":89,"line":90},[87,131454,131314],{"class":199},[87,131456,131457,131459],{"class":89,"line":101},[87,131458,131319],{"class":205},[87,131460,98],{"class":97},[87,131462,131463,131465,131467,131469,131471,131473],{"class":89,"line":120},[87,131464,105],{"class":104},[87,131466,108],{"class":97},[87,131468,111],{"class":104},[87,131470,114],{"class":104},[87,131472,324],{"class":97},[87,131474,131336],{"class":199},[87,131476,131477],{"class":89,"line":222},[87,131478,123],{"class":97},[19,131480,131481],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[44,131483,131485],{"id":131484},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[26,131487,131488,131491,131494,131497,131500,131503],{},[29,131489,131490],{},"文件→打开 ：可以打开我们要测量的图片",[29,131492,131493],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[29,131495,131496],{},"右击标尺，把里面的单位改为像素",[29,131498,131499],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[29,131501,131502],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[29,131504,131505],{},"用选区拖动 可以测量大小",[39,131507],{"style":41,"src":131508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[26,131510,131511,131514],{},[29,131512,131513],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[29,131515,131516],{},"吸管取色工具",[39,131518],{"style":41,"src":131519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[44,131521,131523],{"id":131522},"_916-案例","9.1.6 案例",[1055,131525,131526],{},[29,131527,131528],{},"小米商品",[39,131530],{"style":41,"src":131531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[77,131533,131534],{"className":79,"code":131307,"language":81,"meta":82,"style":82},[84,131535,131536,131540,131546,131560],{"__ignoreMap":82},[87,131537,131538],{"class":89,"line":90},[87,131539,131314],{"class":199},[87,131541,131542,131544],{"class":89,"line":101},[87,131543,131319],{"class":205},[87,131545,98],{"class":97},[87,131547,131548,131550,131552,131554,131556,131558],{"class":89,"line":120},[87,131549,105],{"class":104},[87,131551,108],{"class":97},[87,131553,111],{"class":104},[87,131555,114],{"class":104},[87,131557,324],{"class":97},[87,131559,131336],{"class":199},[87,131561,131562],{"class":89,"line":222},[87,131563,123],{"class":97},[1055,131565,131566],{"start":101},[29,131567,131568],{},"快报模块",[39,131570],{"style":41,"src":131571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[77,131573,131574],{"className":924,"code":925,"language":926,"meta":82,"style":82},[84,131575,131576,131580,131594,131598],{"__ignoreMap":82},[87,131577,131578],{"class":89,"line":90},[87,131579,933],{"class":199},[87,131581,131582,131584,131586,131588,131590,131592],{"class":89,"line":101},[87,131583,938],{"class":97},[87,131585,94],{"class":93},[87,131587,943],{"class":205},[87,131589,946],{"class":97},[87,131591,950],{"class":949},[87,131593,953],{"class":97},[87,131595,131596],{"class":89,"line":120},[87,131597,958],{"class":97},[87,131599,131600,131602,131604],{"class":89,"line":222},[87,131601,963],{"class":97},[87,131603,94],{"class":93},[87,131605,953],{"class":97},[44,131607,131609],{"id":131608},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[1055,131611,131612],{},[29,131613,131614],{},"圆角边框",[19,131616,131617],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[39,131619],{"style":41,"src":131620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[77,131622,131624],{"className":79,"code":131623,"language":81,"meta":82,"style":82},"div {\n  border: 1px solid #ccc;\n}\n",[84,131625,131626,131632,131648],{"__ignoreMap":82},[87,131627,131628,131630],{"class":89,"line":90},[87,131629,94],{"class":93},[87,131631,98],{"class":97},[87,131633,131634,131636,131638,131640,131642,131644,131646],{"class":89,"line":101},[87,131635,237],{"class":104},[87,131637,108],{"class":97},[87,131639,1313],{"class":104},[87,131641,245],{"class":171},[87,131643,248],{"class":104},[87,131645,130863],{"class":104},[87,131647,117],{"class":97},[87,131649,131650],{"class":89,"line":120},[87,131651,123],{"class":97},[19,131653,131654],{},"解释:",[26,131656,131657,131660,131663,131666,131669],{},[29,131658,131659],{},"参数值可以为数值或百分比的形式",[29,131661,131662],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[29,131664,131665],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[29,131667,131668],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[29,131670,131671],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[1055,131673,131674],{"start":101},[29,131675,131676],{},"盒子阴影",[77,131678,131680],{"className":79,"code":131679,"language":81,"meta":82,"style":82},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[84,131681,131682,131688,131725],{"__ignoreMap":82},[87,131683,131684,131686],{"class":89,"line":90},[87,131685,94],{"class":93},[87,131687,98],{"class":97},[87,131689,131690,131693,131695,131697,131699,131701,131703,131705,131707,131709,131711,131713,131715,131717,131719,131721,131723],{"class":89,"line":101},[87,131691,131692],{"class":104},"  box-shadow",[87,131694,108],{"class":97},[87,131696,111],{"class":104},[87,131698,15705],{"class":104},[87,131700,245],{"class":171},[87,131702,2993],{"class":104},[87,131704,245],{"class":171},[87,131706,79694],{"class":104},[87,131708,165],{"class":97},[87,131710,111],{"class":104},[87,131712,13385],{"class":97},[87,131714,111],{"class":104},[87,131716,13385],{"class":97},[87,131718,111],{"class":104},[87,131720,13385],{"class":97},[87,131722,87136],{"class":104},[87,131724,175],{"class":97},[87,131726,131727],{"class":89,"line":120},[87,131728,123],{"class":97},[1235,131730,131731,131739],{},[1238,131732,131733],{},[1241,131734,131735,131737],{},[1244,131736,1249],{"align":24683},[1244,131738,28436],{"align":24683},[1281,131740,131741,131749,131757,131765,131773,131781],{},[1241,131742,131743,131746],{},[1286,131744,131745],{"align":24683},"h-shadow",[1286,131747,131748],{"align":24683},"必需,水平阴影的位置,允许负值",[1241,131750,131751,131754],{},[1286,131752,131753],{"align":24683},"v-shadow",[1286,131755,131756],{"align":24683},"必需,垂直阴影的位置,允许负值",[1241,131758,131759,131762],{},[1286,131760,131761],{"align":24683},"blur",[1286,131763,131764],{"align":24683},"可选,模糊距离,就是影子的虚实",[1241,131766,131767,131770],{},[1286,131768,131769],{"align":24683},"spread",[1286,131771,131772],{"align":24683},"可选,阴影尺寸",[1241,131774,131775,131778],{},[1286,131776,131777],{"align":24683},"color",[1286,131779,131780],{"align":24683},"可选,阴影的颜色",[1241,131782,131783,131786],{},[1286,131784,131785],{"align":24683},"inset",[1286,131787,131788],{"align":24683},"可选,将外部阴影(outset)改为内部阴影",[1055,131790,131791],{"start":120},[29,131792,131793],{},"文字阴影",[77,131795,131797],{"className":79,"code":131796,"language":81,"meta":82,"style":82},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[84,131798,131799,131805,131844],{"__ignoreMap":82},[87,131800,131801,131803],{"class":89,"line":90},[87,131802,19],{"class":93},[87,131804,98],{"class":97},[87,131806,131807,131810,131812,131814,131816,131818,131820,131822,131824,131826,131828,131830,131832,131834,131836,131838,131840,131842],{"class":89,"line":101},[87,131808,131809],{"class":104},"  text-shadow",[87,131811,108],{"class":97},[87,131813,1313],{"class":104},[87,131815,245],{"class":171},[87,131817,568],{"class":104},[87,131819,245],{"class":171},[87,131821,15705],{"class":104},[87,131823,245],{"class":171},[87,131825,79694],{"class":104},[87,131827,165],{"class":97},[87,131829,111],{"class":104},[87,131831,13385],{"class":97},[87,131833,111],{"class":104},[87,131835,13385],{"class":97},[87,131837,111],{"class":104},[87,131839,13385],{"class":97},[87,131841,101447],{"class":104},[87,131843,175],{"class":97},[87,131845,131846],{"class":89,"line":120},[87,131847,123],{"class":97},[1235,131849,131850,131858],{},[1238,131851,131852],{},[1241,131853,131854,131856],{},[1244,131855,1249],{"align":24683},[1244,131857,28436],{"align":24683},[1281,131859,131860,131866,131873,131880],{},[1241,131861,131862,131864],{},[1286,131863,131745],{"align":24683},[1286,131865,131748],{"align":24683},[1241,131867,131868,131870],{},[1286,131869,131753],{"align":24683},[1286,131871,131872],{"align":24683},"必需,垂直阴影位置,允许负值",[1241,131874,131875,131877],{},[1286,131876,131761],{"align":24683},[1286,131878,131879],{"align":24683},"可选,模糊的距离",[1241,131881,131882,131884],{},[1286,131883,131777],{"align":24683},[1286,131885,131780],{"align":24683},[14,131887,131889],{"id":131888},"_92-浮动","9.2 浮动",[44,131891,131893],{"id":131892},"_921-浮动介绍","9.2.1 浮动介绍",[19,131895,131896],{},"在16.2中详细介绍",[44,131898,131900],{"id":131899},"_922-清除浮动","9.2.2 清除浮动",[1055,131902,131903,131906],{},[29,131904,131905],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[29,131907,131908],{},"清除浮动的本质",[19,131910,131911],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131913,9975],{},[26,131915,131916,131919,131922],{},[29,131917,131918],{},"如果父盒子本身有高度，则不需要清除浮动",[29,131920,131921],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[29,131923,131924],{},"父级有了高度，就不会影响下面的标准流了",[1055,131926,131927],{"start":120},[29,131928,131929],{},"清除浮动样式",[77,131931,131933],{"className":79,"code":131932,"language":81,"meta":82,"style":82},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[84,131934,131935,131942,131953,131957,131964,131974],{"__ignoreMap":82},[87,131936,131937,131940],{"class":89,"line":90},[87,131938,131939],{"class":205},".left",[87,131941,98],{"class":97},[87,131943,131944,131947,131949,131951],{"class":89,"line":101},[87,131945,131946],{"class":104},"  float",[87,131948,108],{"class":97},[87,131950,24683],{"class":104},[87,131952,117],{"class":97},[87,131954,131955],{"class":89,"line":120},[87,131956,123],{"class":97},[87,131958,131959,131962],{"class":89,"line":222},[87,131960,131961],{"class":205},".right",[87,131963,98],{"class":97},[87,131965,131966,131968,131970,131972],{"class":89,"line":234},[87,131967,131946],{"class":104},[87,131969,108],{"class":97},[87,131971,73450],{"class":104},[87,131973,117],{"class":97},[87,131975,131976],{"class":89,"line":256},[87,131977,123],{"class":97},[1235,131979,131980,131988],{},[1238,131981,131982],{},[1241,131983,131984,131986],{},[1244,131985,127939],{"align":24683},[1244,131987,28436],{"align":24683},[1281,131989,131990,131997,132004],{},[1241,131991,131992,131994],{},[1286,131993,24683],{"align":24683},[1286,131995,131996],{"align":24683},"不允许左侧有浮动元素（清除左侧浮动的影响）",[1241,131998,131999,132001],{},[1286,132000,73450],{"align":24683},[1286,132002,132003],{"align":24683},"不允许右侧有浮动元素（清除右侧浮动的影响）",[1241,132005,132006,132009],{},[1286,132007,132008],{"align":24683},"both",[1286,132010,132011],{"align":24683},"同时清除左右侧浮动的影响",[19,132013,132014],{},"法一",[19,132016,132017],{},"额外标签法也称为隔墙法",[19,132019,132020],{},"使用方式：",[19,132022,132023],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[77,132025,132026],{"className":79,"code":131932,"language":81,"meta":82,"style":82},[84,132027,132028,132034,132044,132048,132054,132064],{"__ignoreMap":82},[87,132029,132030,132032],{"class":89,"line":90},[87,132031,131939],{"class":205},[87,132033,98],{"class":97},[87,132035,132036,132038,132040,132042],{"class":89,"line":101},[87,132037,131946],{"class":104},[87,132039,108],{"class":97},[87,132041,24683],{"class":104},[87,132043,117],{"class":97},[87,132045,132046],{"class":89,"line":120},[87,132047,123],{"class":97},[87,132049,132050,132052],{"class":89,"line":222},[87,132051,131961],{"class":205},[87,132053,98],{"class":97},[87,132055,132056,132058,132060,132062],{"class":89,"line":234},[87,132057,131946],{"class":104},[87,132059,108],{"class":97},[87,132061,73450],{"class":104},[87,132063,117],{"class":97},[87,132065,132066],{"class":89,"line":256},[87,132067,123],{"class":97},[19,132069,132070],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132072,132073],{},"优点： 通俗易懂，书写方便",[19,132075,132076],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132078,132079],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132081,132082],{},"法二",[19,132084,132085],{},"父级添加overflow属性",[77,132087,132088],{"className":79,"code":131932,"language":81,"meta":82,"style":82},[84,132089,132090,132096,132106,132110,132116,132126],{"__ignoreMap":82},[87,132091,132092,132094],{"class":89,"line":90},[87,132093,131939],{"class":205},[87,132095,98],{"class":97},[87,132097,132098,132100,132102,132104],{"class":89,"line":101},[87,132099,131946],{"class":104},[87,132101,108],{"class":97},[87,132103,24683],{"class":104},[87,132105,117],{"class":97},[87,132107,132108],{"class":89,"line":120},[87,132109,123],{"class":97},[87,132111,132112,132114],{"class":89,"line":222},[87,132113,131961],{"class":205},[87,132115,98],{"class":97},[87,132117,132118,132120,132122,132124],{"class":89,"line":234},[87,132119,131946],{"class":104},[87,132121,108],{"class":97},[87,132123,73450],{"class":104},[87,132125,117],{"class":97},[87,132127,132128],{"class":89,"line":256},[87,132129,123],{"class":97},[19,132131,132132],{},"overflow: hidden;",[19,132134,132135],{},"优点：代码简洁",[19,132137,132138],{},"缺点：无法显示溢出的部分",[19,132140,132141],{},"注意：是给父元素添加代码",[19,132143,132144],{},"法三",[19,132146,132147],{},"父级添加after伪元素",[19,132149,132150,132153],{},[132151,132152],"after",{}," 方式是额外标签法的升级版",[19,132155,132156],{},"使用的时候复制就可以",[77,132158,132159],{"className":79,"code":131932,"language":81,"meta":82,"style":82},[84,132160,132161,132167,132177,132181,132187,132197],{"__ignoreMap":82},[87,132162,132163,132165],{"class":89,"line":90},[87,132164,131939],{"class":205},[87,132166,98],{"class":97},[87,132168,132169,132171,132173,132175],{"class":89,"line":101},[87,132170,131946],{"class":104},[87,132172,108],{"class":97},[87,132174,24683],{"class":104},[87,132176,117],{"class":97},[87,132178,132179],{"class":89,"line":120},[87,132180,123],{"class":97},[87,132182,132183,132185],{"class":89,"line":222},[87,132184,131961],{"class":205},[87,132186,98],{"class":97},[87,132188,132189,132191,132193,132195],{"class":89,"line":234},[87,132190,131946],{"class":104},[87,132192,108],{"class":97},[87,132194,73450],{"class":104},[87,132196,117],{"class":97},[87,132198,132199],{"class":89,"line":256},[87,132200,123],{"class":97},[19,132202,132203],{},"优点：没有增加标签，结构更简单",[19,132205,132206],{},"缺点：照顾低版本浏览器",[19,132208,132209],{},"代表网站： 百度、淘宝网、网易等",[19,132211,132212],{},"法四",[19,132214,132215],{},"父级添加双伪元素",[77,132217,132218],{"className":79,"code":131932,"language":81,"meta":82,"style":82},[84,132219,132220,132226,132236,132240,132246,132256],{"__ignoreMap":82},[87,132221,132222,132224],{"class":89,"line":90},[87,132223,131939],{"class":205},[87,132225,98],{"class":97},[87,132227,132228,132230,132232,132234],{"class":89,"line":101},[87,132229,131946],{"class":104},[87,132231,108],{"class":97},[87,132233,24683],{"class":104},[87,132235,117],{"class":97},[87,132237,132238],{"class":89,"line":120},[87,132239,123],{"class":97},[87,132241,132242,132244],{"class":89,"line":222},[87,132243,131961],{"class":205},[87,132245,98],{"class":97},[87,132247,132248,132250,132252,132254],{"class":89,"line":234},[87,132249,131946],{"class":104},[87,132251,108],{"class":97},[87,132253,73450],{"class":104},[87,132255,117],{"class":97},[87,132257,132258],{"class":89,"line":256},[87,132259,123],{"class":97},[19,132261,132262],{},"优点：代码更简洁",[19,132264,132206],{},[19,132266,132267],{},"代表网站：小米、腾讯等",[14,132269,132271],{"id":132270},"_93-ps切图","9.3 PS切图",[44,132273,132275],{"id":132274},"_931-常见图片格式","9.3.1 常见图片格式",[1235,132277,132278,132288],{},[1238,132279,132280],{},[1241,132281,132282,132285],{},[1244,132283,132284],{"align":24683},"jpg图像格式",[1244,132286,132287],{"align":24683},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[1281,132289,132290,132298,132306],{},[1241,132291,132292,132295],{},[1286,132293,132294],{"align":24683},"gif图像格式",[1286,132296,132297],{"align":24683},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[1241,132299,132300,132303],{},[1286,132301,132302],{"align":24683},"png图像格式",[1286,132304,132305],{"align":24683},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[1241,132307,132308,132311],{},[1286,132309,132310],{"align":24683},"PSD图像格式",[1286,132312,132313],{"align":24683},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[44,132315,132317],{"id":132316},"_932-图层切图","9.3.2 图层切图",[19,132319,132320],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,132322,132323],{},"按住shift选中两个图层->图层菜单->合并图层",[44,132325,132327],{"id":132326},"_933-切片切图","9.3.3 切片切图",[26,132329,132330,132333],{},[29,132331,132332],{},"利用切片工具手动划出",[29,132334,132335],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[44,132337,132339],{"id":132338},"_934-切图步骤","9.3.4 切图步骤",[19,132341,132342],{},"用切片工具选中：",[39,132344],{"style":41,"src":132345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,132347,132348],{},"文件 -> 导出",[39,132350],{"style":41,"src":132351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1006,132353,132354],{},"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":82,"searchDepth":101,"depth":101,"links":132356},[132357,132366,132370],{"id":130798,"depth":101,"text":130799,"children":132358},[132359,132360,132361,132362,132363,132364,132365],{"id":130823,"depth":120,"text":130824},{"id":131114,"depth":120,"text":131115},{"id":131243,"depth":120,"text":131244},{"id":131442,"depth":120,"text":131443},{"id":131484,"depth":120,"text":131485},{"id":131522,"depth":120,"text":131523},{"id":131608,"depth":120,"text":131609},{"id":131888,"depth":101,"text":131889,"children":132367},[132368,132369],{"id":131892,"depth":120,"text":131893},{"id":131899,"depth":120,"text":131900},{"id":132270,"depth":101,"text":132271,"children":132371},[132372,132373,132374,132375],{"id":132274,"depth":120,"text":132275},{"id":132316,"depth":120,"text":132317},{"id":132326,"depth":120,"text":132327},{"id":132338,"depth":120,"text":132339},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130790,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132382,"title":132383,"body":132384,"description":1026,"extension":1027,"meta":133025,"navigation":1029,"path":133026,"seo":133027,"stem":133028,"__hash__":133029},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132385,"toc":133013},[132386,132389,132393,132419,132453,132457,132461,132464,132506,132513,132523,132531,132533,132536,132539,132542,132549,132563,132567,132570,132599,132603,132606,132620,132624,132627,132655,132659,132662,132688,132692,132697,132730,132735,132763,132767,132784,132830,132835,132879,132896,133003,133011],[10,132387,132383],{"id":132388},"_10-css规范与学成在线案例",[14,132390,132392],{"id":132391},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[1055,132394,132395,132401,132407,132413],{},[29,132396,132397,132400],{},[57,132398,132399],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[29,132402,132403,132406],{},[57,132404,132405],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[29,132408,132409,132412],{},[57,132410,132411],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[29,132414,132415,132418],{},[57,132416,132417],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[77,132420,132421],{"className":79,"code":130835,"language":81,"meta":82,"style":82},[84,132422,132423,132427,132433,132449],{"__ignoreMap":82},[87,132424,132425],{"class":89,"line":90},[87,132426,130842],{"class":199},[87,132428,132429,132431],{"class":89,"line":101},[87,132430,94],{"class":93},[87,132432,98],{"class":97},[87,132434,132435,132437,132439,132441,132443,132445,132447],{"class":89,"line":120},[87,132436,237],{"class":104},[87,132438,108],{"class":97},[87,132440,1313],{"class":104},[87,132442,245],{"class":171},[87,132444,248],{"class":104},[87,132446,130863],{"class":104},[87,132448,117],{"class":97},[87,132450,132451],{"class":89,"line":222},[87,132452,123],{"class":97},[14,132454,132456],{"id":132455},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[44,132458,132460],{"id":132459},"_1021-header头部制作","10.2.1 header头部制作",[39,132462],{"style":41,"src":132463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[26,132465,132466,132473,132480,132486,132493,132500],{},[29,132467,132468,132469,132472],{},"1号是版心盒子 ",[57,132470,132471],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[29,132474,132475,132476,132479],{},"版心盒子 里面包含 2号盒子 ",[57,132477,132478],{},"logo"," 图标",[29,132481,132482,132483,132485],{},"版心盒子 里面包含 3号盒子 ",[57,132484,54649],{}," 导航栏",[29,132487,132488,132489,132492],{},"版心盒子 里面包含 4号盒子 ",[57,132490,132491],{},"search"," 搜索框",[29,132494,132495,132496,132499],{},"版心盒子 里面包含 5号盒子 ",[57,132497,132498],{},"user"," 个人信息",[29,132501,132502,132503],{},"注意，要求里面的 ",[57,132504,132505],{},"4个子盒子 必须都浮动",[1055,132507,132508],{},[29,132509,132510],{},[57,132511,132512],{},"导航栏注意点:",[19,132514,132515,132516,132519,132520],{},"实际开发中， ",[57,132517,132518],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[57,132521,132522],{},"用 li 包含链接(li+a)的做法",[26,132524,132525,132528],{},[29,132526,132527],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[29,132529,132530],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,132532,9975],{},[19,132534,132535],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132537,132538],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132540,132541],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[1055,132543,132544],{"start":101},[29,132545,132546],{},[57,132547,132548],{},"4号盒子search的细节：",[26,132550,132551,132554,132557],{},[29,132552,132553],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[29,132555,132556],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[29,132558,132559,132562],{},[84,132560,132561],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[44,132564,132566],{"id":132565},"_1022-banner制作","10.2.2 banner制作",[39,132568],{"style":41,"src":132569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[26,132571,132572,132579,132585,132592],{},[29,132573,132574,132575,132578],{},"1号盒子是通栏的大盒子 ",[57,132576,132577],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[29,132580,132581,132582,132584],{},"2号盒子是版心 ",[57,132583,1887],{}," ， 要水平居中对齐",[29,132586,132587,132588,132591],{},"3号盒子版心内，左对齐 ",[57,132589,132590],{},"subnav"," 侧导航栏",[29,132593,132594,132595,132598],{},"4号盒子版心内，右对齐 ",[57,132596,132597],{},"course"," 课程",[44,132600,132602],{"id":132601},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[39,132604],{"style":41,"src":132605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[26,132607,132608,132611,132614,132617],{},[29,132609,132610],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[29,132612,132613],{},"1号盒子是标题 H3 左侧浮动",[29,132615,132616],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[29,132618,132619],{},"3号盒子 右浮动 mod 修改",[44,132621,132623],{"id":132622},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[39,132625],{"style":41,"src":132626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[26,132628,132629,132635,132642,132649,132652],{},[29,132630,132631,132632,132634],{},"1号盒子为最大的盒子 ",[57,132633,54650],{}," 版心水平居中对齐",[29,132636,132637,132638,132641],{},"2号盒子为上面部分 ",[57,132639,132640],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[29,132643,132644,132645,132648],{},"3号盒子为底下部分 ",[57,132646,132647],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[29,132650,132651],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[29,132653,132654],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[44,132656,132658],{"id":132657},"_1025-底部模块制作","10.2.5 底部模块制作",[39,132660],{"style":41,"src":132661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[26,132663,132664,132671,132674,132681],{},[29,132665,132666,132667,132670],{},"1号盒子通栏大盒子 底部 ",[57,132668,132669],{},"footer"," 给高度 底色是白色",[29,132672,132673],{},"2号盒子版心水平居中",[29,132675,132676,132677,132680],{},"3号盒子版权 ",[57,132678,132679],{},"copyright"," 左对齐",[29,132682,132683,132684,132687],{},"4号盒子 链接组 ",[57,132685,132686],{},"links"," 右对齐",[44,132689,132691],{"id":132690},"_1026-代码模块","10.2.6 代码模块",[1055,132693,132694],{},[29,132695,132696],{},"html部分",[77,132698,132700],{"className":924,"code":132699,"language":926,"meta":82,"style":82},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[84,132701,132702],{"__ignoreMap":82},[87,132703,132704,132706,132708,132710,132712,132715,132718,132720,132723,132726,132728],{"class":89,"line":90},[87,132705,938],{"class":97},[87,132707,1334],{"class":93},[87,132709,61993],{"class":205},[87,132711,946],{"class":97},[87,132713,132714],{"class":949},"\"https:\u002F\u002Fexample.com\"",[87,132716,132717],{"class":205}," target",[87,132719,946],{"class":97},[87,132721,132722],{"class":949},"\"_blank\"",[87,132724,132725],{"class":97},">链接文字\u003C\u002F",[87,132727,1334],{"class":93},[87,132729,953],{"class":97},[1055,132731,132732],{"start":101},[29,132733,132734],{},"css部分",[77,132736,132737],{"className":924,"code":132699,"language":926,"meta":82,"style":82},[84,132738,132739],{"__ignoreMap":82},[87,132740,132741,132743,132745,132747,132749,132751,132753,132755,132757,132759,132761],{"class":89,"line":90},[87,132742,938],{"class":97},[87,132744,1334],{"class":93},[87,132746,61993],{"class":205},[87,132748,946],{"class":97},[87,132750,132714],{"class":949},[87,132752,132717],{"class":205},[87,132754,946],{"class":97},[87,132756,132722],{"class":949},[87,132758,132725],{"class":97},[87,132760,1334],{"class":93},[87,132762,953],{"class":97},[44,132764,132766],{"id":132765},"_1027-收获","10.2.7 收获",[1055,132768,132769,132772,132775,132778,132781],{},[29,132770,132771],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[29,132773,132774],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[29,132776,132777],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[29,132779,132780],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[29,132782,132783],{},"遗忘代码",[77,132785,132787],{"className":79,"code":132786,"language":81,"meta":82,"style":82},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[84,132788,132789,132811,132816,132826],{"__ignoreMap":82},[87,132790,132791,132793,132795,132797,132799,132801,132803,132805,132807,132809],{"class":89,"line":90},[87,132792,94],{"class":93},[87,132794,13385],{"class":97},[87,132796,19],{"class":93},[87,132798,13385],{"class":97},[87,132800,10],{"class":93},[87,132802,13385],{"class":97},[87,132804,26],{"class":93},[87,132806,13385],{"class":97},[87,132808,29],{"class":93},[87,132810,98],{"class":97},[87,132812,132813],{"class":89,"line":101},[87,132814,132815],{"class":199},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[87,132817,132818,132820,132822,132824],{"class":89,"line":120},[87,132819,129089],{"class":104},[87,132821,108],{"class":97},[87,132823,61805],{"class":104},[87,132825,117],{"class":97},[87,132827,132828],{"class":89,"line":222},[87,132829,123],{"class":97},[1055,132831,132832],{"start":256},[29,132833,132834],{},"html引css的程序",[77,132836,132837],{"className":79,"code":132786,"language":81,"meta":82,"style":82},[84,132838,132839,132861,132865,132875],{"__ignoreMap":82},[87,132840,132841,132843,132845,132847,132849,132851,132853,132855,132857,132859],{"class":89,"line":90},[87,132842,94],{"class":93},[87,132844,13385],{"class":97},[87,132846,19],{"class":93},[87,132848,13385],{"class":97},[87,132850,10],{"class":93},[87,132852,13385],{"class":97},[87,132854,26],{"class":93},[87,132856,13385],{"class":97},[87,132858,29],{"class":93},[87,132860,98],{"class":97},[87,132862,132863],{"class":89,"line":101},[87,132864,132815],{"class":199},[87,132866,132867,132869,132871,132873],{"class":89,"line":120},[87,132868,129089],{"class":104},[87,132870,108],{"class":97},[87,132872,61805],{"class":104},[87,132874,117],{"class":97},[87,132876,132877],{"class":89,"line":222},[87,132878,123],{"class":97},[1055,132880,132881,132884,132887,132890,132893],{"start":269},[29,132882,132883],{},"浮动的盒子不会有外边距合并问题",[29,132885,132886],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[29,132888,132889],{},"ctrl+g快速定位行；shift+alt多个光标",[29,132891,132892],{},"学习上方各个模块的选择器起名方法，以后就这样用",[29,132894,132895],{},"在写选择器时尽量写全一些，例如",[77,132897,132899],{"className":79,"code":132898,"language":81,"meta":82,"style":82},"\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",[84,132900,132901,132906,132922,132927,132942,132947,132962,132967,132982,132987],{"__ignoreMap":82},[87,132902,132903],{"class":89,"line":90},[87,132904,132905],{"class":199},"\u002F* 静态定位（默认） *\u002F\n",[87,132907,132908,132911,132913,132915,132917,132920],{"class":89,"line":101},[87,132909,132910],{"class":205},".static",[87,132912,503],{"class":97},[87,132914,129831],{"class":104},[87,132916,108],{"class":97},[87,132918,132919],{"class":104},"static",[87,132921,130401],{"class":97},[87,132923,132924],{"class":89,"line":120},[87,132925,132926],{"class":199},"\u002F* 相对定位 *\u002F\n",[87,132928,132929,132932,132934,132936,132938,132940],{"class":89,"line":222},[87,132930,132931],{"class":205},".relative",[87,132933,503],{"class":97},[87,132935,129831],{"class":104},[87,132937,108],{"class":97},[87,132939,55700],{"class":104},[87,132941,130401],{"class":97},[87,132943,132944],{"class":89,"line":234},[87,132945,132946],{"class":199},"\u002F* 绝对定位 *\u002F\n",[87,132948,132949,132952,132954,132956,132958,132960],{"class":89,"line":256},[87,132950,132951],{"class":205},".absolute",[87,132953,503],{"class":97},[87,132955,129831],{"class":104},[87,132957,108],{"class":97},[87,132959,55767],{"class":104},[87,132961,130401],{"class":97},[87,132963,132964],{"class":89,"line":269},[87,132965,132966],{"class":199},"\u002F* 固定定位 *\u002F\n",[87,132968,132969,132972,132974,132976,132978,132980],{"class":89,"line":463},[87,132970,132971],{"class":205},".fixed",[87,132973,503],{"class":97},[87,132975,129831],{"class":104},[87,132977,108],{"class":97},[87,132979,87159],{"class":104},[87,132981,130401],{"class":97},[87,132983,132984],{"class":89,"line":469},[87,132985,132986],{"class":199},"\u002F* 粘性定位 *\u002F\n",[87,132988,132989,132992,132994,132996,132998,133001],{"class":89,"line":2287},[87,132990,132991],{"class":205},".sticky",[87,132993,503],{"class":97},[87,132995,129831],{"class":104},[87,132997,108],{"class":97},[87,132999,133000],{"class":104},"sticky",[87,133002,130401],{"class":97},[1055,133004,133005,133008],{"start":2573},[29,133006,133007],{},"一定要用好注释",[29,133009,133010],{},"浮动的盒子不会有外边距合并的问题",[1006,133012,132354],{},{"title":82,"searchDepth":101,"depth":101,"links":133014},[133015,133016],{"id":132391,"depth":101,"text":132392},{"id":132455,"depth":101,"text":132456,"children":133017},[133018,133019,133020,133021,133022,133023,133024],{"id":132459,"depth":120,"text":132460},{"id":132565,"depth":120,"text":132566},{"id":132601,"depth":120,"text":132602},{"id":132622,"depth":120,"text":132623},{"id":132657,"depth":120,"text":132658},{"id":132690,"depth":120,"text":132691},{"id":132765,"depth":120,"text":132766},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132383,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133031,"title":133032,"body":133033,"description":1026,"extension":1027,"meta":134517,"navigation":1029,"path":134518,"seo":134519,"stem":134520,"__hash__":134521},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133034,"toc":134509},[133035,133038,133042,133046,133057,133061,133078,133122,133155,133158,133175,133178,133181,133225,133229,133233,133236,133239,133243,133246,133257,133320,133361,133364,133379,133433,133441,133444,133455,133509,133535,133538,133551,133605,133637,133691,133714,133768,133771,133774,133781,133835,133856,133910,133913,133916,134001,134009,134066,134089,134093,134096,134114,134118,134136,134190,134228,134232,134235,134238,134260,134264,134272,134275,134280,134291,134294,134298,134312,134356,134359,134363,134366,134371,134397,134402,134478,134481,134485,134488,134491,134494,134497,134500,134503,134506],[10,133036,133032],{"id":133037},"_11-传统布局与定位体系",[14,133039,133041],{"id":133040},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[44,133043,133045],{"id":133044},"_1111-普通流标准流","11.1.1 普通流（标准流）",[26,133047,133048,133051,133054],{},[29,133049,133050],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[29,133052,133053],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[29,133055,133056],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[44,133058,133060],{"id":133059},"_1112-浮动","11.1.2 浮动",[26,133062,133063,133066,133069,133072,133075],{},[29,133064,133065],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[29,133067,133068],{},"浮动可以改变元素标签默认的排列方式",[29,133070,133071],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[29,133073,133074],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[29,133076,133077],{},"在使用行内块转换时盒子之间是有空隙的",[77,133079,133080],{"className":79,"code":131932,"language":81,"meta":82,"style":82},[84,133081,133082,133088,133098,133102,133108,133118],{"__ignoreMap":82},[87,133083,133084,133086],{"class":89,"line":90},[87,133085,131939],{"class":205},[87,133087,98],{"class":97},[87,133089,133090,133092,133094,133096],{"class":89,"line":101},[87,133091,131946],{"class":104},[87,133093,108],{"class":97},[87,133095,24683],{"class":104},[87,133097,117],{"class":97},[87,133099,133100],{"class":89,"line":120},[87,133101,123],{"class":97},[87,133103,133104,133106],{"class":89,"line":222},[87,133105,131961],{"class":205},[87,133107,98],{"class":97},[87,133109,133110,133112,133114,133116],{"class":89,"line":234},[87,133111,131946],{"class":104},[87,133113,108],{"class":97},[87,133115,73450],{"class":104},[87,133117,117],{"class":97},[87,133119,133120],{"class":89,"line":256},[87,133121,123],{"class":97},[1235,133123,133124,133132],{},[1238,133125,133126],{},[1241,133127,133128,133130],{},[1244,133129,127939],{"align":24683},[1244,133131,28436],{"align":24683},[1281,133133,133134,133141,133148],{},[1241,133135,133136,133138],{},[1286,133137,55673],{"align":24683},[1286,133139,133140],{"align":24683},"元素不浮动（默认值）",[1241,133142,133143,133145],{},[1286,133144,24683],{"align":24683},[1286,133146,133147],{"align":24683},"元素向左浮动",[1241,133149,133150,133152],{},[1286,133151,73450],{"align":24683},[1286,133153,133154],{"align":24683},"元素向右浮动",[19,133156,133157],{},"浮动重点：",[26,133159,133160,133163,133166,133169,133172],{},[29,133161,133162],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[29,133164,133165],{},"浮动的元素会一行内显示并且元素顶部对齐",[29,133167,133168],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[29,133170,133171],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[29,133173,133174],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133176,133177],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133179,133180],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[77,133182,133183],{"className":79,"code":131932,"language":81,"meta":82,"style":82},[84,133184,133185,133191,133201,133205,133211,133221],{"__ignoreMap":82},[87,133186,133187,133189],{"class":89,"line":90},[87,133188,131939],{"class":205},[87,133190,98],{"class":97},[87,133192,133193,133195,133197,133199],{"class":89,"line":101},[87,133194,131946],{"class":104},[87,133196,108],{"class":97},[87,133198,24683],{"class":104},[87,133200,117],{"class":97},[87,133202,133203],{"class":89,"line":120},[87,133204,123],{"class":97},[87,133206,133207,133209],{"class":89,"line":222},[87,133208,131961],{"class":205},[87,133210,98],{"class":97},[87,133212,133213,133215,133217,133219],{"class":89,"line":234},[87,133214,131946],{"class":104},[87,133216,108],{"class":97},[87,133218,73450],{"class":104},[87,133220,117],{"class":97},[87,133222,133223],{"class":89,"line":256},[87,133224,123],{"class":97},[44,133226,133228],{"id":133227},"_1113-定位","11.1.3 定位",[49,133230,133232],{"id":133231},"_11131-使用场景","11.1.3.1 使用场景",[19,133234,133235],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133237,133238],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[49,133240,133242],{"id":133241},"_11132-定位组成","11.1.3.2 定位组成",[19,133244,133245],{},"定位 = 定位模式 + 边偏移",[1055,133247,133248],{},[29,133249,133250,133253,133254],{},[57,133251,133252],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[57,133255,133256],{},"定位模式",[77,133258,133260],{"className":79,"code":133259,"language":81,"meta":82,"style":82},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[84,133261,133262,133268,133282,133299,133316],{"__ignoreMap":82},[87,133263,133264,133266],{"class":89,"line":90},[87,133265,131319],{"class":205},[87,133267,98],{"class":97},[87,133269,133270,133273,133275,133277,133279],{"class":89,"line":101},[87,133271,133272],{"class":104},"  position",[87,133274,108],{"class":97},[87,133276,55700],{"class":104},[87,133278,324],{"class":97},[87,133280,133281],{"class":199},"\u002F* 定位模式 *\u002F\n",[87,133283,133284,133287,133289,133291,133293,133296],{"class":89,"line":120},[87,133285,133286],{"class":104},"  top",[87,133288,108],{"class":97},[87,133290,242],{"class":104},[87,133292,245],{"class":171},[87,133294,133295],{"class":97},";           ",[87,133297,133298],{"class":199},"\u002F* 边偏移：上 *\u002F\n",[87,133300,133301,133304,133306,133308,133310,133313],{"class":89,"line":222},[87,133302,133303],{"class":104},"  left",[87,133305,108],{"class":97},[87,133307,1792],{"class":104},[87,133309,245],{"class":171},[87,133311,133312],{"class":97},";          ",[87,133314,133315],{"class":199},"\u002F* 边偏移：左 *\u002F\n",[87,133317,133318],{"class":89,"line":234},[87,133319,123],{"class":97},[1235,133321,133322,133331],{},[1238,133323,133324],{},[1241,133325,133326,133328],{},[1244,133327,1249],{"align":24683},[1244,133329,133330],{"align":24683},"语义",[1281,133332,133333,133340,133347,133354],{},[1241,133334,133335,133337],{},[1286,133336,132919],{"align":24683},[1286,133338,133339],{"align":24683},"静态定位",[1241,133341,133342,133344],{},[1286,133343,55700],{"align":24683},[1286,133345,133346],{"align":24683},"相对定位",[1241,133348,133349,133351],{},[1286,133350,55767],{"align":24683},[1286,133352,133353],{"align":24683},"绝对定位",[1241,133355,133356,133358],{},[1286,133357,87159],{"align":24683},[1286,133359,133360],{"align":24683},"固定定位",[19,133362,133363],{},"（1）静态定位：",[26,133365,133366,133377],{},[29,133367,133368,133369,133372,133373,133376],{},"静态定位是元素的 ",[57,133370,133371],{},"默认定位方式"," ， ",[57,133374,133375],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[29,133378,6134],{},[77,133380,133381],{"className":79,"code":133259,"language":81,"meta":82,"style":82},[84,133382,133383,133389,133401,133415,133429],{"__ignoreMap":82},[87,133384,133385,133387],{"class":89,"line":90},[87,133386,131319],{"class":205},[87,133388,98],{"class":97},[87,133390,133391,133393,133395,133397,133399],{"class":89,"line":101},[87,133392,133272],{"class":104},[87,133394,108],{"class":97},[87,133396,55700],{"class":104},[87,133398,324],{"class":97},[87,133400,133281],{"class":199},[87,133402,133403,133405,133407,133409,133411,133413],{"class":89,"line":120},[87,133404,133286],{"class":104},[87,133406,108],{"class":97},[87,133408,242],{"class":104},[87,133410,245],{"class":171},[87,133412,133295],{"class":97},[87,133414,133298],{"class":199},[87,133416,133417,133419,133421,133423,133425,133427],{"class":89,"line":222},[87,133418,133303],{"class":104},[87,133420,108],{"class":97},[87,133422,1792],{"class":104},[87,133424,245],{"class":171},[87,133426,133312],{"class":97},[87,133428,133315],{"class":199},[87,133430,133431],{"class":89,"line":234},[87,133432,123],{"class":97},[26,133434,133435,133438],{},[29,133436,133437],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[29,133439,133440],{},"静态定位在布局时我们几乎不用的",[19,133442,133443],{},"（2）相对定位",[26,133445,133446,133453],{},[29,133447,133448,133449,133452],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[57,133450,133451],{},"原来的位置"," 来说的（自恋型）",[29,133454,6134],{},[77,133456,133457],{"className":79,"code":133259,"language":81,"meta":82,"style":82},[84,133458,133459,133465,133477,133491,133505],{"__ignoreMap":82},[87,133460,133461,133463],{"class":89,"line":90},[87,133462,131319],{"class":205},[87,133464,98],{"class":97},[87,133466,133467,133469,133471,133473,133475],{"class":89,"line":101},[87,133468,133272],{"class":104},[87,133470,108],{"class":97},[87,133472,55700],{"class":104},[87,133474,324],{"class":97},[87,133476,133281],{"class":199},[87,133478,133479,133481,133483,133485,133487,133489],{"class":89,"line":120},[87,133480,133286],{"class":104},[87,133482,108],{"class":97},[87,133484,242],{"class":104},[87,133486,245],{"class":171},[87,133488,133295],{"class":97},[87,133490,133298],{"class":199},[87,133492,133493,133495,133497,133499,133501,133503],{"class":89,"line":222},[87,133494,133303],{"class":104},[87,133496,108],{"class":97},[87,133498,1792],{"class":104},[87,133500,245],{"class":171},[87,133502,133312],{"class":97},[87,133504,133315],{"class":199},[87,133506,133507],{"class":89,"line":234},[87,133508,123],{"class":97},[26,133510,133511],{},[29,133512,133513,133514,133516,133517,133519,133520,133523,133524,133527,133528,133530,133531,133534],{},"相对定位的特点：",[54652,133515],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54652,133518],{},"  ② ",[57,133521,133522],{},"原来"," 在标准流的 ",[57,133525,133526],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54652,133529],{},"  ③因此， ",[57,133532,133533],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133536,133537],{},"（3）绝对定位",[26,133539,133540,133549],{},[29,133541,133542,133544,133545,133548],{},[57,133543,133353],{}," 是元素在移动位置的时候，是相对于它 ",[57,133546,133547],{},"祖先元素"," 来说的（拼爹型）",[29,133550,6134],{},[77,133552,133553],{"className":79,"code":133259,"language":81,"meta":82,"style":82},[84,133554,133555,133561,133573,133587,133601],{"__ignoreMap":82},[87,133556,133557,133559],{"class":89,"line":90},[87,133558,131319],{"class":205},[87,133560,98],{"class":97},[87,133562,133563,133565,133567,133569,133571],{"class":89,"line":101},[87,133564,133272],{"class":104},[87,133566,108],{"class":97},[87,133568,55700],{"class":104},[87,133570,324],{"class":97},[87,133572,133281],{"class":199},[87,133574,133575,133577,133579,133581,133583,133585],{"class":89,"line":120},[87,133576,133286],{"class":104},[87,133578,108],{"class":97},[87,133580,242],{"class":104},[87,133582,245],{"class":171},[87,133584,133295],{"class":97},[87,133586,133298],{"class":199},[87,133588,133589,133591,133593,133595,133597,133599],{"class":89,"line":222},[87,133590,133303],{"class":104},[87,133592,108],{"class":97},[87,133594,1792],{"class":104},[87,133596,245],{"class":171},[87,133598,133312],{"class":97},[87,133600,133315],{"class":199},[87,133602,133603],{"class":89,"line":234},[87,133604,123],{"class":97},[26,133606,133607,133622,133631,133634],{},[29,133608,133609,133610,133612,133613,133615,133616,133618,133619,133621],{},"绝对定位的特点：",[54652,133611],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54652,133614],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54652,133617],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54652,133620],{},"  (4)固定定位",[29,133623,133624,133626,133627,133630],{},[57,133625,133360],{}," 是元素 ",[57,133628,133629],{},"固定于浏览器可视区的位置"," 。（认死理型）",[29,133632,133633],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[29,133635,133636],{},"语法:",[77,133638,133639],{"className":79,"code":133259,"language":81,"meta":82,"style":82},[84,133640,133641,133647,133659,133673,133687],{"__ignoreMap":82},[87,133642,133643,133645],{"class":89,"line":90},[87,133644,131319],{"class":205},[87,133646,98],{"class":97},[87,133648,133649,133651,133653,133655,133657],{"class":89,"line":101},[87,133650,133272],{"class":104},[87,133652,108],{"class":97},[87,133654,55700],{"class":104},[87,133656,324],{"class":97},[87,133658,133281],{"class":199},[87,133660,133661,133663,133665,133667,133669,133671],{"class":89,"line":120},[87,133662,133286],{"class":104},[87,133664,108],{"class":97},[87,133666,242],{"class":104},[87,133668,245],{"class":171},[87,133670,133295],{"class":97},[87,133672,133298],{"class":199},[87,133674,133675,133677,133679,133681,133683,133685],{"class":89,"line":222},[87,133676,133303],{"class":104},[87,133678,108],{"class":97},[87,133680,1792],{"class":104},[87,133682,245],{"class":171},[87,133684,133312],{"class":97},[87,133686,133315],{"class":199},[87,133688,133689],{"class":89,"line":234},[87,133690,123],{"class":97},[26,133692,133693,133702],{},[29,133694,133695,133696,133698,133699,133701],{},"特点:",[54652,133697],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54652,133700],{},"  ②固定定位不再占有原先的位置,完全脱标",[29,133703,133704,133705,133707,133708,133710,133711,133713],{},"固定在版心位置的方法:",[54652,133706],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54652,133709],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54652,133712],{},"  实例：",[77,133715,133716],{"className":79,"code":133259,"language":81,"meta":82,"style":82},[84,133717,133718,133724,133736,133750,133764],{"__ignoreMap":82},[87,133719,133720,133722],{"class":89,"line":90},[87,133721,131319],{"class":205},[87,133723,98],{"class":97},[87,133725,133726,133728,133730,133732,133734],{"class":89,"line":101},[87,133727,133272],{"class":104},[87,133729,108],{"class":97},[87,133731,55700],{"class":104},[87,133733,324],{"class":97},[87,133735,133281],{"class":199},[87,133737,133738,133740,133742,133744,133746,133748],{"class":89,"line":120},[87,133739,133286],{"class":104},[87,133741,108],{"class":97},[87,133743,242],{"class":104},[87,133745,245],{"class":171},[87,133747,133295],{"class":97},[87,133749,133298],{"class":199},[87,133751,133752,133754,133756,133758,133760,133762],{"class":89,"line":222},[87,133753,133303],{"class":104},[87,133755,108],{"class":97},[87,133757,1792],{"class":104},[87,133759,245],{"class":171},[87,133761,133312],{"class":97},[87,133763,133315],{"class":199},[87,133765,133766],{"class":89,"line":234},[87,133767,123],{"class":97},[39,133769],{"style":41,"src":133770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,133772,133773],{},"(5)粘性定位",[26,133775,133776,133779],{},[29,133777,133778],{},"粘性定位可以被认为是相对定位和固定定位的混合",[29,133780,6134],{},[77,133782,133783],{"className":79,"code":133259,"language":81,"meta":82,"style":82},[84,133784,133785,133791,133803,133817,133831],{"__ignoreMap":82},[87,133786,133787,133789],{"class":89,"line":90},[87,133788,131319],{"class":205},[87,133790,98],{"class":97},[87,133792,133793,133795,133797,133799,133801],{"class":89,"line":101},[87,133794,133272],{"class":104},[87,133796,108],{"class":97},[87,133798,55700],{"class":104},[87,133800,324],{"class":97},[87,133802,133281],{"class":199},[87,133804,133805,133807,133809,133811,133813,133815],{"class":89,"line":120},[87,133806,133286],{"class":104},[87,133808,108],{"class":97},[87,133810,242],{"class":104},[87,133812,245],{"class":171},[87,133814,133295],{"class":97},[87,133816,133298],{"class":199},[87,133818,133819,133821,133823,133825,133827,133829],{"class":89,"line":222},[87,133820,133303],{"class":104},[87,133822,108],{"class":97},[87,133824,1792],{"class":104},[87,133826,245],{"class":171},[87,133828,133312],{"class":97},[87,133830,133315],{"class":199},[87,133832,133833],{"class":89,"line":234},[87,133834,123],{"class":97},[26,133836,133837],{},[29,133838,133839,133840,133842,133843,133845,133846,133848,133849,133852,133853,133855],{},"粘性定位的特点：",[54652,133841],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54652,133844],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54652,133847],{},"  ③必须添加 top 、left、right、bottom ",[57,133850,133851],{},"其中一个"," 才有效",[54652,133854],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[77,133857,133858],{"className":79,"code":133259,"language":81,"meta":82,"style":82},[84,133859,133860,133866,133878,133892,133906],{"__ignoreMap":82},[87,133861,133862,133864],{"class":89,"line":90},[87,133863,131319],{"class":205},[87,133865,98],{"class":97},[87,133867,133868,133870,133872,133874,133876],{"class":89,"line":101},[87,133869,133272],{"class":104},[87,133871,108],{"class":97},[87,133873,55700],{"class":104},[87,133875,324],{"class":97},[87,133877,133281],{"class":199},[87,133879,133880,133882,133884,133886,133888,133890],{"class":89,"line":120},[87,133881,133286],{"class":104},[87,133883,108],{"class":97},[87,133885,242],{"class":104},[87,133887,245],{"class":171},[87,133889,133295],{"class":97},[87,133891,133298],{"class":199},[87,133893,133894,133896,133898,133900,133902,133904],{"class":89,"line":222},[87,133895,133303],{"class":104},[87,133897,108],{"class":97},[87,133899,1792],{"class":104},[87,133901,245],{"class":171},[87,133903,133312],{"class":97},[87,133905,133315],{"class":199},[87,133907,133908],{"class":89,"line":234},[87,133909,123],{"class":97},[39,133911],{"style":41,"src":133912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133914,133915],{},"(6)总结",[1235,133917,133918,133933],{},[1238,133919,133920],{},[1241,133921,133922,133924,133927,133930],{},[1244,133923,133256],{"align":24683},[1244,133925,133926],{"align":24683},"是否脱标",[1244,133928,133929],{"align":24683},"移动位置",[1244,133931,133932],{"align":24683},"是否常用",[1281,133934,133935,133948,133962,133976,133989],{},[1241,133936,133937,133940,133942,133945],{},[1286,133938,133939],{"align":24683},"Static 静态定位",[1286,133941,105604],{"align":24683},[1286,133943,133944],{"align":24683},"不能使用边偏移",[1286,133946,133947],{"align":24683},"很少",[1241,133949,133950,133953,133956,133959],{},[1286,133951,133952],{"align":24683},"Relative 相对定位",[1286,133954,133955],{"align":24683},"否(占有位置)",[1286,133957,133958],{"align":24683},"相对于自身位置移动",[1286,133960,133961],{"align":24683},"基本单独使用",[1241,133963,133964,133967,133970,133973],{},[1286,133965,133966],{"align":24683},"Absolute 绝对定位",[1286,133968,133969],{"align":24683},"是(不占有位置)",[1286,133971,133972],{"align":24683},"带有定位的父级",[1286,133974,133975],{"align":24683},"要和定位父级元素搭配使用",[1241,133977,133978,133981,133983,133986],{},[1286,133979,133980],{"align":24683},"Fixed 固定定位",[1286,133982,133969],{"align":24683},[1286,133984,133985],{"align":24683},"浏览器可视区",[1286,133987,133988],{"align":24683},"单独使用,不需要父级",[1241,133990,133991,133994,133996,133998],{},[1286,133992,133993],{"align":24683},"Sticky 粘性定位",[1286,133995,133955],{"align":24683},[1286,133997,133985],{"align":24683},[1286,133999,134000],{"align":24683},"当前阶段少",[1055,134002,134003],{"start":101},[29,134004,134005,134008],{},[57,134006,134007],{},"边偏移"," 则决定了该元素的最终位置",[1235,134010,134011,134022],{},[1238,134012,134013],{},[1241,134014,134015,134018,134020],{},[1244,134016,134017],{"align":24683},"边偏移属性",[1244,134019,28439],{"align":24683},[1244,134021,28436],{"align":24683},[1281,134023,134024,134035,134046,134056],{},[1241,134025,134026,134029,134032],{},[1286,134027,134028],{"align":24683},"top",[1286,134030,134031],{"align":24683},"top: 80px;",[1286,134033,134034],{"align":24683},"顶端偏移量，定义元素相对于父元素上边线的距离",[1241,134036,134037,134040,134043],{},[1286,134038,134039],{"align":24683},"bottom",[1286,134041,134042],{"align":24683},"bottom: 80px ;",[1286,134044,134045],{"align":24683},"底部偏移量，定义元素相对于其父元素下边线的距离",[1241,134047,134048,134050,134053],{},[1286,134049,24683],{"align":24683},[1286,134051,134052],{"align":24683},"left: 80px ;",[1286,134054,134055],{"align":24683},"左侧偏移量，定义元素相对于其父元素左边线的距离",[1241,134057,134058,134060,134063],{},[1286,134059,73450],{"align":24683},[1286,134061,134062],{"align":24683},"right: 80px ;",[1286,134064,134065],{"align":24683},"右侧偏移量，定义元素相对于其父元素右边线的距离",[26,134067,134068],{},[29,134069,9975,134070,134072,134073,134075,134076,134078,134079,134082,134083,134085,134086,134088],{},[54652,134071],{},"  ① ",[57,134074,134007],{}," 需要和 ",[57,134077,133256],{}," 联合使用， ",[57,134080,134081],{},"单独使用无效"," ；",[54652,134084],{},"  ②top和bottom不要同时使用",[54652,134087],{},"  ③left和right不要同时使用",[49,134090,134092],{"id":134091},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134094,134095],{},"子级是绝对定位的话，父级要用相对定位",[26,134097,134098,134101,134104,134107],{},[29,134099,134100],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[29,134102,134103],{},"父盒子需要加定位限制子盒子在父盒子内显示",[29,134105,134106],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[29,134108,134109,134110,134113],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[57,134111,134112],{},"子绝父绝"," 也会遇到",[49,134115,134117],{"id":134116},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[26,134119,134120,134134],{},[29,134121,134122,134123,134125,134126,134129,134130,134133],{},"在使用 ",[57,134124,59],{}," 布局时，可能会 ",[57,134127,134128],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[57,134131,134132],{},"z-index"," 来控制盒子的前后次序 (z轴)",[29,134135,6134],{},[77,134137,134138],{"className":79,"code":133259,"language":81,"meta":82,"style":82},[84,134139,134140,134146,134158,134172,134186],{"__ignoreMap":82},[87,134141,134142,134144],{"class":89,"line":90},[87,134143,131319],{"class":205},[87,134145,98],{"class":97},[87,134147,134148,134150,134152,134154,134156],{"class":89,"line":101},[87,134149,133272],{"class":104},[87,134151,108],{"class":97},[87,134153,55700],{"class":104},[87,134155,324],{"class":97},[87,134157,133281],{"class":199},[87,134159,134160,134162,134164,134166,134168,134170],{"class":89,"line":120},[87,134161,133286],{"class":104},[87,134163,108],{"class":97},[87,134165,242],{"class":104},[87,134167,245],{"class":171},[87,134169,133295],{"class":97},[87,134171,133298],{"class":199},[87,134173,134174,134176,134178,134180,134182,134184],{"class":89,"line":222},[87,134175,133303],{"class":104},[87,134177,108],{"class":97},[87,134179,1792],{"class":104},[87,134181,245],{"class":171},[87,134183,133312],{"class":97},[87,134185,133315],{"class":199},[87,134187,134188],{"class":89,"line":234},[87,134189,123],{"class":97},[26,134191,134192],{},[29,134193,134194,134195,134072,134197,134199,134200,128636,134203,83465,134206,134208,134209,134211,134212,134215,134216,134082,134219,134221,134222,134225,134227],{},"z-index的特性",[54652,134196],{},[57,134198,127939],{}," ： ",[57,134201,134202],{},"正整数",[57,134204,134205],{},"负整数",[57,134207,111],{}," ，默认值是 0，数值越大，盒子越靠上；",[54652,134210],{},"  ②如果 ",[57,134213,134214],{},"属性值相同"," ，则按照书写顺序， ",[57,134217,134218],{},"后来居上",[54652,134220],{},"  ③数字后面 ",[57,134223,134224],{},"不能加单位",[54652,134226],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[49,134229,134231],{"id":134230},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134233,134234],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134236,134237],{},"方法:",[26,134239,134240,134250],{},[29,134241,134242,134243,134246,134247],{},"left: 50%; 让 ",[57,134244,134245],{},"盒子的左侧"," 移动到 ",[57,134248,134249],{},"父级元素的水平中心位置",[29,134251,134252,134253,134256,134257],{},"margin-left: -100px; 让盒子 ",[57,134254,134255],{},"向左"," 移动 ",[57,134258,134259],{},"自身宽度的一半",[49,134261,134263],{"id":134262},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[1055,134265,134266,134269],{},[29,134267,134268],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[29,134270,134271],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134273,134274],{},"也就是说绝对定位和固定定位和浮动类似",[1055,134276,134277],{"start":120},[29,134278,134279],{},"display 是显示模式， 可以改变显示模式有以下方式:",[26,134281,134282,134285,134288],{},[29,134283,134284],{},"可以用inline-block 转换为行内块",[29,134286,134287],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[29,134289,134290],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,134292,134293],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[49,134295,134297],{"id":134296},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[1055,134299,134300,134303,134306,134309],{},[29,134301,134302],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[29,134304,134305],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[29,134307,134308],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[29,134310,134311],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[77,134313,134314],{"className":79,"code":131932,"language":81,"meta":82,"style":82},[84,134315,134316,134322,134332,134336,134342,134352],{"__ignoreMap":82},[87,134317,134318,134320],{"class":89,"line":90},[87,134319,131939],{"class":205},[87,134321,98],{"class":97},[87,134323,134324,134326,134328,134330],{"class":89,"line":101},[87,134325,131946],{"class":104},[87,134327,108],{"class":97},[87,134329,24683],{"class":104},[87,134331,117],{"class":97},[87,134333,134334],{"class":89,"line":120},[87,134335,123],{"class":97},[87,134337,134338,134340],{"class":89,"line":222},[87,134339,131961],{"class":205},[87,134341,98],{"class":97},[87,134343,134344,134346,134348,134350],{"class":89,"line":234},[87,134345,131946],{"class":104},[87,134347,108],{"class":97},[87,134349,73450],{"class":104},[87,134351,117],{"class":97},[87,134353,134354],{"class":89,"line":256},[87,134355,123],{"class":97},[39,134357],{"style":41,"src":134358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[49,134360,134362],{"id":134361},"_11138-轮播图","11.1.3.8 轮播图",[39,134364],{"style":41,"src":134365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[1055,134367,134368],{},[29,134369,134370],{},"制作顺序:",[26,134372,134373,134376,134379,134388],{},[29,134374,134375],{},"大盒子我们类名为： tb-promo 淘宝广告",[29,134377,134378],{},"里面先放一张图片",[29,134380,134381,134382,134384,134385,134387],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54652,134383],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54652,134386],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[29,134389,134390,134391,134393,134394,134396],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54652,134392],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54652,134395],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[1055,134398,134399],{"start":101},[29,134400,134401],{},"代码模块",[77,134403,134405],{"className":79,"code":134404,"language":81,"meta":82,"style":82},"\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",[84,134406,134407,134412,134419,134429,134439,134449,134453,134458,134464,134474],{"__ignoreMap":82},[87,134408,134409],{"class":89,"line":90},[87,134410,134411],{"class":199},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[87,134413,134414,134417],{"class":89,"line":101},[87,134415,134416],{"class":205},".son",[87,134418,98],{"class":97},[87,134420,134421,134423,134425,134427],{"class":89,"line":120},[87,134422,133272],{"class":104},[87,134424,108],{"class":97},[87,134426,55767],{"class":104},[87,134428,117],{"class":97},[87,134430,134431,134433,134435,134437],{"class":89,"line":222},[87,134432,133286],{"class":104},[87,134434,108],{"class":97},[87,134436,111],{"class":104},[87,134438,117],{"class":97},[87,134440,134441,134443,134445,134447],{"class":89,"line":234},[87,134442,133303],{"class":104},[87,134444,108],{"class":97},[87,134446,111],{"class":104},[87,134448,117],{"class":97},[87,134450,134451],{"class":89,"line":256},[87,134452,123],{"class":97},[87,134454,134455],{"class":89,"line":269},[87,134456,134457],{"class":199},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[87,134459,134460,134462],{"class":89,"line":463},[87,134461,896],{"class":205},[87,134463,98],{"class":97},[87,134465,134466,134468,134470,134472],{"class":89,"line":469},[87,134467,133272],{"class":104},[87,134469,108],{"class":97},[87,134471,55700],{"class":104},[87,134473,117],{"class":97},[87,134475,134476],{"class":89,"line":2287},[87,134477,123],{"class":97},[19,134479,134480],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[44,134482,134484],{"id":134483},"_1114-定位数值的移动","11.1.4 定位数值的移动",[39,134486],{"style":41,"src":134487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,134489,134490],{},"✨ 黄金口诀：",[19,134492,134493],{},"\"TOP正下负上，LEFT正右负左\"",[19,134495,134496],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,134498,134499],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,134501,134502],{},"✨ 简单记：",[19,134504,134505],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1006,134507,134508],{},"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":82,"searchDepth":101,"depth":101,"links":134510},[134511],{"id":133040,"depth":101,"text":133041,"children":134512},[134513,134514,134515,134516],{"id":133044,"depth":120,"text":133045},{"id":133059,"depth":120,"text":133060},{"id":133227,"depth":120,"text":133228},{"id":134483,"depth":120,"text":134484},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133032,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134523,"title":134524,"body":134525,"description":1026,"extension":1027,"meta":135948,"navigation":1029,"path":135949,"seo":135950,"stem":135951,"__hash__":135952},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134526,"toc":135927},[134527,134530,134534,134542,134546,134551,134559,134571,134575,134580,134588,134599,134603,134608,134649,134657,134661,134664,134667,134670,134764,134767,134861,134864,134958,134961,134964,134999,135002,135005,135035,135038,135041,135044,135047,135050,135053,135056,135126,135129,135133,135137,135178,135182,135188,135191,135194,135198,135201,135204,135207,135288,135291,135294,135298,135302,135305,135308,135311,135314,135317,135323,135332,135336,135355,135359,135369,135372,135375,135378,135381,135384,135387,135390,135393,135402,135406,135415,135418,135423,135476,135481,135647,135650,135653,135658,135661,135664,135667,135670,135675,135823,135826,135829,135834,135837,135842,135876,135879,135882,135886,135889,135896,135899,135902,135905,135908,135911,135914,135917,135921,135924],[10,134528,134524],{"id":134529},"_12-显示隐藏与图形资源",[14,134531,134533],{"id":134532},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[26,134535,134536,134539],{},[29,134537,134538],{},"目的:让一个元素在页面中消失或者显示出来",[29,134540,134541],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[44,134543,134545],{"id":134544},"_1211-display-显示","12.1.1 display 显示",[1055,134547,134548],{},[29,134549,134550],{},"display 设置或检索对象是否及如何显示",[26,134552,134553,134556],{},[29,134554,134555],{},"display: none;隐藏对象",[29,134557,134558],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[1055,134560,134561,134568],{"start":101},[29,134562,134563,134564,134567],{},"特点： display 隐藏元素后， ",[57,134565,134566],{},"不再占"," 有原来的位置",[29,134569,134570],{},"在js中使用非常的广泛",[44,134572,134574],{"id":134573},"_1212-visibility可见性","12.1.2 visibility可见性",[1055,134576,134577],{},[29,134578,134579],{},"visibility 属性用于指定一个元素应可见还是隐藏",[26,134581,134582,134585],{},[29,134583,134584],{},"visibility： visible；元素可见",[29,134586,134587],{},"visibility：hidden；元素隐藏",[1055,134589,134590,134593,134596],{"start":101},[29,134591,134592],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[29,134594,134595],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[29,134597,134598],{},"隐藏后继续占有原有位置",[44,134600,134602],{"id":134601},"_1213-overflow溢出","12.1.3 overflow溢出",[26,134604,134605],{},[29,134606,134607],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[1235,134609,134610,134618],{},[1238,134611,134612],{},[1241,134613,134614,134616],{},[1244,134615,127939],{"align":24683},[1244,134617,28436],{"align":24683},[1281,134619,134620,134628,134635,134642],{},[1241,134621,134622,134625],{},[1286,134623,134624],{"align":24683},"visible",[1286,134626,134627],{"align":24683},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[1241,134629,134630,134632],{},[1286,134631,62650],{"align":24683},[1286,134633,134634],{"align":24683},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[1241,134636,134637,134639],{},[1286,134638,129891],{"align":24683},[1286,134640,134641],{"align":24683},"不管超出内容否，总是显示滚动条",[1241,134643,134644,134646],{},[1286,134645,73591],{"align":24683},[1286,134647,134648],{"align":24683},"超出自动显示滚动条，不超出不显示滚动条",[26,134650,134651,134654],{},[29,134652,134653],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[29,134655,134656],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[44,134658,134660],{"id":134659},"_1214-案例收获","12.1.4 案例收获",[39,134662],{"style":41,"src":134663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,134665,134666],{},"问题：没做出来动态效果，使用hover没实现",[19,134668,134669],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[77,134671,134672],{"className":79,"code":132898,"language":81,"meta":82,"style":82},[84,134673,134674,134678,134692,134696,134710,134714,134728,134732,134746,134750],{"__ignoreMap":82},[87,134675,134676],{"class":89,"line":90},[87,134677,132905],{"class":199},[87,134679,134680,134682,134684,134686,134688,134690],{"class":89,"line":101},[87,134681,132910],{"class":205},[87,134683,503],{"class":97},[87,134685,129831],{"class":104},[87,134687,108],{"class":97},[87,134689,132919],{"class":104},[87,134691,130401],{"class":97},[87,134693,134694],{"class":89,"line":120},[87,134695,132926],{"class":199},[87,134697,134698,134700,134702,134704,134706,134708],{"class":89,"line":222},[87,134699,132931],{"class":205},[87,134701,503],{"class":97},[87,134703,129831],{"class":104},[87,134705,108],{"class":97},[87,134707,55700],{"class":104},[87,134709,130401],{"class":97},[87,134711,134712],{"class":89,"line":234},[87,134713,132946],{"class":199},[87,134715,134716,134718,134720,134722,134724,134726],{"class":89,"line":256},[87,134717,132951],{"class":205},[87,134719,503],{"class":97},[87,134721,129831],{"class":104},[87,134723,108],{"class":97},[87,134725,55767],{"class":104},[87,134727,130401],{"class":97},[87,134729,134730],{"class":89,"line":269},[87,134731,132966],{"class":199},[87,134733,134734,134736,134738,134740,134742,134744],{"class":89,"line":463},[87,134735,132971],{"class":205},[87,134737,503],{"class":97},[87,134739,129831],{"class":104},[87,134741,108],{"class":97},[87,134743,87159],{"class":104},[87,134745,130401],{"class":97},[87,134747,134748],{"class":89,"line":469},[87,134749,132986],{"class":199},[87,134751,134752,134754,134756,134758,134760,134762],{"class":89,"line":2287},[87,134753,132991],{"class":205},[87,134755,503],{"class":97},[87,134757,129831],{"class":104},[87,134759,108],{"class":97},[87,134761,133000],{"class":104},[87,134763,130401],{"class":97},[19,134765,134766],{},"完整代码：",[77,134768,134769],{"className":79,"code":132898,"language":81,"meta":82,"style":82},[84,134770,134771,134775,134789,134793,134807,134811,134825,134829,134843,134847],{"__ignoreMap":82},[87,134772,134773],{"class":89,"line":90},[87,134774,132905],{"class":199},[87,134776,134777,134779,134781,134783,134785,134787],{"class":89,"line":101},[87,134778,132910],{"class":205},[87,134780,503],{"class":97},[87,134782,129831],{"class":104},[87,134784,108],{"class":97},[87,134786,132919],{"class":104},[87,134788,130401],{"class":97},[87,134790,134791],{"class":89,"line":120},[87,134792,132926],{"class":199},[87,134794,134795,134797,134799,134801,134803,134805],{"class":89,"line":222},[87,134796,132931],{"class":205},[87,134798,503],{"class":97},[87,134800,129831],{"class":104},[87,134802,108],{"class":97},[87,134804,55700],{"class":104},[87,134806,130401],{"class":97},[87,134808,134809],{"class":89,"line":234},[87,134810,132946],{"class":199},[87,134812,134813,134815,134817,134819,134821,134823],{"class":89,"line":256},[87,134814,132951],{"class":205},[87,134816,503],{"class":97},[87,134818,129831],{"class":104},[87,134820,108],{"class":97},[87,134822,55767],{"class":104},[87,134824,130401],{"class":97},[87,134826,134827],{"class":89,"line":269},[87,134828,132966],{"class":199},[87,134830,134831,134833,134835,134837,134839,134841],{"class":89,"line":463},[87,134832,132971],{"class":205},[87,134834,503],{"class":97},[87,134836,129831],{"class":104},[87,134838,108],{"class":97},[87,134840,87159],{"class":104},[87,134842,130401],{"class":97},[87,134844,134845],{"class":89,"line":469},[87,134846,132986],{"class":199},[87,134848,134849,134851,134853,134855,134857,134859],{"class":89,"line":2287},[87,134850,132991],{"class":205},[87,134852,503],{"class":97},[87,134854,129831],{"class":104},[87,134856,108],{"class":97},[87,134858,133000],{"class":104},[87,134860,130401],{"class":97},[19,134862,134863],{},"分布思路重点详解：",[77,134865,134866],{"className":79,"code":132898,"language":81,"meta":82,"style":82},[84,134867,134868,134872,134886,134890,134904,134908,134922,134926,134940,134944],{"__ignoreMap":82},[87,134869,134870],{"class":89,"line":90},[87,134871,132905],{"class":199},[87,134873,134874,134876,134878,134880,134882,134884],{"class":89,"line":101},[87,134875,132910],{"class":205},[87,134877,503],{"class":97},[87,134879,129831],{"class":104},[87,134881,108],{"class":97},[87,134883,132919],{"class":104},[87,134885,130401],{"class":97},[87,134887,134888],{"class":89,"line":120},[87,134889,132926],{"class":199},[87,134891,134892,134894,134896,134898,134900,134902],{"class":89,"line":222},[87,134893,132931],{"class":205},[87,134895,503],{"class":97},[87,134897,129831],{"class":104},[87,134899,108],{"class":97},[87,134901,55700],{"class":104},[87,134903,130401],{"class":97},[87,134905,134906],{"class":89,"line":234},[87,134907,132946],{"class":199},[87,134909,134910,134912,134914,134916,134918,134920],{"class":89,"line":256},[87,134911,132951],{"class":205},[87,134913,503],{"class":97},[87,134915,129831],{"class":104},[87,134917,108],{"class":97},[87,134919,55767],{"class":104},[87,134921,130401],{"class":97},[87,134923,134924],{"class":89,"line":269},[87,134925,132966],{"class":199},[87,134927,134928,134930,134932,134934,134936,134938],{"class":89,"line":463},[87,134929,132971],{"class":205},[87,134931,503],{"class":97},[87,134933,129831],{"class":104},[87,134935,108],{"class":97},[87,134937,87159],{"class":104},[87,134939,130401],{"class":97},[87,134941,134942],{"class":89,"line":469},[87,134943,132986],{"class":199},[87,134945,134946,134948,134950,134952,134954,134956],{"class":89,"line":2287},[87,134947,132991],{"class":205},[87,134949,503],{"class":97},[87,134951,129831],{"class":104},[87,134953,108],{"class":97},[87,134955,133000],{"class":104},[87,134957,130401],{"class":97},[39,134959],{"style":41,"src":134960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134962,134963],{},"图片太大，盒子太小，此时需要修改图片的大小",[77,134965,134967],{"className":924,"code":134966,"language":926,"meta":82,"style":82},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[84,134968,134969],{"__ignoreMap":82},[87,134970,134971,134973,134975,134977,134979,134982,134984,134986,134989,134992,134994,134997],{"class":89,"line":90},[87,134972,938],{"class":97},[87,134974,39],{"class":93},[87,134976,56175],{"class":205},[87,134978,946],{"class":97},[87,134980,134981],{"class":949},"\"images\u002Fpic.jpg\"",[87,134983,56183],{"class":205},[87,134985,946],{"class":97},[87,134987,134988],{"class":949},"\"描述文字\"",[87,134990,134991],{"class":205}," title",[87,134993,946],{"class":97},[87,134995,134996],{"class":949},"\"悬停提示\"",[87,134998,953],{"class":97},[39,135000],{"style":41,"src":135001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135003,135004],{},"制造遮罩层",[77,135006,135007],{"className":924,"code":134966,"language":926,"meta":82,"style":82},[84,135008,135009],{"__ignoreMap":82},[87,135010,135011,135013,135015,135017,135019,135021,135023,135025,135027,135029,135031,135033],{"class":89,"line":90},[87,135012,938],{"class":97},[87,135014,39],{"class":93},[87,135016,56175],{"class":205},[87,135018,946],{"class":97},[87,135020,134981],{"class":949},[87,135022,56183],{"class":205},[87,135024,946],{"class":97},[87,135026,134988],{"class":949},[87,135028,134991],{"class":205},[87,135030,946],{"class":97},[87,135032,134996],{"class":949},[87,135034,953],{"class":97},[19,135036,135037],{},"此时是这样的为标准流",[39,135039],{"style":41,"src":135040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135042,135043],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135045,135046],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135048,135049],{},"让他在中间，用center(background-position)",[19,135051,135052],{},"将需要变的尽可能放到一个盒子中",[19,135054,135055],{},"放大盒子上内部盒子发生变化",[77,135057,135059],{"className":79,"code":135058,"language":81,"meta":82,"style":82},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[84,135060,135061,135067,135077,135081,135088,135098,135110,135122],{"__ignoreMap":82},[87,135062,135063,135065],{"class":89,"line":90},[87,135064,128540],{"class":205},[87,135066,98],{"class":97},[87,135068,135069,135071,135073,135075],{"class":89,"line":101},[87,135070,133272],{"class":104},[87,135072,108],{"class":97},[87,135074,55700],{"class":104},[87,135076,117],{"class":97},[87,135078,135079],{"class":89,"line":120},[87,135080,123],{"class":97},[87,135082,135083,135086],{"class":89,"line":222},[87,135084,135085],{"class":205},".child",[87,135087,98],{"class":97},[87,135089,135090,135092,135094,135096],{"class":89,"line":234},[87,135091,133272],{"class":104},[87,135093,108],{"class":97},[87,135095,55767],{"class":104},[87,135097,117],{"class":97},[87,135099,135100,135102,135104,135106,135108],{"class":89,"line":256},[87,135101,133286],{"class":104},[87,135103,108],{"class":97},[87,135105,1749],{"class":104},[87,135107,1423],{"class":171},[87,135109,117],{"class":97},[87,135111,135112,135114,135116,135118,135120],{"class":89,"line":269},[87,135113,133303],{"class":104},[87,135115,108],{"class":97},[87,135117,1749],{"class":104},[87,135119,1423],{"class":171},[87,135121,117],{"class":97},[87,135123,135124],{"class":89,"line":463},[87,135125,123],{"class":97},[19,135127,135128],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135130,135132],{"id":135131},"_122-精灵图","12.2 精灵图",[44,135134,135136],{"id":135135},"_1221-理解","12.2.1 理解",[1055,135138,135139,135157],{},[29,135140,135141,135142,133372,135145,135148,135149,135152,135153,135156],{},"目的： ",[57,135143,135144],{},"为了有效地减少服务器接收和发送请求的次数",[57,135146,135147],{},"提高"," 页面的 ",[57,135150,135151],{},"加载速度"," ，出现了 ",[57,135154,135155],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[29,135158,135159,135160,135162,135163,135165,135166,135168,135169,135171,135172,135174,135175,135177],{},"使用精灵图核心：",[54652,135161],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54652,135164],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54652,135167],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54652,135170],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54652,135173],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54652,135176],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[44,135179,135181],{"id":135180},"_1222-扒图","12.2.2 扒图",[77,135183,135186],{"className":135184,"code":135185,"language":599},[597],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[84,135187,135185],{"__ignoreMap":82},[39,135189],{"style":41,"src":135190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[39,135192],{"style":41,"src":135193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[44,135195,135197],{"id":135196},"_1223-精灵图的实现","12.2.3 精灵图的实现",[39,135199],{"style":41,"src":135200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135202,135203],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[39,135205],{"style":41,"src":135206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[77,135208,135210],{"className":79,"code":135209,"language":81,"meta":82,"style":82},"\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",[84,135211,135212,135217,135224,135236,135248,135267,135284],{"__ignoreMap":82},[87,135213,135214],{"class":89,"line":90},[87,135215,135216],{"class":199},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[87,135218,135219,135222],{"class":89,"line":101},[87,135220,135221],{"class":205},".icon",[87,135223,98],{"class":97},[87,135225,135226,135228,135230,135232,135234],{"class":89,"line":120},[87,135227,213],{"class":104},[87,135229,108],{"class":97},[87,135231,1792],{"class":104},[87,135233,245],{"class":171},[87,135235,117],{"class":97},[87,135237,135238,135240,135242,135244,135246],{"class":89,"line":222},[87,135239,225],{"class":104},[87,135241,108],{"class":97},[87,135243,1792],{"class":104},[87,135245,245],{"class":171},[87,135247,117],{"class":97},[87,135249,135250,135252,135254,135256,135258,135261,135263,135265],{"class":89,"line":234},[87,135251,71541],{"class":104},[87,135253,108],{"class":97},[87,135255,62662],{"class":104},[87,135257,165],{"class":97},[87,135259,135260],{"class":492},"sprites.png",[87,135262,14664],{"class":97},[87,135264,735],{"class":104},[87,135266,117],{"class":97},[87,135268,135269,135271,135273,135275,135277,135280,135282],{"class":89,"line":256},[87,135270,129731],{"class":104},[87,135272,108],{"class":97},[87,135274,52701],{"class":104},[87,135276,245],{"class":171},[87,135278,135279],{"class":104}," -20",[87,135281,245],{"class":171},[87,135283,117],{"class":97},[87,135285,135286],{"class":89,"line":269},[87,135287,123],{"class":97},[39,135289],{"style":41,"src":135290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,135292,135293],{},"在前端中坐标轴的正方向是右和下",[14,135295,135297],{"id":135296},"_123-字体图标","12.3 字体图标",[44,135299,135301],{"id":135300},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,135303,135304],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,135306,135307],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,135309,135310],{},"1.图片文件还是比较大的。",[19,135312,135313],{},"2.图片本身放大和缩小会失真。",[19,135315,135316],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,135318,135319,135320,26687],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[57,135321,135322],{},"字体图标 iconfont",[19,135324,135325,135328,135329,29332],{},[57,135326,135327],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[57,135330,135331],{},"展示的是图标，本质属于字体",[44,135333,135335],{"id":135334},"_1232-字体图标的优点","12.3.2 字体图标的优点",[26,135337,135338,135343,135346,135349,135352],{},[29,135339,135340,135342],{},[57,135341,26823],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[29,135344,135345],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[29,135347,135348],{},"兼容性：几乎支持所有的浏览器，请放心使用",[29,135350,135351],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[29,135353,135354],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[44,135356,135358],{"id":135357},"_1233-字体库下载网站","12.3.3 字体库下载网站",[26,135360,135361],{},[29,135362,135363,135364],{},"icomoon字体库：",[1334,135365,135368],{"href":135366,"rel":135367},"http:\u002F\u002Ficomoon.io\u002F",[24812],"http:\u002F\u002Ficomoon.io",[19,135370,135371],{},"进去之后点icomoon app",[39,135373],{"style":41,"src":135374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,135376,135377],{},"可以对其编辑：",[39,135379],{"style":41,"src":135380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,135382,135383],{},"生成字体：",[39,135385],{"style":41,"src":135386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,135388,135389],{},"下载：",[39,135391],{"style":41,"src":135392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[26,135394,135395],{},[29,135396,135397,135398],{},"阿里iconfont字体库： ",[1334,135399,135400],{"href":135400,"rel":135401},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24812],[44,135403,135405],{"id":135404},"_1234-字体图标的引入","12.3.4 字体图标的引入",[1055,135407,135408],{},[29,135409,135410,135411,135414],{},"把下载包里面的 ",[57,135412,135413],{},"fonts"," 文件夹放入页面根目录下",[39,135416],{"style":41,"src":135417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[1055,135419,135420],{"start":101},[29,135421,135422],{},"字体文件格式",[1235,135424,135425,135434],{},[1238,135426,135427],{},[1241,135428,135429,135432],{},[1244,135430,135431],{"align":24683},"格式",[1244,135433,24687],{"align":24683},[1281,135435,135436,135446,135456,135466],{},[1241,135437,135438,135443],{},[1286,135439,135440],{"align":24683},[57,135441,135442],{},".ttf",[1286,135444,135445],{"align":24683},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[1241,135447,135448,135453],{},[1286,135449,135450],{"align":24683},[57,135451,135452],{},".woff",[1286,135454,135455],{"align":24683},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[1241,135457,135458,135463],{},[1286,135459,135460],{"align":24683},[57,135461,135462],{},".eot",[1286,135464,135465],{"align":24683},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[1241,135467,135468,135473],{},[1286,135469,135470],{"align":24683},[57,135471,135472],{},"svg",[1286,135474,135475],{"align":24683},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[1055,135477,135478],{"start":120},[29,135479,135480],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[77,135482,135484],{"className":79,"code":135483,"language":81,"meta":82,"style":82},"\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",[84,135485,135486,135491,135498,135510,135526,135551,135572,135592,135612,135616,135622,135632,135643],{"__ignoreMap":82},[87,135487,135488],{"class":89,"line":90},[87,135489,135490],{"class":199},"\u002F* 引入字体图标 *\u002F\n",[87,135492,135493,135496],{"class":89,"line":101},[87,135494,135495],{"class":171},"@font-face",[87,135497,98],{"class":97},[87,135499,135500,135503,135505,135508],{"class":89,"line":120},[87,135501,135502],{"class":104},"  font-family",[87,135504,108],{"class":97},[87,135506,135507],{"class":949},"'icomoon'",[87,135509,117],{"class":97},[87,135511,135512,135515,135517,135519,135521,135524],{"class":89,"line":222},[87,135513,135514],{"class":104},"  src",[87,135516,108],{"class":97},[87,135518,62662],{"class":104},[87,135520,165],{"class":97},[87,135522,135523],{"class":949},"'fonts\u002Ficomoon.eot'",[87,135525,175],{"class":97},[87,135527,135528,135530,135532,135534,135536,135539,135541,135544,135546,135549],{"class":89,"line":234},[87,135529,135514],{"class":104},[87,135531,108],{"class":97},[87,135533,62662],{"class":104},[87,135535,165],{"class":97},[87,135537,135538],{"class":949},"'fonts\u002Ficomoon.eot?#iefix'",[87,135540,14664],{"class":97},[87,135542,135543],{"class":104},"format",[87,135545,165],{"class":97},[87,135547,135548],{"class":949},"'embedded-opentype'",[87,135550,38994],{"class":97},[87,135552,135553,135556,135558,135561,135563,135565,135567,135570],{"class":89,"line":256},[87,135554,135555],{"class":104},"       url",[87,135557,165],{"class":97},[87,135559,135560],{"class":949},"'fonts\u002Ficomoon.woff'",[87,135562,14664],{"class":97},[87,135564,135543],{"class":104},[87,135566,165],{"class":97},[87,135568,135569],{"class":949},"'woff'",[87,135571,38994],{"class":97},[87,135573,135574,135576,135578,135581,135583,135585,135587,135590],{"class":89,"line":269},[87,135575,135555],{"class":104},[87,135577,165],{"class":97},[87,135579,135580],{"class":949},"'fonts\u002Ficomoon.ttf'",[87,135582,14664],{"class":97},[87,135584,135543],{"class":104},[87,135586,165],{"class":97},[87,135588,135589],{"class":949},"'truetype'",[87,135591,38994],{"class":97},[87,135593,135594,135596,135598,135601,135603,135605,135607,135610],{"class":89,"line":463},[87,135595,135555],{"class":104},[87,135597,165],{"class":97},[87,135599,135600],{"class":949},"'fonts\u002Ficomoon.svg#icomoon'",[87,135602,14664],{"class":97},[87,135604,135543],{"class":104},[87,135606,165],{"class":97},[87,135608,135609],{"class":949},"'svg'",[87,135611,175],{"class":97},[87,135613,135614],{"class":89,"line":469},[87,135615,123],{"class":97},[87,135617,135618,135620],{"class":89,"line":2287},[87,135619,135221],{"class":205},[87,135621,98],{"class":97},[87,135623,135624,135626,135628,135630],{"class":89,"line":2568},[87,135625,135502],{"class":104},[87,135627,108],{"class":97},[87,135629,135507],{"class":949},[87,135631,117],{"class":97},[87,135633,135634,135637,135639,135641],{"class":89,"line":2573},[87,135635,135636],{"class":104},"  font-style",[87,135638,108],{"class":97},[87,135640,64775],{"class":104},[87,135642,117],{"class":97},[87,135644,135645],{"class":89,"line":2579},[87,135646,123],{"class":97},[19,135648,135649],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[39,135651],{"style":41,"src":135652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[1055,135654,135655],{"start":222},[29,135656,135657],{},"添加字体",[39,135659],{"style":41,"src":135660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,135662,135663],{},"复制：",[39,135665],{"style":41,"src":135666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,135668,135669],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[1055,135671,135672],{"start":234},[29,135673,135674],{},"代码展示：",[77,135676,135677],{"className":79,"code":135483,"language":81,"meta":82,"style":82},[84,135678,135679,135683,135689,135699,135713,135735,135753,135771,135789,135793,135799,135809,135819],{"__ignoreMap":82},[87,135680,135681],{"class":89,"line":90},[87,135682,135490],{"class":199},[87,135684,135685,135687],{"class":89,"line":101},[87,135686,135495],{"class":171},[87,135688,98],{"class":97},[87,135690,135691,135693,135695,135697],{"class":89,"line":120},[87,135692,135502],{"class":104},[87,135694,108],{"class":97},[87,135696,135507],{"class":949},[87,135698,117],{"class":97},[87,135700,135701,135703,135705,135707,135709,135711],{"class":89,"line":222},[87,135702,135514],{"class":104},[87,135704,108],{"class":97},[87,135706,62662],{"class":104},[87,135708,165],{"class":97},[87,135710,135523],{"class":949},[87,135712,175],{"class":97},[87,135714,135715,135717,135719,135721,135723,135725,135727,135729,135731,135733],{"class":89,"line":234},[87,135716,135514],{"class":104},[87,135718,108],{"class":97},[87,135720,62662],{"class":104},[87,135722,165],{"class":97},[87,135724,135538],{"class":949},[87,135726,14664],{"class":97},[87,135728,135543],{"class":104},[87,135730,165],{"class":97},[87,135732,135548],{"class":949},[87,135734,38994],{"class":97},[87,135736,135737,135739,135741,135743,135745,135747,135749,135751],{"class":89,"line":256},[87,135738,135555],{"class":104},[87,135740,165],{"class":97},[87,135742,135560],{"class":949},[87,135744,14664],{"class":97},[87,135746,135543],{"class":104},[87,135748,165],{"class":97},[87,135750,135569],{"class":949},[87,135752,38994],{"class":97},[87,135754,135755,135757,135759,135761,135763,135765,135767,135769],{"class":89,"line":269},[87,135756,135555],{"class":104},[87,135758,165],{"class":97},[87,135760,135580],{"class":949},[87,135762,14664],{"class":97},[87,135764,135543],{"class":104},[87,135766,165],{"class":97},[87,135768,135589],{"class":949},[87,135770,38994],{"class":97},[87,135772,135773,135775,135777,135779,135781,135783,135785,135787],{"class":89,"line":463},[87,135774,135555],{"class":104},[87,135776,165],{"class":97},[87,135778,135600],{"class":949},[87,135780,14664],{"class":97},[87,135782,135543],{"class":104},[87,135784,165],{"class":97},[87,135786,135609],{"class":949},[87,135788,175],{"class":97},[87,135790,135791],{"class":89,"line":469},[87,135792,123],{"class":97},[87,135794,135795,135797],{"class":89,"line":2287},[87,135796,135221],{"class":205},[87,135798,98],{"class":97},[87,135800,135801,135803,135805,135807],{"class":89,"line":2568},[87,135802,135502],{"class":104},[87,135804,108],{"class":97},[87,135806,135507],{"class":949},[87,135808,117],{"class":97},[87,135810,135811,135813,135815,135817],{"class":89,"line":2573},[87,135812,135636],{"class":104},[87,135814,108],{"class":97},[87,135816,64775],{"class":104},[87,135818,117],{"class":97},[87,135820,135821],{"class":89,"line":2579},[87,135822,123],{"class":97},[39,135824],{"style":41,"src":135825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,135827,135828],{},"更加细节展示：",[1055,135830,135831],{},[29,135832,135833],{},"html 标签内添加小图标",[39,135835],{"style":41,"src":135836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[1055,135838,135839],{"start":101},[29,135840,135841],{},"给标签定义字体",[77,135843,135844],{"className":924,"code":925,"language":926,"meta":82,"style":82},[84,135845,135846,135850,135864,135868],{"__ignoreMap":82},[87,135847,135848],{"class":89,"line":90},[87,135849,933],{"class":199},[87,135851,135852,135854,135856,135858,135860,135862],{"class":89,"line":101},[87,135853,938],{"class":97},[87,135855,94],{"class":93},[87,135857,943],{"class":205},[87,135859,946],{"class":97},[87,135861,950],{"class":949},[87,135863,953],{"class":97},[87,135865,135866],{"class":89,"line":120},[87,135867,958],{"class":97},[87,135869,135870,135872,135874],{"class":89,"line":222},[87,135871,963],{"class":97},[87,135873,94],{"class":93},[87,135875,953],{"class":97},[19,135877,135878],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[39,135880],{"style":41,"src":135881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[44,135883,135885],{"id":135884},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135887,135888],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135890,135891,135892,135895],{},"把压缩包里面的 ",[57,135893,135894],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135897,135898],{},"打开网站，点下方：",[39,135900],{"style":41,"src":135901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[39,135903],{"style":41,"src":135904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[39,135906],{"style":41,"src":135907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135909,135910],{},"点yes重新加载",[19,135912,135913],{},"然后重复之前的操作就可以实现了",[19,135915,135916],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[44,135918,135920],{"id":135919},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[39,135922],{"style":41,"src":135923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1006,135925,135926],{},"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":82,"searchDepth":101,"depth":101,"links":135928},[135929,135935,135940],{"id":134532,"depth":101,"text":134533,"children":135930},[135931,135932,135933,135934],{"id":134544,"depth":120,"text":134545},{"id":134573,"depth":120,"text":134574},{"id":134601,"depth":120,"text":134602},{"id":134659,"depth":120,"text":134660},{"id":135131,"depth":101,"text":135132,"children":135936},[135937,135938,135939],{"id":135135,"depth":120,"text":135136},{"id":135180,"depth":120,"text":135181},{"id":135196,"depth":120,"text":135197},{"id":135296,"depth":101,"text":135297,"children":135941},[135942,135943,135944,135945,135946,135947],{"id":135300,"depth":120,"text":135301},{"id":135334,"depth":120,"text":135335},{"id":135357,"depth":120,"text":135358},{"id":135404,"depth":120,"text":135405},{"id":135884,"depth":120,"text":135885},{"id":135919,"depth":120,"text":135920},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134524,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135954,"title":135955,"body":135956,"description":1026,"extension":1027,"meta":137176,"navigation":1029,"path":137177,"seo":137178,"stem":137179,"__hash__":137180},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135957,"toc":137157},[135958,135961,135965,135968,135982,136046,136076,136079,136083,136087,136187,136234,136238,136241,136244,136278,136281,136284,136287,136290,136293,136296,136299,136301,136304,136307,136310,136313,136316,136319,136322,136350,136353,136357,136360,136367,136370,136373,136399,136402,136406,136409,136412,136419,136423,136426,136428,136460,136463,136466,136478,136484,136487,136490,136493,136495,136499,136502,136505,136508,136553,136557,136559,136562,136569,136611,136614,136618,136623,136637,136641,136644,136647,136650,136653,136656,136690,136693,136696,136750,136753,136756,136759,136762,136814,136817,136820,136869,136873,136875,136878,136881,136884,136887,136890,136947,136950,136956,136959,136962,136994,136997,137001,137005,137008,137040,137044,137047,137091,137095,137098,137101,137104,137107,137110,137113,137116,137118,137121,137123,137126,137129,137132,137135,137140,137143,137145,137148,137151,137154],[10,135959,135955],{"id":135960},"_13-界面样式与布局技巧",[14,135962,135964],{"id":135963},"_131-css三角","13.1 css三角",[19,135966,135967],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[26,135969,135970,135973,135976,135979],{},[29,135971,135972],{},"用css 边框可以模拟三角效果",[29,135974,135975],{},"宽度高度为0",[29,135977,135978],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[29,135980,135981],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[77,135983,135984],{"className":79,"code":192,"language":81,"meta":82,"style":82},[84,135985,135986,135990,135996,136006,136016,136032,136042],{"__ignoreMap":82},[87,135987,135988],{"class":89,"line":90},[87,135989,200],{"class":199},[87,135991,135992,135994],{"class":89,"line":101},[87,135993,206],{"class":205},[87,135995,98],{"class":97},[87,135997,135998,136000,136002,136004],{"class":89,"line":120},[87,135999,213],{"class":104},[87,136001,108],{"class":97},[87,136003,111],{"class":104},[87,136005,117],{"class":97},[87,136007,136008,136010,136012,136014],{"class":89,"line":222},[87,136009,225],{"class":104},[87,136011,108],{"class":97},[87,136013,111],{"class":104},[87,136015,117],{"class":97},[87,136017,136018,136020,136022,136024,136026,136028,136030],{"class":89,"line":234},[87,136019,237],{"class":104},[87,136021,108],{"class":97},[87,136023,242],{"class":104},[87,136025,245],{"class":171},[87,136027,248],{"class":104},[87,136029,251],{"class":104},[87,136031,117],{"class":97},[87,136033,136034,136036,136038,136040],{"class":89,"line":256},[87,136035,259],{"class":104},[87,136037,108],{"class":97},[87,136039,264],{"class":104},[87,136041,117],{"class":97},[87,136043,136044],{"class":89,"line":269},[87,136045,123],{"class":97},[77,136047,136048],{"className":79,"code":131623,"language":81,"meta":82,"style":82},[84,136049,136050,136056,136072],{"__ignoreMap":82},[87,136051,136052,136054],{"class":89,"line":90},[87,136053,94],{"class":93},[87,136055,98],{"class":97},[87,136057,136058,136060,136062,136064,136066,136068,136070],{"class":89,"line":101},[87,136059,237],{"class":104},[87,136061,108],{"class":97},[87,136063,1313],{"class":104},[87,136065,245],{"class":171},[87,136067,248],{"class":104},[87,136069,130863],{"class":104},[87,136071,117],{"class":97},[87,136073,136074],{"class":89,"line":120},[87,136075,123],{"class":97},[39,136077],{"style":41,"src":136078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136080,136082],{"id":136081},"_132-css用户界面样式","13.2 css用户界面样式",[44,136084,136086],{"id":136085},"_1321-鼠标样式","13.2.1 鼠标样式",[77,136088,136090],{"className":79,"code":136089,"language":81,"meta":82,"style":82},"\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",[84,136091,136092,136097,136116,136133,136151,136168],{"__ignoreMap":82},[87,136093,136094],{"class":89,"line":90},[87,136095,136096],{"class":199},"\u002F* 鼠标样式 *\u002F\n",[87,136098,136099,136101,136103,136106,136108,136110,136113],{"class":89,"line":101},[87,136100,94],{"class":93},[87,136102,503],{"class":97},[87,136104,136105],{"class":104},"cursor",[87,136107,108],{"class":97},[87,136109,62965],{"class":104},[87,136111,136112],{"class":97},"; }   ",[87,136114,136115],{"class":199},"\u002F* 手型 *\u002F\n",[87,136117,136118,136120,136122,136124,136126,136129,136131],{"class":89,"line":120},[87,136119,94],{"class":93},[87,136121,503],{"class":97},[87,136123,136105],{"class":104},[87,136125,108],{"class":97},[87,136127,136128],{"class":104},"default",[87,136130,136112],{"class":97},[87,136132,327],{"class":199},[87,136134,136135,136137,136139,136141,136143,136145,136148],{"class":89,"line":222},[87,136136,94],{"class":93},[87,136138,503],{"class":97},[87,136140,136105],{"class":104},[87,136142,108],{"class":97},[87,136144,565],{"class":104},[87,136146,136147],{"class":97},"; }      ",[87,136149,136150],{"class":199},"\u002F* 移动 *\u002F\n",[87,136152,136153,136155,136157,136159,136161,136163,136165],{"class":89,"line":234},[87,136154,94],{"class":93},[87,136156,503],{"class":97},[87,136158,136105],{"class":104},[87,136160,108],{"class":97},[87,136162,599],{"class":104},[87,136164,136147],{"class":97},[87,136166,136167],{"class":199},"\u002F* 文本 *\u002F\n",[87,136169,136170,136172,136174,136176,136178,136181,136184],{"class":89,"line":256},[87,136171,94],{"class":93},[87,136173,503],{"class":97},[87,136175,136105],{"class":104},[87,136177,108],{"class":97},[87,136179,136180],{"class":104},"not-allowed",[87,136182,136183],{"class":97},"; } ",[87,136185,136186],{"class":199},"\u002F* 禁止 *\u002F\n",[1235,136188,136189,136197],{},[1238,136190,136191],{},[1241,136192,136193,136195],{},[1244,136194,127939],{"align":24683},[1244,136196,28436],{"align":24683},[1281,136198,136199,136206,136213,136220,136227],{},[1241,136200,136201,136203],{},[1286,136202,136128],{"align":24683},[1286,136204,136205],{"align":24683},"小白 默认",[1241,136207,136208,136210],{},[1286,136209,62965],{"align":24683},[1286,136211,136212],{"align":24683},"小手",[1241,136214,136215,136217],{},[1286,136216,565],{"align":24683},[1286,136218,136219],{"align":24683},"移动",[1241,136221,136222,136224],{},[1286,136223,599],{"align":24683},[1286,136225,136226],{"align":24683},"文本",[1241,136228,136229,136231],{},[1286,136230,136180],{"align":24683},[1286,136232,136233],{"align":24683},"禁止",[44,136235,136237],{"id":136236},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,136239,136240],{},"去除表单轮廓线",[19,136242,136243],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[77,136245,136246],{"className":79,"code":130835,"language":81,"meta":82,"style":82},[84,136247,136248,136252,136258,136274],{"__ignoreMap":82},[87,136249,136250],{"class":89,"line":90},[87,136251,130842],{"class":199},[87,136253,136254,136256],{"class":89,"line":101},[87,136255,94],{"class":93},[87,136257,98],{"class":97},[87,136259,136260,136262,136264,136266,136268,136270,136272],{"class":89,"line":120},[87,136261,237],{"class":104},[87,136263,108],{"class":97},[87,136265,1313],{"class":104},[87,136267,245],{"class":171},[87,136269,248],{"class":104},[87,136271,130863],{"class":104},[87,136273,117],{"class":97},[87,136275,136276],{"class":89,"line":222},[87,136277,123],{"class":97},[19,136279,136280],{},"文本域：",[39,136282],{"style":41,"src":136283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,136285,136286],{},"此时会有一个空白区域",[39,136288],{"style":41,"src":136289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,136291,136292],{},"写在同一行就不会出现这个问题",[39,136294],{"style":41,"src":136295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,136297,136298],{},"文本域是行内块元素，一定记住！！！",[19,136300,99159],{},[39,136302],{"style":41,"src":136303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,136305,136306],{},"文本域尽量放在一行",[19,136308,136309],{},"知识回顾：cols是列，rols是行",[39,136311],{"style":41,"src":136312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,136314,136315],{},"它可以进行拖动，显然这是我们不愿意看到的",[39,136317],{"style":41,"src":136318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,136320,136321],{},"使用resize进行解决",[77,136323,136325],{"className":79,"code":136324,"language":81,"meta":82,"style":82},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[84,136326,136327,136333,136346],{"__ignoreMap":82},[87,136328,136329,136331],{"class":89,"line":90},[87,136330,54757],{"class":93},[87,136332,98],{"class":97},[87,136334,136335,136337,136339,136341,136343],{"class":89,"line":101},[87,136336,71727],{"class":104},[87,136338,108],{"class":97},[87,136340,55673],{"class":104},[87,136342,324],{"class":97},[87,136344,136345],{"class":199},"\u002F* 取消表单轮廓线 *\u002F\n",[87,136347,136348],{"class":89,"line":120},[87,136349,123],{"class":97},[19,136351,136352],{},"此时就无法通过右下方实现拖动了",[44,136354,136356],{"id":136355},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,136358,136359],{},"实现一个盒子中的文字和图片对齐",[19,136361,136362,136363,136366],{},"用于设置一个元素的 ",[57,136364,136365],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,136368,136369],{},"图片和文字默认是基线对齐",[39,136371],{"style":41,"src":136372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[77,136374,136375],{"className":79,"code":136324,"language":81,"meta":82,"style":82},[84,136376,136377,136383,136395],{"__ignoreMap":82},[87,136378,136379,136381],{"class":89,"line":90},[87,136380,54757],{"class":93},[87,136382,98],{"class":97},[87,136384,136385,136387,136389,136391,136393],{"class":89,"line":101},[87,136386,71727],{"class":104},[87,136388,108],{"class":97},[87,136390,55673],{"class":104},[87,136392,324],{"class":97},[87,136394,136345],{"class":199},[87,136396,136397],{"class":89,"line":120},[87,136398,123],{"class":97},[39,136400],{"style":41,"src":136401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[49,136403,136405],{"id":136404},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,136407,136408],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[39,136410],{"style":41,"src":136411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,136413,136414,136415,136418],{},"此时可以给图片、表单这些行内块元素的 ",[57,136416,136417],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[49,136420,136422],{"id":136421},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,136424,136425],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,136427,15583],{},[77,136429,136431],{"className":79,"code":136430,"language":81,"meta":82,"style":82},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[84,136432,136433,136438,136444,136456],{"__ignoreMap":82},[87,136434,136435],{"class":89,"line":90},[87,136436,136437],{"class":199},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[87,136439,136440,136442],{"class":89,"line":101},[87,136441,39],{"class":93},[87,136443,98],{"class":97},[87,136445,136446,136449,136451,136454],{"class":89,"line":120},[87,136447,136448],{"class":104},"  vertical-align",[87,136450,108],{"class":97},[87,136452,136453],{"class":104},"middle",[87,136455,117],{"class":97},[87,136457,136458],{"class":89,"line":222},[87,136459,123],{"class":97},[39,136461],{"style":41,"src":136462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,136464,136465],{},"主要解决方法有两种：",[1055,136467,136468],{},[29,136469,136470,136473,136474,136477],{},[57,136471,136472],{},"给图片"," 添加 ",[57,136475,136476],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,136479,136480,136481],{},"2.把图片转换为块级元素 ",[57,136482,136483],{},"display: block",[19,136485,136486],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,136488,136489],{},"img {",[19,136491,136492],{},"vertical-align:middle;",[19,136494,2037],{},[44,136496,136498],{"id":136497},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,136500,136501],{},"效果：",[39,136503],{"style":41,"src":136504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,136506,136507],{},"单行文本溢出显示省略号--必须满足三个条件：",[77,136509,136511],{"className":79,"code":136510,"language":81,"meta":82,"style":82},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[84,136512,136513,136518,136524,136534,136539,136549],{"__ignoreMap":82},[87,136514,136515],{"class":89,"line":90},[87,136516,136517],{"class":199},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[87,136519,136520,136522],{"class":89,"line":101},[87,136521,39],{"class":93},[87,136523,98],{"class":97},[87,136525,136526,136528,136530,136532],{"class":89,"line":120},[87,136527,136448],{"class":104},[87,136529,108],{"class":97},[87,136531,136453],{"class":104},[87,136533,117],{"class":97},[87,136535,136536],{"class":89,"line":222},[87,136537,136538],{"class":199},"  \u002F* 或 *\u002F\n",[87,136540,136541,136543,136545,136547],{"class":89,"line":234},[87,136542,129089],{"class":104},[87,136544,108],{"class":97},[87,136546,61805],{"class":104},[87,136548,117],{"class":97},[87,136550,136551],{"class":89,"line":256},[87,136552,123],{"class":97},[44,136554,136556],{"id":136555},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,136558,136501],{},[39,136560],{"style":41,"src":136561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,136563,136564,136565,136568],{},"多行文本溢出显示省略号， ",[57,136566,136567],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[77,136570,136571],{"className":79,"code":136510,"language":81,"meta":82,"style":82},[84,136572,136573,136577,136583,136593,136597,136607],{"__ignoreMap":82},[87,136574,136575],{"class":89,"line":90},[87,136576,136517],{"class":199},[87,136578,136579,136581],{"class":89,"line":101},[87,136580,39],{"class":93},[87,136582,98],{"class":97},[87,136584,136585,136587,136589,136591],{"class":89,"line":120},[87,136586,136448],{"class":104},[87,136588,108],{"class":97},[87,136590,136453],{"class":104},[87,136592,117],{"class":97},[87,136594,136595],{"class":89,"line":222},[87,136596,136538],{"class":199},[87,136598,136599,136601,136603,136605],{"class":89,"line":234},[87,136600,129089],{"class":104},[87,136602,108],{"class":97},[87,136604,61805],{"class":104},[87,136606,117],{"class":97},[87,136608,136609],{"class":89,"line":256},[87,136610,123],{"class":97},[19,136612,136613],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136615,136617],{"id":136616},"_133-常见布局技巧","13.3 常见布局技巧",[19,136619,136620],{},[57,136621,136622],{},"巧妙利用一个技术更快更好的布局：",[1055,136624,136625,136628,136631,136634],{},[29,136626,136627],{},"margin负值的运用",[29,136629,136630],{},"文字围绕浮动元素",[29,136632,136633],{},"行内块的巧妙运用",[29,136635,136636],{},"CSS三角强化",[44,136638,136640],{"id":136639},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,136642,136643],{},"应用场景：",[39,136645],{"style":41,"src":136646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[39,136648],{"style":41,"src":136649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,136651,136652],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,136654,136655],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[77,136657,136658],{"className":79,"code":130835,"language":81,"meta":82,"style":82},[84,136659,136660,136664,136670,136686],{"__ignoreMap":82},[87,136661,136662],{"class":89,"line":90},[87,136663,130842],{"class":199},[87,136665,136666,136668],{"class":89,"line":101},[87,136667,94],{"class":93},[87,136669,98],{"class":97},[87,136671,136672,136674,136676,136678,136680,136682,136684],{"class":89,"line":120},[87,136673,237],{"class":104},[87,136675,108],{"class":97},[87,136677,1313],{"class":104},[87,136679,245],{"class":171},[87,136681,248],{"class":104},[87,136683,130863],{"class":104},[87,136685,117],{"class":97},[87,136687,136688],{"class":89,"line":222},[87,136689,123],{"class":97},[39,136691],{"style":41,"src":136692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,136694,136695],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[77,136697,136699],{"className":79,"code":136698,"language":81,"meta":82,"style":82},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[84,136700,136701,136706,136712,136722,136734,136746],{"__ignoreMap":82},[87,136702,136703],{"class":89,"line":90},[87,136704,136705],{"class":199},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[87,136707,136708,136710],{"class":89,"line":101},[87,136709,131319],{"class":205},[87,136711,98],{"class":97},[87,136713,136714,136716,136718,136720],{"class":89,"line":120},[87,136715,133272],{"class":104},[87,136717,108],{"class":97},[87,136719,55700],{"class":104},[87,136721,117],{"class":97},[87,136723,136724,136726,136728,136730,136732],{"class":89,"line":222},[87,136725,133286],{"class":104},[87,136727,108],{"class":97},[87,136729,242],{"class":104},[87,136731,245],{"class":171},[87,136733,117],{"class":97},[87,136735,136736,136738,136740,136742,136744],{"class":89,"line":234},[87,136737,133303],{"class":104},[87,136739,108],{"class":97},[87,136741,1792],{"class":104},[87,136743,245],{"class":171},[87,136745,117],{"class":97},[87,136747,136748],{"class":89,"line":256},[87,136749,123],{"class":97},[19,136751,136752],{},"加上上述代码会发现：",[39,136754],{"style":41,"src":136755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,136757,136758],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,136760,136761],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[77,136763,136764],{"className":79,"code":136698,"language":81,"meta":82,"style":82},[84,136765,136766,136770,136776,136786,136798,136810],{"__ignoreMap":82},[87,136767,136768],{"class":89,"line":90},[87,136769,136705],{"class":199},[87,136771,136772,136774],{"class":89,"line":101},[87,136773,131319],{"class":205},[87,136775,98],{"class":97},[87,136777,136778,136780,136782,136784],{"class":89,"line":120},[87,136779,133272],{"class":104},[87,136781,108],{"class":97},[87,136783,55700],{"class":104},[87,136785,117],{"class":97},[87,136787,136788,136790,136792,136794,136796],{"class":89,"line":222},[87,136789,133286],{"class":104},[87,136791,108],{"class":97},[87,136793,242],{"class":104},[87,136795,245],{"class":171},[87,136797,117],{"class":97},[87,136799,136800,136802,136804,136806,136808],{"class":89,"line":234},[87,136801,133303],{"class":104},[87,136803,108],{"class":97},[87,136805,1792],{"class":104},[87,136807,245],{"class":171},[87,136809,117],{"class":97},[87,136811,136812],{"class":89,"line":256},[87,136813,123],{"class":97},[19,136815,136816],{},"解决方式2：",[19,136818,136819],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[77,136821,136823],{"className":79,"code":136822,"language":81,"meta":82,"style":82},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[84,136824,136825,136831,136841,136853,136865],{"__ignoreMap":82},[87,136826,136827,136829],{"class":89,"line":90},[87,136828,94],{"class":93},[87,136830,98],{"class":97},[87,136832,136833,136835,136837,136839],{"class":89,"line":101},[87,136834,133272],{"class":104},[87,136836,108],{"class":97},[87,136838,55700],{"class":104},[87,136840,117],{"class":97},[87,136842,136843,136845,136847,136849,136851],{"class":89,"line":120},[87,136844,133286],{"class":104},[87,136846,108],{"class":97},[87,136848,242],{"class":104},[87,136850,245],{"class":171},[87,136852,117],{"class":97},[87,136854,136855,136857,136859,136861,136863],{"class":89,"line":222},[87,136856,133303],{"class":104},[87,136858,108],{"class":97},[87,136860,1792],{"class":104},[87,136862,245],{"class":171},[87,136864,117],{"class":97},[87,136866,136867],{"class":89,"line":234},[87,136868,123],{"class":97},[44,136870,136872],{"id":136871},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136874,136643],{},[39,136876],{"style":41,"src":136877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136879,136880],{},"实现结构图：",[39,136882],{"style":41,"src":136883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136885,136886],{},"巧妙运用浮动元素不会压住文字的特性",[19,136888,136889],{},"代码显示：",[77,136891,136893],{"className":79,"code":136892,"language":81,"meta":82,"style":82},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[84,136894,136895,136901,136911,136915,136919,136923,136929,136943],{"__ignoreMap":82},[87,136896,136897,136899],{"class":89,"line":90},[87,136898,131319],{"class":205},[87,136900,98],{"class":97},[87,136902,136903,136905,136907,136909],{"class":89,"line":101},[87,136904,131946],{"class":104},[87,136906,108],{"class":97},[87,136908,24683],{"class":104},[87,136910,117],{"class":97},[87,136912,136913],{"class":89,"line":120},[87,136914,123],{"class":97},[87,136916,136917],{"class":89,"line":222},[87,136918,435],{"class":97},[87,136920,136921],{"class":89,"line":234},[87,136922,131314],{"class":199},[87,136924,136925,136927],{"class":89,"line":256},[87,136926,131319],{"class":205},[87,136928,98],{"class":97},[87,136930,136931,136933,136935,136937,136939,136941],{"class":89,"line":269},[87,136932,105],{"class":104},[87,136934,108],{"class":97},[87,136936,111],{"class":104},[87,136938,114],{"class":104},[87,136940,324],{"class":97},[87,136942,131336],{"class":199},[87,136944,136945],{"class":89,"line":463},[87,136946,123],{"class":97},[19,136948,136949],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[77,136951,136954],{"className":136952,"code":136953,"language":599},[597],"\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",[84,136955,136953],{"__ignoreMap":82},[39,136957],{"style":41,"src":136958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136960,136961],{},"最终展示结果：",[77,136963,136964],{"className":79,"code":131307,"language":81,"meta":82,"style":82},[84,136965,136966,136970,136976,136990],{"__ignoreMap":82},[87,136967,136968],{"class":89,"line":90},[87,136969,131314],{"class":199},[87,136971,136972,136974],{"class":89,"line":101},[87,136973,131319],{"class":205},[87,136975,98],{"class":97},[87,136977,136978,136980,136982,136984,136986,136988],{"class":89,"line":120},[87,136979,105],{"class":104},[87,136981,108],{"class":97},[87,136983,111],{"class":104},[87,136985,114],{"class":104},[87,136987,324],{"class":97},[87,136989,131336],{"class":199},[87,136991,136992],{"class":89,"line":222},[87,136993,123],{"class":97},[39,136995],{"style":41,"src":136996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136998,137000],{"id":136999},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[44,137002,137004],{"id":137003},"_1341-原理","13.4.1 原理",[39,137006],{"style":41,"src":137007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[77,137009,137010],{"className":79,"code":131307,"language":81,"meta":82,"style":82},[84,137011,137012,137016,137022,137036],{"__ignoreMap":82},[87,137013,137014],{"class":89,"line":90},[87,137015,131314],{"class":199},[87,137017,137018,137020],{"class":89,"line":101},[87,137019,131319],{"class":205},[87,137021,98],{"class":97},[87,137023,137024,137026,137028,137030,137032,137034],{"class":89,"line":120},[87,137025,105],{"class":104},[87,137027,108],{"class":97},[87,137029,111],{"class":104},[87,137031,114],{"class":104},[87,137033,324],{"class":97},[87,137035,131336],{"class":199},[87,137037,137038],{"class":89,"line":222},[87,137039,123],{"class":97},[44,137041,137043],{"id":137042},"_1342-实例","13.4.2 实例",[39,137045],{"style":41,"src":137046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[77,137048,137049],{"className":79,"code":131932,"language":81,"meta":82,"style":82},[84,137050,137051,137057,137067,137071,137077,137087],{"__ignoreMap":82},[87,137052,137053,137055],{"class":89,"line":90},[87,137054,131939],{"class":205},[87,137056,98],{"class":97},[87,137058,137059,137061,137063,137065],{"class":89,"line":101},[87,137060,131946],{"class":104},[87,137062,108],{"class":97},[87,137064,24683],{"class":104},[87,137066,117],{"class":97},[87,137068,137069],{"class":89,"line":120},[87,137070,123],{"class":97},[87,137072,137073,137075],{"class":89,"line":222},[87,137074,131961],{"class":205},[87,137076,98],{"class":97},[87,137078,137079,137081,137083,137085],{"class":89,"line":234},[87,137080,131946],{"class":104},[87,137082,108],{"class":97},[87,137084,73450],{"class":104},[87,137086,117],{"class":97},[87,137088,137089],{"class":89,"line":256},[87,137090,123],{"class":97},[14,137092,137094],{"id":137093},"_135-css的初始化","13.5 css的初始化",[19,137096,137097],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137099,137100],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137102,137103],{},"每个网页都必须首先进行 CSS初始化。",[19,137105,137106],{},"这里我们以 京东CSS初始化代码为例。",[19,137108,137109],{},"在网页右键查看网页源代码",[19,137111,137112],{},"找到css的link引入语句",[19,137114,137115],{},"然后ctrl+f 输入body",[19,137117,78154],{},[39,137119],{"style":41,"src":137120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137122,78177],{},[39,137124],{"style":41,"src":137125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137127,137128],{},"③打开了网页上传压缩的代码",[39,137130],{"style":41,"src":137131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137133,137134],{},"④从body前可以查看这个网页的初始化代码",[19,137136,137137],{},[57,137138,137139],{},"Unicode编码字体：",[19,137141,137142],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,137144,84133],{},[19,137146,137147],{},"黑体 \\9ED1\\4F53",[19,137149,137150],{},"宋体 \\5B8B\\4F53",[19,137152,137153],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1006,137155,137156],{},"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":82,"searchDepth":101,"depth":101,"links":137158},[137159,137160,137167,137171,137175],{"id":135963,"depth":101,"text":135964},{"id":136081,"depth":101,"text":136082,"children":137161},[137162,137163,137164,137165,137166],{"id":136085,"depth":120,"text":136086},{"id":136236,"depth":120,"text":136237},{"id":136355,"depth":120,"text":136356},{"id":136497,"depth":120,"text":136498},{"id":136555,"depth":120,"text":136556},{"id":136616,"depth":101,"text":136617,"children":137168},[137169,137170],{"id":136639,"depth":120,"text":136640},{"id":136871,"depth":120,"text":136872},{"id":136999,"depth":101,"text":137000,"children":137172},[137173,137174],{"id":137003,"depth":120,"text":137004},{"id":137042,"depth":120,"text":137043},{"id":137093,"depth":101,"text":137094},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135955,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137182,"title":137183,"body":137184,"description":1026,"extension":1027,"meta":138869,"navigation":1029,"path":138870,"seo":138871,"stem":138872,"__hash__":138873},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137185,"toc":138858},[137186,137189,137193,137197,137200,137207,137210,137213,137251,137254,137256,137270,137274,137283,137287,137292,137295,137298,137301,137336,137341,137344,137374,137377,137382,137385,137388,137418,137421,137474,137477,137481,137486,137498,137501,137505,137535,137538,137543,137546,137576,137579,137583,137600,137604,137608,137611,137644,137647,137651,137654,137657,137660,137663,137666,137777,137780,137783,137786,137888,137891,137895,137899,137903,137906,137946,137949,137951,137967,137971,137974,137979,138060,138063,138066,138192,138197,138200,138208,138211,138216,138301,138304,138308,138311,138314,138318,138338,138343,138427,138430,138435,138438,138441,138519,138522,138525,138528,138531,138534,138539,138542,138545,138617,138620,138625,138628,138725,138728,138734,138737,138740,138743,138746,138749,138752,138755,138758,138762,138767,138770,138803,138808,138811,138852,138855],[10,137187,137183],{"id":137188},"_14-html5与css3新特性",[14,137190,137192],{"id":137191},"_141-html5的新特性","14.1 HTML5的新特性",[44,137194,137196],{"id":137195},"_1411-基本标签","14.1.1 基本标签",[19,137198,137199],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137201,137202,137203,137206],{},"这些新特性都有兼容性问题，基本是 ",[57,137204,137205],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137208,137209],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137211,137212],{},"现在使用的是新特性：",[26,137214,137215,137221,137227,137233,137239,137245],{},[29,137216,137217,137220],{},[84,137218,137219],{},"\u003Cheader>"," 头部标签",[29,137222,137223,137226],{},[84,137224,137225],{},"\u003Cnav>"," 导航标签",[29,137228,137229,137232],{},[84,137230,137231],{},"\u003Carticle>"," 内容标签",[29,137234,137235,137238],{},[84,137236,137237],{},"\u003Csection>"," 定义文档某个区域",[29,137240,137241,137244],{},[84,137242,137243],{},"\u003Caside>"," 侧边栏标签",[29,137246,137247,137250],{},[84,137248,137249],{},"\u003Cfooter>"," 尾部标签",[39,137252],{"style":41,"src":137253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137255,1131],{},[26,137257,137258,137261,137264,137267],{},[29,137259,137260],{},"这种语义化标准主要是针对搜索引擎的",[29,137262,137263],{},"这些标签页面中可以经常使用",[29,137265,137266],{},"在IE9中，需要把这些元素转换为块级元素",[29,137268,137269],{},"移动端更喜欢使用这些标签",[44,137271,137273],{"id":137272},"_1412-多媒体标签","14.1.2 多媒体标签",[19,137275,137276,137277,137279,137280,137282],{},"音频 ",[57,137278,29121],{}," 和视频 ",[57,137281,29130],{}," 两个标签",[49,137284,137286],{"id":137285},"_14121-视频标签-video","14.1.2.1 视频标签- video",[1055,137288,137289],{},[29,137290,137291],{},"支持格式：",[39,137293],{"style":41,"src":137294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,137296,137297],{},"尽量使用MP4，兼容性好",[19,137299,137300],{},"用MP4就可以",[77,137302,137304],{"className":924,"code":137303,"language":926,"meta":82,"style":82},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[84,137305,137306],{"__ignoreMap":82},[87,137307,137308,137310,137312,137314,137316,137319,137321,137324,137327,137330,137332,137334],{"class":89,"line":90},[87,137309,938],{"class":97},[87,137311,29130],{"class":93},[87,137313,56175],{"class":205},[87,137315,946],{"class":97},[87,137317,137318],{"class":949},"\"movie.mp4\"",[87,137320,93349],{"class":205},[87,137322,137323],{"class":205}," autoplay",[87,137325,137326],{"class":205}," muted",[87,137328,137329],{"class":205}," loop",[87,137331,56250],{"class":97},[87,137333,29130],{"class":93},[87,137335,953],{"class":97},[1055,137337,137338],{"start":101},[29,137339,137340],{},"兼容写法",[19,137342,137343],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[77,137345,137346],{"className":924,"code":137303,"language":926,"meta":82,"style":82},[84,137347,137348],{"__ignoreMap":82},[87,137349,137350,137352,137354,137356,137358,137360,137362,137364,137366,137368,137370,137372],{"class":89,"line":90},[87,137351,938],{"class":97},[87,137353,29130],{"class":93},[87,137355,56175],{"class":205},[87,137357,946],{"class":97},[87,137359,137318],{"class":949},[87,137361,93349],{"class":205},[87,137363,137323],{"class":205},[87,137365,137326],{"class":205},[87,137367,137329],{"class":205},[87,137369,56250],{"class":97},[87,137371,29130],{"class":93},[87,137373,953],{"class":97},[19,137375,137376],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[1055,137378,137379],{"start":120},[29,137380,137381],{},"video常用属性",[39,137383],{"style":41,"src":137384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,137386,137387],{},"poster属性后面是跟的等待加载图片的地址",[77,137389,137390],{"className":924,"code":134966,"language":926,"meta":82,"style":82},[84,137391,137392],{"__ignoreMap":82},[87,137393,137394,137396,137398,137400,137402,137404,137406,137408,137410,137412,137414,137416],{"class":89,"line":90},[87,137395,938],{"class":97},[87,137397,39],{"class":93},[87,137399,56175],{"class":205},[87,137401,946],{"class":97},[87,137403,134981],{"class":949},[87,137405,56183],{"class":205},[87,137407,946],{"class":97},[87,137409,134988],{"class":949},[87,137411,134991],{"class":205},[87,137413,946],{"class":97},[87,137415,134996],{"class":949},[87,137417,953],{"class":97},[19,137419,137420],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[77,137422,137424],{"className":79,"code":137423,"language":81,"meta":82,"style":82},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[84,137425,137426,137431,137437,137460,137465,137470],{"__ignoreMap":82},[87,137427,137428],{"class":89,"line":90},[87,137429,137430],{"class":199},"\u002F* 2D 位移 *\u002F\n",[87,137432,137433,137435],{"class":89,"line":101},[87,137434,94],{"class":93},[87,137436,98],{"class":97},[87,137438,137439,137441,137443,137446,137448,137450,137452,137454,137456,137458],{"class":89,"line":120},[87,137440,157],{"class":104},[87,137442,108],{"class":97},[87,137444,137445],{"class":104},"translate",[87,137447,165],{"class":97},[87,137449,536],{"class":104},[87,137451,245],{"class":171},[87,137453,13385],{"class":97},[87,137455,1749],{"class":104},[87,137457,245],{"class":171},[87,137459,175],{"class":97},[87,137461,137462],{"class":89,"line":222},[87,137463,137464],{"class":199},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[87,137466,137467],{"class":89,"line":234},[87,137468,137469],{"class":199},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[87,137471,137472],{"class":89,"line":256},[87,137473,123],{"class":97},[19,137475,137476],{},"muted:自动静音属性",[49,137478,137480],{"id":137479},"_14122-音频标签audio","14.1.2.2 音频标签audio",[1055,137482,137483],{},[29,137484,137485],{},"基本使用",[19,137487,137488,137489,137494,137495],{},"当前 ",[57,137490,137491],{},[84,137492,137493],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[57,137496,137497],{},"mp3格式",[39,137499],{"style":41,"src":137500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[1055,137502,137503],{"start":101},[29,137504,137340],{},[77,137506,137507],{"className":924,"code":137303,"language":926,"meta":82,"style":82},[84,137508,137509],{"__ignoreMap":82},[87,137510,137511,137513,137515,137517,137519,137521,137523,137525,137527,137529,137531,137533],{"class":89,"line":90},[87,137512,938],{"class":97},[87,137514,29130],{"class":93},[87,137516,56175],{"class":205},[87,137518,946],{"class":97},[87,137520,137318],{"class":949},[87,137522,93349],{"class":205},[87,137524,137323],{"class":205},[87,137526,137326],{"class":205},[87,137528,137329],{"class":205},[87,137530,56250],{"class":97},[87,137532,29130],{"class":93},[87,137534,953],{"class":97},[19,137536,137537],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[1055,137539,137540],{"start":120},[29,137541,137542],{},"常用属性",[39,137544],{"style":41,"src":137545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[77,137547,137548],{"className":924,"code":137303,"language":926,"meta":82,"style":82},[84,137549,137550],{"__ignoreMap":82},[87,137551,137552,137554,137556,137558,137560,137562,137564,137566,137568,137570,137572,137574],{"class":89,"line":90},[87,137553,938],{"class":97},[87,137555,29130],{"class":93},[87,137557,56175],{"class":205},[87,137559,946],{"class":97},[87,137561,137318],{"class":949},[87,137563,93349],{"class":205},[87,137565,137323],{"class":205},[87,137567,137326],{"class":205},[87,137569,137329],{"class":205},[87,137571,56250],{"class":97},[87,137573,29130],{"class":93},[87,137575,953],{"class":97},[19,137577,137578],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[49,137580,137582],{"id":137581},"_14123-总结","14.1.2.3 总结",[26,137584,137585,137588,137591,137594,137597],{},[29,137586,137587],{},"音频标签和视频标签使用方式基本一致",[29,137589,137590],{},"浏览器支持情况不同",[29,137592,137593],{},"谷歌浏览器把音频和视频自动播放禁止了",[29,137595,137596],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[29,137598,137599],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[44,137601,137603],{"id":137602},"_1413-表单元素","14.1.3 表单元素",[49,137605,137607],{"id":137606},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[39,137609],{"style":41,"src":137610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[77,137612,137614],{"className":924,"code":137613,"language":926,"meta":82,"style":82},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[84,137615,137616],{"__ignoreMap":82},[87,137617,137618,137620,137622,137624,137626,137628,137630,137632,137635,137637,137639,137642],{"class":89,"line":90},[87,137619,938],{"class":97},[87,137621,54757],{"class":93},[87,137623,54760],{"class":205},[87,137625,946],{"class":97},[87,137627,63633],{"class":949},[87,137629,15870],{"class":205},[87,137631,946],{"class":97},[87,137633,137634],{"class":949},"\"username\"",[87,137636,61956],{"class":205},[87,137638,946],{"class":97},[87,137640,137641],{"class":949},"\"请输入用户名\"",[87,137643,953],{"class":97},[39,137645],{"style":41,"src":137646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[49,137648,137650],{"id":137649},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[39,137652],{"style":41,"src":137653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,137655,137656],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,137658,137659],{},"快捷操作：",[39,137661],{"style":41,"src":137662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,137664,137665],{},"例子1：",[77,137667,137669],{"className":924,"code":137668,"language":926,"meta":82,"style":82},"\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",[84,137670,137671,137694,137721,137750,137769],{"__ignoreMap":82},[87,137672,137673,137675,137677,137679,137681,137684,137687,137689,137692],{"class":89,"line":90},[87,137674,938],{"class":97},[87,137676,67557],{"class":93},[87,137678,67560],{"class":205},[87,137680,946],{"class":97},[87,137682,137683],{"class":949},"\"\u002Fsubmit\"",[87,137685,137686],{"class":205}," method",[87,137688,946],{"class":97},[87,137690,137691],{"class":949},"\"post\"",[87,137693,953],{"class":97},[87,137695,137696,137698,137700,137702,137704,137706,137708,137710,137712,137714,137716,137719],{"class":89,"line":101},[87,137697,53081],{"class":97},[87,137699,54757],{"class":93},[87,137701,54760],{"class":205},[87,137703,946],{"class":97},[87,137705,63633],{"class":949},[87,137707,15870],{"class":205},[87,137709,946],{"class":97},[87,137711,137634],{"class":949},[87,137713,61956],{"class":205},[87,137715,946],{"class":97},[87,137717,137718],{"class":949},"\"用户名\"",[87,137720,953],{"class":97},[87,137722,137723,137725,137727,137729,137731,137734,137736,137738,137741,137743,137745,137748],{"class":89,"line":120},[87,137724,53081],{"class":97},[87,137726,54757],{"class":93},[87,137728,54760],{"class":205},[87,137730,946],{"class":97},[87,137732,137733],{"class":949},"\"password\"",[87,137735,15870],{"class":205},[87,137737,946],{"class":97},[87,137739,137740],{"class":949},"\"pwd\"",[87,137742,61956],{"class":205},[87,137744,946],{"class":97},[87,137746,137747],{"class":949},"\"密码\"",[87,137749,953],{"class":97},[87,137751,137752,137754,137756,137758,137760,137762,137765,137767],{"class":89,"line":222},[87,137753,53081],{"class":97},[87,137755,54823],{"class":93},[87,137757,54760],{"class":205},[87,137759,946],{"class":97},[87,137761,67580],{"class":949},[87,137763,137764],{"class":97},">提交\u003C\u002F",[87,137766,54823],{"class":93},[87,137768,953],{"class":97},[87,137770,137771,137773,137775],{"class":89,"line":234},[87,137772,963],{"class":97},[87,137774,67557],{"class":93},[87,137776,953],{"class":97},[39,137778],{"style":41,"src":137779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,137781,137782],{},"value是表单域的内容",[19,137784,137785],{},"例子2：",[77,137787,137788],{"className":924,"code":137668,"language":926,"meta":82,"style":82},[84,137789,137790,137810,137836,137862,137880],{"__ignoreMap":82},[87,137791,137792,137794,137796,137798,137800,137802,137804,137806,137808],{"class":89,"line":90},[87,137793,938],{"class":97},[87,137795,67557],{"class":93},[87,137797,67560],{"class":205},[87,137799,946],{"class":97},[87,137801,137683],{"class":949},[87,137803,137686],{"class":205},[87,137805,946],{"class":97},[87,137807,137691],{"class":949},[87,137809,953],{"class":97},[87,137811,137812,137814,137816,137818,137820,137822,137824,137826,137828,137830,137832,137834],{"class":89,"line":101},[87,137813,53081],{"class":97},[87,137815,54757],{"class":93},[87,137817,54760],{"class":205},[87,137819,946],{"class":97},[87,137821,63633],{"class":949},[87,137823,15870],{"class":205},[87,137825,946],{"class":97},[87,137827,137634],{"class":949},[87,137829,61956],{"class":205},[87,137831,946],{"class":97},[87,137833,137718],{"class":949},[87,137835,953],{"class":97},[87,137837,137838,137840,137842,137844,137846,137848,137850,137852,137854,137856,137858,137860],{"class":89,"line":120},[87,137839,53081],{"class":97},[87,137841,54757],{"class":93},[87,137843,54760],{"class":205},[87,137845,946],{"class":97},[87,137847,137733],{"class":949},[87,137849,15870],{"class":205},[87,137851,946],{"class":97},[87,137853,137740],{"class":949},[87,137855,61956],{"class":205},[87,137857,946],{"class":97},[87,137859,137747],{"class":949},[87,137861,953],{"class":97},[87,137863,137864,137866,137868,137870,137872,137874,137876,137878],{"class":89,"line":222},[87,137865,53081],{"class":97},[87,137867,54823],{"class":93},[87,137869,54760],{"class":205},[87,137871,946],{"class":97},[87,137873,67580],{"class":949},[87,137875,137764],{"class":97},[87,137877,54823],{"class":93},[87,137879,953],{"class":97},[87,137881,137882,137884,137886],{"class":89,"line":234},[87,137883,963],{"class":97},[87,137885,67557],{"class":93},[87,137887,953],{"class":97},[39,137889],{"style":41,"src":137890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137892,137894],{"id":137893},"_142-css新特性","14.2 CSS新特性",[44,137896,137898],{"id":137897},"_1421-新增选择器","14.2.1 新增选择器",[49,137900,137902],{"id":137901},"_14211-属性选择器","14.2.1.1 属性选择器",[39,137904],{"style":41,"src":137905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[77,137907,137909],{"className":79,"code":137908,"language":81,"meta":82,"style":82},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[84,137910,137911,137926,137942],{"__ignoreMap":82},[87,137912,137913,137915,137917,137919,137921,137923],{"class":89,"line":90},[87,137914,54757],{"class":93},[87,137916,1982],{"class":97},[87,137918,104033],{"class":205},[87,137920,946],{"class":171},[87,137922,63633],{"class":949},[87,137924,137925],{"class":97},"] {\n",[87,137927,137928,137930,137932,137934,137936,137938,137940],{"class":89,"line":101},[87,137929,237],{"class":104},[87,137931,108],{"class":97},[87,137933,1313],{"class":104},[87,137935,245],{"class":171},[87,137937,248],{"class":104},[87,137939,131051],{"class":104},[87,137941,117],{"class":97},[87,137943,137944],{"class":89,"line":120},[87,137945,123],{"class":97},[39,137947],{"style":41,"src":137948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137950,1131],{},[26,137952,137953,137956,137959,137962],{},[29,137954,137955],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[29,137957,137958],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[29,137960,137961],{},"属性选择器也可以选择出来自定义的属性",[29,137963,137964,137966],{},[57,137965,9975],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[49,137968,137970],{"id":137969},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[39,137972],{"style":41,"src":137973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[1055,137975,137976],{},[29,137977,137978],{},"fist-child",[77,137980,137982],{"className":79,"code":137981,"language":81,"meta":82,"style":82},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[84,137983,137984,137989,138004,138024,138042],{"__ignoreMap":82},[87,137985,137986],{"class":89,"line":90},[87,137987,137988],{"class":199},"\u002F* 属性选择器 *\u002F\n",[87,137990,137991,137993,137995,137997,137999,138001],{"class":89,"line":101},[87,137992,54757],{"class":93},[87,137994,1982],{"class":97},[87,137996,104033],{"class":205},[87,137998,946],{"class":171},[87,138000,63633],{"class":949},[87,138002,138003],{"class":97},"] { }\n",[87,138005,138006,138008,138010,138012,138015,138018,138021],{"class":89,"line":120},[87,138007,54757],{"class":93},[87,138009,1982],{"class":97},[87,138011,15644],{"class":205},[87,138013,138014],{"class":171},"^=",[87,138016,138017],{"class":949},"\"icon\"",[87,138019,138020],{"class":97},"] { }  ",[87,138022,138023],{"class":199},"\u002F* 以 icon 开头 *\u002F\n",[87,138025,138026,138028,138030,138032,138035,138037,138039],{"class":89,"line":222},[87,138027,54757],{"class":93},[87,138029,1982],{"class":97},[87,138031,15644],{"class":205},[87,138033,138034],{"class":171},"$=",[87,138036,138017],{"class":949},[87,138038,138020],{"class":97},[87,138040,138041],{"class":199},"\u002F* 以 icon 结尾 *\u002F\n",[87,138043,138044,138046,138048,138050,138053,138055,138057],{"class":89,"line":234},[87,138045,54757],{"class":93},[87,138047,1982],{"class":97},[87,138049,15644],{"class":205},[87,138051,138052],{"class":171},"*=",[87,138054,138017],{"class":949},[87,138056,138020],{"class":97},[87,138058,138059],{"class":199},"\u002F* 包含 icon *\u002F\n",[19,138061,138062],{},"ul的第一个儿子文本为红色",[19,138064,138065],{},"一定要在冒号前加空格，不然就是选中所有的了",[77,138067,138069],{"className":79,"code":138068,"language":81,"meta":82,"style":82},".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",[84,138070,138071,138077,138087,138091,138095,138100,138113,138126,138142,138159,138176],{"__ignoreMap":82},[87,138072,138073,138075],{"class":89,"line":90},[87,138074,127766],{"class":205},[87,138076,98],{"class":97},[87,138078,138079,138081,138083,138085],{"class":89,"line":101},[87,138080,71833],{"class":104},[87,138082,108],{"class":97},[87,138084,58357],{"class":104},[87,138086,117],{"class":97},[87,138088,138089],{"class":89,"line":120},[87,138090,123],{"class":97},[87,138092,138093],{"class":89,"line":222},[87,138094,435],{"class":97},[87,138096,138097],{"class":89,"line":234},[87,138098,138099],{"class":199},"\u002F* 结构伪类选择器 *\u002F\n",[87,138101,138102,138104,138107,138110],{"class":89,"line":256},[87,138103,29],{"class":93},[87,138105,138106],{"class":205},":first-child",[87,138108,138109],{"class":97}," { }           ",[87,138111,138112],{"class":199},"\u002F* 第一个 *\u002F\n",[87,138114,138115,138117,138120,138123],{"class":89,"line":269},[87,138116,29],{"class":93},[87,138118,138119],{"class":205},":last-child",[87,138121,138122],{"class":97}," { }            ",[87,138124,138125],{"class":199},"\u002F* 最后一个 *\u002F\n",[87,138127,138128,138130,138132,138134,138136,138139],{"class":89,"line":463},[87,138129,29],{"class":93},[87,138131,130385],{"class":205},[87,138133,165],{"class":97},[87,138135,1176],{"class":104},[87,138137,138138],{"class":97},") { }          ",[87,138140,138141],{"class":199},"\u002F* 第2个 *\u002F\n",[87,138143,138144,138146,138148,138150,138153,138156],{"class":89,"line":469},[87,138145,29],{"class":93},[87,138147,130385],{"class":205},[87,138149,165],{"class":97},[87,138151,138152],{"class":104},"2n",[87,138154,138155],{"class":97},") { }         ",[87,138157,138158],{"class":199},"\u002F* 偶数 *\u002F\n",[87,138160,138161,138163,138165,138167,138170,138173],{"class":89,"line":2287},[87,138162,29],{"class":93},[87,138164,130385],{"class":205},[87,138166,165],{"class":97},[87,138168,138169],{"class":104},"2n+1",[87,138171,138172],{"class":97},") { }       ",[87,138174,138175],{"class":199},"\u002F* 奇数 *\u002F\n",[87,138177,138178,138180,138182,138184,138187,138189],{"class":89,"line":2568},[87,138179,29],{"class":93},[87,138181,130385],{"class":205},[87,138183,165],{"class":97},[87,138185,138186],{"class":104},"-n+3",[87,138188,138172],{"class":97},[87,138190,138191],{"class":199},"\u002F* 前3个 *\u002F\n",[94,138193,138196],{"className":138194},[138195],"example","\n  示例内容\n",[19,138198,138199],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[26,138201,138202],{},[29,138203,138204,138207],{},[84,138205,138206],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138209,138210],{},"也就是说它选择的是熊大",[1055,138212,138213],{"start":256},[29,138214,138215],{},"权重",[77,138217,138219],{"className":79,"code":138218,"language":81,"meta":82,"style":82},"\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",[84,138220,138221,138225,138235,138245,138259,138273,138287],{"__ignoreMap":82},[87,138222,138223],{"class":89,"line":90},[87,138224,138099],{"class":199},[87,138226,138227,138229,138231,138233],{"class":89,"line":101},[87,138228,29],{"class":93},[87,138230,138106],{"class":205},[87,138232,138109],{"class":97},[87,138234,138112],{"class":199},[87,138236,138237,138239,138241,138243],{"class":89,"line":120},[87,138238,29],{"class":93},[87,138240,138119],{"class":205},[87,138242,138122],{"class":97},[87,138244,138125],{"class":199},[87,138246,138247,138249,138251,138253,138255,138257],{"class":89,"line":222},[87,138248,29],{"class":93},[87,138250,130385],{"class":205},[87,138252,165],{"class":97},[87,138254,1176],{"class":104},[87,138256,138138],{"class":97},[87,138258,138141],{"class":199},[87,138260,138261,138263,138265,138267,138269,138271],{"class":89,"line":234},[87,138262,29],{"class":93},[87,138264,130385],{"class":205},[87,138266,165],{"class":97},[87,138268,138152],{"class":104},[87,138270,138155],{"class":97},[87,138272,138158],{"class":199},[87,138274,138275,138277,138279,138281,138283,138285],{"class":89,"line":256},[87,138276,29],{"class":93},[87,138278,130385],{"class":205},[87,138280,165],{"class":97},[87,138282,138169],{"class":104},[87,138284,138172],{"class":97},[87,138286,138175],{"class":199},[87,138288,138289,138291,138293,138295,138297,138299],{"class":89,"line":269},[87,138290,29],{"class":93},[87,138292,130385],{"class":205},[87,138294,165],{"class":97},[87,138296,138186],{"class":104},[87,138298,138172],{"class":97},[87,138300,138191],{"class":199},[19,138302,138303],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[49,138305,138307],{"id":138306},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,138309,138310],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[39,138312],{"style":41,"src":138313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[1055,138315,138316],{},[29,138317,1131],{},[26,138319,138320,138323,138326,138329,138332,138335],{},[29,138321,138322],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[29,138324,138325],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[29,138327,138328],{},"语法： element::before {}",[29,138330,138331],{},"before 和 after 必须有 content 属性",[29,138333,138334],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[29,138336,138337],{},"伪元素选择器和标签选择器一样，权重为 1",[1055,138339,138340],{"start":101},[29,138341,138342],{},"实例",[77,138344,138345],{"className":79,"code":138218,"language":81,"meta":82,"style":82},[84,138346,138347,138351,138361,138371,138385,138399,138413],{"__ignoreMap":82},[87,138348,138349],{"class":89,"line":90},[87,138350,138099],{"class":199},[87,138352,138353,138355,138357,138359],{"class":89,"line":101},[87,138354,29],{"class":93},[87,138356,138106],{"class":205},[87,138358,138109],{"class":97},[87,138360,138112],{"class":199},[87,138362,138363,138365,138367,138369],{"class":89,"line":120},[87,138364,29],{"class":93},[87,138366,138119],{"class":205},[87,138368,138122],{"class":97},[87,138370,138125],{"class":199},[87,138372,138373,138375,138377,138379,138381,138383],{"class":89,"line":222},[87,138374,29],{"class":93},[87,138376,130385],{"class":205},[87,138378,165],{"class":97},[87,138380,1176],{"class":104},[87,138382,138138],{"class":97},[87,138384,138141],{"class":199},[87,138386,138387,138389,138391,138393,138395,138397],{"class":89,"line":234},[87,138388,29],{"class":93},[87,138390,130385],{"class":205},[87,138392,165],{"class":97},[87,138394,138152],{"class":104},[87,138396,138155],{"class":97},[87,138398,138158],{"class":199},[87,138400,138401,138403,138405,138407,138409,138411],{"class":89,"line":256},[87,138402,29],{"class":93},[87,138404,130385],{"class":205},[87,138406,165],{"class":97},[87,138408,138169],{"class":104},[87,138410,138172],{"class":97},[87,138412,138175],{"class":199},[87,138414,138415,138417,138419,138421,138423,138425],{"class":89,"line":269},[87,138416,29],{"class":93},[87,138418,130385],{"class":205},[87,138420,165],{"class":97},[87,138422,138186],{"class":104},[87,138424,138172],{"class":97},[87,138426,138191],{"class":199},[39,138428],{"style":41,"src":138429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[1055,138431,138432],{"start":120},[29,138433,138434],{},"使用场景1",[39,138436],{"style":41,"src":138437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,138439,138440],{},"不需要再加盒子来整红色那部分了",[77,138442,138444],{"className":79,"code":138443,"language":81,"meta":82,"style":82},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[84,138445,138446,138451,138460,138471,138481,138485,138494,138505,138515],{"__ignoreMap":82},[87,138447,138448],{"class":89,"line":90},[87,138449,138450],{"class":199},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[87,138452,138453,138455,138458],{"class":89,"line":101},[87,138454,94],{"class":93},[87,138456,138457],{"class":205},"::before",[87,138459,98],{"class":97},[87,138461,138462,138465,138467,138469],{"class":89,"line":120},[87,138463,138464],{"class":104},"  content",[87,138466,108],{"class":97},[87,138468,8602],{"class":949},[87,138470,117],{"class":97},[87,138472,138473,138475,138477,138479],{"class":89,"line":222},[87,138474,129089],{"class":104},[87,138476,108],{"class":97},[87,138478,61805],{"class":104},[87,138480,117],{"class":97},[87,138482,138483],{"class":89,"line":234},[87,138484,123],{"class":97},[87,138486,138487,138489,138492],{"class":89,"line":256},[87,138488,94],{"class":93},[87,138490,138491],{"class":205},"::after",[87,138493,98],{"class":97},[87,138495,138496,138498,138500,138503],{"class":89,"line":269},[87,138497,138464],{"class":104},[87,138499,108],{"class":97},[87,138501,138502],{"class":949},"\"→\"",[87,138504,117],{"class":97},[87,138506,138507,138509,138511,138513],{"class":89,"line":463},[87,138508,71833],{"class":104},[87,138510,108],{"class":97},[87,138512,63005],{"class":104},[87,138514,117],{"class":97},[87,138516,138517],{"class":89,"line":469},[87,138518,123],{"class":97},[39,138520],{"style":41,"src":138521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,138523,138524],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[39,138526],{"style":41,"src":138527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138529,138530],{},"但是在引用时需要先转义一下",[19,138532,138533],{},"content='\\e930'",[1055,138535,138536],{"start":222},[29,138537,138538],{},"使用场景2",[19,138540,138541],{},"仿土豆效果",[19,138543,138544],{},"通过使用伪元素选择器可以减少body中盒子的数量",[77,138546,138547],{"className":79,"code":138443,"language":81,"meta":82,"style":82},[84,138548,138549,138553,138561,138571,138581,138585,138593,138603,138613],{"__ignoreMap":82},[87,138550,138551],{"class":89,"line":90},[87,138552,138450],{"class":199},[87,138554,138555,138557,138559],{"class":89,"line":101},[87,138556,94],{"class":93},[87,138558,138457],{"class":205},[87,138560,98],{"class":97},[87,138562,138563,138565,138567,138569],{"class":89,"line":120},[87,138564,138464],{"class":104},[87,138566,108],{"class":97},[87,138568,8602],{"class":949},[87,138570,117],{"class":97},[87,138572,138573,138575,138577,138579],{"class":89,"line":222},[87,138574,129089],{"class":104},[87,138576,108],{"class":97},[87,138578,61805],{"class":104},[87,138580,117],{"class":97},[87,138582,138583],{"class":89,"line":234},[87,138584,123],{"class":97},[87,138586,138587,138589,138591],{"class":89,"line":256},[87,138588,94],{"class":93},[87,138590,138491],{"class":205},[87,138592,98],{"class":97},[87,138594,138595,138597,138599,138601],{"class":89,"line":269},[87,138596,138464],{"class":104},[87,138598,108],{"class":97},[87,138600,138502],{"class":949},[87,138602,117],{"class":97},[87,138604,138605,138607,138609,138611],{"class":89,"line":463},[87,138606,71833],{"class":104},[87,138608,108],{"class":97},[87,138610,63005],{"class":104},[87,138612,117],{"class":97},[87,138614,138615],{"class":89,"line":469},[87,138616,123],{"class":97},[39,138618],{"style":41,"src":138619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[1055,138621,138622],{"start":234},[29,138623,138624],{},"使用场景3",[19,138626,138627],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[77,138629,138631],{"className":79,"code":138630,"language":81,"meta":82,"style":82},".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",[84,138632,138633,138639,138649,138653,138657,138661,138669,138679,138689,138693,138701,138711,138721],{"__ignoreMap":82},[87,138634,138635,138637],{"class":89,"line":90},[87,138636,131319],{"class":205},[87,138638,98],{"class":97},[87,138640,138641,138643,138645,138647],{"class":89,"line":101},[87,138642,131946],{"class":104},[87,138644,108],{"class":97},[87,138646,24683],{"class":104},[87,138648,117],{"class":97},[87,138650,138651],{"class":89,"line":120},[87,138652,123],{"class":97},[87,138654,138655],{"class":89,"line":222},[87,138656,435],{"class":97},[87,138658,138659],{"class":89,"line":234},[87,138660,138450],{"class":199},[87,138662,138663,138665,138667],{"class":89,"line":256},[87,138664,94],{"class":93},[87,138666,138457],{"class":205},[87,138668,98],{"class":97},[87,138670,138671,138673,138675,138677],{"class":89,"line":269},[87,138672,138464],{"class":104},[87,138674,108],{"class":97},[87,138676,8602],{"class":949},[87,138678,117],{"class":97},[87,138680,138681,138683,138685,138687],{"class":89,"line":463},[87,138682,129089],{"class":104},[87,138684,108],{"class":97},[87,138686,61805],{"class":104},[87,138688,117],{"class":97},[87,138690,138691],{"class":89,"line":469},[87,138692,123],{"class":97},[87,138694,138695,138697,138699],{"class":89,"line":2287},[87,138696,94],{"class":93},[87,138698,138491],{"class":205},[87,138700,98],{"class":97},[87,138702,138703,138705,138707,138709],{"class":89,"line":2568},[87,138704,138464],{"class":104},[87,138706,108],{"class":97},[87,138708,138502],{"class":949},[87,138710,117],{"class":97},[87,138712,138713,138715,138717,138719],{"class":89,"line":2573},[87,138714,71833],{"class":104},[87,138716,108],{"class":97},[87,138718,63005],{"class":104},[87,138720,117],{"class":97},[87,138722,138723],{"class":89,"line":2579},[87,138724,123],{"class":97},[19,138726,138727],{},"div {\nmargin: 0 auto;\n}",[77,138729,138732],{"className":138730,"code":138731,"language":599},[597],"\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",[84,138733,138731],{"__ignoreMap":82},[19,138735,138736],{},"如果想让多个元素都发生变化",[19,138738,138739],{},"不能如下操作：",[19,138741,138742],{},"transition: width 2s ease 0.5s;",[19,138744,138745],{},"transition: height 2s ease 0.5s;不对！！！",[19,138747,138748],{},"上方会样式冲突，导致不显示任何过渡效果",[19,138750,138751],{},"使用如下：加逗号隔开",[19,138753,138754],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,138756,138757],{},"transition all 2s ease;",[44,138759,138761],{"id":138760},"_1426-过渡练习","14.2.6 过渡练习",[1055,138763,138764],{},[29,138765,138766],{},"进度条",[39,138768],{"style":41,"src":138769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[77,138771,138773],{"className":79,"code":138772,"language":81,"meta":82,"style":82},"div {\n  transition: all 0.3s ease;\n}\n",[84,138774,138775,138781,138799],{"__ignoreMap":82},[87,138776,138777,138779],{"class":89,"line":90},[87,138778,94],{"class":93},[87,138780,98],{"class":97},[87,138782,138783,138786,138788,138790,138793,138795,138797],{"class":89,"line":101},[87,138784,138785],{"class":104},"  transition",[87,138787,108],{"class":97},[87,138789,29068],{"class":104},[87,138791,138792],{"class":104}," 0.3",[87,138794,571],{"class":171},[87,138796,574],{"class":104},[87,138798,117],{"class":97},[87,138800,138801],{"class":89,"line":120},[87,138802,123],{"class":97},[1055,138804,138805],{"start":101},[29,138806,138807],{},"小米logo",[19,138809,138810],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[77,138812,138814],{"className":79,"code":138813,"language":81,"meta":82,"style":82},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[84,138815,138816,138821,138827,138843,138848],{"__ignoreMap":82},[87,138817,138818],{"class":89,"line":90},[87,138819,138820],{"class":199},"\u002F* CSS3 过渡 *\u002F\n",[87,138822,138823,138825],{"class":89,"line":101},[87,138824,94],{"class":93},[87,138826,98],{"class":97},[87,138828,138829,138831,138833,138835,138837,138839,138841],{"class":89,"line":120},[87,138830,138785],{"class":104},[87,138832,108],{"class":97},[87,138834,29068],{"class":104},[87,138836,138792],{"class":104},[87,138838,571],{"class":171},[87,138840,574],{"class":104},[87,138842,117],{"class":97},[87,138844,138845],{"class":89,"line":222},[87,138846,138847],{"class":199},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[87,138849,138850],{"class":89,"line":234},[87,138851,123],{"class":97},[19,138853,138854],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1006,138856,138857],{},"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":82,"searchDepth":101,"depth":101,"links":138859},[138860,138865],{"id":137191,"depth":101,"text":137192,"children":138861},[138862,138863,138864],{"id":137195,"depth":120,"text":137196},{"id":137272,"depth":120,"text":137273},{"id":137602,"depth":120,"text":137603},{"id":137893,"depth":101,"text":137894,"children":138866},[138867,138868],{"id":137897,"depth":120,"text":137898},{"id":138760,"depth":120,"text":138761},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137183,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138875,"title":138876,"body":138877,"description":1026,"extension":1027,"meta":140620,"navigation":1029,"path":140621,"seo":140622,"stem":140623,"__hash__":140624},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138878,"toc":140601},[138879,138882,138886,138889,138895,138901,138905,138907,138910,138913,138916,138919,138922,138925,138928,138932,138936,138939,138942,138945,138949,138952,138955,138960,138963,138966,138969,138973,138976,138985,138988,138991,138995,138998,139001,139006,139013,139027,139035,139042,139047,139050,139053,139056,139063,139067,139073,139079,139082,139085,139090,139096,139098,139106,139111,139114,139120,139122,139127,139132,139135,139137,139142,139145,139150,139155,139189,139193,139197,139200,139204,139207,139293,139296,139333,139336,139372,139376,139381,139394,139448,139450,139478,139480,139508,139514,139528,139530,139574,139576,139620,139623,139630,139641,139643,139669,139671,139697,139704,139720,139722,139816,139818,139912,139919,139922,139927,139933,140007,140010,140012,140048,140050,140086,140089,140096,140115,140118,140121,140123,140148,140150,140174,140177,140180,140210,140214,140217,140280,140282,140348,140350,140414,140417,140449,140451,140477,140479,140505,140508,140539,140541,140567,140569,140595,140598],[10,138880,138876],{"id":138881},"_15-品优购项目上篇-搭建与公共模块",[14,138883,138885],{"id":138884},"_151-项目规划","15.1 项目规划",[39,138887],{"style":41,"src":138888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138890,138891,138894],{},[57,138892,138893],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138896,138897,138900],{},[57,138898,138899],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138902,138904],{"id":138903},"_152-项目介绍","15.2 项目介绍",[19,138906,138893],{},[39,138908],{"style":41,"src":138909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138911,138912],{},"主页：",[39,138914],{"style":41,"src":138915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138917,138918],{},"列表页：",[39,138920],{"style":41,"src":138921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138923,138924],{},"注册页：",[39,138926],{"style":41,"src":138927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138929,138931],{"id":138930},"_153-项目搭建工作","15.3 项目搭建工作",[44,138933,138935],{"id":138934},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[39,138937],{"style":41,"src":138938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138940,138941],{},"经常更换的图片要放到upload文件夹中",[19,138943,138944],{},"不经常换的放到images文件夹中",[44,138946,138948],{"id":138947},"_1532-创建文件如下","15.3.2 创建文件如下",[39,138950],{"style":41,"src":138951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[39,138953],{"style":41,"src":138954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138956,138957],{},[57,138958,138959],{},"初始化样式：",[19,138961,138962],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138964,138965],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138967,138968],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[44,138970,138972],{"id":138971},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138974,138975],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138977,138978,138979,138984],{},"这里最典型的应用就是 ",[57,138980,138981],{},[84,138982,138983],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[39,138986],{"style":41,"src":138987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138989,138990],{},"通过link方法来引入",[44,138992,138994],{"id":138993},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[39,138996],{"style":41,"src":138997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138999,139000],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[1055,139002,139003],{},[29,139004,139005],{},"制作favicon图标",[19,139007,139008,139009,139012],{},"①把品优购图标切成 ",[84,139010,139011],{},"png"," 图片",[19,139014,139015,139016,139018,139019,139022,139023],{},"②把 ",[84,139017,139011],{}," 图片转换为 ",[84,139020,139021],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[1334,139024,139025],{"href":139025,"rel":139026},"http:\u002F\u002Fwww.bitbug.net\u002F",[24812],[1055,139028,139029,139032],{"start":101},[29,139030,139031],{},"favicon图标放到网站根目录下",[29,139033,139034],{},"HTML页面引入favicon",[19,139036,139037,139038,139041],{},"在html 页面里面的 ",[84,139039,139040],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139043,139044],{},[84,139045,139046],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139048,139049],{},"复制这行代码或者在生成这个的网站进行复制",[39,139051],{"style":41,"src":139052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139054,139055],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139057,139058,139059],{},"例如:",[1334,139060,139061],{"href":139061,"rel":139062},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24812],[44,139064,139066],{"id":139065},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139068,139069,139072],{},[57,139070,139071],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139074,139075,139078],{},[57,139076,139077],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139080,139081],{},"页面必须有三个标签用来符合 SEO 优化",[39,139083],{"style":41,"src":139084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[1055,139086,139087],{},[29,139088,139089],{},"title网站标题",[19,139091,139092,139095],{},[57,139093,139094],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139097,69722],{},[26,139099,139100,139103],{},[29,139101,139102],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[29,139104,139105],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[1055,139107,139108],{"start":101},[29,139109,139110],{},"description网站描述",[19,139112,139113],{},"简要说明我们网站主要是做什么的",[19,139115,139116,139119],{},[57,139117,139118],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139121,69722],{},[19,139123,139124],{},[84,139125,139126],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[1055,139128,139129],{"start":120},[29,139130,139131],{},"keywords关键词",[19,139133,139134],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139136,69722],{},[19,139138,139139],{},[84,139140,139141],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139143,139144],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139146,139147],{},[57,139148,139149],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[1055,139151,139152],{"start":222},[29,139153,139154],{},"代码总结",[77,139156,139157],{"className":924,"code":925,"language":926,"meta":82,"style":82},[84,139158,139159,139163,139177,139181],{"__ignoreMap":82},[87,139160,139161],{"class":89,"line":90},[87,139162,933],{"class":199},[87,139164,139165,139167,139169,139171,139173,139175],{"class":89,"line":101},[87,139166,938],{"class":97},[87,139168,94],{"class":93},[87,139170,943],{"class":205},[87,139172,946],{"class":97},[87,139174,950],{"class":949},[87,139176,953],{"class":97},[87,139178,139179],{"class":89,"line":120},[87,139180,958],{"class":97},[87,139182,139183,139185,139187],{"class":89,"line":222},[87,139184,963],{"class":97},[87,139186,94],{"class":93},[87,139188,953],{"class":97},[14,139190,139192],{"id":139191},"_154-项目公共部分制作","15.4 项目公共部分制作",[44,139194,139196],{"id":139195},"_1541-常用模块类命名","15.4.1 常用模块类命名",[39,139198],{"style":41,"src":139199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[44,139201,139203],{"id":139202},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139205,139206],{},"布局思路：",[26,139208,139209,139212,139215,139237,139270],{},[29,139210,139211],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[29,139213,139214],{},"里面包含版心的盒子",[29,139216,139217,139218],{},"版心盒子里面包含 1 号左侧盒子左浮动",[26,139219,139220,139228,139234],{},[29,139221,139222,139223,22448,139225,139227],{},"1 号盒子 里面包含一个",[84,139224,26],{},[84,139226,26],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[29,139229,139230,139231,139233],{},"里面的内容是水平排列，所以需要给",[84,139232,29],{},"设置浮动",[29,139235,139236],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[29,139238,139239,139240],{},"版心盒子里面包含 2 号右侧盒子右浮动",[26,139241,139242,139256,139261],{},[29,139243,139244,139245,22448,139247,139249,139250,139252,139253,139255],{},"2 号盒子 里面包含一个",[84,139246,26],{},[84,139248,26],{},"包裹",[84,139251,29],{},"，中间的",[84,139254,2012],{},"可以用样式去设置，也可以用字符 |",[29,139257,139258,139259,139233],{},"里面内容水平排列，给",[84,139260,29],{},[29,139262,139263,139264,139266,139267,139269],{},"找到里面所有偶数的 ",[84,139265,29],{}," 设置样式（偶数的 ",[84,139268,29],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[29,139271,139272,139273],{},"需要用到字体图标",[26,139274,139275,139281,139284,139287,139290],{},[29,139276,139277,139278],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[84,139279,139280],{},"arrow-icon",[29,139282,139283],{},"先要引入字体图片的资源",[29,139285,139286],{},"在样式里面利用 font-face 来进行声明",[29,139288,139289],{},"在伪元素的 content属性设置 图标的编码",[29,139291,139292],{},"给伪元素设置font-family属性",[19,139294,139295],{},"结构实例代码：",[77,139297,139299],{"className":79,"code":139298,"language":81,"meta":82,"style":82},"div::before {\n  content: \"\";\n  display: block;\n}\n",[84,139300,139301,139309,139319,139329],{"__ignoreMap":82},[87,139302,139303,139305,139307],{"class":89,"line":90},[87,139304,94],{"class":93},[87,139306,138457],{"class":205},[87,139308,98],{"class":97},[87,139310,139311,139313,139315,139317],{"class":89,"line":101},[87,139312,138464],{"class":104},[87,139314,108],{"class":97},[87,139316,8602],{"class":949},[87,139318,117],{"class":97},[87,139320,139321,139323,139325,139327],{"class":89,"line":120},[87,139322,129089],{"class":104},[87,139324,108],{"class":97},[87,139326,61805],{"class":104},[87,139328,117],{"class":97},[87,139330,139331],{"class":89,"line":222},[87,139332,123],{"class":97},[19,139334,139335],{},"样式实例代码：",[77,139337,139338],{"className":79,"code":139298,"language":81,"meta":82,"style":82},[84,139339,139340,139348,139358,139368],{"__ignoreMap":82},[87,139341,139342,139344,139346],{"class":89,"line":90},[87,139343,94],{"class":93},[87,139345,138457],{"class":205},[87,139347,98],{"class":97},[87,139349,139350,139352,139354,139356],{"class":89,"line":101},[87,139351,138464],{"class":104},[87,139353,108],{"class":97},[87,139355,8602],{"class":949},[87,139357,117],{"class":97},[87,139359,139360,139362,139364,139366],{"class":89,"line":120},[87,139361,129089],{"class":104},[87,139363,108],{"class":97},[87,139365,61805],{"class":104},[87,139367,117],{"class":97},[87,139369,139370],{"class":89,"line":222},[87,139371,123],{"class":97},[44,139373,139375],{"id":139374},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[26,139377,139378],{},[29,139379,139380],{},"header 盒子必须要有高度",[19,139382,139383,139384,139386,139387],{},"1 号盒子是 ",[84,139385,132478],{}," 标志定位，在正常开发过程中， ",[57,139388,139389,139390,139393],{},"logo的布局其实是有讲究的，需要进行 ",[84,139391,139392],{},"logoSEO","的优化 （★★★）",[26,139395,139396,139404,139412,139439],{},[29,139397,139398,139400,139401,139403],{},[84,139399,132478],{}," 里面首先放一个 ",[84,139402,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[29,139405,139406,139408,139409,139411],{},[84,139407,10],{}," 里面再放一个链接，可以返回首页的，把 ",[84,139410,132478],{}," 的背景图片给链接即可",[29,139413,139414,139415],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[26,139416,139417,139432],{},[29,139418,139419,139420,139423,139424,139427,139428,139431],{},"方法1：",[84,139421,139422],{},"text-indent"," 移到盒子外面（",[84,139425,139426],{},"text-indent: -9999px",") ，然后 ",[84,139429,139430],{},"overflow:hidden"," ，淘宝的做法",[29,139433,139434,139435,139438],{},"方法2：直接给 ",[84,139436,139437],{},"font-size: 0;"," 就看不到文字了，京东的做法",[29,139440,139441,139442,139444,139445,139447],{},"最后给链接一个 ",[84,139443,52351],{}," 属性，这样鼠标放到 ",[84,139446,132478],{}," 上就可以看到提示文字了",[19,139449,139295],{},[77,139451,139452],{"className":924,"code":132699,"language":926,"meta":82,"style":82},[84,139453,139454],{"__ignoreMap":82},[87,139455,139456,139458,139460,139462,139464,139466,139468,139470,139472,139474,139476],{"class":89,"line":90},[87,139457,938],{"class":97},[87,139459,1334],{"class":93},[87,139461,61993],{"class":205},[87,139463,946],{"class":97},[87,139465,132714],{"class":949},[87,139467,132717],{"class":205},[87,139469,946],{"class":97},[87,139471,132722],{"class":949},[87,139473,132725],{"class":97},[87,139475,1334],{"class":93},[87,139477,953],{"class":97},[19,139479,139335],{},[77,139481,139482],{"className":924,"code":132699,"language":926,"meta":82,"style":82},[84,139483,139484],{"__ignoreMap":82},[87,139485,139486,139488,139490,139492,139494,139496,139498,139500,139502,139504,139506],{"class":89,"line":90},[87,139487,938],{"class":97},[87,139489,1334],{"class":93},[87,139491,61993],{"class":205},[87,139493,946],{"class":97},[87,139495,132714],{"class":949},[87,139497,132717],{"class":205},[87,139499,946],{"class":97},[87,139501,132722],{"class":949},[87,139503,132725],{"class":97},[87,139505,1334],{"class":93},[87,139507,953],{"class":97},[19,139509,139510,139511,139513],{},"2 号盒子是 ",[84,139512,132491],{}," 搜索模块定位",[26,139515,139516,139519,139522,139525],{},[29,139517,139518],{},"search盒子利用定位的方式放在对应的位置",[29,139520,139521],{},"search盒子设置绝对定位，header盒子设置相对定位",[29,139523,139524],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[29,139526,139527],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139529,139295],{},[77,139531,139532],{"className":79,"code":132786,"language":81,"meta":82,"style":82},[84,139533,139534,139556,139560,139570],{"__ignoreMap":82},[87,139535,139536,139538,139540,139542,139544,139546,139548,139550,139552,139554],{"class":89,"line":90},[87,139537,94],{"class":93},[87,139539,13385],{"class":97},[87,139541,19],{"class":93},[87,139543,13385],{"class":97},[87,139545,10],{"class":93},[87,139547,13385],{"class":97},[87,139549,26],{"class":93},[87,139551,13385],{"class":97},[87,139553,29],{"class":93},[87,139555,98],{"class":97},[87,139557,139558],{"class":89,"line":101},[87,139559,132815],{"class":199},[87,139561,139562,139564,139566,139568],{"class":89,"line":120},[87,139563,129089],{"class":104},[87,139565,108],{"class":97},[87,139567,61805],{"class":104},[87,139569,117],{"class":97},[87,139571,139572],{"class":89,"line":222},[87,139573,123],{"class":97},[19,139575,139335],{},[77,139577,139578],{"className":79,"code":132786,"language":81,"meta":82,"style":82},[84,139579,139580,139602,139606,139616],{"__ignoreMap":82},[87,139581,139582,139584,139586,139588,139590,139592,139594,139596,139598,139600],{"class":89,"line":90},[87,139583,94],{"class":93},[87,139585,13385],{"class":97},[87,139587,19],{"class":93},[87,139589,13385],{"class":97},[87,139591,10],{"class":93},[87,139593,13385],{"class":97},[87,139595,26],{"class":93},[87,139597,13385],{"class":97},[87,139599,29],{"class":93},[87,139601,98],{"class":97},[87,139603,139604],{"class":89,"line":101},[87,139605,132815],{"class":199},[87,139607,139608,139610,139612,139614],{"class":89,"line":120},[87,139609,129089],{"class":104},[87,139611,108],{"class":97},[87,139613,61805],{"class":104},[87,139615,117],{"class":97},[87,139617,139618],{"class":89,"line":222},[87,139619,123],{"class":97},[19,139621,139622],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,139624,139625,139626,139629],{},"3 号盒子是 ",[84,139627,139628],{},"hotwords"," 热词模块定位",[26,139631,139632,139635,139638],{},[29,139633,139634],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[29,139636,139637],{},"给里面所有的a标签设置 左右10px的外边距",[29,139639,139640],{},"给第一个a标签设置文字变红色（#c81623）",[19,139642,139295],{},[77,139644,139645],{"className":79,"code":80,"language":81,"meta":82,"style":82},[84,139646,139647,139653,139665],{"__ignoreMap":82},[87,139648,139649,139651],{"class":89,"line":90},[87,139650,94],{"class":93},[87,139652,98],{"class":97},[87,139654,139655,139657,139659,139661,139663],{"class":89,"line":101},[87,139656,105],{"class":104},[87,139658,108],{"class":97},[87,139660,111],{"class":104},[87,139662,114],{"class":104},[87,139664,117],{"class":97},[87,139666,139667],{"class":89,"line":120},[87,139668,123],{"class":97},[19,139670,139335],{},[77,139672,139673],{"className":79,"code":80,"language":81,"meta":82,"style":82},[84,139674,139675,139681,139693],{"__ignoreMap":82},[87,139676,139677,139679],{"class":89,"line":90},[87,139678,94],{"class":93},[87,139680,98],{"class":97},[87,139682,139683,139685,139687,139689,139691],{"class":89,"line":101},[87,139684,105],{"class":104},[87,139686,108],{"class":97},[87,139688,111],{"class":104},[87,139690,114],{"class":104},[87,139692,117],{"class":97},[87,139694,139695],{"class":89,"line":120},[87,139696,123],{"class":97},[19,139698,139699,139700,139703],{},"4 号盒子是 ",[84,139701,139702],{},"shopcar"," 购物车模块",[26,139705,139706,139711,139714,139717],{},[29,139707,124261,139708,139710],{},[84,139709,139702],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[29,139712,139713],{},"count 统计部分用绝对定位做",[29,139715,139716],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[29,139718,139719],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,139721,139295],{},[77,139723,139724],{"className":79,"code":132898,"language":81,"meta":82,"style":82},[84,139725,139726,139730,139744,139748,139762,139766,139780,139784,139798,139802],{"__ignoreMap":82},[87,139727,139728],{"class":89,"line":90},[87,139729,132905],{"class":199},[87,139731,139732,139734,139736,139738,139740,139742],{"class":89,"line":101},[87,139733,132910],{"class":205},[87,139735,503],{"class":97},[87,139737,129831],{"class":104},[87,139739,108],{"class":97},[87,139741,132919],{"class":104},[87,139743,130401],{"class":97},[87,139745,139746],{"class":89,"line":120},[87,139747,132926],{"class":199},[87,139749,139750,139752,139754,139756,139758,139760],{"class":89,"line":222},[87,139751,132931],{"class":205},[87,139753,503],{"class":97},[87,139755,129831],{"class":104},[87,139757,108],{"class":97},[87,139759,55700],{"class":104},[87,139761,130401],{"class":97},[87,139763,139764],{"class":89,"line":234},[87,139765,132946],{"class":199},[87,139767,139768,139770,139772,139774,139776,139778],{"class":89,"line":256},[87,139769,132951],{"class":205},[87,139771,503],{"class":97},[87,139773,129831],{"class":104},[87,139775,108],{"class":97},[87,139777,55767],{"class":104},[87,139779,130401],{"class":97},[87,139781,139782],{"class":89,"line":269},[87,139783,132966],{"class":199},[87,139785,139786,139788,139790,139792,139794,139796],{"class":89,"line":463},[87,139787,132971],{"class":205},[87,139789,503],{"class":97},[87,139791,129831],{"class":104},[87,139793,108],{"class":97},[87,139795,87159],{"class":104},[87,139797,130401],{"class":97},[87,139799,139800],{"class":89,"line":469},[87,139801,132986],{"class":199},[87,139803,139804,139806,139808,139810,139812,139814],{"class":89,"line":2287},[87,139805,132991],{"class":205},[87,139807,503],{"class":97},[87,139809,129831],{"class":104},[87,139811,108],{"class":97},[87,139813,133000],{"class":104},[87,139815,130401],{"class":97},[19,139817,139335],{},[77,139819,139820],{"className":79,"code":132898,"language":81,"meta":82,"style":82},[84,139821,139822,139826,139840,139844,139858,139862,139876,139880,139894,139898],{"__ignoreMap":82},[87,139823,139824],{"class":89,"line":90},[87,139825,132905],{"class":199},[87,139827,139828,139830,139832,139834,139836,139838],{"class":89,"line":101},[87,139829,132910],{"class":205},[87,139831,503],{"class":97},[87,139833,129831],{"class":104},[87,139835,108],{"class":97},[87,139837,132919],{"class":104},[87,139839,130401],{"class":97},[87,139841,139842],{"class":89,"line":120},[87,139843,132926],{"class":199},[87,139845,139846,139848,139850,139852,139854,139856],{"class":89,"line":222},[87,139847,132931],{"class":205},[87,139849,503],{"class":97},[87,139851,129831],{"class":104},[87,139853,108],{"class":97},[87,139855,55700],{"class":104},[87,139857,130401],{"class":97},[87,139859,139860],{"class":89,"line":234},[87,139861,132946],{"class":199},[87,139863,139864,139866,139868,139870,139872,139874],{"class":89,"line":256},[87,139865,132951],{"class":205},[87,139867,503],{"class":97},[87,139869,129831],{"class":104},[87,139871,108],{"class":97},[87,139873,55767],{"class":104},[87,139875,130401],{"class":97},[87,139877,139878],{"class":89,"line":269},[87,139879,132966],{"class":199},[87,139881,139882,139884,139886,139888,139890,139892],{"class":89,"line":463},[87,139883,132971],{"class":205},[87,139885,503],{"class":97},[87,139887,129831],{"class":104},[87,139889,108],{"class":97},[87,139891,87159],{"class":104},[87,139893,130401],{"class":97},[87,139895,139896],{"class":89,"line":469},[87,139897,132986],{"class":199},[87,139899,139900,139902,139904,139906,139908,139910],{"class":89,"line":2287},[87,139901,132991],{"class":205},[87,139903,503],{"class":97},[87,139905,129831],{"class":104},[87,139907,108],{"class":97},[87,139909,133000],{"class":104},[87,139911,130401],{"class":97},[44,139913,139915,139916,139918],{"id":139914},"_1544-nav导航模块制作","15.4.4 ",[84,139917,54649],{},"导航模块制作",[39,139920],{"style":41,"src":139921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139923,139924,139926],{},[84,139925,54649],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139928,139929,139930],{},"1 号盒子左侧浮动，",[84,139931,139932],{},"dropdown",[26,139934,139935,139945,139953,139959,139967,139977,139985,139996],{},[29,139936,139937,139938,101944,139941,139944],{},"1号盒子有讲究，根据相关性 里面包含 ",[84,139939,139940],{},".dt",[84,139942,139943],{},".dd"," 两个盒子",[29,139946,139947,139949,139950,139952],{},[84,139948,139940],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[84,139951,139943],{}," 挤到下面去了",[29,139954,139955,139956,139958],{},"给 ",[84,139957,139943],{}," 盒子设置宽度 和 高度，以及背景颜色",[29,139960,139955,139961,139963,139964,121163],{},[84,139962,139943],{}," 盒子里面定义 无序列表 （",[84,139965,139966],{},"ul > li > a",[29,139968,139969,139970,139972,139973,139976],{},"每个 ",[84,139971,29],{}," 都有一个高度（",[84,139974,139975],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[29,139978,139955,139979,139981,139982,121163],{},[84,139980,29],{}," 里面的a设置文字大小（",[84,139983,139984],{},"14px",[29,139986,139955,139987,139989,139990,139992,139993,139995],{},[84,139988,29],{}," 设置 ",[84,139991,128634],{},"，当鼠标移入的时候，让",[84,139994,29],{},"的背景变成白色，让里面的文字变成红色",[29,139997,139998,140000,140001,140003,140004,140006],{},[84,139999,29],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[84,140002,29],{},"的右侧，那么给",[84,140005,29],{},"设置相对定位",[19,140008,140009],{},"一定要注意相关性",[19,140011,139295],{},[77,140013,140014],{"className":79,"code":139298,"language":81,"meta":82,"style":82},[84,140015,140016,140024,140034,140044],{"__ignoreMap":82},[87,140017,140018,140020,140022],{"class":89,"line":90},[87,140019,94],{"class":93},[87,140021,138457],{"class":205},[87,140023,98],{"class":97},[87,140025,140026,140028,140030,140032],{"class":89,"line":101},[87,140027,138464],{"class":104},[87,140029,108],{"class":97},[87,140031,8602],{"class":949},[87,140033,117],{"class":97},[87,140035,140036,140038,140040,140042],{"class":89,"line":120},[87,140037,129089],{"class":104},[87,140039,108],{"class":97},[87,140041,61805],{"class":104},[87,140043,117],{"class":97},[87,140045,140046],{"class":89,"line":222},[87,140047,123],{"class":97},[19,140049,139335],{},[77,140051,140052],{"className":79,"code":139298,"language":81,"meta":82,"style":82},[84,140053,140054,140062,140072,140082],{"__ignoreMap":82},[87,140055,140056,140058,140060],{"class":89,"line":90},[87,140057,94],{"class":93},[87,140059,138457],{"class":205},[87,140061,98],{"class":97},[87,140063,140064,140066,140068,140070],{"class":89,"line":101},[87,140065,138464],{"class":104},[87,140067,108],{"class":97},[87,140069,8602],{"class":949},[87,140071,117],{"class":97},[87,140073,140074,140076,140078,140080],{"class":89,"line":120},[87,140075,129089],{"class":104},[87,140077,108],{"class":97},[87,140079,61805],{"class":104},[87,140081,117],{"class":97},[87,140083,140084],{"class":89,"line":222},[87,140085,123],{"class":97},[19,140087,140088],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140090,140091,140092,140095],{},"2 号盒子左侧浮动，",[84,140093,140094],{},"navitems"," 导航栏组",[26,140097,140098,140103,140112],{},[29,140099,140100,140101],{},"里面结构是 ",[84,140102,139966],{},[29,140104,140105,140106,140108,140109,140111],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[84,140107,1334],{},"左右的",[84,140110,31830],{},"把两侧撑开",[29,140113,140114],{},"让文字垂直居中（行高等于高度）",[39,140116],{"style":41,"src":140117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140119,140120],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140122,139295],{},[77,140124,140126],{"className":79,"code":140125,"language":81,"meta":82,"style":82},".box {\n  float: left;\n}\n",[84,140127,140128,140134,140144],{"__ignoreMap":82},[87,140129,140130,140132],{"class":89,"line":90},[87,140131,131319],{"class":205},[87,140133,98],{"class":97},[87,140135,140136,140138,140140,140142],{"class":89,"line":101},[87,140137,131946],{"class":104},[87,140139,108],{"class":97},[87,140141,24683],{"class":104},[87,140143,117],{"class":97},[87,140145,140146],{"class":89,"line":120},[87,140147,123],{"class":97},[19,140149,139335],{},[77,140151,140152],{"className":79,"code":140125,"language":81,"meta":82,"style":82},[84,140153,140154,140160,140170],{"__ignoreMap":82},[87,140155,140156,140158],{"class":89,"line":90},[87,140157,131319],{"class":205},[87,140159,98],{"class":97},[87,140161,140162,140164,140166,140168],{"class":89,"line":101},[87,140163,131946],{"class":104},[87,140165,108],{"class":97},[87,140167,24683],{"class":104},[87,140169,117],{"class":97},[87,140171,140172],{"class":89,"line":120},[87,140173,123],{"class":97},[19,140175,140176],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[39,140178],{"style":41,"src":140179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[77,140181,140182],{"className":79,"code":131623,"language":81,"meta":82,"style":82},[84,140183,140184,140190,140206],{"__ignoreMap":82},[87,140185,140186,140188],{"class":89,"line":90},[87,140187,94],{"class":93},[87,140189,98],{"class":97},[87,140191,140192,140194,140196,140198,140200,140202,140204],{"class":89,"line":101},[87,140193,237],{"class":104},[87,140195,108],{"class":97},[87,140197,1313],{"class":104},[87,140199,245],{"class":171},[87,140201,248],{"class":104},[87,140203,130863],{"class":104},[87,140205,117],{"class":97},[87,140207,140208],{"class":89,"line":120},[87,140209,123],{"class":97},[44,140211,140213],{"id":140212},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[39,140215],{"style":41,"src":140216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[26,140218,140219,140224,140229],{},[29,140220,140221,140223],{},[84,140222,132669],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[29,140225,140226,140228],{},[84,140227,132669],{}," 里面有一个大的版心",[29,140230,140231,140232,140235,140236],{},"版心里面包含 1 号盒子，",[84,140233,140234],{},"mod_service"," 是服务模块，mod 是模块的意思",[26,140237,140238,140243,140256,140272,140277],{},[29,140239,139955,140240,140242],{},[84,140241,140234],{}," 设置高度（80px）和下边框",[29,140244,140245,140246,140249,140250,140252,140253,140255],{},"在里面定义 ",[84,140247,140248],{},"ul > li"," ,每个",[84,140251,29],{}," 宽度是300px 高度是 50px，给每个",[84,140254,29],{},"设置35px的左内边距",[29,140257,140258,140259,140261,140262,140264,140265,140267,140268,19358,140270,121163],{},"在每个",[84,140260,29],{},"里面，放一个 ",[84,140263,23857],{},"（里面放图标），一个",[84,140266,94],{},"（里面放",[84,140269,94],{},[84,140271,19],{},[29,140273,139955,140274,140276],{},[84,140275,23857],{},"设置浮动，让h5与这个div左右排列",[29,140278,140279],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,140281,139295],{},[77,140283,140285],{"className":79,"code":140284,"language":81,"meta":82,"style":82},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[84,140286,140287,140293,140305,140317,140344],{"__ignoreMap":82},[87,140288,140289,140291],{"class":89,"line":90},[87,140290,135221],{"class":205},[87,140292,98],{"class":97},[87,140294,140295,140297,140299,140301,140303],{"class":89,"line":101},[87,140296,213],{"class":104},[87,140298,108],{"class":97},[87,140300,1792],{"class":104},[87,140302,245],{"class":171},[87,140304,117],{"class":97},[87,140306,140307,140309,140311,140313,140315],{"class":89,"line":120},[87,140308,225],{"class":104},[87,140310,108],{"class":97},[87,140312,1792],{"class":104},[87,140314,245],{"class":171},[87,140316,117],{"class":97},[87,140318,140319,140321,140323,140325,140327,140329,140331,140333,140336,140338,140340,140342],{"class":89,"line":222},[87,140320,71541],{"class":104},[87,140322,108],{"class":97},[87,140324,62662],{"class":104},[87,140326,165],{"class":97},[87,140328,135260],{"class":492},[87,140330,14664],{"class":97},[87,140332,735],{"class":104},[87,140334,140335],{"class":104}," -10",[87,140337,245],{"class":171},[87,140339,135279],{"class":104},[87,140341,245],{"class":171},[87,140343,117],{"class":97},[87,140345,140346],{"class":89,"line":234},[87,140347,123],{"class":97},[19,140349,139335],{},[77,140351,140352],{"className":79,"code":140284,"language":81,"meta":82,"style":82},[84,140353,140354,140360,140372,140384,140410],{"__ignoreMap":82},[87,140355,140356,140358],{"class":89,"line":90},[87,140357,135221],{"class":205},[87,140359,98],{"class":97},[87,140361,140362,140364,140366,140368,140370],{"class":89,"line":101},[87,140363,213],{"class":104},[87,140365,108],{"class":97},[87,140367,1792],{"class":104},[87,140369,245],{"class":171},[87,140371,117],{"class":97},[87,140373,140374,140376,140378,140380,140382],{"class":89,"line":120},[87,140375,225],{"class":104},[87,140377,108],{"class":97},[87,140379,1792],{"class":104},[87,140381,245],{"class":171},[87,140383,117],{"class":97},[87,140385,140386,140388,140390,140392,140394,140396,140398,140400,140402,140404,140406,140408],{"class":89,"line":222},[87,140387,71541],{"class":104},[87,140389,108],{"class":97},[87,140391,62662],{"class":104},[87,140393,165],{"class":97},[87,140395,135260],{"class":492},[87,140397,14664],{"class":97},[87,140399,735],{"class":104},[87,140401,140335],{"class":104},[87,140403,245],{"class":171},[87,140405,135279],{"class":104},[87,140407,245],{"class":171},[87,140409,117],{"class":97},[87,140411,140412],{"class":89,"line":234},[87,140413,123],{"class":97},[19,140415,140416],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[26,140418,140419,140422,140428,140434,140446],{},[29,140420,140421],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[29,140423,140424,140425,121163],{},"里面的布局利用 自定义列表来实现（",[84,140426,140427],{},"dl > dt + dd",[29,140429,139955,140430,140433],{},[84,140431,140432],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[29,140435,139955,140436,140439,140440,19358,140442,140445],{},[84,140437,140438],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[84,140441,140438],{},[84,140443,140444],{},"dd","之间有些距离",[29,140447,140448],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,140450,139295],{},[77,140452,140453],{"className":79,"code":80,"language":81,"meta":82,"style":82},[84,140454,140455,140461,140473],{"__ignoreMap":82},[87,140456,140457,140459],{"class":89,"line":90},[87,140458,94],{"class":93},[87,140460,98],{"class":97},[87,140462,140463,140465,140467,140469,140471],{"class":89,"line":101},[87,140464,105],{"class":104},[87,140466,108],{"class":97},[87,140468,111],{"class":104},[87,140470,114],{"class":104},[87,140472,117],{"class":97},[87,140474,140475],{"class":89,"line":120},[87,140476,123],{"class":97},[19,140478,139335],{},[77,140480,140481],{"className":79,"code":80,"language":81,"meta":82,"style":82},[84,140482,140483,140489,140501],{"__ignoreMap":82},[87,140484,140485,140487],{"class":89,"line":90},[87,140486,94],{"class":93},[87,140488,98],{"class":97},[87,140490,140491,140493,140495,140497,140499],{"class":89,"line":101},[87,140492,105],{"class":104},[87,140494,108],{"class":97},[87,140496,111],{"class":104},[87,140498,114],{"class":104},[87,140500,117],{"class":97},[87,140502,140503],{"class":89,"line":120},[87,140504,123],{"class":97},[19,140506,140507],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[26,140509,140510,140519,140522,140533],{},[29,140511,140512,140513,140515,140516,140518],{},"分为上下两块，上面是 ",[84,140514,132686],{}," 友情链接，下面是 ",[84,140517,132679],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[29,140520,140521],{},"把内容分别复制到相应模块中",[29,140523,139955,140524,140526,140527,140529,140530,140532],{},[84,140525,132686],{}," 设置 15px 的下外边距，给",[84,140528,132686],{}," 里面 的 ",[84,140531,1334],{}," 标签设置 左右 3px 的外边距",[29,140534,140535,140536,140538],{},"给",[84,140537,132679],{}," 设置 20px 的行高",[19,140540,139295],{},[77,140542,140543],{"className":79,"code":80,"language":81,"meta":82,"style":82},[84,140544,140545,140551,140563],{"__ignoreMap":82},[87,140546,140547,140549],{"class":89,"line":90},[87,140548,94],{"class":93},[87,140550,98],{"class":97},[87,140552,140553,140555,140557,140559,140561],{"class":89,"line":101},[87,140554,105],{"class":104},[87,140556,108],{"class":97},[87,140558,111],{"class":104},[87,140560,114],{"class":104},[87,140562,117],{"class":97},[87,140564,140565],{"class":89,"line":120},[87,140566,123],{"class":97},[19,140568,139335],{},[77,140570,140571],{"className":79,"code":80,"language":81,"meta":82,"style":82},[84,140572,140573,140579,140591],{"__ignoreMap":82},[87,140574,140575,140577],{"class":89,"line":90},[87,140576,94],{"class":93},[87,140578,98],{"class":97},[87,140580,140581,140583,140585,140587,140589],{"class":89,"line":101},[87,140582,105],{"class":104},[87,140584,108],{"class":97},[87,140586,111],{"class":104},[87,140588,114],{"class":104},[87,140590,117],{"class":97},[87,140592,140593],{"class":89,"line":120},[87,140594,123],{"class":97},[19,140596,140597],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1006,140599,140600],{},"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":82,"searchDepth":101,"depth":101,"links":140602},[140603,140604,140605,140612],{"id":138884,"depth":101,"text":138885},{"id":138903,"depth":101,"text":138904},{"id":138930,"depth":101,"text":138931,"children":140606},[140607,140608,140609,140610,140611],{"id":138934,"depth":120,"text":138935},{"id":138947,"depth":120,"text":138948},{"id":138971,"depth":120,"text":138972},{"id":138993,"depth":120,"text":138994},{"id":139065,"depth":120,"text":139066},{"id":139191,"depth":101,"text":139192,"children":140613},[140614,140615,140616,140617,140619],{"id":139195,"depth":120,"text":139196},{"id":139202,"depth":120,"text":139203},{"id":139374,"depth":120,"text":139375},{"id":139914,"depth":120,"text":140618},"15.4.4 nav导航模块制作",{"id":140212,"depth":120,"text":140213},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138876,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140626,"title":140627,"body":140628,"description":1026,"extension":1027,"meta":143030,"navigation":1029,"path":143031,"seo":143032,"stem":143033,"__hash__":143034},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140629,"toc":143007},[140630,140633,140637,140641,140653,140656,140659,140662,140673,140675,140699,140701,140725,140730,140733,140735,140771,140773,140809,140812,140817,140820,140823,140826,140856,140863,140866,140876,140878,140912,140915,140949,140955,140972,140974,141010,141012,141048,141053,141078,141080,141106,141108,141132,141139,141142,141206,141208,141250,141252,141292,141299,141304,141306,141336,141338,141368,141372,141375,141382,141394,141396,141422,141424,141448,141451,141453,141477,141483,141493,141495,141525,141527,141557,141564,141605,141607,141643,141645,141681,141685,141688,141691,141694,141700,141705,141708,141731,141734,141758,141761,141785,141790,141793,141796,141799,141802,141805,141879,141881,141911,141913,141943,141946,141949,141981,141985,141989,142003,142012,142015,142020,142022,142116,142118,142212,142235,142237,142261,142263,142287,142294,142297,142307,142309,142333,142338,142346,142348,142378,142383,142423,142425,142451,142453,142479,142483,142486,142491,142494,142498,142506,142513,142521,142523,142553,142555,142585,142593,142596,142599,142601,142631,142633,142663,142666,142671,142673,142697,142699,142723,142726,142811,142813,142837,142839,142863,142867,142869,142893,142895,142929,142933,142947,142950,142955,142958,142963,142966,142996,143004],[10,140631,140627],{"id":140632},"_16-品优购项目下篇-主体与页面开发",[14,140634,140636],{"id":140635},"_161-项目主体模块制作","16.1 项目主体模块制作",[44,140638,140640],{"id":140639},"_1611-首页制作","16.1.1 首页制作",[19,140642,140643,140645,140646,140648,140649,140652],{},[57,140644,102984],{}," 主体模块是 ",[57,140647,74986],{}," 里面专有的，注意需要新的样式文件 ",[57,140650,140651],{},"index.css，"," 就不要写在common.css中了",[39,140654],{"style":41,"src":140655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[39,140657],{"style":41,"src":140658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,140660,140661],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[26,140663,140664,140667,140670],{},[29,140665,140666],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[29,140668,140669],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[29,140671,140672],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,140674,139295],{},[77,140676,140677],{"className":79,"code":140125,"language":81,"meta":82,"style":82},[84,140678,140679,140685,140695],{"__ignoreMap":82},[87,140680,140681,140683],{"class":89,"line":90},[87,140682,131319],{"class":205},[87,140684,98],{"class":97},[87,140686,140687,140689,140691,140693],{"class":89,"line":101},[87,140688,131946],{"class":104},[87,140690,108],{"class":97},[87,140692,24683],{"class":104},[87,140694,117],{"class":97},[87,140696,140697],{"class":89,"line":120},[87,140698,123],{"class":97},[19,140700,139335],{},[77,140702,140703],{"className":79,"code":140125,"language":81,"meta":82,"style":82},[84,140704,140705,140711,140721],{"__ignoreMap":82},[87,140706,140707,140709],{"class":89,"line":90},[87,140708,131319],{"class":205},[87,140710,98],{"class":97},[87,140712,140713,140715,140717,140719],{"class":89,"line":101},[87,140714,131946],{"class":104},[87,140716,108],{"class":97},[87,140718,24683],{"class":104},[87,140720,117],{"class":97},[87,140722,140723],{"class":89,"line":120},[87,140724,123],{"class":97},[1055,140726,140727],{},[29,140728,140729],{},"左侧focus模块制作",[39,140731],{"style":41,"src":140732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,140734,139295],{},[77,140736,140737],{"className":79,"code":128796,"language":81,"meta":82,"style":82},[84,140738,140739,140747,140757,140767],{"__ignoreMap":82},[87,140740,140741,140743,140745],{"class":89,"line":90},[87,140742,54757],{"class":93},[87,140744,62835],{"class":205},[87,140746,98],{"class":97},[87,140748,140749,140751,140753,140755],{"class":89,"line":101},[87,140750,128811],{"class":104},[87,140752,108],{"class":97},[87,140754,55825],{"class":104},[87,140756,117],{"class":97},[87,140758,140759,140761,140763,140765],{"class":89,"line":120},[87,140760,71727],{"class":104},[87,140762,108],{"class":97},[87,140764,55673],{"class":104},[87,140766,117],{"class":97},[87,140768,140769],{"class":89,"line":222},[87,140770,123],{"class":97},[19,140772,139335],{},[77,140774,140775],{"className":79,"code":128796,"language":81,"meta":82,"style":82},[84,140776,140777,140785,140795,140805],{"__ignoreMap":82},[87,140778,140779,140781,140783],{"class":89,"line":90},[87,140780,54757],{"class":93},[87,140782,62835],{"class":205},[87,140784,98],{"class":97},[87,140786,140787,140789,140791,140793],{"class":89,"line":101},[87,140788,128811],{"class":104},[87,140790,108],{"class":97},[87,140792,55825],{"class":104},[87,140794,117],{"class":97},[87,140796,140797,140799,140801,140803],{"class":89,"line":120},[87,140798,71727],{"class":104},[87,140800,108],{"class":97},[87,140802,55673],{"class":104},[87,140804,117],{"class":97},[87,140806,140807],{"class":89,"line":222},[87,140808,123],{"class":97},[19,140810,140811],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[1055,140813,140814],{"start":101},[29,140815,140816],{},"右侧newsflash模块制作",[39,140818],{"style":41,"src":140819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,140821,140822],{},"右侧的模块 分为上中下三个盒子",[19,140824,140825],{},"结构代码：",[77,140827,140828],{"className":924,"code":134966,"language":926,"meta":82,"style":82},[84,140829,140830],{"__ignoreMap":82},[87,140831,140832,140834,140836,140838,140840,140842,140844,140846,140848,140850,140852,140854],{"class":89,"line":90},[87,140833,938],{"class":97},[87,140835,39],{"class":93},[87,140837,56175],{"class":205},[87,140839,946],{"class":97},[87,140841,134981],{"class":949},[87,140843,56183],{"class":205},[87,140845,946],{"class":97},[87,140847,134988],{"class":949},[87,140849,134991],{"class":205},[87,140851,946],{"class":97},[87,140853,134996],{"class":949},[87,140855,953],{"class":97},[19,140857,140858,140859,140862],{},"1 号盒子为 ",[84,140860,140861],{},"news"," 新闻模块 高度为 165px",[39,140864],{"style":41,"src":140865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140867,140868,140869,140872,140873],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[84,140870,140871],{},"news-hd","，下面是 ",[84,140874,140875],{},"news-bd",[19,140877,140825],{},[77,140879,140880],{"className":924,"code":925,"language":926,"meta":82,"style":82},[84,140881,140882,140886,140900,140904],{"__ignoreMap":82},[87,140883,140884],{"class":89,"line":90},[87,140885,933],{"class":199},[87,140887,140888,140890,140892,140894,140896,140898],{"class":89,"line":101},[87,140889,938],{"class":97},[87,140891,94],{"class":93},[87,140893,943],{"class":205},[87,140895,946],{"class":97},[87,140897,950],{"class":949},[87,140899,953],{"class":97},[87,140901,140902],{"class":89,"line":120},[87,140903,958],{"class":97},[87,140905,140906,140908,140910],{"class":89,"line":222},[87,140907,963],{"class":97},[87,140909,94],{"class":93},[87,140911,953],{"class":97},[19,140913,140914],{},"样式代码：",[77,140916,140917],{"className":924,"code":925,"language":926,"meta":82,"style":82},[84,140918,140919,140923,140937,140941],{"__ignoreMap":82},[87,140920,140921],{"class":89,"line":90},[87,140922,933],{"class":199},[87,140924,140925,140927,140929,140931,140933,140935],{"class":89,"line":101},[87,140926,938],{"class":97},[87,140928,94],{"class":93},[87,140930,943],{"class":205},[87,140932,946],{"class":97},[87,140934,950],{"class":949},[87,140936,953],{"class":97},[87,140938,140939],{"class":89,"line":120},[87,140940,958],{"class":97},[87,140942,140943,140945,140947],{"class":89,"line":222},[87,140944,963],{"class":97},[87,140946,94],{"class":93},[87,140948,953],{"class":97},[19,140950,140951,140952,140954],{},"上面是",[84,140953,140871],{},"，设置高度是 33px，设置下边框",[26,140956,140957,140963],{},[29,140958,140959,140960,140962],{},"里面放一个",[84,140961,23857],{}," 标题",[29,140964,140965,140966,140968,140969,140971],{},"放一个a",[84,140967,103619],{},"，内容是 更多，然后让 ",[84,140970,1334],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140973,140825],{},[77,140975,140976],{"className":79,"code":139298,"language":81,"meta":82,"style":82},[84,140977,140978,140986,140996,141006],{"__ignoreMap":82},[87,140979,140980,140982,140984],{"class":89,"line":90},[87,140981,94],{"class":93},[87,140983,138457],{"class":205},[87,140985,98],{"class":97},[87,140987,140988,140990,140992,140994],{"class":89,"line":101},[87,140989,138464],{"class":104},[87,140991,108],{"class":97},[87,140993,8602],{"class":949},[87,140995,117],{"class":97},[87,140997,140998,141000,141002,141004],{"class":89,"line":120},[87,140999,129089],{"class":104},[87,141001,108],{"class":97},[87,141003,61805],{"class":104},[87,141005,117],{"class":97},[87,141007,141008],{"class":89,"line":222},[87,141009,123],{"class":97},[19,141011,140914],{},[77,141013,141014],{"className":79,"code":139298,"language":81,"meta":82,"style":82},[84,141015,141016,141024,141034,141044],{"__ignoreMap":82},[87,141017,141018,141020,141022],{"class":89,"line":90},[87,141019,94],{"class":93},[87,141021,138457],{"class":205},[87,141023,98],{"class":97},[87,141025,141026,141028,141030,141032],{"class":89,"line":101},[87,141027,138464],{"class":104},[87,141029,108],{"class":97},[87,141031,8602],{"class":949},[87,141033,117],{"class":97},[87,141035,141036,141038,141040,141042],{"class":89,"line":120},[87,141037,129089],{"class":104},[87,141039,108],{"class":97},[87,141041,61805],{"class":104},[87,141043,117],{"class":97},[87,141045,141046],{"class":89,"line":222},[87,141047,123],{"class":97},[19,141049,141050,141051],{},"下面是",[84,141052,140875],{},[26,141054,141055,141063],{},[29,141056,141057,141058,101944,141060,141062],{},"里面包含 ",[84,141059,26],{},[84,141061,29],{}," 还有链接",[29,141064,140535,141065,141067,141068,141070,141071,141074,141075],{},[84,141066,29],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[84,141069,132132],{}," 2.设置 ",[84,141072,141073],{},"white-space: nowrap;"," 3. 设置 ",[84,141076,141077],{},"text-overflow: ellipsis;",[19,141079,140825],{},[77,141081,141083],{"className":79,"code":141082,"language":81,"meta":82,"style":82},"div {\n  overflow: hidden;\n}\n",[84,141084,141085,141091,141102],{"__ignoreMap":82},[87,141086,141087,141089],{"class":89,"line":90},[87,141088,94],{"class":93},[87,141090,98],{"class":97},[87,141092,141093,141096,141098,141100],{"class":89,"line":101},[87,141094,141095],{"class":104},"  overflow",[87,141097,108],{"class":97},[87,141099,62650],{"class":104},[87,141101,117],{"class":97},[87,141103,141104],{"class":89,"line":120},[87,141105,123],{"class":97},[19,141107,140914],{},[77,141109,141110],{"className":79,"code":141082,"language":81,"meta":82,"style":82},[84,141111,141112,141118,141128],{"__ignoreMap":82},[87,141113,141114,141116],{"class":89,"line":90},[87,141115,94],{"class":93},[87,141117,98],{"class":97},[87,141119,141120,141122,141124,141126],{"class":89,"line":101},[87,141121,141095],{"class":104},[87,141123,108],{"class":97},[87,141125,62650],{"class":104},[87,141127,117],{"class":97},[87,141129,141130],{"class":89,"line":120},[87,141131,123],{"class":97},[19,141133,141134,141135,141138],{},"2 号盒子为 ",[84,141136,141137],{},"lifeservice"," 生活服务模块 高度为 209px",[39,141140],{"style":41,"src":141141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[26,141143,141144,141147,141157,141181,141192],{},[29,141145,141146],{},"设置边框（左右下边框）",[29,141148,141149,141150,141153,141154,141156],{},"里面的内容 是 ",[84,141151,141152],{},"ul > 12*li","，给",[84,141155,29],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[29,141158,141159,141160],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[26,141161,141162,141167,141176],{},[29,141163,141164,141166],{},[84,141165,141137],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[29,141168,141169,141170,141172,141173,141175],{},"可以让 ",[84,141171,141137],{}," 里面的 ",[84,141174,26],{}," 宽度为 252，就可以装的下 4 个 小 li",[29,141177,141178,141180],{},[84,141179,141137],{}," 盒子 overflow 隐藏多余的部分就可以了",[29,141182,117393,141183,141185,141186,141188,141189,141191],{},[84,141184,29],{}," 里面放一个 ",[84,141187,1536],{},"（里面放图标），下面的文本用 ",[84,141190,19],{}," 标签包裹",[29,141193,139955,141194,141196,141197,141199,141200,139989,141202,141205],{},[84,141195,1536],{}," 设置 24px宽和28px的高（注意 ",[84,141198,1536],{}," 是行内元素， 转成行内块），给 ",[84,141201,29],{},[84,141203,141204],{},"text-align:center"," 让里面内容居中显示",[19,141207,140825],{},[77,141209,141211],{"className":79,"code":141210,"language":81,"meta":82,"style":82},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[84,141212,141213,141231,141236,141246],{"__ignoreMap":82},[87,141214,141215,141217,141219,141221,141223,141225,141227,141229],{"class":89,"line":90},[87,141216,87],{"class":93},[87,141218,13385],{"class":97},[87,141220,1334],{"class":93},[87,141222,13385],{"class":97},[87,141224,24500],{"class":93},[87,141226,13385],{"class":97},[87,141228,57],{"class":93},[87,141230,98],{"class":97},[87,141232,141233],{"class":89,"line":101},[87,141234,141235],{"class":199},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[87,141237,141238,141240,141242,141244],{"class":89,"line":120},[87,141239,129089],{"class":104},[87,141241,108],{"class":97},[87,141243,129151],{"class":104},[87,141245,117],{"class":97},[87,141247,141248],{"class":89,"line":222},[87,141249,123],{"class":97},[19,141251,140914],{},[77,141253,141254],{"className":79,"code":141210,"language":81,"meta":82,"style":82},[84,141255,141256,141274,141278,141288],{"__ignoreMap":82},[87,141257,141258,141260,141262,141264,141266,141268,141270,141272],{"class":89,"line":90},[87,141259,87],{"class":93},[87,141261,13385],{"class":97},[87,141263,1334],{"class":93},[87,141265,13385],{"class":97},[87,141267,24500],{"class":93},[87,141269,13385],{"class":97},[87,141271,57],{"class":93},[87,141273,98],{"class":97},[87,141275,141276],{"class":89,"line":101},[87,141277,141235],{"class":199},[87,141279,141280,141282,141284,141286],{"class":89,"line":120},[87,141281,129089],{"class":104},[87,141283,108],{"class":97},[87,141285,129151],{"class":104},[87,141287,117],{"class":97},[87,141289,141290],{"class":89,"line":222},[87,141291,123],{"class":97},[19,141293,141294,141295,141298],{},"3 号盒子为 ",[84,141296,141297],{},"bargain"," 特价商品",[26,141300,141301],{},[29,141302,141303],{},"这个比较简单，直接插入一张图片即可",[19,141305,140825],{},[77,141307,141308],{"className":924,"code":134966,"language":926,"meta":82,"style":82},[84,141309,141310],{"__ignoreMap":82},[87,141311,141312,141314,141316,141318,141320,141322,141324,141326,141328,141330,141332,141334],{"class":89,"line":90},[87,141313,938],{"class":97},[87,141315,39],{"class":93},[87,141317,56175],{"class":205},[87,141319,946],{"class":97},[87,141321,134981],{"class":949},[87,141323,56183],{"class":205},[87,141325,946],{"class":97},[87,141327,134988],{"class":949},[87,141329,134991],{"class":205},[87,141331,946],{"class":97},[87,141333,134996],{"class":949},[87,141335,953],{"class":97},[19,141337,140914],{},[77,141339,141340],{"className":924,"code":134966,"language":926,"meta":82,"style":82},[84,141341,141342],{"__ignoreMap":82},[87,141343,141344,141346,141348,141350,141352,141354,141356,141358,141360,141362,141364,141366],{"class":89,"line":90},[87,141345,938],{"class":97},[87,141347,39],{"class":93},[87,141349,56175],{"class":205},[87,141351,946],{"class":97},[87,141353,134981],{"class":949},[87,141355,56183],{"class":205},[87,141357,946],{"class":97},[87,141359,134988],{"class":949},[87,141361,134991],{"class":205},[87,141363,946],{"class":97},[87,141365,134996],{"class":949},[87,141367,953],{"class":97},[44,141369,141371],{"id":141370},"_1612-推荐模块制作","16.1.2 推荐模块制作",[39,141373],{"style":41,"src":141374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,141376,141377,141378,141381],{},"大盒子 ",[84,141379,141380],{},"recom"," 推荐模块 recommend",[26,141383,141384],{},[29,141385,141386,141387,141389,141390,141393],{},"给这个 ",[84,141388,141380],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[84,141391,141392],{},"#ebebeb","），设置距离上边 12px",[19,141395,140825],{},[77,141397,141399],{"className":79,"code":141398,"language":81,"meta":82,"style":82},"div {\n  background-color: #f0f0f0;\n}\n",[84,141400,141401,141407,141418],{"__ignoreMap":82},[87,141402,141403,141405],{"class":89,"line":90},[87,141404,94],{"class":93},[87,141406,98],{"class":97},[87,141408,141409,141411,141413,141416],{"class":89,"line":101},[87,141410,71807],{"class":104},[87,141412,108],{"class":97},[87,141414,141415],{"class":104},"#f0f0f0",[87,141417,117],{"class":97},[87,141419,141420],{"class":89,"line":120},[87,141421,123],{"class":97},[19,141423,140914],{},[77,141425,141426],{"className":79,"code":141398,"language":81,"meta":82,"style":82},[84,141427,141428,141434,141444],{"__ignoreMap":82},[87,141429,141430,141432],{"class":89,"line":90},[87,141431,94],{"class":93},[87,141433,98],{"class":97},[87,141435,141436,141438,141440,141442],{"class":89,"line":101},[87,141437,71807],{"class":104},[87,141439,108],{"class":97},[87,141441,141415],{"class":104},[87,141443,117],{"class":97},[87,141445,141446],{"class":89,"line":120},[87,141447,123],{"class":97},[19,141449,141450],{},"里面包含 2 个盒子， 浮动即可",[19,141452,140825],{},[77,141454,141455],{"className":79,"code":140125,"language":81,"meta":82,"style":82},[84,141456,141457,141463,141473],{"__ignoreMap":82},[87,141458,141459,141461],{"class":89,"line":90},[87,141460,131319],{"class":205},[87,141462,98],{"class":97},[87,141464,141465,141467,141469,141471],{"class":89,"line":101},[87,141466,131946],{"class":104},[87,141468,108],{"class":97},[87,141470,24683],{"class":104},[87,141472,117],{"class":97},[87,141474,141475],{"class":89,"line":120},[87,141476,123],{"class":97},[19,141478,141479,141480],{},"1 号盒子 ",[84,141481,141482],{},"recom_hd",[26,141484,141485,141488],{},[29,141486,141487],{},"设置宽度205px，高度163px",[29,141489,140959,141490,141492],{},[84,141491,39],{},"标签，插入图片即可",[19,141494,140825],{},[77,141496,141497],{"className":924,"code":134966,"language":926,"meta":82,"style":82},[84,141498,141499],{"__ignoreMap":82},[87,141500,141501,141503,141505,141507,141509,141511,141513,141515,141517,141519,141521,141523],{"class":89,"line":90},[87,141502,938],{"class":97},[87,141504,39],{"class":93},[87,141506,56175],{"class":205},[87,141508,946],{"class":97},[87,141510,134981],{"class":949},[87,141512,56183],{"class":205},[87,141514,946],{"class":97},[87,141516,134988],{"class":949},[87,141518,134991],{"class":205},[87,141520,946],{"class":97},[87,141522,134996],{"class":949},[87,141524,953],{"class":97},[19,141526,140914],{},[77,141528,141529],{"className":924,"code":134966,"language":926,"meta":82,"style":82},[84,141530,141531],{"__ignoreMap":82},[87,141532,141533,141535,141537,141539,141541,141543,141545,141547,141549,141551,141553,141555],{"class":89,"line":90},[87,141534,938],{"class":97},[87,141536,39],{"class":93},[87,141538,56175],{"class":205},[87,141540,946],{"class":97},[87,141542,134981],{"class":949},[87,141544,56183],{"class":205},[87,141546,946],{"class":97},[87,141548,134988],{"class":949},[87,141550,134991],{"class":205},[87,141552,946],{"class":97},[87,141554,134996],{"class":949},[87,141556,953],{"class":97},[19,141558,141559,141560,141563],{},"2 号盒子 ",[84,141561,141562],{},"recom_bd"," ，注意里面的小竖线",[26,141565,141566,141577,141580,141585,141590],{},[29,141567,141568,141569,141571,141572,141574,141575],{},"右侧结构里面放 ",[84,141570,26],{}," 包含 4个 ",[84,141573,29],{},"，每个li里面包含一个",[84,141576,39],{},[29,141578,141579],{},"直接利用切片工具把里面的内容当成一张图片",[29,141581,139955,141582,141584],{},[84,141583,29],{}," 设置浮动",[29,141586,139955,141587,141589],{},[84,141588,39],{}," 设置宽高，宽度 248px，高度 163px",[29,141591,141592,141593,141153,141596,141598,141599,141601,141602],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[84,141594,141595],{},"top 10px",[84,141597,29],{},"设置相对定位（注意，最后一个",[84,141600,29],{},"不用设置伪元素），可以利用 ",[84,141603,141604],{},"nth-child(-n+3){...}",[19,141606,140825],{},[77,141608,141609],{"className":79,"code":139298,"language":81,"meta":82,"style":82},[84,141610,141611,141619,141629,141639],{"__ignoreMap":82},[87,141612,141613,141615,141617],{"class":89,"line":90},[87,141614,94],{"class":93},[87,141616,138457],{"class":205},[87,141618,98],{"class":97},[87,141620,141621,141623,141625,141627],{"class":89,"line":101},[87,141622,138464],{"class":104},[87,141624,108],{"class":97},[87,141626,8602],{"class":949},[87,141628,117],{"class":97},[87,141630,141631,141633,141635,141637],{"class":89,"line":120},[87,141632,129089],{"class":104},[87,141634,108],{"class":97},[87,141636,61805],{"class":104},[87,141638,117],{"class":97},[87,141640,141641],{"class":89,"line":222},[87,141642,123],{"class":97},[19,141644,140914],{},[77,141646,141647],{"className":79,"code":139298,"language":81,"meta":82,"style":82},[84,141648,141649,141657,141667,141677],{"__ignoreMap":82},[87,141650,141651,141653,141655],{"class":89,"line":90},[87,141652,94],{"class":93},[87,141654,138457],{"class":205},[87,141656,98],{"class":97},[87,141658,141659,141661,141663,141665],{"class":89,"line":101},[87,141660,138464],{"class":104},[87,141662,108],{"class":97},[87,141664,8602],{"class":949},[87,141666,117],{"class":97},[87,141668,141669,141671,141673,141675],{"class":89,"line":120},[87,141670,129089],{"class":104},[87,141672,108],{"class":97},[87,141674,61805],{"class":104},[87,141676,117],{"class":97},[87,141678,141679],{"class":89,"line":222},[87,141680,123],{"class":97},[44,141682,141684],{"id":141683},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[39,141686],{"style":41,"src":141687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,141689,141690],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,141692,141693],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,141695,141696,141699],{},[84,141697,141698],{},"box_hd"," 制作",[19,141701,141479,141702,141704],{},[84,141703,141698],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[39,141706],{"style":41,"src":141707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[26,141709,141710,141715,141720,141723],{},[29,141711,141712,141714],{},[84,141713,141698],{}," 给 30px 的高度，2个像素的下边框",[29,141716,141717,141718],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[84,141719,139966],{},[29,141721,141722],{},"左侧盒左浮动，右侧盒子右浮动",[29,141724,141725,141727,141728,141730],{},[84,141726,1334],{},"标签之间的距离用左右的",[84,141729,31830],{},"撑开即可",[19,141732,141733],{},"结构代码",[77,141735,141736],{"className":79,"code":140125,"language":81,"meta":82,"style":82},[84,141737,141738,141744,141754],{"__ignoreMap":82},[87,141739,141740,141742],{"class":89,"line":90},[87,141741,131319],{"class":205},[87,141743,98],{"class":97},[87,141745,141746,141748,141750,141752],{"class":89,"line":101},[87,141747,131946],{"class":104},[87,141749,108],{"class":97},[87,141751,24683],{"class":104},[87,141753,117],{"class":97},[87,141755,141756],{"class":89,"line":120},[87,141757,123],{"class":97},[19,141759,141760],{},"样式代码",[77,141762,141763],{"className":79,"code":140125,"language":81,"meta":82,"style":82},[84,141764,141765,141771,141781],{"__ignoreMap":82},[87,141766,141767,141769],{"class":89,"line":90},[87,141768,131319],{"class":205},[87,141770,98],{"class":97},[87,141772,141773,141775,141777,141779],{"class":89,"line":101},[87,141774,131946],{"class":104},[87,141776,108],{"class":97},[87,141778,24683],{"class":104},[87,141780,117],{"class":97},[87,141782,141783],{"class":89,"line":120},[87,141784,123],{"class":97},[19,141786,141787,141699],{},[84,141788,141789],{},"box_bd",[19,141791,141792],{},"2 号盒子 box_bd，不要给高度",[39,141794],{"style":41,"src":141795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,141797,141798],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,141800,141801],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,141803,141804],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[26,141806,141807,141819,141835],{},[29,141808,141809,141811,141812,141815,141816,141818],{},[84,141810,141789],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[84,141813,141814],{},"tab_content","，在",[84,141817,141814],{}," 里面包裹tab选项卡对应的内容",[29,141820,141821,141822,141825,141826,141828,141829,141831,141832,141834],{},"内容被一个大盒子包裹（",[84,141823,141824],{},"tab_list_item","），里面是 ",[84,141827,26],{}," 包裹 5个 ",[84,141830,29],{},"，每个",[84,141833,29],{},"设置对应的宽度，然后设置浮动",[29,141836,141837,141838,141840,141841,141843,141844],{},"而这5个",[84,141839,29],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[84,141842,29],{},"设置",[26,141845,141846,141864,141867],{},[29,141847,141848,141849,141851,141852,141854,141855,141857,141858,141860,141861,141863],{},"第一个小 ",[84,141850,29],{}," 分为上下结构，上面是 ",[84,141853,26],{}," 包裹 ",[84,141856,29],{}," ，",[84,141859,29],{},"里面包裹 ",[84,141862,1334],{},"，下面插入一张图片",[29,141865,141866],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[29,141868,141869,141870,141872,141873,141875,141876,141878],{},"后面的小 ",[84,141871,29],{}," 里面先放一个",[84,141874,1334],{},"标签，然后在",[84,141877,1334],{},"标签里面插入图片即可",[19,141880,141733],{},[77,141882,141883],{"className":924,"code":134966,"language":926,"meta":82,"style":82},[84,141884,141885],{"__ignoreMap":82},[87,141886,141887,141889,141891,141893,141895,141897,141899,141901,141903,141905,141907,141909],{"class":89,"line":90},[87,141888,938],{"class":97},[87,141890,39],{"class":93},[87,141892,56175],{"class":205},[87,141894,946],{"class":97},[87,141896,134981],{"class":949},[87,141898,56183],{"class":205},[87,141900,946],{"class":97},[87,141902,134988],{"class":949},[87,141904,134991],{"class":205},[87,141906,946],{"class":97},[87,141908,134996],{"class":949},[87,141910,953],{"class":97},[19,141912,141760],{},[77,141914,141915],{"className":924,"code":134966,"language":926,"meta":82,"style":82},[84,141916,141917],{"__ignoreMap":82},[87,141918,141919,141921,141923,141925,141927,141929,141931,141933,141935,141937,141939,141941],{"class":89,"line":90},[87,141920,938],{"class":97},[87,141922,39],{"class":93},[87,141924,56175],{"class":205},[87,141926,946],{"class":97},[87,141928,134981],{"class":949},[87,141930,56183],{"class":205},[87,141932,946],{"class":97},[87,141934,134988],{"class":949},[87,141936,134991],{"class":205},[87,141938,946],{"class":97},[87,141940,134996],{"class":949},[87,141942,953],{"class":97},[19,141944,141945],{},"tab栏切换需求！！！！！！介绍：",[39,141947],{"style":41,"src":141948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[26,141950,141951,141959,141965,141968],{},[29,141952,141953,141956,141957],{},[84,141954,141955],{},"tab","栏的布局是 ",[84,141958,139966],{},[29,141960,141961,141962,141964],{},"有多少个",[84,141963,141955],{},"选项卡，那么对应就有多少个内容",[29,141966,141967],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[29,141969,141970,141971,141974,141975,141977,141978,141980],{},"等后面我们学习了",[84,141972,141973],{},"js","之后，我们就会配合",[84,141976,141973],{},"来实现，",[84,141979,141955],{},"栏的切换",[14,141982,141984],{"id":141983},"_162-列表制作","16.2 列表制作",[44,141986,141988],{"id":141987},"_1621-准备工作","16.2.1 准备工作",[26,141990,141991,141994,141997,142000],{},[29,141992,141993],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[29,141995,141996],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[29,141998,141999],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[29,142001,142002],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[44,142004,142006,142007,101944,142009,142011],{"id":142005},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[84,142008,132471],{},[84,142010,54649],{}," 修改",[39,142013],{"style":41,"src":142014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[26,142016,142017],{},[29,142018,142019],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142021,140825],{},[77,142023,142024],{"className":79,"code":132898,"language":81,"meta":82,"style":82},[84,142025,142026,142030,142044,142048,142062,142066,142080,142084,142098,142102],{"__ignoreMap":82},[87,142027,142028],{"class":89,"line":90},[87,142029,132905],{"class":199},[87,142031,142032,142034,142036,142038,142040,142042],{"class":89,"line":101},[87,142033,132910],{"class":205},[87,142035,503],{"class":97},[87,142037,129831],{"class":104},[87,142039,108],{"class":97},[87,142041,132919],{"class":104},[87,142043,130401],{"class":97},[87,142045,142046],{"class":89,"line":120},[87,142047,132926],{"class":199},[87,142049,142050,142052,142054,142056,142058,142060],{"class":89,"line":222},[87,142051,132931],{"class":205},[87,142053,503],{"class":97},[87,142055,129831],{"class":104},[87,142057,108],{"class":97},[87,142059,55700],{"class":104},[87,142061,130401],{"class":97},[87,142063,142064],{"class":89,"line":234},[87,142065,132946],{"class":199},[87,142067,142068,142070,142072,142074,142076,142078],{"class":89,"line":256},[87,142069,132951],{"class":205},[87,142071,503],{"class":97},[87,142073,129831],{"class":104},[87,142075,108],{"class":97},[87,142077,55767],{"class":104},[87,142079,130401],{"class":97},[87,142081,142082],{"class":89,"line":269},[87,142083,132966],{"class":199},[87,142085,142086,142088,142090,142092,142094,142096],{"class":89,"line":463},[87,142087,132971],{"class":205},[87,142089,503],{"class":97},[87,142091,129831],{"class":104},[87,142093,108],{"class":97},[87,142095,87159],{"class":104},[87,142097,130401],{"class":97},[87,142099,142100],{"class":89,"line":469},[87,142101,132986],{"class":199},[87,142103,142104,142106,142108,142110,142112,142114],{"class":89,"line":2287},[87,142105,132991],{"class":205},[87,142107,503],{"class":97},[87,142109,129831],{"class":104},[87,142111,108],{"class":97},[87,142113,133000],{"class":104},[87,142115,130401],{"class":97},[19,142117,140914],{},[77,142119,142120],{"className":79,"code":132898,"language":81,"meta":82,"style":82},[84,142121,142122,142126,142140,142144,142158,142162,142176,142180,142194,142198],{"__ignoreMap":82},[87,142123,142124],{"class":89,"line":90},[87,142125,132905],{"class":199},[87,142127,142128,142130,142132,142134,142136,142138],{"class":89,"line":101},[87,142129,132910],{"class":205},[87,142131,503],{"class":97},[87,142133,129831],{"class":104},[87,142135,108],{"class":97},[87,142137,132919],{"class":104},[87,142139,130401],{"class":97},[87,142141,142142],{"class":89,"line":120},[87,142143,132926],{"class":199},[87,142145,142146,142148,142150,142152,142154,142156],{"class":89,"line":222},[87,142147,132931],{"class":205},[87,142149,503],{"class":97},[87,142151,129831],{"class":104},[87,142153,108],{"class":97},[87,142155,55700],{"class":104},[87,142157,130401],{"class":97},[87,142159,142160],{"class":89,"line":234},[87,142161,132946],{"class":199},[87,142163,142164,142166,142168,142170,142172,142174],{"class":89,"line":256},[87,142165,132951],{"class":205},[87,142167,503],{"class":97},[87,142169,129831],{"class":104},[87,142171,108],{"class":97},[87,142173,55767],{"class":104},[87,142175,130401],{"class":97},[87,142177,142178],{"class":89,"line":269},[87,142179,132966],{"class":199},[87,142181,142182,142184,142186,142188,142190,142192],{"class":89,"line":463},[87,142183,132971],{"class":205},[87,142185,503],{"class":97},[87,142187,129831],{"class":104},[87,142189,108],{"class":97},[87,142191,87159],{"class":104},[87,142193,130401],{"class":97},[87,142195,142196],{"class":89,"line":469},[87,142197,132986],{"class":199},[87,142199,142200,142202,142204,142206,142208,142210],{"class":89,"line":2287},[87,142201,132991],{"class":205},[87,142203,503],{"class":97},[87,142205,129831],{"class":104},[87,142207,108],{"class":97},[87,142209,133000],{"class":104},[87,142211,130401],{"class":97},[26,142213,142214,142225],{},[29,142215,142216,142217,142220,142221,101944,142223],{},"1 号盒子左侧浮动 ",[84,142218,142219],{},"sk_list"," 里面包含 ",[84,142222,26],{},[84,142224,29],{},[29,142226,142227,142228,142220,142231,101944,142233],{},"2 号盒子左侧浮动 ",[84,142229,142230],{},"sk_con",[84,142232,26],{},[84,142234,29],{},[19,142236,140825],{},[77,142238,142239],{"className":79,"code":140125,"language":81,"meta":82,"style":82},[84,142240,142241,142247,142257],{"__ignoreMap":82},[87,142242,142243,142245],{"class":89,"line":90},[87,142244,131319],{"class":205},[87,142246,98],{"class":97},[87,142248,142249,142251,142253,142255],{"class":89,"line":101},[87,142250,131946],{"class":104},[87,142252,108],{"class":97},[87,142254,24683],{"class":104},[87,142256,117],{"class":97},[87,142258,142259],{"class":89,"line":120},[87,142260,123],{"class":97},[19,142262,140914],{},[77,142264,142265],{"className":79,"code":140125,"language":81,"meta":82,"style":82},[84,142266,142267,142273,142283],{"__ignoreMap":82},[87,142268,142269,142271],{"class":89,"line":90},[87,142270,131319],{"class":205},[87,142272,98],{"class":97},[87,142274,142275,142277,142279,142281],{"class":89,"line":101},[87,142276,131946],{"class":104},[87,142278,108],{"class":97},[87,142280,24683],{"class":104},[87,142282,117],{"class":97},[87,142284,142285],{"class":89,"line":120},[87,142286,123],{"class":97},[44,142288,142290,142291],{"id":142289},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[84,142292,142293],{},"sk_container",[39,142295],{"style":41,"src":142296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[26,142298,142299,142304],{},[29,142300,141479,142301,142303],{},[84,142302,142293],{}," 给宽度 1200，不要给高度",[29,142305,142306],{},"一定不要忘记清除浮动",[19,142308,140825],{},[77,142310,142311],{"className":79,"code":140125,"language":81,"meta":82,"style":82},[84,142312,142313,142319,142329],{"__ignoreMap":82},[87,142314,142315,142317],{"class":89,"line":90},[87,142316,131319],{"class":205},[87,142318,98],{"class":97},[87,142320,142321,142323,142325,142327],{"class":89,"line":101},[87,142322,131946],{"class":104},[87,142324,108],{"class":97},[87,142326,24683],{"class":104},[87,142328,117],{"class":97},[87,142330,142331],{"class":89,"line":120},[87,142332,123],{"class":97},[1055,142334,142335],{},[29,142336,142337],{},"sk_hd制作",[26,142339,142340],{},[29,142341,141559,142342,142345],{},[84,142343,142344],{},"sk_hd"," ，插入图片即可",[19,142347,140825],{},[77,142349,142350],{"className":924,"code":134966,"language":926,"meta":82,"style":82},[84,142351,142352],{"__ignoreMap":82},[87,142353,142354,142356,142358,142360,142362,142364,142366,142368,142370,142372,142374,142376],{"class":89,"line":90},[87,142355,938],{"class":97},[87,142357,39],{"class":93},[87,142359,56175],{"class":205},[87,142361,946],{"class":97},[87,142363,134981],{"class":949},[87,142365,56183],{"class":205},[87,142367,946],{"class":97},[87,142369,134988],{"class":949},[87,142371,134991],{"class":205},[87,142373,946],{"class":97},[87,142375,134996],{"class":949},[87,142377,953],{"class":97},[1055,142379,142380],{"start":101},[29,142381,142382],{},"sk_bd制作",[26,142384,142385],{},[29,142386,142387,142388,142391,142392,101944,142394,142396],{},"3 号盒子 ",[84,142389,142390],{},"sk_bd"," ，里面包含很多的 ",[84,142393,26],{},[84,142395,29],{},[26,142397,142398,142407],{},[29,142399,142400,142401,142403,142404,142406],{},"当鼠标移入到 ",[84,142402,29],{}," 上面的时候显示红色的边框，在这里先给 ",[84,142405,29],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[29,142408,142409,142410,142412,142413,142415,142416,142419,142420,142422],{},"由于给每个 ",[84,142411,29],{}," 都设置了外边距，导致一行的最后一个 ",[84,142414,29],{}," 掉了下来，在这里我们利用 ",[84,142417,142418],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[84,142421,29],{},"，去掉外边距就好了",[19,142424,140825],{},[77,142426,142427],{"className":79,"code":80,"language":81,"meta":82,"style":82},[84,142428,142429,142435,142447],{"__ignoreMap":82},[87,142430,142431,142433],{"class":89,"line":90},[87,142432,94],{"class":93},[87,142434,98],{"class":97},[87,142436,142437,142439,142441,142443,142445],{"class":89,"line":101},[87,142438,105],{"class":104},[87,142440,108],{"class":97},[87,142442,111],{"class":104},[87,142444,114],{"class":104},[87,142446,117],{"class":97},[87,142448,142449],{"class":89,"line":120},[87,142450,123],{"class":97},[19,142452,140914],{},[77,142454,142455],{"className":79,"code":80,"language":81,"meta":82,"style":82},[84,142456,142457,142463,142475],{"__ignoreMap":82},[87,142458,142459,142461],{"class":89,"line":90},[87,142460,94],{"class":93},[87,142462,98],{"class":97},[87,142464,142465,142467,142469,142471,142473],{"class":89,"line":101},[87,142466,105],{"class":104},[87,142468,108],{"class":97},[87,142470,111],{"class":104},[87,142472,114],{"class":104},[87,142474,117],{"class":97},[87,142476,142477],{"class":89,"line":120},[87,142478,123],{"class":97},[14,142480,142482],{"id":142481},"_163-注册页面制作","16.3 注册页面制作",[39,142484],{"style":41,"src":142485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,142487,142488,142490],{},[57,142489,9975],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[39,142492],{"style":41,"src":142493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[44,142495,142497],{"id":142496},"_1631-准备工作","16.3.1 准备工作",[26,142499,142500,142503],{},[29,142501,142502],{},"创建register.html，引入 base.css，引入favicon图标",[29,142504,142505],{},"创建register.css ，在html页面进行引入",[44,142507,142509,142510,142512],{"id":142508},"_1632-header-头部实现","16.3.2 ",[84,142511,132471],{}," 头部实现",[26,142514,142515,142518],{},[29,142516,142517],{},"整个内容用 版心 进行包裹",[29,142519,142520],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,142522,140825],{},[77,142524,142525],{"className":924,"code":134966,"language":926,"meta":82,"style":82},[84,142526,142527],{"__ignoreMap":82},[87,142528,142529,142531,142533,142535,142537,142539,142541,142543,142545,142547,142549,142551],{"class":89,"line":90},[87,142530,938],{"class":97},[87,142532,39],{"class":93},[87,142534,56175],{"class":205},[87,142536,946],{"class":97},[87,142538,134981],{"class":949},[87,142540,56183],{"class":205},[87,142542,946],{"class":97},[87,142544,134988],{"class":949},[87,142546,134991],{"class":205},[87,142548,946],{"class":97},[87,142550,134996],{"class":949},[87,142552,953],{"class":97},[19,142554,140914],{},[77,142556,142557],{"className":924,"code":134966,"language":926,"meta":82,"style":82},[84,142558,142559],{"__ignoreMap":82},[87,142560,142561,142563,142565,142567,142569,142571,142573,142575,142577,142579,142581,142583],{"class":89,"line":90},[87,142562,938],{"class":97},[87,142564,39],{"class":93},[87,142566,56175],{"class":205},[87,142568,946],{"class":97},[87,142570,134981],{"class":949},[87,142572,56183],{"class":205},[87,142574,946],{"class":97},[87,142576,134988],{"class":949},[87,142578,134991],{"class":205},[87,142580,946],{"class":97},[87,142582,134996],{"class":949},[87,142584,953],{"class":97},[44,142586,142588,142589,142592],{"id":142587},"_1633-registerarea-主体模块实现","16.3.3 ",[84,142590,142591],{},"registerarea"," 主体模块实现",[39,142594],{"style":41,"src":142595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,142597,142598],{},"整个大盒子 高度为 522px，设置4个边框",[19,142600,140825],{},[77,142602,142603],{"className":79,"code":131623,"language":81,"meta":82,"style":82},[84,142604,142605,142611,142627],{"__ignoreMap":82},[87,142606,142607,142609],{"class":89,"line":90},[87,142608,94],{"class":93},[87,142610,98],{"class":97},[87,142612,142613,142615,142617,142619,142621,142623,142625],{"class":89,"line":101},[87,142614,237],{"class":104},[87,142616,108],{"class":97},[87,142618,1313],{"class":104},[87,142620,245],{"class":171},[87,142622,248],{"class":104},[87,142624,130863],{"class":104},[87,142626,117],{"class":97},[87,142628,142629],{"class":89,"line":120},[87,142630,123],{"class":97},[19,142632,140914],{},[77,142634,142635],{"className":79,"code":131623,"language":81,"meta":82,"style":82},[84,142636,142637,142643,142659],{"__ignoreMap":82},[87,142638,142639,142641],{"class":89,"line":90},[87,142640,94],{"class":93},[87,142642,98],{"class":97},[87,142644,142645,142647,142649,142651,142653,142655,142657],{"class":89,"line":101},[87,142646,237],{"class":104},[87,142648,108],{"class":97},[87,142650,1313],{"class":104},[87,142652,245],{"class":171},[87,142654,248],{"class":104},[87,142656,130863],{"class":104},[87,142658,117],{"class":97},[87,142660,142661],{"class":89,"line":120},[87,142662,123],{"class":97},[19,142664,142665],{},"1号盒子 是一个 h3 标签，放标题",[26,142667,142668],{},[29,142669,142670],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,142672,140825],{},[77,142674,142675],{"className":79,"code":140125,"language":81,"meta":82,"style":82},[84,142676,142677,142683,142693],{"__ignoreMap":82},[87,142678,142679,142681],{"class":89,"line":90},[87,142680,131319],{"class":205},[87,142682,98],{"class":97},[87,142684,142685,142687,142689,142691],{"class":89,"line":101},[87,142686,131946],{"class":104},[87,142688,108],{"class":97},[87,142690,24683],{"class":104},[87,142692,117],{"class":97},[87,142694,142695],{"class":89,"line":120},[87,142696,123],{"class":97},[19,142698,140914],{},[77,142700,142701],{"className":79,"code":140125,"language":81,"meta":82,"style":82},[84,142702,142703,142709,142719],{"__ignoreMap":82},[87,142704,142705,142707],{"class":89,"line":90},[87,142706,131319],{"class":205},[87,142708,98],{"class":97},[87,142710,142711,142713,142715,142717],{"class":89,"line":101},[87,142712,131946],{"class":104},[87,142714,108],{"class":97},[87,142716,24683],{"class":104},[87,142718,117],{"class":97},[87,142720,142721],{"class":89,"line":120},[87,142722,123],{"class":97},[19,142724,142725],{},"2号盒子 里面放注册的内容",[26,142727,142728,142731,142740,142754,142767,142770,142773,142791,142805],{},[29,142729,142730],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[29,142732,142733,142734,142736,142737,142739],{},"里面的内容利用 ",[84,142735,26],{}," 包含 ",[84,142738,29],{}," 来实现的（不需要用表格）",[29,142741,139969,142742,142744,142745,142747,142748,142750,142751,142753],{},[84,142743,29],{}," 里面，左侧放 ",[84,142746,34555],{}," 标签， 中间放",[84,142749,54757],{}," 标签， 右侧放 ",[84,142752,87],{}," 提示信息",[29,142755,142756,142757,142759,142760,142762,142763,142766],{},"左侧 ",[84,142758,34555],{},"里面的文字都是右对齐，我们可以给",[84,142761,34555],{},"设置一个宽度（88px），然后利用",[84,142764,142765],{},"text-align"," 来设置右对齐",[29,142768,142769],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[29,142771,142772],{},"右侧 span修饰一下文字颜色",[29,142774,142775,142776],{},"提示信息的样式优化",[26,142777,142778,142781,142784],{},[29,142779,142780],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[29,142782,142783],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[29,142785,142786,142787,142790],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[84,142788,142789],{},"vertical-algin"," 来设置 图片与文字对齐方式",[29,142792,142793,142794],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[26,142795,142796,142802],{},[29,142797,142798,142799,142801],{},"设置 ",[84,142800,24500],{}," 的 左右 12px 的内边距，设置一下文字颜色",[29,142803,142804],{},"分别设置 背景颜色",[29,142806,142807,142808,142810],{},"同意协议 和 完成注册 都是用 ",[84,142809,29],{}," 进行包裹",[19,142812,140825],{},[77,142814,142815],{"className":79,"code":141398,"language":81,"meta":82,"style":82},[84,142816,142817,142823,142833],{"__ignoreMap":82},[87,142818,142819,142821],{"class":89,"line":90},[87,142820,94],{"class":93},[87,142822,98],{"class":97},[87,142824,142825,142827,142829,142831],{"class":89,"line":101},[87,142826,71807],{"class":104},[87,142828,108],{"class":97},[87,142830,141415],{"class":104},[87,142832,117],{"class":97},[87,142834,142835],{"class":89,"line":120},[87,142836,123],{"class":97},[19,142838,140914],{},[77,142840,142841],{"className":79,"code":141398,"language":81,"meta":82,"style":82},[84,142842,142843,142849,142859],{"__ignoreMap":82},[87,142844,142845,142847],{"class":89,"line":90},[87,142846,94],{"class":93},[87,142848,98],{"class":97},[87,142850,142851,142853,142855,142857],{"class":89,"line":101},[87,142852,71807],{"class":104},[87,142854,108],{"class":97},[87,142856,141415],{"class":104},[87,142858,117],{"class":97},[87,142860,142861],{"class":89,"line":120},[87,142862,123],{"class":97},[44,142864,142866],{"id":142865},"_1634-底部实现","16.3.4 底部实现",[19,142868,140825],{},[77,142870,142871],{"className":79,"code":141398,"language":81,"meta":82,"style":82},[84,142872,142873,142879,142889],{"__ignoreMap":82},[87,142874,142875,142877],{"class":89,"line":90},[87,142876,94],{"class":93},[87,142878,98],{"class":97},[87,142880,142881,142883,142885,142887],{"class":89,"line":101},[87,142882,71807],{"class":104},[87,142884,108],{"class":97},[87,142886,141415],{"class":104},[87,142888,117],{"class":97},[87,142890,142891],{"class":89,"line":120},[87,142892,123],{"class":97},[19,142894,140914],{},[77,142896,142897],{"className":924,"code":925,"language":926,"meta":82,"style":82},[84,142898,142899,142903,142917,142921],{"__ignoreMap":82},[87,142900,142901],{"class":89,"line":90},[87,142902,933],{"class":199},[87,142904,142905,142907,142909,142911,142913,142915],{"class":89,"line":101},[87,142906,938],{"class":97},[87,142908,94],{"class":93},[87,142910,943],{"class":205},[87,142912,946],{"class":97},[87,142914,950],{"class":949},[87,142916,953],{"class":97},[87,142918,142919],{"class":89,"line":120},[87,142920,958],{"class":97},[87,142922,142923,142925,142927],{"class":89,"line":222},[87,142924,963],{"class":97},[87,142926,94],{"class":93},[87,142928,953],{"class":97},[14,142930,142932],{"id":142931},"_164-项目总结","16.4 项目总结",[1055,142934,142935,142938,142941,142944],{},[29,142936,142937],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[29,142939,142940],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[29,142942,142943],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[29,142945,142946],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[39,142948],{"style":41,"src":142949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[1055,142951,142952],{"start":234},[29,142953,142954],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[39,142956],{"style":41,"src":142957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[1055,142959,142960],{"start":256},[29,142961,142962],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[39,142964],{"style":41,"src":142965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[77,142967,142968],{"className":924,"code":137613,"language":926,"meta":82,"style":82},[84,142969,142970],{"__ignoreMap":82},[87,142971,142972,142974,142976,142978,142980,142982,142984,142986,142988,142990,142992,142994],{"class":89,"line":90},[87,142973,938],{"class":97},[87,142975,54757],{"class":93},[87,142977,54760],{"class":205},[87,142979,946],{"class":97},[87,142981,63633],{"class":949},[87,142983,15870],{"class":205},[87,142985,946],{"class":97},[87,142987,137634],{"class":949},[87,142989,61956],{"class":205},[87,142991,946],{"class":97},[87,142993,137641],{"class":949},[87,142995,953],{"class":97},[1055,142997,142998,143001],{"start":269},[29,142999,143000],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[29,143002,143003],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1006,143005,143006],{},"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":82,"searchDepth":101,"depth":101,"links":143008},[143009,143014,143021,143029],{"id":140635,"depth":101,"text":140636,"children":143010},[143011,143012,143013],{"id":140639,"depth":120,"text":140640},{"id":141370,"depth":120,"text":141371},{"id":141683,"depth":120,"text":141684},{"id":141983,"depth":101,"text":141984,"children":143015},[143016,143017,143019],{"id":141987,"depth":120,"text":141988},{"id":142005,"depth":120,"text":143018},"16.2.2 列表页 header 和 nav 修改",{"id":142289,"depth":120,"text":143020},"16.2.3 列表页主体 sk_container",{"id":142481,"depth":101,"text":142482,"children":143022},[143023,143024,143026,143028],{"id":142496,"depth":120,"text":142497},{"id":142508,"depth":120,"text":143025},"16.3.2 header 头部实现",{"id":142587,"depth":120,"text":143027},"16.3.3 registerarea 主体模块实现",{"id":142865,"depth":120,"text":142866},{"id":142931,"depth":101,"text":142932},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140627,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143036,"title":143037,"body":143038,"description":1026,"extension":1027,"meta":143146,"navigation":1029,"path":143147,"seo":143148,"stem":143149,"__hash__":143150},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143039,"toc":143141},[143040,143043,143047,143050,143053,143062,143071,143075,143080,143087,143105,143108,143111,143114,143117,143120,143123,143126,143129,143132,143135,143138],[10,143041,143037],{"id":143042},"_17-web服务器与网站发布",[14,143044,143046],{"id":143045},"_171-web服务器","17.1 Web服务器",[19,143048,143049],{},"把自己网站上传到服务器上，可以让其他人访问",[39,143051],{"style":41,"src":143052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143054,143055,143058,143059],{},[57,143056,143057],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[57,143060,143061],{},"Web 服务器等",[19,143063,143064,143065,101944,143068,26687],{},"根据服务器在网络中所在的位置不同，又可分为 ",[57,143066,143067],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[57,143069,143070],{},"远程服务器",[44,143072,143074],{"id":143073},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143076,143077],{},[57,143078,143079],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143081,143082,143083],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[1334,143084,143085],{"href":143085,"rel":143086},"http:\u002F\u002Ffree.3v.do\u002F",[24812],[26,143088,143089,143092,143095,143102],{},[29,143090,143091],{},"去免费空间网站注册账号。",[29,143093,143094],{},"记录下主机名、用户名、密码、域名。",[29,143096,143097,143098,143101],{},"利用 ",[84,143099,143100],{},"utftp"," 软件 上传网站到远程服务器",[29,143103,143104],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143106,143107],{},"使用软件上传，对上传软件文件进行解压",[39,143109],{"style":41,"src":143110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[39,143112],{"style":41,"src":143113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143115,143116],{},"输入刚刚申请的服务器账号信息：",[39,143118],{"style":41,"src":143119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[39,143121],{"style":41,"src":143122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[39,143124],{"style":41,"src":143125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[39,143127],{"style":41,"src":143128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143130,143131],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[39,143133],{"style":41,"src":143134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143136,143137],{},"浏览器输入域名即可访问",[19,143139,143140],{},"首页一定必须是index",{"title":82,"searchDepth":101,"depth":101,"links":143142},[143143],{"id":143045,"depth":101,"text":143046,"children":143144},[143145],{"id":143073,"depth":120,"text":143074},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143037,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":4,"title":5,"body":143152,"description":1026,"extension":1027,"meta":143942,"navigation":1029,"path":1030,"seo":143943,"stem":1032,"__hash__":1033},{"type":7,"value":143153,"toc":143925},[143154,143156,143158,143160,143162,143170,143172,143174,143176,143180,143182,143184,143186,143188,143190,143216,143218,143220,143222,143224,143226,143256,143258,143260,143262,143326,143328,143330,143332,143334,143336,143338,143378,143380,143382,143412,143414,143416,143418,143420,143422,143424,143488,143490,143586,143588,143593,143595,143597,143599,143695,143697,143699,143723,143725,143727,143729,143731,143733,143735,143737,143739,143741,143743,143745,143747,143749,143751,143753,143755,143757,143759,143761,143763,143765,143767,143769,143811,143813,143815,143817,143819,143821,143851,143853,143855,143889,143891,143893,143923],[10,143155,5],{"id":12},[14,143157,17],{"id":16},[19,143159,21],{},[19,143161,24],{},[26,143163,143164,143166,143168],{},[29,143165,31],{},[29,143167,34],{},[29,143169,37],{},[39,143171],{"style":41,"src":42},[44,143173,47],{"id":46},[49,143175,52],{"id":51},[19,143177,55,143178],{},[57,143179,59],{},[39,143181],{"style":41,"src":62},[19,143183,65],{},[19,143185,68],{},[19,143187,71],{},[49,143189,75],{"id":74},[77,143191,143192],{"className":79,"code":80,"language":81,"meta":82,"style":82},[84,143193,143194,143200,143212],{"__ignoreMap":82},[87,143195,143196,143198],{"class":89,"line":90},[87,143197,94],{"class":93},[87,143199,98],{"class":97},[87,143201,143202,143204,143206,143208,143210],{"class":89,"line":101},[87,143203,105],{"class":104},[87,143205,108],{"class":97},[87,143207,111],{"class":104},[87,143209,114],{"class":104},[87,143211,117],{"class":97},[87,143213,143214],{"class":89,"line":120},[87,143215,123],{"class":97},[44,143217,127],{"id":126},[49,143219,131],{"id":130},[19,143221,134],{},[39,143223],{"style":41,"src":137},[49,143225,141],{"id":140},[77,143227,143228],{"className":79,"code":144,"language":81,"meta":82,"style":82},[84,143229,143230,143236,143252],{"__ignoreMap":82},[87,143231,143232,143234],{"class":89,"line":90},[87,143233,94],{"class":93},[87,143235,98],{"class":97},[87,143237,143238,143240,143242,143244,143246,143248,143250],{"class":89,"line":101},[87,143239,157],{"class":104},[87,143241,108],{"class":97},[87,143243,162],{"class":104},[87,143245,165],{"class":97},[87,143247,168],{"class":104},[87,143249,172],{"class":171},[87,143251,175],{"class":97},[87,143253,143254],{"class":89,"line":120},[87,143255,123],{"class":97},[49,143257,183],{"id":182},[19,143259,186],{},[39,143261],{"style":41,"src":189},[77,143263,143264],{"className":79,"code":192,"language":81,"meta":82,"style":82},[84,143265,143266,143270,143276,143286,143296,143312,143322],{"__ignoreMap":82},[87,143267,143268],{"class":89,"line":90},[87,143269,200],{"class":199},[87,143271,143272,143274],{"class":89,"line":101},[87,143273,206],{"class":205},[87,143275,98],{"class":97},[87,143277,143278,143280,143282,143284],{"class":89,"line":120},[87,143279,213],{"class":104},[87,143281,108],{"class":97},[87,143283,111],{"class":104},[87,143285,117],{"class":97},[87,143287,143288,143290,143292,143294],{"class":89,"line":222},[87,143289,225],{"class":104},[87,143291,108],{"class":97},[87,143293,111],{"class":104},[87,143295,117],{"class":97},[87,143297,143298,143300,143302,143304,143306,143308,143310],{"class":89,"line":234},[87,143299,237],{"class":104},[87,143301,108],{"class":97},[87,143303,242],{"class":104},[87,143305,245],{"class":171},[87,143307,248],{"class":104},[87,143309,251],{"class":104},[87,143311,117],{"class":97},[87,143313,143314,143316,143318,143320],{"class":89,"line":256},[87,143315,259],{"class":104},[87,143317,108],{"class":97},[87,143319,264],{"class":104},[87,143321,117],{"class":97},[87,143323,143324],{"class":89,"line":269},[87,143325,123],{"class":97},[44,143327,275],{"id":274},[49,143329,279],{"id":278},[19,143331,282],{},[39,143333],{"style":41,"src":285},[19,143335,288],{},[49,143337,292],{"id":291},[77,143339,143340],{"className":79,"code":295,"language":81,"meta":82,"style":82},[84,143341,143342,143346,143352,143366,143370,143374],{"__ignoreMap":82},[87,143343,143344],{"class":89,"line":90},[87,143345,302],{"class":199},[87,143347,143348,143350],{"class":89,"line":101},[87,143349,94],{"class":93},[87,143351,98],{"class":97},[87,143353,143354,143356,143358,143360,143362,143364],{"class":89,"line":120},[87,143355,313],{"class":104},[87,143357,108],{"class":97},[87,143359,318],{"class":104},[87,143361,321],{"class":104},[87,143363,324],{"class":97},[87,143365,327],{"class":199},[87,143367,143368],{"class":89,"line":222},[87,143369,332],{"class":199},[87,143371,143372],{"class":89,"line":234},[87,143373,337],{"class":199},[87,143375,143376],{"class":89,"line":256},[87,143377,123],{"class":97},[49,143379,345],{"id":344},[39,143381],{"style":41,"src":348},[77,143383,143384],{"className":79,"code":144,"language":81,"meta":82,"style":82},[84,143385,143386,143392,143408],{"__ignoreMap":82},[87,143387,143388,143390],{"class":89,"line":90},[87,143389,94],{"class":93},[87,143391,98],{"class":97},[87,143393,143394,143396,143398,143400,143402,143404,143406],{"class":89,"line":101},[87,143395,157],{"class":104},[87,143397,108],{"class":97},[87,143399,162],{"class":104},[87,143401,165],{"class":97},[87,143403,168],{"class":104},[87,143405,172],{"class":171},[87,143407,175],{"class":97},[87,143409,143410],{"class":89,"line":120},[87,143411,123],{"class":97},[44,143413,382],{"id":381},[49,143415,386],{"id":385},[19,143417,389],{},[39,143419],{"style":41,"src":392},[49,143421,396],{"id":395},[39,143423],{"style":41,"src":399},[77,143425,143426],{"className":79,"code":402,"language":81,"meta":82,"style":82},[84,143427,143428,143434,143448,143452,143456,143460,143466,143480,143484],{"__ignoreMap":82},[87,143429,143430,143432],{"class":89,"line":90},[87,143431,94],{"class":93},[87,143433,98],{"class":97},[87,143435,143436,143438,143440,143442,143444,143446],{"class":89,"line":101},[87,143437,157],{"class":104},[87,143439,108],{"class":97},[87,143441,419],{"class":104},[87,143443,165],{"class":97},[87,143445,424],{"class":104},[87,143447,175],{"class":97},[87,143449,143450],{"class":89,"line":120},[87,143451,123],{"class":97},[87,143453,143454],{"class":89,"line":222},[87,143455,435],{"class":97},[87,143457,143458],{"class":89,"line":234},[87,143459,440],{"class":199},[87,143461,143462,143464],{"class":89,"line":256},[87,143463,94],{"class":93},[87,143465,98],{"class":97},[87,143467,143468,143470,143472,143474,143476,143478],{"class":89,"line":269},[87,143469,157],{"class":104},[87,143471,108],{"class":97},[87,143473,419],{"class":104},[87,143475,165],{"class":97},[87,143477,424],{"class":104},[87,143479,175],{"class":97},[87,143481,143482],{"class":89,"line":463},[87,143483,466],{"class":199},[87,143485,143486],{"class":89,"line":469},[87,143487,123],{"class":97},[19,143489,474],{},[77,143491,143492],{"className":79,"code":477,"language":81,"meta":82,"style":82},[84,143493,143494,143498,143506,143524,143544,143548,143552,143558,143582],{"__ignoreMap":82},[87,143495,143496],{"class":89,"line":90},[87,143497,484],{"class":199},[87,143499,143500,143502,143504],{"class":89,"line":101},[87,143501,489],{"class":171},[87,143503,493],{"class":492},[87,143505,98],{"class":97},[87,143507,143508,143510,143512,143514,143516,143518,143520,143522],{"class":89,"line":120},[87,143509,500],{"class":205},[87,143511,503],{"class":97},[87,143513,506],{"class":104},[87,143515,108],{"class":97},[87,143517,511],{"class":104},[87,143519,165],{"class":97},[87,143521,111],{"class":104},[87,143523,518],{"class":97},[87,143525,143526,143528,143530,143532,143534,143536,143538,143540,143542],{"class":89,"line":222},[87,143527,523],{"class":205},[87,143529,503],{"class":97},[87,143531,506],{"class":104},[87,143533,108],{"class":97},[87,143535,511],{"class":104},[87,143537,165],{"class":97},[87,143539,536],{"class":104},[87,143541,245],{"class":171},[87,143543,518],{"class":97},[87,143545,143546],{"class":89,"line":234},[87,143547,123],{"class":97},[87,143549,143550],{"class":89,"line":256},[87,143551,549],{"class":199},[87,143553,143554,143556],{"class":89,"line":269},[87,143555,94],{"class":93},[87,143557,98],{"class":97},[87,143559,143560,143562,143564,143566,143568,143570,143572,143574,143576,143578,143580],{"class":89,"line":463},[87,143561,560],{"class":104},[87,143563,108],{"class":97},[87,143565,565],{"class":104},[87,143567,568],{"class":104},[87,143569,571],{"class":171},[87,143571,574],{"class":104},[87,143573,577],{"class":104},[87,143575,571],{"class":171},[87,143577,582],{"class":104},[87,143579,585],{"class":104},[87,143581,117],{"class":97},[87,143583,143584],{"class":89,"line":469},[87,143585,123],{"class":97},[19,143587,474],{},[77,143589,143591],{"className":143590,"code":598,"language":599},[597],[84,143592,598],{"__ignoreMap":82},[49,143594,605],{"id":604},[19,143596,608],{},[39,143598],{"style":41,"src":611},[77,143600,143601],{"className":79,"code":477,"language":81,"meta":82,"style":82},[84,143602,143603,143607,143615,143633,143653,143657,143661,143667,143691],{"__ignoreMap":82},[87,143604,143605],{"class":89,"line":90},[87,143606,484],{"class":199},[87,143608,143609,143611,143613],{"class":89,"line":101},[87,143610,489],{"class":171},[87,143612,493],{"class":492},[87,143614,98],{"class":97},[87,143616,143617,143619,143621,143623,143625,143627,143629,143631],{"class":89,"line":120},[87,143618,500],{"class":205},[87,143620,503],{"class":97},[87,143622,506],{"class":104},[87,143624,108],{"class":97},[87,143626,511],{"class":104},[87,143628,165],{"class":97},[87,143630,111],{"class":104},[87,143632,518],{"class":97},[87,143634,143635,143637,143639,143641,143643,143645,143647,143649,143651],{"class":89,"line":222},[87,143636,523],{"class":205},[87,143638,503],{"class":97},[87,143640,506],{"class":104},[87,143642,108],{"class":97},[87,143644,511],{"class":104},[87,143646,165],{"class":97},[87,143648,536],{"class":104},[87,143650,245],{"class":171},[87,143652,518],{"class":97},[87,143654,143655],{"class":89,"line":234},[87,143656,123],{"class":97},[87,143658,143659],{"class":89,"line":256},[87,143660,549],{"class":199},[87,143662,143663,143665],{"class":89,"line":269},[87,143664,94],{"class":93},[87,143666,98],{"class":97},[87,143668,143669,143671,143673,143675,143677,143679,143681,143683,143685,143687,143689],{"class":89,"line":463},[87,143670,560],{"class":104},[87,143672,108],{"class":97},[87,143674,565],{"class":104},[87,143676,568],{"class":104},[87,143678,571],{"class":171},[87,143680,574],{"class":104},[87,143682,577],{"class":104},[87,143684,571],{"class":171},[87,143686,582],{"class":104},[87,143688,585],{"class":104},[87,143690,117],{"class":97},[87,143692,143693],{"class":89,"line":469},[87,143694,123],{"class":97},[19,143696,710],{},[44,143698,714],{"id":713},[77,143700,143701],{"className":79,"code":717,"language":81,"meta":82,"style":82},[84,143702,143703,143709,143719],{"__ignoreMap":82},[87,143704,143705,143707],{"class":89,"line":90},[87,143706,94],{"class":93},[87,143708,98],{"class":97},[87,143710,143711,143713,143715,143717],{"class":89,"line":101},[87,143712,730],{"class":104},[87,143714,108],{"class":97},[87,143716,735],{"class":104},[87,143718,117],{"class":97},[87,143720,143721],{"class":89,"line":120},[87,143722,123],{"class":97},[14,143724,745],{"id":744},[19,143726,748],{},[44,143728,752],{"id":751},[39,143730],{"style":41,"src":755},[44,143732,759],{"id":758},[39,143734],{"style":41,"src":762},[19,143736,765],{},[19,143738,768],{},[39,143740],{"style":41,"src":771},[44,143742,775],{"id":774},[39,143744],{"style":41,"src":778},[19,143746,781],{},[44,143748,785],{"id":784},[49,143750,789],{"id":788},[39,143752],{"style":41,"src":792},[39,143754],{"style":41,"src":795},[39,143756],{"style":41,"src":798},[19,143758,801],{},[49,143760,805],{"id":804},[39,143762],{"style":41,"src":808},[44,143764,812],{"id":811},[39,143766],{"style":41,"src":815},[39,143768],{"style":41,"src":818},[77,143770,143771],{"className":79,"code":821,"language":81,"meta":82,"style":82},[84,143772,143773,143779,143791,143807],{"__ignoreMap":82},[87,143774,143775,143777],{"class":89,"line":90},[87,143776,94],{"class":93},[87,143778,98],{"class":97},[87,143780,143781,143783,143785,143787,143789],{"class":89,"line":101},[87,143782,834],{"class":104},[87,143784,108],{"class":97},[87,143786,839],{"class":104},[87,143788,245],{"class":171},[87,143790,117],{"class":97},[87,143792,143793,143795,143797,143799,143801,143803,143805],{"class":89,"line":120},[87,143794,157],{"class":104},[87,143796,108],{"class":97},[87,143798,852],{"class":104},[87,143800,165],{"class":97},[87,143802,168],{"class":104},[87,143804,172],{"class":171},[87,143806,175],{"class":97},[87,143808,143809],{"class":89,"line":222},[87,143810,123],{"class":97},[44,143812,868],{"id":867},[49,143814,872],{"id":871},[39,143816],{"style":41,"src":875},[39,143818],{"style":41,"src":878},[39,143820],{"style":41,"src":881},[77,143822,143823],{"className":79,"code":884,"language":81,"meta":82,"style":82},[84,143824,143825,143829,143835,143847],{"__ignoreMap":82},[87,143826,143827],{"class":89,"line":90},[87,143828,891],{"class":199},[87,143830,143831,143833],{"class":89,"line":101},[87,143832,896],{"class":205},[87,143834,98],{"class":97},[87,143836,143837,143839,143841,143843,143845],{"class":89,"line":120},[87,143838,834],{"class":104},[87,143840,108],{"class":97},[87,143842,839],{"class":104},[87,143844,245],{"class":171},[87,143846,117],{"class":97},[87,143848,143849],{"class":89,"line":222},[87,143850,123],{"class":97},[49,143852,918],{"id":917},[39,143854],{"style":41,"src":921},[77,143856,143857],{"className":924,"code":925,"language":926,"meta":82,"style":82},[84,143858,143859,143863,143877,143881],{"__ignoreMap":82},[87,143860,143861],{"class":89,"line":90},[87,143862,933],{"class":199},[87,143864,143865,143867,143869,143871,143873,143875],{"class":89,"line":101},[87,143866,938],{"class":97},[87,143868,94],{"class":93},[87,143870,943],{"class":205},[87,143872,946],{"class":97},[87,143874,950],{"class":949},[87,143876,953],{"class":97},[87,143878,143879],{"class":89,"line":120},[87,143880,958],{"class":97},[87,143882,143883,143885,143887],{"class":89,"line":222},[87,143884,963],{"class":97},[87,143886,94],{"class":93},[87,143888,953],{"class":97},[49,143890,971],{"id":970},[39,143892],{"style":41,"src":974},[77,143894,143895],{"className":79,"code":144,"language":81,"meta":82,"style":82},[84,143896,143897,143903,143919],{"__ignoreMap":82},[87,143898,143899,143901],{"class":89,"line":90},[87,143900,94],{"class":93},[87,143902,98],{"class":97},[87,143904,143905,143907,143909,143911,143913,143915,143917],{"class":89,"line":101},[87,143906,157],{"class":104},[87,143908,108],{"class":97},[87,143910,162],{"class":104},[87,143912,165],{"class":97},[87,143914,168],{"class":104},[87,143916,172],{"class":171},[87,143918,175],{"class":97},[87,143920,143921],{"class":89,"line":120},[87,143922,123],{"class":97},[1006,143924,1008],{},{"title":82,"searchDepth":101,"depth":101,"links":143926},[143927,143934],{"id":16,"depth":101,"text":17,"children":143928},[143929,143930,143931,143932,143933],{"id":46,"depth":120,"text":47},{"id":126,"depth":120,"text":127},{"id":274,"depth":120,"text":275},{"id":381,"depth":120,"text":382},{"id":713,"depth":120,"text":714},{"id":744,"depth":101,"text":745,"children":143935},[143936,143937,143938,143939,143940,143941],{"id":751,"depth":120,"text":752},{"id":758,"depth":120,"text":759},{"id":774,"depth":120,"text":775},{"id":784,"depth":120,"text":785},{"id":811,"depth":120,"text":812},{"id":867,"depth":120,"text":868},{},{"title":5,"description":1026},{"id":143945,"title":143946,"body":143947,"description":1026,"extension":1027,"meta":144150,"navigation":1029,"path":144151,"seo":144152,"stem":144153,"__hash__":144154},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143948,"toc":144139},[143949,143952,143956,143959,143962,143966,143969,143972,143975,143979,143982,143986,143989,143993,143996,144000,144014,144018,144043,144046,144049,144066,144070,144074,144077,144080,144084,144087,144090,144108,144112,144115,144129,144133,144136],[10,143950,143946],{"id":143951},"_19-移动端基础-前缀现状与视口",[14,143953,143955],{"id":143954},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[39,143957],{"style":41,"src":143958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143960,143961],{},"意思就是加个前缀，增加兼容性",[14,143963,143965],{"id":143964},"_192-移动端现状认识","19.2 移动端现状认识",[39,143967],{"style":41,"src":143968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143970,143971],{},"调试方法：",[39,143973],{"style":41,"src":143974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143976,143978],{"id":143977},"_193-视口","19.3 视口",[19,143980,143981],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[44,143983,143985],{"id":143984},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[39,143987],{"style":41,"src":143988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[44,143990,143992],{"id":143991},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[39,143994],{"style":41,"src":143995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[44,143997,143999],{"id":143998},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[26,144001,144002,144005,144008,144011],{},[29,144003,144004],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[29,144006,144007],{},"理想视口，对设备来讲，是最理想的视口尺寸",[29,144009,144010],{},"需要手动添写meta视口标签通知浏览器操作",[29,144012,144013],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[44,144015,144017],{"id":144016},"_1934-meta视口标签","19.3.4 meta视口标签",[77,144019,144021],{"className":924,"code":144020,"language":926,"meta":82,"style":82},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[84,144022,144023],{"__ignoreMap":82},[87,144024,144025,144027,144029,144031,144033,144035,144037,144039,144041],{"class":89,"line":90},[87,144026,938],{"class":97},[87,144028,52288],{"class":93},[87,144030,15870],{"class":205},[87,144032,946],{"class":97},[87,144034,52335],{"class":949},[87,144036,52315],{"class":205},[87,144038,946],{"class":97},[87,144040,52342],{"class":949},[87,144042,953],{"class":97},[39,144044],{"style":41,"src":144045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144047,144048],{},"标准视口设置：",[1055,144050,144051,144054,144057,144060,144063],{},[29,144052,144053],{},"视口宽度和设备保持一致",[29,144055,144056],{},"视口的默认缩放比例1.0",[29,144058,144059],{},"不允许用户自行缩放",[29,144061,144062],{},"最大允许的缩放比例1.0",[29,144064,144065],{},"最小允许的缩放比例1.0",[44,144067,144069],{"id":144068},"_1935-二倍图","19.3.5 二倍图",[49,144071,144073],{"id":144072},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[39,144075],{"style":41,"src":144076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[39,144078],{"style":41,"src":144079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[49,144081,144083],{"id":144082},"_19352-多倍图","19.3.5.2 多倍图",[39,144085],{"style":41,"src":144086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144088,144089],{},"二倍图法，代码如下：",[77,144091,144093],{"className":79,"code":144092,"language":81,"meta":82,"style":82},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[84,144094,144095,144100],{"__ignoreMap":82},[87,144096,144097],{"class":89,"line":90},[87,144098,144099],{"class":199},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[87,144101,144102,144105],{"class":89,"line":101},[87,144103,144104],{"class":93},"background-size",[87,144106,144107],{"class":97},": 50% 50%;\n",[49,144109,144111],{"id":144110},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[39,144113],{"style":41,"src":144114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[1055,144116,144117,144120,144123,144126],{},[29,144118,144119],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[29,144121,144122],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[29,144124,144125],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[29,144127,144128],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[49,144130,144132],{"id":144131},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[39,144134],{"style":41,"src":144135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1006,144137,144138],{},"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":82,"searchDepth":101,"depth":101,"links":144140},[144141,144142,144143],{"id":143954,"depth":101,"text":143955},{"id":143964,"depth":101,"text":143965},{"id":143977,"depth":101,"text":143978,"children":144144},[144145,144146,144147,144148,144149],{"id":143984,"depth":120,"text":143985},{"id":143991,"depth":120,"text":143992},{"id":143998,"depth":120,"text":143999},{"id":144016,"depth":120,"text":144017},{"id":144068,"depth":120,"text":144069},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143946,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144156,"title":144157,"body":144158,"description":1026,"extension":1027,"meta":145035,"navigation":1029,"path":145036,"seo":145037,"stem":145038,"__hash__":145039},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144159,"toc":145019},[144160,144163,144167,144174,144177,144184,144187,144192,144195,144199,144203,144210,144213,144216,144220,144223,144226,144229,144232,144235,144239,144242,144246,144248,144251,144254,144257,144260,144262,144265,144267,144297,144299,144329,144333,144336,144340,144343,144360,144363,144366,144442,144444,144447,144450,144453,144456,144458,144461,144464,144468,144490,144493,144496,144500,144503,144509,144512,144516,144519,144522,144526,144529,144532,144535,144539,144542,144545,144548,144551,144555,144558,144562,144569,144572,144575,144578,144581,144591,144594,144597,144604,144607,144611,144614,144617,144621,144624,144627,144630,144675,144678,144681,144684,144686,144815,144817,144855,144858,144861,144863,144981,144983,145017],[10,144161,144157],{"id":144162},"_20-移动端布局实战上篇",[14,144164,144166],{"id":144165},"_201-移动端主流方案","20.1 移动端主流方案",[1055,144168,144169],{},[29,144170,144171],{},[57,144172,144173],{},"单独移动端页面（主流）",[39,144175],{"style":41,"src":144176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[1055,144178,144179],{"start":101},[29,144180,144181],{},[57,144182,144183],{},"响应式兼容PC移动端",[39,144185],{"style":41,"src":144186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[1055,144188,144189],{"start":120},[29,144190,144191],{},"两种页面选型布局方式",[39,144193],{"style":41,"src":144194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144196,144198],{"id":144197},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[44,144200,144202],{"id":144201},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,144204,144205,144206],{},"官网地址： ",[1334,144207,144208],{"href":144208,"rel":144209},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24812],[39,144211],{"style":41,"src":144212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[39,144214],{"style":41,"src":144215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[44,144217,144219],{"id":144218},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[39,144221],{"style":41,"src":144222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[39,144224],{"style":41,"src":144225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,144227,144228],{},"去除高亮：",[19,144230,144231],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,144233,144234],{},"-webkit- tap-highlight-color: transparent;",[14,144236,144238],{"id":144237},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[39,144240],{"style":41,"src":144241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144243,144245],{"id":144244},"_204-流式布局案例","20.4 流式布局案例",[19,144247,1131],{},[19,144249,144250],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,144252,144253],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,144255,144256],{},"图片格式：",[39,144258],{"style":41,"src":144259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,144261,136501],{},[39,144263],{"style":41,"src":144264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,144266,140825],{},[77,144268,144269],{"className":924,"code":134966,"language":926,"meta":82,"style":82},[84,144270,144271],{"__ignoreMap":82},[87,144272,144273,144275,144277,144279,144281,144283,144285,144287,144289,144291,144293,144295],{"class":89,"line":90},[87,144274,938],{"class":97},[87,144276,39],{"class":93},[87,144278,56175],{"class":205},[87,144280,946],{"class":97},[87,144282,134981],{"class":949},[87,144284,56183],{"class":205},[87,144286,946],{"class":97},[87,144288,134988],{"class":949},[87,144290,134991],{"class":205},[87,144292,946],{"class":97},[87,144294,134996],{"class":949},[87,144296,953],{"class":97},[19,144298,140914],{},[77,144300,144301],{"className":924,"code":134966,"language":926,"meta":82,"style":82},[84,144302,144303],{"__ignoreMap":82},[87,144304,144305,144307,144309,144311,144313,144315,144317,144319,144321,144323,144325,144327],{"class":89,"line":90},[87,144306,938],{"class":97},[87,144308,39],{"class":93},[87,144310,56175],{"class":205},[87,144312,946],{"class":97},[87,144314,134981],{"class":949},[87,144316,56183],{"class":205},[87,144318,946],{"class":97},[87,144320,134988],{"class":949},[87,144322,134991],{"class":205},[87,144324,946],{"class":97},[87,144326,134996],{"class":949},[87,144328,953],{"class":97},[14,144330,144332],{"id":144331},"_205-flex布局","20.5 flex布局",[39,144334],{"style":41,"src":144335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[44,144337,144339],{"id":144338},"_2051-布局原理","20.5.1 布局原理",[19,144341,144342],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[26,144344,144345,144348,144351,144354,144357],{},[29,144346,144347],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[29,144349,144350],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[29,144352,144353],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[29,144355,144356],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[29,144358,144359],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,144361,144362],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,144364,144365],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[77,144367,144369],{"className":79,"code":144368,"language":81,"meta":82,"style":82},"\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",[84,144370,144371,144376,144383,144393,144405,144416,144427,144438],{"__ignoreMap":82},[87,144372,144373],{"class":89,"line":90},[87,144374,144375],{"class":199},"\u002F* Flex 弹性布局 *\u002F\n",[87,144377,144378,144381],{"class":89,"line":101},[87,144379,144380],{"class":205},".container",[87,144382,98],{"class":97},[87,144384,144385,144387,144389,144391],{"class":89,"line":120},[87,144386,129089],{"class":104},[87,144388,108],{"class":97},[87,144390,52420],{"class":104},[87,144392,117],{"class":97},[87,144394,144395,144398,144400,144403],{"class":89,"line":222},[87,144396,144397],{"class":104},"  flex-direction",[87,144399,108],{"class":97},[87,144401,144402],{"class":104},"row",[87,144404,117],{"class":97},[87,144406,144407,144410,144412,144414],{"class":89,"line":234},[87,144408,144409],{"class":104},"  justify-content",[87,144411,108],{"class":97},[87,144413,52606],{"class":104},[87,144415,117],{"class":97},[87,144417,144418,144421,144423,144425],{"class":89,"line":256},[87,144419,144420],{"class":104},"  align-items",[87,144422,108],{"class":97},[87,144424,318],{"class":104},[87,144426,117],{"class":97},[87,144428,144429,144432,144434,144436],{"class":89,"line":269},[87,144430,144431],{"class":104},"  flex-wrap",[87,144433,108],{"class":97},[87,144435,79538],{"class":104},[87,144437,117],{"class":97},[87,144439,144440],{"class":89,"line":463},[87,144441,123],{"class":97},[19,144443,71385],{},[19,144445,144446],{},".form-item .male-label {",[19,144448,144449],{},"   margin-right: 20px;",[19,144451,144452],{},"   display: inline-flex;",[19,144454,144455],{},"   align-items: center;",[19,144457,2037],{},[39,144459],{"style":41,"src":144460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[39,144462],{"style":41,"src":144463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[44,144465,144467],{"id":144466},"_2052-常见父项属性","20.5.2 常见父项属性",[1055,144469,144470,144473,144476,144479,144482,144485,144488],{},[29,144471,144472],{},"flex-direction：设置主轴的方向",[29,144474,144475],{},"justify-content：设置主轴上的子元素排列方式",[29,144477,144478],{},"flex-wrap：设置子元素是否换行",[29,144480,144481],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[29,144483,144484],{},"align-items：设置侧轴上的子元素排列方式（单行）",[29,144486,144487],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[29,144489,144472],{},[39,144491],{"style":41,"src":144492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[39,144494],{"style":41,"src":144495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[1055,144497,144498],{"start":101},[29,144499,144475],{},[39,144501],{"style":41,"src":144502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,144504,144505,144508],{},[84,144506,144507],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,144510,144511],{},"跟着主轴走",[1055,144513,144514],{"start":120},[29,144515,144478],{},[39,144517],{"style":41,"src":144518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,144520,144521],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[1055,144523,144524],{"start":222},[29,144525,144481],{},[39,144527],{"style":41,"src":144528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,144530,144531],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,144533,144534],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[1055,144536,144537],{"start":234},[29,144538,144484],{},[39,144540],{"style":41,"src":144541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,144543,144544],{},"align-items与align-content之间的区别：",[19,144546,144547],{},"单找items，多找content",[39,144549],{"style":41,"src":144550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[1055,144552,144553],{"start":256},[29,144554,144487],{},[39,144556],{"style":41,"src":144557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[44,144559,144561],{"id":144560},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[1055,144563,144564],{},[29,144565,144566],{},[57,144567,144568],{},"flex 属性",[19,144570,144571],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[39,144573],{"style":41,"src":144574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,144576,144577],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,144579,144580],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[1055,144582,144583],{"start":101},[29,144584,144585,14745,144588],{},[57,144586,144587],{},"align-self",[57,144589,144590],{},"控制子项自己在侧轴上的排列方式",[39,144592],{"style":41,"src":144593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,144595,144596],{},"单个子盒子在父盒子侧轴上的排列方式",[1055,144598,144599],{"start":120},[29,144600,144601,144603],{},[57,144602,96223],{}," 属性定义项目的排列顺序",[39,144605],{"style":41,"src":144606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[44,144608,144610],{"id":144609},"_2054-背景线性渐变","20.5.4 背景线性渐变",[39,144612],{"style":41,"src":144613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,144615,144616],{},"必须要添加浏览器的私有前缀",[44,144618,144620],{"id":144619},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,144622,144623],{},"学到最重要的知识：",[19,144625,144626],{},"flex处理这样的布局思路",[39,144628],{"style":41,"src":144629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[77,144631,144633],{"className":79,"code":144632,"language":81,"meta":82,"style":82},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[84,144634,144635,144641,144651,144661,144671],{"__ignoreMap":82},[87,144636,144637,144639],{"class":89,"line":90},[87,144638,144380],{"class":205},[87,144640,98],{"class":97},[87,144642,144643,144645,144647,144649],{"class":89,"line":101},[87,144644,129089],{"class":104},[87,144646,108],{"class":97},[87,144648,52420],{"class":104},[87,144650,117],{"class":97},[87,144652,144653,144655,144657,144659],{"class":89,"line":120},[87,144654,144409],{"class":104},[87,144656,108],{"class":97},[87,144658,318],{"class":104},[87,144660,117],{"class":97},[87,144662,144663,144665,144667,144669],{"class":89,"line":222},[87,144664,144420],{"class":104},[87,144666,108],{"class":97},[87,144668,318],{"class":104},[87,144670,117],{"class":97},[87,144672,144673],{"class":89,"line":234},[87,144674,123],{"class":97},[19,144676,144677],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,144679,144680],{},"使用属性选择器",[39,144682],{"style":41,"src":144683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,144685,69821],{},[77,144687,144689],{"className":924,"code":144688,"language":926,"meta":82,"style":82},"\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",[84,144690,144691,144696,144710,144715,144735,144740,144759,144764,144783,144788,144807],{"__ignoreMap":82},[87,144692,144693],{"class":89,"line":90},[87,144694,144695],{"class":199},"\u003C!-- 携程网移动端案例结构 -->\n",[87,144697,144698,144700,144702,144704,144706,144708],{"class":89,"line":101},[87,144699,938],{"class":97},[87,144701,94],{"class":93},[87,144703,943],{"class":205},[87,144705,946],{"class":97},[87,144707,93249],{"class":949},[87,144709,953],{"class":97},[87,144711,144712],{"class":89,"line":120},[87,144713,144714],{"class":199},"  \u003C!-- 搜索栏 -->\n",[87,144716,144717,144719,144721,144723,144725,144728,144731,144733],{"class":89,"line":222},[87,144718,53081],{"class":97},[87,144720,94],{"class":93},[87,144722,943],{"class":205},[87,144724,946],{"class":97},[87,144726,144727],{"class":949},"\"search-index\"",[87,144729,144730],{"class":97},">...\u003C\u002F",[87,144732,94],{"class":93},[87,144734,953],{"class":97},[87,144736,144737],{"class":89,"line":234},[87,144738,144739],{"class":199},"  \u003C!-- 焦点图 -->\n",[87,144741,144742,144744,144746,144748,144750,144753,144755,144757],{"class":89,"line":256},[87,144743,53081],{"class":97},[87,144745,94],{"class":93},[87,144747,943],{"class":205},[87,144749,946],{"class":97},[87,144751,144752],{"class":949},"\"focus\"",[87,144754,144730],{"class":97},[87,144756,94],{"class":93},[87,144758,953],{"class":97},[87,144760,144761],{"class":89,"line":269},[87,144762,144763],{"class":199},"  \u003C!-- 主导航 -->\n",[87,144765,144766,144768,144770,144772,144774,144777,144779,144781],{"class":89,"line":463},[87,144767,53081],{"class":97},[87,144769,94],{"class":93},[87,144771,943],{"class":205},[87,144773,946],{"class":97},[87,144775,144776],{"class":949},"\"local-nav\"",[87,144778,144730],{"class":97},[87,144780,94],{"class":93},[87,144782,953],{"class":97},[87,144784,144785],{"class":89,"line":469},[87,144786,144787],{"class":199},"  \u003C!-- 子导航 -->\n",[87,144789,144790,144792,144794,144796,144798,144801,144803,144805],{"class":89,"line":2287},[87,144791,53081],{"class":97},[87,144793,94],{"class":93},[87,144795,943],{"class":205},[87,144797,946],{"class":97},[87,144799,144800],{"class":949},"\"nav-common\"",[87,144802,144730],{"class":97},[87,144804,94],{"class":93},[87,144806,953],{"class":97},[87,144808,144809,144811,144813],{"class":89,"line":2568},[87,144810,963],{"class":97},[87,144812,94],{"class":93},[87,144814,953],{"class":97},[19,144816,71385],{},[77,144818,144819],{"className":79,"code":137908,"language":81,"meta":82,"style":82},[84,144820,144821,144835,144851],{"__ignoreMap":82},[87,144822,144823,144825,144827,144829,144831,144833],{"class":89,"line":90},[87,144824,54757],{"class":93},[87,144826,1982],{"class":97},[87,144828,104033],{"class":205},[87,144830,946],{"class":171},[87,144832,63633],{"class":949},[87,144834,137925],{"class":97},[87,144836,144837,144839,144841,144843,144845,144847,144849],{"class":89,"line":101},[87,144838,237],{"class":104},[87,144840,108],{"class":97},[87,144842,1313],{"class":104},[87,144844,245],{"class":171},[87,144846,248],{"class":104},[87,144848,131051],{"class":104},[87,144850,117],{"class":97},[87,144852,144853],{"class":89,"line":120},[87,144854,123],{"class":97},[19,144856,144857],{},"总代码和效果展示：",[39,144859],{"style":41,"src":144860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144862,69821],{},[77,144864,144865],{"className":924,"code":144688,"language":926,"meta":82,"style":82},[84,144866,144867,144871,144885,144889,144907,144911,144929,144933,144951,144955,144973],{"__ignoreMap":82},[87,144868,144869],{"class":89,"line":90},[87,144870,144695],{"class":199},[87,144872,144873,144875,144877,144879,144881,144883],{"class":89,"line":101},[87,144874,938],{"class":97},[87,144876,94],{"class":93},[87,144878,943],{"class":205},[87,144880,946],{"class":97},[87,144882,93249],{"class":949},[87,144884,953],{"class":97},[87,144886,144887],{"class":89,"line":120},[87,144888,144714],{"class":199},[87,144890,144891,144893,144895,144897,144899,144901,144903,144905],{"class":89,"line":222},[87,144892,53081],{"class":97},[87,144894,94],{"class":93},[87,144896,943],{"class":205},[87,144898,946],{"class":97},[87,144900,144727],{"class":949},[87,144902,144730],{"class":97},[87,144904,94],{"class":93},[87,144906,953],{"class":97},[87,144908,144909],{"class":89,"line":234},[87,144910,144739],{"class":199},[87,144912,144913,144915,144917,144919,144921,144923,144925,144927],{"class":89,"line":256},[87,144914,53081],{"class":97},[87,144916,94],{"class":93},[87,144918,943],{"class":205},[87,144920,946],{"class":97},[87,144922,144752],{"class":949},[87,144924,144730],{"class":97},[87,144926,94],{"class":93},[87,144928,953],{"class":97},[87,144930,144931],{"class":89,"line":269},[87,144932,144763],{"class":199},[87,144934,144935,144937,144939,144941,144943,144945,144947,144949],{"class":89,"line":463},[87,144936,53081],{"class":97},[87,144938,94],{"class":93},[87,144940,943],{"class":205},[87,144942,946],{"class":97},[87,144944,144776],{"class":949},[87,144946,144730],{"class":97},[87,144948,94],{"class":93},[87,144950,953],{"class":97},[87,144952,144953],{"class":89,"line":469},[87,144954,144787],{"class":199},[87,144956,144957,144959,144961,144963,144965,144967,144969,144971],{"class":89,"line":2287},[87,144958,53081],{"class":97},[87,144960,94],{"class":93},[87,144962,943],{"class":205},[87,144964,946],{"class":97},[87,144966,144800],{"class":949},[87,144968,144730],{"class":97},[87,144970,94],{"class":93},[87,144972,953],{"class":97},[87,144974,144975,144977,144979],{"class":89,"line":2568},[87,144976,963],{"class":97},[87,144978,94],{"class":93},[87,144980,953],{"class":97},[19,144982,71385],{},[77,144984,144985],{"className":924,"code":925,"language":926,"meta":82,"style":82},[84,144986,144987,144991,145005,145009],{"__ignoreMap":82},[87,144988,144989],{"class":89,"line":90},[87,144990,933],{"class":199},[87,144992,144993,144995,144997,144999,145001,145003],{"class":89,"line":101},[87,144994,938],{"class":97},[87,144996,94],{"class":93},[87,144998,943],{"class":205},[87,145000,946],{"class":97},[87,145002,950],{"class":949},[87,145004,953],{"class":97},[87,145006,145007],{"class":89,"line":120},[87,145008,958],{"class":97},[87,145010,145011,145013,145015],{"class":89,"line":222},[87,145012,963],{"class":97},[87,145014,94],{"class":93},[87,145016,953],{"class":97},[1006,145018,138857],{},{"title":82,"searchDepth":101,"depth":101,"links":145020},[145021,145022,145026,145027,145028],{"id":144165,"depth":101,"text":144166},{"id":144197,"depth":101,"text":144198,"children":145023},[145024,145025],{"id":144201,"depth":120,"text":144202},{"id":144218,"depth":120,"text":144219},{"id":144237,"depth":101,"text":144238},{"id":144244,"depth":101,"text":144245},{"id":144331,"depth":101,"text":144332,"children":145029},[145030,145031,145032,145033,145034],{"id":144338,"depth":120,"text":144339},{"id":144466,"depth":120,"text":144467},{"id":144560,"depth":120,"text":144561},{"id":144609,"depth":120,"text":144610},{"id":144619,"depth":120,"text":144620},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144157,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145041,"title":145042,"body":145043,"description":1026,"extension":1027,"meta":146270,"navigation":1029,"path":146271,"seo":146272,"stem":146273,"__hash__":146274},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145044,"toc":146248},[145045,145048,145052,145056,145059,145062,145066,145071,145074,145077,145080,145083,145086,145143,145146,145151,145154,145157,145161,145172,145176,145179,145182,145189,145194,145198,145201,145207,145210,145214,145217,145224,145227,145230,145237,145240,145247,145250,145253,145260,145263,145266,145268,145285,145289,145292,145295,145298,145302,145305,145308,145311,145314,145317,145320,145322,145325,145328,145390,145393,145503,145510,145516,145519,145522,145526,145529,145533,145538,145541,145548,145551,145557,145562,145565,145568,145571,145574,145577,145580,145583,145586,145642,145644,145670,145674,145677,145680,145683,145691,145694,145697,145701,145757,145760,145764,145770,145781,145784,145789,145792,145795,145801,145804,145807,145810,145813,145816,145819,145822,145825,145850,145856,145859,145862,145865,145868,145871,145874,145879,145882,145885,145888,145896,145899,145906,145909,145912,145914,145938,145940,145943,145946,145949,145952,145955,145958,145961,145995,145998,146001,146035,146042,146045,146048,146051,146054,146057,146060,146067,146070,146073,146076,146079,146086,146089,146092,146099,146102,146105,146109,146112,146115,146118,146121,146124,146127,146130,146133,146135,146159,146161,146185,146189,146200,146203,146206,146209,146212,146215,146218,146221,146224,146227,146230,146233,146236,146239,146242,146245],[10,145046,145042],{"id":145047},"_21-移动端布局实战下篇",[14,145049,145051],{"id":145050},"_211-rem适配布局","21.1 rem适配布局",[44,145053,145055],{"id":145054},"_2111-rem单位","21.1.1 rem单位",[39,145057],{"style":41,"src":145058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145060,145061],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[44,145063,145065],{"id":145064},"_2112-媒体查询","21.1.2 媒体查询",[1055,145067,145068],{},[29,145069,145070],{},"参数介绍",[39,145072],{"style":41,"src":145073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[39,145075],{"style":41,"src":145076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[39,145078],{"style":41,"src":145079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[39,145081],{"style":41,"src":145082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[39,145084],{"style":41,"src":145085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[77,145087,145089],{"className":79,"code":145088,"language":81,"meta":82,"style":82},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[84,145090,145091,145096,145115,145122,145135,145139],{"__ignoreMap":82},[87,145092,145093],{"class":89,"line":90},[87,145094,145095],{"class":199},"\u002F* 媒体查询 *\u002F\n",[87,145097,145098,145101,145103,145106,145108,145111,145113],{"class":89,"line":101},[87,145099,145100],{"class":171},"@media",[87,145102,2614],{"class":97},[87,145104,145105],{"class":104},"max-width",[87,145107,108],{"class":97},[87,145109,145110],{"class":104},"768",[87,145112,245],{"class":171},[87,145114,13392],{"class":97},[87,145116,145117,145120],{"class":89,"line":120},[87,145118,145119],{"class":205},"  .container",[87,145121,98],{"class":97},[87,145123,145124,145127,145129,145131,145133],{"class":89,"line":222},[87,145125,145126],{"class":104},"    width",[87,145128,108],{"class":97},[87,145130,536],{"class":104},[87,145132,1423],{"class":171},[87,145134,117],{"class":97},[87,145136,145137],{"class":89,"line":234},[87,145138,128269],{"class":97},[87,145140,145141],{"class":89,"line":256},[87,145142,123],{"class":97},[19,145144,145145],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[1055,145147,145148],{"start":101},[29,145149,145150],{},"引入资源",[39,145152],{"style":41,"src":145153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,145155,145156],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[44,145158,145160],{"id":145159},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[26,145162,145163,145166,145169],{},[29,145164,145165],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[29,145167,145168],{},"媒体查询可以根据不同设备宽度来修改样式",[29,145170,145171],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145173,145175],{"id":145174},"_212-less基础","21.2 Less基础",[19,145177,145178],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,145180,145181],{},"Less可以解决该问题，它是css的扩展语言",[19,145183,145184,145185],{},"Less中文网址： ",[1334,145186,145187],{"href":145187,"rel":145188},"http:\u002F\u002Flesscss.cn\u002F",[24812],[19,145190,145191],{},[57,145192,145193],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[44,145195,145197],{"id":145196},"_2121-less安装","21.2.1 less安装",[19,145199,145200],{},"如果使用vscode，则无需进行下方安装步骤",[19,145202,145203],{},[1334,145204,145205],{"href":145205,"rel":145206},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24812],[39,145208],{"style":41,"src":145209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[44,145211,145213],{"id":145212},"_2122-less使用","21.2.2 less使用",[19,145215,145216],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[1055,145218,145219],{},[29,145220,145221],{},[57,145222,145223],{},"Less 变量",[39,145225],{"style":41,"src":145226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[39,145228],{"style":41,"src":145229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[1055,145231,145232],{"start":101},[29,145233,145234],{},[57,145235,145236],{},"Less 编译",[39,145238],{"style":41,"src":145239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[1055,145241,145242],{"start":120},[29,145243,145244],{},[57,145245,145246],{},"Less 嵌套",[39,145248],{"style":41,"src":145249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[39,145251],{"style":41,"src":145252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[1055,145254,145255],{"start":222},[29,145256,145257],{},[57,145258,145259],{},"Less 运算",[39,145261],{"style":41,"src":145262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,145264,145265],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,145267,1131],{},[26,145269,145270,145273,145276,145279,145282],{},[29,145271,145272],{},"乘号（*）和除号（\u002F）的写法",[29,145274,145275],{},"运算符中间左右有个空格隔开 1px + 5",[29,145277,145278],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[29,145280,145281],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[29,145283,145284],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145286,145288],{"id":145287},"_213-rem-适配方案","21.3 rem 适配方案",[19,145290,145291],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,145293,145294],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[39,145296],{"style":41,"src":145297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[44,145299,145301],{"id":145300},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,145303,145304],{},"rem + 媒体查询 + less 技术",[39,145306],{"style":41,"src":145307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,145309,145310],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,145312,145313],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[39,145315],{"style":41,"src":145316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,145318,145319],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,145321,15583],{},[39,145323],{"style":41,"src":145324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,145326,145327],{},"index.html:",[77,145329,145331],{"className":79,"code":145330,"language":81,"meta":82,"style":82},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[84,145332,145333,145338,145344,145360,145364,145370,145386],{"__ignoreMap":82},[87,145334,145335],{"class":89,"line":90},[87,145336,145337],{"class":199},"\u002F* rem 适配方案 *\u002F\n",[87,145339,145340,145342],{"class":89,"line":101},[87,145341,51581],{"class":93},[87,145343,98],{"class":97},[87,145345,145346,145348,145350,145353,145355,145357],{"class":89,"line":120},[87,145347,71556],{"class":104},[87,145349,108],{"class":97},[87,145351,145352],{"class":104},"62.5",[87,145354,1423],{"class":171},[87,145356,324],{"class":97},[87,145358,145359],{"class":199},"\u002F* 1rem = 10px *\u002F\n",[87,145361,145362],{"class":89,"line":222},[87,145363,123],{"class":97},[87,145365,145366,145368],{"class":89,"line":234},[87,145367,131319],{"class":205},[87,145369,98],{"class":97},[87,145371,145372,145374,145376,145378,145381,145383],{"class":89,"line":256},[87,145373,213],{"class":104},[87,145375,108],{"class":97},[87,145377,242],{"class":104},[87,145379,145380],{"class":171},"rem",[87,145382,324],{"class":97},[87,145384,145385],{"class":199},"\u002F* 100px *\u002F\n",[87,145387,145388],{"class":89,"line":269},[87,145389,123],{"class":97},[19,145391,145392],{},"common.less",[77,145394,145396],{"className":79,"code":145395,"language":81,"meta":82,"style":82},"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",[84,145397,145398,145404,145419,145423,145429,145443,145447,145451,145455,145461,145475,145479,145485,145499],{"__ignoreMap":82},[87,145399,145400,145402],{"class":89,"line":90},[87,145401,51581],{"class":93},[87,145403,98],{"class":97},[87,145405,145406,145408,145410,145412,145414,145416],{"class":89,"line":101},[87,145407,71556],{"class":104},[87,145409,108],{"class":97},[87,145411,145352],{"class":104},[87,145413,1423],{"class":171},[87,145415,27014],{"class":97},[87,145417,145418],{"class":199},"\u002F* 10px *\u002F\n",[87,145420,145421],{"class":89,"line":120},[87,145422,123],{"class":97},[87,145424,145425,145427],{"class":89,"line":222},[87,145426,94],{"class":93},[87,145428,98],{"class":97},[87,145430,145431,145433,145435,145437,145439,145441],{"class":89,"line":234},[87,145432,213],{"class":104},[87,145434,108],{"class":97},[87,145436,242],{"class":104},[87,145438,145380],{"class":171},[87,145440,27014],{"class":97},[87,145442,145385],{"class":199},[87,145444,145445],{"class":89,"line":256},[87,145446,123],{"class":97},[87,145448,145449],{"class":89,"line":269},[87,145450,435],{"class":97},[87,145452,145453],{"class":89,"line":463},[87,145454,145337],{"class":199},[87,145456,145457,145459],{"class":89,"line":469},[87,145458,51581],{"class":93},[87,145460,98],{"class":97},[87,145462,145463,145465,145467,145469,145471,145473],{"class":89,"line":2287},[87,145464,71556],{"class":104},[87,145466,108],{"class":97},[87,145468,145352],{"class":104},[87,145470,1423],{"class":171},[87,145472,324],{"class":97},[87,145474,145359],{"class":199},[87,145476,145477],{"class":89,"line":2568},[87,145478,123],{"class":97},[87,145480,145481,145483],{"class":89,"line":2573},[87,145482,131319],{"class":205},[87,145484,98],{"class":97},[87,145486,145487,145489,145491,145493,145495,145497],{"class":89,"line":2579},[87,145488,213],{"class":104},[87,145490,108],{"class":97},[87,145492,242],{"class":104},[87,145494,145380],{"class":171},[87,145496,324],{"class":97},[87,145498,145385],{"class":199},[87,145500,145501],{"class":89,"line":2584},[87,145502,123],{"class":97},[19,145504,145505,145506,145509],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24500,145507,145508],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[77,145511,145514],{"className":145512,"code":145513,"language":599},[597],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[84,145515,145513],{"__ignoreMap":82},[19,145517,145518],{},"less保存时会自动变成.css文件",[19,145520,145521],{},"好好搞懂上述代码写法",[44,145523,145525],{"id":145524},"_2132-样式导入样式","21.3.2 样式导入样式",[39,145527],{"style":41,"src":145528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[44,145530,145532],{"id":145531},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[1055,145534,145535],{},[29,145536,145537],{},"准备工作",[39,145539],{"style":41,"src":145540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,145542,145543,145544],{},"github地址：",[1334,145545,145546],{"href":145546,"rel":145547},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24812],[19,145549,145550],{},"下载之后，将index.js文件拖到项目中就可以了",[19,145552,145553,145554],{},"js文件引入到index.html中使用的是",[84,145555,145556],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[1055,145558,145559],{"start":101},[29,145560,145561],{},"vscode插件",[39,145563],{"style":41,"src":145564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,145566,145567],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,145569,145570],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[39,145572],{"style":41,"src":145573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,145575,145576],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[39,145578],{"style":41,"src":145579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,145581,145582],{},"修改成75就可以，alt+z为快捷键",[19,145584,145585],{},"index.css：",[77,145587,145588],{"className":79,"code":145330,"language":81,"meta":82,"style":82},[84,145589,145590,145594,145600,145614,145618,145624,145638],{"__ignoreMap":82},[87,145591,145592],{"class":89,"line":90},[87,145593,145337],{"class":199},[87,145595,145596,145598],{"class":89,"line":101},[87,145597,51581],{"class":93},[87,145599,98],{"class":97},[87,145601,145602,145604,145606,145608,145610,145612],{"class":89,"line":120},[87,145603,71556],{"class":104},[87,145605,108],{"class":97},[87,145607,145352],{"class":104},[87,145609,1423],{"class":171},[87,145611,324],{"class":97},[87,145613,145359],{"class":199},[87,145615,145616],{"class":89,"line":222},[87,145617,123],{"class":97},[87,145619,145620,145622],{"class":89,"line":234},[87,145621,131319],{"class":205},[87,145623,98],{"class":97},[87,145625,145626,145628,145630,145632,145634,145636],{"class":89,"line":256},[87,145627,213],{"class":104},[87,145629,108],{"class":97},[87,145631,242],{"class":104},[87,145633,145380],{"class":171},[87,145635,324],{"class":97},[87,145637,145385],{"class":199},[87,145639,145640],{"class":89,"line":269},[87,145641,123],{"class":97},[19,145643,145327],{},[77,145645,145646],{"className":79,"code":127879,"language":81,"meta":82,"style":82},[84,145647,145648,145654,145666],{"__ignoreMap":82},[87,145649,145650,145652],{"class":89,"line":90},[87,145651,52737],{"class":93},[87,145653,98],{"class":97},[87,145655,145656,145658,145660,145662,145664],{"class":89,"line":101},[87,145657,71556],{"class":104},[87,145659,108],{"class":97},[87,145661,1694],{"class":104},[87,145663,245],{"class":171},[87,145665,117],{"class":97},[87,145667,145668],{"class":89,"line":120},[87,145669,123],{"class":97},[14,145671,145673],{"id":145672},"_214-响应式开发","21.4 响应式开发",[19,145675,145676],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[39,145678],{"style":41,"src":145679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,145681,145682],{},"做法：",[26,145684,145685,145688],{},[29,145686,145687],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[29,145689,145690],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[39,145692],{"style":41,"src":145693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,145695,145696],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[44,145698,145700],{"id":145699},"_2141-简单代码示范","21.4.1 简单代码示范",[77,145702,145703],{"className":79,"code":145330,"language":81,"meta":82,"style":82},[84,145704,145705,145709,145715,145729,145733,145739,145753],{"__ignoreMap":82},[87,145706,145707],{"class":89,"line":90},[87,145708,145337],{"class":199},[87,145710,145711,145713],{"class":89,"line":101},[87,145712,51581],{"class":93},[87,145714,98],{"class":97},[87,145716,145717,145719,145721,145723,145725,145727],{"class":89,"line":120},[87,145718,71556],{"class":104},[87,145720,108],{"class":97},[87,145722,145352],{"class":104},[87,145724,1423],{"class":171},[87,145726,324],{"class":97},[87,145728,145359],{"class":199},[87,145730,145731],{"class":89,"line":222},[87,145732,123],{"class":97},[87,145734,145735,145737],{"class":89,"line":234},[87,145736,131319],{"class":205},[87,145738,98],{"class":97},[87,145740,145741,145743,145745,145747,145749,145751],{"class":89,"line":256},[87,145742,213],{"class":104},[87,145744,108],{"class":97},[87,145746,242],{"class":104},[87,145748,145380],{"class":171},[87,145750,324],{"class":97},[87,145752,145385],{"class":199},[87,145754,145755],{"class":89,"line":269},[87,145756,123],{"class":97},[19,145758,145759],{},"父盒子一般命名为container",[44,145761,145763],{"id":145762},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145765,145766,145767],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[57,145768,145769],{},"使得 Web 开发更加快捷",[26,145771,145772],{},[29,145773,145774,145775],{},"官网：",[57,145776,145777],{},[1334,145778,145779],{"href":145779,"rel":145780},"http:\u002F\u002Fgetbootstrap.com\u002F",[24812],[19,145782,145783],{},"可以直接去官网拿现成的东西",[1055,145785,145786],{},[29,145787,145788],{},"Bootstrap的使用",[19,145790,145791],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145793,145794],{},"Bootstrap 使用四步曲：",[19,145796,145797,145800],{},[57,145798,145799],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[39,145802],{"style":41,"src":145803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145805,145806],{},"打开Bootstrap官网，然后下载",[39,145808],{"style":41,"src":145809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[39,145811],{"style":41,"src":145812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145814,145815],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145817,145818],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145820,145821],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[39,145823],{"style":41,"src":145824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[77,145826,145828],{"className":79,"code":145827,"language":81,"meta":82,"style":82},".center {\n  color: red;\n}\n",[84,145829,145830,145836,145846],{"__ignoreMap":82},[87,145831,145832,145834],{"class":89,"line":90},[87,145833,127766],{"class":205},[87,145835,98],{"class":97},[87,145837,145838,145840,145842,145844],{"class":89,"line":101},[87,145839,71833],{"class":104},[87,145841,108],{"class":97},[87,145843,58357],{"class":104},[87,145845,117],{"class":97},[87,145847,145848],{"class":89,"line":120},[87,145849,123],{"class":97},[19,145851,145852,145855],{},[84,145853,145854],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[39,145857],{"style":41,"src":145858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[39,145860],{"style":41,"src":145861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[39,145863],{"style":41,"src":145864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145866,145867],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[39,145869],{"style":41,"src":145870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145872,145873],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[1055,145875,145876],{"start":101},[29,145877,145878],{},"布局容器",[39,145880],{"style":41,"src":145881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145883,145884],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145886,145887],{},"container-fluid用于移动式布局比较方便",[1055,145889,145890],{"start":120},[29,145891,145892,145893],{},"bootstrap ",[57,145894,145895],{},"栅格系统原理",[39,145897],{"style":41,"src":145898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[1055,145900,145901],{"start":222},[29,145902,145903],{},[57,145904,145905],{},"栅格选项参数",[39,145907],{"style":41,"src":145908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145910,145911],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145913,15583],{},[77,145915,145916],{"className":79,"code":145827,"language":81,"meta":82,"style":82},[84,145917,145918,145924,145934],{"__ignoreMap":82},[87,145919,145920,145922],{"class":89,"line":90},[87,145921,127766],{"class":205},[87,145923,98],{"class":97},[87,145925,145926,145928,145930,145932],{"class":89,"line":101},[87,145927,71833],{"class":104},[87,145929,108],{"class":97},[87,145931,58357],{"class":104},[87,145933,117],{"class":97},[87,145935,145936],{"class":89,"line":120},[87,145937,123],{"class":97},[19,145939,136501],{},[39,145941],{"style":41,"src":145942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145944,145945],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145947,145948],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145950,145951],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145953,145954],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145956,145957],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145959,145960],{},"汇总展示说明：",[77,145962,145963],{"className":924,"code":925,"language":926,"meta":82,"style":82},[84,145964,145965,145969,145983,145987],{"__ignoreMap":82},[87,145966,145967],{"class":89,"line":90},[87,145968,933],{"class":199},[87,145970,145971,145973,145975,145977,145979,145981],{"class":89,"line":101},[87,145972,938],{"class":97},[87,145974,94],{"class":93},[87,145976,943],{"class":205},[87,145978,946],{"class":97},[87,145980,950],{"class":949},[87,145982,953],{"class":97},[87,145984,145985],{"class":89,"line":120},[87,145986,958],{"class":97},[87,145988,145989,145991,145993],{"class":89,"line":222},[87,145990,963],{"class":97},[87,145992,94],{"class":93},[87,145994,953],{"class":97},[39,145996],{"style":41,"src":145997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145999,146000],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[77,146002,146003],{"className":924,"code":925,"language":926,"meta":82,"style":82},[84,146004,146005,146009,146023,146027],{"__ignoreMap":82},[87,146006,146007],{"class":89,"line":90},[87,146008,933],{"class":199},[87,146010,146011,146013,146015,146017,146019,146021],{"class":89,"line":101},[87,146012,938],{"class":97},[87,146014,94],{"class":93},[87,146016,943],{"class":205},[87,146018,946],{"class":97},[87,146020,950],{"class":949},[87,146022,953],{"class":97},[87,146024,146025],{"class":89,"line":120},[87,146026,958],{"class":97},[87,146028,146029,146031,146033],{"class":89,"line":222},[87,146030,963],{"class":97},[87,146032,94],{"class":93},[87,146034,953],{"class":97},[1055,146036,146037],{"start":234},[29,146038,146039],{},[57,146040,146041],{},"列嵌套",[39,146043],{"style":41,"src":146044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146046,146047],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146049,146050],{},"没加row内部这样：",[39,146052],{"style":41,"src":146053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146055,146056],{},"加上row之后内部为：",[39,146058],{"style":41,"src":146059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[1055,146061,146062],{"start":256},[29,146063,146064],{},[57,146065,146066],{},"列偏移",[39,146068],{"style":41,"src":146069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146071,146072],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146074,146075],{},"要加偏移量，即偏移份数",[19,146077,146078],{},"偏移的份数=12-两个盒子的份数",[1055,146080,146081],{"start":269},[29,146082,146083],{},[57,146084,146085],{},"列排序",[39,146087],{"style":41,"src":146088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146090,146091],{},"pull拉左；push推右",[1055,146093,146094],{"start":463},[29,146095,146096],{},[57,146097,146098],{},"响应式工具",[39,146100],{"style":41,"src":146101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146103,146104],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[44,146106,146108],{"id":146107},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146110,146111],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146113,146114],{},"ul {",[19,146116,146117],{},"list-style: none;",[19,146119,146120],{},"margin:0;",[19,146122,146123],{},"padding:0; }",[39,146125],{"style":41,"src":146126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[39,146128],{"style":41,"src":146129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,146131,146132],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,146134,69821],{},[77,146136,146137],{"className":79,"code":140125,"language":81,"meta":82,"style":82},[84,146138,146139,146145,146155],{"__ignoreMap":82},[87,146140,146141,146143],{"class":89,"line":90},[87,146142,131319],{"class":205},[87,146144,98],{"class":97},[87,146146,146147,146149,146151,146153],{"class":89,"line":101},[87,146148,131946],{"class":104},[87,146150,108],{"class":97},[87,146152,24683],{"class":104},[87,146154,117],{"class":97},[87,146156,146157],{"class":89,"line":120},[87,146158,123],{"class":97},[19,146160,71385],{},[77,146162,146163],{"className":79,"code":140125,"language":81,"meta":82,"style":82},[84,146164,146165,146171,146181],{"__ignoreMap":82},[87,146166,146167,146169],{"class":89,"line":90},[87,146168,131319],{"class":205},[87,146170,98],{"class":97},[87,146172,146173,146175,146177,146179],{"class":89,"line":101},[87,146174,131946],{"class":104},[87,146176,108],{"class":97},[87,146178,24683],{"class":104},[87,146180,117],{"class":97},[87,146182,146183],{"class":89,"line":120},[87,146184,123],{"class":97},[14,146186,146188],{"id":146187},"_215-swiper-插件使用","21.5 swiper 插件使用",[26,146190,146191,146194,146197],{},[29,146192,146193],{},"下载需要的css和js文件html页面中 引入相关文件",[29,146195,146196],{},"官网找到类似案例，复制html结构，css样式 js 语法",[29,146198,146199],{},"根据需求定制修改模块",[39,146201],{"style":41,"src":146202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,146204,146205],{},"解压后将这两部分放到项目中",[39,146207],{"style":41,"src":146208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,146210,146211],{},"这个插件可以帮助我们实现轮播图效果",[19,146213,146214],{},"用法：",[39,146216],{"style":41,"src":146217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,146219,146220],{},"找到自己喜欢的",[39,146222],{"style":41,"src":146223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,146225,146226],{},"右键，查看网页源代码",[39,146228],{"style":41,"src":146229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,146231,146232],{},"复制人家的结构内容",[19,146234,146235],{},"然后去看API文档：",[39,146237],{"style":41,"src":146238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,146240,146241],{},"可以看看如何修改样式",[19,146243,146244],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1006,146246,146247],{},"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":82,"searchDepth":101,"depth":101,"links":146249},[146250,146255,146259,146264,146269],{"id":145050,"depth":101,"text":145051,"children":146251},[146252,146253,146254],{"id":145054,"depth":120,"text":145055},{"id":145064,"depth":120,"text":145065},{"id":145159,"depth":120,"text":145160},{"id":145174,"depth":101,"text":145175,"children":146256},[146257,146258],{"id":145196,"depth":120,"text":145197},{"id":145212,"depth":120,"text":145213},{"id":145287,"depth":101,"text":145288,"children":146260},[146261,146262,146263],{"id":145300,"depth":120,"text":145301},{"id":145524,"depth":120,"text":145525},{"id":145531,"depth":120,"text":145532},{"id":145672,"depth":101,"text":145673,"children":146265},[146266,146267,146268],{"id":145699,"depth":120,"text":145700},{"id":145762,"depth":120,"text":145763},{"id":146107,"depth":120,"text":146108},{"id":146187,"depth":101,"text":146188},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145042,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146276,"title":146277,"body":146278,"description":1026,"extension":1027,"meta":146498,"navigation":1029,"path":146499,"seo":146500,"stem":146501,"__hash__":146502},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146279,"toc":146494},[146280,146283,146287,146290,146305,146310,146313,146318,146353,146358,146370,146375,146388,146393,146410,146415,146435,146440,146458,146461,146464,146467,146470,146474,146477,146480,146483,146486,146489,146492],[10,146281,146277],{"id":146282},"_22-代码提交与新型相对单位",[14,146284,146286],{"id":146285},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,146288,146289],{},"法1：",[1055,146291,146292,146299,146302],{},[29,146293,146294,146295],{},"登录网站注册：",[1334,146296,146297],{"href":146297,"rel":146298},"https:\u002F\u002Fgitee.com\u002F",[24812],[29,146300,146301],{},"码云创建新的仓库",[29,146303,146304],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[26,146306,146307],{},[29,146308,146309],{},"在网站根目录右键-- Git Bash Here",[39,146311],{"style":41,"src":146312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[26,146314,146315],{},[29,146316,146317],{},"如果是第一次利用git提交，请配置好全局选项",[77,146319,146321],{"className":118222,"code":146320,"language":118224,"meta":82,"style":82},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[84,146322,146323,146339],{"__ignoreMap":82},[87,146324,146325,146328,146330,146333,146336],{"class":89,"line":90},[87,146326,146327],{"class":205},"git",[87,146329,120645],{"class":949},[87,146331,146332],{"class":104}," --global",[87,146334,146335],{"class":949}," user.name",[87,146337,146338],{"class":949}," \"你的名字\"\n",[87,146340,146341,146343,146345,146347,146350],{"class":89,"line":101},[87,146342,146327],{"class":205},[87,146344,120645],{"class":949},[87,146346,146332],{"class":104},[87,146348,146349],{"class":949}," user.email",[87,146351,146352],{"class":949}," \"你的邮箱\"\n",[26,146354,146355],{},[29,146356,146357],{},"初始化仓库",[77,146359,146361],{"className":118222,"code":146360,"language":118224,"meta":82,"style":82},"git init\n",[84,146362,146363],{"__ignoreMap":82},[87,146364,146365,146367],{"class":89,"line":90},[87,146366,146327],{"class":205},[87,146368,146369],{"class":949}," init\n",[26,146371,146372],{},[29,146373,146374],{},"把本地文件放到暂存区",[77,146376,146378],{"className":118222,"code":146377,"language":118224,"meta":82,"style":82},"git add .\n",[84,146379,146380],{"__ignoreMap":82},[87,146381,146382,146384,146386],{"class":89,"line":90},[87,146383,146327],{"class":205},[87,146385,6160],{"class":949},[87,146387,29688],{"class":949},[26,146389,146390],{},[29,146391,146392],{},"把本地文件放到本地仓库里面",[77,146394,146396],{"className":118222,"code":146395,"language":118224,"meta":82,"style":82},"git commit -m \"first commit\"\n",[84,146397,146398],{"__ignoreMap":82},[87,146399,146400,146402,146405,146407],{"class":89,"line":90},[87,146401,146327],{"class":205},[87,146403,146404],{"class":949}," commit",[87,146406,101808],{"class":104},[87,146408,146409],{"class":949}," \"first commit\"\n",[26,146411,146412],{},[29,146413,146414],{},"链接远程仓库",[77,146416,146418],{"className":118222,"code":146417,"language":118224,"meta":82,"style":82},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[84,146419,146420],{"__ignoreMap":82},[87,146421,146422,146424,146427,146429,146432],{"class":89,"line":90},[87,146423,146327],{"class":205},[87,146425,146426],{"class":949}," remote",[87,146428,6160],{"class":949},[87,146430,146431],{"class":949}," origin",[87,146433,146434],{"class":949}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[26,146436,146437],{},[29,146438,146439],{},"把本地仓库的文件推送到远程仓库 push",[77,146441,146443],{"className":118222,"code":146442,"language":118224,"meta":82,"style":82},"git push -u origin master\n",[84,146444,146445],{"__ignoreMap":82},[87,146446,146447,146449,146451,146453,146455],{"class":89,"line":90},[87,146448,146327],{"class":205},[87,146450,29963],{"class":949},[87,146452,29237],{"class":104},[87,146454,146431],{"class":949},[87,146456,146457],{"class":949}," master\n",[39,146459],{"style":41,"src":146460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,146462,146463],{},"上方方法暂未实现，后边学完git后在整",[19,146465,146466],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[39,146468],{"style":41,"src":146469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146471,146473],{"id":146472},"_222-新型相对单位","22.2 新型相对单位",[39,146475],{"style":41,"src":146476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[39,146478],{"style":41,"src":146479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,146481,146482],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,146484,146485],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[39,146487],{"style":41,"src":146488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,146490,146491],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1006,146493,24905],{},{"title":82,"searchDepth":101,"depth":101,"links":146495},[146496,146497],{"id":146285,"depth":101,"text":146286},{"id":146472,"depth":101,"text":146473},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146277,"description":1026},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146504,"title":146505,"body":146506,"description":146510,"extension":1027,"meta":146511,"navigation":1029,"path":146512,"seo":146513,"stem":146514,"__hash__":146515},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146507,"toc":146508},[],{"title":82,"searchDepth":101,"depth":101,"links":146509},[],"自己正经开始学编程的第一门语言！",{"category":93765},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146505,"description":146510},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146517,"title":146518,"body":146519,"description":1026,"extension":1027,"meta":147666,"navigation":1029,"path":147667,"seo":147668,"stem":147669,"__hash__":147670},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146520,"toc":147642},[146521,146524,146528,146531,146534,146559,146562,146568,146572,146575,146602,146605,146645,146648,146660,146663,146669,146673,146677,146704,146721,146728,146732,146735,146761,146764,146768,146771,146811,146814,146831,146837,146841,146846,146890,146893,146911,146914,146982,146986,146993,146996,147011,147014,147023,147026,147037,147040,147049,147052,147069,147072,147087,147091,147095,147098,147100,147120,147124,147127,147130,147141,147144,147150,147154,147160,147187,147190,147202,147205,147216,147219,147225,147229,147235,147285,147288,147330,147333,147366,147369,147403,147407,147410,147430,147433,147469,147472,147485,147489,147493,147499,147502,147515,147519,147522,147528,147531,147535,147538,147541,147590,147594,147610,147616,147623,147629,147639],[10,146522,146518],{"id":146523},"_1-python环境与第一个程序",[14,146525,146527],{"id":146526},"_11-什么是python","1.1 什么是Python",[19,146529,146530],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,146532,146533],{},"理解 Python 时抓住三个关键词：",[1055,146535,146536,146539,146542],{},[29,146537,146538],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[29,146540,146541],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[29,146543,146544,146545,1308,146548,1308,146551,1308,146554,1308,146556,29332],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[84,146546,146547],{},"os",[84,146549,146550],{},"sys",[84,146552,146553],{},"json",[84,146555,58796],{},[84,146557,146558],{},"datetime",[19,146560,146561],{},"Python 程序的运行链路：",[77,146563,146566],{"className":146564,"code":146565,"language":599,"meta":82},[597],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[84,146567,146565],{"__ignoreMap":82},[14,146569,146571],{"id":146570},"_12-python解释器","1.2 Python解释器",[19,146573,146574],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[77,146576,146578],{"className":24769,"code":146577,"language":24771,"meta":82,"style":82},"python --version\npython3 --version\npython\npython3\n",[84,146579,146580,146586,146592,146597],{"__ignoreMap":82},[87,146581,146582,146584],{"class":89,"line":90},[87,146583,31327],{"class":205},[87,146585,27240],{"class":104},[87,146587,146588,146590],{"class":89,"line":101},[87,146589,101805],{"class":205},[87,146591,27240],{"class":104},[87,146593,146594],{"class":89,"line":120},[87,146595,146596],{"class":205},"python\n",[87,146598,146599],{"class":89,"line":222},[87,146600,146601],{"class":205},"python3\n",[19,146603,146604],{},"进入交互模式后，可以直接输入表达式：",[77,146606,146608],{"className":31325,"code":146607,"language":31327,"meta":82,"style":82},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[84,146609,146610,146621,146626,146640],{"__ignoreMap":82},[87,146611,146612,146615,146617,146619],{"class":89,"line":90},[87,146613,146614],{"class":171},">>>",[87,146616,568],{"class":104},[87,146618,46513],{"class":171},[87,146620,48670],{"class":104},[87,146622,146623],{"class":89,"line":101},[87,146624,146625],{"class":104},"3\n",[87,146627,146628,146630,146633,146635,146638],{"class":89,"line":120},[87,146629,146614],{"class":171},[87,146631,146632],{"class":104}," print",[87,146634,165],{"class":97},[87,146636,146637],{"class":949},"\"hello python\"",[87,146639,1108],{"class":97},[87,146641,146642],{"class":89,"line":222},[87,146643,146644],{"class":97},"hello python\n",[19,146646,146647],{},"退出交互模式：",[77,146649,146651],{"className":31325,"code":146650,"language":31327,"meta":82,"style":82},"exit()\n",[84,146652,146653],{"__ignoreMap":82},[87,146654,146655,146658],{"class":89,"line":90},[87,146656,146657],{"class":104},"exit",[87,146659,2931],{"class":97},[19,146661,146662],{},"或使用快捷键：",[77,146664,146667],{"className":146665,"code":146666,"language":599,"meta":82},[597],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[84,146668,146666],{"__ignoreMap":82},[14,146670,146672],{"id":146671},"_13-安装python","1.3 安装Python",[44,146674,146676],{"id":146675},"_131-windows安装","1.3.1 Windows安装",[1055,146678,146679,146686,146689,146695,146701],{},[29,146680,146681,146682],{},"打开 Python 官网：",[1334,146683,146684],{"href":146684,"rel":146685},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24812],[29,146687,146688],{},"下载 Windows Installer。",[29,146690,146691,146692,29332],{},"安装时勾选 ",[84,146693,146694],{},"Add Python to PATH",[29,146696,146697,146698,29332],{},"点击 ",[84,146699,146700],{},"Install Now",[29,146702,146703],{},"安装完成后打开命令提示符验证：",[77,146705,146707],{"className":24769,"code":146706,"language":24771,"meta":82,"style":82},"python --version\npip --version\n",[84,146708,146709,146715],{"__ignoreMap":82},[87,146710,146711,146713],{"class":89,"line":90},[87,146712,31327],{"class":205},[87,146714,27240],{"class":104},[87,146716,146717,146719],{"class":89,"line":101},[87,146718,24778],{"class":205},[87,146720,27240],{"class":104},[19,146722,146723,146724,146727],{},"如果提示 ",[84,146725,146726],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[44,146729,146731],{"id":146730},"_132-macos安装","1.3.2 macOS安装",[19,146733,146734],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[77,146736,146738],{"className":24769,"code":146737,"language":24771,"meta":82,"style":82},"brew install python\npython3 --version\npip3 --version\n",[84,146739,146740,146749,146755],{"__ignoreMap":82},[87,146741,146742,146745,146747],{"class":89,"line":90},[87,146743,146744],{"class":205},"brew",[87,146746,24781],{"class":949},[87,146748,125244],{"class":949},[87,146750,146751,146753],{"class":89,"line":101},[87,146752,101805],{"class":205},[87,146754,27240],{"class":104},[87,146756,146757,146759],{"class":89,"line":120},[87,146758,120626],{"class":205},[87,146760,27240],{"class":104},[19,146762,146763],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[44,146765,146767],{"id":146766},"_133-linux安装","1.3.3 Linux安装",[19,146769,146770],{},"Ubuntu\u002FDebian：",[77,146772,146774],{"className":24769,"code":146773,"language":24771,"meta":82,"style":82},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[84,146775,146776,146784,146799,146805],{"__ignoreMap":82},[87,146777,146778,146780,146782],{"class":89,"line":90},[87,146779,25524],{"class":205},[87,146781,118243],{"class":949},[87,146783,27189],{"class":949},[87,146785,146786,146788,146790,146792,146794,146796],{"class":89,"line":101},[87,146787,25524],{"class":205},[87,146789,118243],{"class":949},[87,146791,24781],{"class":949},[87,146793,105329],{"class":949},[87,146795,101724],{"class":949},[87,146797,146798],{"class":949}," python3-venv\n",[87,146800,146801,146803],{"class":89,"line":120},[87,146802,101805],{"class":205},[87,146804,27240],{"class":104},[87,146806,146807,146809],{"class":89,"line":222},[87,146808,120626],{"class":205},[87,146810,27240],{"class":104},[19,146812,146813],{},"Fedora：",[77,146815,146817],{"className":24769,"code":146816,"language":24771,"meta":82,"style":82},"sudo dnf install python3 python3-pip\n",[84,146818,146819],{"__ignoreMap":82},[87,146820,146821,146823,146825,146827,146829],{"class":89,"line":90},[87,146822,25524],{"class":205},[87,146824,27262],{"class":949},[87,146826,24781],{"class":949},[87,146828,105329],{"class":949},[87,146830,120691],{"class":949},[19,146832,146833,146834,146836],{},"Linux 上通常使用 ",[84,146835,101805],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146838,146840],{"id":146839},"_14-pip包管理器","1.4 pip包管理器",[19,146842,146843,146845],{},[84,146844,24778],{}," 用来安装第三方库。",[77,146847,146849],{"className":24769,"code":146848,"language":24771,"meta":82,"style":82},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[84,146850,146851,146860,146869,146877,146883],{"__ignoreMap":82},[87,146852,146853,146855,146857],{"class":89,"line":90},[87,146854,24778],{"class":205},[87,146856,24781],{"class":949},[87,146858,146859],{"class":949}," requests\n",[87,146861,146862,146864,146867],{"class":89,"line":101},[87,146863,24778],{"class":205},[87,146865,146866],{"class":949}," uninstall",[87,146868,146859],{"class":949},[87,146870,146871,146873,146875],{"class":89,"line":120},[87,146872,24778],{"class":205},[87,146874,118500],{"class":949},[87,146876,146859],{"class":949},[87,146878,146879,146881],{"class":89,"line":222},[87,146880,24778],{"class":205},[87,146882,119881],{"class":949},[87,146884,146885,146887],{"class":89,"line":234},[87,146886,24778],{"class":205},[87,146888,146889],{"class":949}," freeze\n",[19,146891,146892],{},"国内网络较慢时可以临时使用镜像：",[77,146894,146896],{"className":24769,"code":146895,"language":24771,"meta":82,"style":82},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[84,146897,146898],{"__ignoreMap":82},[87,146899,146900,146902,146904,146907,146909],{"class":89,"line":90},[87,146901,24778],{"class":205},[87,146903,24781],{"class":949},[87,146905,146906],{"class":949}," requests",[87,146908,27377],{"class":104},[87,146910,120654],{"class":949},[19,146912,146913],{},"常见第三方库：",[1235,146915,146916,146925],{},[1238,146917,146918],{},[1241,146919,146920,146923],{},[1244,146921,146922],{},"库",[1244,146924,103622],{},[1281,146926,146927,146935,146942,146950,146958,146966,146974],{},[1241,146928,146929,146932],{},[1286,146930,146931],{},"requests",[1286,146933,146934],{},"网络请求",[1241,146936,146937,146939],{},[1286,146938,101552],{},[1286,146940,146941],{},"数值计算",[1241,146943,146944,146947],{},[1286,146945,146946],{},"pandas",[1286,146948,146949],{},"表格数据处理",[1241,146951,146952,146955],{},[1286,146953,146954],{},"matplotlib",[1286,146956,146957],{},"绘图",[1241,146959,146960,146963],{},[1286,146961,146962],{},"pyecharts",[1286,146964,146965],{},"ECharts 图表",[1241,146967,146968,146971],{},[1286,146969,146970],{},"flask",[1286,146972,146973],{},"Web 后端",[1241,146975,146976,146979],{},[1286,146977,146978],{},"pytest",[1286,146980,146981],{},"自动化测试",[14,146983,146985],{"id":146984},"_15-虚拟环境","1.5 虚拟环境",[19,146987,146988,146989,146992],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[84,146990,146991],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146994,146995],{},"创建虚拟环境：",[77,146997,146999],{"className":24769,"code":146998,"language":24771,"meta":82,"style":82},"python -m venv .venv\n",[84,147000,147001],{"__ignoreMap":82},[87,147002,147003,147005,147007,147009],{"class":89,"line":90},[87,147004,31327],{"class":205},[87,147006,101808],{"class":104},[87,147008,101811],{"class":949},[87,147010,101814],{"class":949},[19,147012,147013],{},"Windows 激活：",[77,147015,147017],{"className":24769,"code":147016,"language":24771,"meta":82,"style":82},".venv\\Scripts\\activate\n",[84,147018,147019],{"__ignoreMap":82},[87,147020,147021],{"class":89,"line":90},[87,147022,147016],{"class":205},[19,147024,147025],{},"macOS\u002FLinux 激活：",[77,147027,147029],{"className":24769,"code":147028,"language":24771,"meta":82,"style":82},"source .venv\u002Fbin\u002Factivate\n",[84,147030,147031],{"__ignoreMap":82},[87,147032,147033,147035],{"class":89,"line":90},[87,147034,101819],{"class":104},[87,147036,101822],{"class":949},[19,147038,147039],{},"退出虚拟环境：",[77,147041,147043],{"className":24769,"code":147042,"language":24771,"meta":82,"style":82},"deactivate\n",[84,147044,147045],{"__ignoreMap":82},[87,147046,147047],{"class":89,"line":90},[87,147048,147042],{"class":205},[19,147050,147051],{},"保存依赖：",[77,147053,147055],{"className":24769,"code":147054,"language":24771,"meta":82,"style":82},"pip freeze > requirements.txt\n",[84,147056,147057],{"__ignoreMap":82},[87,147058,147059,147061,147064,147066],{"class":89,"line":90},[87,147060,24778],{"class":205},[87,147062,147063],{"class":949}," freeze",[87,147065,27169],{"class":171},[87,147067,147068],{"class":949}," requirements.txt\n",[19,147070,147071],{},"安装依赖：",[77,147073,147075],{"className":24769,"code":147074,"language":24771,"meta":82,"style":82},"pip install -r requirements.txt\n",[84,147076,147077],{"__ignoreMap":82},[87,147078,147079,147081,147083,147085],{"class":89,"line":90},[87,147080,24778],{"class":205},[87,147082,24781],{"class":949},[87,147084,120565],{"class":104},[87,147086,147068],{"class":949},[14,147088,147090],{"id":147089},"_16-开发工具","1.6 开发工具",[44,147092,147094],{"id":147093},"_161-pycharm","1.6.1 PyCharm",[19,147096,147097],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,147099,122988],{},[1055,147101,147102,147105,147108,147114,147117],{},[29,147103,147104],{},"New Project：创建项目。",[29,147106,147107],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[29,147109,147110,147111,126909],{},"New Python File：创建 ",[84,147112,147113],{},".py",[29,147115,147116],{},"Run：运行当前文件。",[29,147118,147119],{},"Debug：断点调试。",[44,147121,147123],{"id":147122},"_162-vs-code","1.6.2 VS Code",[19,147125,147126],{},"VS Code 轻量，适合后续多语言开发。",[19,147128,147129],{},"建议安装插件：",[1055,147131,147132,147135,147138],{},[29,147133,147134],{},"Python。",[29,147136,147137],{},"Pylance。",[29,147139,147140],{},"Jupyter。",[19,147142,147143],{},"选择解释器：",[77,147145,147148],{"className":147146,"code":147147,"language":599,"meta":82},[597],"Ctrl + Shift + P -> Python: Select Interpreter\n",[84,147149,147147],{"__ignoreMap":82},[14,147151,147153],{"id":147152},"_17-第一个python程序","1.7 第一个Python程序",[19,147155,147156,147157,25566],{},"创建文件 ",[84,147158,147159],{},"hello.py",[77,147161,147163],{"className":31325,"code":147162,"language":31327,"meta":82,"style":82},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[84,147164,147165,147176],{"__ignoreMap":82},[87,147166,147167,147169,147171,147174],{"class":89,"line":90},[87,147168,31362],{"class":104},[87,147170,165],{"class":97},[87,147172,147173],{"class":949},"\"Hello World\"",[87,147175,1108],{"class":97},[87,147177,147178,147180,147182,147185],{"class":89,"line":101},[87,147179,31362],{"class":104},[87,147181,165],{"class":97},[87,147183,147184],{"class":949},"\"你好，Python\"",[87,147186,1108],{"class":97},[19,147188,147189],{},"在终端运行：",[77,147191,147193],{"className":24769,"code":147192,"language":24771,"meta":82,"style":82},"python hello.py\n",[84,147194,147195],{"__ignoreMap":82},[87,147196,147197,147199],{"class":89,"line":90},[87,147198,31327],{"class":205},[87,147200,147201],{"class":949}," hello.py\n",[19,147203,147204],{},"或：",[77,147206,147208],{"className":24769,"code":147207,"language":24771,"meta":82,"style":82},"python3 hello.py\n",[84,147209,147210],{"__ignoreMap":82},[87,147211,147212,147214],{"class":89,"line":90},[87,147213,101805],{"class":205},[87,147215,147201],{"class":949},[19,147217,147218],{},"输出：",[77,147220,147223],{"className":147221,"code":147222,"language":599,"meta":82},[597],"Hello World\n你好，Python\n",[84,147224,147222],{"__ignoreMap":82},[14,147226,147228],{"id":147227},"_18-print函数","1.8 print函数",[19,147230,147231,147234],{},[84,147232,147233],{},"print()"," 用来输出内容。",[77,147236,147238],{"className":31325,"code":147237,"language":31327,"meta":82,"style":82},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[84,147239,147240,147250,147260,147270],{"__ignoreMap":82},[87,147241,147242,147244,147246,147248],{"class":89,"line":90},[87,147243,31362],{"class":104},[87,147245,165],{"class":97},[87,147247,6794],{"class":949},[87,147249,1108],{"class":97},[87,147251,147252,147254,147256,147258],{"class":89,"line":101},[87,147253,31362],{"class":104},[87,147255,165],{"class":97},[87,147257,536],{"class":104},[87,147259,1108],{"class":97},[87,147261,147262,147264,147266,147268],{"class":89,"line":120},[87,147263,31362],{"class":104},[87,147265,165],{"class":97},[87,147267,1149],{"class":104},[87,147269,1108],{"class":97},[87,147271,147272,147274,147276,147279,147281,147283],{"class":89,"line":222},[87,147273,31362],{"class":104},[87,147275,165],{"class":97},[87,147277,147278],{"class":949},"\"年龄:\"",[87,147280,13385],{"class":97},[87,147282,1743],{"class":104},[87,147284,1108],{"class":97},[19,147286,147287],{},"多个内容用逗号隔开，默认中间加空格：",[77,147289,147291],{"className":31325,"code":147290,"language":31327,"meta":82,"style":82},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[84,147292,147293,147303,147313],{"__ignoreMap":82},[87,147294,147295,147298,147300],{"class":89,"line":90},[87,147296,147297],{"class":97},"name ",[87,147299,946],{"class":171},[87,147301,147302],{"class":949}," \"张三\"\n",[87,147304,147305,147308,147310],{"class":89,"line":101},[87,147306,147307],{"class":97},"age ",[87,147309,946],{"class":171},[87,147311,147312],{"class":104}," 18\n",[87,147314,147315,147317,147319,147322,147325,147327],{"class":89,"line":120},[87,147316,31362],{"class":104},[87,147318,165],{"class":97},[87,147320,147321],{"class":949},"\"姓名:\"",[87,147323,147324],{"class":97},", name, ",[87,147326,147278],{"class":949},[87,147328,147329],{"class":97},", age)\n",[19,147331,147332],{},"修改分隔符：",[77,147334,147336],{"className":31325,"code":147335,"language":31327,"meta":82,"style":82},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[84,147337,147338],{"__ignoreMap":82},[87,147339,147340,147342,147344,147347,147349,147351,147353,147355,147357,147360,147362,147364],{"class":89,"line":90},[87,147341,31362],{"class":104},[87,147343,165],{"class":97},[87,147345,147346],{"class":949},"\"2024\"",[87,147348,13385],{"class":97},[87,147350,55252],{"class":949},[87,147352,13385],{"class":97},[87,147354,55252],{"class":949},[87,147356,13385],{"class":97},[87,147358,147359],{"class":492},"sep",[87,147361,946],{"class":171},[87,147363,33430],{"class":949},[87,147365,1108],{"class":97},[19,147367,147368],{},"修改结尾符：",[77,147370,147372],{"className":31325,"code":147371,"language":31327,"meta":82,"style":82},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[84,147373,147374,147392],{"__ignoreMap":82},[87,147375,147376,147378,147380,147382,147384,147386,147388,147390],{"class":89,"line":90},[87,147377,31362],{"class":104},[87,147379,165],{"class":97},[87,147381,6794],{"class":949},[87,147383,13385],{"class":97},[87,147385,46748],{"class":492},[87,147387,946],{"class":171},[87,147389,5312],{"class":949},[87,147391,1108],{"class":97},[87,147393,147394,147396,147398,147401],{"class":89,"line":101},[87,147395,31362],{"class":104},[87,147397,165],{"class":97},[87,147399,147400],{"class":949},"\"python\"",[87,147402,1108],{"class":97},[14,147404,147406],{"id":147405},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,147408,147409],{},"交互运行适合临时验证：",[77,147411,147413],{"className":31325,"code":147412,"language":31327,"meta":82,"style":82},">>> 10 * 3\n30\n",[84,147414,147415,147425],{"__ignoreMap":82},[87,147416,147417,147419,147421,147423],{"class":89,"line":90},[87,147418,146614],{"class":171},[87,147420,2993],{"class":104},[87,147422,7468],{"class":171},[87,147424,120962],{"class":104},[87,147426,147427],{"class":89,"line":101},[87,147428,147429],{"class":104},"30\n",[19,147431,147432],{},"脚本运行适合保存程序：",[77,147434,147436],{"className":31325,"code":147435,"language":31327,"meta":82,"style":82},"price = 8\ncount = 5\nprint(price * count)\n",[84,147437,147438,147448,147457],{"__ignoreMap":82},[87,147439,147440,147443,147445],{"class":89,"line":90},[87,147441,147442],{"class":97},"price ",[87,147444,946],{"class":171},[87,147446,147447],{"class":104}," 8\n",[87,147449,147450,147453,147455],{"class":89,"line":101},[87,147451,147452],{"class":97},"count ",[87,147454,946],{"class":171},[87,147456,55363],{"class":104},[87,147458,147459,147461,147464,147466],{"class":89,"line":120},[87,147460,31362],{"class":104},[87,147462,147463],{"class":97},"(price ",[87,147465,1549],{"class":171},[87,147467,147468],{"class":97}," count)\n",[19,147470,147471],{},"实际学习中推荐：",[1055,147473,147474,147477,147482],{},[29,147475,147476],{},"临时试一个语法，用交互模式。",[29,147478,147479,147480,126909],{},"写完整练习，用 ",[84,147481,147113],{},[29,147483,147484],{},"写项目，用独立目录和虚拟环境。",[14,147486,147488],{"id":147487},"_110-常见错误","1.10 常见错误",[44,147490,147492],{"id":147491},"_1101-命令找不到","1.10.1 命令找不到",[77,147494,147497],{"className":147495,"code":147496,"language":599,"meta":82},[597],"python: command not found\n",[84,147498,147496],{"__ignoreMap":82},[19,147500,147501],{},"原因：",[1055,147503,147504,147507,147510],{},[29,147505,147506],{},"没安装 Python。",[29,147508,147509],{},"PATH 没配置。",[29,147511,147512,147513,29332],{},"Linux\u002FmacOS 应该使用 ",[84,147514,101805],{},[44,147516,147518],{"id":147517},"_1102-文件名冲突","1.10.2 文件名冲突",[19,147520,147521],{},"不要把文件命名为：",[77,147523,147526],{"className":147524,"code":147525,"language":599,"meta":82},[597],"random.py\njson.py\ntime.py\nrequests.py\n",[84,147527,147525],{"__ignoreMap":82},[19,147529,147530],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[44,147532,147534],{"id":147533},"_1103-中文乱码","1.10.3 中文乱码",[19,147536,147537],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,147539,147540],{},"如果读写文件出现乱码，要明确指定编码：",[77,147542,147544],{"className":31325,"code":147543,"language":31327,"meta":82,"style":82},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[84,147545,147546,147580],{"__ignoreMap":82},[87,147547,147548,147550,147553,147555,147558,147560,147563,147565,147568,147570,147573,147575,147577],{"class":89,"line":90},[87,147549,108759],{"class":171},[87,147551,147552],{"class":104}," open",[87,147554,165],{"class":97},[87,147556,147557],{"class":949},"\"data.txt\"",[87,147559,13385],{"class":97},[87,147561,147562],{"class":949},"\"r\"",[87,147564,13385],{"class":97},[87,147566,147567],{"class":492},"encoding",[87,147569,946],{"class":171},[87,147571,147572],{"class":949},"\"utf-8\"",[87,147574,14664],{"class":97},[87,147576,32330],{"class":171},[87,147578,147579],{"class":97}," f:\n",[87,147581,147582,147585,147587],{"class":89,"line":101},[87,147583,147584],{"class":97},"    content ",[87,147586,946],{"class":171},[87,147588,147589],{"class":97}," f.read()\n",[14,147591,147593],{"id":147592},"_111-本章练习","1.11 本章练习",[1055,147595,147596,147599,147605],{},[29,147597,147598],{},"安装 Python，并在终端输出版本号。",[29,147600,147601,147602,147604],{},"新建 ",[84,147603,147159],{},"，输出自己的姓名、年龄、学习目标。",[29,147606,105292,147607,147609],{},[84,147608,147233],{}," 输出下面格式：",[77,147611,147614],{"className":147612,"code":147613,"language":599,"meta":82},[597],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[84,147615,147613],{"__ignoreMap":82},[1055,147617,147618],{"start":222},[29,147619,105292,147620,147622],{},[84,147621,147359],{}," 输出日期：",[77,147624,147627],{"className":147625,"code":147626,"language":599,"meta":82},[597],"2024-10-10\n",[84,147628,147626],{"__ignoreMap":82},[1055,147630,147631],{"start":234},[29,147632,105292,147633,147635,147636,147638],{},[84,147634,46748],{}," 让两次 ",[84,147637,147233],{}," 输出在同一行。",[1006,147640,147641],{},"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":82,"searchDepth":101,"depth":101,"links":147643},[147644,147645,147646,147651,147652,147653,147657,147658,147659,147660,147665],{"id":146526,"depth":101,"text":146527},{"id":146570,"depth":101,"text":146571},{"id":146671,"depth":101,"text":146672,"children":147647},[147648,147649,147650],{"id":146675,"depth":120,"text":146676},{"id":146730,"depth":120,"text":146731},{"id":146766,"depth":120,"text":146767},{"id":146839,"depth":101,"text":146840},{"id":146984,"depth":101,"text":146985},{"id":147089,"depth":101,"text":147090,"children":147654},[147655,147656],{"id":147093,"depth":120,"text":147094},{"id":147122,"depth":120,"text":147123},{"id":147152,"depth":101,"text":147153},{"id":147227,"depth":101,"text":147228},{"id":147405,"depth":101,"text":147406},{"id":147487,"depth":101,"text":147488,"children":147661},[147662,147663,147664],{"id":147491,"depth":120,"text":147492},{"id":147517,"depth":120,"text":147518},{"id":147533,"depth":120,"text":147534},{"id":147592,"depth":101,"text":147593},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146518,"description":1026},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147672,"title":147673,"body":147674,"description":1026,"extension":1027,"meta":150078,"navigation":1029,"path":150079,"seo":150080,"stem":150081,"__hash__":150082},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147675,"toc":150063},[147676,147679,147683,147686,147689,147706,147709,147751,147754,147758,147761,147764,147801,147804,147838,147841,147933,147937,147951,147954,147981,147984,147988,148091,148098,148101,148118,148122,148129,148318,148321,148394,148398,148401,148485,148488,148520,148524,148728,148731,148735,148741,148843,148846,149102,149106,149109,149112,149126,149128,149314,149318,149680,149686,149690,149693,149817,149820,149999,150002,150006,150039,150043,150060],[10,147677,147673],{"id":147678},"_10-json与pyecharts折线图",[14,147680,147682],{"id":147681},"_101-数据可视化","10.1 数据可视化",[19,147684,147685],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147687,147688],{},"常见图表：",[1055,147690,147691,147694,147697,147700,147703],{},[29,147692,147693],{},"折线图：看趋势。",[29,147695,147696],{},"柱状图：看分类对比。",[29,147698,147699],{},"饼图：看占比。",[29,147701,147702],{},"地图：看地域分布。",[29,147704,147705],{},"散点图：看两个变量之间的关系。",[19,147707,147708],{},"Python 可视化常用库：",[1235,147710,147711,147719],{},[1238,147712,147713],{},[1241,147714,147715,147717],{},[1244,147716,146922],{},[1244,147718,24687],{},[1281,147720,147721,147728,147736,147743],{},[1241,147722,147723,147725],{},[1286,147724,146954],{},[1286,147726,147727],{},"基础、经典、可定制",[1241,147729,147730,147733],{},[1286,147731,147732],{},"seaborn",[1286,147734,147735],{},"统计图表更美观",[1241,147737,147738,147740],{},[1286,147739,146962],{},[1286,147741,147742],{},"生成交互式网页图表",[1241,147744,147745,147748],{},[1286,147746,147747],{},"plotly",[1286,147749,147750],{},"交互图表能力强",[19,147752,147753],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147755,147757],{"id":147756},"_102-json回顾","10.2 JSON回顾",[19,147759,147760],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147762,147763],{},"Python 字典：",[77,147765,147767],{"className":31325,"code":147766,"language":31327,"meta":82,"style":82},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[84,147768,147769,147777,147788,147797],{"__ignoreMap":82},[87,147770,147771,147773,147775],{"class":89,"line":90},[87,147772,102584],{"class":97},[87,147774,946],{"class":171},[87,147776,98],{"class":97},[87,147778,147779,147782,147784,147786],{"class":89,"line":101},[87,147780,147781],{"class":949},"    \"name\"",[87,147783,108],{"class":97},[87,147785,70201],{"class":949},[87,147787,32413],{"class":97},[87,147789,147790,147793,147795],{"class":89,"line":120},[87,147791,147792],{"class":949},"    \"value\"",[87,147794,108],{"class":97},[87,147796,98384],{"class":104},[87,147798,147799],{"class":89,"line":222},[87,147800,123],{"class":97},[19,147802,147803],{},"JSON 字符串：",[77,147805,147808],{"className":147806,"code":147807,"language":146553,"meta":82,"style":82},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[84,147809,147810,147814,147825,147834],{"__ignoreMap":82},[87,147811,147812],{"class":89,"line":90},[87,147813,2503],{"class":97},[87,147815,147816,147819,147821,147823],{"class":89,"line":101},[87,147817,147818],{"class":104},"  \"name\"",[87,147820,108],{"class":97},[87,147822,70201],{"class":949},[87,147824,32413],{"class":97},[87,147826,147827,147830,147832],{"class":89,"line":120},[87,147828,147829],{"class":104},"  \"value\"",[87,147831,108],{"class":97},[87,147833,98384],{"class":104},[87,147835,147836],{"class":89,"line":222},[87,147837,123],{"class":97},[19,147839,147840],{},"Python 与 JSON 的转换：",[77,147842,147844],{"className":31325,"code":147843,"language":31327,"meta":82,"style":82},"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",[84,147845,147846,147853,147857,147882,147886,147905,147912,147916,147926],{"__ignoreMap":82},[87,147847,147848,147850],{"class":89,"line":90},[87,147849,31339],{"class":171},[87,147851,147852],{"class":97}," json\n",[87,147854,147855],{"class":89,"line":101},[87,147856,3355],{"emptyLinePlaceholder":1029},[87,147858,147859,147861,147863,147865,147867,147869,147871,147873,147876,147878,147880],{"class":89,"line":120},[87,147860,102584],{"class":97},[87,147862,946],{"class":171},[87,147864,5401],{"class":97},[87,147866,63613],{"class":949},[87,147868,108],{"class":97},[87,147870,70201],{"class":949},[87,147872,13385],{"class":97},[87,147874,147875],{"class":949},"\"value\"",[87,147877,108],{"class":97},[87,147879,536],{"class":104},[87,147881,123],{"class":97},[87,147883,147884],{"class":89,"line":222},[87,147885,3355],{"emptyLinePlaceholder":1029},[87,147887,147888,147891,147893,147896,147899,147901,147903],{"class":89,"line":234},[87,147889,147890],{"class":97},"json_text ",[87,147892,946],{"class":171},[87,147894,147895],{"class":97}," json.dumps(data, ",[87,147897,147898],{"class":492},"ensure_ascii",[87,147900,946],{"class":171},[87,147902,34934],{"class":104},[87,147904,1108],{"class":97},[87,147906,147907,147909],{"class":89,"line":256},[87,147908,31362],{"class":104},[87,147910,147911],{"class":97},"(json_text)\n",[87,147913,147914],{"class":89,"line":269},[87,147915,3355],{"emptyLinePlaceholder":1029},[87,147917,147918,147921,147923],{"class":89,"line":463},[87,147919,147920],{"class":97},"new_data ",[87,147922,946],{"class":171},[87,147924,147925],{"class":97}," json.loads(json_text)\n",[87,147927,147928,147930],{"class":89,"line":469},[87,147929,31362],{"class":104},[87,147931,147932],{"class":97},"(new_data)\n",[14,147934,147936],{"id":147935},"_103-安装pyecharts","10.3 安装pyecharts",[77,147938,147940],{"className":24769,"code":147939,"language":24771,"meta":82,"style":82},"pip install pyecharts\n",[84,147941,147942],{"__ignoreMap":82},[87,147943,147944,147946,147948],{"class":89,"line":90},[87,147945,24778],{"class":205},[87,147947,24781],{"class":949},[87,147949,147950],{"class":949}," pyecharts\n",[19,147952,147953],{},"验证：",[77,147955,147957],{"className":31325,"code":147956,"language":31327,"meta":82,"style":82},"import pyecharts\n\nprint(pyecharts.__version__)\n",[84,147958,147959,147965,147969],{"__ignoreMap":82},[87,147960,147961,147963],{"class":89,"line":90},[87,147962,31339],{"class":171},[87,147964,147950],{"class":97},[87,147966,147967],{"class":89,"line":101},[87,147968,3355],{"emptyLinePlaceholder":1029},[87,147970,147971,147973,147976,147979],{"class":89,"line":120},[87,147972,31362],{"class":104},[87,147974,147975],{"class":97},"(pyecharts.",[87,147977,147978],{"class":104},"__version__",[87,147980,1108],{"class":97},[19,147982,147983],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147985,147987],{"id":147986},"_104-第一个折线图","10.4 第一个折线图",[77,147989,147991],{"className":31325,"code":147990,"language":31327,"meta":82,"style":82},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[84,147992,147993,148005,148009,148019,148049,148081],{"__ignoreMap":82},[87,147994,147995,147997,148000,148002],{"class":89,"line":90},[87,147996,31684],{"class":171},[87,147998,147999],{"class":97}," pyecharts.charts ",[87,148001,31339],{"class":171},[87,148003,148004],{"class":97}," Line\n",[87,148006,148007],{"class":89,"line":101},[87,148008,3355],{"emptyLinePlaceholder":1029},[87,148010,148011,148014,148016],{"class":89,"line":120},[87,148012,148013],{"class":97},"line ",[87,148015,946],{"class":171},[87,148017,148018],{"class":97}," Line()\n",[87,148020,148021,148024,148027,148029,148032,148034,148037,148039,148042,148044,148047],{"class":89,"line":222},[87,148022,148023],{"class":97},"line.add_xaxis([",[87,148025,148026],{"class":949},"\"周一\"",[87,148028,13385],{"class":97},[87,148030,148031],{"class":949},"\"周二\"",[87,148033,13385],{"class":97},[87,148035,148036],{"class":949},"\"周三\"",[87,148038,13385],{"class":97},[87,148040,148041],{"class":949},"\"周四\"",[87,148043,13385],{"class":97},[87,148045,148046],{"class":949},"\"周五\"",[87,148048,5610],{"class":97},[87,148050,148051,148054,148057,148059,148061,148063,148065,148067,148069,148071,148074,148076,148079],{"class":89,"line":234},[87,148052,148053],{"class":97},"line.add_yaxis(",[87,148055,148056],{"class":949},"\"销售额\"",[87,148058,78446],{"class":97},[87,148060,536],{"class":104},[87,148062,13385],{"class":97},[87,148064,1909],{"class":104},[87,148066,13385],{"class":97},[87,148068,1954],{"class":104},[87,148070,13385],{"class":97},[87,148072,148073],{"class":104},"150",[87,148075,13385],{"class":97},[87,148077,148078],{"class":104},"180",[87,148080,5610],{"class":97},[87,148082,148083,148086,148089],{"class":89,"line":256},[87,148084,148085],{"class":97},"line.render(",[87,148087,148088],{"class":949},"\"line.html\"",[87,148090,1108],{"class":97},[19,148092,148093,148094,148097],{},"运行后会生成 ",[84,148095,148096],{},"line.html","，用浏览器打开即可看到图表。",[19,148099,148100],{},"核心步骤：",[1055,148102,148103,148106,148109,148112,148115],{},[29,148104,148105],{},"导入图表类。",[29,148107,148108],{},"创建图表对象。",[29,148110,148111],{},"添加 x 轴数据。",[29,148113,148114],{},"添加 y 轴数据。",[29,148116,148117],{},"渲染为 HTML。",[14,148119,148121],{"id":148120},"_105-全局配置","10.5 全局配置",[19,148123,148124,148125,148128],{},"常用配置在 ",[84,148126,148127],{},"pyecharts.options"," 中。",[77,148130,148132],{"className":31325,"code":148131,"language":31327,"meta":82,"style":82},"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",[84,148133,148134,148151,148161,148165,148173,148197,148225,148230,148249,148268,148286,148306,148310],{"__ignoreMap":82},[87,148135,148136,148138,148141,148143,148146,148148],{"class":89,"line":90},[87,148137,31684],{"class":171},[87,148139,148140],{"class":97}," pyecharts ",[87,148142,31339],{"class":171},[87,148144,148145],{"class":97}," options ",[87,148147,32330],{"class":171},[87,148149,148150],{"class":97}," opts\n",[87,148152,148153,148155,148157,148159],{"class":89,"line":101},[87,148154,31684],{"class":171},[87,148156,147999],{"class":97},[87,148158,31339],{"class":171},[87,148160,148004],{"class":97},[87,148162,148163],{"class":89,"line":120},[87,148164,3355],{"emptyLinePlaceholder":1029},[87,148166,148167,148169,148171],{"class":89,"line":222},[87,148168,148013],{"class":97},[87,148170,946],{"class":171},[87,148172,148018],{"class":97},[87,148174,148175,148177,148179,148181,148183,148185,148187,148189,148191,148193,148195],{"class":89,"line":234},[87,148176,148023],{"class":97},[87,148178,148026],{"class":949},[87,148180,13385],{"class":97},[87,148182,148031],{"class":949},[87,148184,13385],{"class":97},[87,148186,148036],{"class":949},[87,148188,13385],{"class":97},[87,148190,148041],{"class":949},[87,148192,13385],{"class":97},[87,148194,148046],{"class":949},[87,148196,5610],{"class":97},[87,148198,148199,148201,148203,148205,148207,148209,148211,148213,148215,148217,148219,148221,148223],{"class":89,"line":256},[87,148200,148053],{"class":97},[87,148202,148056],{"class":949},[87,148204,78446],{"class":97},[87,148206,536],{"class":104},[87,148208,13385],{"class":97},[87,148210,1909],{"class":104},[87,148212,13385],{"class":97},[87,148214,1954],{"class":104},[87,148216,13385],{"class":97},[87,148218,148073],{"class":104},[87,148220,13385],{"class":97},[87,148222,148078],{"class":104},[87,148224,5610],{"class":97},[87,148226,148227],{"class":89,"line":269},[87,148228,148229],{"class":97},"line.set_global_opts(\n",[87,148231,148232,148235,148237,148240,148242,148244,148247],{"class":89,"line":463},[87,148233,148234],{"class":492},"    title_opts",[87,148236,946],{"class":171},[87,148238,148239],{"class":97},"opts.TitleOpts(",[87,148241,52351],{"class":492},[87,148243,946],{"class":171},[87,148245,148246],{"class":949},"\"一周销售额\"",[87,148248,38994],{"class":97},[87,148250,148251,148254,148256,148259,148261,148263,148266],{"class":89,"line":469},[87,148252,148253],{"class":492},"    xaxis_opts",[87,148255,946],{"class":171},[87,148257,148258],{"class":97},"opts.AxisOpts(",[87,148260,80736],{"class":492},[87,148262,946],{"class":171},[87,148264,148265],{"class":949},"\"日期\"",[87,148267,38994],{"class":97},[87,148269,148270,148273,148275,148277,148279,148281,148284],{"class":89,"line":2287},[87,148271,148272],{"class":492},"    yaxis_opts",[87,148274,946],{"class":171},[87,148276,148258],{"class":97},[87,148278,80736],{"class":492},[87,148280,946],{"class":171},[87,148282,148283],{"class":949},"\"金额\"",[87,148285,38994],{"class":97},[87,148287,148288,148291,148293,148296,148299,148301,148304],{"class":89,"line":2568},[87,148289,148290],{"class":492},"    tooltip_opts",[87,148292,946],{"class":171},[87,148294,148295],{"class":97},"opts.TooltipOpts(",[87,148297,148298],{"class":492},"trigger",[87,148300,946],{"class":171},[87,148302,148303],{"class":949},"\"axis\"",[87,148305,38994],{"class":97},[87,148307,148308],{"class":89,"line":2573},[87,148309,1108],{"class":97},[87,148311,148312,148314,148316],{"class":89,"line":2579},[87,148313,148085],{"class":97},[87,148315,148088],{"class":949},[87,148317,1108],{"class":97},[19,148319,148320],{},"常见全局配置：",[1235,148322,148323,148332],{},[1238,148324,148325],{},[1241,148326,148327,148330],{},[1244,148328,148329],{},"配置",[1244,148331,103622],{},[1281,148333,148334,148344,148354,148364,148374,148384],{},[1241,148335,148336,148341],{},[1286,148337,148338],{},[84,148339,148340],{},"TitleOpts",[1286,148342,148343],{},"标题",[1241,148345,148346,148351],{},[1286,148347,148348],{},[84,148349,148350],{},"LegendOpts",[1286,148352,148353],{},"图例",[1241,148355,148356,148361],{},[1286,148357,148358],{},[84,148359,148360],{},"TooltipOpts",[1286,148362,148363],{},"提示框",[1241,148365,148366,148371],{},[1286,148367,148368],{},[84,148369,148370],{},"AxisOpts",[1286,148372,148373],{},"坐标轴",[1241,148375,148376,148381],{},[1286,148377,148378],{},[84,148379,148380],{},"VisualMapOpts",[1286,148382,148383],{},"视觉映射",[1241,148385,148386,148391],{},[1286,148387,148388],{},[84,148389,148390],{},"DataZoomOpts",[1286,148392,148393],{},"区域缩放",[14,148395,148397],{"id":148396},"_106-系列配置","10.6 系列配置",[19,148399,148400],{},"系列配置作用于某一组数据。",[77,148402,148404],{"className":31325,"code":148403,"language":31327,"meta":82,"style":82},"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",[84,148405,148406,148411,148422,148451,148462,148481],{"__ignoreMap":82},[87,148407,148408],{"class":89,"line":90},[87,148409,148410],{"class":97},"line.add_yaxis(\n",[87,148412,148413,148416,148418,148420],{"class":89,"line":101},[87,148414,148415],{"class":492},"    series_name",[87,148417,946],{"class":171},[87,148419,148056],{"class":949},[87,148421,32413],{"class":97},[87,148423,148424,148427,148429,148431,148433,148435,148437,148439,148441,148443,148445,148447,148449],{"class":89,"line":120},[87,148425,148426],{"class":492},"    y_axis",[87,148428,946],{"class":171},[87,148430,1982],{"class":97},[87,148432,536],{"class":104},[87,148434,13385],{"class":97},[87,148436,1909],{"class":104},[87,148438,13385],{"class":97},[87,148440,1954],{"class":104},[87,148442,13385],{"class":97},[87,148444,148073],{"class":104},[87,148446,13385],{"class":97},[87,148448,148078],{"class":104},[87,148450,88762],{"class":97},[87,148452,148453,148456,148458,148460],{"class":89,"line":222},[87,148454,148455],{"class":492},"    is_smooth",[87,148457,946],{"class":171},[87,148459,32423],{"class":104},[87,148461,32413],{"class":97},[87,148463,148464,148467,148469,148472,148475,148477,148479],{"class":89,"line":234},[87,148465,148466],{"class":492},"    label_opts",[87,148468,946],{"class":171},[87,148470,148471],{"class":97},"opts.LabelOpts(",[87,148473,148474],{"class":492},"is_show",[87,148476,946],{"class":171},[87,148478,32423],{"class":104},[87,148480,38994],{"class":97},[87,148482,148483],{"class":89,"line":256},[87,148484,1108],{"class":97},[19,148486,148487],{},"常用参数：",[1055,148489,148490,148496,148502,148508,148514],{},[29,148491,148492,148495],{},[84,148493,148494],{},"series_name","：系列名称。",[29,148497,148498,148501],{},[84,148499,148500],{},"y_axis","：y 轴数据。",[29,148503,148504,148507],{},[84,148505,148506],{},"is_smooth","：是否平滑曲线。",[29,148509,148510,148513],{},[84,148511,148512],{},"label_opts","：标签配置。",[29,148515,148516,148519],{},[84,148517,148518],{},"symbol_size","：标记点大小。",[14,148521,148523],{"id":148522},"_107-多条折线","10.7 多条折线",[77,148525,148527],{"className":31325,"code":148526,"language":31327,"meta":82,"style":82},"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",[84,148528,148529,148543,148553,148557,148586,148590,148598,148603,148641,148678,148682,148699,148715,148719],{"__ignoreMap":82},[87,148530,148531,148533,148535,148537,148539,148541],{"class":89,"line":90},[87,148532,31684],{"class":171},[87,148534,148140],{"class":97},[87,148536,31339],{"class":171},[87,148538,148145],{"class":97},[87,148540,32330],{"class":171},[87,148542,148150],{"class":97},[87,148544,148545,148547,148549,148551],{"class":89,"line":101},[87,148546,31684],{"class":171},[87,148548,147999],{"class":97},[87,148550,31339],{"class":171},[87,148552,148004],{"class":97},[87,148554,148555],{"class":89,"line":120},[87,148556,3355],{"emptyLinePlaceholder":1029},[87,148558,148559,148562,148564,148566,148568,148570,148572,148574,148576,148578,148580,148582,148584],{"class":89,"line":222},[87,148560,148561],{"class":97},"dates ",[87,148563,946],{"class":171},[87,148565,53163],{"class":97},[87,148567,148026],{"class":949},[87,148569,13385],{"class":97},[87,148571,148031],{"class":949},[87,148573,13385],{"class":97},[87,148575,148036],{"class":949},[87,148577,13385],{"class":97},[87,148579,148041],{"class":949},[87,148581,13385],{"class":97},[87,148583,148046],{"class":949},[87,148585,34193],{"class":97},[87,148587,148588],{"class":89,"line":234},[87,148589,3355],{"emptyLinePlaceholder":1029},[87,148591,148592,148594,148596],{"class":89,"line":256},[87,148593,148013],{"class":97},[87,148595,946],{"class":171},[87,148597,148018],{"class":97},[87,148599,148600],{"class":89,"line":269},[87,148601,148602],{"class":97},"line.add_xaxis(dates)\n",[87,148604,148605,148607,148610,148612,148614,148616,148619,148621,148623,148625,148627,148629,148631,148633,148635,148637,148639],{"class":89,"line":463},[87,148606,148053],{"class":97},[87,148608,148609],{"class":949},"\"线上销售\"",[87,148611,78446],{"class":97},[87,148613,536],{"class":104},[87,148615,13385],{"class":97},[87,148617,148618],{"class":104},"130",[87,148620,13385],{"class":97},[87,148622,1909],{"class":104},[87,148624,13385],{"class":97},[87,148626,21996],{"class":104},[87,148628,13385],{"class":97},[87,148630,2678],{"class":104},[87,148632,113128],{"class":97},[87,148634,148506],{"class":492},[87,148636,946],{"class":171},[87,148638,32423],{"class":104},[87,148640,1108],{"class":97},[87,148642,148643,148645,148648,148650,148652,148654,148656,148658,148660,148662,148664,148666,148668,148670,148672,148674,148676],{"class":89,"line":469},[87,148644,148053],{"class":97},[87,148646,148647],{"class":949},"\"线下销售\"",[87,148649,78446],{"class":97},[87,148651,1705],{"class":104},[87,148653,13385],{"class":97},[87,148655,1954],{"class":104},[87,148657,13385],{"class":97},[87,148659,536],{"class":104},[87,148661,13385],{"class":97},[87,148663,1909],{"class":104},[87,148665,13385],{"class":97},[87,148667,148073],{"class":104},[87,148669,113128],{"class":97},[87,148671,148506],{"class":492},[87,148673,946],{"class":171},[87,148675,32423],{"class":104},[87,148677,1108],{"class":97},[87,148679,148680],{"class":89,"line":2287},[87,148681,148229],{"class":97},[87,148683,148684,148686,148688,148690,148692,148694,148697],{"class":89,"line":2568},[87,148685,148234],{"class":492},[87,148687,946],{"class":171},[87,148689,148239],{"class":97},[87,148691,52351],{"class":492},[87,148693,946],{"class":171},[87,148695,148696],{"class":949},"\"线上线下销售趋势\"",[87,148698,38994],{"class":97},[87,148700,148701,148703,148705,148707,148709,148711,148713],{"class":89,"line":2573},[87,148702,148290],{"class":492},[87,148704,946],{"class":171},[87,148706,148295],{"class":97},[87,148708,148298],{"class":492},[87,148710,946],{"class":171},[87,148712,148303],{"class":949},[87,148714,38994],{"class":97},[87,148716,148717],{"class":89,"line":2579},[87,148718,1108],{"class":97},[87,148720,148721,148723,148726],{"class":89,"line":2584},[87,148722,148085],{"class":97},[87,148724,148725],{"class":949},"\"sales.html\"",[87,148727,1108],{"class":97},[19,148729,148730],{},"多条折线适合比较不同指标或不同地区。",[14,148732,148734],{"id":148733},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148736,148737,148738,25566],{},"假设 ",[84,148739,148740],{},"sales.json",[77,148742,148744],{"className":147806,"code":148743,"language":146553,"meta":82,"style":82},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[84,148745,148746,148751,148783,148811,148839],{"__ignoreMap":82},[87,148747,148748],{"class":89,"line":90},[87,148749,148750],{"class":97},"[\n",[87,148752,148753,148756,148759,148761,148763,148765,148768,148770,148772,148774,148777,148779,148781],{"class":89,"line":101},[87,148754,148755],{"class":97},"  {",[87,148757,148758],{"class":104},"\"date\"",[87,148760,108],{"class":97},[87,148762,148026],{"class":949},[87,148764,13385],{"class":97},[87,148766,148767],{"class":104},"\"online\"",[87,148769,108],{"class":97},[87,148771,536],{"class":104},[87,148773,13385],{"class":97},[87,148775,148776],{"class":104},"\"offline\"",[87,148778,108],{"class":97},[87,148780,1705],{"class":104},[87,148782,5883],{"class":97},[87,148784,148785,148787,148789,148791,148793,148795,148797,148799,148801,148803,148805,148807,148809],{"class":89,"line":120},[87,148786,148755],{"class":97},[87,148788,148758],{"class":104},[87,148790,108],{"class":97},[87,148792,148031],{"class":949},[87,148794,13385],{"class":97},[87,148796,148767],{"class":104},[87,148798,108],{"class":97},[87,148800,148618],{"class":104},[87,148802,13385],{"class":97},[87,148804,148776],{"class":104},[87,148806,108],{"class":97},[87,148808,1954],{"class":104},[87,148810,5883],{"class":97},[87,148812,148813,148815,148817,148819,148821,148823,148825,148827,148829,148831,148833,148835,148837],{"class":89,"line":222},[87,148814,148755],{"class":97},[87,148816,148758],{"class":104},[87,148818,108],{"class":97},[87,148820,148036],{"class":949},[87,148822,13385],{"class":97},[87,148824,148767],{"class":104},[87,148826,108],{"class":97},[87,148828,1909],{"class":104},[87,148830,13385],{"class":97},[87,148832,148776],{"class":104},[87,148834,108],{"class":97},[87,148836,536],{"class":104},[87,148838,123],{"class":97},[87,148840,148841],{"class":89,"line":234},[87,148842,34193],{"class":97},[19,148844,148845],{},"读取并绘图：",[77,148847,148849],{"className":31325,"code":148848,"language":31327,"meta":82,"style":82},"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",[84,148850,148851,148857,148871,148881,148885,148917,148930,148934,148942,148951,148960,148964,148976,148985,148994,149003,149007,149015,149019,149036,149053,149057,149074,149090,149094],{"__ignoreMap":82},[87,148852,148853,148855],{"class":89,"line":90},[87,148854,31339],{"class":171},[87,148856,147852],{"class":97},[87,148858,148859,148861,148863,148865,148867,148869],{"class":89,"line":101},[87,148860,31684],{"class":171},[87,148862,148140],{"class":97},[87,148864,31339],{"class":171},[87,148866,148145],{"class":97},[87,148868,32330],{"class":171},[87,148870,148150],{"class":97},[87,148872,148873,148875,148877,148879],{"class":89,"line":120},[87,148874,31684],{"class":171},[87,148876,147999],{"class":97},[87,148878,31339],{"class":171},[87,148880,148004],{"class":97},[87,148882,148883],{"class":89,"line":222},[87,148884,3355],{"emptyLinePlaceholder":1029},[87,148886,148887,148889,148891,148893,148896,148898,148900,148902,148904,148906,148908,148910,148912,148915],{"class":89,"line":234},[87,148888,108759],{"class":171},[87,148890,147552],{"class":104},[87,148892,165],{"class":97},[87,148894,148895],{"class":949},"\"sales.json\"",[87,148897,13385],{"class":97},[87,148899,147562],{"class":949},[87,148901,13385],{"class":97},[87,148903,147567],{"class":492},[87,148905,946],{"class":171},[87,148907,147572],{"class":949},[87,148909,14664],{"class":97},[87,148911,32330],{"class":171},[87,148913,148914],{"class":492}," file",[87,148916,4693],{"class":97},[87,148918,148919,148921,148923,148926,148928],{"class":89,"line":256},[87,148920,102347],{"class":97},[87,148922,946],{"class":171},[87,148924,148925],{"class":97}," json.load(",[87,148927,46301],{"class":492},[87,148929,1108],{"class":97},[87,148931,148932],{"class":89,"line":269},[87,148933,3355],{"emptyLinePlaceholder":1029},[87,148935,148936,148938,148940],{"class":89,"line":463},[87,148937,148561],{"class":97},[87,148939,946],{"class":171},[87,148941,52775],{"class":97},[87,148943,148944,148947,148949],{"class":89,"line":469},[87,148945,148946],{"class":97},"online_sales ",[87,148948,946],{"class":171},[87,148950,52775],{"class":97},[87,148952,148953,148956,148958],{"class":89,"line":2287},[87,148954,148955],{"class":97},"offline_sales ",[87,148957,946],{"class":171},[87,148959,52775],{"class":97},[87,148961,148962],{"class":89,"line":2568},[87,148963,3355],{"emptyLinePlaceholder":1029},[87,148965,148966,148968,148971,148973],{"class":89,"line":2573},[87,148967,3979],{"class":171},[87,148969,148970],{"class":97}," item ",[87,148972,26990],{"class":171},[87,148974,148975],{"class":97}," data:\n",[87,148977,148978,148981,148983],{"class":89,"line":2579},[87,148979,148980],{"class":97},"    dates.append(item[",[87,148982,148758],{"class":949},[87,148984,5610],{"class":97},[87,148986,148987,148990,148992],{"class":89,"line":2584},[87,148988,148989],{"class":97},"    online_sales.append(item[",[87,148991,148767],{"class":949},[87,148993,5610],{"class":97},[87,148995,148996,148999,149001],{"class":89,"line":2598},[87,148997,148998],{"class":97},"    offline_sales.append(item[",[87,149000,148776],{"class":949},[87,149002,5610],{"class":97},[87,149004,149005],{"class":89,"line":2603},[87,149006,3355],{"emptyLinePlaceholder":1029},[87,149008,149009,149011,149013],{"class":89,"line":2609},[87,149010,148013],{"class":97},[87,149012,946],{"class":171},[87,149014,148018],{"class":97},[87,149016,149017],{"class":89,"line":2630},[87,149018,148602],{"class":97},[87,149020,149021,149023,149025,149028,149030,149032,149034],{"class":89,"line":2635},[87,149022,148053],{"class":97},[87,149024,148609],{"class":949},[87,149026,149027],{"class":97},", online_sales, ",[87,149029,148506],{"class":492},[87,149031,946],{"class":171},[87,149033,32423],{"class":104},[87,149035,1108],{"class":97},[87,149037,149038,149040,149042,149045,149047,149049,149051],{"class":89,"line":2649},[87,149039,148053],{"class":97},[87,149041,148647],{"class":949},[87,149043,149044],{"class":97},", offline_sales, ",[87,149046,148506],{"class":492},[87,149048,946],{"class":171},[87,149050,32423],{"class":104},[87,149052,1108],{"class":97},[87,149054,149055],{"class":89,"line":2654},[87,149056,148229],{"class":97},[87,149058,149059,149061,149063,149065,149067,149069,149072],{"class":89,"line":2683},[87,149060,148234],{"class":492},[87,149062,946],{"class":171},[87,149064,148239],{"class":97},[87,149066,52351],{"class":492},[87,149068,946],{"class":171},[87,149070,149071],{"class":949},"\"销售趋势\"",[87,149073,38994],{"class":97},[87,149075,149076,149078,149080,149082,149084,149086,149088],{"class":89,"line":2688},[87,149077,148290],{"class":492},[87,149079,946],{"class":171},[87,149081,148295],{"class":97},[87,149083,148298],{"class":492},[87,149085,946],{"class":171},[87,149087,148303],{"class":949},[87,149089,38994],{"class":97},[87,149091,149092],{"class":89,"line":2705},[87,149093,1108],{"class":97},[87,149095,149096,149098,149100],{"class":89,"line":2710},[87,149097,148085],{"class":97},[87,149099,148725],{"class":949},[87,149101,1108],{"class":97},[14,149103,149105],{"id":149104},"_109-数据清洗","10.9 数据清洗",[19,149107,149108],{},"真实数据经常不整齐，需要清洗。",[19,149110,149111],{},"常见问题：",[1055,149113,149114,149117,149120,149123],{},[29,149115,149116],{},"数字是字符串。",[29,149118,149119],{},"字段缺失。",[29,149121,149122],{},"空值。",[29,149124,149125],{},"日期格式不统一。",[19,149127,16085],{},[77,149129,149131],{"className":31325,"code":149130,"language":31327,"meta":82,"style":82},"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",[84,149132,149133,149142,149165,149185,149206,149210,149214,149222,149231,149235,149246,149260,149269,149274,149278,149286,149296,149300,149307],{"__ignoreMap":82},[87,149134,149135,149138,149140],{"class":89,"line":90},[87,149136,149137],{"class":97},"raw_data ",[87,149139,946],{"class":171},[87,149141,56383],{"class":97},[87,149143,149144,149147,149149,149151,149153,149155,149158,149160,149163],{"class":89,"line":101},[87,149145,149146],{"class":97},"    {",[87,149148,148758],{"class":949},[87,149150,108],{"class":97},[87,149152,148026],{"class":949},[87,149154,13385],{"class":97},[87,149156,149157],{"class":949},"\"sales\"",[87,149159,108],{"class":97},[87,149161,149162],{"class":949},"\"100\"",[87,149164,5883],{"class":97},[87,149166,149167,149169,149171,149173,149175,149177,149179,149181,149183],{"class":89,"line":120},[87,149168,149146],{"class":97},[87,149170,148758],{"class":949},[87,149172,108],{"class":97},[87,149174,148031],{"class":949},[87,149176,13385],{"class":97},[87,149178,149157],{"class":949},[87,149180,108],{"class":97},[87,149182,8602],{"class":949},[87,149184,5883],{"class":97},[87,149186,149187,149189,149191,149193,149195,149197,149199,149201,149204],{"class":89,"line":222},[87,149188,149146],{"class":97},[87,149190,148758],{"class":949},[87,149192,108],{"class":97},[87,149194,148036],{"class":949},[87,149196,13385],{"class":97},[87,149198,149157],{"class":949},[87,149200,108],{"class":97},[87,149202,149203],{"class":949},"\"120\"",[87,149205,5883],{"class":97},[87,149207,149208],{"class":89,"line":234},[87,149209,34193],{"class":97},[87,149211,149212],{"class":89,"line":256},[87,149213,3355],{"emptyLinePlaceholder":1029},[87,149215,149216,149218,149220],{"class":89,"line":269},[87,149217,148561],{"class":97},[87,149219,946],{"class":171},[87,149221,52775],{"class":97},[87,149223,149224,149227,149229],{"class":89,"line":463},[87,149225,149226],{"class":97},"sales ",[87,149228,946],{"class":171},[87,149230,52775],{"class":97},[87,149232,149233],{"class":89,"line":469},[87,149234,3355],{"emptyLinePlaceholder":1029},[87,149236,149237,149239,149241,149243],{"class":89,"line":2287},[87,149238,3979],{"class":171},[87,149240,148970],{"class":97},[87,149242,26990],{"class":171},[87,149244,149245],{"class":97}," raw_data:\n",[87,149247,149248,149251,149253,149256,149258],{"class":89,"line":2568},[87,149249,149250],{"class":97},"    value ",[87,149252,946],{"class":171},[87,149254,149255],{"class":97}," item.get(",[87,149257,149157],{"class":949},[87,149259,1108],{"class":97},[87,149261,149262,149264,149266],{"class":89,"line":2573},[87,149263,4055],{"class":171},[87,149265,39877],{"class":171},[87,149267,149268],{"class":97}," value:\n",[87,149270,149271],{"class":89,"line":2579},[87,149272,149273],{"class":171},"        continue\n",[87,149275,149276],{"class":89,"line":2584},[87,149277,3355],{"emptyLinePlaceholder":1029},[87,149279,149280,149282,149284],{"class":89,"line":2598},[87,149281,148980],{"class":97},[87,149283,148758],{"class":949},[87,149285,5610],{"class":97},[87,149287,149288,149291,149293],{"class":89,"line":2603},[87,149289,149290],{"class":97},"    sales.append(",[87,149292,1105],{"class":104},[87,149294,149295],{"class":97},"(value))\n",[87,149297,149298],{"class":89,"line":2609},[87,149299,3355],{"emptyLinePlaceholder":1029},[87,149301,149302,149304],{"class":89,"line":2630},[87,149303,31362],{"class":104},[87,149305,149306],{"class":97},"(dates)\n",[87,149308,149309,149311],{"class":89,"line":2635},[87,149310,31362],{"class":104},[87,149312,149313],{"class":97},"(sales)\n",[14,149315,149317],{"id":149316},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[77,149319,149321],{"className":31325,"code":149320,"language":31327,"meta":82,"style":82},"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",[84,149322,149323,149337,149347,149351,149359,149380,149402,149424,149446,149468,149472,149476,149498,149519,149523,149531,149535,149539,149549,149558,149568,149584,149588,149592,149609,149625,149641,149657,149667,149671],{"__ignoreMap":82},[87,149324,149325,149327,149329,149331,149333,149335],{"class":89,"line":90},[87,149326,31684],{"class":171},[87,149328,148140],{"class":97},[87,149330,31339],{"class":171},[87,149332,148145],{"class":97},[87,149334,32330],{"class":171},[87,149336,148150],{"class":97},[87,149338,149339,149341,149343,149345],{"class":89,"line":101},[87,149340,31684],{"class":171},[87,149342,147999],{"class":97},[87,149344,31339],{"class":171},[87,149346,148004],{"class":97},[87,149348,149349],{"class":89,"line":120},[87,149350,3355],{"emptyLinePlaceholder":1029},[87,149352,149353,149355,149357],{"class":89,"line":222},[87,149354,149226],{"class":97},[87,149356,946],{"class":171},[87,149358,56383],{"class":97},[87,149360,149361,149363,149365,149367,149370,149372,149374,149376,149378],{"class":89,"line":234},[87,149362,149146],{"class":97},[87,149364,148758],{"class":949},[87,149366,108],{"class":97},[87,149368,149369],{"class":949},"\"2024-10-01\"",[87,149371,13385],{"class":97},[87,149373,85010],{"class":949},[87,149375,108],{"class":97},[87,149377,92949],{"class":104},[87,149379,5883],{"class":97},[87,149381,149382,149384,149386,149388,149391,149393,149395,149397,149400],{"class":89,"line":256},[87,149383,149146],{"class":97},[87,149385,148758],{"class":949},[87,149387,108],{"class":97},[87,149389,149390],{"class":949},"\"2024-10-02\"",[87,149392,13385],{"class":97},[87,149394,85010],{"class":949},[87,149396,108],{"class":97},[87,149398,149399],{"class":104},"1800",[87,149401,5883],{"class":97},[87,149403,149404,149406,149408,149410,149413,149415,149417,149419,149422],{"class":89,"line":269},[87,149405,149146],{"class":97},[87,149407,148758],{"class":949},[87,149409,108],{"class":97},[87,149411,149412],{"class":949},"\"2024-10-03\"",[87,149414,13385],{"class":97},[87,149416,85010],{"class":949},[87,149418,108],{"class":97},[87,149420,149421],{"class":104},"1500",[87,149423,5883],{"class":97},[87,149425,149426,149428,149430,149432,149435,149437,149439,149441,149444],{"class":89,"line":463},[87,149427,149146],{"class":97},[87,149429,148758],{"class":949},[87,149431,108],{"class":97},[87,149433,149434],{"class":949},"\"2024-10-04\"",[87,149436,13385],{"class":97},[87,149438,85010],{"class":949},[87,149440,108],{"class":97},[87,149442,149443],{"class":104},"2100",[87,149445,5883],{"class":97},[87,149447,149448,149450,149452,149454,149457,149459,149461,149463,149466],{"class":89,"line":469},[87,149449,149146],{"class":97},[87,149451,148758],{"class":949},[87,149453,108],{"class":97},[87,149455,149456],{"class":949},"\"2024-10-05\"",[87,149458,13385],{"class":97},[87,149460,85010],{"class":949},[87,149462,108],{"class":97},[87,149464,149465],{"class":104},"2600",[87,149467,5883],{"class":97},[87,149469,149470],{"class":89,"line":2287},[87,149471,34193],{"class":97},[87,149473,149474],{"class":89,"line":2568},[87,149475,3355],{"emptyLinePlaceholder":1029},[87,149477,149478,149480,149482,149485,149487,149489,149491,149493,149495],{"class":89,"line":2573},[87,149479,148561],{"class":97},[87,149481,946],{"class":171},[87,149483,149484],{"class":97}," [item[",[87,149486,148758],{"class":949},[87,149488,5396],{"class":97},[87,149490,3979],{"class":171},[87,149492,148970],{"class":97},[87,149494,26990],{"class":171},[87,149496,149497],{"class":97}," sales]\n",[87,149499,149500,149503,149505,149507,149509,149511,149513,149515,149517],{"class":89,"line":2579},[87,149501,149502],{"class":97},"amounts ",[87,149504,946],{"class":171},[87,149506,149484],{"class":97},[87,149508,85010],{"class":949},[87,149510,5396],{"class":97},[87,149512,3979],{"class":171},[87,149514,148970],{"class":97},[87,149516,26990],{"class":171},[87,149518,149497],{"class":97},[87,149520,149521],{"class":89,"line":2584},[87,149522,3355],{"emptyLinePlaceholder":1029},[87,149524,149525,149527,149529],{"class":89,"line":2598},[87,149526,148013],{"class":97},[87,149528,946],{"class":171},[87,149530,148018],{"class":97},[87,149532,149533],{"class":89,"line":2603},[87,149534,148602],{"class":97},[87,149536,149537],{"class":89,"line":2609},[87,149538,148410],{"class":97},[87,149540,149541,149543,149545,149547],{"class":89,"line":2630},[87,149542,148415],{"class":492},[87,149544,946],{"class":171},[87,149546,148056],{"class":949},[87,149548,32413],{"class":97},[87,149550,149551,149553,149555],{"class":89,"line":2635},[87,149552,148426],{"class":492},[87,149554,946],{"class":171},[87,149556,149557],{"class":97},"amounts,\n",[87,149559,149560,149562,149564,149566],{"class":89,"line":2649},[87,149561,148455],{"class":492},[87,149563,946],{"class":171},[87,149565,32423],{"class":104},[87,149567,32413],{"class":97},[87,149569,149570,149572,149574,149576,149578,149580,149582],{"class":89,"line":2654},[87,149571,148466],{"class":492},[87,149573,946],{"class":171},[87,149575,148471],{"class":97},[87,149577,148474],{"class":492},[87,149579,946],{"class":171},[87,149581,32423],{"class":104},[87,149583,38994],{"class":97},[87,149585,149586],{"class":89,"line":2683},[87,149587,1108],{"class":97},[87,149589,149590],{"class":89,"line":2688},[87,149591,148229],{"class":97},[87,149593,149594,149596,149598,149600,149602,149604,149607],{"class":89,"line":2705},[87,149595,148234],{"class":492},[87,149597,946],{"class":171},[87,149599,148239],{"class":97},[87,149601,52351],{"class":492},[87,149603,946],{"class":171},[87,149605,149606],{"class":949},"\"每日销售额\"",[87,149608,38994],{"class":97},[87,149610,149611,149613,149615,149617,149619,149621,149623],{"class":89,"line":2710},[87,149612,148253],{"class":492},[87,149614,946],{"class":171},[87,149616,148258],{"class":97},[87,149618,80736],{"class":492},[87,149620,946],{"class":171},[87,149622,148265],{"class":949},[87,149624,38994],{"class":97},[87,149626,149627,149629,149631,149633,149635,149637,149639],{"class":89,"line":2715},[87,149628,148272],{"class":492},[87,149630,946],{"class":171},[87,149632,148258],{"class":97},[87,149634,80736],{"class":492},[87,149636,946],{"class":171},[87,149638,148283],{"class":949},[87,149640,38994],{"class":97},[87,149642,149643,149645,149647,149649,149651,149653,149655],{"class":89,"line":2720},[87,149644,148290],{"class":492},[87,149646,946],{"class":171},[87,149648,148295],{"class":97},[87,149650,148298],{"class":492},[87,149652,946],{"class":171},[87,149654,148303],{"class":949},[87,149656,38994],{"class":97},[87,149658,149659,149662,149664],{"class":89,"line":2734},[87,149660,149661],{"class":492},"    datazoom_opts",[87,149663,946],{"class":171},[87,149665,149666],{"class":97},"[opts.DataZoomOpts()],\n",[87,149668,149669],{"class":89,"line":2739},[87,149670,1108],{"class":97},[87,149672,149673,149675,149678],{"class":89,"line":3532},[87,149674,148085],{"class":97},[87,149676,149677],{"class":949},"\"daily_sales.html\"",[87,149679,1108],{"class":97},[19,149681,149682,149685],{},[84,149683,149684],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149687,149689],{"id":149688},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149691,149692],{},"如果数据结构如下：",[77,149694,149696],{"className":31325,"code":149695,"language":31327,"meta":82,"style":82},"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",[84,149697,149698,149706,149714,149736,149757,149762,149769,149789,149809,149813],{"__ignoreMap":82},[87,149699,149700,149702,149704],{"class":89,"line":90},[87,149701,102584],{"class":97},[87,149703,946],{"class":171},[87,149705,98],{"class":97},[87,149707,149708,149711],{"class":89,"line":101},[87,149709,149710],{"class":949},"    \"北京\"",[87,149712,149713],{"class":97},": [\n",[87,149715,149716,149718,149720,149722,149725,149727,149730,149732,149734],{"class":89,"line":120},[87,149717,5870],{"class":97},[87,149719,148758],{"class":949},[87,149721,108],{"class":97},[87,149723,149724],{"class":949},"\"2024-01-01\"",[87,149726,13385],{"class":97},[87,149728,149729],{"class":949},"\"confirm\"",[87,149731,108],{"class":97},[87,149733,242],{"class":104},[87,149735,5883],{"class":97},[87,149737,149738,149740,149742,149744,149747,149749,149751,149753,149755],{"class":89,"line":222},[87,149739,5870],{"class":97},[87,149741,148758],{"class":949},[87,149743,108],{"class":97},[87,149745,149746],{"class":949},"\"2024-01-02\"",[87,149748,13385],{"class":97},[87,149750,149729],{"class":949},[87,149752,108],{"class":97},[87,149754,1592],{"class":104},[87,149756,5883],{"class":97},[87,149758,149759],{"class":89,"line":234},[87,149760,149761],{"class":97},"    ],\n",[87,149763,149764,149767],{"class":89,"line":256},[87,149765,149766],{"class":949},"    \"上海\"",[87,149768,149713],{"class":97},[87,149770,149771,149773,149775,149777,149779,149781,149783,149785,149787],{"class":89,"line":269},[87,149772,5870],{"class":97},[87,149774,148758],{"class":949},[87,149776,108],{"class":97},[87,149778,149724],{"class":949},[87,149780,13385],{"class":97},[87,149782,149729],{"class":949},[87,149784,108],{"class":97},[87,149786,1490],{"class":104},[87,149788,5883],{"class":97},[87,149790,149791,149793,149795,149797,149799,149801,149803,149805,149807],{"class":89,"line":463},[87,149792,5870],{"class":97},[87,149794,148758],{"class":949},[87,149796,108],{"class":97},[87,149798,149746],{"class":949},[87,149800,13385],{"class":97},[87,149802,149729],{"class":949},[87,149804,108],{"class":97},[87,149806,1617],{"class":104},[87,149808,5883],{"class":97},[87,149810,149811],{"class":89,"line":469},[87,149812,149761],{"class":97},[87,149814,149815],{"class":89,"line":2287},[87,149816,123],{"class":97},[19,149818,149819],{},"绘制多地区趋势：",[77,149821,149823],{"className":31325,"code":149822,"language":31327,"meta":82,"style":82},"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",[84,149824,149825,149839,149849,149853,149878,149882,149890,149894,149898,149910,149932,149945,149949,149953,149970,149986,149990],{"__ignoreMap":82},[87,149826,149827,149829,149831,149833,149835,149837],{"class":89,"line":90},[87,149828,31684],{"class":171},[87,149830,148140],{"class":97},[87,149832,31339],{"class":171},[87,149834,148145],{"class":97},[87,149836,32330],{"class":171},[87,149838,148150],{"class":97},[87,149840,149841,149843,149845,149847],{"class":89,"line":101},[87,149842,31684],{"class":171},[87,149844,147999],{"class":97},[87,149846,31339],{"class":171},[87,149848,148004],{"class":97},[87,149850,149851],{"class":89,"line":120},[87,149852,3355],{"emptyLinePlaceholder":1029},[87,149854,149855,149857,149859,149861,149863,149865,149867,149869,149871,149874,149876],{"class":89,"line":222},[87,149856,148561],{"class":97},[87,149858,946],{"class":171},[87,149860,149484],{"class":97},[87,149862,148758],{"class":949},[87,149864,5396],{"class":97},[87,149866,3979],{"class":171},[87,149868,148970],{"class":97},[87,149870,26990],{"class":171},[87,149872,149873],{"class":97}," data[",[87,149875,70201],{"class":949},[87,149877,78455],{"class":97},[87,149879,149880],{"class":89,"line":234},[87,149881,3355],{"emptyLinePlaceholder":1029},[87,149883,149884,149886,149888],{"class":89,"line":256},[87,149885,148013],{"class":97},[87,149887,946],{"class":171},[87,149889,148018],{"class":97},[87,149891,149892],{"class":89,"line":269},[87,149893,148602],{"class":97},[87,149895,149896],{"class":89,"line":463},[87,149897,3355],{"emptyLinePlaceholder":1029},[87,149899,149900,149902,149905,149907],{"class":89,"line":469},[87,149901,3979],{"class":171},[87,149903,149904],{"class":97}," city, records ",[87,149906,26990],{"class":171},[87,149908,149909],{"class":97}," data.items():\n",[87,149911,149912,149915,149917,149919,149921,149923,149925,149927,149929],{"class":89,"line":2287},[87,149913,149914],{"class":97},"    values ",[87,149916,946],{"class":171},[87,149918,149484],{"class":97},[87,149920,149729],{"class":949},[87,149922,5396],{"class":97},[87,149924,3979],{"class":171},[87,149926,148970],{"class":97},[87,149928,26990],{"class":171},[87,149930,149931],{"class":97}," records]\n",[87,149933,149934,149937,149939,149941,149943],{"class":89,"line":2568},[87,149935,149936],{"class":97},"    line.add_yaxis(city, values, ",[87,149938,148506],{"class":492},[87,149940,946],{"class":171},[87,149942,32423],{"class":104},[87,149944,1108],{"class":97},[87,149946,149947],{"class":89,"line":2573},[87,149948,3355],{"emptyLinePlaceholder":1029},[87,149950,149951],{"class":89,"line":2579},[87,149952,148229],{"class":97},[87,149954,149955,149957,149959,149961,149963,149965,149968],{"class":89,"line":2584},[87,149956,148234],{"class":492},[87,149958,946],{"class":171},[87,149960,148239],{"class":97},[87,149962,52351],{"class":492},[87,149964,946],{"class":171},[87,149966,149967],{"class":949},"\"多地区趋势图\"",[87,149969,38994],{"class":97},[87,149971,149972,149974,149976,149978,149980,149982,149984],{"class":89,"line":2598},[87,149973,148290],{"class":492},[87,149975,946],{"class":171},[87,149977,148295],{"class":97},[87,149979,148298],{"class":492},[87,149981,946],{"class":171},[87,149983,148303],{"class":949},[87,149985,38994],{"class":97},[87,149987,149988],{"class":89,"line":2603},[87,149989,1108],{"class":97},[87,149991,149992,149994,149997],{"class":89,"line":2609},[87,149993,148085],{"class":97},[87,149995,149996],{"class":949},"\"trend.html\"",[87,149998,1108],{"class":97},[19,150000,150001],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150003,150005],{"id":150004},"_1012-易错点","10.12 易错点",[1055,150007,150008,150014,150020,150030,150036],{},[29,150009,150010,150013],{},[84,150011,150012],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[29,150015,150016,150019],{},[84,150017,150018],{},"render()"," 生成的是 HTML，不是图片。",[29,150021,150022,150023,150026,150027,29332],{},"JSON 字符串用 ",[84,150024,150025],{},"json.loads()","，JSON 文件用 ",[84,150028,150029],{},"json.load()",[29,150031,150032,150033,29332],{},"中文 JSON 保存时加 ",[84,150034,150035],{},"ensure_ascii=False",[29,150037,150038],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150040,150042],{"id":150041},"_1013-本章练习","10.13 本章练习",[1055,150044,150045,150048,150051,150054,150057],{},[29,150046,150047],{},"安装 pyecharts 并生成第一个折线图。",[29,150049,150050],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[29,150052,150053],{},"绘制两条折线，对比线上和线下销售额。",[29,150055,150056],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[29,150058,150059],{},"对含有空值的销售数据进行清洗后再绘图。",[1006,150061,150062],{},"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":82,"searchDepth":101,"depth":101,"links":150064},[150065,150066,150067,150068,150069,150070,150071,150072,150073,150074,150075,150076,150077],{"id":147681,"depth":101,"text":147682},{"id":147756,"depth":101,"text":147757},{"id":147935,"depth":101,"text":147936},{"id":147986,"depth":101,"text":147987},{"id":148120,"depth":101,"text":148121},{"id":148396,"depth":101,"text":148397},{"id":148522,"depth":101,"text":148523},{"id":148733,"depth":101,"text":148734},{"id":149104,"depth":101,"text":149105},{"id":149316,"depth":101,"text":149317},{"id":149688,"depth":101,"text":149689},{"id":150004,"depth":101,"text":150005},{"id":150041,"depth":101,"text":150042},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147673,"description":1026},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150084,"title":150085,"body":150086,"description":1026,"extension":1027,"meta":152446,"navigation":1029,"path":152447,"seo":152448,"stem":152449,"__hash__":152450},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150087,"toc":152423},[150088,150091,150095,150098,150101,150177,150180,150271,150274,150278,150281,150325,150338,150342,150345,150412,150415,150419,150422,150506,150514,150518,150523,150664,150667,150678,150684,150690,150804,150808,150811,150814,151067,151070,151074,151077,151181,151184,151188,151339,151343,151350,151463,151467,151470,151576,151579,151583,151586,151617,151620,151725,151728,151732,151736,151746,151814,151818,151825,151889,151892,151896,151902,151998,152007,152011,152335,152344,152348,152376,152380,152420],[10,150089,150085],{"id":150090},"_11-面向对象基础",[14,150092,150094],{"id":150093},"_111-什么是面向对象","11.1 什么是面向对象",[19,150096,150097],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150099,150100],{},"面向过程：",[77,150102,150104],{"className":31325,"code":150103,"language":31327,"meta":82,"style":82},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[84,150105,150106,150115,150123,150127,150137,150168,150172],{"__ignoreMap":82},[87,150107,150108,150110,150112],{"class":89,"line":90},[87,150109,147297],{"class":97},[87,150111,946],{"class":171},[87,150113,150114],{"class":949}," \"小明\"\n",[87,150116,150117,150119,150121],{"class":89,"line":101},[87,150118,147307],{"class":97},[87,150120,946],{"class":171},[87,150122,147312],{"class":104},[87,150124,150125],{"class":89,"line":120},[87,150126,3355],{"emptyLinePlaceholder":1029},[87,150128,150129,150131,150134],{"class":89,"line":222},[87,150130,32894],{"class":171},[87,150132,150133],{"class":205}," introduce",[87,150135,150136],{"class":97},"(name, age):\n",[87,150138,150139,150141,150143,150145,150148,150150,150152,150154,150157,150159,150161,150163,150166],{"class":89,"line":234},[87,150140,32246],{"class":104},[87,150142,165],{"class":97},[87,150144,1152],{"class":171},[87,150146,150147],{"class":949},"\"我叫",[87,150149,1988],{"class":104},[87,150151,80736],{"class":97},[87,150153,2037],{"class":104},[87,150155,150156],{"class":949},"，今年",[87,150158,1988],{"class":104},[87,150160,71153],{"class":97},[87,150162,2037],{"class":104},[87,150164,150165],{"class":949},"岁\"",[87,150167,1108],{"class":97},[87,150169,150170],{"class":89,"line":256},[87,150171,3355],{"emptyLinePlaceholder":1029},[87,150173,150174],{"class":89,"line":269},[87,150175,150176],{"class":97},"introduce(name, age)\n",[19,150178,150179],{},"面向对象：",[77,150181,150183],{"className":31325,"code":150182,"language":31327,"meta":82,"style":82},"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",[84,150184,150185,150193,150201,150230,150234,150238,150248,150257,150266],{"__ignoreMap":82},[87,150186,150187,150189,150191],{"class":89,"line":90},[87,150188,15644],{"class":171},[87,150190,8848],{"class":205},[87,150192,4693],{"class":97},[87,150194,150195,150197,150199],{"class":89,"line":101},[87,150196,31748],{"class":171},[87,150198,150133],{"class":205},[87,150200,31754],{"class":97},[87,150202,150203,150205,150207,150209,150211,150214,150216,150218,150220,150222,150224,150226,150228],{"class":89,"line":120},[87,150204,33398],{"class":104},[87,150206,165],{"class":97},[87,150208,1152],{"class":171},[87,150210,150147],{"class":949},[87,150212,150213],{"class":104},"{self",[87,150215,81227],{"class":97},[87,150217,2037],{"class":104},[87,150219,150156],{"class":949},[87,150221,150213],{"class":104},[87,150223,81239],{"class":97},[87,150225,2037],{"class":104},[87,150227,150165],{"class":949},[87,150229,1108],{"class":97},[87,150231,150232],{"class":89,"line":222},[87,150233,3355],{"emptyLinePlaceholder":1029},[87,150235,150236],{"class":89,"line":234},[87,150237,3355],{"emptyLinePlaceholder":1029},[87,150239,150240,150243,150245],{"class":89,"line":256},[87,150241,150242],{"class":97},"student ",[87,150244,946],{"class":171},[87,150246,150247],{"class":97}," Student()\n",[87,150249,150250,150253,150255],{"class":89,"line":269},[87,150251,150252],{"class":97},"student.name ",[87,150254,946],{"class":171},[87,150256,150114],{"class":949},[87,150258,150259,150262,150264],{"class":89,"line":463},[87,150260,150261],{"class":97},"student.age ",[87,150263,946],{"class":171},[87,150265,147312],{"class":104},[87,150267,150268],{"class":89,"line":469},[87,150269,150270],{"class":97},"student.introduce()\n",[19,150272,150273],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150275,150277],{"id":150276},"_112-类和对象","11.2 类和对象",[19,150279,150280],{},"类是模板，对象是根据模板创建出来的具体实例。",[77,150282,150284],{"className":31325,"code":150283,"language":31327,"meta":82,"style":82},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[84,150285,150286,150294,150299,150303,150307,150316],{"__ignoreMap":82},[87,150287,150288,150290,150292],{"class":89,"line":90},[87,150289,15644],{"class":171},[87,150291,8848],{"class":205},[87,150293,4693],{"class":97},[87,150295,150296],{"class":89,"line":101},[87,150297,150298],{"class":171},"    pass\n",[87,150300,150301],{"class":89,"line":120},[87,150302,3355],{"emptyLinePlaceholder":1029},[87,150304,150305],{"class":89,"line":222},[87,150306,3355],{"emptyLinePlaceholder":1029},[87,150308,150309,150312,150314],{"class":89,"line":234},[87,150310,150311],{"class":97},"student1 ",[87,150313,946],{"class":171},[87,150315,150247],{"class":97},[87,150317,150318,150321,150323],{"class":89,"line":256},[87,150319,150320],{"class":97},"student2 ",[87,150322,946],{"class":171},[87,150324,150247],{"class":97},[19,150326,150327,150330,150331,101944,150334,150337],{},[84,150328,150329],{},"Student"," 是类，",[84,150332,150333],{},"student1",[84,150335,150336],{},"student2"," 是对象。",[14,150339,150341],{"id":150340},"_113-属性","11.3 属性",[19,150343,150344],{},"属性是对象保存的数据。",[77,150346,150348],{"className":31325,"code":150347,"language":31327,"meta":82,"style":82},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[84,150349,150350,150358,150362,150366,150370,150378,150386,150394,150398,150405],{"__ignoreMap":82},[87,150351,150352,150354,150356],{"class":89,"line":90},[87,150353,15644],{"class":171},[87,150355,8848],{"class":205},[87,150357,4693],{"class":97},[87,150359,150360],{"class":89,"line":101},[87,150361,150298],{"class":171},[87,150363,150364],{"class":89,"line":120},[87,150365,3355],{"emptyLinePlaceholder":1029},[87,150367,150368],{"class":89,"line":222},[87,150369,3355],{"emptyLinePlaceholder":1029},[87,150371,150372,150374,150376],{"class":89,"line":234},[87,150373,150242],{"class":97},[87,150375,946],{"class":171},[87,150377,150247],{"class":97},[87,150379,150380,150382,150384],{"class":89,"line":256},[87,150381,150252],{"class":97},[87,150383,946],{"class":171},[87,150385,150114],{"class":949},[87,150387,150388,150390,150392],{"class":89,"line":269},[87,150389,150261],{"class":97},[87,150391,946],{"class":171},[87,150393,147312],{"class":104},[87,150395,150396],{"class":89,"line":463},[87,150397,3355],{"emptyLinePlaceholder":1029},[87,150399,150400,150402],{"class":89,"line":469},[87,150401,31362],{"class":104},[87,150403,150404],{"class":97},"(student.name)\n",[87,150406,150407,150409],{"class":89,"line":2287},[87,150408,31362],{"class":104},[87,150410,150411],{"class":97},"(student.age)\n",[19,150413,150414],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150416,150418],{"id":150417},"_114-方法","11.4 方法",[19,150420,150421],{},"类中的函数叫方法。",[77,150423,150424],{"className":31325,"code":150182,"language":31327,"meta":82,"style":82},[84,150425,150426,150434,150442,150470,150474,150478,150486,150494,150502],{"__ignoreMap":82},[87,150427,150428,150430,150432],{"class":89,"line":90},[87,150429,15644],{"class":171},[87,150431,8848],{"class":205},[87,150433,4693],{"class":97},[87,150435,150436,150438,150440],{"class":89,"line":101},[87,150437,31748],{"class":171},[87,150439,150133],{"class":205},[87,150441,31754],{"class":97},[87,150443,150444,150446,150448,150450,150452,150454,150456,150458,150460,150462,150464,150466,150468],{"class":89,"line":120},[87,150445,33398],{"class":104},[87,150447,165],{"class":97},[87,150449,1152],{"class":171},[87,150451,150147],{"class":949},[87,150453,150213],{"class":104},[87,150455,81227],{"class":97},[87,150457,2037],{"class":104},[87,150459,150156],{"class":949},[87,150461,150213],{"class":104},[87,150463,81239],{"class":97},[87,150465,2037],{"class":104},[87,150467,150165],{"class":949},[87,150469,1108],{"class":97},[87,150471,150472],{"class":89,"line":222},[87,150473,3355],{"emptyLinePlaceholder":1029},[87,150475,150476],{"class":89,"line":234},[87,150477,3355],{"emptyLinePlaceholder":1029},[87,150479,150480,150482,150484],{"class":89,"line":256},[87,150481,150242],{"class":97},[87,150483,946],{"class":171},[87,150485,150247],{"class":97},[87,150487,150488,150490,150492],{"class":89,"line":269},[87,150489,150252],{"class":97},[87,150491,946],{"class":171},[87,150493,150114],{"class":949},[87,150495,150496,150498,150500],{"class":89,"line":463},[87,150497,150261],{"class":97},[87,150499,946],{"class":171},[87,150501,147312],{"class":104},[87,150503,150504],{"class":89,"line":469},[87,150505,150270],{"class":97},[19,150507,150508,150510,150511,150513],{},[84,150509,31770],{}," 表示当前对象。调用方法时不需要手动传入 ",[84,150512,31770],{},"，Python 会自动传。",[14,150515,150517],{"id":150516},"_115-构造方法__init__","11.5 构造方法__init__",[19,150519,150520,150522],{},[84,150521,31776],{}," 在对象创建时自动执行，用于初始化属性。",[77,150524,150526],{"className":31325,"code":150525,"language":31327,"meta":82,"style":82},"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",[84,150527,150528,150536,150545,150557,150569,150580,150584,150592,150630,150634,150638,150660],{"__ignoreMap":82},[87,150529,150530,150532,150534],{"class":89,"line":90},[87,150531,15644],{"class":171},[87,150533,8848],{"class":205},[87,150535,4693],{"class":97},[87,150537,150538,150540,150542],{"class":89,"line":101},[87,150539,31748],{"class":171},[87,150541,31751],{"class":104},[87,150543,150544],{"class":97},"(self, name, age, score):\n",[87,150546,150547,150549,150552,150554],{"class":89,"line":120},[87,150548,31792],{"class":104},[87,150550,150551],{"class":97},".name ",[87,150553,946],{"class":171},[87,150555,150556],{"class":97}," name\n",[87,150558,150559,150561,150564,150566],{"class":89,"line":222},[87,150560,31792],{"class":104},[87,150562,150563],{"class":97},".age ",[87,150565,946],{"class":171},[87,150567,150568],{"class":97}," age\n",[87,150570,150571,150573,150576,150578],{"class":89,"line":234},[87,150572,31792],{"class":104},[87,150574,150575],{"class":97},".score ",[87,150577,946],{"class":171},[87,150579,2535],{"class":97},[87,150581,150582],{"class":89,"line":256},[87,150583,3355],{"emptyLinePlaceholder":1029},[87,150585,150586,150588,150590],{"class":89,"line":269},[87,150587,31748],{"class":171},[87,150589,150133],{"class":205},[87,150591,31754],{"class":97},[87,150593,150594,150596,150598,150600,150602,150604,150606,150608,150610,150612,150614,150616,150619,150621,150624,150626,150628],{"class":89,"line":463},[87,150595,33398],{"class":104},[87,150597,165],{"class":97},[87,150599,1152],{"class":171},[87,150601,150147],{"class":949},[87,150603,150213],{"class":104},[87,150605,81227],{"class":97},[87,150607,2037],{"class":104},[87,150609,150156],{"class":949},[87,150611,150213],{"class":104},[87,150613,81239],{"class":97},[87,150615,2037],{"class":104},[87,150617,150618],{"class":949},"岁，成绩",[87,150620,150213],{"class":104},[87,150622,150623],{"class":97},".score",[87,150625,2037],{"class":104},[87,150627,1347],{"class":949},[87,150629,1108],{"class":97},[87,150631,150632],{"class":89,"line":469},[87,150633,3355],{"emptyLinePlaceholder":1029},[87,150635,150636],{"class":89,"line":2287},[87,150637,3355],{"emptyLinePlaceholder":1029},[87,150639,150640,150642,150644,150647,150650,150652,150654,150656,150658],{"class":89,"line":2568},[87,150641,150242],{"class":97},[87,150643,946],{"class":171},[87,150645,150646],{"class":97}," Student(",[87,150648,150649],{"class":949},"\"小明\"",[87,150651,13385],{"class":97},[87,150653,1743],{"class":104},[87,150655,13385],{"class":97},[87,150657,2080],{"class":104},[87,150659,1108],{"class":97},[87,150661,150662],{"class":89,"line":2573},[87,150663,150270],{"class":97},[19,150665,150666],{},"构造方法的好处：",[1055,150668,150669,150672,150675],{},[29,150670,150671],{},"创建对象时必须提供必要数据。",[29,150673,150674],{},"属性初始化集中，不容易漏。",[29,150676,150677],{},"对象状态更完整。",[14,150679,150681,150682],{"id":150680},"_116-str","11.6 ",[57,150683,2259],{},[19,150685,150686,150687,29332],{},"直接打印对象时，默认输出不直观。可以定义 ",[84,150688,150689],{},"__str__",[77,150691,150693],{"className":31325,"code":150692,"language":31327,"meta":82,"style":82},"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",[84,150694,150695,150703,150712,150722,150732,150736,150745,150773,150777,150781,150797],{"__ignoreMap":82},[87,150696,150697,150699,150701],{"class":89,"line":90},[87,150698,15644],{"class":171},[87,150700,8848],{"class":205},[87,150702,4693],{"class":97},[87,150704,150705,150707,150709],{"class":89,"line":101},[87,150706,31748],{"class":171},[87,150708,31751],{"class":104},[87,150710,150711],{"class":97},"(self, name, age):\n",[87,150713,150714,150716,150718,150720],{"class":89,"line":120},[87,150715,31792],{"class":104},[87,150717,150551],{"class":97},[87,150719,946],{"class":171},[87,150721,150556],{"class":97},[87,150723,150724,150726,150728,150730],{"class":89,"line":222},[87,150725,31792],{"class":104},[87,150727,150563],{"class":97},[87,150729,946],{"class":171},[87,150731,150568],{"class":97},[87,150733,150734],{"class":89,"line":234},[87,150735,3355],{"emptyLinePlaceholder":1029},[87,150737,150738,150740,150743],{"class":89,"line":256},[87,150739,31748],{"class":171},[87,150741,150742],{"class":104}," __str__",[87,150744,31754],{"class":97},[87,150746,150747,150749,150752,150755,150757,150759,150761,150764,150766,150768,150770],{"class":89,"line":269},[87,150748,15702],{"class":171},[87,150750,150751],{"class":171}," f",[87,150753,150754],{"class":949},"\"Student(name=",[87,150756,150213],{"class":104},[87,150758,81227],{"class":97},[87,150760,2037],{"class":104},[87,150762,150763],{"class":949},", age=",[87,150765,150213],{"class":104},[87,150767,81239],{"class":97},[87,150769,2037],{"class":104},[87,150771,150772],{"class":949},")\"\n",[87,150774,150775],{"class":89,"line":463},[87,150776,3355],{"emptyLinePlaceholder":1029},[87,150778,150779],{"class":89,"line":469},[87,150780,3355],{"emptyLinePlaceholder":1029},[87,150782,150783,150785,150787,150789,150791,150793,150795],{"class":89,"line":2287},[87,150784,150242],{"class":97},[87,150786,946],{"class":171},[87,150788,150646],{"class":97},[87,150790,150649],{"class":949},[87,150792,13385],{"class":97},[87,150794,1743],{"class":104},[87,150796,1108],{"class":97},[87,150798,150799,150801],{"class":89,"line":2568},[87,150800,31362],{"class":104},[87,150802,150803],{"class":97},"(student)\n",[14,150805,150807],{"id":150806},"_117-封装","11.7 封装",[19,150809,150810],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150812,150813],{},"Python 中以双下划线开头的属性通常视为私有属性。",[77,150815,150817],{"className":31325,"code":150816,"language":31327,"meta":82,"style":82},"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",[84,150818,150819,150828,150837,150849,150861,150865,150874,150883,150887,150897,150910,150921,150926,150937,150941,150950,150962,150973,150977,150990,151001,151005,151016,151020,151024,151042,151051,151060],{"__ignoreMap":82},[87,150820,150821,150823,150826],{"class":89,"line":90},[87,150822,15644],{"class":171},[87,150824,150825],{"class":205}," Account",[87,150827,4693],{"class":97},[87,150829,150830,150832,150834],{"class":89,"line":101},[87,150831,31748],{"class":171},[87,150833,31751],{"class":104},[87,150835,150836],{"class":97},"(self, owner, balance):\n",[87,150838,150839,150841,150844,150846],{"class":89,"line":120},[87,150840,31792],{"class":104},[87,150842,150843],{"class":97},".owner ",[87,150845,946],{"class":171},[87,150847,150848],{"class":97}," owner\n",[87,150850,150851,150853,150856,150858],{"class":89,"line":222},[87,150852,31792],{"class":104},[87,150854,150855],{"class":97},".__balance ",[87,150857,946],{"class":171},[87,150859,150860],{"class":97}," balance\n",[87,150862,150863],{"class":89,"line":234},[87,150864,3355],{"emptyLinePlaceholder":1029},[87,150866,150867,150869,150872],{"class":89,"line":256},[87,150868,31748],{"class":171},[87,150870,150871],{"class":205}," get_balance",[87,150873,31754],{"class":97},[87,150875,150876,150878,150880],{"class":89,"line":269},[87,150877,15702],{"class":171},[87,150879,39820],{"class":104},[87,150881,150882],{"class":97},".__balance\n",[87,150884,150885],{"class":89,"line":463},[87,150886,3355],{"emptyLinePlaceholder":1029},[87,150888,150889,150891,150894],{"class":89,"line":469},[87,150890,31748],{"class":171},[87,150892,150893],{"class":205}," deposit",[87,150895,150896],{"class":97},"(self, money):\n",[87,150898,150899,150901,150904,150906,150908],{"class":89,"line":2287},[87,150900,3452],{"class":171},[87,150902,150903],{"class":97}," money ",[87,150905,2544],{"class":171},[87,150907,577],{"class":104},[87,150909,4693],{"class":97},[87,150911,150912,150914,150916,150919],{"class":89,"line":2568},[87,150913,35597],{"class":104},[87,150915,165],{"class":97},[87,150917,150918],{"class":949},"\"存款金额必须大于0\"",[87,150920,1108],{"class":97},[87,150922,150923],{"class":89,"line":2573},[87,150924,150925],{"class":171},"            return\n",[87,150927,150928,150930,150932,150934],{"class":89,"line":2579},[87,150929,31792],{"class":104},[87,150931,150855],{"class":97},[87,150933,10427],{"class":171},[87,150935,150936],{"class":97}," money\n",[87,150938,150939],{"class":89,"line":2584},[87,150940,3355],{"emptyLinePlaceholder":1029},[87,150942,150943,150945,150948],{"class":89,"line":2598},[87,150944,31748],{"class":171},[87,150946,150947],{"class":205}," withdraw",[87,150949,150896],{"class":97},[87,150951,150952,150954,150956,150958,150960],{"class":89,"line":2603},[87,150953,3452],{"class":171},[87,150955,150903],{"class":97},[87,150957,2544],{"class":171},[87,150959,577],{"class":104},[87,150961,4693],{"class":97},[87,150963,150964,150966,150968,150971],{"class":89,"line":2609},[87,150965,35597],{"class":104},[87,150967,165],{"class":97},[87,150969,150970],{"class":949},"\"取款金额必须大于0\"",[87,150972,1108],{"class":97},[87,150974,150975],{"class":89,"line":2630},[87,150976,150925],{"class":171},[87,150978,150979,150981,150983,150985,150987],{"class":89,"line":2635},[87,150980,3452],{"class":171},[87,150982,150903],{"class":97},[87,150984,2051],{"class":171},[87,150986,39820],{"class":104},[87,150988,150989],{"class":97},".__balance:\n",[87,150991,150992,150994,150996,150999],{"class":89,"line":2649},[87,150993,35597],{"class":104},[87,150995,165],{"class":97},[87,150997,150998],{"class":949},"\"余额不足\"",[87,151000,1108],{"class":97},[87,151002,151003],{"class":89,"line":2654},[87,151004,150925],{"class":171},[87,151006,151007,151009,151011,151014],{"class":89,"line":2683},[87,151008,31792],{"class":104},[87,151010,150855],{"class":97},[87,151012,151013],{"class":171},"-=",[87,151015,150936],{"class":97},[87,151017,151018],{"class":89,"line":2688},[87,151019,3355],{"emptyLinePlaceholder":1029},[87,151021,151022],{"class":89,"line":2705},[87,151023,3355],{"emptyLinePlaceholder":1029},[87,151025,151026,151029,151031,151034,151036,151038,151040],{"class":89,"line":2710},[87,151027,151028],{"class":97},"account ",[87,151030,946],{"class":171},[87,151032,151033],{"class":97}," Account(",[87,151035,150649],{"class":949},[87,151037,13385],{"class":97},[87,151039,7360],{"class":104},[87,151041,1108],{"class":97},[87,151043,151044,151047,151049],{"class":89,"line":2715},[87,151045,151046],{"class":97},"account.deposit(",[87,151048,2678],{"class":104},[87,151050,1108],{"class":97},[87,151052,151053,151056,151058],{"class":89,"line":2720},[87,151054,151055],{"class":97},"account.withdraw(",[87,151057,536],{"class":104},[87,151059,1108],{"class":97},[87,151061,151062,151064],{"class":89,"line":2734},[87,151063,31362],{"class":104},[87,151065,151066],{"class":97},"(account.get_balance())\n",[19,151068,151069],{},"封装的意义是避免外部随意修改内部状态。",[14,151071,151073],{"id":151072},"_118-继承","11.8 继承",[19,151075,151076],{},"继承可以让子类复用父类的属性和方法。",[77,151078,151080],{"className":31325,"code":151079,"language":31327,"meta":82,"style":82},"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",[84,151081,151082,151091,151100,151111,151115,151119,151133,151142,151153,151157,151161,151171,151176],{"__ignoreMap":82},[87,151083,151084,151086,151089],{"class":89,"line":90},[87,151085,15644],{"class":171},[87,151087,151088],{"class":205}," Animal",[87,151090,4693],{"class":97},[87,151092,151093,151095,151098],{"class":89,"line":101},[87,151094,31748],{"class":171},[87,151096,151097],{"class":205}," eat",[87,151099,31754],{"class":97},[87,151101,151102,151104,151106,151109],{"class":89,"line":120},[87,151103,33398],{"class":104},[87,151105,165],{"class":97},[87,151107,151108],{"class":949},"\"吃东西\"",[87,151110,1108],{"class":97},[87,151112,151113],{"class":89,"line":222},[87,151114,3355],{"emptyLinePlaceholder":1029},[87,151116,151117],{"class":89,"line":234},[87,151118,3355],{"emptyLinePlaceholder":1029},[87,151120,151121,151123,151126,151128,151131],{"class":89,"line":256},[87,151122,15644],{"class":171},[87,151124,151125],{"class":205}," Dog",[87,151127,165],{"class":97},[87,151129,151130],{"class":205},"Animal",[87,151132,31733],{"class":97},[87,151134,151135,151137,151140],{"class":89,"line":269},[87,151136,31748],{"class":171},[87,151138,151139],{"class":205}," bark",[87,151141,31754],{"class":97},[87,151143,151144,151146,151148,151151],{"class":89,"line":463},[87,151145,33398],{"class":104},[87,151147,165],{"class":97},[87,151149,151150],{"class":949},"\"汪汪\"",[87,151152,1108],{"class":97},[87,151154,151155],{"class":89,"line":469},[87,151156,3355],{"emptyLinePlaceholder":1029},[87,151158,151159],{"class":89,"line":2287},[87,151160,3355],{"emptyLinePlaceholder":1029},[87,151162,151163,151166,151168],{"class":89,"line":2568},[87,151164,151165],{"class":97},"dog ",[87,151167,946],{"class":171},[87,151169,151170],{"class":97}," Dog()\n",[87,151172,151173],{"class":89,"line":2573},[87,151174,151175],{"class":97},"dog.eat()\n",[87,151177,151178],{"class":89,"line":2579},[87,151179,151180],{"class":97},"dog.bark()\n",[19,151182,151183],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151185,151187],{"id":151186},"_119-方法重写","11.9 方法重写",[77,151189,151191],{"className":31325,"code":151190,"language":31327,"meta":82,"style":82},"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",[84,151192,151193,151201,151210,151221,151225,151229,151241,151249,151259,151263,151267,151280,151288,151299,151303,151307,151315,151325,151329,151334],{"__ignoreMap":82},[87,151194,151195,151197,151199],{"class":89,"line":90},[87,151196,15644],{"class":171},[87,151198,151088],{"class":205},[87,151200,4693],{"class":97},[87,151202,151203,151205,151208],{"class":89,"line":101},[87,151204,31748],{"class":171},[87,151206,151207],{"class":205}," speak",[87,151209,31754],{"class":97},[87,151211,151212,151214,151216,151219],{"class":89,"line":120},[87,151213,33398],{"class":104},[87,151215,165],{"class":97},[87,151217,151218],{"class":949},"\"动物叫\"",[87,151220,1108],{"class":97},[87,151222,151223],{"class":89,"line":222},[87,151224,3355],{"emptyLinePlaceholder":1029},[87,151226,151227],{"class":89,"line":234},[87,151228,3355],{"emptyLinePlaceholder":1029},[87,151230,151231,151233,151235,151237,151239],{"class":89,"line":256},[87,151232,15644],{"class":171},[87,151234,151125],{"class":205},[87,151236,165],{"class":97},[87,151238,151130],{"class":205},[87,151240,31733],{"class":97},[87,151242,151243,151245,151247],{"class":89,"line":269},[87,151244,31748],{"class":171},[87,151246,151207],{"class":205},[87,151248,31754],{"class":97},[87,151250,151251,151253,151255,151257],{"class":89,"line":463},[87,151252,33398],{"class":104},[87,151254,165],{"class":97},[87,151256,151150],{"class":949},[87,151258,1108],{"class":97},[87,151260,151261],{"class":89,"line":469},[87,151262,3355],{"emptyLinePlaceholder":1029},[87,151264,151265],{"class":89,"line":2287},[87,151266,3355],{"emptyLinePlaceholder":1029},[87,151268,151269,151271,151274,151276,151278],{"class":89,"line":2568},[87,151270,15644],{"class":171},[87,151272,151273],{"class":205}," Cat",[87,151275,165],{"class":97},[87,151277,151130],{"class":205},[87,151279,31733],{"class":97},[87,151281,151282,151284,151286],{"class":89,"line":2573},[87,151283,31748],{"class":171},[87,151285,151207],{"class":205},[87,151287,31754],{"class":97},[87,151289,151290,151292,151294,151297],{"class":89,"line":2579},[87,151291,33398],{"class":104},[87,151293,165],{"class":97},[87,151295,151296],{"class":949},"\"喵喵\"",[87,151298,1108],{"class":97},[87,151300,151301],{"class":89,"line":2584},[87,151302,3355],{"emptyLinePlaceholder":1029},[87,151304,151305],{"class":89,"line":2598},[87,151306,3355],{"emptyLinePlaceholder":1029},[87,151308,151309,151311,151313],{"class":89,"line":2603},[87,151310,151165],{"class":97},[87,151312,946],{"class":171},[87,151314,151170],{"class":97},[87,151316,151317,151320,151322],{"class":89,"line":2609},[87,151318,151319],{"class":97},"cat ",[87,151321,946],{"class":171},[87,151323,151324],{"class":97}," Cat()\n",[87,151326,151327],{"class":89,"line":2630},[87,151328,3355],{"emptyLinePlaceholder":1029},[87,151330,151331],{"class":89,"line":2635},[87,151332,151333],{"class":97},"dog.speak()\n",[87,151335,151336],{"class":89,"line":2649},[87,151337,151338],{"class":97},"cat.speak()\n",[14,151340,151342],{"id":151341},"_1110-super","11.10 super",[19,151344,151345,151346,151349],{},"子类可以通过 ",[84,151347,151348],{},"super()"," 调用父类方法。",[77,151351,151353],{"className":31325,"code":151352,"language":31327,"meta":82,"style":82},"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",[84,151354,151355,151363,151372,151382,151386,151390,151402,151411,151422,151432,151436,151440,151456],{"__ignoreMap":82},[87,151356,151357,151359,151361],{"class":89,"line":90},[87,151358,15644],{"class":171},[87,151360,16519],{"class":205},[87,151362,4693],{"class":97},[87,151364,151365,151367,151369],{"class":89,"line":101},[87,151366,31748],{"class":171},[87,151368,31751],{"class":104},[87,151370,151371],{"class":97},"(self, name):\n",[87,151373,151374,151376,151378,151380],{"class":89,"line":120},[87,151375,31792],{"class":104},[87,151377,150551],{"class":97},[87,151379,946],{"class":171},[87,151381,150556],{"class":97},[87,151383,151384],{"class":89,"line":222},[87,151385,3355],{"emptyLinePlaceholder":1029},[87,151387,151388],{"class":89,"line":234},[87,151389,3355],{"emptyLinePlaceholder":1029},[87,151391,151392,151394,151396,151398,151400],{"class":89,"line":256},[87,151393,15644],{"class":171},[87,151395,8848],{"class":205},[87,151397,165],{"class":97},[87,151399,19994],{"class":205},[87,151401,31733],{"class":97},[87,151403,151404,151406,151408],{"class":89,"line":269},[87,151405,31748],{"class":171},[87,151407,31751],{"class":104},[87,151409,151410],{"class":97},"(self, name, score):\n",[87,151412,151413,151415,151417,151419],{"class":89,"line":463},[87,151414,31764],{"class":104},[87,151416,18209],{"class":97},[87,151418,31776],{"class":104},[87,151420,151421],{"class":97},"(name)\n",[87,151423,151424,151426,151428,151430],{"class":89,"line":469},[87,151425,31792],{"class":104},[87,151427,150575],{"class":97},[87,151429,946],{"class":171},[87,151431,2535],{"class":97},[87,151433,151434],{"class":89,"line":2287},[87,151435,3355],{"emptyLinePlaceholder":1029},[87,151437,151438],{"class":89,"line":2568},[87,151439,3355],{"emptyLinePlaceholder":1029},[87,151441,151442,151444,151446,151448,151450,151452,151454],{"class":89,"line":2573},[87,151443,150242],{"class":97},[87,151445,946],{"class":171},[87,151447,150646],{"class":97},[87,151449,150649],{"class":949},[87,151451,13385],{"class":97},[87,151453,2080],{"class":104},[87,151455,1108],{"class":97},[87,151457,151458,151460],{"class":89,"line":2579},[87,151459,31362],{"class":104},[87,151461,151462],{"class":97},"(student.name, student.score)\n",[14,151464,151466],{"id":151465},"_1111-多态","11.11 多态",[19,151468,151469],{},"多态指不同对象响应同一个方法，表现出不同结果。",[77,151471,151473],{"className":31325,"code":151472,"language":31327,"meta":82,"style":82},"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",[84,151474,151475,151483,151491,151501,151505,151509,151517,151525,151535,151539,151543,151553,151558,151562,151566,151571],{"__ignoreMap":82},[87,151476,151477,151479,151481],{"class":89,"line":90},[87,151478,15644],{"class":171},[87,151480,151125],{"class":205},[87,151482,4693],{"class":97},[87,151484,151485,151487,151489],{"class":89,"line":101},[87,151486,31748],{"class":171},[87,151488,151207],{"class":205},[87,151490,31754],{"class":97},[87,151492,151493,151495,151497,151499],{"class":89,"line":120},[87,151494,33398],{"class":104},[87,151496,165],{"class":97},[87,151498,151150],{"class":949},[87,151500,1108],{"class":97},[87,151502,151503],{"class":89,"line":222},[87,151504,3355],{"emptyLinePlaceholder":1029},[87,151506,151507],{"class":89,"line":234},[87,151508,3355],{"emptyLinePlaceholder":1029},[87,151510,151511,151513,151515],{"class":89,"line":256},[87,151512,15644],{"class":171},[87,151514,151273],{"class":205},[87,151516,4693],{"class":97},[87,151518,151519,151521,151523],{"class":89,"line":269},[87,151520,31748],{"class":171},[87,151522,151207],{"class":205},[87,151524,31754],{"class":97},[87,151526,151527,151529,151531,151533],{"class":89,"line":463},[87,151528,33398],{"class":104},[87,151530,165],{"class":97},[87,151532,151296],{"class":949},[87,151534,1108],{"class":97},[87,151536,151537],{"class":89,"line":469},[87,151538,3355],{"emptyLinePlaceholder":1029},[87,151540,151541],{"class":89,"line":2287},[87,151542,3355],{"emptyLinePlaceholder":1029},[87,151544,151545,151547,151550],{"class":89,"line":2568},[87,151546,32894],{"class":171},[87,151548,151549],{"class":205}," make_sound",[87,151551,151552],{"class":97},"(animal):\n",[87,151554,151555],{"class":89,"line":2573},[87,151556,151557],{"class":97},"    animal.speak()\n",[87,151559,151560],{"class":89,"line":2579},[87,151561,3355],{"emptyLinePlaceholder":1029},[87,151563,151564],{"class":89,"line":2584},[87,151565,3355],{"emptyLinePlaceholder":1029},[87,151567,151568],{"class":89,"line":2598},[87,151569,151570],{"class":97},"make_sound(Dog())\n",[87,151572,151573],{"class":89,"line":2603},[87,151574,151575],{"class":97},"make_sound(Cat())\n",[19,151577,151578],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,151580,151582],{"id":151581},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,151584,151585],{},"实例属性属于对象：",[77,151587,151589],{"className":31325,"code":151588,"language":31327,"meta":82,"style":82},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[84,151590,151591,151599,151607],{"__ignoreMap":82},[87,151592,151593,151595,151597],{"class":89,"line":90},[87,151594,15644],{"class":171},[87,151596,8848],{"class":205},[87,151598,4693],{"class":97},[87,151600,151601,151603,151605],{"class":89,"line":101},[87,151602,31748],{"class":171},[87,151604,31751],{"class":104},[87,151606,151371],{"class":97},[87,151608,151609,151611,151613,151615],{"class":89,"line":120},[87,151610,31792],{"class":104},[87,151612,150551],{"class":97},[87,151614,946],{"class":171},[87,151616,150556],{"class":97},[19,151618,151619],{},"类属性属于类，所有对象共享：",[77,151621,151623],{"className":31325,"code":151622,"language":31327,"meta":82,"style":82},"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",[84,151624,151625,151633,151643,151647,151655,151665,151669,151673,151686,151700,151704,151711,151718],{"__ignoreMap":82},[87,151626,151627,151629,151631],{"class":89,"line":90},[87,151628,15644],{"class":171},[87,151630,8848],{"class":205},[87,151632,4693],{"class":97},[87,151634,151635,151638,151640],{"class":89,"line":101},[87,151636,151637],{"class":97},"    school ",[87,151639,946],{"class":171},[87,151641,151642],{"class":949}," \"黑马学校\"\n",[87,151644,151645],{"class":89,"line":120},[87,151646,3355],{"emptyLinePlaceholder":1029},[87,151648,151649,151651,151653],{"class":89,"line":222},[87,151650,31748],{"class":171},[87,151652,31751],{"class":104},[87,151654,151371],{"class":97},[87,151656,151657,151659,151661,151663],{"class":89,"line":234},[87,151658,31792],{"class":104},[87,151660,150551],{"class":97},[87,151662,946],{"class":171},[87,151664,150556],{"class":97},[87,151666,151667],{"class":89,"line":256},[87,151668,3355],{"emptyLinePlaceholder":1029},[87,151670,151671],{"class":89,"line":269},[87,151672,3355],{"emptyLinePlaceholder":1029},[87,151674,151675,151678,151680,151682,151684],{"class":89,"line":463},[87,151676,151677],{"class":97},"s1 ",[87,151679,946],{"class":171},[87,151681,150646],{"class":97},[87,151683,150649],{"class":949},[87,151685,1108],{"class":97},[87,151687,151688,151691,151693,151695,151698],{"class":89,"line":469},[87,151689,151690],{"class":97},"s2 ",[87,151692,946],{"class":171},[87,151694,150646],{"class":97},[87,151696,151697],{"class":949},"\"小红\"",[87,151699,1108],{"class":97},[87,151701,151702],{"class":89,"line":2287},[87,151703,3355],{"emptyLinePlaceholder":1029},[87,151705,151706,151708],{"class":89,"line":2568},[87,151707,31362],{"class":104},[87,151709,151710],{"class":97},"(s1.school)\n",[87,151712,151713,151715],{"class":89,"line":2573},[87,151714,31362],{"class":104},[87,151716,151717],{"class":97},"(s2.school)\n",[87,151719,151720,151722],{"class":89,"line":2579},[87,151721,31362],{"class":104},[87,151723,151724],{"class":97},"(Student.school)\n",[19,151726,151727],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151729,151731],{"id":151730},"_1113-类方法和静态方法","11.13 类方法和静态方法",[44,151733,151735],{"id":151734},"_11131-类方法","11.13.1 类方法",[19,151737,151738,151739,151742,151743,29332],{},"类方法使用 ",[84,151740,151741],{},"@classmethod","，第一个参数通常是 ",[84,151744,151745],{},"cls",[77,151747,151749],{"className":31325,"code":151748,"language":31327,"meta":82,"style":82},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[84,151750,151751,151759,151767,151771,151779,151789,151799,151803,151807],{"__ignoreMap":82},[87,151752,151753,151755,151757],{"class":89,"line":90},[87,151754,15644],{"class":171},[87,151756,8848],{"class":205},[87,151758,4693],{"class":97},[87,151760,151761,151763,151765],{"class":89,"line":101},[87,151762,151637],{"class":97},[87,151764,946],{"class":171},[87,151766,151642],{"class":949},[87,151768,151769],{"class":89,"line":120},[87,151770,3355],{"emptyLinePlaceholder":1029},[87,151772,151773,151776],{"class":89,"line":222},[87,151774,151775],{"class":205},"    @",[87,151777,151778],{"class":104},"classmethod\n",[87,151780,151781,151783,151786],{"class":89,"line":234},[87,151782,31748],{"class":171},[87,151784,151785],{"class":205}," get_school",[87,151787,151788],{"class":97},"(cls):\n",[87,151790,151791,151793,151796],{"class":89,"line":256},[87,151792,15702],{"class":171},[87,151794,151795],{"class":104}," cls",[87,151797,151798],{"class":97},".school\n",[87,151800,151801],{"class":89,"line":269},[87,151802,3355],{"emptyLinePlaceholder":1029},[87,151804,151805],{"class":89,"line":463},[87,151806,3355],{"emptyLinePlaceholder":1029},[87,151808,151809,151811],{"class":89,"line":469},[87,151810,31362],{"class":104},[87,151812,151813],{"class":97},"(Student.get_school())\n",[44,151815,151817],{"id":151816},"_11132-静态方法","11.13.2 静态方法",[19,151819,151820,151821,151824],{},"静态方法使用 ",[84,151822,151823],{},"@staticmethod","，不需要访问实例和类。",[77,151826,151828],{"className":31325,"code":151827,"language":31327,"meta":82,"style":82},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[84,151829,151830,151839,151846,151855,151866,151870,151874],{"__ignoreMap":82},[87,151831,151832,151834,151837],{"class":89,"line":90},[87,151833,15644],{"class":171},[87,151835,151836],{"class":205}," MathUtils",[87,151838,4693],{"class":97},[87,151840,151841,151843],{"class":89,"line":101},[87,151842,151775],{"class":205},[87,151844,151845],{"class":104},"staticmethod\n",[87,151847,151848,151850,151852],{"class":89,"line":120},[87,151849,31748],{"class":171},[87,151851,6160],{"class":205},[87,151853,151854],{"class":97},"(a, b):\n",[87,151856,151857,151859,151861,151863],{"class":89,"line":222},[87,151858,15702],{"class":171},[87,151860,11819],{"class":97},[87,151862,1575],{"class":171},[87,151864,151865],{"class":97}," b\n",[87,151867,151868],{"class":89,"line":234},[87,151869,3355],{"emptyLinePlaceholder":1029},[87,151871,151872],{"class":89,"line":256},[87,151873,3355],{"emptyLinePlaceholder":1029},[87,151875,151876,151878,151881,151883,151885,151887],{"class":89,"line":269},[87,151877,31362],{"class":104},[87,151879,151880],{"class":97},"(MathUtils.add(",[87,151882,1313],{"class":104},[87,151884,13385],{"class":97},[87,151886,1176],{"class":104},[87,151888,31444],{"class":97},[19,151890,151891],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151893,151895],{"id":151894},"_1114-dataclass","11.14 dataclass",[19,151897,151898,151901],{},[84,151899,151900],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[77,151903,151905],{"className":31325,"code":151904,"language":31327,"meta":82,"style":82},"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",[84,151906,151907,151919,151923,151927,151932,151940,151948,151956,151964,151968,151972,151992],{"__ignoreMap":82},[87,151908,151909,151911,151914,151916],{"class":89,"line":90},[87,151910,31684],{"class":171},[87,151912,151913],{"class":97}," dataclasses ",[87,151915,31339],{"class":171},[87,151917,151918],{"class":97}," dataclass\n",[87,151920,151921],{"class":89,"line":101},[87,151922,3355],{"emptyLinePlaceholder":1029},[87,151924,151925],{"class":89,"line":120},[87,151926,3355],{"emptyLinePlaceholder":1029},[87,151928,151929],{"class":89,"line":222},[87,151930,151931],{"class":205},"@dataclass\n",[87,151933,151934,151936,151938],{"class":89,"line":234},[87,151935,15644],{"class":171},[87,151937,8848],{"class":205},[87,151939,4693],{"class":97},[87,151941,151942,151945],{"class":89,"line":256},[87,151943,151944],{"class":97},"    name: ",[87,151946,151947],{"class":104},"str\n",[87,151949,151950,151953],{"class":89,"line":269},[87,151951,151952],{"class":97},"    age: ",[87,151954,151955],{"class":104},"int\n",[87,151957,151958,151961],{"class":89,"line":463},[87,151959,151960],{"class":97},"    score: ",[87,151962,151963],{"class":104},"float\n",[87,151965,151966],{"class":89,"line":469},[87,151967,3355],{"emptyLinePlaceholder":1029},[87,151969,151970],{"class":89,"line":2287},[87,151971,3355],{"emptyLinePlaceholder":1029},[87,151973,151974,151976,151978,151980,151982,151984,151986,151988,151990],{"class":89,"line":2568},[87,151975,150242],{"class":97},[87,151977,946],{"class":171},[87,151979,150646],{"class":97},[87,151981,150649],{"class":949},[87,151983,13385],{"class":97},[87,151985,1743],{"class":104},[87,151987,13385],{"class":97},[87,151989,2080],{"class":104},[87,151991,1108],{"class":97},[87,151993,151994,151996],{"class":89,"line":2573},[87,151995,31362],{"class":104},[87,151997,150803],{"class":97},[19,151999,152000,152001,1308,152003,152006],{},"它会自动生成 ",[84,152002,31776],{},[84,152004,152005],{},"__repr__"," 等方法。适合数据模型类。",[14,152008,152010],{"id":152009},"_1115-小案例学生类","11.15 小案例：学生类",[77,152012,152014],{"className":31325,"code":152013,"language":31327,"meta":82,"style":82},"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",[84,152015,152016,152024,152033,152045,152055,152065,152075,152079,152088,152101,152105,152114,152120,152132,152144,152156,152168,152172,152176,152182,152192,152201,152211,152219,152227,152236,152240,152244,152252,152288,152292,152296,152321,152328],{"__ignoreMap":82},[87,152017,152018,152020,152022],{"class":89,"line":90},[87,152019,15644],{"class":171},[87,152021,8848],{"class":205},[87,152023,4693],{"class":97},[87,152025,152026,152028,152030],{"class":89,"line":101},[87,152027,31748],{"class":171},[87,152029,31751],{"class":104},[87,152031,152032],{"class":97},"(self, student_id, name, age, score):\n",[87,152034,152035,152037,152040,152042],{"class":89,"line":120},[87,152036,31792],{"class":104},[87,152038,152039],{"class":97},".student_id ",[87,152041,946],{"class":171},[87,152043,152044],{"class":97}," student_id\n",[87,152046,152047,152049,152051,152053],{"class":89,"line":222},[87,152048,31792],{"class":104},[87,152050,150551],{"class":97},[87,152052,946],{"class":171},[87,152054,150556],{"class":97},[87,152056,152057,152059,152061,152063],{"class":89,"line":234},[87,152058,31792],{"class":104},[87,152060,150563],{"class":97},[87,152062,946],{"class":171},[87,152064,150568],{"class":97},[87,152066,152067,152069,152071,152073],{"class":89,"line":256},[87,152068,31792],{"class":104},[87,152070,150575],{"class":97},[87,152072,946],{"class":171},[87,152074,2535],{"class":97},[87,152076,152077],{"class":89,"line":269},[87,152078,3355],{"emptyLinePlaceholder":1029},[87,152080,152081,152083,152086],{"class":89,"line":463},[87,152082,31748],{"class":171},[87,152084,152085],{"class":205}," is_passed",[87,152087,31754],{"class":97},[87,152089,152090,152092,152094,152096,152098],{"class":89,"line":469},[87,152091,15702],{"class":171},[87,152093,39820],{"class":104},[87,152095,150575],{"class":97},[87,152097,2666],{"class":171},[87,152099,152100],{"class":104}," 60\n",[87,152102,152103],{"class":89,"line":2287},[87,152104,3355],{"emptyLinePlaceholder":1029},[87,152106,152107,152109,152112],{"class":89,"line":2568},[87,152108,31748],{"class":171},[87,152110,152111],{"class":205}," to_dict",[87,152113,31754],{"class":97},[87,152115,152116,152118],{"class":89,"line":2573},[87,152117,15702],{"class":171},[87,152119,98],{"class":97},[87,152121,152122,152125,152127,152129],{"class":89,"line":2579},[87,152123,152124],{"class":949},"            \"student_id\"",[87,152126,108],{"class":97},[87,152128,31770],{"class":104},[87,152130,152131],{"class":97},".student_id,\n",[87,152133,152134,152137,152139,152141],{"class":89,"line":2584},[87,152135,152136],{"class":949},"            \"name\"",[87,152138,108],{"class":97},[87,152140,31770],{"class":104},[87,152142,152143],{"class":97},".name,\n",[87,152145,152146,152149,152151,152153],{"class":89,"line":2598},[87,152147,152148],{"class":949},"            \"age\"",[87,152150,108],{"class":97},[87,152152,31770],{"class":104},[87,152154,152155],{"class":97},".age,\n",[87,152157,152158,152161,152163,152165],{"class":89,"line":2603},[87,152159,152160],{"class":949},"            \"score\"",[87,152162,108],{"class":97},[87,152164,31770],{"class":104},[87,152166,152167],{"class":97},".score,\n",[87,152169,152170],{"class":89,"line":2609},[87,152171,3484],{"class":97},[87,152173,152174],{"class":89,"line":2630},[87,152175,3355],{"emptyLinePlaceholder":1029},[87,152177,152178,152180],{"class":89,"line":2635},[87,152179,151775],{"class":205},[87,152181,151778],{"class":104},[87,152183,152184,152186,152189],{"class":89,"line":2649},[87,152185,31748],{"class":171},[87,152187,152188],{"class":205}," from_dict",[87,152190,152191],{"class":97},"(cls, data):\n",[87,152193,152194,152196,152198],{"class":89,"line":2654},[87,152195,15702],{"class":171},[87,152197,151795],{"class":104},[87,152199,152200],{"class":97},"(\n",[87,152202,152203,152206,152209],{"class":89,"line":2683},[87,152204,152205],{"class":97},"            data[",[87,152207,152208],{"class":949},"\"student_id\"",[87,152210,88762],{"class":97},[87,152212,152213,152215,152217],{"class":89,"line":2688},[87,152214,152205],{"class":97},[87,152216,63613],{"class":949},[87,152218,88762],{"class":97},[87,152220,152221,152223,152225],{"class":89,"line":2705},[87,152222,152205],{"class":97},[87,152224,70056],{"class":949},[87,152226,88762],{"class":97},[87,152228,152229,152231,152234],{"class":89,"line":2710},[87,152230,152205],{"class":97},[87,152232,152233],{"class":949},"\"score\"",[87,152235,88762],{"class":97},[87,152237,152238],{"class":89,"line":2715},[87,152239,39073],{"class":97},[87,152241,152242],{"class":89,"line":2720},[87,152243,3355],{"emptyLinePlaceholder":1029},[87,152245,152246,152248,152250],{"class":89,"line":2734},[87,152247,31748],{"class":171},[87,152249,150742],{"class":104},[87,152251,31754],{"class":97},[87,152253,152254,152256,152258,152260,152262,152265,152267,152270,152272,152274,152276,152278,152280,152282,152284,152286],{"class":89,"line":2739},[87,152255,15702],{"class":171},[87,152257,150751],{"class":171},[87,152259,1347],{"class":949},[87,152261,150213],{"class":104},[87,152263,152264],{"class":97},".student_id",[87,152266,2037],{"class":104},[87,152268,152269],{"class":104}," {self",[87,152271,81227],{"class":97},[87,152273,2037],{"class":104},[87,152275,152269],{"class":104},[87,152277,81239],{"class":97},[87,152279,2037],{"class":104},[87,152281,152269],{"class":104},[87,152283,150623],{"class":97},[87,152285,2037],{"class":104},[87,152287,26080],{"class":949},[87,152289,152290],{"class":89,"line":3532},[87,152291,3355],{"emptyLinePlaceholder":1029},[87,152293,152294],{"class":89,"line":3546},[87,152295,3355],{"emptyLinePlaceholder":1029},[87,152297,152298,152300,152302,152304,152307,152309,152311,152313,152315,152317,152319],{"class":89,"line":3554},[87,152299,150242],{"class":97},[87,152301,946],{"class":171},[87,152303,150646],{"class":97},[87,152305,152306],{"class":949},"\"001\"",[87,152308,13385],{"class":97},[87,152310,150649],{"class":949},[87,152312,13385],{"class":97},[87,152314,1743],{"class":104},[87,152316,13385],{"class":97},[87,152318,2080],{"class":104},[87,152320,1108],{"class":97},[87,152322,152323,152325],{"class":89,"line":3559},[87,152324,31362],{"class":104},[87,152326,152327],{"class":97},"(student.is_passed())\n",[87,152329,152330,152332],{"class":89,"line":3565},[87,152331,31362],{"class":104},[87,152333,152334],{"class":97},"(student.to_dict())\n",[19,152336,152337,101944,152340,152343],{},[84,152338,152339],{},"to_dict()",[84,152341,152342],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152345,152347],{"id":152346},"_1116-易错点","11.16 易错点",[1055,152349,152350,152356,152362,152367,152370,152373],{},[29,152351,152352,152353,29332],{},"类名推荐使用大驼峰，如 ",[84,152354,152355],{},"StudentManager",[29,152357,152358,152359,152361],{},"方法第一个参数必须写 ",[84,152360,31770],{},"，调用时不用传。",[29,152363,152364,152366],{},[84,152365,31776],{}," 不是普通方法，它在创建对象时自动执行。",[29,152368,152369],{},"私有属性不是绝对安全，只是约定和名称改写。",[29,152371,152372],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[29,152374,152375],{},"类中方法太多时，说明职责可能过重。",[14,152377,152379],{"id":152378},"_1117-本章练习","11.17 本章练习",[1055,152381,152382,152388,152394,152399,152412],{},[29,152383,152384,152385,152387],{},"定义 ",[84,152386,150329],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[29,152389,152384,152390,152393],{},[84,152391,152392],{},"Account"," 类，实现存款、取款、查询余额。",[29,152395,152384,152396,152398],{},[84,152397,18174],{}," 类，计算圆的周长和面积。",[29,152400,152384,152401,1308,152404,152407,152408,152411],{},[84,152402,152403],{},"Dog",[84,152405,152406],{},"Cat"," 类，并用同一个函数调用它们的 ",[84,152409,152410],{},"speak()"," 方法。",[29,152413,105292,152414,152416,152417,29332],{},[84,152415,151900],{}," 定义一个商品类 ",[84,152418,152419],{},"Product",[1006,152421,152422],{},"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":82,"searchDepth":101,"depth":101,"links":152424},[152425,152426,152427,152428,152429,152430,152432,152433,152434,152435,152436,152437,152438,152442,152443,152444,152445],{"id":150093,"depth":101,"text":150094},{"id":150276,"depth":101,"text":150277},{"id":150340,"depth":101,"text":150341},{"id":150417,"depth":101,"text":150418},{"id":150516,"depth":101,"text":150517},{"id":150680,"depth":101,"text":152431},"11.6 str",{"id":150806,"depth":101,"text":150807},{"id":151072,"depth":101,"text":151073},{"id":151186,"depth":101,"text":151187},{"id":151341,"depth":101,"text":151342},{"id":151465,"depth":101,"text":151466},{"id":151581,"depth":101,"text":151582},{"id":151730,"depth":101,"text":151731,"children":152439},[152440,152441],{"id":151734,"depth":120,"text":151735},{"id":151816,"depth":120,"text":151817},{"id":151894,"depth":101,"text":151895},{"id":152009,"depth":101,"text":152010},{"id":152346,"depth":101,"text":152347},{"id":152378,"depth":101,"text":152379},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150085,"description":1026},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152452,"title":152453,"body":152454,"description":1026,"extension":1027,"meta":155767,"navigation":1029,"path":155768,"seo":155769,"stem":155770,"__hash__":155771},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152455,"toc":155743},[152456,152459,152463,152466,152469,152498,152501,152509,152513,152517,152520,152543,152546,152552,152556,154002,154005,154026,154030,154033,154045,154048,154232,154235,154361,154364,154368,154372,154508,154512,154598,154602,154684,154688,154725,154729,154918,154922,154925,155155,155159,155162,155343,155346,155350,155353,155359,155362,155388,155392,155395,155409,155412,155437,155440,155454,155457,155474,155477,155494,155497,155514,155518,155544,155548,155571,155575,155578,155580,155586,155588,155609,155612,155618,155624,155628,155631,155707,155710,155714,155740],[10,152457,152453],{"id":152458},"_12-综合案例与复习路线",[14,152460,152462],{"id":152461},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,152464,152465],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,152467,152468],{},"一个合格的入门综合项目最好覆盖：",[1055,152470,152471,152474,152477,152480,152483,152486,152489,152492,152495],{},[29,152472,152473],{},"输入输出。",[29,152475,152476],{},"判断和循环。",[29,152478,152479],{},"函数拆分。",[29,152481,152482],{},"列表、字典等容器。",[29,152484,152485],{},"文件持久化。",[29,152487,152488],{},"异常处理。",[29,152490,152491],{},"模块拆分。",[29,152493,152494],{},"可选：面向对象。",[29,152496,152497],{},"可选：数据可视化。",[19,152499,152500],{},"本章整理两个方向：",[1055,152502,152503,152506],{},[29,152504,152505],{},"学生管理系统。",[29,152507,152508],{},"销售数据统计和可视化。",[14,152510,152512],{"id":152511},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[44,152514,152516],{"id":152515},"_1221-需求","12.2.1 需求",[19,152518,152519],{},"实现一个命令行学生管理系统：",[1055,152521,152522,152525,152528,152531,152534,152537,152540],{},[29,152523,152524],{},"添加学生。",[29,152526,152527],{},"删除学生。",[29,152529,152530],{},"修改学生。",[29,152532,152533],{},"查询学生。",[29,152535,152536],{},"显示所有学生。",[29,152538,152539],{},"保存到 JSON 文件。",[29,152541,152542],{},"程序启动时自动读取 JSON 文件。",[19,152544,152545],{},"学生字段：",[77,152547,152550],{"className":152548,"code":152549,"language":599,"meta":82},[597],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[84,152551,152549],{"__ignoreMap":82},[14,152553,152555],{"id":152554},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[77,152557,152559],{"className":31325,"code":152558,"language":31327,"meta":82,"style":82},"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",[84,152560,152561,152567,152577,152581,152595,152599,152603,152612,152624,152630,152634,152640,152671,152681,152688,152699,152705,152709,152713,152723,152754,152780,152784,152788,152797,152808,152819,152830,152841,152852,152863,152874,152878,152882,152892,152904,152920,152927,152934,152938,152942,152952,152960,152967,152980,152990,153001,153005,153009,153018,153026,153032,153044,153052,153063,153067,153071,153080,153096,153100,153107,153118,153123,153127,153143,153158,153173,153177,153182,153190,153198,153206,153214,153218,153223,153234,153238,153242,153251,153266,153276,153280,153292,153303,153307,153311,153316,153320,153331,153335,153339,153348,153363,153371,153375,153387,153397,153401,153405,153420,153433,153446,153450,153463,153475,153487,153491,153495,153506,153510,153514,153523,153538,153546,153550,153562,153572,153576,153580,153585,153589,153593,153603,153609,153631,153650,153669,153688,153693,153697,153701,153710,153718,153729,153733,153737,153763,153773,153778,153782,153786,153794,153804,153808,153816,153821,153837,153841,153855,153860,153874,153879,153892,153897,153910,153915,153928,153933,153946,153957,153961,153967,153978,153982,153986,153998],{"__ignoreMap":82},[87,152562,152563,152565],{"class":89,"line":90},[87,152564,31339],{"class":171},[87,152566,147852],{"class":97},[87,152568,152569,152571,152573,152575],{"class":89,"line":101},[87,152570,31684],{"class":171},[87,152572,109237],{"class":97},[87,152574,31339],{"class":171},[87,152576,109242],{"class":97},[87,152578,152579],{"class":89,"line":120},[87,152580,3355],{"emptyLinePlaceholder":1029},[87,152582,152583,152586,152588,152590,152593],{"class":89,"line":222},[87,152584,152585],{"class":104},"DATA_FILE",[87,152587,14514],{"class":171},[87,152589,109471],{"class":97},[87,152591,152592],{"class":949},"\"students.json\"",[87,152594,1108],{"class":97},[87,152596,152597],{"class":89,"line":234},[87,152598,3355],{"emptyLinePlaceholder":1029},[87,152600,152601],{"class":89,"line":256},[87,152602,3355],{"emptyLinePlaceholder":1029},[87,152604,152605,152607,152610],{"class":89,"line":269},[87,152606,32894],{"class":171},[87,152608,152609],{"class":205}," load_students",[87,152611,32900],{"class":97},[87,152613,152614,152616,152618,152621],{"class":89,"line":463},[87,152615,4055],{"class":171},[87,152617,39877],{"class":171},[87,152619,152620],{"class":104}," DATA_FILE",[87,152622,152623],{"class":97},".exists():\n",[87,152625,152626,152628],{"class":89,"line":469},[87,152627,15702],{"class":171},[87,152629,52775],{"class":97},[87,152631,152632],{"class":89,"line":2287},[87,152633,3355],{"emptyLinePlaceholder":1029},[87,152635,152636,152638],{"class":89,"line":2568},[87,152637,126710],{"class":171},[87,152639,4693],{"class":97},[87,152641,152642,152645,152647,152649,152651,152653,152655,152657,152659,152661,152663,152665,152667,152669],{"class":89,"line":2573},[87,152643,152644],{"class":171},"        with",[87,152646,147552],{"class":104},[87,152648,165],{"class":97},[87,152650,152585],{"class":104},[87,152652,13385],{"class":97},[87,152654,147562],{"class":949},[87,152656,13385],{"class":97},[87,152658,147567],{"class":492},[87,152660,946],{"class":171},[87,152662,147572],{"class":949},[87,152664,14664],{"class":97},[87,152666,32330],{"class":171},[87,152668,148914],{"class":492},[87,152670,4693],{"class":97},[87,152672,152673,152675,152677,152679],{"class":89,"line":2579},[87,152674,16681],{"class":171},[87,152676,148925],{"class":97},[87,152678,46301],{"class":492},[87,152680,1108],{"class":97},[87,152682,152683,152685],{"class":89,"line":2584},[87,152684,126738],{"class":171},[87,152686,152687],{"class":97}," json.JSONDecodeError:\n",[87,152689,152690,152692,152694,152697],{"class":89,"line":2598},[87,152691,33398],{"class":104},[87,152693,165],{"class":97},[87,152695,152696],{"class":949},"\"数据文件格式错误，已使用空数据启动\"",[87,152698,1108],{"class":97},[87,152700,152701,152703],{"class":89,"line":2603},[87,152702,15702],{"class":171},[87,152704,52775],{"class":97},[87,152706,152707],{"class":89,"line":2609},[87,152708,3355],{"emptyLinePlaceholder":1029},[87,152710,152711],{"class":89,"line":2630},[87,152712,3355],{"emptyLinePlaceholder":1029},[87,152714,152715,152717,152720],{"class":89,"line":2635},[87,152716,32894],{"class":171},[87,152718,152719],{"class":205}," save_students",[87,152721,152722],{"class":97},"(students):\n",[87,152724,152725,152727,152729,152731,152733,152735,152738,152740,152742,152744,152746,152748,152750,152752],{"class":89,"line":2649},[87,152726,35125],{"class":171},[87,152728,147552],{"class":104},[87,152730,165],{"class":97},[87,152732,152585],{"class":104},[87,152734,13385],{"class":97},[87,152736,152737],{"class":949},"\"w\"",[87,152739,13385],{"class":97},[87,152741,147567],{"class":492},[87,152743,946],{"class":171},[87,152745,147572],{"class":949},[87,152747,14664],{"class":97},[87,152749,32330],{"class":171},[87,152751,148914],{"class":492},[87,152753,4693],{"class":97},[87,152755,152756,152759,152761,152763,152765,152767,152769,152771,152774,152776,152778],{"class":89,"line":2654},[87,152757,152758],{"class":97},"        json.dump(students, ",[87,152760,46301],{"class":492},[87,152762,13385],{"class":97},[87,152764,147898],{"class":492},[87,152766,946],{"class":171},[87,152768,34934],{"class":104},[87,152770,13385],{"class":97},[87,152772,152773],{"class":492},"indent",[87,152775,946],{"class":171},[87,152777,1176],{"class":104},[87,152779,1108],{"class":97},[87,152781,152782],{"class":89,"line":2683},[87,152783,3355],{"emptyLinePlaceholder":1029},[87,152785,152786],{"class":89,"line":2688},[87,152787,3355],{"emptyLinePlaceholder":1029},[87,152789,152790,152792,152795],{"class":89,"line":2705},[87,152791,32894],{"class":171},[87,152793,152794],{"class":205}," show_menu",[87,152796,32900],{"class":97},[87,152798,152799,152801,152803,152806],{"class":89,"line":2710},[87,152800,32246],{"class":104},[87,152802,165],{"class":97},[87,152804,152805],{"class":949},"\"====== 学生管理系统 ======\"",[87,152807,1108],{"class":97},[87,152809,152810,152812,152814,152817],{"class":89,"line":2715},[87,152811,32246],{"class":104},[87,152813,165],{"class":97},[87,152815,152816],{"class":949},"\"1. 添加学生\"",[87,152818,1108],{"class":97},[87,152820,152821,152823,152825,152828],{"class":89,"line":2720},[87,152822,32246],{"class":104},[87,152824,165],{"class":97},[87,152826,152827],{"class":949},"\"2. 删除学生\"",[87,152829,1108],{"class":97},[87,152831,152832,152834,152836,152839],{"class":89,"line":2734},[87,152833,32246],{"class":104},[87,152835,165],{"class":97},[87,152837,152838],{"class":949},"\"3. 修改学生\"",[87,152840,1108],{"class":97},[87,152842,152843,152845,152847,152850],{"class":89,"line":2739},[87,152844,32246],{"class":104},[87,152846,165],{"class":97},[87,152848,152849],{"class":949},"\"4. 查询学生\"",[87,152851,1108],{"class":97},[87,152853,152854,152856,152858,152861],{"class":89,"line":3532},[87,152855,32246],{"class":104},[87,152857,165],{"class":97},[87,152859,152860],{"class":949},"\"5. 显示所有学生\"",[87,152862,1108],{"class":97},[87,152864,152865,152867,152869,152872],{"class":89,"line":3546},[87,152866,32246],{"class":104},[87,152868,165],{"class":97},[87,152870,152871],{"class":949},"\"0. 退出系统\"",[87,152873,1108],{"class":97},[87,152875,152876],{"class":89,"line":3554},[87,152877,3355],{"emptyLinePlaceholder":1029},[87,152879,152880],{"class":89,"line":3559},[87,152881,3355],{"emptyLinePlaceholder":1029},[87,152883,152884,152886,152889],{"class":89,"line":3565},[87,152885,32894],{"class":171},[87,152887,152888],{"class":205}," find_student",[87,152890,152891],{"class":97},"(students, student_id):\n",[87,152893,152894,152896,152899,152901],{"class":89,"line":3571},[87,152895,4155],{"class":171},[87,152897,152898],{"class":97}," student ",[87,152900,26990],{"class":171},[87,152902,152903],{"class":97}," students:\n",[87,152905,152906,152908,152911,152913,152915,152917],{"class":89,"line":3576},[87,152907,3452],{"class":171},[87,152909,152910],{"class":97}," student[",[87,152912,152208],{"class":949},[87,152914,5396],{"class":97},[87,152916,3903],{"class":171},[87,152918,152919],{"class":97}," student_id:\n",[87,152921,152922,152924],{"class":89,"line":8898},[87,152923,16681],{"class":171},[87,152925,152926],{"class":97}," student\n",[87,152928,152929,152931],{"class":89,"line":8922},[87,152930,5044],{"class":171},[87,152932,152933],{"class":104}," None\n",[87,152935,152936],{"class":89,"line":8927},[87,152937,3355],{"emptyLinePlaceholder":1029},[87,152939,152940],{"class":89,"line":8933},[87,152941,3355],{"emptyLinePlaceholder":1029},[87,152943,152944,152946,152949],{"class":89,"line":8960},[87,152945,32894],{"class":171},[87,152947,152948],{"class":205}," input_int",[87,152950,152951],{"class":97},"(prompt):\n",[87,152953,152954,152956,152958],{"class":89,"line":8965},[87,152955,3206],{"class":171},[87,152957,96218],{"class":104},[87,152959,4693],{"class":97},[87,152961,152962,152965],{"class":89,"line":8971},[87,152963,152964],{"class":171},"        try",[87,152966,4693],{"class":97},[87,152968,152969,152971,152973,152975,152977],{"class":89,"line":8983},[87,152970,16681],{"class":171},[87,152972,3337],{"class":104},[87,152974,165],{"class":97},[87,152976,54757],{"class":104},[87,152978,152979],{"class":97},"(prompt))\n",[87,152981,152982,152985,152988],{"class":89,"line":8995},[87,152983,152984],{"class":171},"        except",[87,152986,152987],{"class":104}," ValueError",[87,152989,4693],{"class":97},[87,152991,152992,152994,152996,152999],{"class":89,"line":9007},[87,152993,35597],{"class":104},[87,152995,165],{"class":97},[87,152997,152998],{"class":949},"\"请输入整数\"",[87,153000,1108],{"class":97},[87,153002,153003],{"class":89,"line":10666},[87,153004,3355],{"emptyLinePlaceholder":1029},[87,153006,153007],{"class":89,"line":10691},[87,153008,3355],{"emptyLinePlaceholder":1029},[87,153010,153011,153013,153016],{"class":89,"line":10714},[87,153012,32894],{"class":171},[87,153014,153015],{"class":205}," input_float",[87,153017,152951],{"class":97},[87,153019,153020,153022,153024],{"class":89,"line":10738},[87,153021,3206],{"class":171},[87,153023,96218],{"class":104},[87,153025,4693],{"class":97},[87,153027,153028,153030],{"class":89,"line":10743},[87,153029,152964],{"class":171},[87,153031,4693],{"class":97},[87,153033,153034,153036,153038,153040,153042],{"class":89,"line":10748},[87,153035,16681],{"class":171},[87,153037,110723],{"class":104},[87,153039,165],{"class":97},[87,153041,54757],{"class":104},[87,153043,152979],{"class":97},[87,153045,153046,153048,153050],{"class":89,"line":10753},[87,153047,152984],{"class":171},[87,153049,152987],{"class":104},[87,153051,4693],{"class":97},[87,153053,153054,153056,153058,153061],{"class":89,"line":10762},[87,153055,35597],{"class":104},[87,153057,165],{"class":97},[87,153059,153060],{"class":949},"\"请输入数字\"",[87,153062,1108],{"class":97},[87,153064,153065],{"class":89,"line":10767},[87,153066,3355],{"emptyLinePlaceholder":1029},[87,153068,153069],{"class":89,"line":10773},[87,153070,3355],{"emptyLinePlaceholder":1029},[87,153072,153073,153075,153078],{"class":89,"line":10794},[87,153074,32894],{"class":171},[87,153076,153077],{"class":205}," add_student",[87,153079,152722],{"class":97},[87,153081,153082,153085,153087,153089,153091,153094],{"class":89,"line":10800},[87,153083,153084],{"class":97},"    student_id ",[87,153086,946],{"class":171},[87,153088,61541],{"class":104},[87,153090,165],{"class":97},[87,153092,153093],{"class":949},"\"请输入学号:\"",[87,153095,1108],{"class":97},[87,153097,153098],{"class":89,"line":10814},[87,153099,3355],{"emptyLinePlaceholder":1029},[87,153101,153102,153104],{"class":89,"line":10820},[87,153103,4055],{"class":171},[87,153105,153106],{"class":97}," find_student(students, student_id):\n",[87,153108,153109,153111,153113,153116],{"class":89,"line":10847},[87,153110,33398],{"class":104},[87,153112,165],{"class":97},[87,153114,153115],{"class":949},"\"学号已存在\"",[87,153117,1108],{"class":97},[87,153119,153120],{"class":89,"line":10856},[87,153121,153122],{"class":171},"        return\n",[87,153124,153125],{"class":89,"line":10862},[87,153126,3355],{"emptyLinePlaceholder":1029},[87,153128,153129,153132,153134,153136,153138,153141],{"class":89,"line":10870},[87,153130,153131],{"class":97},"    name ",[87,153133,946],{"class":171},[87,153135,61541],{"class":104},[87,153137,165],{"class":97},[87,153139,153140],{"class":949},"\"请输入姓名:\"",[87,153142,1108],{"class":97},[87,153144,153145,153148,153150,153153,153156],{"class":89,"line":10875},[87,153146,153147],{"class":97},"    age ",[87,153149,946],{"class":171},[87,153151,153152],{"class":97}," input_int(",[87,153154,153155],{"class":949},"\"请输入年龄:\"",[87,153157,1108],{"class":97},[87,153159,153160,153163,153165,153168,153171],{"class":89,"line":17553},[87,153161,153162],{"class":97},"    score ",[87,153164,946],{"class":171},[87,153166,153167],{"class":97}," input_float(",[87,153169,153170],{"class":949},"\"请输入成绩:\"",[87,153172,1108],{"class":97},[87,153174,153175],{"class":89,"line":17559},[87,153176,3355],{"emptyLinePlaceholder":1029},[87,153178,153179],{"class":89,"line":17582},[87,153180,153181],{"class":97},"    students.append({\n",[87,153183,153184,153187],{"class":89,"line":17588},[87,153185,153186],{"class":949},"        \"student_id\"",[87,153188,153189],{"class":97},": student_id,\n",[87,153191,153192,153195],{"class":89,"line":17611},[87,153193,153194],{"class":949},"        \"name\"",[87,153196,153197],{"class":97},": name,\n",[87,153199,153200,153203],{"class":89,"line":17625},[87,153201,153202],{"class":949},"        \"age\"",[87,153204,153205],{"class":97},": age,\n",[87,153207,153208,153211],{"class":89,"line":17645},[87,153209,153210],{"class":949},"        \"score\"",[87,153212,153213],{"class":97},": score,\n",[87,153215,153216],{"class":89,"line":17651},[87,153217,34408],{"class":97},[87,153219,153220],{"class":89,"line":17662},[87,153221,153222],{"class":97},"    save_students(students)\n",[87,153224,153225,153227,153229,153232],{"class":89,"line":17685},[87,153226,32246],{"class":104},[87,153228,165],{"class":97},[87,153230,153231],{"class":949},"\"添加成功\"",[87,153233,1108],{"class":97},[87,153235,153236],{"class":89,"line":17707},[87,153237,3355],{"emptyLinePlaceholder":1029},[87,153239,153240],{"class":89,"line":17712},[87,153241,3355],{"emptyLinePlaceholder":1029},[87,153243,153244,153246,153249],{"class":89,"line":17718},[87,153245,32894],{"class":171},[87,153247,153248],{"class":205}," delete_student",[87,153250,152722],{"class":97},[87,153252,153253,153255,153257,153259,153261,153264],{"class":89,"line":17732},[87,153254,153084],{"class":97},[87,153256,946],{"class":171},[87,153258,61541],{"class":104},[87,153260,165],{"class":97},[87,153262,153263],{"class":949},"\"请输入要删除的学号:\"",[87,153265,1108],{"class":97},[87,153267,153268,153271,153273],{"class":89,"line":17745},[87,153269,153270],{"class":97},"    student ",[87,153272,946],{"class":171},[87,153274,153275],{"class":97}," find_student(students, student_id)\n",[87,153277,153278],{"class":89,"line":17750},[87,153279,3355],{"emptyLinePlaceholder":1029},[87,153281,153282,153284,153286,153288,153290],{"class":89,"line":17764},[87,153283,4055],{"class":171},[87,153285,152898],{"class":97},[87,153287,39874],{"class":171},[87,153289,39880],{"class":104},[87,153291,4693],{"class":97},[87,153293,153294,153296,153298,153301],{"class":89,"line":17769},[87,153295,33398],{"class":104},[87,153297,165],{"class":97},[87,153299,153300],{"class":949},"\"学生不存在\"",[87,153302,1108],{"class":97},[87,153304,153305],{"class":89,"line":17775},[87,153306,153122],{"class":171},[87,153308,153309],{"class":89,"line":17780},[87,153310,3355],{"emptyLinePlaceholder":1029},[87,153312,153313],{"class":89,"line":17794},[87,153314,153315],{"class":97},"    students.remove(student)\n",[87,153317,153318],{"class":89,"line":17799},[87,153319,153222],{"class":97},[87,153321,153322,153324,153326,153329],{"class":89,"line":17804},[87,153323,32246],{"class":104},[87,153325,165],{"class":97},[87,153327,153328],{"class":949},"\"删除成功\"",[87,153330,1108],{"class":97},[87,153332,153333],{"class":89,"line":17818},[87,153334,3355],{"emptyLinePlaceholder":1029},[87,153336,153337],{"class":89,"line":17830},[87,153338,3355],{"emptyLinePlaceholder":1029},[87,153340,153341,153343,153346],{"class":89,"line":17835},[87,153342,32894],{"class":171},[87,153344,153345],{"class":205}," update_student",[87,153347,152722],{"class":97},[87,153349,153350,153352,153354,153356,153358,153361],{"class":89,"line":17848},[87,153351,153084],{"class":97},[87,153353,946],{"class":171},[87,153355,61541],{"class":104},[87,153357,165],{"class":97},[87,153359,153360],{"class":949},"\"请输入要修改的学号:\"",[87,153362,1108],{"class":97},[87,153364,153365,153367,153369],{"class":89,"line":17853},[87,153366,153270],{"class":97},[87,153368,946],{"class":171},[87,153370,153275],{"class":97},[87,153372,153373],{"class":89,"line":17858},[87,153374,3355],{"emptyLinePlaceholder":1029},[87,153376,153377,153379,153381,153383,153385],{"class":89,"line":17863},[87,153378,4055],{"class":171},[87,153380,152898],{"class":97},[87,153382,39874],{"class":171},[87,153384,39880],{"class":104},[87,153386,4693],{"class":97},[87,153388,153389,153391,153393,153395],{"class":89,"line":17876},[87,153390,33398],{"class":104},[87,153392,165],{"class":97},[87,153394,153300],{"class":949},[87,153396,1108],{"class":97},[87,153398,153399],{"class":89,"line":17881},[87,153400,153122],{"class":171},[87,153402,153403],{"class":89,"line":33580},[87,153404,3355],{"emptyLinePlaceholder":1029},[87,153406,153407,153409,153411,153413,153415,153418],{"class":89,"line":33586},[87,153408,153131],{"class":97},[87,153410,946],{"class":171},[87,153412,61541],{"class":104},[87,153414,165],{"class":97},[87,153416,153417],{"class":949},"\"请输入新姓名:\"",[87,153419,1108],{"class":97},[87,153421,153422,153424,153426,153428,153431],{"class":89,"line":33592},[87,153423,153147],{"class":97},[87,153425,946],{"class":171},[87,153427,153152],{"class":97},[87,153429,153430],{"class":949},"\"请输入新年龄:\"",[87,153432,1108],{"class":97},[87,153434,153435,153437,153439,153441,153444],{"class":89,"line":33598},[87,153436,153162],{"class":97},[87,153438,946],{"class":171},[87,153440,153167],{"class":97},[87,153442,153443],{"class":949},"\"请输入新成绩:\"",[87,153445,1108],{"class":97},[87,153447,153448],{"class":89,"line":33604},[87,153449,3355],{"emptyLinePlaceholder":1029},[87,153451,153452,153455,153457,153459,153461],{"class":89,"line":33615},[87,153453,153454],{"class":97},"    student[",[87,153456,63613],{"class":949},[87,153458,5396],{"class":97},[87,153460,946],{"class":171},[87,153462,150556],{"class":97},[87,153464,153465,153467,153469,153471,153473],{"class":89,"line":33621},[87,153466,153454],{"class":97},[87,153468,70056],{"class":949},[87,153470,5396],{"class":97},[87,153472,946],{"class":171},[87,153474,150568],{"class":97},[87,153476,153477,153479,153481,153483,153485],{"class":89,"line":33641},[87,153478,153454],{"class":97},[87,153480,152233],{"class":949},[87,153482,5396],{"class":97},[87,153484,946],{"class":171},[87,153486,2535],{"class":97},[87,153488,153489],{"class":89,"line":33647},[87,153490,3355],{"emptyLinePlaceholder":1029},[87,153492,153493],{"class":89,"line":33658},[87,153494,153222],{"class":97},[87,153496,153497,153499,153501,153504],{"class":89,"line":33664},[87,153498,32246],{"class":104},[87,153500,165],{"class":97},[87,153502,153503],{"class":949},"\"修改成功\"",[87,153505,1108],{"class":97},[87,153507,153508],{"class":89,"line":33670},[87,153509,3355],{"emptyLinePlaceholder":1029},[87,153511,153512],{"class":89,"line":33676},[87,153513,3355],{"emptyLinePlaceholder":1029},[87,153515,153516,153518,153521],{"class":89,"line":33682},[87,153517,32894],{"class":171},[87,153519,153520],{"class":205}," query_student",[87,153522,152722],{"class":97},[87,153524,153525,153527,153529,153531,153533,153536],{"class":89,"line":33688},[87,153526,153084],{"class":97},[87,153528,946],{"class":171},[87,153530,61541],{"class":104},[87,153532,165],{"class":97},[87,153534,153535],{"class":949},"\"请输入要查询的学号:\"",[87,153537,1108],{"class":97},[87,153539,153540,153542,153544],{"class":89,"line":33694},[87,153541,153270],{"class":97},[87,153543,946],{"class":171},[87,153545,153275],{"class":97},[87,153547,153548],{"class":89,"line":33700},[87,153549,3355],{"emptyLinePlaceholder":1029},[87,153551,153552,153554,153556,153558,153560],{"class":89,"line":33720},[87,153553,4055],{"class":171},[87,153555,152898],{"class":97},[87,153557,39874],{"class":171},[87,153559,39880],{"class":104},[87,153561,4693],{"class":97},[87,153563,153564,153566,153568,153570],{"class":89,"line":33726},[87,153565,33398],{"class":104},[87,153567,165],{"class":97},[87,153569,153300],{"class":949},[87,153571,1108],{"class":97},[87,153573,153574],{"class":89,"line":33742},[87,153575,153122],{"class":171},[87,153577,153578],{"class":89,"line":33748},[87,153579,3355],{"emptyLinePlaceholder":1029},[87,153581,153582],{"class":89,"line":33762},[87,153583,153584],{"class":97},"    print_student(student)\n",[87,153586,153587],{"class":89,"line":33768},[87,153588,3355],{"emptyLinePlaceholder":1029},[87,153590,153591],{"class":89,"line":33783},[87,153592,3355],{"emptyLinePlaceholder":1029},[87,153594,153595,153597,153600],{"class":89,"line":33789},[87,153596,32894],{"class":171},[87,153598,153599],{"class":205}," print_student",[87,153601,153602],{"class":97},"(student):\n",[87,153604,153605,153607],{"class":89,"line":33798},[87,153606,32246],{"class":104},[87,153608,152200],{"class":97},[87,153610,153611,153614,153616,153618,153621,153624,153626,153629],{"class":89,"line":33804},[87,153612,153613],{"class":171},"        f",[87,153615,1347],{"class":949},[87,153617,1988],{"class":104},[87,153619,153620],{"class":97},"student[",[87,153622,153623],{"class":949},"'student_id'",[87,153625,2031],{"class":97},[87,153627,153628],{"class":104},"}\\t",[87,153630,26080],{"class":949},[87,153632,153633,153635,153637,153639,153641,153644,153646,153648],{"class":89,"line":33813},[87,153634,153613],{"class":171},[87,153636,1347],{"class":949},[87,153638,1988],{"class":104},[87,153640,153620],{"class":97},[87,153642,153643],{"class":949},"'name'",[87,153645,2031],{"class":97},[87,153647,153628],{"class":104},[87,153649,26080],{"class":949},[87,153651,153652,153654,153656,153658,153660,153663,153665,153667],{"class":89,"line":33819},[87,153653,153613],{"class":171},[87,153655,1347],{"class":949},[87,153657,1988],{"class":104},[87,153659,153620],{"class":97},[87,153661,153662],{"class":949},"'age'",[87,153664,2031],{"class":97},[87,153666,153628],{"class":104},[87,153668,26080],{"class":949},[87,153670,153671,153673,153675,153677,153679,153682,153684,153686],{"class":89,"line":33825},[87,153672,153613],{"class":171},[87,153674,1347],{"class":949},[87,153676,1988],{"class":104},[87,153678,153620],{"class":97},[87,153680,153681],{"class":949},"'score'",[87,153683,2031],{"class":97},[87,153685,2037],{"class":104},[87,153687,26080],{"class":949},[87,153689,153690],{"class":89,"line":33834},[87,153691,153692],{"class":97},"    )\n",[87,153694,153695],{"class":89,"line":33840},[87,153696,3355],{"emptyLinePlaceholder":1029},[87,153698,153699],{"class":89,"line":33851},[87,153700,3355],{"emptyLinePlaceholder":1029},[87,153702,153703,153705,153708],{"class":89,"line":33857},[87,153704,32894],{"class":171},[87,153706,153707],{"class":205}," show_all_students",[87,153709,152722],{"class":97},[87,153711,153712,153714,153716],{"class":89,"line":33876},[87,153713,4055],{"class":171},[87,153715,39877],{"class":171},[87,153717,152903],{"class":97},[87,153719,153720,153722,153724,153727],{"class":89,"line":33882},[87,153721,33398],{"class":104},[87,153723,165],{"class":97},[87,153725,153726],{"class":949},"\"暂无学生\"",[87,153728,1108],{"class":97},[87,153730,153731],{"class":89,"line":33893},[87,153732,153122],{"class":171},[87,153734,153735],{"class":89,"line":33899},[87,153736,3355],{"emptyLinePlaceholder":1029},[87,153738,153739,153741,153743,153746,153748,153751,153753,153756,153758,153761],{"class":89,"line":33919},[87,153740,32246],{"class":104},[87,153742,165],{"class":97},[87,153744,153745],{"class":949},"\"学号",[87,153747,2191],{"class":104},[87,153749,153750],{"class":949},"姓名",[87,153752,2191],{"class":104},[87,153754,153755],{"class":949},"年龄",[87,153757,2191],{"class":104},[87,153759,153760],{"class":949},"成绩\"",[87,153762,1108],{"class":97},[87,153764,153765,153767,153769,153771],{"class":89,"line":33935},[87,153766,4155],{"class":171},[87,153768,152898],{"class":97},[87,153770,26990],{"class":171},[87,153772,152903],{"class":97},[87,153774,153775],{"class":89,"line":33941},[87,153776,153777],{"class":97},"        print_student(student)\n",[87,153779,153780],{"class":89,"line":33955},[87,153781,3355],{"emptyLinePlaceholder":1029},[87,153783,153784],{"class":89,"line":33961},[87,153785,3355],{"emptyLinePlaceholder":1029},[87,153787,153788,153790,153792],{"class":89,"line":33967},[87,153789,32894],{"class":171},[87,153791,2928],{"class":205},[87,153793,32900],{"class":97},[87,153795,153796,153799,153801],{"class":89,"line":33978},[87,153797,153798],{"class":97},"    students ",[87,153800,946],{"class":171},[87,153802,153803],{"class":97}," load_students()\n",[87,153805,153806],{"class":89,"line":33984},[87,153807,3355],{"emptyLinePlaceholder":1029},[87,153809,153810,153812,153814],{"class":89,"line":33990},[87,153811,3206],{"class":171},[87,153813,96218],{"class":104},[87,153815,4693],{"class":97},[87,153817,153818],{"class":89,"line":34000},[87,153819,153820],{"class":97},"        show_menu()\n",[87,153822,153823,153826,153828,153830,153832,153835],{"class":89,"line":34006},[87,153824,153825],{"class":97},"        choice ",[87,153827,946],{"class":171},[87,153829,61541],{"class":104},[87,153831,165],{"class":97},[87,153833,153834],{"class":949},"\"请输入操作:\"",[87,153836,1108],{"class":97},[87,153838,153839],{"class":89,"line":34017},[87,153840,3355],{"emptyLinePlaceholder":1029},[87,153842,153843,153845,153848,153850,153853],{"class":89,"line":34023},[87,153844,3452],{"class":171},[87,153846,153847],{"class":97}," choice ",[87,153849,3903],{"class":171},[87,153851,153852],{"class":949}," \"1\"",[87,153854,4693],{"class":97},[87,153856,153857],{"class":89,"line":34033},[87,153858,153859],{"class":97},"            add_student(students)\n",[87,153861,153862,153865,153867,153869,153872],{"class":89,"line":34038},[87,153863,153864],{"class":171},"        elif",[87,153866,153847],{"class":97},[87,153868,3903],{"class":171},[87,153870,153871],{"class":949}," \"2\"",[87,153873,4693],{"class":97},[87,153875,153876],{"class":89,"line":34044},[87,153877,153878],{"class":97},"            delete_student(students)\n",[87,153880,153881,153883,153885,153887,153890],{"class":89,"line":34093},[87,153882,153864],{"class":171},[87,153884,153847],{"class":97},[87,153886,3903],{"class":171},[87,153888,153889],{"class":949}," \"3\"",[87,153891,4693],{"class":97},[87,153893,153894],{"class":89,"line":34140},[87,153895,153896],{"class":97},"            update_student(students)\n",[87,153898,153899,153901,153903,153905,153908],{"class":89,"line":34145},[87,153900,153864],{"class":171},[87,153902,153847],{"class":97},[87,153904,3903],{"class":171},[87,153906,153907],{"class":949}," \"4\"",[87,153909,4693],{"class":97},[87,153911,153912],{"class":89,"line":34151},[87,153913,153914],{"class":97},"            query_student(students)\n",[87,153916,153917,153919,153921,153923,153926],{"class":89,"line":34170},[87,153918,153864],{"class":171},[87,153920,153847],{"class":97},[87,153922,3903],{"class":171},[87,153924,153925],{"class":949}," \"5\"",[87,153927,4693],{"class":97},[87,153929,153930],{"class":89,"line":34176},[87,153931,153932],{"class":97},"            show_all_students(students)\n",[87,153934,153935,153937,153939,153941,153944],{"class":89,"line":34196},[87,153936,153864],{"class":171},[87,153938,153847],{"class":97},[87,153940,3903],{"class":171},[87,153942,153943],{"class":949}," \"0\"",[87,153945,4693],{"class":97},[87,153947,153948,153950,153952,153955],{"class":89,"line":34202},[87,153949,35597],{"class":104},[87,153951,165],{"class":97},[87,153953,153954],{"class":949},"\"退出系统\"",[87,153956,1108],{"class":97},[87,153958,153959],{"class":89,"line":34208},[87,153960,116024],{"class":171},[87,153962,153963,153965],{"class":89,"line":34218},[87,153964,3489],{"class":171},[87,153966,4693],{"class":97},[87,153968,153969,153971,153973,153976],{"class":89,"line":34223},[87,153970,35597],{"class":104},[87,153972,165],{"class":97},[87,153974,153975],{"class":949},"\"输入错误\"",[87,153977,1108],{"class":97},[87,153979,153980],{"class":89,"line":34229},[87,153981,3355],{"emptyLinePlaceholder":1029},[87,153983,153984],{"class":89,"line":34245},[87,153985,3355],{"emptyLinePlaceholder":1029},[87,153987,153988,153990,153992,153994,153996],{"class":89,"line":34290},[87,153989,2488],{"class":171},[87,153991,32167],{"class":104},[87,153993,102485],{"class":171},[87,153995,102488],{"class":949},[87,153997,4693],{"class":97},[87,153999,154000],{"class":89,"line":34296},[87,154001,102495],{"class":97},[19,154003,154004],{},"这个项目串联了：",[1055,154006,154007,154010,154013,154016,154019,154021],{},[29,154008,154009],{},"菜单循环。",[29,154011,154012],{},"函数封装。",[29,154014,154015],{},"列表字典。",[29,154017,154018],{},"JSON 读写。",[29,154020,152488],{},[29,154022,154023,29332],{},[84,154024,154025],{},"if __name__ == \"__main__\"",[14,154027,154029],{"id":154028},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154031,154032],{},"可以进一步拆成两个类：",[1055,154034,154035,154040],{},[29,154036,154037,154039],{},[84,154038,150329],{},"：表示单个学生。",[29,154041,154042,154044],{},[84,154043,152355],{},"：负责学生增删改查和文件保存。",[19,154046,154047],{},"示意代码：",[77,154049,154051],{"className":31325,"code":154050,"language":31327,"meta":82,"style":82},"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",[84,154052,154053,154063,154067,154071,154075,154083,154090,154096,154102,154108,154112,154120,154126,154136,154146,154156,154166,154170,154174,154180,154188,154196,154204,154212,154220,154228],{"__ignoreMap":82},[87,154054,154055,154057,154059,154061],{"class":89,"line":90},[87,154056,31684],{"class":171},[87,154058,151913],{"class":97},[87,154060,31339],{"class":171},[87,154062,151918],{"class":97},[87,154064,154065],{"class":89,"line":101},[87,154066,3355],{"emptyLinePlaceholder":1029},[87,154068,154069],{"class":89,"line":120},[87,154070,3355],{"emptyLinePlaceholder":1029},[87,154072,154073],{"class":89,"line":222},[87,154074,151931],{"class":205},[87,154076,154077,154079,154081],{"class":89,"line":234},[87,154078,15644],{"class":171},[87,154080,8848],{"class":205},[87,154082,4693],{"class":97},[87,154084,154085,154088],{"class":89,"line":256},[87,154086,154087],{"class":97},"    student_id: ",[87,154089,151947],{"class":104},[87,154091,154092,154094],{"class":89,"line":269},[87,154093,151944],{"class":97},[87,154095,151947],{"class":104},[87,154097,154098,154100],{"class":89,"line":463},[87,154099,151952],{"class":97},[87,154101,151955],{"class":104},[87,154103,154104,154106],{"class":89,"line":469},[87,154105,151960],{"class":97},[87,154107,151963],{"class":104},[87,154109,154110],{"class":89,"line":2287},[87,154111,3355],{"emptyLinePlaceholder":1029},[87,154113,154114,154116,154118],{"class":89,"line":2568},[87,154115,31748],{"class":171},[87,154117,152111],{"class":205},[87,154119,31754],{"class":97},[87,154121,154122,154124],{"class":89,"line":2573},[87,154123,15702],{"class":171},[87,154125,98],{"class":97},[87,154127,154128,154130,154132,154134],{"class":89,"line":2579},[87,154129,152124],{"class":949},[87,154131,108],{"class":97},[87,154133,31770],{"class":104},[87,154135,152131],{"class":97},[87,154137,154138,154140,154142,154144],{"class":89,"line":2584},[87,154139,152136],{"class":949},[87,154141,108],{"class":97},[87,154143,31770],{"class":104},[87,154145,152143],{"class":97},[87,154147,154148,154150,154152,154154],{"class":89,"line":2598},[87,154149,152148],{"class":949},[87,154151,108],{"class":97},[87,154153,31770],{"class":104},[87,154155,152155],{"class":97},[87,154157,154158,154160,154162,154164],{"class":89,"line":2603},[87,154159,152160],{"class":949},[87,154161,108],{"class":97},[87,154163,31770],{"class":104},[87,154165,152167],{"class":97},[87,154167,154168],{"class":89,"line":2609},[87,154169,3484],{"class":97},[87,154171,154172],{"class":89,"line":2630},[87,154173,3355],{"emptyLinePlaceholder":1029},[87,154175,154176,154178],{"class":89,"line":2635},[87,154177,151775],{"class":205},[87,154179,151778],{"class":104},[87,154181,154182,154184,154186],{"class":89,"line":2649},[87,154183,31748],{"class":171},[87,154185,152188],{"class":205},[87,154187,152191],{"class":97},[87,154189,154190,154192,154194],{"class":89,"line":2654},[87,154191,15702],{"class":171},[87,154193,151795],{"class":104},[87,154195,152200],{"class":97},[87,154197,154198,154200,154202],{"class":89,"line":2683},[87,154199,152205],{"class":97},[87,154201,152208],{"class":949},[87,154203,88762],{"class":97},[87,154205,154206,154208,154210],{"class":89,"line":2688},[87,154207,152205],{"class":97},[87,154209,63613],{"class":949},[87,154211,88762],{"class":97},[87,154213,154214,154216,154218],{"class":89,"line":2705},[87,154215,152205],{"class":97},[87,154217,70056],{"class":949},[87,154219,88762],{"class":97},[87,154221,154222,154224,154226],{"class":89,"line":2710},[87,154223,152205],{"class":97},[87,154225,152233],{"class":949},[87,154227,88762],{"class":97},[87,154229,154230],{"class":89,"line":2715},[87,154231,39073],{"class":97},[19,154233,154234],{},"管理器示意：",[77,154236,154238],{"className":31325,"code":154237,"language":31327,"meta":82,"style":82},"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",[84,154239,154240,154249,154257,154268,154272,154282,154295,154306,154313,154319,154323,154332,154341,154347,154354],{"__ignoreMap":82},[87,154241,154242,154244,154247],{"class":89,"line":90},[87,154243,15644],{"class":171},[87,154245,154246],{"class":205}," StudentManager",[87,154248,4693],{"class":97},[87,154250,154251,154253,154255],{"class":89,"line":101},[87,154252,31748],{"class":171},[87,154254,31751],{"class":104},[87,154256,31754],{"class":97},[87,154258,154259,154261,154264,154266],{"class":89,"line":120},[87,154260,31792],{"class":104},[87,154262,154263],{"class":97},".students ",[87,154265,946],{"class":171},[87,154267,52775],{"class":97},[87,154269,154270],{"class":89,"line":222},[87,154271,3355],{"emptyLinePlaceholder":1029},[87,154273,154274,154276,154279],{"class":89,"line":234},[87,154275,31748],{"class":171},[87,154277,154278],{"class":205}," find_by_id",[87,154280,154281],{"class":97},"(self, student_id):\n",[87,154283,154284,154286,154288,154290,154292],{"class":89,"line":256},[87,154285,4357],{"class":171},[87,154287,152898],{"class":97},[87,154289,26990],{"class":171},[87,154291,39820],{"class":104},[87,154293,154294],{"class":97},".students:\n",[87,154296,154297,154299,154302,154304],{"class":89,"line":269},[87,154298,5595],{"class":171},[87,154300,154301],{"class":97}," student.student_id ",[87,154303,3903],{"class":171},[87,154305,152919],{"class":97},[87,154307,154308,154311],{"class":89,"line":463},[87,154309,154310],{"class":171},"                return",[87,154312,152926],{"class":97},[87,154314,154315,154317],{"class":89,"line":469},[87,154316,15702],{"class":171},[87,154318,152933],{"class":104},[87,154320,154321],{"class":89,"line":2287},[87,154322,3355],{"emptyLinePlaceholder":1029},[87,154324,154325,154327,154329],{"class":89,"line":2568},[87,154326,31748],{"class":171},[87,154328,6160],{"class":205},[87,154330,154331],{"class":97},"(self, student):\n",[87,154333,154334,154336,154338],{"class":89,"line":2573},[87,154335,3452],{"class":171},[87,154337,39820],{"class":104},[87,154339,154340],{"class":97},".find_by_id(student.student_id):\n",[87,154342,154343,154345],{"class":89,"line":2579},[87,154344,16681],{"class":171},[87,154346,126733],{"class":104},[87,154348,154349,154351],{"class":89,"line":2584},[87,154350,31792],{"class":104},[87,154352,154353],{"class":97},".students.append(student)\n",[87,154355,154356,154358],{"class":89,"line":2598},[87,154357,15702],{"class":171},[87,154359,154360],{"class":104}," True\n",[19,154362,154363],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154365,154367],{"id":154366},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[44,154369,154371],{"id":154370},"_1251-数据结构","12.5.1 数据结构",[77,154373,154375],{"className":31325,"code":154374,"language":31327,"meta":82,"style":82},"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",[84,154376,154377,154385,154416,154446,154475,154504],{"__ignoreMap":82},[87,154378,154379,154381,154383],{"class":89,"line":90},[87,154380,149226],{"class":97},[87,154382,946],{"class":171},[87,154384,56383],{"class":97},[87,154386,154387,154389,154391,154393,154395,154397,154400,154402,154405,154407,154409,154411,154414],{"class":89,"line":101},[87,154388,149146],{"class":97},[87,154390,148758],{"class":949},[87,154392,108],{"class":97},[87,154394,149369],{"class":949},[87,154396,13385],{"class":97},[87,154398,154399],{"class":949},"\"category\"",[87,154401,108],{"class":97},[87,154403,154404],{"class":949},"\"手机\"",[87,154406,13385],{"class":97},[87,154408,85010],{"class":949},[87,154410,108],{"class":97},[87,154412,154413],{"class":104},"12000",[87,154415,5883],{"class":97},[87,154417,154418,154420,154422,154424,154426,154428,154430,154432,154435,154437,154439,154441,154444],{"class":89,"line":120},[87,154419,149146],{"class":97},[87,154421,148758],{"class":949},[87,154423,108],{"class":97},[87,154425,149369],{"class":949},[87,154427,13385],{"class":97},[87,154429,154399],{"class":949},[87,154431,108],{"class":97},[87,154433,154434],{"class":949},"\"电脑\"",[87,154436,13385],{"class":97},[87,154438,85010],{"class":949},[87,154440,108],{"class":97},[87,154442,154443],{"class":104},"18000",[87,154445,5883],{"class":97},[87,154447,154448,154450,154452,154454,154456,154458,154460,154462,154464,154466,154468,154470,154473],{"class":89,"line":222},[87,154449,149146],{"class":97},[87,154451,148758],{"class":949},[87,154453,108],{"class":97},[87,154455,149390],{"class":949},[87,154457,13385],{"class":97},[87,154459,154399],{"class":949},[87,154461,108],{"class":97},[87,154463,154404],{"class":949},[87,154465,13385],{"class":97},[87,154467,85010],{"class":949},[87,154469,108],{"class":97},[87,154471,154472],{"class":104},"15000",[87,154474,5883],{"class":97},[87,154476,154477,154479,154481,154483,154485,154487,154489,154491,154493,154495,154497,154499,154502],{"class":89,"line":234},[87,154478,149146],{"class":97},[87,154480,148758],{"class":949},[87,154482,108],{"class":97},[87,154484,149390],{"class":949},[87,154486,13385],{"class":97},[87,154488,154399],{"class":949},[87,154490,108],{"class":97},[87,154492,154434],{"class":949},[87,154494,13385],{"class":97},[87,154496,85010],{"class":949},[87,154498,108],{"class":97},[87,154500,154501],{"class":104},"16000",[87,154503,5883],{"class":97},[87,154505,154506],{"class":89,"line":256},[87,154507,34193],{"class":97},[44,154509,154511],{"id":154510},"_1252-按日期统计","12.5.2 按日期统计",[77,154513,154515],{"className":31325,"code":154514,"language":31327,"meta":82,"style":82},"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",[84,154516,154517,154526,154530,154541,154555,154568,154587,154591],{"__ignoreMap":82},[87,154518,154519,154522,154524],{"class":89,"line":90},[87,154520,154521],{"class":97},"daily_total ",[87,154523,946],{"class":171},[87,154525,88794],{"class":97},[87,154527,154528],{"class":89,"line":101},[87,154529,3355],{"emptyLinePlaceholder":1029},[87,154531,154532,154534,154536,154538],{"class":89,"line":120},[87,154533,3979],{"class":171},[87,154535,148970],{"class":97},[87,154537,26990],{"class":171},[87,154539,154540],{"class":97}," sales:\n",[87,154542,154543,154546,154548,154551,154553],{"class":89,"line":222},[87,154544,154545],{"class":97},"    date ",[87,154547,946],{"class":171},[87,154549,154550],{"class":97}," item[",[87,154552,148758],{"class":949},[87,154554,34193],{"class":97},[87,154556,154557,154560,154562,154564,154566],{"class":89,"line":234},[87,154558,154559],{"class":97},"    amount ",[87,154561,946],{"class":171},[87,154563,154550],{"class":97},[87,154565,85010],{"class":949},[87,154567,34193],{"class":97},[87,154569,154570,154573,154575,154578,154580,154582,154584],{"class":89,"line":256},[87,154571,154572],{"class":97},"    daily_total[date] ",[87,154574,946],{"class":171},[87,154576,154577],{"class":97}," daily_total.get(date, ",[87,154579,111],{"class":104},[87,154581,14664],{"class":97},[87,154583,1575],{"class":171},[87,154585,154586],{"class":97}," amount\n",[87,154588,154589],{"class":89,"line":269},[87,154590,3355],{"emptyLinePlaceholder":1029},[87,154592,154593,154595],{"class":89,"line":463},[87,154594,31362],{"class":104},[87,154596,154597],{"class":97},"(daily_total)\n",[44,154599,154601],{"id":154600},"_1253-按类别统计","12.5.3 按类别统计",[77,154603,154605],{"className":31325,"code":154604,"language":31327,"meta":82,"style":82},"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",[84,154606,154607,154616,154620,154630,154643,154655,154673,154677],{"__ignoreMap":82},[87,154608,154609,154612,154614],{"class":89,"line":90},[87,154610,154611],{"class":97},"category_total ",[87,154613,946],{"class":171},[87,154615,88794],{"class":97},[87,154617,154618],{"class":89,"line":101},[87,154619,3355],{"emptyLinePlaceholder":1029},[87,154621,154622,154624,154626,154628],{"class":89,"line":120},[87,154623,3979],{"class":171},[87,154625,148970],{"class":97},[87,154627,26990],{"class":171},[87,154629,154540],{"class":97},[87,154631,154632,154635,154637,154639,154641],{"class":89,"line":222},[87,154633,154634],{"class":97},"    category ",[87,154636,946],{"class":171},[87,154638,154550],{"class":97},[87,154640,154399],{"class":949},[87,154642,34193],{"class":97},[87,154644,154645,154647,154649,154651,154653],{"class":89,"line":234},[87,154646,154559],{"class":97},[87,154648,946],{"class":171},[87,154650,154550],{"class":97},[87,154652,85010],{"class":949},[87,154654,34193],{"class":97},[87,154656,154657,154660,154662,154665,154667,154669,154671],{"class":89,"line":256},[87,154658,154659],{"class":97},"    category_total[category] ",[87,154661,946],{"class":171},[87,154663,154664],{"class":97}," category_total.get(category, ",[87,154666,111],{"class":104},[87,154668,14664],{"class":97},[87,154670,1575],{"class":171},[87,154672,154586],{"class":97},[87,154674,154675],{"class":89,"line":269},[87,154676,3355],{"emptyLinePlaceholder":1029},[87,154678,154679,154681],{"class":89,"line":463},[87,154680,31362],{"class":104},[87,154682,154683],{"class":97},"(category_total)\n",[44,154685,154687],{"id":154686},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[77,154689,154691],{"className":31325,"code":154690,"language":31327,"meta":82,"style":82},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[84,154692,154693,154718],{"__ignoreMap":82},[87,154694,154695,154698,154700,154702,154705,154708,154711,154714,154716],{"class":89,"line":90},[87,154696,154697],{"class":97},"top_date, top_amount ",[87,154699,946],{"class":171},[87,154701,6901],{"class":104},[87,154703,154704],{"class":97},"(daily_total.items(), ",[87,154706,154707],{"class":492},"key",[87,154709,154710],{"class":171},"=lambda",[87,154712,154713],{"class":97}," item: item[",[87,154715,1313],{"class":104},[87,154717,5610],{"class":97},[87,154719,154720,154722],{"class":89,"line":101},[87,154721,31362],{"class":104},[87,154723,154724],{"class":97},"(top_date, top_amount)\n",[14,154726,154728],{"id":154727},"_126-绘制柱状图","12.6 绘制柱状图",[77,154730,154732],{"className":31325,"code":154731,"language":31327,"meta":82,"style":82},"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",[84,154733,154734,154748,154759,154763,154771,154783,154795,154806,154810,154814,154824,154835,154849,154854,154871,154888,154904,154908],{"__ignoreMap":82},[87,154735,154736,154738,154740,154742,154744,154746],{"class":89,"line":90},[87,154737,31684],{"class":171},[87,154739,148140],{"class":97},[87,154741,31339],{"class":171},[87,154743,148145],{"class":97},[87,154745,32330],{"class":171},[87,154747,148150],{"class":97},[87,154749,154750,154752,154754,154756],{"class":89,"line":101},[87,154751,31684],{"class":171},[87,154753,147999],{"class":97},[87,154755,31339],{"class":171},[87,154757,154758],{"class":97}," Bar\n",[87,154760,154761],{"class":89,"line":120},[87,154762,3355],{"emptyLinePlaceholder":1029},[87,154764,154765,154767,154769],{"class":89,"line":222},[87,154766,154611],{"class":97},[87,154768,946],{"class":171},[87,154770,98],{"class":97},[87,154772,154773,154776,154778,154781],{"class":89,"line":234},[87,154774,154775],{"class":949},"    \"手机\"",[87,154777,108],{"class":97},[87,154779,154780],{"class":104},"27000",[87,154782,32413],{"class":97},[87,154784,154785,154788,154790,154793],{"class":89,"line":256},[87,154786,154787],{"class":949},"    \"电脑\"",[87,154789,108],{"class":97},[87,154791,154792],{"class":104},"34000",[87,154794,32413],{"class":97},[87,154796,154797,154800,154802,154804],{"class":89,"line":269},[87,154798,154799],{"class":949},"    \"耳机\"",[87,154801,108],{"class":97},[87,154803,125325],{"class":104},[87,154805,32413],{"class":97},[87,154807,154808],{"class":89,"line":463},[87,154809,123],{"class":97},[87,154811,154812],{"class":89,"line":469},[87,154813,3355],{"emptyLinePlaceholder":1029},[87,154815,154816,154819,154821],{"class":89,"line":2287},[87,154817,154818],{"class":97},"bar ",[87,154820,946],{"class":171},[87,154822,154823],{"class":97}," Bar()\n",[87,154825,154826,154829,154832],{"class":89,"line":2568},[87,154827,154828],{"class":97},"bar.add_xaxis(",[87,154830,154831],{"class":104},"list",[87,154833,154834],{"class":97},"(category_total.keys()))\n",[87,154836,154837,154840,154842,154844,154846],{"class":89,"line":2573},[87,154838,154839],{"class":97},"bar.add_yaxis(",[87,154841,148056],{"class":949},[87,154843,13385],{"class":97},[87,154845,154831],{"class":104},[87,154847,154848],{"class":97},"(category_total.values()))\n",[87,154850,154851],{"class":89,"line":2579},[87,154852,154853],{"class":97},"bar.set_global_opts(\n",[87,154855,154856,154858,154860,154862,154864,154866,154869],{"class":89,"line":2584},[87,154857,148234],{"class":492},[87,154859,946],{"class":171},[87,154861,148239],{"class":97},[87,154863,52351],{"class":492},[87,154865,946],{"class":171},[87,154867,154868],{"class":949},"\"品类销售额\"",[87,154870,38994],{"class":97},[87,154872,154873,154875,154877,154879,154881,154883,154886],{"class":89,"line":2598},[87,154874,148253],{"class":492},[87,154876,946],{"class":171},[87,154878,148258],{"class":97},[87,154880,80736],{"class":492},[87,154882,946],{"class":171},[87,154884,154885],{"class":949},"\"品类\"",[87,154887,38994],{"class":97},[87,154889,154890,154892,154894,154896,154898,154900,154902],{"class":89,"line":2603},[87,154891,148272],{"class":492},[87,154893,946],{"class":171},[87,154895,148258],{"class":97},[87,154897,80736],{"class":492},[87,154899,946],{"class":171},[87,154901,148056],{"class":949},[87,154903,38994],{"class":97},[87,154905,154906],{"class":89,"line":2609},[87,154907,1108],{"class":97},[87,154909,154910,154913,154916],{"class":89,"line":2630},[87,154911,154912],{"class":97},"bar.render(",[87,154914,154915],{"class":949},"\"category_sales.html\"",[87,154917,1108],{"class":97},[14,154919,154921],{"id":154920},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154923,154924],{},"时间线适合展示不同日期、月份、年份的数据变化。",[77,154926,154928],{"className":31325,"code":154927,"language":31327,"meta":82,"style":82},"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",[84,154929,154930,154944,154955,154959,154967,154991,155014,155039,155043,155047,155057,155061,155072,155081,155091,155105,155136,155141,155145],{"__ignoreMap":82},[87,154931,154932,154934,154936,154938,154940,154942],{"class":89,"line":90},[87,154933,31684],{"class":171},[87,154935,148140],{"class":97},[87,154937,31339],{"class":171},[87,154939,148145],{"class":97},[87,154941,32330],{"class":171},[87,154943,148150],{"class":97},[87,154945,154946,154948,154950,154952],{"class":89,"line":101},[87,154947,31684],{"class":171},[87,154949,147999],{"class":97},[87,154951,31339],{"class":171},[87,154953,154954],{"class":97}," Bar, Timeline\n",[87,154956,154957],{"class":89,"line":120},[87,154958,3355],{"emptyLinePlaceholder":1029},[87,154960,154961,154963,154965],{"class":89,"line":222},[87,154962,102584],{"class":97},[87,154964,946],{"class":171},[87,154966,98],{"class":97},[87,154968,154969,154972,154975,154977,154979,154981,154983,154985,154987,154989],{"class":89,"line":234},[87,154970,154971],{"class":949},"    \"2024-10-01\"",[87,154973,154974],{"class":97},": {",[87,154976,154404],{"class":949},[87,154978,108],{"class":97},[87,154980,154413],{"class":104},[87,154982,13385],{"class":97},[87,154984,154434],{"class":949},[87,154986,108],{"class":97},[87,154988,154443],{"class":104},[87,154990,5883],{"class":97},[87,154992,154993,154996,154998,155000,155002,155004,155006,155008,155010,155012],{"class":89,"line":256},[87,154994,154995],{"class":949},"    \"2024-10-02\"",[87,154997,154974],{"class":97},[87,154999,154404],{"class":949},[87,155001,108],{"class":97},[87,155003,154472],{"class":104},[87,155005,13385],{"class":97},[87,155007,154434],{"class":949},[87,155009,108],{"class":97},[87,155011,154501],{"class":104},[87,155013,5883],{"class":97},[87,155015,155016,155019,155021,155023,155025,155028,155030,155032,155034,155037],{"class":89,"line":269},[87,155017,155018],{"class":949},"    \"2024-10-03\"",[87,155020,154974],{"class":97},[87,155022,154404],{"class":949},[87,155024,108],{"class":97},[87,155026,155027],{"class":104},"17000",[87,155029,13385],{"class":97},[87,155031,154434],{"class":949},[87,155033,108],{"class":97},[87,155035,155036],{"class":104},"19000",[87,155038,5883],{"class":97},[87,155040,155041],{"class":89,"line":463},[87,155042,123],{"class":97},[87,155044,155045],{"class":89,"line":469},[87,155046,3355],{"emptyLinePlaceholder":1029},[87,155048,155049,155052,155054],{"class":89,"line":2287},[87,155050,155051],{"class":97},"timeline ",[87,155053,946],{"class":171},[87,155055,155056],{"class":97}," Timeline()\n",[87,155058,155059],{"class":89,"line":2568},[87,155060,3355],{"emptyLinePlaceholder":1029},[87,155062,155063,155065,155068,155070],{"class":89,"line":2573},[87,155064,3979],{"class":171},[87,155066,155067],{"class":97}," date, category_data ",[87,155069,26990],{"class":171},[87,155071,149909],{"class":97},[87,155073,155074,155077,155079],{"class":89,"line":2579},[87,155075,155076],{"class":97},"    bar ",[87,155078,946],{"class":171},[87,155080,154823],{"class":97},[87,155082,155083,155086,155088],{"class":89,"line":2584},[87,155084,155085],{"class":97},"    bar.add_xaxis(",[87,155087,154831],{"class":104},[87,155089,155090],{"class":97},"(category_data.keys()))\n",[87,155092,155093,155096,155098,155100,155102],{"class":89,"line":2598},[87,155094,155095],{"class":97},"    bar.add_yaxis(",[87,155097,148056],{"class":949},[87,155099,13385],{"class":97},[87,155101,154831],{"class":104},[87,155103,155104],{"class":97},"(category_data.values()))\n",[87,155106,155107,155110,155113,155115,155117,155119,155121,155123,155125,155127,155129,155131,155134],{"class":89,"line":2603},[87,155108,155109],{"class":97},"    bar.set_global_opts(",[87,155111,155112],{"class":492},"title_opts",[87,155114,946],{"class":171},[87,155116,148239],{"class":97},[87,155118,52351],{"class":492},[87,155120,946],{"class":171},[87,155122,1152],{"class":171},[87,155124,1347],{"class":949},[87,155126,1988],{"class":104},[87,155128,74854],{"class":97},[87,155130,2037],{"class":104},[87,155132,155133],{"class":949},"销售额\"",[87,155135,31444],{"class":97},[87,155137,155138],{"class":89,"line":2609},[87,155139,155140],{"class":97},"    timeline.add(bar, date)\n",[87,155142,155143],{"class":89,"line":2630},[87,155144,3355],{"emptyLinePlaceholder":1029},[87,155146,155147,155150,155153],{"class":89,"line":2635},[87,155148,155149],{"class":97},"timeline.render(",[87,155151,155152],{"class":949},"\"timeline_sales.html\"",[87,155154,1108],{"class":97},[14,155156,155158],{"id":155157},"_128-绘制地图","12.8 绘制地图",[19,155160,155161],{},"地图适合展示地区数据。",[77,155163,155165],{"className":31325,"code":155164,"language":31327,"meta":82,"style":82},"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",[84,155166,155167,155181,155192,155196,155204,155217,155229,155242,155255,155259,155263,155273,155288,155293,155310,155329,155333],{"__ignoreMap":82},[87,155168,155169,155171,155173,155175,155177,155179],{"class":89,"line":90},[87,155170,31684],{"class":171},[87,155172,148140],{"class":97},[87,155174,31339],{"class":171},[87,155176,148145],{"class":97},[87,155178,32330],{"class":171},[87,155180,148150],{"class":97},[87,155182,155183,155185,155187,155189],{"class":89,"line":101},[87,155184,31684],{"class":171},[87,155186,147999],{"class":97},[87,155188,31339],{"class":171},[87,155190,155191],{"class":97}," Map\n",[87,155193,155194],{"class":89,"line":120},[87,155195,3355],{"emptyLinePlaceholder":1029},[87,155197,155198,155200,155202],{"class":89,"line":222},[87,155199,102584],{"class":97},[87,155201,946],{"class":171},[87,155203,56383],{"class":97},[87,155205,155206,155209,155211,155213,155215],{"class":89,"line":234},[87,155207,155208],{"class":97},"    (",[87,155210,70201],{"class":949},[87,155212,13385],{"class":97},[87,155214,1909],{"class":104},[87,155216,38994],{"class":97},[87,155218,155219,155221,155223,155225,155227],{"class":89,"line":256},[87,155220,155208],{"class":97},[87,155222,70221],{"class":949},[87,155224,13385],{"class":97},[87,155226,148073],{"class":104},[87,155228,38994],{"class":97},[87,155230,155231,155233,155236,155238,155240],{"class":89,"line":269},[87,155232,155208],{"class":97},[87,155234,155235],{"class":949},"\"广东\"",[87,155237,13385],{"class":97},[87,155239,2678],{"class":104},[87,155241,38994],{"class":97},[87,155243,155244,155246,155249,155251,155253],{"class":89,"line":463},[87,155245,155208],{"class":97},[87,155247,155248],{"class":949},"\"浙江\"",[87,155250,13385],{"class":97},[87,155252,148078],{"class":104},[87,155254,38994],{"class":97},[87,155256,155257],{"class":89,"line":469},[87,155258,34193],{"class":97},[87,155260,155261],{"class":89,"line":2287},[87,155262,3355],{"emptyLinePlaceholder":1029},[87,155264,155265,155268,155270],{"class":89,"line":2568},[87,155266,155267],{"class":97},"map_chart ",[87,155269,946],{"class":171},[87,155271,155272],{"class":97}," Map()\n",[87,155274,155275,155278,155280,155283,155286],{"class":89,"line":2573},[87,155276,155277],{"class":97},"map_chart.add(",[87,155279,148056],{"class":949},[87,155281,155282],{"class":97},", data, ",[87,155284,155285],{"class":949},"\"china\"",[87,155287,1108],{"class":97},[87,155289,155290],{"class":89,"line":2579},[87,155291,155292],{"class":97},"map_chart.set_global_opts(\n",[87,155294,155295,155297,155299,155301,155303,155305,155308],{"class":89,"line":2584},[87,155296,148234],{"class":492},[87,155298,946],{"class":171},[87,155300,148239],{"class":97},[87,155302,52351],{"class":492},[87,155304,946],{"class":171},[87,155306,155307],{"class":949},"\"地区销售额\"",[87,155309,38994],{"class":97},[87,155311,155312,155315,155317,155320,155323,155325,155327],{"class":89,"line":2598},[87,155313,155314],{"class":492},"    visualmap_opts",[87,155316,946],{"class":171},[87,155318,155319],{"class":97},"opts.VisualMapOpts(",[87,155321,155322],{"class":492},"max_",[87,155324,946],{"class":171},[87,155326,2678],{"class":104},[87,155328,38994],{"class":97},[87,155330,155331],{"class":89,"line":2603},[87,155332,1108],{"class":97},[87,155334,155335,155338,155341],{"class":89,"line":2609},[87,155336,155337],{"class":97},"map_chart.render(",[87,155339,155340],{"class":949},"\"map_sales.html\"",[87,155342,1108],{"class":97},[19,155344,155345],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155347,155349],{"id":155348},"_129-项目拆分建议","12.9 项目拆分建议",[19,155351,155352],{},"当代码超过一个文件时，可以这样组织：",[77,155354,155357],{"className":155355,"code":155356,"language":599,"meta":82},[597],"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",[84,155358,155356],{"__ignoreMap":82},[19,155360,155361],{},"职责：",[1055,155363,155364,155370,155376,155382],{},[29,155365,155366,155369],{},[84,155367,155368],{},"main.py","：程序入口。",[29,155371,155372,155375],{},[84,155373,155374],{},"file_utils.py","：读写 JSON。",[29,155377,155378,155381],{},[84,155379,155380],{},"sales_service.py","：统计销售数据。",[29,155383,155384,155387],{},[84,155385,155386],{},"chart_builder.py","：生成图表。",[14,155389,155391],{"id":155390},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155393,155394],{},"语法基础：",[1055,155396,155397,155400,155403,155406],{},[29,155398,155399],{},"会写变量、注释、输入输出。",[29,155401,155402],{},"会使用 int、float、str、bool。",[29,155404,155405],{},"会做类型转换。",[29,155407,155408],{},"会使用 f-string 格式化输出。",[19,155410,155411],{},"流程控制：",[1055,155413,155414,155420,155426,155434],{},[29,155415,155416,155417,29332],{},"会写 ",[84,155418,155419],{},"if elif else",[29,155421,155416,155422,101944,155424,29332],{},[84,155423,109589],{},[84,155425,3979],{},[29,155427,155428,155429,101944,155431,29332],{},"理解 ",[84,155430,3008],{},[84,155432,155433],{},"continue",[29,155435,155436],{},"能写嵌套循环。",[19,155438,155439],{},"函数：",[1055,155441,155442,155445,155448,155451],{},[29,155443,155444],{},"会定义和调用函数。",[29,155446,155447],{},"理解参数和返回值。",[29,155449,155450],{},"知道局部变量和全局变量。",[29,155452,155453],{},"会使用默认参数、关键字参数、不定长参数。",[19,155455,155456],{},"容器：",[1055,155458,155459,155462,155465,155468,155471],{},[29,155460,155461],{},"会使用列表增删改查。",[29,155463,155464],{},"会遍历列表、字典。",[29,155466,155467],{},"会使用切片。",[29,155469,155470],{},"会用集合去重。",[29,155472,155473],{},"会处理列表嵌套字典。",[19,155475,155476],{},"文件和模块：",[1055,155478,155479,155482,155485,155488,155491],{},[29,155480,155481],{},"会读写文本文件。",[29,155483,155484],{},"会读写 JSON。",[29,155486,155487],{},"会捕获常见异常。",[29,155489,155490],{},"会导入模块和第三方包。",[29,155492,155493],{},"会创建简单包结构。",[19,155495,155496],{},"项目能力：",[1055,155498,155499,155502,155505,155508,155511],{},[29,155500,155501],{},"能把代码拆成函数。",[29,155503,155504],{},"能把数据保存到文件。",[29,155506,155507],{},"能处理用户输入错误。",[29,155509,155510],{},"能写一个完整菜单程序。",[29,155512,155513],{},"能用 pyecharts 生成图表。",[14,155515,155517],{"id":155516},"_1211-推荐练习顺序","12.11 推荐练习顺序",[1055,155519,155520,155523,155526,155529,155532,155535,155538,155541],{},[29,155521,155522],{},"猜数字游戏。",[29,155524,155525],{},"ATM 菜单程序。",[29,155527,155528],{},"学生成绩统计。",[29,155530,155531],{},"学生管理系统函数版。",[29,155533,155534],{},"学生管理系统文件持久化版。",[29,155536,155537],{},"学生管理系统面向对象版。",[29,155539,155540],{},"销售数据统计。",[29,155542,155543],{},"销售数据可视化。",[14,155545,155547],{"id":155546},"_1212-常见学习误区","12.12 常见学习误区",[1055,155549,155550,155553,155556,155559,155562,155565,155568],{},[29,155551,155552],{},"只看视频不敲代码。",[29,155554,155555],{},"一报错就复制错误去搜，不先读报错位置。",[29,155557,155558],{},"变量名随便写，后续自己看不懂。",[29,155560,155561],{},"所有代码都写在一个文件一个函数里。",[29,155563,155564],{},"不保存练习代码，复习时没有材料。",[29,155566,155567],{},"还没掌握列表字典就急着学框架。",[29,155569,155570],{},"不会读官方文档，只依赖教程。",[14,155572,155574],{"id":155573},"_1213-如何读报错","12.13 如何读报错",[19,155576,155577],{},"报错通常从下往上看最后几行。",[19,155579,16085],{},[77,155581,155584],{"className":155582,"code":155583,"language":599,"meta":82},[597],"ValueError: invalid literal for int() with base 10: 'abc'\n",[84,155585,155583],{"__ignoreMap":82},[19,155587,25547],{},[1055,155589,155590,155596,155606],{},[29,155591,155592,155593,29332],{},"异常类型是 ",[84,155594,155595],{},"ValueError",[29,155597,108271,155598,155601,155602,155605],{},[84,155599,155600],{},"int()"," 无法把 ",[84,155603,155604],{},"'abc'"," 转成整数。",[29,155607,155608],{},"应该检查输入内容或增加异常处理。",[19,155610,155611],{},"再看文件名和行号：",[77,155613,155616],{"className":155614,"code":155615,"language":599,"meta":82},[597],"File \"main.py\", line 10, in \u003Cmodule>\n",[84,155617,155615],{"__ignoreMap":82},[19,155619,155620,155621,155623],{},"表示错误发生在 ",[84,155622,155368],{}," 第 10 行。",[14,155625,155627],{"id":155626},"_1214-后续学习方向","12.14 后续学习方向",[19,155629,155630],{},"Python 基础完成后，可以按兴趣选择方向：",[1055,155632,155633,155645,155654,155666,155677,155686,155696],{},[29,155634,155635,155636,1308,155639,1308,155642,29332],{},"自动化办公：",[84,155637,155638],{},"openpyxl",[84,155640,155641],{},"python-docx",[84,155643,155644],{},"pdfplumber",[29,155646,155647,155648,1308,155650,1308,155652,29332],{},"数据分析：",[84,155649,101552],{},[84,155651,146946],{},[84,155653,146954],{},[29,155655,155656,155657,1308,155660,1308,155663,29332],{},"Web 后端：",[84,155658,155659],{},"Flask",[84,155661,155662],{},"FastAPI",[84,155664,155665],{},"Django",[29,155667,155668,155669,1308,155671,1308,155674,29332],{},"爬虫：",[84,155670,146931],{},[84,155672,155673],{},"BeautifulSoup",[84,155675,155676],{},"Scrapy",[29,155678,155679,155680,1308,155682,155685],{},"测试开发：",[84,155681,146978],{},[84,155683,155684],{},"selenium","、接口测试。",[29,155687,155688,155689,1308,155691,1308,155693,29332],{},"人工智能：",[84,155690,101552],{},[84,155692,146946],{},[84,155694,155695],{},"pytorch",[29,155697,155698,155699,1308,155701,1308,155704,29332],{},"运维脚本：",[84,155700,146547],{},[84,155702,155703],{},"subprocess",[84,155705,155706],{},"paramiko",[19,155708,155709],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155711,155713],{"id":155712},"_1215-结课练习","12.15 结课练习",[1055,155715,155716,155719,155722,155725,155728,155731,155734,155737],{},[29,155717,155718],{},"完成函数版学生管理系统。",[29,155720,155721],{},"给学生管理系统增加 JSON 持久化。",[29,155723,155724],{},"给学生管理系统增加异常处理。",[29,155726,155727],{},"把学生管理系统改成面向对象版。",[29,155729,155730],{},"使用 pyecharts 绘制学生成绩柱状图。",[29,155732,155733],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[29,155735,155736],{},"按品类统计销售额并绘制柱状图。",[29,155738,155739],{},"写一份自己的 Python 学习路线图。",[1006,155741,155742],{},"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":82,"searchDepth":101,"depth":101,"links":155744},[155745,155746,155749,155750,155751,155757,155758,155759,155760,155761,155762,155763,155764,155765,155766],{"id":152461,"depth":101,"text":152462},{"id":152511,"depth":101,"text":152512,"children":155747},[155748],{"id":152515,"depth":120,"text":152516},{"id":152554,"depth":101,"text":152555},{"id":154028,"depth":101,"text":154029},{"id":154366,"depth":101,"text":154367,"children":155752},[155753,155754,155755,155756],{"id":154370,"depth":120,"text":154371},{"id":154510,"depth":120,"text":154511},{"id":154600,"depth":120,"text":154601},{"id":154686,"depth":120,"text":154687},{"id":154727,"depth":101,"text":154728},{"id":154920,"depth":101,"text":154921},{"id":155157,"depth":101,"text":155158},{"id":155348,"depth":101,"text":155349},{"id":155390,"depth":101,"text":155391},{"id":155516,"depth":101,"text":155517},{"id":155546,"depth":101,"text":155547},{"id":155573,"depth":101,"text":155574},{"id":155626,"depth":101,"text":155627},{"id":155712,"depth":101,"text":155713},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152453,"description":1026},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155773,"title":155774,"body":155775,"description":1026,"extension":1027,"meta":158244,"navigation":1029,"path":158245,"seo":158246,"stem":158247,"__hash__":158248},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155776,"toc":158219},[155777,155780,155784,155787,155790,155810,155813,155836,155839,155842,155864,155867,155889,155893,155896,155936,155939,156060,156064,156067,156107,156110,156134,156137,156141,156144,156158,156191,156194,156229,156232,156255,156258,156291,156294,156296,156302,156377,156380,156386,156403,156443,156447,156450,156496,156498,156536,156539,156574,156577,156612,156615,156647,156650,156669,156673,156677,156790,156792,156867,156871,156917,156920,156946,156955,156959,156962,157025,157033,157061,157065,157105,157170,157174,157177,157216,157219,157264,157267,157328,157332,157359,157362,157390,157393,157397,157401,157466,157469,157507,157510,157542,157546,157645,157649,157652,157725,157728,157776,157780,157786,157826,157829,157876,157879,157928,157932,157934,157948,157950,158131,158135,158162,158182,158189,158193,158210,158216],[10,155778,155774],{"id":155779},"_2-基础语法变量与字符串",[14,155781,155783],{"id":155782},"_21-注释","2.1 注释",[19,155785,155786],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155788,155789],{},"单行注释：",[77,155791,155793],{"className":31325,"code":155792,"language":31327,"meta":82,"style":82},"# 这是单行注释\nprint(\"hello\")\n",[84,155794,155795,155800],{"__ignoreMap":82},[87,155796,155797],{"class":89,"line":90},[87,155798,155799],{"class":199},"# 这是单行注释\n",[87,155801,155802,155804,155806,155808],{"class":89,"line":101},[87,155803,31362],{"class":104},[87,155805,165],{"class":97},[87,155807,6794],{"class":949},[87,155809,1108],{"class":97},[19,155811,155812],{},"多行说明常用三引号：",[77,155814,155816],{"className":31325,"code":155815,"language":31327,"meta":82,"style":82},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[84,155817,155818,155822,155827,155832],{"__ignoreMap":82},[87,155819,155820],{"class":89,"line":90},[87,155821,96624],{"class":949},[87,155823,155824],{"class":89,"line":101},[87,155825,155826],{"class":949},"这是多行说明。\n",[87,155828,155829],{"class":89,"line":120},[87,155830,155831],{"class":949},"常用于文件顶部说明、函数说明等。\n",[87,155833,155834],{"class":89,"line":222},[87,155835,96624],{"class":949},[19,155837,155838],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155840,155841],{},"不好：",[77,155843,155845],{"className":31325,"code":155844,"language":31327,"meta":82,"style":82},"# age 加 1\nage = age + 1\n",[84,155846,155847,155852],{"__ignoreMap":82},[87,155848,155849],{"class":89,"line":90},[87,155850,155851],{"class":199},"# age 加 1\n",[87,155853,155854,155856,155858,155860,155862],{"class":89,"line":101},[87,155855,147307],{"class":97},[87,155857,946],{"class":171},[87,155859,16656],{"class":97},[87,155861,1575],{"class":171},[87,155863,56635],{"class":104},[19,155865,155866],{},"较好：",[77,155868,155870],{"className":31325,"code":155869,"language":31327,"meta":82,"style":82},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[84,155871,155872,155877],{"__ignoreMap":82},[87,155873,155874],{"class":89,"line":90},[87,155875,155876],{"class":199},"# 用户过完生日后，年龄增加一岁\n",[87,155878,155879,155881,155883,155885,155887],{"class":89,"line":101},[87,155880,147307],{"class":97},[87,155882,946],{"class":171},[87,155884,16656],{"class":97},[87,155886,1575],{"class":171},[87,155888,56635],{"class":104},[14,155890,155892],{"id":155891},"_22-字面量","2.2 字面量",[19,155894,155895],{},"字面量就是代码中直接写出来的数据。",[77,155897,155899],{"className":31325,"code":155898,"language":31327,"meta":82,"style":82},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[84,155900,155901,155908,155915,155922,155929],{"__ignoreMap":82},[87,155902,155903,155905],{"class":89,"line":90},[87,155904,536],{"class":104},[87,155906,155907],{"class":199},"          # 整数\n",[87,155909,155910,155912],{"class":89,"line":101},[87,155911,1149],{"class":104},[87,155913,155914],{"class":199},"         # 小数\n",[87,155916,155917,155919],{"class":89,"line":120},[87,155918,6794],{"class":949},[87,155920,155921],{"class":199},"      # 字符串\n",[87,155923,155924,155926],{"class":89,"line":222},[87,155925,32423],{"class":104},[87,155927,155928],{"class":199},"         # 布尔值\n",[87,155930,155931,155933],{"class":89,"line":234},[87,155932,96612],{"class":104},[87,155934,155935],{"class":199},"         # 空值\n",[19,155937,155938],{},"常见字面量类型：",[1235,155940,155941,155951],{},[1238,155942,155943],{},[1241,155944,155945,155947,155949],{},[1244,155946,24684],{},[1244,155948,28439],{},[1244,155950,26816],{},[1281,155952,155953,155964,155975,155986,155998,156010,156022,156035,156047],{},[1241,155954,155955,155957,155961],{},[1286,155956,1105],{},[1286,155958,155959],{},[84,155960,536],{},[1286,155962,155963],{},"整数",[1241,155965,155966,155968,155972],{},[1286,155967,1141],{},[1286,155969,155970],{},[84,155971,1149],{},[1286,155973,155974],{},"浮点数",[1241,155976,155977,155979,155983],{},[1286,155978,2259],{},[1286,155980,155981],{},[84,155982,6794],{},[1286,155984,155985],{},"字符串",[1241,155987,155988,155990,155996],{},[1286,155989,2312],{},[1286,155991,155992,1308,155994],{},[84,155993,32423],{},[84,155995,34934],{},[1286,155997,66947],{},[1241,155999,156000,156003,156007],{},[1286,156001,156002],{},"NoneType",[1286,156004,156005],{},[84,156006,96612],{},[1286,156008,156009],{},"空值",[1241,156011,156012,156014,156019],{},[1286,156013,154831],{},[1286,156015,156016],{},[84,156017,156018],{},"[1, 2, 3]",[1286,156020,156021],{},"列表",[1241,156023,156024,156027,156032],{},[1286,156025,156026],{},"tuple",[1286,156028,156029],{},[84,156030,156031],{},"(1, 2, 3)",[1286,156033,156034],{},"元组",[1241,156036,156037,156039,156044],{},[1286,156038,115472],{},[1286,156040,156041],{},[84,156042,156043],{},"{\"name\": \"张三\"}",[1286,156045,156046],{},"字典",[1241,156048,156049,156052,156057],{},[1286,156050,156051],{},"set",[1286,156053,156054],{},[84,156055,156056],{},"{1, 2, 3}",[1286,156058,156059],{},"集合",[14,156061,156063],{"id":156062},"_23-变量","2.3 变量",[19,156065,156066],{},"变量是保存数据的名字。",[77,156068,156070],{"className":31325,"code":156069,"language":31327,"meta":82,"style":82},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[84,156071,156072,156080,156088,156098],{"__ignoreMap":82},[87,156073,156074,156076,156078],{"class":89,"line":90},[87,156075,147297],{"class":97},[87,156077,946],{"class":171},[87,156079,150114],{"class":949},[87,156081,156082,156084,156086],{"class":89,"line":101},[87,156083,147307],{"class":97},[87,156085,946],{"class":171},[87,156087,147312],{"class":104},[87,156089,156090,156093,156095],{"class":89,"line":120},[87,156091,156092],{"class":97},"height ",[87,156094,946],{"class":171},[87,156096,156097],{"class":104}," 1.75\n",[87,156099,156100,156103,156105],{"class":89,"line":222},[87,156101,156102],{"class":97},"is_student ",[87,156104,946],{"class":171},[87,156106,154360],{"class":104},[19,156108,156109],{},"Python 的变量不需要提前声明类型：",[77,156111,156113],{"className":31325,"code":156112,"language":31327,"meta":82,"style":82},"score = 100\nscore = \"满分\"\n",[84,156114,156115,156125],{"__ignoreMap":82},[87,156116,156117,156120,156122],{"class":89,"line":90},[87,156118,156119],{"class":97},"score ",[87,156121,946],{"class":171},[87,156123,156124],{"class":104}," 100\n",[87,156126,156127,156129,156131],{"class":89,"line":101},[87,156128,156119],{"class":97},[87,156130,946],{"class":171},[87,156132,156133],{"class":949}," \"满分\"\n",[19,156135,156136],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156138,156140],{"id":156139},"_24-变量命名规则","2.4 变量命名规则",[19,156142,156143],{},"硬性规则：",[1055,156145,156146,156149,156152,156155],{},[29,156147,156148],{},"只能由字母、数字、下划线组成。",[29,156150,156151],{},"不能以数字开头。",[29,156153,156154],{},"不能使用 Python 关键字。",[29,156156,156157],{},"区分大小写。",[77,156159,156161],{"className":31325,"code":156160,"language":31327,"meta":82,"style":82},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[84,156162,156163,156172,156181],{"__ignoreMap":82},[87,156164,156165,156168,156170],{"class":89,"line":90},[87,156166,156167],{"class":97},"user_name ",[87,156169,946],{"class":171},[87,156171,147302],{"class":949},[87,156173,156174,156177,156179],{"class":89,"line":101},[87,156175,156176],{"class":97},"age2 ",[87,156178,946],{"class":171},[87,156180,147312],{"class":104},[87,156182,156183,156186,156188],{"class":89,"line":120},[87,156184,156185],{"class":97},"_token ",[87,156187,946],{"class":171},[87,156189,156190],{"class":949}," \"abc\"\n",[19,156192,156193],{},"错误写法：",[77,156195,156197],{"className":31325,"code":156196,"language":31327,"meta":82,"style":82},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[84,156198,156199,156208,156220],{"__ignoreMap":82},[87,156200,156201,156204,156206],{"class":89,"line":90},[87,156202,156203],{"class":78331},"2age",[87,156205,14514],{"class":171},[87,156207,147312],{"class":104},[87,156209,156210,156212,156214,156216,156218],{"class":89,"line":101},[87,156211,132498],{"class":97},[87,156213,1625],{"class":171},[87,156215,147297],{"class":97},[87,156217,946],{"class":171},[87,156219,147302],{"class":949},[87,156221,156222,156224,156226],{"class":89,"line":120},[87,156223,15644],{"class":171},[87,156225,14514],{"class":171},[87,156227,156228],{"class":949}," \"一班\"\n",[19,156230,156231],{},"查看关键字：",[77,156233,156235],{"className":31325,"code":156234,"language":31327,"meta":82,"style":82},"import keyword\n\nprint(keyword.kwlist)\n",[84,156236,156237,156244,156248],{"__ignoreMap":82},[87,156238,156239,156241],{"class":89,"line":90},[87,156240,31339],{"class":171},[87,156242,156243],{"class":97}," keyword\n",[87,156245,156246],{"class":89,"line":101},[87,156247,3355],{"emptyLinePlaceholder":1029},[87,156249,156250,156252],{"class":89,"line":120},[87,156251,31362],{"class":104},[87,156253,156254],{"class":97},"(keyword.kwlist)\n",[19,156256,156257],{},"推荐命名风格：",[77,156259,156261],{"className":31325,"code":156260,"language":31327,"meta":82,"style":82},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[84,156262,156263,156272,156282],{"__ignoreMap":82},[87,156264,156265,156268,156270],{"class":89,"line":90},[87,156266,156267],{"class":97},"student_name ",[87,156269,946],{"class":171},[87,156271,150114],{"class":949},[87,156273,156274,156277,156279],{"class":89,"line":101},[87,156275,156276],{"class":97},"total_price ",[87,156278,946],{"class":171},[87,156280,156281],{"class":104}," 99.8\n",[87,156283,156284,156287,156289],{"class":89,"line":120},[87,156285,156286],{"class":97},"is_finished ",[87,156288,946],{"class":171},[87,156290,126733],{"class":104},[19,156292,156293],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156295,51678],{"id":51677},[19,156297,105292,156298,156301],{},[84,156299,156300],{},"type()"," 查看数据类型：",[77,156303,156305],{"className":31325,"code":156304,"language":31327,"meta":82,"style":82},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[84,156306,156307,156321,156335,156349,156363],{"__ignoreMap":82},[87,156308,156309,156311,156313,156315,156317,156319],{"class":89,"line":90},[87,156310,31362],{"class":104},[87,156312,165],{"class":97},[87,156314,104033],{"class":104},[87,156316,165],{"class":97},[87,156318,536],{"class":104},[87,156320,31444],{"class":97},[87,156322,156323,156325,156327,156329,156331,156333],{"class":89,"line":101},[87,156324,31362],{"class":104},[87,156326,165],{"class":97},[87,156328,104033],{"class":104},[87,156330,165],{"class":97},[87,156332,1149],{"class":104},[87,156334,31444],{"class":97},[87,156336,156337,156339,156341,156343,156345,156347],{"class":89,"line":120},[87,156338,31362],{"class":104},[87,156340,165],{"class":97},[87,156342,104033],{"class":104},[87,156344,165],{"class":97},[87,156346,6794],{"class":949},[87,156348,31444],{"class":97},[87,156350,156351,156353,156355,156357,156359,156361],{"class":89,"line":222},[87,156352,31362],{"class":104},[87,156354,165],{"class":97},[87,156356,104033],{"class":104},[87,156358,165],{"class":97},[87,156360,32423],{"class":104},[87,156362,31444],{"class":97},[87,156364,156365,156367,156369,156371,156373,156375],{"class":89,"line":234},[87,156366,31362],{"class":104},[87,156368,165],{"class":97},[87,156370,104033],{"class":104},[87,156372,165],{"class":97},[87,156374,96612],{"class":104},[87,156376,31444],{"class":97},[19,156378,156379],{},"输出类似：",[77,156381,156384],{"className":156382,"code":156383,"language":599,"meta":82},[597],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[84,156385,156383],{"__ignoreMap":82},[19,156387,9975,156388,108209,156390,156392,156393,156395,156396,22448,156398,156395,156400,156402],{},[84,156389,2312],{},[84,156391,1105],{}," 的子类，",[84,156394,32423],{}," 可以当作 ",[84,156397,1313],{},[84,156399,34934],{},[84,156401,111],{},"，但业务代码中不要滥用。",[77,156404,156406],{"className":31325,"code":156405,"language":31327,"meta":82,"style":82},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[84,156407,156408,156426],{"__ignoreMap":82},[87,156409,156410,156412,156414,156416,156418,156420,156423],{"class":89,"line":90},[87,156411,31362],{"class":104},[87,156413,165],{"class":97},[87,156415,32423],{"class":104},[87,156417,46513],{"class":171},[87,156419,568],{"class":104},[87,156421,156422],{"class":97},")   ",[87,156424,156425],{"class":199},"# 2\n",[87,156427,156428,156430,156432,156434,156436,156438,156440],{"class":89,"line":101},[87,156429,31362],{"class":104},[87,156431,165],{"class":97},[87,156433,34934],{"class":104},[87,156435,46513],{"class":171},[87,156437,568],{"class":104},[87,156439,46755],{"class":97},[87,156441,156442],{"class":199},"# 1\n",[14,156444,156446],{"id":156445},"_26-类型转换","2.6 类型转换",[19,156448,156449],{},"常用转换函数：",[77,156451,156453],{"className":31325,"code":156452,"language":31327,"meta":82,"style":82},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[84,156454,156455,156465,156476,156486],{"__ignoreMap":82},[87,156456,156457,156459,156461,156463],{"class":89,"line":90},[87,156458,1105],{"class":104},[87,156460,165],{"class":97},[87,156462,55252],{"class":949},[87,156464,1108],{"class":97},[87,156466,156467,156469,156471,156474],{"class":89,"line":101},[87,156468,1141],{"class":104},[87,156470,165],{"class":97},[87,156472,156473],{"class":949},"\"3.14\"",[87,156475,1108],{"class":97},[87,156477,156478,156480,156482,156484],{"class":89,"line":120},[87,156479,2259],{"class":104},[87,156481,165],{"class":97},[87,156483,536],{"class":104},[87,156485,1108],{"class":97},[87,156487,156488,156490,156492,156494],{"class":89,"line":222},[87,156489,2312],{"class":104},[87,156491,165],{"class":97},[87,156493,1313],{"class":104},[87,156495,1108],{"class":97},[19,156497,16085],{},[77,156499,156501],{"className":31325,"code":156500,"language":31327,"meta":82,"style":82},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[84,156502,156503,156512,156523],{"__ignoreMap":82},[87,156504,156505,156507,156509],{"class":89,"line":90},[87,156506,147307],{"class":97},[87,156508,946],{"class":171},[87,156510,156511],{"class":949}," \"18\"\n",[87,156513,156514,156516,156518,156520],{"class":89,"line":101},[87,156515,147307],{"class":97},[87,156517,946],{"class":171},[87,156519,3337],{"class":104},[87,156521,156522],{"class":97},"(age)\n",[87,156524,156525,156527,156530,156532,156534],{"class":89,"line":120},[87,156526,31362],{"class":104},[87,156528,156529],{"class":97},"(age ",[87,156531,1575],{"class":171},[87,156533,568],{"class":104},[87,156535,1108],{"class":97},[19,156537,156538],{},"输入得到的内容永远是字符串：",[77,156540,156542],{"className":31325,"code":156541,"language":31327,"meta":82,"style":82},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[84,156543,156544,156560],{"__ignoreMap":82},[87,156545,156546,156549,156551,156553,156555,156558],{"class":89,"line":90},[87,156547,156548],{"class":97},"num ",[87,156550,946],{"class":171},[87,156552,61541],{"class":104},[87,156554,165],{"class":97},[87,156556,156557],{"class":949},"\"请输入数字:\"",[87,156559,1108],{"class":97},[87,156561,156562,156564,156566,156568,156571],{"class":89,"line":101},[87,156563,31362],{"class":104},[87,156565,165],{"class":97},[87,156567,104033],{"class":104},[87,156569,156570],{"class":97},"(num))  ",[87,156572,156573],{"class":199},"# str\n",[19,156575,156576],{},"如果要做数学运算，必须转换：",[77,156578,156580],{"className":31325,"code":156579,"language":31327,"meta":82,"style":82},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[84,156581,156582,156600],{"__ignoreMap":82},[87,156583,156584,156586,156588,156590,156592,156594,156596,156598],{"class":89,"line":90},[87,156585,156548],{"class":97},[87,156587,946],{"class":171},[87,156589,3337],{"class":104},[87,156591,165],{"class":97},[87,156593,54757],{"class":104},[87,156595,165],{"class":97},[87,156597,156557],{"class":949},[87,156599,31444],{"class":97},[87,156601,156602,156604,156606,156608,156610],{"class":89,"line":101},[87,156603,31362],{"class":104},[87,156605,46566],{"class":97},[87,156607,1575],{"class":171},[87,156609,2993],{"class":104},[87,156611,1108],{"class":97},[19,156613,156614],{},"常见错误：",[77,156616,156618],{"className":31325,"code":156617,"language":31327,"meta":82,"style":82},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[84,156619,156620,156633],{"__ignoreMap":82},[87,156621,156622,156624,156626,156628,156630],{"class":89,"line":90},[87,156623,1105],{"class":104},[87,156625,165],{"class":97},[87,156627,156473],{"class":949},[87,156629,156422],{"class":97},[87,156631,156632],{"class":199},"# 错误\n",[87,156634,156635,156637,156639,156642,156645],{"class":89,"line":101},[87,156636,1105],{"class":104},[87,156638,165],{"class":97},[87,156640,156641],{"class":949},"\"abc\"",[87,156643,156644],{"class":97},")    ",[87,156646,156632],{"class":199},[19,156648,156649],{},"正确写法：",[77,156651,156653],{"className":31325,"code":156652,"language":31327,"meta":82,"style":82},"num = float(\"3.14\")\n",[84,156654,156655],{"__ignoreMap":82},[87,156656,156657,156659,156661,156663,156665,156667],{"class":89,"line":90},[87,156658,156548],{"class":97},[87,156660,946],{"class":171},[87,156662,110723],{"class":104},[87,156664,165],{"class":97},[87,156666,156473],{"class":949},[87,156668,1108],{"class":97},[14,156670,156672],{"id":156671},"_27-运算符","2.7 运算符",[44,156674,156676],{"id":156675},"_271-算术运算符","2.7.1 算术运算符",[1235,156678,156679,156690],{},[1238,156680,156681],{},[1241,156682,156683,156686,156688],{},[1244,156684,156685],{},"运算符",[1244,156687,26816],{},[1244,156689,28439],{},[1281,156691,156692,156706,156720,156734,156748,156762,156776],{},[1241,156693,156694,156698,156701],{},[1286,156695,156696],{},[84,156697,1575],{},[1286,156699,156700],{},"加法",[1286,156702,156703],{},[84,156704,156705],{},"1 + 2",[1241,156707,156708,156712,156715],{},[1286,156709,156710],{},[84,156711,1625],{},[1286,156713,156714],{},"减法",[1286,156716,156717],{},[84,156718,156719],{},"5 - 3",[1241,156721,156722,156726,156729],{},[1286,156723,156724],{},[84,156725,1549],{},[1286,156727,156728],{},"乘法",[1286,156730,156731],{},[84,156732,156733],{},"2 * 3",[1241,156735,156736,156740,156743],{},[1286,156737,156738],{},[84,156739,1677],{},[1286,156741,156742],{},"除法，结果是浮点数",[1286,156744,156745],{},[84,156746,156747],{},"5 \u002F 2",[1241,156749,156750,156754,156757],{},[1286,156751,156752],{},[84,156753,34276],{},[1286,156755,156756],{},"整除",[1286,156758,156759],{},[84,156760,156761],{},"5 \u002F\u002F 2",[1241,156763,156764,156768,156771],{},[1286,156765,156766],{},[84,156767,1423],{},[1286,156769,156770],{},"取余",[1286,156772,156773],{},[84,156774,156775],{},"5 % 2",[1241,156777,156778,156782,156785],{},[1286,156779,156780],{},[84,156781,11611],{},[1286,156783,156784],{},"幂运算",[1286,156786,156787],{},[84,156788,156789],{},"2 ** 3",[19,156791,16085],{},[77,156793,156795],{"className":31325,"code":156794,"language":31327,"meta":82,"style":82},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[84,156796,156797,156815,156832,156849],{"__ignoreMap":82},[87,156798,156799,156801,156803,156805,156808,156810,156812],{"class":89,"line":90},[87,156800,31362],{"class":104},[87,156802,165],{"class":97},[87,156804,1414],{"class":104},[87,156806,156807],{"class":171}," \u002F",[87,156809,15705],{"class":104},[87,156811,156422],{"class":97},[87,156813,156814],{"class":199},"# 2.5\n",[87,156816,156817,156819,156821,156823,156826,156828,156830],{"class":89,"line":101},[87,156818,31362],{"class":104},[87,156820,165],{"class":97},[87,156822,1414],{"class":104},[87,156824,156825],{"class":171}," \u002F\u002F",[87,156827,15705],{"class":104},[87,156829,46755],{"class":97},[87,156831,156425],{"class":199},[87,156833,156834,156836,156838,156840,156843,156845,156847],{"class":89,"line":120},[87,156835,31362],{"class":104},[87,156837,165],{"class":97},[87,156839,1414],{"class":104},[87,156841,156842],{"class":171}," %",[87,156844,15705],{"class":104},[87,156846,156422],{"class":97},[87,156848,156442],{"class":199},[87,156850,156851,156853,156855,156857,156860,156862,156864],{"class":89,"line":222},[87,156852,31362],{"class":104},[87,156854,165],{"class":97},[87,156856,1176],{"class":104},[87,156858,156859],{"class":171}," **",[87,156861,78998],{"class":104},[87,156863,46755],{"class":97},[87,156865,156866],{"class":199},"# 8\n",[44,156868,156870],{"id":156869},"_272-赋值运算符","2.7.2 赋值运算符",[77,156872,156874],{"className":31325,"code":156873,"language":31327,"meta":82,"style":82},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[84,156875,156876,156884,156892,156900,156908],{"__ignoreMap":82},[87,156877,156878,156880,156882],{"class":89,"line":90},[87,156879,156548],{"class":97},[87,156881,946],{"class":171},[87,156883,59364],{"class":104},[87,156885,156886,156888,156890],{"class":89,"line":101},[87,156887,156548],{"class":97},[87,156889,10427],{"class":171},[87,156891,55363],{"class":104},[87,156893,156894,156896,156898],{"class":89,"line":120},[87,156895,156548],{"class":97},[87,156897,151013],{"class":171},[87,156899,48670],{"class":104},[87,156901,156902,156904,156906],{"class":89,"line":222},[87,156903,156548],{"class":97},[87,156905,138052],{"class":171},[87,156907,120962],{"class":104},[87,156909,156910,156912,156915],{"class":89,"line":234},[87,156911,156548],{"class":97},[87,156913,156914],{"class":171},"\u002F=",[87,156916,48670],{"class":104},[19,156918,156919],{},"等价关系：",[77,156921,156923],{"className":31325,"code":156922,"language":31327,"meta":82,"style":82},"num += 1\nnum = num + 1\n",[84,156924,156925,156933],{"__ignoreMap":82},[87,156926,156927,156929,156931],{"class":89,"line":90},[87,156928,156548],{"class":97},[87,156930,10427],{"class":171},[87,156932,56635],{"class":104},[87,156934,156935,156937,156939,156942,156944],{"class":89,"line":101},[87,156936,156548],{"class":97},[87,156938,946],{"class":171},[87,156940,156941],{"class":97}," num ",[87,156943,1575],{"class":171},[87,156945,56635],{"class":104},[19,156947,156948,156949,101944,156952,29332],{},"Python 没有 ",[84,156950,156951],{},"num++",[84,156953,156954],{},"num--",[44,156956,156958],{"id":156957},"_273-比较运算符","2.7.3 比较运算符",[19,156960,156961],{},"比较运算结果是布尔值。",[77,156963,156965],{"className":31325,"code":156964,"language":31327,"meta":82,"style":82},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[84,156966,156967,156981,156996,157010],{"__ignoreMap":82},[87,156968,156969,156971,156973,156975,156977,156979],{"class":89,"line":90},[87,156970,31362],{"class":104},[87,156972,165],{"class":97},[87,156974,242],{"class":104},[87,156976,27169],{"class":171},[87,156978,3103],{"class":104},[87,156980,1108],{"class":97},[87,156982,156983,156985,156987,156989,156992,156994],{"class":89,"line":101},[87,156984,31362],{"class":104},[87,156986,165],{"class":97},[87,156988,242],{"class":104},[87,156990,156991],{"class":171}," >=",[87,156993,2993],{"class":104},[87,156995,1108],{"class":97},[87,156997,156998,157000,157002,157004,157006,157008],{"class":89,"line":120},[87,156999,31362],{"class":104},[87,157001,165],{"class":97},[87,157003,242],{"class":104},[87,157005,102485],{"class":171},[87,157007,3038],{"class":104},[87,157009,1108],{"class":97},[87,157011,157012,157014,157016,157018,157021,157023],{"class":89,"line":222},[87,157013,31362],{"class":104},[87,157015,165],{"class":97},[87,157017,242],{"class":104},[87,157019,157020],{"class":171}," !=",[87,157022,3038],{"class":104},[87,157024,1108],{"class":97},[19,157026,157027,157028,157030,157031,29332],{},"注意：判断相等用 ",[84,157029,3903],{},"，赋值用 ",[84,157032,946],{},[77,157034,157036],{"className":31325,"code":157035,"language":31327,"meta":82,"style":82},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[84,157037,157038,157050],{"__ignoreMap":82},[87,157039,157040,157042,157044,157047],{"class":89,"line":90},[87,157041,147307],{"class":97},[87,157043,946],{"class":171},[87,157045,157046],{"class":104}," 18",[87,157048,157049],{"class":199},"       # 赋值\n",[87,157051,157052,157054,157056,157058],{"class":89,"line":101},[87,157053,147307],{"class":97},[87,157055,3903],{"class":171},[87,157057,157046],{"class":104},[87,157059,157060],{"class":199},"      # 判断是否相等\n",[44,157062,157064],{"id":157063},"_274-逻辑运算符","2.7.4 逻辑运算符",[1235,157066,157067,157075],{},[1238,157068,157069],{},[1241,157070,157071,157073],{},[1244,157072,156685],{},[1244,157074,26816],{},[1281,157076,157077,157086,157095],{},[1241,157078,157079,157083],{},[1286,157080,157081],{},[84,157082,31409],{},[1286,157084,157085],{},"并且",[1241,157087,157088,157092],{},[1286,157089,157090],{},[84,157091,116016],{},[1286,157093,157094],{},"或者",[1241,157096,157097,157102],{},[1286,157098,157099],{},[84,157100,157101],{},"not",[1286,157103,157104],{},"取反",[77,157106,157108],{"className":31325,"code":157107,"language":31327,"meta":82,"style":82},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[84,157109,157110,157118,157127,157131,157146,157160],{"__ignoreMap":82},[87,157111,157112,157114,157116],{"class":89,"line":90},[87,157113,147307],{"class":97},[87,157115,946],{"class":171},[87,157117,88991],{"class":104},[87,157119,157120,157123,157125],{"class":89,"line":101},[87,157121,157122],{"class":97},"has_ticket ",[87,157124,946],{"class":171},[87,157126,154360],{"class":104},[87,157128,157129],{"class":89,"line":120},[87,157130,3355],{"emptyLinePlaceholder":1029},[87,157132,157133,157135,157137,157139,157141,157143],{"class":89,"line":222},[87,157134,31362],{"class":104},[87,157136,156529],{"class":97},[87,157138,2666],{"class":171},[87,157140,157046],{"class":104},[87,157142,121355],{"class":171},[87,157144,157145],{"class":97}," has_ticket)\n",[87,157147,157148,157150,157152,157154,157156,157158],{"class":89,"line":234},[87,157149,31362],{"class":104},[87,157151,156529],{"class":97},[87,157153,938],{"class":171},[87,157155,157046],{"class":104},[87,157157,115127],{"class":171},[87,157159,157145],{"class":97},[87,157161,157162,157164,157166,157168],{"class":89,"line":256},[87,157163,31362],{"class":104},[87,157165,165],{"class":97},[87,157167,157101],{"class":171},[87,157169,157145],{"class":97},[14,157171,157173],{"id":157172},"_28-字符串定义","2.8 字符串定义",[19,157175,157176],{},"三种常见写法：",[77,157178,157180],{"className":31325,"code":157179,"language":31327,"meta":82,"style":82},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[84,157181,157182,157192,157201,157211],{"__ignoreMap":82},[87,157183,157184,157187,157189],{"class":89,"line":90},[87,157185,157186],{"class":97},"name1 ",[87,157188,946],{"class":171},[87,157190,157191],{"class":949}," '小明'\n",[87,157193,157194,157197,157199],{"class":89,"line":101},[87,157195,157196],{"class":97},"name2 ",[87,157198,946],{"class":171},[87,157200,150114],{"class":949},[87,157202,157203,157206,157208],{"class":89,"line":120},[87,157204,157205],{"class":97},"text ",[87,157207,946],{"class":171},[87,157209,157210],{"class":949}," \"\"\"这是多行字符串\n",[87,157212,157213],{"class":89,"line":222},[87,157214,157215],{"class":949},"可以换行\"\"\"\n",[19,157217,157218],{},"字符串中包含引号：",[77,157220,157222],{"className":31325,"code":157221,"language":31327,"meta":82,"style":82},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[84,157223,157224,157234,157244],{"__ignoreMap":82},[87,157225,157226,157229,157231],{"class":89,"line":90},[87,157227,157228],{"class":97},"msg ",[87,157230,946],{"class":171},[87,157232,157233],{"class":949}," \"他说:'你好'\"\n",[87,157235,157236,157239,157241],{"class":89,"line":101},[87,157237,157238],{"class":97},"msg2 ",[87,157240,946],{"class":171},[87,157242,157243],{"class":949}," '他说:\"你好\"'\n",[87,157245,157246,157249,157251,157254,157257,157260,157262],{"class":89,"line":120},[87,157247,157248],{"class":97},"msg3 ",[87,157250,946],{"class":171},[87,157252,157253],{"class":949}," \"他说:",[87,157255,157256],{"class":104},"\\\"",[87,157258,157259],{"class":949},"你好",[87,157261,157256],{"class":104},[87,157263,26080],{"class":949},[19,157265,157266],{},"常见转义字符：",[1235,157268,157269,157278],{},[1238,157270,157271],{},[1241,157272,157273,157276],{},[1244,157274,157275],{},"写法",[1244,157277,101626],{},[1281,157279,157280,157290,157299,157309,157318],{},[1241,157281,157282,157287],{},[1286,157283,157284],{},[84,157285,157286],{},"\\n",[1286,157288,157289],{},"换行",[1241,157291,157292,157296],{},[1286,157293,157294],{},[84,157295,2191],{},[1286,157297,157298],{},"制表符",[1241,157300,157301,157306],{},[1286,157302,157303],{},[84,157304,157305],{},"\\\\",[1286,157307,157308],{},"反斜杠",[1241,157310,157311,157315],{},[1286,157312,157313],{},[84,157314,157256],{},[1286,157316,157317],{},"双引号",[1241,157319,157320,157325],{},[1286,157321,157322],{},[84,157323,157324],{},"\\'",[1286,157326,157327],{},"单引号",[14,157329,157331],{"id":157330},"_29-字符串拼接","2.9 字符串拼接",[77,157333,157335],{"className":31325,"code":157334,"language":31327,"meta":82,"style":82},"name = \"小明\"\nprint(\"你好，\" + name)\n",[84,157336,157337,157345],{"__ignoreMap":82},[87,157338,157339,157341,157343],{"class":89,"line":90},[87,157340,147297],{"class":97},[87,157342,946],{"class":171},[87,157344,150114],{"class":949},[87,157346,157347,157349,157351,157354,157356],{"class":89,"line":101},[87,157348,31362],{"class":104},[87,157350,165],{"class":97},[87,157352,157353],{"class":949},"\"你好，\"",[87,157355,46513],{"class":171},[87,157357,157358],{"class":97}," name)\n",[19,157360,157361],{},"字符串只能和字符串拼接：",[77,157363,157365],{"className":31325,"code":157364,"language":31327,"meta":82,"style":82},"age = 18\nprint(\"年龄:\" + str(age))\n",[84,157366,157367,157375],{"__ignoreMap":82},[87,157368,157369,157371,157373],{"class":89,"line":90},[87,157370,147307],{"class":97},[87,157372,946],{"class":171},[87,157374,147312],{"class":104},[87,157376,157377,157379,157381,157383,157385,157387],{"class":89,"line":101},[87,157378,31362],{"class":104},[87,157380,165],{"class":97},[87,157382,147278],{"class":949},[87,157384,46513],{"class":171},[87,157386,74847],{"class":104},[87,157388,157389],{"class":97},"(age))\n",[19,157391,157392],{},"更推荐使用格式化字符串。",[14,157394,157396],{"id":157395},"_210-字符串格式化","2.10 字符串格式化",[44,157398,157400],{"id":157399},"_2101-百分号格式化","2.10.1 百分号格式化",[77,157402,157404],{"className":31325,"code":157403,"language":31327,"meta":82,"style":82},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[84,157405,157406,157414,157422,157431,157435],{"__ignoreMap":82},[87,157407,157408,157410,157412],{"class":89,"line":90},[87,157409,147297],{"class":97},[87,157411,946],{"class":171},[87,157413,150114],{"class":949},[87,157415,157416,157418,157420],{"class":89,"line":101},[87,157417,147307],{"class":97},[87,157419,946],{"class":171},[87,157421,147312],{"class":104},[87,157423,157424,157426,157428],{"class":89,"line":120},[87,157425,156119],{"class":97},[87,157427,946],{"class":171},[87,157429,157430],{"class":104}," 95.5\n",[87,157432,157433],{"class":89,"line":222},[87,157434,3355],{"emptyLinePlaceholder":1029},[87,157436,157437,157439,157441,157444,157447,157450,157453,157456,157459,157461,157463],{"class":89,"line":234},[87,157438,31362],{"class":104},[87,157440,165],{"class":97},[87,157442,157443],{"class":949},"\"姓名:",[87,157445,157446],{"class":104},"%s",[87,157448,157449],{"class":949}," 年龄:",[87,157451,157452],{"class":104},"%d",[87,157454,157455],{"class":949}," 分数:",[87,157457,157458],{"class":104},"%.1f",[87,157460,1347],{"class":949},[87,157462,156842],{"class":171},[87,157464,157465],{"class":97}," (name, age, score))\n",[19,157467,157468],{},"常用占位符：",[1235,157470,157471,157480],{},[1238,157472,157473],{},[1241,157474,157475,157478],{},[1244,157476,157477],{},"占位符",[1244,157479,26816],{},[1281,157481,157482,157490,157498],{},[1241,157483,157484,157488],{},[1286,157485,157486],{},[84,157487,157446],{},[1286,157489,155985],{},[1241,157491,157492,157496],{},[1286,157493,157494],{},[84,157495,157452],{},[1286,157497,155963],{},[1241,157499,157500,157505],{},[1286,157501,157502],{},[84,157503,157504],{},"%f",[1286,157506,155974],{},[19,157508,157509],{},"精度控制：",[77,157511,157513],{"className":31325,"code":157512,"language":31327,"meta":82,"style":82},"price = 12.3456\nprint(\"%.2f\" % price)\n",[84,157514,157515,157524],{"__ignoreMap":82},[87,157516,157517,157519,157521],{"class":89,"line":90},[87,157518,147442],{"class":97},[87,157520,946],{"class":171},[87,157522,157523],{"class":104}," 12.3456\n",[87,157525,157526,157528,157530,157532,157535,157537,157539],{"class":89,"line":101},[87,157527,31362],{"class":104},[87,157529,165],{"class":97},[87,157531,1347],{"class":949},[87,157533,157534],{"class":104},"%.2f",[87,157536,1347],{"class":949},[87,157538,156842],{"class":171},[87,157540,157541],{"class":97}," price)\n",[44,157543,157545],{"id":157544},"_2102-format方法","2.10.2 format方法",[77,157547,157549],{"className":31325,"code":157548,"language":31327,"meta":82,"style":82},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[84,157550,157551,157559,157567,157571,157590,157610],{"__ignoreMap":82},[87,157552,157553,157555,157557],{"class":89,"line":90},[87,157554,147297],{"class":97},[87,157556,946],{"class":171},[87,157558,150114],{"class":949},[87,157560,157561,157563,157565],{"class":89,"line":101},[87,157562,147307],{"class":97},[87,157564,946],{"class":171},[87,157566,147312],{"class":104},[87,157568,157569],{"class":89,"line":120},[87,157570,3355],{"emptyLinePlaceholder":1029},[87,157572,157573,157575,157577,157579,157581,157583,157585,157587],{"class":89,"line":222},[87,157574,31362],{"class":104},[87,157576,165],{"class":97},[87,157578,157443],{"class":949},[87,157580,33406],{"class":104},[87,157582,157449],{"class":949},[87,157584,33406],{"class":104},[87,157586,1347],{"class":949},[87,157588,157589],{"class":97},".format(name, age))\n",[87,157591,157592,157594,157596,157598,157601,157603,157606,157608],{"class":89,"line":234},[87,157593,31362],{"class":104},[87,157595,165],{"class":97},[87,157597,157443],{"class":949},[87,157599,157600],{"class":104},"{0}",[87,157602,157449],{"class":949},[87,157604,157605],{"class":104},"{1}",[87,157607,1347],{"class":949},[87,157609,157589],{"class":97},[87,157611,157612,157614,157616,157618,157621,157623,157626,157628,157631,157633,157635,157638,157640,157642],{"class":89,"line":256},[87,157613,31362],{"class":104},[87,157615,165],{"class":97},[87,157617,157443],{"class":949},[87,157619,157620],{"class":104},"{name}",[87,157622,157449],{"class":949},[87,157624,157625],{"class":104},"{age}",[87,157627,1347],{"class":949},[87,157629,157630],{"class":97},".format(",[87,157632,80736],{"class":492},[87,157634,946],{"class":171},[87,157636,157637],{"class":97},"name, ",[87,157639,71153],{"class":492},[87,157641,946],{"class":171},[87,157643,157644],{"class":97},"age))\n",[44,157646,157648],{"id":157647},"_2103-f-string","2.10.3 f-string",[19,157650,157651],{},"推荐写法：",[77,157653,157655],{"className":31325,"code":157654,"language":31327,"meta":82,"style":82},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[84,157656,157657,157665,157673,157681,157685],{"__ignoreMap":82},[87,157658,157659,157661,157663],{"class":89,"line":90},[87,157660,147297],{"class":97},[87,157662,946],{"class":171},[87,157664,150114],{"class":949},[87,157666,157667,157669,157671],{"class":89,"line":101},[87,157668,147307],{"class":97},[87,157670,946],{"class":171},[87,157672,147312],{"class":104},[87,157674,157675,157677,157679],{"class":89,"line":120},[87,157676,156119],{"class":97},[87,157678,946],{"class":171},[87,157680,157430],{"class":104},[87,157682,157683],{"class":89,"line":222},[87,157684,3355],{"emptyLinePlaceholder":1029},[87,157686,157687,157689,157691,157693,157695,157697,157699,157701,157703,157705,157707,157709,157711,157713,157716,157719,157721,157723],{"class":89,"line":234},[87,157688,31362],{"class":104},[87,157690,165],{"class":97},[87,157692,1152],{"class":171},[87,157694,157443],{"class":949},[87,157696,1988],{"class":104},[87,157698,80736],{"class":97},[87,157700,2037],{"class":104},[87,157702,157449],{"class":949},[87,157704,1988],{"class":104},[87,157706,71153],{"class":97},[87,157708,2037],{"class":104},[87,157710,157455],{"class":949},[87,157712,1988],{"class":104},[87,157714,157715],{"class":97},"score",[87,157717,157718],{"class":171},":.1f",[87,157720,2037],{"class":104},[87,157722,1347],{"class":949},[87,157724,1108],{"class":97},[19,157726,157727],{},"表达式也可以放进去：",[77,157729,157731],{"className":31325,"code":157730,"language":31327,"meta":82,"style":82},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[84,157732,157733,157741,157749],{"__ignoreMap":82},[87,157734,157735,157737,157739],{"class":89,"line":90},[87,157736,147442],{"class":97},[87,157738,946],{"class":171},[87,157740,147447],{"class":104},[87,157742,157743,157745,157747],{"class":89,"line":101},[87,157744,147452],{"class":97},[87,157746,946],{"class":171},[87,157748,55363],{"class":104},[87,157750,157751,157753,157755,157757,157760,157762,157764,157766,157769,157771,157774],{"class":89,"line":120},[87,157752,31362],{"class":104},[87,157754,165],{"class":97},[87,157756,1152],{"class":171},[87,157758,157759],{"class":949},"\"总价:",[87,157761,1988],{"class":104},[87,157763,147442],{"class":97},[87,157765,1549],{"class":171},[87,157767,157768],{"class":97}," count",[87,157770,2037],{"class":104},[87,157772,157773],{"class":949},"元\"",[87,157775,1108],{"class":97},[14,157777,157779],{"id":157778},"_211-input输入","2.11 input输入",[19,157781,157782,157785],{},[84,157783,157784],{},"input()"," 会暂停程序，等待用户输入。",[77,157787,157789],{"className":31325,"code":157788,"language":31327,"meta":82,"style":82},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[84,157790,157791,157805],{"__ignoreMap":82},[87,157792,157793,157795,157797,157799,157801,157803],{"class":89,"line":90},[87,157794,147297],{"class":97},[87,157796,946],{"class":171},[87,157798,61541],{"class":104},[87,157800,165],{"class":97},[87,157802,153140],{"class":949},[87,157804,1108],{"class":97},[87,157806,157807,157809,157811,157813,157816,157818,157820,157822,157824],{"class":89,"line":101},[87,157808,31362],{"class":104},[87,157810,165],{"class":97},[87,157812,1152],{"class":171},[87,157814,157815],{"class":949},"\"你好，",[87,157817,1988],{"class":104},[87,157819,80736],{"class":97},[87,157821,2037],{"class":104},[87,157823,1347],{"class":949},[87,157825,1108],{"class":97},[19,157827,157828],{},"输入整数：",[77,157830,157832],{"className":31325,"code":157831,"language":31327,"meta":82,"style":82},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[84,157833,157834,157852],{"__ignoreMap":82},[87,157835,157836,157838,157840,157842,157844,157846,157848,157850],{"class":89,"line":90},[87,157837,147307],{"class":97},[87,157839,946],{"class":171},[87,157841,3337],{"class":104},[87,157843,165],{"class":97},[87,157845,54757],{"class":104},[87,157847,165],{"class":97},[87,157849,153155],{"class":949},[87,157851,31444],{"class":97},[87,157853,157854,157856,157858,157860,157863,157865,157867,157869,157872,157874],{"class":89,"line":101},[87,157855,31362],{"class":104},[87,157857,165],{"class":97},[87,157859,1152],{"class":171},[87,157861,157862],{"class":949},"\"明年你",[87,157864,1988],{"class":104},[87,157866,147307],{"class":97},[87,157868,1575],{"class":171},[87,157870,157871],{"class":104}," 1}",[87,157873,150165],{"class":949},[87,157875,1108],{"class":97},[19,157877,157878],{},"输入小数：",[77,157880,157882],{"className":31325,"code":157881,"language":31327,"meta":82,"style":82},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[84,157883,157884,157903],{"__ignoreMap":82},[87,157885,157886,157888,157890,157892,157894,157896,157898,157901],{"class":89,"line":90},[87,157887,156092],{"class":97},[87,157889,946],{"class":171},[87,157891,110723],{"class":104},[87,157893,165],{"class":97},[87,157895,54757],{"class":104},[87,157897,165],{"class":97},[87,157899,157900],{"class":949},"\"请输入身高:\"",[87,157902,31444],{"class":97},[87,157904,157905,157907,157909,157911,157914,157916,157918,157921,157923,157926],{"class":89,"line":101},[87,157906,31362],{"class":104},[87,157908,165],{"class":97},[87,157910,1152],{"class":171},[87,157912,157913],{"class":949},"\"身高:",[87,157915,1988],{"class":104},[87,157917,25929],{"class":97},[87,157919,157920],{"class":171},":.2f",[87,157922,2037],{"class":104},[87,157924,157925],{"class":949},"米\"",[87,157927,1108],{"class":97},[14,157929,157931],{"id":157930},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157933,124218],{},[1055,157935,157936,157939,157942,157945],{},[29,157937,157938],{},"输入商品单价。",[29,157940,157941],{},"输入购买数量。",[29,157943,157944],{},"输入折扣，例如 0.8 表示八折。",[29,157946,157947],{},"输出最终金额，保留两位小数。",[19,157949,10985],{},[77,157951,157953],{"className":31325,"code":157952,"language":31327,"meta":82,"style":82},"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",[84,157954,157955,157974,157993,158013,158017,158037,158041,158064,158085,158107],{"__ignoreMap":82},[87,157956,157957,157959,157961,157963,157965,157967,157969,157972],{"class":89,"line":90},[87,157958,147442],{"class":97},[87,157960,946],{"class":171},[87,157962,110723],{"class":104},[87,157964,165],{"class":97},[87,157966,54757],{"class":104},[87,157968,165],{"class":97},[87,157970,157971],{"class":949},"\"请输入商品单价:\"",[87,157973,31444],{"class":97},[87,157975,157976,157978,157980,157982,157984,157986,157988,157991],{"class":89,"line":101},[87,157977,147452],{"class":97},[87,157979,946],{"class":171},[87,157981,3337],{"class":104},[87,157983,165],{"class":97},[87,157985,54757],{"class":104},[87,157987,165],{"class":97},[87,157989,157990],{"class":949},"\"请输入购买数量:\"",[87,157992,31444],{"class":97},[87,157994,157995,157998,158000,158002,158004,158006,158008,158011],{"class":89,"line":120},[87,157996,157997],{"class":97},"discount ",[87,157999,946],{"class":171},[87,158001,110723],{"class":104},[87,158003,165],{"class":97},[87,158005,54757],{"class":104},[87,158007,165],{"class":97},[87,158009,158010],{"class":949},"\"请输入折扣:\"",[87,158012,31444],{"class":97},[87,158014,158015],{"class":89,"line":222},[87,158016,3355],{"emptyLinePlaceholder":1029},[87,158018,158019,158022,158024,158027,158029,158032,158034],{"class":89,"line":234},[87,158020,158021],{"class":97},"total ",[87,158023,946],{"class":171},[87,158025,158026],{"class":97}," price ",[87,158028,1549],{"class":171},[87,158030,158031],{"class":97}," count ",[87,158033,1549],{"class":171},[87,158035,158036],{"class":97}," discount\n",[87,158038,158039],{"class":89,"line":256},[87,158040,3355],{"emptyLinePlaceholder":1029},[87,158042,158043,158045,158047,158049,158052,158054,158056,158058,158060,158062],{"class":89,"line":269},[87,158044,31362],{"class":104},[87,158046,165],{"class":97},[87,158048,1152],{"class":171},[87,158050,158051],{"class":949},"\"商品单价:",[87,158053,1988],{"class":104},[87,158055,80741],{"class":97},[87,158057,157920],{"class":171},[87,158059,2037],{"class":104},[87,158061,1347],{"class":949},[87,158063,1108],{"class":97},[87,158065,158066,158068,158070,158072,158075,158077,158079,158081,158083],{"class":89,"line":463},[87,158067,31362],{"class":104},[87,158069,165],{"class":97},[87,158071,1152],{"class":171},[87,158073,158074],{"class":949},"\"购买数量:",[87,158076,1988],{"class":104},[87,158078,85360],{"class":97},[87,158080,2037],{"class":104},[87,158082,1347],{"class":949},[87,158084,1108],{"class":97},[87,158086,158087,158089,158091,158093,158096,158098,158101,158103,158105],{"class":89,"line":469},[87,158088,31362],{"class":104},[87,158090,165],{"class":97},[87,158092,1152],{"class":171},[87,158094,158095],{"class":949},"\"折扣:",[87,158097,1988],{"class":104},[87,158099,158100],{"class":97},"discount",[87,158102,2037],{"class":104},[87,158104,1347],{"class":949},[87,158106,1108],{"class":97},[87,158108,158109,158111,158113,158115,158118,158120,158123,158125,158127,158129],{"class":89,"line":2287},[87,158110,31362],{"class":104},[87,158112,165],{"class":97},[87,158114,1152],{"class":171},[87,158116,158117],{"class":949},"\"应付金额:",[87,158119,1988],{"class":104},[87,158121,158122],{"class":97},"total",[87,158124,157920],{"class":171},[87,158126,2037],{"class":104},[87,158128,157773],{"class":949},[87,158130,1108],{"class":97},[14,158132,158134],{"id":158133},"_213-易错点","2.13 易错点",[1055,158136,158137,158142,158148,158156,158159],{},[29,158138,158139,158141],{},[84,158140,157784],{}," 的结果是字符串，做运算前要转换。",[29,158143,158144,158145,29332],{},"字符串拼接时，数字要先 ",[84,158146,158147],{},"str()",[29,158149,158150,158152,158153,158155],{},[84,158151,946],{}," 是赋值，",[84,158154,3903],{}," 是比较。",[29,158157,158158],{},"Python 没有自增自减运算符。",[29,158160,158161],{},"浮点数计算可能有精度误差：",[77,158163,158165],{"className":31325,"code":158164,"language":31327,"meta":82,"style":82},"print(0.1 + 0.2)\n",[84,158166,158167],{"__ignoreMap":82},[87,158168,158169,158171,158173,158175,158177,158180],{"class":89,"line":90},[87,158170,31362],{"class":104},[87,158172,165],{"class":97},[87,158174,87136],{"class":104},[87,158176,46513],{"class":171},[87,158178,158179],{"class":104}," 0.2",[87,158181,1108],{"class":97},[19,158183,158184,158185,158188],{},"金额计算如果要求严格，可以后续学习 ",[84,158186,158187],{},"decimal"," 模块。",[14,158190,158192],{"id":158191},"_214-本章练习","2.14 本章练习",[1055,158194,158195,158198,158201,158204,158207],{},[29,158196,158197],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[29,158199,158200],{},"输入圆的半径，计算面积，保留两位小数。",[29,158202,158203],{},"输入工资和奖金，计算总收入。",[29,158205,158206],{},"输入摄氏温度，转换为华氏温度。",[29,158208,158209],{},"写一个 BMI 计算程序：",[77,158211,158214],{"className":158212,"code":158213,"language":599,"meta":82},[597],"BMI = 体重kg \u002F 身高m ** 2\n",[84,158215,158213],{"__ignoreMap":82},[1006,158217,158218],{},"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":82,"searchDepth":101,"depth":101,"links":158220},[158221,158222,158223,158224,158225,158226,158227,158233,158234,158235,158240,158241,158242,158243],{"id":155782,"depth":101,"text":155783},{"id":155891,"depth":101,"text":155892},{"id":156062,"depth":101,"text":156063},{"id":156139,"depth":101,"text":156140},{"id":51677,"depth":101,"text":51678},{"id":156445,"depth":101,"text":156446},{"id":156671,"depth":101,"text":156672,"children":158228},[158229,158230,158231,158232],{"id":156675,"depth":120,"text":156676},{"id":156869,"depth":120,"text":156870},{"id":156957,"depth":120,"text":156958},{"id":157063,"depth":120,"text":157064},{"id":157172,"depth":101,"text":157173},{"id":157330,"depth":101,"text":157331},{"id":157395,"depth":101,"text":157396,"children":158236},[158237,158238,158239],{"id":157399,"depth":120,"text":157400},{"id":157544,"depth":120,"text":157545},{"id":157647,"depth":120,"text":157648},{"id":157778,"depth":101,"text":157779},{"id":157930,"depth":101,"text":157931},{"id":158133,"depth":101,"text":158134},{"id":158191,"depth":101,"text":158192},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155774,"description":1026},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158250,"title":158251,"body":158252,"description":1026,"extension":1027,"meta":159888,"navigation":1029,"path":159889,"seo":159890,"stem":159891,"__hash__":159892},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158253,"toc":159869},[158254,158257,158261,158264,158279,158282,158310,158314,158364,158366,158382,158385,158411,158414,158418,158485,158488,158504,158508,158511,158629,158632,158639,158688,158694,158698,158701,158814,158817,158821,158825,158828,158878,158882,158885,158935,158939,158942,158980,158984,158987,159033,159036,159071,159075,159080,159083,159129,159131,159198,159202,159208,159319,159328,159332,159334,159345,159347,159513,159517,159519,159533,159535,159749,159753,159772,159789,159792,159838,159842,159866],[10,158255,158251],{"id":158256},"_3-判断语句",[14,158258,158260],{"id":158259},"_31-布尔值","3.1 布尔值",[19,158262,158263],{},"判断语句依赖布尔值：",[77,158265,158267],{"className":31325,"code":158266,"language":31327,"meta":82,"style":82},"True\nFalse\n",[84,158268,158269,158274],{"__ignoreMap":82},[87,158270,158271],{"class":89,"line":90},[87,158272,158273],{"class":104},"True\n",[87,158275,158276],{"class":89,"line":101},[87,158277,158278],{"class":104},"False\n",[19,158280,158281],{},"比较表达式会产生布尔值：",[77,158283,158285],{"className":31325,"code":158284,"language":31327,"meta":82,"style":82},"age = 18\nprint(age >= 18)  # True\n",[84,158286,158287,158295],{"__ignoreMap":82},[87,158288,158289,158291,158293],{"class":89,"line":90},[87,158290,147307],{"class":97},[87,158292,946],{"class":171},[87,158294,147312],{"class":104},[87,158296,158297,158299,158301,158303,158305,158307],{"class":89,"line":101},[87,158298,31362],{"class":104},[87,158300,156529],{"class":97},[87,158302,2666],{"class":171},[87,158304,157046],{"class":104},[87,158306,46755],{"class":97},[87,158308,158309],{"class":199},"# True\n",[14,158311,158313],{"id":158312},"_32-if基础语法","3.2 if基础语法",[77,158315,158317],{"className":31325,"code":158316,"language":31327,"meta":82,"style":82},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[84,158318,158319,158337,158341,158353],{"__ignoreMap":82},[87,158320,158321,158323,158325,158327,158329,158331,158333,158335],{"class":89,"line":90},[87,158322,147307],{"class":97},[87,158324,946],{"class":171},[87,158326,3337],{"class":104},[87,158328,165],{"class":97},[87,158330,54757],{"class":104},[87,158332,165],{"class":97},[87,158334,153155],{"class":949},[87,158336,31444],{"class":97},[87,158338,158339],{"class":89,"line":101},[87,158340,3355],{"emptyLinePlaceholder":1029},[87,158342,158343,158345,158347,158349,158351],{"class":89,"line":120},[87,158344,2488],{"class":171},[87,158346,16656],{"class":97},[87,158348,2666],{"class":171},[87,158350,157046],{"class":104},[87,158352,4693],{"class":97},[87,158354,158355,158357,158359,158362],{"class":89,"line":222},[87,158356,32246],{"class":104},[87,158358,165],{"class":97},[87,158360,158361],{"class":949},"\"可以进入网吧\"",[87,158363,1108],{"class":97},[19,158365,9975],{},[1055,158367,158368,158373,158376,158379],{},[29,158369,158370,158372],{},[84,158371,2488],{}," 后面是条件表达式。",[29,158374,158375],{},"条件后面必须写冒号。",[29,158377,158378],{},"条件成立时执行缩进代码块。",[29,158380,158381],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158383,158384],{},"错误示例：",[77,158386,158388],{"className":31325,"code":158387,"language":31327,"meta":82,"style":82},"if age >= 18\n    print(\"可以进入\")\n",[84,158389,158390,158400],{"__ignoreMap":82},[87,158391,158392,158394,158396,158398],{"class":89,"line":90},[87,158393,2488],{"class":171},[87,158395,16656],{"class":97},[87,158397,2666],{"class":171},[87,158399,147312],{"class":104},[87,158401,158402,158404,158406,158409],{"class":89,"line":101},[87,158403,32246],{"class":104},[87,158405,165],{"class":97},[87,158407,158408],{"class":949},"\"可以进入\"",[87,158410,1108],{"class":97},[19,158412,158413],{},"缺少冒号。",[14,158415,158417],{"id":158416},"_33-if-else","3.3 if else",[77,158419,158421],{"className":31325,"code":158420,"language":31327,"meta":82,"style":82},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[84,158422,158423,158441,158445,158457,158468,158474],{"__ignoreMap":82},[87,158424,158425,158427,158429,158431,158433,158435,158437,158439],{"class":89,"line":90},[87,158426,147307],{"class":97},[87,158428,946],{"class":171},[87,158430,3337],{"class":104},[87,158432,165],{"class":97},[87,158434,54757],{"class":104},[87,158436,165],{"class":97},[87,158438,153155],{"class":949},[87,158440,31444],{"class":97},[87,158442,158443],{"class":89,"line":101},[87,158444,3355],{"emptyLinePlaceholder":1029},[87,158446,158447,158449,158451,158453,158455],{"class":89,"line":120},[87,158448,2488],{"class":171},[87,158450,16656],{"class":97},[87,158452,2666],{"class":171},[87,158454,157046],{"class":104},[87,158456,4693],{"class":97},[87,158458,158459,158461,158463,158466],{"class":89,"line":222},[87,158460,32246],{"class":104},[87,158462,165],{"class":97},[87,158464,158465],{"class":949},"\"成年人\"",[87,158467,1108],{"class":97},[87,158469,158470,158472],{"class":89,"line":234},[87,158471,2657],{"class":171},[87,158473,4693],{"class":97},[87,158475,158476,158478,158480,158483],{"class":89,"line":256},[87,158477,32246],{"class":104},[87,158479,165],{"class":97},[87,158481,158482],{"class":949},"\"未成年人\"",[87,158484,1108],{"class":97},[19,158486,158487],{},"执行逻辑：",[1055,158489,158490,158496,158501],{},[29,158491,158492,158493,158495],{},"条件成立，执行 ",[84,158494,2488],{}," 代码块。",[29,158497,158498,158499,158495],{},"条件不成立，执行 ",[84,158500,2657],{},[29,158502,158503],{},"两个代码块只会执行其中一个。",[14,158505,158507],{"id":158506},"_34-if-elif-else","3.4 if elif else",[19,158509,158510],{},"多条件判断：",[77,158512,158514],{"className":31325,"code":158513,"language":31327,"meta":82,"style":82},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[84,158515,158516,158534,158538,158552,158563,158577,158588,158601,158612,158618],{"__ignoreMap":82},[87,158517,158518,158520,158522,158524,158526,158528,158530,158532],{"class":89,"line":90},[87,158519,156119],{"class":97},[87,158521,946],{"class":171},[87,158523,3337],{"class":104},[87,158525,165],{"class":97},[87,158527,54757],{"class":104},[87,158529,165],{"class":97},[87,158531,153170],{"class":949},[87,158533,31444],{"class":97},[87,158535,158536],{"class":89,"line":101},[87,158537,3355],{"emptyLinePlaceholder":1029},[87,158539,158540,158542,158545,158547,158550],{"class":89,"line":120},[87,158541,2488],{"class":171},[87,158543,158544],{"class":97}," score ",[87,158546,2666],{"class":171},[87,158548,158549],{"class":104}," 90",[87,158551,4693],{"class":97},[87,158553,158554,158556,158558,158561],{"class":89,"line":222},[87,158555,32246],{"class":104},[87,158557,165],{"class":97},[87,158559,158560],{"class":949},"\"优秀\"",[87,158562,1108],{"class":97},[87,158564,158565,158568,158570,158572,158575],{"class":89,"line":234},[87,158566,158567],{"class":171},"elif",[87,158569,158544],{"class":97},[87,158571,2666],{"class":171},[87,158573,158574],{"class":104}," 80",[87,158576,4693],{"class":97},[87,158578,158579,158581,158583,158586],{"class":89,"line":256},[87,158580,32246],{"class":104},[87,158582,165],{"class":97},[87,158584,158585],{"class":949},"\"良好\"",[87,158587,1108],{"class":97},[87,158589,158590,158592,158594,158596,158599],{"class":89,"line":269},[87,158591,158567],{"class":171},[87,158593,158544],{"class":97},[87,158595,2666],{"class":171},[87,158597,158598],{"class":104}," 60",[87,158600,4693],{"class":97},[87,158602,158603,158605,158607,158610],{"class":89,"line":463},[87,158604,32246],{"class":104},[87,158606,165],{"class":97},[87,158608,158609],{"class":949},"\"及格\"",[87,158611,1108],{"class":97},[87,158613,158614,158616],{"class":89,"line":469},[87,158615,2657],{"class":171},[87,158617,4693],{"class":97},[87,158619,158620,158622,158624,158627],{"class":89,"line":2287},[87,158621,32246],{"class":104},[87,158623,165],{"class":97},[87,158625,158626],{"class":949},"\"不及格\"",[87,158628,1108],{"class":97},[19,158630,158631],{},"注意判断顺序很重要。",[19,158633,158634,158635,158638],{},"如果把 ",[84,158636,158637],{},"score >= 60"," 放在最前面：",[77,158640,158642],{"className":31325,"code":158641,"language":31327,"meta":82,"style":82},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[84,158643,158644,158656,158666,158678],{"__ignoreMap":82},[87,158645,158646,158648,158650,158652,158654],{"class":89,"line":90},[87,158647,2488],{"class":171},[87,158649,158544],{"class":97},[87,158651,2666],{"class":171},[87,158653,158598],{"class":104},[87,158655,4693],{"class":97},[87,158657,158658,158660,158662,158664],{"class":89,"line":101},[87,158659,32246],{"class":104},[87,158661,165],{"class":97},[87,158663,158609],{"class":949},[87,158665,1108],{"class":97},[87,158667,158668,158670,158672,158674,158676],{"class":89,"line":120},[87,158669,158567],{"class":171},[87,158671,158544],{"class":97},[87,158673,2666],{"class":171},[87,158675,158549],{"class":104},[87,158677,4693],{"class":97},[87,158679,158680,158682,158684,158686],{"class":89,"line":222},[87,158681,32246],{"class":104},[87,158683,165],{"class":97},[87,158685,158560],{"class":949},[87,158687,1108],{"class":97},[19,158689,158690,158691,158693],{},"成绩 95 会先满足 ",[84,158692,158637],{},"，后面的优秀分支就不会执行。",[14,158695,158697],{"id":158696},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158699,158700],{},"嵌套判断就是在一个判断内部再写判断。",[77,158702,158704],{"className":31325,"code":158703,"language":31327,"meta":82,"style":82},"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",[84,158705,158706,158724,158739,158743,158755,158769,158779,158786,158797,158803],{"__ignoreMap":82},[87,158707,158708,158710,158712,158714,158716,158718,158720,158722],{"class":89,"line":90},[87,158709,147307],{"class":97},[87,158711,946],{"class":171},[87,158713,3337],{"class":104},[87,158715,165],{"class":97},[87,158717,54757],{"class":104},[87,158719,165],{"class":97},[87,158721,153155],{"class":949},[87,158723,31444],{"class":97},[87,158725,158726,158728,158730,158732,158734,158737],{"class":89,"line":101},[87,158727,157122],{"class":97},[87,158729,946],{"class":171},[87,158731,61541],{"class":104},[87,158733,165],{"class":97},[87,158735,158736],{"class":949},"\"是否有票(y\u002Fn):\"",[87,158738,1108],{"class":97},[87,158740,158741],{"class":89,"line":120},[87,158742,3355],{"emptyLinePlaceholder":1029},[87,158744,158745,158747,158749,158751,158753],{"class":89,"line":222},[87,158746,2488],{"class":171},[87,158748,16656],{"class":97},[87,158750,2666],{"class":171},[87,158752,157046],{"class":104},[87,158754,4693],{"class":97},[87,158756,158757,158759,158762,158764,158767],{"class":89,"line":234},[87,158758,4055],{"class":171},[87,158760,158761],{"class":97}," has_ticket ",[87,158763,3903],{"class":171},[87,158765,158766],{"class":949}," \"y\"",[87,158768,4693],{"class":97},[87,158770,158771,158773,158775,158777],{"class":89,"line":256},[87,158772,33398],{"class":104},[87,158774,165],{"class":97},[87,158776,158408],{"class":949},[87,158778,1108],{"class":97},[87,158780,158781,158784],{"class":89,"line":269},[87,158782,158783],{"class":171},"    else",[87,158785,4693],{"class":97},[87,158787,158788,158790,158792,158795],{"class":89,"line":463},[87,158789,33398],{"class":104},[87,158791,165],{"class":97},[87,158793,158794],{"class":949},"\"请先买票\"",[87,158796,1108],{"class":97},[87,158798,158799,158801],{"class":89,"line":469},[87,158800,2657],{"class":171},[87,158802,4693],{"class":97},[87,158804,158805,158807,158809,158812],{"class":89,"line":2287},[87,158806,32246],{"class":104},[87,158808,165],{"class":97},[87,158810,158811],{"class":949},"\"未成年人禁止进入\"",[87,158813,1108],{"class":97},[19,158815,158816],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158818,158820],{"id":158819},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[44,158822,158824],{"id":158823},"_361-and","3.6.1 and",[19,158826,158827],{},"两个条件都成立才成立。",[77,158829,158831],{"className":31325,"code":158830,"language":31327,"meta":82,"style":82},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[84,158832,158833,158841,158849,158853,158868],{"__ignoreMap":82},[87,158834,158835,158837,158839],{"class":89,"line":90},[87,158836,147307],{"class":97},[87,158838,946],{"class":171},[87,158840,88991],{"class":104},[87,158842,158843,158845,158847],{"class":89,"line":101},[87,158844,157122],{"class":97},[87,158846,946],{"class":171},[87,158848,154360],{"class":104},[87,158850,158851],{"class":89,"line":120},[87,158852,3355],{"emptyLinePlaceholder":1029},[87,158854,158855,158857,158859,158861,158863,158865],{"class":89,"line":222},[87,158856,2488],{"class":171},[87,158858,16656],{"class":97},[87,158860,2666],{"class":171},[87,158862,157046],{"class":104},[87,158864,121355],{"class":171},[87,158866,158867],{"class":97}," has_ticket:\n",[87,158869,158870,158872,158874,158876],{"class":89,"line":234},[87,158871,32246],{"class":104},[87,158873,165],{"class":97},[87,158875,158408],{"class":949},[87,158877,1108],{"class":97},[44,158879,158881],{"id":158880},"_362-or","3.6.2 or",[19,158883,158884],{},"只要一个条件成立就成立。",[77,158886,158888],{"className":31325,"code":158887,"language":31327,"meta":82,"style":82},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[84,158889,158890,158899,158908,158912,158924],{"__ignoreMap":82},[87,158891,158892,158895,158897],{"class":89,"line":90},[87,158893,158894],{"class":97},"is_vip ",[87,158896,946],{"class":171},[87,158898,126733],{"class":104},[87,158900,158901,158904,158906],{"class":89,"line":101},[87,158902,158903],{"class":97},"coupon ",[87,158905,946],{"class":171},[87,158907,154360],{"class":104},[87,158909,158910],{"class":89,"line":120},[87,158911,3355],{"emptyLinePlaceholder":1029},[87,158913,158914,158916,158919,158921],{"class":89,"line":222},[87,158915,2488],{"class":171},[87,158917,158918],{"class":97}," is_vip ",[87,158920,116016],{"class":171},[87,158922,158923],{"class":97}," coupon:\n",[87,158925,158926,158928,158930,158933],{"class":89,"line":234},[87,158927,32246],{"class":104},[87,158929,165],{"class":97},[87,158931,158932],{"class":949},"\"可以享受优惠\"",[87,158934,1108],{"class":97},[44,158936,158938],{"id":158937},"_363-not","3.6.3 not",[19,158940,158941],{},"取反。",[77,158943,158945],{"className":31325,"code":158944,"language":31327,"meta":82,"style":82},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[84,158946,158947,158956,158960,158969],{"__ignoreMap":82},[87,158948,158949,158952,158954],{"class":89,"line":90},[87,158950,158951],{"class":97},"is_closed ",[87,158953,946],{"class":171},[87,158955,126733],{"class":104},[87,158957,158958],{"class":89,"line":101},[87,158959,3355],{"emptyLinePlaceholder":1029},[87,158961,158962,158964,158966],{"class":89,"line":120},[87,158963,2488],{"class":171},[87,158965,39877],{"class":171},[87,158967,158968],{"class":97}," is_closed:\n",[87,158970,158971,158973,158975,158978],{"class":89,"line":222},[87,158972,32246],{"class":104},[87,158974,165],{"class":97},[87,158976,158977],{"class":949},"\"店铺营业中\"",[87,158979,1108],{"class":97},[14,158981,158983],{"id":158982},"_37-链式比较","3.7 链式比较",[19,158985,158986],{},"Python 支持链式比较：",[77,158988,158990],{"className":31325,"code":158989,"language":31327,"meta":82,"style":82},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[84,158991,158992,159001,159005,159022],{"__ignoreMap":82},[87,158993,158994,158996,158998],{"class":89,"line":90},[87,158995,156119],{"class":97},[87,158997,946],{"class":171},[87,158999,159000],{"class":104}," 85\n",[87,159002,159003],{"class":89,"line":101},[87,159004,3355],{"emptyLinePlaceholder":1029},[87,159006,159007,159009,159011,159014,159016,159018,159020],{"class":89,"line":120},[87,159008,2488],{"class":171},[87,159010,577],{"class":104},[87,159012,159013],{"class":171}," \u003C=",[87,159015,158544],{"class":97},[87,159017,2544],{"class":171},[87,159019,6704],{"class":104},[87,159021,4693],{"class":97},[87,159023,159024,159026,159028,159031],{"class":89,"line":222},[87,159025,32246],{"class":104},[87,159027,165],{"class":97},[87,159029,159030],{"class":949},"\"成绩合法\"",[87,159032,1108],{"class":97},[19,159034,159035],{},"等价于：",[77,159037,159039],{"className":31325,"code":159038,"language":31327,"meta":82,"style":82},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[84,159040,159041,159061],{"__ignoreMap":82},[87,159042,159043,159045,159047,159049,159051,159053,159055,159057,159059],{"class":89,"line":90},[87,159044,2488],{"class":171},[87,159046,158544],{"class":97},[87,159048,2666],{"class":171},[87,159050,577],{"class":104},[87,159052,121355],{"class":171},[87,159054,158544],{"class":97},[87,159056,2544],{"class":171},[87,159058,6704],{"class":104},[87,159060,4693],{"class":97},[87,159062,159063,159065,159067,159069],{"class":89,"line":101},[87,159064,32246],{"class":104},[87,159066,165],{"class":97},[87,159068,159030],{"class":949},[87,159070,1108],{"class":97},[14,159072,159074],{"id":159073},"_38-真值和假值","3.8 真值和假值",[19,159076,117393,159077,159079],{},[84,159078,2488],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,159081,159082],{},"假值：",[77,159084,159086],{"className":31325,"code":159085,"language":31327,"meta":82,"style":82},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[84,159087,159088,159092,159097,159101,159105,159110,159114,159118,159123],{"__ignoreMap":82},[87,159089,159090],{"class":89,"line":90},[87,159091,158278],{"class":104},[87,159093,159094],{"class":89,"line":101},[87,159095,159096],{"class":104},"None\n",[87,159098,159099],{"class":89,"line":120},[87,159100,4039],{"class":104},[87,159102,159103],{"class":89,"line":222},[87,159104,33289],{"class":104},[87,159106,159107],{"class":89,"line":234},[87,159108,159109],{"class":949},"\"\"\n",[87,159111,159112],{"class":89,"line":256},[87,159113,33304],{"class":97},[87,159115,159116],{"class":89,"line":269},[87,159117,2931],{"class":97},[87,159119,159120],{"class":89,"line":463},[87,159121,159122],{"class":97},"{}\n",[87,159124,159125,159127],{"class":89,"line":469},[87,159126,156051],{"class":104},[87,159128,2931],{"class":97},[19,159130,16085],{},[77,159132,159134],{"className":31325,"code":159133,"language":31327,"meta":82,"style":82},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[84,159135,159136,159150,159154,159161,159181,159187],{"__ignoreMap":82},[87,159137,159138,159140,159142,159144,159146,159148],{"class":89,"line":90},[87,159139,147297],{"class":97},[87,159141,946],{"class":171},[87,159143,61541],{"class":104},[87,159145,165],{"class":97},[87,159147,153140],{"class":949},[87,159149,1108],{"class":97},[87,159151,159152],{"class":89,"line":101},[87,159153,3355],{"emptyLinePlaceholder":1029},[87,159155,159156,159158],{"class":89,"line":120},[87,159157,2488],{"class":171},[87,159159,159160],{"class":97}," name:\n",[87,159162,159163,159165,159167,159169,159171,159173,159175,159177,159179],{"class":89,"line":222},[87,159164,32246],{"class":104},[87,159166,165],{"class":97},[87,159168,1152],{"class":171},[87,159170,157815],{"class":949},[87,159172,1988],{"class":104},[87,159174,80736],{"class":97},[87,159176,2037],{"class":104},[87,159178,1347],{"class":949},[87,159180,1108],{"class":97},[87,159182,159183,159185],{"class":89,"line":234},[87,159184,2657],{"class":171},[87,159186,4693],{"class":97},[87,159188,159189,159191,159193,159196],{"class":89,"line":256},[87,159190,32246],{"class":104},[87,159192,165],{"class":97},[87,159194,159195],{"class":949},"\"姓名不能为空\"",[87,159197,1108],{"class":97},[14,159199,159201],{"id":159200},"_39-match语句","3.9 match语句",[19,159203,159204,159205,159207],{},"Python 3.10 开始支持 ",[84,159206,72193],{},"。它适合处理固定选项。",[77,159209,159211],{"className":31325,"code":159210,"language":31327,"meta":82,"style":82},"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",[84,159212,159213,159229,159233,159240,159250,159261,159270,159281,159290,159301,159308],{"__ignoreMap":82},[87,159214,159215,159218,159220,159222,159224,159227],{"class":89,"line":90},[87,159216,159217],{"class":97},"command ",[87,159219,946],{"class":171},[87,159221,61541],{"class":104},[87,159223,165],{"class":97},[87,159225,159226],{"class":949},"\"请输入命令:\"",[87,159228,1108],{"class":97},[87,159230,159231],{"class":89,"line":101},[87,159232,3355],{"emptyLinePlaceholder":1029},[87,159234,159235,159237],{"class":89,"line":120},[87,159236,72193],{"class":171},[87,159238,159239],{"class":97}," command:\n",[87,159241,159242,159245,159248],{"class":89,"line":222},[87,159243,159244],{"class":171},"    case",[87,159246,159247],{"class":949}," \"start\"",[87,159249,4693],{"class":97},[87,159251,159252,159254,159256,159259],{"class":89,"line":234},[87,159253,33398],{"class":104},[87,159255,165],{"class":97},[87,159257,159258],{"class":949},"\"启动\"",[87,159260,1108],{"class":97},[87,159262,159263,159265,159268],{"class":89,"line":256},[87,159264,159244],{"class":171},[87,159266,159267],{"class":949}," \"stop\"",[87,159269,4693],{"class":97},[87,159271,159272,159274,159276,159279],{"class":89,"line":269},[87,159273,33398],{"class":104},[87,159275,165],{"class":97},[87,159277,159278],{"class":949},"\"停止\"",[87,159280,1108],{"class":97},[87,159282,159283,159285,159288],{"class":89,"line":463},[87,159284,159244],{"class":171},[87,159286,159287],{"class":949}," \"restart\"",[87,159289,4693],{"class":97},[87,159291,159292,159294,159296,159299],{"class":89,"line":469},[87,159293,33398],{"class":104},[87,159295,165],{"class":97},[87,159297,159298],{"class":949},"\"重启\"",[87,159300,1108],{"class":97},[87,159302,159303,159305],{"class":89,"line":2287},[87,159304,159244],{"class":171},[87,159306,159307],{"class":97}," _:\n",[87,159309,159310,159312,159314,159317],{"class":89,"line":2568},[87,159311,33398],{"class":104},[87,159313,165],{"class":97},[87,159315,159316],{"class":949},"\"未知命令\"",[87,159318,1108],{"class":97},[19,159320,159321,159322,159324,159325,159327],{},"入门阶段掌握 ",[84,159323,155419],{}," 更重要，",[84,159326,72193],{}," 可以作为补充。",[14,159329,159331],{"id":159330},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,159333,124218],{},[1055,159335,159336,159339,159342],{},[29,159337,159338],{},"输入成绩。",[29,159340,159341],{},"判断成绩是否合法。",[29,159343,159344],{},"输出等级。",[19,159346,10985],{},[77,159348,159350],{"className":31325,"code":159349,"language":31327,"meta":82,"style":82},"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",[84,159351,159352,159370,159374,159392,159403,159415,159426,159438,159449,159462,159473,159485,159496,159502],{"__ignoreMap":82},[87,159353,159354,159356,159358,159360,159362,159364,159366,159368],{"class":89,"line":90},[87,159355,156119],{"class":97},[87,159357,946],{"class":171},[87,159359,110723],{"class":104},[87,159361,165],{"class":97},[87,159363,54757],{"class":104},[87,159365,165],{"class":97},[87,159367,153170],{"class":949},[87,159369,31444],{"class":97},[87,159371,159372],{"class":89,"line":101},[87,159373,3355],{"emptyLinePlaceholder":1029},[87,159375,159376,159378,159380,159382,159384,159386,159388,159390],{"class":89,"line":120},[87,159377,2488],{"class":171},[87,159379,39877],{"class":171},[87,159381,577],{"class":104},[87,159383,159013],{"class":171},[87,159385,158544],{"class":97},[87,159387,2544],{"class":171},[87,159389,6704],{"class":104},[87,159391,4693],{"class":97},[87,159393,159394,159396,159398,159401],{"class":89,"line":222},[87,159395,32246],{"class":104},[87,159397,165],{"class":97},[87,159399,159400],{"class":949},"\"成绩不合法\"",[87,159402,1108],{"class":97},[87,159404,159405,159407,159409,159411,159413],{"class":89,"line":234},[87,159406,158567],{"class":171},[87,159408,158544],{"class":97},[87,159410,2666],{"class":171},[87,159412,158549],{"class":104},[87,159414,4693],{"class":97},[87,159416,159417,159419,159421,159424],{"class":89,"line":256},[87,159418,32246],{"class":104},[87,159420,165],{"class":97},[87,159422,159423],{"class":949},"\"等级:A\"",[87,159425,1108],{"class":97},[87,159427,159428,159430,159432,159434,159436],{"class":89,"line":269},[87,159429,158567],{"class":171},[87,159431,158544],{"class":97},[87,159433,2666],{"class":171},[87,159435,158574],{"class":104},[87,159437,4693],{"class":97},[87,159439,159440,159442,159444,159447],{"class":89,"line":463},[87,159441,32246],{"class":104},[87,159443,165],{"class":97},[87,159445,159446],{"class":949},"\"等级:B\"",[87,159448,1108],{"class":97},[87,159450,159451,159453,159455,159457,159460],{"class":89,"line":469},[87,159452,158567],{"class":171},[87,159454,158544],{"class":97},[87,159456,2666],{"class":171},[87,159458,159459],{"class":104}," 70",[87,159461,4693],{"class":97},[87,159463,159464,159466,159468,159471],{"class":89,"line":2287},[87,159465,32246],{"class":104},[87,159467,165],{"class":97},[87,159469,159470],{"class":949},"\"等级:C\"",[87,159472,1108],{"class":97},[87,159474,159475,159477,159479,159481,159483],{"class":89,"line":2568},[87,159476,158567],{"class":171},[87,159478,158544],{"class":97},[87,159480,2666],{"class":171},[87,159482,158598],{"class":104},[87,159484,4693],{"class":97},[87,159486,159487,159489,159491,159494],{"class":89,"line":2573},[87,159488,32246],{"class":104},[87,159490,165],{"class":97},[87,159492,159493],{"class":949},"\"等级:D\"",[87,159495,1108],{"class":97},[87,159497,159498,159500],{"class":89,"line":2579},[87,159499,2657],{"class":171},[87,159501,4693],{"class":97},[87,159503,159504,159506,159508,159511],{"class":89,"line":2584},[87,159505,32246],{"class":104},[87,159507,165],{"class":97},[87,159509,159510],{"class":949},"\"等级:E\"",[87,159512,1108],{"class":97},[14,159514,159516],{"id":159515},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,159518,124218],{},[1055,159520,159521,159524,159527,159530],{},[29,159522,159523],{},"输入消费金额。",[29,159525,159526],{},"输入会员等级，普通、银卡、金卡。",[29,159528,159529],{},"普通不打折，银卡 9 折，金卡 8 折。",[29,159531,159532],{},"满 500 再减 50。",[19,159534,10985],{},[77,159536,159538],{"className":31325,"code":159537,"language":31327,"meta":82,"style":82},"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",[84,159539,159540,159560,159576,159580,159588,159592,159606,159616,159629,159638,159651,159659,159665,159676,159680,159694,159698,159712,159722,159726],{"__ignoreMap":82},[87,159541,159542,159545,159547,159549,159551,159553,159555,159558],{"class":89,"line":90},[87,159543,159544],{"class":97},"amount ",[87,159546,946],{"class":171},[87,159548,110723],{"class":104},[87,159550,165],{"class":97},[87,159552,54757],{"class":104},[87,159554,165],{"class":97},[87,159556,159557],{"class":949},"\"请输入消费金额:\"",[87,159559,31444],{"class":97},[87,159561,159562,159565,159567,159569,159571,159574],{"class":89,"line":101},[87,159563,159564],{"class":97},"level ",[87,159566,946],{"class":171},[87,159568,61541],{"class":104},[87,159570,165],{"class":97},[87,159572,159573],{"class":949},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[87,159575,1108],{"class":97},[87,159577,159578],{"class":89,"line":120},[87,159579,3355],{"emptyLinePlaceholder":1029},[87,159581,159582,159584,159586],{"class":89,"line":222},[87,159583,157997],{"class":97},[87,159585,946],{"class":171},[87,159587,56635],{"class":104},[87,159589,159590],{"class":89,"line":234},[87,159591,3355],{"emptyLinePlaceholder":1029},[87,159593,159594,159596,159599,159601,159604],{"class":89,"line":256},[87,159595,2488],{"class":171},[87,159597,159598],{"class":97}," level ",[87,159600,3903],{"class":171},[87,159602,159603],{"class":949}," \"银卡\"",[87,159605,4693],{"class":97},[87,159607,159608,159611,159613],{"class":89,"line":269},[87,159609,159610],{"class":97},"    discount ",[87,159612,946],{"class":171},[87,159614,159615],{"class":104}," 0.9\n",[87,159617,159618,159620,159622,159624,159627],{"class":89,"line":463},[87,159619,158567],{"class":171},[87,159621,159598],{"class":97},[87,159623,3903],{"class":171},[87,159625,159626],{"class":949}," \"金卡\"",[87,159628,4693],{"class":97},[87,159630,159631,159633,159635],{"class":89,"line":469},[87,159632,159610],{"class":97},[87,159634,946],{"class":171},[87,159636,159637],{"class":104}," 0.8\n",[87,159639,159640,159642,159644,159646,159649],{"class":89,"line":2287},[87,159641,158567],{"class":171},[87,159643,159598],{"class":97},[87,159645,3903],{"class":171},[87,159647,159648],{"class":949}," \"普通\"",[87,159650,4693],{"class":97},[87,159652,159653,159655,159657],{"class":89,"line":2568},[87,159654,159610],{"class":97},[87,159656,946],{"class":171},[87,159658,56635],{"class":104},[87,159660,159661,159663],{"class":89,"line":2573},[87,159662,2657],{"class":171},[87,159664,4693],{"class":97},[87,159666,159667,159669,159671,159674],{"class":89,"line":2579},[87,159668,32246],{"class":104},[87,159670,165],{"class":97},[87,159672,159673],{"class":949},"\"会员等级输入错误，按普通会员计算\"",[87,159675,1108],{"class":97},[87,159677,159678],{"class":89,"line":2584},[87,159679,3355],{"emptyLinePlaceholder":1029},[87,159681,159682,159685,159687,159690,159692],{"class":89,"line":2598},[87,159683,159684],{"class":97},"pay ",[87,159686,946],{"class":171},[87,159688,159689],{"class":97}," amount ",[87,159691,1549],{"class":171},[87,159693,158036],{"class":97},[87,159695,159696],{"class":89,"line":2603},[87,159697,3355],{"emptyLinePlaceholder":1029},[87,159699,159700,159702,159705,159707,159710],{"class":89,"line":2609},[87,159701,2488],{"class":171},[87,159703,159704],{"class":97}," pay ",[87,159706,2666],{"class":171},[87,159708,159709],{"class":104}," 500",[87,159711,4693],{"class":97},[87,159713,159714,159717,159719],{"class":89,"line":2630},[87,159715,159716],{"class":97},"    pay ",[87,159718,151013],{"class":171},[87,159720,159721],{"class":104}," 50\n",[87,159723,159724],{"class":89,"line":2635},[87,159725,3355],{"emptyLinePlaceholder":1029},[87,159727,159728,159730,159732,159734,159736,159738,159741,159743,159745,159747],{"class":89,"line":2649},[87,159729,31362],{"class":104},[87,159731,165],{"class":97},[87,159733,1152],{"class":171},[87,159735,158117],{"class":949},[87,159737,1988],{"class":104},[87,159739,159740],{"class":97},"pay",[87,159742,157920],{"class":171},[87,159744,2037],{"class":104},[87,159746,157773],{"class":949},[87,159748,1108],{"class":97},[14,159750,159752],{"id":159751},"_312-易错点","3.12 易错点",[1055,159754,159755,159758,159761,159764,159769],{},[29,159756,159757],{},"冒号不能漏。",[29,159759,159760],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[29,159762,159763],{},"多分支判断要注意顺序。",[29,159765,159766,159767,29332],{},"判断相等用 ",[84,159768,3903],{},[29,159770,159771],{},"字符串比较区分大小写：",[77,159773,159775],{"className":31325,"code":159774,"language":31327,"meta":82,"style":82},"\"Y\" == \"y\"  # False\n",[84,159776,159777],{"__ignoreMap":82},[87,159778,159779,159782,159784,159786],{"class":89,"line":90},[87,159780,159781],{"class":949},"\"Y\"",[87,159783,102485],{"class":171},[87,159785,158766],{"class":949},[87,159787,159788],{"class":199},"  # False\n",[19,159790,159791],{},"可转换后再判断：",[77,159793,159795],{"className":31325,"code":159794,"language":31327,"meta":82,"style":82},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[84,159796,159797,159814,159827],{"__ignoreMap":82},[87,159798,159799,159802,159804,159806,159808,159811],{"class":89,"line":90},[87,159800,159801],{"class":97},"answer ",[87,159803,946],{"class":171},[87,159805,61541],{"class":104},[87,159807,165],{"class":97},[87,159809,159810],{"class":949},"\"是否继续(y\u002Fn):\"",[87,159812,159813],{"class":97},").lower()\n",[87,159815,159816,159818,159821,159823,159825],{"class":89,"line":101},[87,159817,2488],{"class":171},[87,159819,159820],{"class":97}," answer ",[87,159822,3903],{"class":171},[87,159824,158766],{"class":949},[87,159826,4693],{"class":97},[87,159828,159829,159831,159833,159836],{"class":89,"line":120},[87,159830,32246],{"class":104},[87,159832,165],{"class":97},[87,159834,159835],{"class":949},"\"继续\"",[87,159837,1108],{"class":97},[14,159839,159841],{"id":159840},"_313-本章练习","3.13 本章练习",[1055,159843,159844,159847,159850,159853,159863],{},[29,159845,159846],{},"输入年龄，判断是否成年。",[29,159848,159849],{},"输入年份，判断是否为闰年。",[29,159851,159852],{},"输入三个数字，输出最大值。",[29,159854,159855,159856,159859,159860,159862],{},"写登录判断：用户名是 ",[84,159857,159858],{},"admin"," 且密码是 ",[84,159861,16034],{}," 才登录成功。",[29,159864,159865],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1006,159867,159868],{},"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":82,"searchDepth":101,"depth":101,"links":159870},[159871,159872,159873,159874,159875,159876,159881,159882,159883,159884,159885,159886,159887],{"id":158259,"depth":101,"text":158260},{"id":158312,"depth":101,"text":158313},{"id":158416,"depth":101,"text":158417},{"id":158506,"depth":101,"text":158507},{"id":158696,"depth":101,"text":158697},{"id":158819,"depth":101,"text":158820,"children":159877},[159878,159879,159880],{"id":158823,"depth":120,"text":158824},{"id":158880,"depth":120,"text":158881},{"id":158937,"depth":120,"text":158938},{"id":158982,"depth":101,"text":158983},{"id":159073,"depth":101,"text":159074},{"id":159200,"depth":101,"text":159201},{"id":159330,"depth":101,"text":159331},{"id":159515,"depth":101,"text":159516},{"id":159751,"depth":101,"text":159752},{"id":159840,"depth":101,"text":159841},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158251,"description":1026},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159894,"title":159895,"body":159896,"description":1026,"extension":1027,"meta":161665,"navigation":1029,"path":161666,"seo":161667,"stem":161668,"__hash__":161669},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159897,"toc":161645},[159898,159901,159905,159911,159914,159931,159935,159937,159954,159956,160001,160003,160020,160024,160027,160093,160096,160114,160118,160279,160288,160292,160296,160301,160348,160350,160356,160360,160365,160412,160414,160420,160424,160429,160465,160468,160515,160519,160525,160583,160588,160619,160624,160628,160683,160686,160758,160761,160820,160824,160827,160902,160905,160909,161015,161018,161044,161048,161060,161129,161132,161224,161228,161230,161241,161243,161373,161377,161579,161587,161591,161621,161625,161642],[10,159899,159895],{"id":159900},"_4-循环语句",[14,159902,159904],{"id":159903},"_41-为什么需要循环","4.1 为什么需要循环",[19,159906,159907,159908,159910],{},"如果要输出 1 到 100，不应该写 100 行 ",[84,159909,147233],{},"，而应该用循环。",[19,159912,159913],{},"循环适合处理重复任务：",[1055,159915,159916,159919,159922,159925,159928],{},[29,159917,159918],{},"重复输出。",[29,159920,159921],{},"重复输入。",[29,159923,159924],{},"遍历数据。",[29,159926,159927],{},"持续执行菜单。",[29,159929,159930],{},"批量处理文件或数据。",[14,159932,159934],{"id":159933},"_42-while循环","4.2 while循环",[19,159936,6134],{},[77,159938,159940],{"className":31325,"code":159939,"language":31327,"meta":82,"style":82},"while 条件:\n    循环体\n",[84,159941,159942,159949],{"__ignoreMap":82},[87,159943,159944,159946],{"class":89,"line":90},[87,159945,109589],{"class":171},[87,159947,159948],{"class":97}," 条件:\n",[87,159950,159951],{"class":89,"line":101},[87,159952,159953],{"class":97},"    循环体\n",[19,159955,16085],{},[77,159957,159959],{"className":31325,"code":159958,"language":31327,"meta":82,"style":82},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[84,159960,159961,159969,159973,159985,159992],{"__ignoreMap":82},[87,159962,159963,159965,159967],{"class":89,"line":90},[87,159964,101074],{"class":97},[87,159966,946],{"class":171},[87,159968,56635],{"class":104},[87,159970,159971],{"class":89,"line":101},[87,159972,3355],{"emptyLinePlaceholder":1029},[87,159974,159975,159977,159979,159981,159983],{"class":89,"line":120},[87,159976,109589],{"class":171},[87,159978,10388],{"class":97},[87,159980,2544],{"class":171},[87,159982,3103],{"class":104},[87,159984,4693],{"class":97},[87,159986,159987,159989],{"class":89,"line":222},[87,159988,32246],{"class":104},[87,159990,159991],{"class":97},"(i)\n",[87,159993,159994,159997,159999],{"class":89,"line":234},[87,159995,159996],{"class":97},"    i ",[87,159998,10427],{"class":171},[87,160000,56635],{"class":104},[19,160002,81855],{},[1055,160004,160005,160011,160014,160017],{},[29,160006,160007,160008,29332],{},"判断条件 ",[84,160009,160010],{},"i \u003C= 5",[29,160012,160013],{},"条件成立，执行循环体。",[29,160015,160016],{},"执行完后回到条件判断。",[29,160018,160019],{},"条件不成立，退出循环。",[14,160021,160023],{"id":160022},"_43-while累加","4.3 while累加",[19,160025,160026],{},"计算 1 到 100 的和：",[77,160028,160030],{"className":31325,"code":160029,"language":31327,"meta":82,"style":82},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[84,160031,160032,160040,160048,160052,160064,160074,160082,160086],{"__ignoreMap":82},[87,160033,160034,160036,160038],{"class":89,"line":90},[87,160035,101074],{"class":97},[87,160037,946],{"class":171},[87,160039,56635],{"class":104},[87,160041,160042,160044,160046],{"class":89,"line":101},[87,160043,158021],{"class":97},[87,160045,946],{"class":171},[87,160047,48280],{"class":104},[87,160049,160050],{"class":89,"line":120},[87,160051,3355],{"emptyLinePlaceholder":1029},[87,160053,160054,160056,160058,160060,160062],{"class":89,"line":222},[87,160055,109589],{"class":171},[87,160057,10388],{"class":97},[87,160059,2544],{"class":171},[87,160061,6704],{"class":104},[87,160063,4693],{"class":97},[87,160065,160066,160069,160071],{"class":89,"line":234},[87,160067,160068],{"class":97},"    total ",[87,160070,10427],{"class":171},[87,160072,160073],{"class":97}," i\n",[87,160075,160076,160078,160080],{"class":89,"line":256},[87,160077,159996],{"class":97},[87,160079,10427],{"class":171},[87,160081,56635],{"class":104},[87,160083,160084],{"class":89,"line":269},[87,160085,3355],{"emptyLinePlaceholder":1029},[87,160087,160088,160090],{"class":89,"line":463},[87,160089,31362],{"class":104},[87,160091,160092],{"class":97},"(total)\n",[19,160094,160095],{},"核心思想：",[1055,160097,160098,160103,160108],{},[29,160099,160100,160102],{},[84,160101,1536],{}," 控制循环次数。",[29,160104,160105,160107],{},[84,160106,158122],{}," 保存累加结果。",[29,160109,160110,160111,160113],{},"每轮循环都要更新 ",[84,160112,1536],{},"，否则可能死循环。",[14,160115,160117],{"id":160116},"_44-while猜数字","4.4 while猜数字",[77,160119,160121],{"className":31325,"code":160120,"language":31327,"meta":82,"style":82},"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",[84,160122,160123,160129,160133,160150,160158,160162,160170,160190,160199,160203,160215,160226,160236,160247,160253,160275],{"__ignoreMap":82},[87,160124,160125,160127],{"class":89,"line":90},[87,160126,31339],{"class":171},[87,160128,46275],{"class":97},[87,160130,160131],{"class":89,"line":101},[87,160132,3355],{"emptyLinePlaceholder":1029},[87,160134,160135,160137,160139,160142,160144,160146,160148],{"class":89,"line":120},[87,160136,159801],{"class":97},[87,160138,946],{"class":171},[87,160140,160141],{"class":97}," random.randint(",[87,160143,1313],{"class":104},[87,160145,13385],{"class":97},[87,160147,536],{"class":104},[87,160149,1108],{"class":97},[87,160151,160152,160154,160156],{"class":89,"line":222},[87,160153,147452],{"class":97},[87,160155,946],{"class":171},[87,160157,48280],{"class":104},[87,160159,160160],{"class":89,"line":234},[87,160161,3355],{"emptyLinePlaceholder":1029},[87,160163,160164,160166,160168],{"class":89,"line":256},[87,160165,109589],{"class":171},[87,160167,96218],{"class":104},[87,160169,4693],{"class":97},[87,160171,160172,160175,160177,160179,160181,160183,160185,160188],{"class":89,"line":269},[87,160173,160174],{"class":97},"    guess ",[87,160176,946],{"class":171},[87,160178,3337],{"class":104},[87,160180,165],{"class":97},[87,160182,54757],{"class":104},[87,160184,165],{"class":97},[87,160186,160187],{"class":949},"\"请输入1到100之间的数字:\"",[87,160189,31444],{"class":97},[87,160191,160192,160195,160197],{"class":89,"line":463},[87,160193,160194],{"class":97},"    count ",[87,160196,10427],{"class":171},[87,160198,56635],{"class":104},[87,160200,160201],{"class":89,"line":469},[87,160202,3355],{"emptyLinePlaceholder":1029},[87,160204,160205,160207,160210,160212],{"class":89,"line":2287},[87,160206,4055],{"class":171},[87,160208,160209],{"class":97}," guess ",[87,160211,2051],{"class":171},[87,160213,160214],{"class":97}," answer:\n",[87,160216,160217,160219,160221,160224],{"class":89,"line":2568},[87,160218,33398],{"class":104},[87,160220,165],{"class":97},[87,160222,160223],{"class":949},"\"猜大了\"",[87,160225,1108],{"class":97},[87,160227,160228,160230,160232,160234],{"class":89,"line":2573},[87,160229,40240],{"class":171},[87,160231,160209],{"class":97},[87,160233,938],{"class":171},[87,160235,160214],{"class":97},[87,160237,160238,160240,160242,160245],{"class":89,"line":2579},[87,160239,33398],{"class":104},[87,160241,165],{"class":97},[87,160243,160244],{"class":949},"\"猜小了\"",[87,160246,1108],{"class":97},[87,160248,160249,160251],{"class":89,"line":2584},[87,160250,158783],{"class":171},[87,160252,4693],{"class":97},[87,160254,160255,160257,160259,160261,160264,160266,160268,160270,160273],{"class":89,"line":2598},[87,160256,33398],{"class":104},[87,160258,165],{"class":97},[87,160260,1152],{"class":171},[87,160262,160263],{"class":949},"\"猜对了，一共猜了",[87,160265,1988],{"class":104},[87,160267,85360],{"class":97},[87,160269,2037],{"class":104},[87,160271,160272],{"class":949},"次\"",[87,160274,1108],{"class":97},[87,160276,160277],{"class":89,"line":2603},[87,160278,32574],{"class":171},[19,160280,160281,160284,160285,160287],{},[84,160282,160283],{},"while True"," 表示无限循环，通常配合 ",[84,160286,3008],{}," 使用。",[14,160289,160291],{"id":160290},"_45-break和continue","4.5 break和continue",[44,160293,160295],{"id":160294},"_451-break","4.5.1 break",[19,160297,160298,160300],{},[84,160299,3008],{}," 直接结束整个循环。",[77,160302,160304],{"className":31325,"code":160303,"language":31327,"meta":82,"style":82},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[84,160305,160306,160326,160338,160342],{"__ignoreMap":82},[87,160307,160308,160310,160312,160314,160316,160318,160320,160322,160324],{"class":89,"line":90},[87,160309,3979],{"class":171},[87,160311,10388],{"class":97},[87,160313,26990],{"class":171},[87,160315,33390],{"class":104},[87,160317,165],{"class":97},[87,160319,1313],{"class":104},[87,160321,13385],{"class":97},[87,160323,1439],{"class":104},[87,160325,31733],{"class":97},[87,160327,160328,160330,160332,160334,160336],{"class":89,"line":101},[87,160329,4055],{"class":171},[87,160331,10388],{"class":97},[87,160333,3903],{"class":171},[87,160335,78998],{"class":104},[87,160337,4693],{"class":97},[87,160339,160340],{"class":89,"line":120},[87,160341,32574],{"class":171},[87,160343,160344,160346],{"class":89,"line":222},[87,160345,32246],{"class":104},[87,160347,159991],{"class":97},[19,160349,147218],{},[77,160351,160354],{"className":160352,"code":160353,"language":599,"meta":82},[597],"1\n2\n",[84,160355,160353],{"__ignoreMap":82},[44,160357,160359],{"id":160358},"_452-continue","4.5.2 continue",[19,160361,160362,160364],{},[84,160363,155433],{}," 跳过本轮剩余代码，进入下一轮循环。",[77,160366,160368],{"className":31325,"code":160367,"language":31327,"meta":82,"style":82},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[84,160369,160370,160390,160402,160406],{"__ignoreMap":82},[87,160371,160372,160374,160376,160378,160380,160382,160384,160386,160388],{"class":89,"line":90},[87,160373,3979],{"class":171},[87,160375,10388],{"class":97},[87,160377,26990],{"class":171},[87,160379,33390],{"class":104},[87,160381,165],{"class":97},[87,160383,1313],{"class":104},[87,160385,13385],{"class":97},[87,160387,1439],{"class":104},[87,160389,31733],{"class":97},[87,160391,160392,160394,160396,160398,160400],{"class":89,"line":101},[87,160393,4055],{"class":171},[87,160395,10388],{"class":97},[87,160397,3903],{"class":171},[87,160399,78998],{"class":104},[87,160401,4693],{"class":97},[87,160403,160404],{"class":89,"line":120},[87,160405,149273],{"class":171},[87,160407,160408,160410],{"class":89,"line":222},[87,160409,32246],{"class":104},[87,160411,159991],{"class":97},[19,160413,147218],{},[77,160415,160418],{"className":160416,"code":160417,"language":599,"meta":82},[597],"1\n2\n4\n5\n",[84,160419,160417],{"__ignoreMap":82},[14,160421,160423],{"id":160422},"_46-for循环","4.6 for循环",[19,160425,160426,160428],{},[84,160427,3979],{}," 常用于遍历序列。",[77,160430,160432],{"className":31325,"code":160431,"language":31327,"meta":82,"style":82},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[84,160433,160434,160443,160447,160458],{"__ignoreMap":82},[87,160435,160436,160438,160440],{"class":89,"line":90},[87,160437,147297],{"class":97},[87,160439,946],{"class":171},[87,160441,160442],{"class":949}," \"python\"\n",[87,160444,160445],{"class":89,"line":101},[87,160446,3355],{"emptyLinePlaceholder":1029},[87,160448,160449,160451,160454,160456],{"class":89,"line":120},[87,160450,3979],{"class":171},[87,160452,160453],{"class":97}," ch ",[87,160455,26990],{"class":171},[87,160457,159160],{"class":97},[87,160459,160460,160462],{"class":89,"line":222},[87,160461,32246],{"class":104},[87,160463,160464],{"class":97},"(ch)\n",[19,160466,160467],{},"遍历列表：",[77,160469,160471],{"className":31325,"code":160470,"language":31327,"meta":82,"style":82},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[84,160472,160473,160495,160499,160509],{"__ignoreMap":82},[87,160474,160475,160478,160480,160482,160484,160486,160488,160490,160493],{"class":89,"line":90},[87,160476,160477],{"class":97},"students ",[87,160479,946],{"class":171},[87,160481,53163],{"class":97},[87,160483,150649],{"class":949},[87,160485,13385],{"class":97},[87,160487,151697],{"class":949},[87,160489,13385],{"class":97},[87,160491,160492],{"class":949},"\"小刚\"",[87,160494,34193],{"class":97},[87,160496,160497],{"class":89,"line":101},[87,160498,3355],{"emptyLinePlaceholder":1029},[87,160500,160501,160503,160505,160507],{"class":89,"line":120},[87,160502,3979],{"class":171},[87,160504,152898],{"class":97},[87,160506,26990],{"class":171},[87,160508,152903],{"class":97},[87,160510,160511,160513],{"class":89,"line":222},[87,160512,32246],{"class":104},[87,160514,150803],{"class":97},[14,160516,160518],{"id":160517},"_47-range函数","4.7 range函数",[19,160520,160521,160524],{},[84,160522,160523],{},"range()"," 用于生成整数序列。",[77,160526,160528],{"className":31325,"code":160527,"language":31327,"meta":82,"style":82},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[84,160529,160530,160544,160562],{"__ignoreMap":82},[87,160531,160532,160534,160536,160538,160541],{"class":89,"line":90},[87,160533,34363],{"class":104},[87,160535,165],{"class":97},[87,160537,1414],{"class":104},[87,160539,160540],{"class":97},")          ",[87,160542,160543],{"class":199},"# 0,1,2,3,4\n",[87,160545,160546,160548,160550,160552,160554,160556,160559],{"class":89,"line":101},[87,160547,34363],{"class":104},[87,160549,165],{"class":97},[87,160551,1313],{"class":104},[87,160553,13385],{"class":97},[87,160555,1414],{"class":104},[87,160557,160558],{"class":97},")       ",[87,160560,160561],{"class":199},"# 1,2,3,4\n",[87,160563,160564,160566,160568,160570,160572,160574,160576,160578,160580],{"class":89,"line":120},[87,160565,34363],{"class":104},[87,160567,165],{"class":97},[87,160569,1313],{"class":104},[87,160571,13385],{"class":97},[87,160573,242],{"class":104},[87,160575,13385],{"class":97},[87,160577,1176],{"class":104},[87,160579,156422],{"class":97},[87,160581,160582],{"class":199},"# 1,3,5,7,9\n",[19,160584,160585,160586,25566],{},"配合 ",[84,160587,3979],{},[77,160589,160591],{"className":31325,"code":160590,"language":31327,"meta":82,"style":82},"for i in range(1, 6):\n    print(i)\n",[84,160592,160593,160613],{"__ignoreMap":82},[87,160594,160595,160597,160599,160601,160603,160605,160607,160609,160611],{"class":89,"line":90},[87,160596,3979],{"class":171},[87,160598,10388],{"class":97},[87,160600,26990],{"class":171},[87,160602,33390],{"class":104},[87,160604,165],{"class":97},[87,160606,1313],{"class":104},[87,160608,13385],{"class":97},[87,160610,1439],{"class":104},[87,160612,31733],{"class":97},[87,160614,160615,160617],{"class":89,"line":101},[87,160616,32246],{"class":104},[87,160618,159991],{"class":97},[19,160620,9975,160621,160623],{},[84,160622,34363],{}," 的结束值不包含在内。",[14,160625,160627],{"id":160626},"_48-for循环求和","4.8 for循环求和",[77,160629,160631],{"className":31325,"code":160630,"language":31327,"meta":82,"style":82},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[84,160632,160633,160641,160645,160665,160673,160677],{"__ignoreMap":82},[87,160634,160635,160637,160639],{"class":89,"line":90},[87,160636,158021],{"class":97},[87,160638,946],{"class":171},[87,160640,48280],{"class":104},[87,160642,160643],{"class":89,"line":101},[87,160644,3355],{"emptyLinePlaceholder":1029},[87,160646,160647,160649,160651,160653,160655,160657,160659,160661,160663],{"class":89,"line":120},[87,160648,3979],{"class":171},[87,160650,10388],{"class":97},[87,160652,26990],{"class":171},[87,160654,33390],{"class":104},[87,160656,165],{"class":97},[87,160658,1313],{"class":104},[87,160660,13385],{"class":97},[87,160662,1432],{"class":104},[87,160664,31733],{"class":97},[87,160666,160667,160669,160671],{"class":89,"line":222},[87,160668,160068],{"class":97},[87,160670,10427],{"class":171},[87,160672,160073],{"class":97},[87,160674,160675],{"class":89,"line":234},[87,160676,3355],{"emptyLinePlaceholder":1029},[87,160678,160679,160681],{"class":89,"line":256},[87,160680,31362],{"class":104},[87,160682,160092],{"class":97},[19,160684,160685],{},"求偶数和：",[77,160687,160689],{"className":31325,"code":160688,"language":31327,"meta":82,"style":82},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[84,160690,160691,160699,160703,160723,160739,160748,160752],{"__ignoreMap":82},[87,160692,160693,160695,160697],{"class":89,"line":90},[87,160694,158021],{"class":97},[87,160696,946],{"class":171},[87,160698,48280],{"class":104},[87,160700,160701],{"class":89,"line":101},[87,160702,3355],{"emptyLinePlaceholder":1029},[87,160704,160705,160707,160709,160711,160713,160715,160717,160719,160721],{"class":89,"line":120},[87,160706,3979],{"class":171},[87,160708,10388],{"class":97},[87,160710,26990],{"class":171},[87,160712,33390],{"class":104},[87,160714,165],{"class":97},[87,160716,1313],{"class":104},[87,160718,13385],{"class":97},[87,160720,1432],{"class":104},[87,160722,31733],{"class":97},[87,160724,160725,160727,160729,160731,160733,160735,160737],{"class":89,"line":222},[87,160726,4055],{"class":171},[87,160728,10388],{"class":97},[87,160730,1423],{"class":171},[87,160732,15705],{"class":104},[87,160734,102485],{"class":171},[87,160736,577],{"class":104},[87,160738,4693],{"class":97},[87,160740,160741,160744,160746],{"class":89,"line":234},[87,160742,160743],{"class":97},"        total ",[87,160745,10427],{"class":171},[87,160747,160073],{"class":97},[87,160749,160750],{"class":89,"line":256},[87,160751,3355],{"emptyLinePlaceholder":1029},[87,160753,160754,160756],{"class":89,"line":269},[87,160755,31362],{"class":104},[87,160757,160092],{"class":97},[19,160759,160760],{},"也可以：",[77,160762,160764],{"className":31325,"code":160763,"language":31327,"meta":82,"style":82},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[84,160765,160766,160774,160778,160802,160810,160814],{"__ignoreMap":82},[87,160767,160768,160770,160772],{"class":89,"line":90},[87,160769,158021],{"class":97},[87,160771,946],{"class":171},[87,160773,48280],{"class":104},[87,160775,160776],{"class":89,"line":101},[87,160777,3355],{"emptyLinePlaceholder":1029},[87,160779,160780,160782,160784,160786,160788,160790,160792,160794,160796,160798,160800],{"class":89,"line":120},[87,160781,3979],{"class":171},[87,160783,10388],{"class":97},[87,160785,26990],{"class":171},[87,160787,33390],{"class":104},[87,160789,165],{"class":97},[87,160791,1176],{"class":104},[87,160793,13385],{"class":97},[87,160795,1432],{"class":104},[87,160797,13385],{"class":97},[87,160799,1176],{"class":104},[87,160801,31733],{"class":97},[87,160803,160804,160806,160808],{"class":89,"line":222},[87,160805,160068],{"class":97},[87,160807,10427],{"class":171},[87,160809,160073],{"class":97},[87,160811,160812],{"class":89,"line":234},[87,160813,3355],{"emptyLinePlaceholder":1029},[87,160815,160816,160818],{"class":89,"line":256},[87,160817,31362],{"class":104},[87,160819,160092],{"class":97},[14,160821,160823],{"id":160822},"_49-循环嵌套","4.9 循环嵌套",[19,160825,160826],{},"嵌套循环就是循环里面再写循环。",[77,160828,160830],{"className":31325,"code":160829,"language":31327,"meta":82,"style":82},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[84,160831,160832,160852,160872],{"__ignoreMap":82},[87,160833,160834,160836,160838,160840,160842,160844,160846,160848,160850],{"class":89,"line":90},[87,160835,3979],{"class":171},[87,160837,10388],{"class":97},[87,160839,26990],{"class":171},[87,160841,33390],{"class":104},[87,160843,165],{"class":97},[87,160845,1313],{"class":104},[87,160847,13385],{"class":97},[87,160849,1389],{"class":104},[87,160851,31733],{"class":97},[87,160853,160854,160856,160858,160860,160862,160864,160866,160868,160870],{"class":89,"line":101},[87,160855,4155],{"class":171},[87,160857,10450],{"class":97},[87,160859,26990],{"class":171},[87,160861,33390],{"class":104},[87,160863,165],{"class":97},[87,160865,1313],{"class":104},[87,160867,13385],{"class":97},[87,160869,1389],{"class":104},[87,160871,31733],{"class":97},[87,160873,160874,160876,160878,160880,160883,160885,160887,160889,160892,160894,160896,160898,160900],{"class":89,"line":120},[87,160875,33398],{"class":104},[87,160877,165],{"class":97},[87,160879,1152],{"class":171},[87,160881,160882],{"class":949},"\"i=",[87,160884,1988],{"class":104},[87,160886,1536],{"class":97},[87,160888,2037],{"class":104},[87,160890,160891],{"class":949},", j=",[87,160893,1988],{"class":104},[87,160895,1561],{"class":97},[87,160897,2037],{"class":104},[87,160899,1347],{"class":949},[87,160901,1108],{"class":97},[19,160903,160904],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160906,160908],{"id":160907},"_410-九九乘法表","4.10 九九乘法表",[77,160910,160912],{"className":31325,"code":160911,"language":31327,"meta":82,"style":82},"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",[84,160913,160914,160934,160957,161009],{"__ignoreMap":82},[87,160915,160916,160918,160920,160922,160924,160926,160928,160930,160932],{"class":89,"line":90},[87,160917,3979],{"class":171},[87,160919,10388],{"class":97},[87,160921,26990],{"class":171},[87,160923,33390],{"class":104},[87,160925,165],{"class":97},[87,160927,1313],{"class":104},[87,160929,13385],{"class":97},[87,160931,242],{"class":104},[87,160933,31733],{"class":97},[87,160935,160936,160938,160940,160942,160944,160946,160948,160951,160953,160955],{"class":89,"line":101},[87,160937,4155],{"class":171},[87,160939,10450],{"class":97},[87,160941,26990],{"class":171},[87,160943,33390],{"class":104},[87,160945,165],{"class":97},[87,160947,1313],{"class":104},[87,160949,160950],{"class":97},", i ",[87,160952,1575],{"class":171},[87,160954,568],{"class":104},[87,160956,31733],{"class":97},[87,160958,160959,160961,160963,160965,160967,160969,160971,160973,160975,160977,160979,160981,160983,160985,160987,160989,160991,160993,160995,160997,160999,161001,161003,161005,161007],{"class":89,"line":120},[87,160960,33398],{"class":104},[87,160962,165],{"class":97},[87,160964,1152],{"class":171},[87,160966,1347],{"class":949},[87,160968,1988],{"class":104},[87,160970,1561],{"class":97},[87,160972,2037],{"class":104},[87,160974,1549],{"class":949},[87,160976,1988],{"class":104},[87,160978,1536],{"class":97},[87,160980,2037],{"class":104},[87,160982,946],{"class":949},[87,160984,1988],{"class":104},[87,160986,101074],{"class":97},[87,160988,1549],{"class":171},[87,160990,4364],{"class":97},[87,160992,2037],{"class":104},[87,160994,1347],{"class":949},[87,160996,13385],{"class":97},[87,160998,46748],{"class":492},[87,161000,946],{"class":171},[87,161002,1347],{"class":949},[87,161004,2191],{"class":104},[87,161006,1347],{"class":949},[87,161008,1108],{"class":97},[87,161010,161011,161013],{"class":89,"line":222},[87,161012,32246],{"class":104},[87,161014,2931],{"class":97},[19,161016,161017],{},"关键点：",[1055,161019,161020,161026,161032,161038],{},[29,161021,161022,161023,161025],{},"外层 ",[84,161024,1536],{}," 控制行。",[29,161027,161028,161029,161031],{},"内层 ",[84,161030,1561],{}," 控制列。",[29,161033,161034,161035,161037],{},"每行结束后用 ",[84,161036,147233],{}," 换行。",[29,161039,161040,161043],{},[84,161041,161042],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161045,161047],{"id":161046},"_411-循环else","4.11 循环else",[19,161049,161050,161051,161053,161054,161056,161057,161059],{},"Python 的循环可以带 ",[84,161052,2657],{},"。当循环正常结束时执行 ",[84,161055,2657],{},"，如果被 ",[84,161058,3008],{}," 打断，则不执行。",[77,161061,161063],{"className":31325,"code":161062,"language":31327,"meta":82,"style":82},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[84,161064,161065,161085,161097,161108,161112,161118],{"__ignoreMap":82},[87,161066,161067,161069,161071,161073,161075,161077,161079,161081,161083],{"class":89,"line":90},[87,161068,3979],{"class":171},[87,161070,10388],{"class":97},[87,161072,26990],{"class":171},[87,161074,33390],{"class":104},[87,161076,165],{"class":97},[87,161078,1313],{"class":104},[87,161080,13385],{"class":97},[87,161082,1439],{"class":104},[87,161084,31733],{"class":97},[87,161086,161087,161089,161091,161093,161095],{"class":89,"line":101},[87,161088,4055],{"class":171},[87,161090,10388],{"class":97},[87,161092,3903],{"class":171},[87,161094,2993],{"class":104},[87,161096,4693],{"class":97},[87,161098,161099,161101,161103,161106],{"class":89,"line":120},[87,161100,33398],{"class":104},[87,161102,165],{"class":97},[87,161104,161105],{"class":949},"\"找到了\"",[87,161107,1108],{"class":97},[87,161109,161110],{"class":89,"line":222},[87,161111,32574],{"class":171},[87,161113,161114,161116],{"class":89,"line":234},[87,161115,2657],{"class":171},[87,161117,4693],{"class":97},[87,161119,161120,161122,161124,161127],{"class":89,"line":256},[87,161121,32246],{"class":104},[87,161123,165],{"class":97},[87,161125,161126],{"class":949},"\"没找到\"",[87,161128,1108],{"class":97},[19,161130,161131],{},"常用于搜索。",[77,161133,161135],{"className":31325,"code":161134,"language":31327,"meta":82,"style":82},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[84,161136,161137,161158,161167,161171,161183,161194,161204,161208,161214],{"__ignoreMap":82},[87,161138,161139,161142,161144,161146,161148,161150,161152,161154,161156],{"class":89,"line":90},[87,161140,161141],{"class":97},"names ",[87,161143,946],{"class":171},[87,161145,53163],{"class":97},[87,161147,150649],{"class":949},[87,161149,13385],{"class":97},[87,161151,151697],{"class":949},[87,161153,13385],{"class":97},[87,161155,160492],{"class":949},[87,161157,34193],{"class":97},[87,161159,161160,161162,161164],{"class":89,"line":101},[87,161161,112504],{"class":97},[87,161163,946],{"class":171},[87,161165,161166],{"class":949}," \"小李\"\n",[87,161168,161169],{"class":89,"line":120},[87,161170,3355],{"emptyLinePlaceholder":1029},[87,161172,161173,161175,161178,161180],{"class":89,"line":222},[87,161174,3979],{"class":171},[87,161176,161177],{"class":97}," name ",[87,161179,26990],{"class":171},[87,161181,161182],{"class":97}," names:\n",[87,161184,161185,161187,161189,161191],{"class":89,"line":234},[87,161186,4055],{"class":171},[87,161188,161177],{"class":97},[87,161190,3903],{"class":171},[87,161192,161193],{"class":97}," target:\n",[87,161195,161196,161198,161200,161202],{"class":89,"line":256},[87,161197,33398],{"class":104},[87,161199,165],{"class":97},[87,161201,161105],{"class":949},[87,161203,1108],{"class":97},[87,161205,161206],{"class":89,"line":269},[87,161207,32574],{"class":171},[87,161209,161210,161212],{"class":89,"line":463},[87,161211,2657],{"class":171},[87,161213,4693],{"class":97},[87,161215,161216,161218,161220,161222],{"class":89,"line":469},[87,161217,32246],{"class":104},[87,161219,165],{"class":97},[87,161221,161126],{"class":949},[87,161223,1108],{"class":97},[14,161225,161227],{"id":161226},"_412-小案例登录重试","4.12 小案例：登录重试",[19,161229,124218],{},[1055,161231,161232,161235,161238],{},[29,161233,161234],{},"用户最多输入 3 次密码。",[29,161236,161237],{},"密码正确则登录成功。",[29,161239,161240],{},"3 次都错误则锁定账号。",[19,161242,10985],{},[77,161244,161246],{"className":31325,"code":161245,"language":31327,"meta":82,"style":82},"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",[84,161247,161248,161258,161262,161278,161294,161298,161310,161321,161325,161331,161356,161362],{"__ignoreMap":82},[87,161249,161250,161253,161255],{"class":89,"line":90},[87,161251,161252],{"class":97},"password ",[87,161254,946],{"class":171},[87,161256,161257],{"class":949}," \"123456\"\n",[87,161259,161260],{"class":89,"line":101},[87,161261,3355],{"emptyLinePlaceholder":1029},[87,161263,161264,161266,161268,161270,161272,161274,161276],{"class":89,"line":120},[87,161265,3979],{"class":171},[87,161267,10388],{"class":97},[87,161269,26990],{"class":171},[87,161271,33390],{"class":104},[87,161273,165],{"class":97},[87,161275,1170],{"class":104},[87,161277,31733],{"class":97},[87,161279,161280,161283,161285,161287,161289,161292],{"class":89,"line":222},[87,161281,161282],{"class":97},"    user_password ",[87,161284,946],{"class":171},[87,161286,61541],{"class":104},[87,161288,165],{"class":97},[87,161290,161291],{"class":949},"\"请输入密码:\"",[87,161293,1108],{"class":97},[87,161295,161296],{"class":89,"line":234},[87,161297,3355],{"emptyLinePlaceholder":1029},[87,161299,161300,161302,161305,161307],{"class":89,"line":256},[87,161301,4055],{"class":171},[87,161303,161304],{"class":97}," user_password ",[87,161306,3903],{"class":171},[87,161308,161309],{"class":97}," password:\n",[87,161311,161312,161314,161316,161319],{"class":89,"line":269},[87,161313,33398],{"class":104},[87,161315,165],{"class":97},[87,161317,161318],{"class":949},"\"登录成功\"",[87,161320,1108],{"class":97},[87,161322,161323],{"class":89,"line":463},[87,161324,32574],{"class":171},[87,161326,161327,161329],{"class":89,"line":469},[87,161328,158783],{"class":171},[87,161330,4693],{"class":97},[87,161332,161333,161335,161337,161339,161342,161345,161347,161349,161351,161354],{"class":89,"line":2287},[87,161334,33398],{"class":104},[87,161336,165],{"class":97},[87,161338,1152],{"class":171},[87,161340,161341],{"class":949},"\"密码错误，还剩",[87,161343,161344],{"class":104},"{2",[87,161346,53208],{"class":171},[87,161348,3986],{"class":97},[87,161350,2037],{"class":104},[87,161352,161353],{"class":949},"次机会\"",[87,161355,1108],{"class":97},[87,161357,161358,161360],{"class":89,"line":2568},[87,161359,2657],{"class":171},[87,161361,4693],{"class":97},[87,161363,161364,161366,161368,161371],{"class":89,"line":2573},[87,161365,32246],{"class":104},[87,161367,165],{"class":97},[87,161369,161370],{"class":949},"\"账号已锁定\"",[87,161372,1108],{"class":97},[14,161374,161376],{"id":161375},"_413-小案例菜单程序","4.13 小案例：菜单程序",[77,161378,161380],{"className":31325,"code":161379,"language":31327,"meta":82,"style":82},"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",[84,161381,161382,161390,161401,161412,161423,161434,161445,161449,161464,161468,161480,161491,161503,161514,161526,161537,161549,161559,161563,161569],{"__ignoreMap":82},[87,161383,161384,161386,161388],{"class":89,"line":90},[87,161385,109589],{"class":171},[87,161387,96218],{"class":104},[87,161389,4693],{"class":97},[87,161391,161392,161394,161396,161399],{"class":89,"line":101},[87,161393,32246],{"class":104},[87,161395,165],{"class":97},[87,161397,161398],{"class":949},"\"====== 菜单 ======\"",[87,161400,1108],{"class":97},[87,161402,161403,161405,161407,161410],{"class":89,"line":120},[87,161404,32246],{"class":104},[87,161406,165],{"class":97},[87,161408,161409],{"class":949},"\"1. 查询余额\"",[87,161411,1108],{"class":97},[87,161413,161414,161416,161418,161421],{"class":89,"line":222},[87,161415,32246],{"class":104},[87,161417,165],{"class":97},[87,161419,161420],{"class":949},"\"2. 存款\"",[87,161422,1108],{"class":97},[87,161424,161425,161427,161429,161432],{"class":89,"line":234},[87,161426,32246],{"class":104},[87,161428,165],{"class":97},[87,161430,161431],{"class":949},"\"3. 取款\"",[87,161433,1108],{"class":97},[87,161435,161436,161438,161440,161443],{"class":89,"line":256},[87,161437,32246],{"class":104},[87,161439,165],{"class":97},[87,161441,161442],{"class":949},"\"0. 退出\"",[87,161444,1108],{"class":97},[87,161446,161447],{"class":89,"line":269},[87,161448,3355],{"emptyLinePlaceholder":1029},[87,161450,161451,161454,161456,161458,161460,161462],{"class":89,"line":463},[87,161452,161453],{"class":97},"    choice ",[87,161455,946],{"class":171},[87,161457,61541],{"class":104},[87,161459,165],{"class":97},[87,161461,153834],{"class":949},[87,161463,1108],{"class":97},[87,161465,161466],{"class":89,"line":469},[87,161467,3355],{"emptyLinePlaceholder":1029},[87,161469,161470,161472,161474,161476,161478],{"class":89,"line":2287},[87,161471,4055],{"class":171},[87,161473,153847],{"class":97},[87,161475,3903],{"class":171},[87,161477,153852],{"class":949},[87,161479,4693],{"class":97},[87,161481,161482,161484,161486,161489],{"class":89,"line":2568},[87,161483,33398],{"class":104},[87,161485,165],{"class":97},[87,161487,161488],{"class":949},"\"余额为1000元\"",[87,161490,1108],{"class":97},[87,161492,161493,161495,161497,161499,161501],{"class":89,"line":2573},[87,161494,40240],{"class":171},[87,161496,153847],{"class":97},[87,161498,3903],{"class":171},[87,161500,153871],{"class":949},[87,161502,4693],{"class":97},[87,161504,161505,161507,161509,161512],{"class":89,"line":2579},[87,161506,33398],{"class":104},[87,161508,165],{"class":97},[87,161510,161511],{"class":949},"\"存款功能\"",[87,161513,1108],{"class":97},[87,161515,161516,161518,161520,161522,161524],{"class":89,"line":2584},[87,161517,40240],{"class":171},[87,161519,153847],{"class":97},[87,161521,3903],{"class":171},[87,161523,153889],{"class":949},[87,161525,4693],{"class":97},[87,161527,161528,161530,161532,161535],{"class":89,"line":2598},[87,161529,33398],{"class":104},[87,161531,165],{"class":97},[87,161533,161534],{"class":949},"\"取款功能\"",[87,161536,1108],{"class":97},[87,161538,161539,161541,161543,161545,161547],{"class":89,"line":2603},[87,161540,40240],{"class":171},[87,161542,153847],{"class":97},[87,161544,3903],{"class":171},[87,161546,153943],{"class":949},[87,161548,4693],{"class":97},[87,161550,161551,161553,161555,161557],{"class":89,"line":2609},[87,161552,33398],{"class":104},[87,161554,165],{"class":97},[87,161556,153954],{"class":949},[87,161558,1108],{"class":97},[87,161560,161561],{"class":89,"line":2630},[87,161562,32574],{"class":171},[87,161564,161565,161567],{"class":89,"line":2635},[87,161566,158783],{"class":171},[87,161568,4693],{"class":97},[87,161570,161571,161573,161575,161577],{"class":89,"line":2649},[87,161572,33398],{"class":104},[87,161574,165],{"class":97},[87,161576,153975],{"class":949},[87,161578,1108],{"class":97},[19,161580,161581,161582,161584,161585,29332],{},"菜单类程序通常使用 ",[84,161583,160283],{},"，用户选择退出时 ",[84,161586,3008],{},[14,161588,161590],{"id":161589},"_414-易错点","4.14 易错点",[1055,161592,161593,161598,161604,161612,161618],{},[29,161594,161595,161597],{},[84,161596,109589],{}," 循环必须更新控制变量。",[29,161599,161600,161603],{},[84,161601,161602],{},"range(1, 10)"," 不包含 10。",[29,161605,161606,161608,161609,161611],{},[84,161607,3008],{}," 结束整个循环，",[84,161610,155433],{}," 只跳过本轮。",[29,161613,161614,161615,161617],{},"嵌套循环中，",[84,161616,3008],{}," 只跳出当前所在的一层循环。",[29,161619,161620],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161622,161624],{"id":161623},"_415-本章练习","4.15 本章练习",[1055,161626,161627,161630,161633,161636,161639],{},[29,161628,161629],{},"输出 1 到 100。",[29,161631,161632],{},"计算 1 到 100 的偶数和。",[29,161634,161635],{},"输出 100 以内能被 3 和 5 同时整除的数。",[29,161637,161638],{},"编写猜数字游戏，限制最多猜 7 次。",[29,161640,161641],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1006,161643,161644],{},"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":82,"searchDepth":101,"depth":101,"links":161646},[161647,161648,161649,161650,161651,161655,161656,161657,161658,161659,161660,161661,161662,161663,161664],{"id":159903,"depth":101,"text":159904},{"id":159933,"depth":101,"text":159934},{"id":160022,"depth":101,"text":160023},{"id":160116,"depth":101,"text":160117},{"id":160290,"depth":101,"text":160291,"children":161652},[161653,161654],{"id":160294,"depth":120,"text":160295},{"id":160358,"depth":120,"text":160359},{"id":160422,"depth":101,"text":160423},{"id":160517,"depth":101,"text":160518},{"id":160626,"depth":101,"text":160627},{"id":160822,"depth":101,"text":160823},{"id":160907,"depth":101,"text":160908},{"id":161046,"depth":101,"text":161047},{"id":161226,"depth":101,"text":161227},{"id":161375,"depth":101,"text":161376},{"id":161589,"depth":101,"text":161590},{"id":161623,"depth":101,"text":161624},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159895,"description":1026},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161671,"title":161672,"body":161673,"description":1026,"extension":1027,"meta":163678,"navigation":1029,"path":163679,"seo":163680,"stem":163681,"__hash__":163682},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161674,"toc":163658},[161675,161678,161682,161685,161688,161702,161705,161719,161723,161725,161744,161746,161793,161795,161809,161813,161887,161890,161894,161897,161956,161964,161967,162020,162023,162027,162032,162087,162095,162145,162149,162154,162162,162261,162267,162271,162276,162279,162290,162331,162344,162348,162351,162387,162390,162403,162406,162466,162470,162474,162477,162528,162532,162535,162582,162588,162654,162657,162661,162664,162780,162783,162787,162790,162896,162900,162903,162941,162944,162986,162989,163049,163052,163056,163520,163523,163527,163554,163560,163621,163625,163655],[10,161676,161672],{"id":161677},"_5-函数基础",[14,161679,161681],{"id":161680},"_51-为什么需要函数","5.1 为什么需要函数",[19,161683,161684],{},"函数用于封装一段可以重复使用的代码。",[19,161686,161687],{},"不使用函数的问题：",[1055,161689,161690,161693,161696,161699],{},[29,161691,161692],{},"重复代码多。",[29,161694,161695],{},"修改逻辑时容易漏改。",[29,161697,161698],{},"主流程不清晰。",[29,161700,161701],{},"程序越写越长，难以维护。",[19,161703,161704],{},"使用函数后的好处：",[1055,161706,161707,161710,161713,161716],{},[29,161708,161709],{},"提高复用性。",[29,161711,161712],{},"提高可读性。",[29,161714,161715],{},"便于调试。",[29,161717,161718],{},"便于分工。",[14,161720,161722],{"id":161721},"_52-函数定义","5.2 函数定义",[19,161724,6134],{},[77,161726,161728],{"className":31325,"code":161727,"language":31327,"meta":82,"style":82},"def 函数名():\n    函数体\n",[84,161729,161730,161739],{"__ignoreMap":82},[87,161731,161732,161734,161737],{"class":89,"line":90},[87,161733,32894],{"class":171},[87,161735,161736],{"class":205}," 函数名",[87,161738,32900],{"class":97},[87,161740,161741],{"class":89,"line":101},[87,161742,161743],{"class":97},"    函数体\n",[19,161745,16085],{},[77,161747,161749],{"className":31325,"code":161748,"language":31327,"meta":82,"style":82},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[84,161750,161751,161760,161770,161780,161784,161788],{"__ignoreMap":82},[87,161752,161753,161755,161758],{"class":89,"line":90},[87,161754,32894],{"class":171},[87,161756,161757],{"class":205}," say_hello",[87,161759,32900],{"class":97},[87,161761,161762,161764,161766,161768],{"class":89,"line":101},[87,161763,32246],{"class":104},[87,161765,165],{"class":97},[87,161767,6794],{"class":949},[87,161769,1108],{"class":97},[87,161771,161772,161774,161776,161778],{"class":89,"line":120},[87,161773,32246],{"class":104},[87,161775,165],{"class":97},[87,161777,147400],{"class":949},[87,161779,1108],{"class":97},[87,161781,161782],{"class":89,"line":222},[87,161783,3355],{"emptyLinePlaceholder":1029},[87,161785,161786],{"class":89,"line":234},[87,161787,3355],{"emptyLinePlaceholder":1029},[87,161789,161790],{"class":89,"line":256},[87,161791,161792],{"class":97},"say_hello()\n",[19,161794,9975],{},[1055,161796,161797,161800,161803,161806],{},[29,161798,161799],{},"函数必须先定义，再调用。",[29,161801,161802],{},"函数名遵循变量命名规则。",[29,161804,161805],{},"函数体需要缩进。",[29,161807,161808],{},"函数不调用就不会执行。",[14,161810,161812],{"id":161811},"_53-函数调用","5.3 函数调用",[77,161814,161816],{"className":31325,"code":161815,"language":31327,"meta":82,"style":82},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[84,161817,161818,161827,161838,161849,161860,161870,161874,161878,161883],{"__ignoreMap":82},[87,161819,161820,161822,161825],{"class":89,"line":90},[87,161821,32894],{"class":171},[87,161823,161824],{"class":205}," print_menu",[87,161826,32900],{"class":97},[87,161828,161829,161831,161833,161836],{"class":89,"line":101},[87,161830,32246],{"class":104},[87,161832,165],{"class":97},[87,161834,161835],{"class":949},"\"1. 查询\"",[87,161837,1108],{"class":97},[87,161839,161840,161842,161844,161847],{"class":89,"line":120},[87,161841,32246],{"class":104},[87,161843,165],{"class":97},[87,161845,161846],{"class":949},"\"2. 添加\"",[87,161848,1108],{"class":97},[87,161850,161851,161853,161855,161858],{"class":89,"line":222},[87,161852,32246],{"class":104},[87,161854,165],{"class":97},[87,161856,161857],{"class":949},"\"3. 删除\"",[87,161859,1108],{"class":97},[87,161861,161862,161864,161866,161868],{"class":89,"line":234},[87,161863,32246],{"class":104},[87,161865,165],{"class":97},[87,161867,161442],{"class":949},[87,161869,1108],{"class":97},[87,161871,161872],{"class":89,"line":256},[87,161873,3355],{"emptyLinePlaceholder":1029},[87,161875,161876],{"class":89,"line":269},[87,161877,3355],{"emptyLinePlaceholder":1029},[87,161879,161880],{"class":89,"line":463},[87,161881,161882],{"class":97},"print_menu()\n",[87,161884,161885],{"class":89,"line":469},[87,161886,161882],{"class":97},[19,161888,161889],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161891,161893],{"id":161892},"_54-参数","5.4 参数",[19,161895,161896],{},"参数用于向函数传递数据。",[77,161898,161900],{"className":31325,"code":161899,"language":31327,"meta":82,"style":82},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[84,161901,161902,161911,161931,161935,161939,161948],{"__ignoreMap":82},[87,161903,161904,161906,161908],{"class":89,"line":90},[87,161905,32894],{"class":171},[87,161907,161757],{"class":205},[87,161909,161910],{"class":97},"(name):\n",[87,161912,161913,161915,161917,161919,161921,161923,161925,161927,161929],{"class":89,"line":101},[87,161914,32246],{"class":104},[87,161916,165],{"class":97},[87,161918,1152],{"class":171},[87,161920,157815],{"class":949},[87,161922,1988],{"class":104},[87,161924,80736],{"class":97},[87,161926,2037],{"class":104},[87,161928,1347],{"class":949},[87,161930,1108],{"class":97},[87,161932,161933],{"class":89,"line":120},[87,161934,3355],{"emptyLinePlaceholder":1029},[87,161936,161937],{"class":89,"line":222},[87,161938,3355],{"emptyLinePlaceholder":1029},[87,161940,161941,161944,161946],{"class":89,"line":234},[87,161942,161943],{"class":97},"say_hello(",[87,161945,150649],{"class":949},[87,161947,1108],{"class":97},[87,161949,161950,161952,161954],{"class":89,"line":256},[87,161951,161943],{"class":97},[87,161953,151697],{"class":949},[87,161955,1108],{"class":97},[19,161957,161958,161960,161961,161963],{},[84,161959,80736],{}," 是形参，",[84,161962,150649],{}," 是实参。",[19,161965,161966],{},"多个参数：",[77,161968,161970],{"className":31325,"code":161969,"language":31327,"meta":82,"style":82},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[84,161971,161972,161980,161993,161999,162003,162007],{"__ignoreMap":82},[87,161973,161974,161976,161978],{"class":89,"line":90},[87,161975,32894],{"class":171},[87,161977,6160],{"class":205},[87,161979,151854],{"class":97},[87,161981,161982,161985,161987,161989,161991],{"class":89,"line":101},[87,161983,161984],{"class":97},"    result ",[87,161986,946],{"class":171},[87,161988,11819],{"class":97},[87,161990,1575],{"class":171},[87,161992,151865],{"class":97},[87,161994,161995,161997],{"class":89,"line":120},[87,161996,32246],{"class":104},[87,161998,77513],{"class":97},[87,162000,162001],{"class":89,"line":222},[87,162002,3355],{"emptyLinePlaceholder":1029},[87,162004,162005],{"class":89,"line":234},[87,162006,3355],{"emptyLinePlaceholder":1029},[87,162008,162009,162012,162014,162016,162018],{"class":89,"line":256},[87,162010,162011],{"class":97},"add(",[87,162013,242],{"class":104},[87,162015,13385],{"class":97},[87,162017,1792],{"class":104},[87,162019,1108],{"class":97},[19,162021,162022],{},"调用时参数数量必须匹配。",[14,162024,162026],{"id":162025},"_55-返回值","5.5 返回值",[19,162028,162029,162031],{},[84,162030,17995],{}," 用于把函数内部的结果返回给调用者。",[77,162033,162035],{"className":31325,"code":162034,"language":31327,"meta":82,"style":82},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[84,162036,162037,162045,162055,162059,162063,162081],{"__ignoreMap":82},[87,162038,162039,162041,162043],{"class":89,"line":90},[87,162040,32894],{"class":171},[87,162042,6160],{"class":205},[87,162044,151854],{"class":97},[87,162046,162047,162049,162051,162053],{"class":89,"line":101},[87,162048,5044],{"class":171},[87,162050,11819],{"class":97},[87,162052,1575],{"class":171},[87,162054,151865],{"class":97},[87,162056,162057],{"class":89,"line":120},[87,162058,3355],{"emptyLinePlaceholder":1029},[87,162060,162061],{"class":89,"line":222},[87,162062,3355],{"emptyLinePlaceholder":1029},[87,162064,162065,162068,162070,162073,162075,162077,162079],{"class":89,"line":234},[87,162066,162067],{"class":97},"result ",[87,162069,946],{"class":171},[87,162071,162072],{"class":97}," add(",[87,162074,242],{"class":104},[87,162076,13385],{"class":97},[87,162078,1792],{"class":104},[87,162080,1108],{"class":97},[87,162082,162083,162085],{"class":89,"line":256},[87,162084,31362],{"class":104},[87,162086,77513],{"class":97},[19,162088,162089,162090,162092,162093,29332],{},"如果函数没有写 ",[84,162091,17995],{},"，默认返回 ",[84,162094,96612],{},[77,162096,162098],{"className":31325,"code":162097,"language":31327,"meta":82,"style":82},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[84,162099,162100,162108,162118,162122,162126,162135],{"__ignoreMap":82},[87,162101,162102,162104,162106],{"class":89,"line":90},[87,162103,32894],{"class":171},[87,162105,161757],{"class":205},[87,162107,32900],{"class":97},[87,162109,162110,162112,162114,162116],{"class":89,"line":101},[87,162111,32246],{"class":104},[87,162113,165],{"class":97},[87,162115,6794],{"class":949},[87,162117,1108],{"class":97},[87,162119,162120],{"class":89,"line":120},[87,162121,3355],{"emptyLinePlaceholder":1029},[87,162123,162124],{"class":89,"line":222},[87,162125,3355],{"emptyLinePlaceholder":1029},[87,162127,162128,162130,162132],{"class":89,"line":234},[87,162129,162067],{"class":97},[87,162131,946],{"class":171},[87,162133,162134],{"class":97}," say_hello()\n",[87,162136,162137,162139,162142],{"class":89,"line":256},[87,162138,31362],{"class":104},[87,162140,162141],{"class":97},"(result)  ",[87,162143,162144],{"class":199},"# None\n",[14,162146,162148],{"id":162147},"_56-return的作用","5.6 return的作用",[19,162150,162151,162153],{},[84,162152,17995],{}," 有两个作用：",[1055,162155,162156,162159],{},[29,162157,162158],{},"返回结果。",[29,162160,162161],{},"结束函数。",[77,162163,162165],{"className":31325,"code":162164,"language":31327,"meta":82,"style":82},"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",[84,162166,162167,162177,162189,162196,162200,162212,162219,162223,162230,162234,162238,162249],{"__ignoreMap":82},[87,162168,162169,162171,162174],{"class":89,"line":90},[87,162170,32894],{"class":171},[87,162172,162173],{"class":205}," check_age",[87,162175,162176],{"class":97},"(age):\n",[87,162178,162179,162181,162183,162185,162187],{"class":89,"line":101},[87,162180,4055],{"class":171},[87,162182,16656],{"class":97},[87,162184,938],{"class":171},[87,162186,577],{"class":104},[87,162188,4693],{"class":97},[87,162190,162191,162193],{"class":89,"line":120},[87,162192,15702],{"class":171},[87,162194,162195],{"class":949}," \"年龄不合法\"\n",[87,162197,162198],{"class":89,"line":222},[87,162199,3355],{"emptyLinePlaceholder":1029},[87,162201,162202,162204,162206,162208,162210],{"class":89,"line":234},[87,162203,4055],{"class":171},[87,162205,16656],{"class":97},[87,162207,2666],{"class":171},[87,162209,157046],{"class":104},[87,162211,4693],{"class":97},[87,162213,162214,162216],{"class":89,"line":256},[87,162215,15702],{"class":171},[87,162217,162218],{"class":949}," \"成年人\"\n",[87,162220,162221],{"class":89,"line":269},[87,162222,3355],{"emptyLinePlaceholder":1029},[87,162224,162225,162227],{"class":89,"line":463},[87,162226,5044],{"class":171},[87,162228,162229],{"class":949}," \"未成年人\"\n",[87,162231,162232],{"class":89,"line":469},[87,162233,3355],{"emptyLinePlaceholder":1029},[87,162235,162236],{"class":89,"line":2287},[87,162237,3355],{"emptyLinePlaceholder":1029},[87,162239,162240,162242,162245,162247],{"class":89,"line":2568},[87,162241,31362],{"class":104},[87,162243,162244],{"class":97},"(check_age(",[87,162246,1792],{"class":104},[87,162248,31444],{"class":97},[87,162250,162251,162253,162255,162257,162259],{"class":89,"line":2573},[87,162252,31362],{"class":104},[87,162254,162244],{"class":97},[87,162256,1625],{"class":171},[87,162258,1313],{"class":104},[87,162260,31444],{"class":97},[19,162262,162263,162264,162266],{},"函数执行到 ",[84,162265,17995],{}," 后，后面的代码不会继续执行。",[14,162268,162270],{"id":162269},"_57-none","5.7 None",[19,162272,162273,162275],{},[84,162274,96612],{}," 表示空值或没有结果。",[19,162277,162278],{},"常见使用场景：",[1055,162280,162281,162284,162287],{},[29,162282,162283],{},"函数没有返回值。",[29,162285,162286],{},"变量暂时没有具体值。",[29,162288,162289],{},"表示查询不到结果。",[77,162291,162293],{"className":31325,"code":162292,"language":31327,"meta":82,"style":82},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[84,162294,162295,162303,162307,162320],{"__ignoreMap":82},[87,162296,162297,162299,162301],{"class":89,"line":90},[87,162298,162067],{"class":97},[87,162300,946],{"class":171},[87,162302,152933],{"class":104},[87,162304,162305],{"class":89,"line":101},[87,162306,3355],{"emptyLinePlaceholder":1029},[87,162308,162309,162311,162314,162316,162318],{"class":89,"line":120},[87,162310,2488],{"class":171},[87,162312,162313],{"class":97}," result ",[87,162315,39874],{"class":171},[87,162317,39880],{"class":104},[87,162319,4693],{"class":97},[87,162321,162322,162324,162326,162329],{"class":89,"line":222},[87,162323,32246],{"class":104},[87,162325,165],{"class":97},[87,162327,162328],{"class":949},"\"没有数据\"",[87,162330,1108],{"class":97},[19,162332,162333,162334,162336,162337,162340,162341,29332],{},"判断 ",[84,162335,96612],{}," 推荐使用 ",[84,162338,162339],{},"is None","，不要写成 ",[84,162342,162343],{},"== None",[14,162345,162347],{"id":162346},"_58-函数文档字符串","5.8 函数文档字符串",[19,162349,162350],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[77,162352,162354],{"className":31325,"code":162353,"language":31327,"meta":82,"style":82},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[84,162355,162356,162366,162371],{"__ignoreMap":82},[87,162357,162358,162360,162363],{"class":89,"line":90},[87,162359,32894],{"class":171},[87,162361,162362],{"class":205}," calculate_bmi",[87,162364,162365],{"class":97},"(weight, height):\n",[87,162367,162368],{"class":89,"line":101},[87,162369,162370],{"class":949},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[87,162372,162373,162375,162378,162380,162383,162385],{"class":89,"line":120},[87,162374,5044],{"class":171},[87,162376,162377],{"class":97}," weight ",[87,162379,1677],{"class":171},[87,162381,162382],{"class":97}," height ",[87,162384,11611],{"class":171},[87,162386,48670],{"class":104},[19,162388,162389],{},"查看说明：",[77,162391,162393],{"className":31325,"code":162392,"language":31327,"meta":82,"style":82},"help(calculate_bmi)\n",[84,162394,162395],{"__ignoreMap":82},[87,162396,162397,162400],{"class":89,"line":90},[87,162398,162399],{"class":104},"help",[87,162401,162402],{"class":97},"(calculate_bmi)\n",[19,162404,162405],{},"较完整的写法：",[77,162407,162409],{"className":31325,"code":162408,"language":31327,"meta":82,"style":82},"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",[84,162410,162411,162419,162424,162429,162433,162438,162443,162448,162452],{"__ignoreMap":82},[87,162412,162413,162415,162417],{"class":89,"line":90},[87,162414,32894],{"class":171},[87,162416,162362],{"class":205},[87,162418,162365],{"class":97},[87,162420,162421],{"class":89,"line":101},[87,162422,162423],{"class":949},"    \"\"\"\n",[87,162425,162426],{"class":89,"line":120},[87,162427,162428],{"class":949},"    计算BMI。\n",[87,162430,162431],{"class":89,"line":222},[87,162432,3355],{"emptyLinePlaceholder":1029},[87,162434,162435],{"class":89,"line":234},[87,162436,162437],{"class":949},"    :param weight: 体重，单位kg\n",[87,162439,162440],{"class":89,"line":256},[87,162441,162442],{"class":949},"    :param height: 身高，单位m\n",[87,162444,162445],{"class":89,"line":269},[87,162446,162447],{"class":949},"    :return: BMI数值\n",[87,162449,162450],{"class":89,"line":463},[87,162451,162423],{"class":949},[87,162453,162454,162456,162458,162460,162462,162464],{"class":89,"line":469},[87,162455,5044],{"class":171},[87,162457,162377],{"class":97},[87,162459,1677],{"class":171},[87,162461,162382],{"class":97},[87,162463,11611],{"class":171},[87,162465,48670],{"class":104},[14,162467,162469],{"id":162468},"_59-变量作用域","5.9 变量作用域",[44,162471,162473],{"id":162472},"_591-局部变量","5.9.1 局部变量",[19,162475,162476],{},"在函数内部定义的变量，只能在函数内部使用。",[77,162478,162480],{"className":31325,"code":162479,"language":31327,"meta":82,"style":82},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[84,162481,162482,162491,162499,162505,162509,162513,162518],{"__ignoreMap":82},[87,162483,162484,162486,162489],{"class":89,"line":90},[87,162485,32894],{"class":171},[87,162487,162488],{"class":205}," test",[87,162490,32900],{"class":97},[87,162492,162493,162495,162497],{"class":89,"line":101},[87,162494,46540],{"class":97},[87,162496,946],{"class":171},[87,162498,59364],{"class":104},[87,162500,162501,162503],{"class":89,"line":120},[87,162502,32246],{"class":104},[87,162504,1115],{"class":97},[87,162506,162507],{"class":89,"line":222},[87,162508,3355],{"emptyLinePlaceholder":1029},[87,162510,162511],{"class":89,"line":234},[87,162512,3355],{"emptyLinePlaceholder":1029},[87,162514,162515],{"class":89,"line":256},[87,162516,162517],{"class":97},"test()\n",[87,162519,162520,162522,162525],{"class":89,"line":269},[87,162521,31362],{"class":104},[87,162523,162524],{"class":97},"(num)  ",[87,162526,162527],{"class":199},"# 报错\n",[44,162529,162531],{"id":162530},"_592-全局变量","5.9.2 全局变量",[19,162533,162534],{},"在函数外部定义的变量，可以在函数内部读取。",[77,162536,162538],{"className":31325,"code":162537,"language":31327,"meta":82,"style":82},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[84,162539,162540,162548,162552,162556,162564,162570,162574,162578],{"__ignoreMap":82},[87,162541,162542,162544,162546],{"class":89,"line":90},[87,162543,147297],{"class":97},[87,162545,946],{"class":171},[87,162547,150114],{"class":949},[87,162549,162550],{"class":89,"line":101},[87,162551,3355],{"emptyLinePlaceholder":1029},[87,162553,162554],{"class":89,"line":120},[87,162555,3355],{"emptyLinePlaceholder":1029},[87,162557,162558,162560,162562],{"class":89,"line":222},[87,162559,32894],{"class":171},[87,162561,161757],{"class":205},[87,162563,32900],{"class":97},[87,162565,162566,162568],{"class":89,"line":234},[87,162567,32246],{"class":104},[87,162569,151421],{"class":97},[87,162571,162572],{"class":89,"line":256},[87,162573,3355],{"emptyLinePlaceholder":1029},[87,162575,162576],{"class":89,"line":269},[87,162577,3355],{"emptyLinePlaceholder":1029},[87,162579,162580],{"class":89,"line":463},[87,162581,161792],{"class":97},[19,162583,162584,162585,29332],{},"如果要在函数内部修改全局变量，需要 ",[84,162586,162587],{},"global",[77,162589,162591],{"className":31325,"code":162590,"language":31327,"meta":82,"style":82},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[84,162592,162593,162601,162605,162609,162618,162626,162634,162638,162642,162647],{"__ignoreMap":82},[87,162594,162595,162597,162599],{"class":89,"line":90},[87,162596,147452],{"class":97},[87,162598,946],{"class":171},[87,162600,48280],{"class":104},[87,162602,162603],{"class":89,"line":101},[87,162604,3355],{"emptyLinePlaceholder":1029},[87,162606,162607],{"class":89,"line":120},[87,162608,3355],{"emptyLinePlaceholder":1029},[87,162610,162611,162613,162616],{"class":89,"line":222},[87,162612,32894],{"class":171},[87,162614,162615],{"class":205}," add_count",[87,162617,32900],{"class":97},[87,162619,162620,162623],{"class":89,"line":234},[87,162621,162622],{"class":171},"    global",[87,162624,162625],{"class":97}," count\n",[87,162627,162628,162630,162632],{"class":89,"line":256},[87,162629,160194],{"class":97},[87,162631,10427],{"class":171},[87,162633,56635],{"class":104},[87,162635,162636],{"class":89,"line":269},[87,162637,3355],{"emptyLinePlaceholder":1029},[87,162639,162640],{"class":89,"line":463},[87,162641,3355],{"emptyLinePlaceholder":1029},[87,162643,162644],{"class":89,"line":469},[87,162645,162646],{"class":97},"add_count()\n",[87,162648,162649,162651],{"class":89,"line":2287},[87,162650,31362],{"class":104},[87,162652,162653],{"class":97},"(count)\n",[19,162655,162656],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162658,162660],{"id":162659},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,162662,162663],{},"一个函数中可以调用另一个函数。",[77,162665,162667],{"className":31325,"code":162666,"language":31327,"meta":82,"style":82},"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",[84,162668,162669,162678,162692,162696,162700,162709,162714,162734,162755,162759,162763,162767],{"__ignoreMap":82},[87,162670,162671,162673,162676],{"class":89,"line":90},[87,162672,32894],{"class":171},[87,162674,162675],{"class":205}," print_line",[87,162677,32900],{"class":97},[87,162679,162680,162682,162684,162686,162688,162690],{"class":89,"line":101},[87,162681,32246],{"class":104},[87,162683,165],{"class":97},[87,162685,33430],{"class":949},[87,162687,7468],{"class":171},[87,162689,79593],{"class":104},[87,162691,1108],{"class":97},[87,162693,162694],{"class":89,"line":120},[87,162695,3355],{"emptyLinePlaceholder":1029},[87,162697,162698],{"class":89,"line":222},[87,162699,3355],{"emptyLinePlaceholder":1029},[87,162701,162702,162704,162707],{"class":89,"line":234},[87,162703,32894],{"class":171},[87,162705,162706],{"class":205}," print_info",[87,162708,150136],{"class":97},[87,162710,162711],{"class":89,"line":256},[87,162712,162713],{"class":97},"    print_line()\n",[87,162715,162716,162718,162720,162722,162724,162726,162728,162730,162732],{"class":89,"line":269},[87,162717,32246],{"class":104},[87,162719,165],{"class":97},[87,162721,1152],{"class":171},[87,162723,157443],{"class":949},[87,162725,1988],{"class":104},[87,162727,80736],{"class":97},[87,162729,2037],{"class":104},[87,162731,1347],{"class":949},[87,162733,1108],{"class":97},[87,162735,162736,162738,162740,162742,162745,162747,162749,162751,162753],{"class":89,"line":463},[87,162737,32246],{"class":104},[87,162739,165],{"class":97},[87,162741,1152],{"class":171},[87,162743,162744],{"class":949},"\"年龄:",[87,162746,1988],{"class":104},[87,162748,71153],{"class":97},[87,162750,2037],{"class":104},[87,162752,1347],{"class":949},[87,162754,1108],{"class":97},[87,162756,162757],{"class":89,"line":469},[87,162758,162713],{"class":97},[87,162760,162761],{"class":89,"line":2287},[87,162762,3355],{"emptyLinePlaceholder":1029},[87,162764,162765],{"class":89,"line":2568},[87,162766,3355],{"emptyLinePlaceholder":1029},[87,162768,162769,162772,162774,162776,162778],{"class":89,"line":2573},[87,162770,162771],{"class":97},"print_info(",[87,162773,150649],{"class":949},[87,162775,13385],{"class":97},[87,162777,1743],{"class":104},[87,162779,1108],{"class":97},[19,162781,162782],{},"这种方式可以把小功能组合成大功能。",[14,162784,162786],{"id":162785},"_511-参数检查","5.11 参数检查",[19,162788,162789],{},"函数内部可以检查参数是否合法。",[77,162791,162793],{"className":31325,"code":162792,"language":31327,"meta":82,"style":82},"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",[84,162794,162795,162804,162816,162822,162832,162836,162840,162857,162861,162873,162884,162890],{"__ignoreMap":82},[87,162796,162797,162799,162802],{"class":89,"line":90},[87,162798,32894],{"class":171},[87,162800,162801],{"class":205}," divide",[87,162803,151854],{"class":97},[87,162805,162806,162808,162810,162812,162814],{"class":89,"line":101},[87,162807,4055],{"class":171},[87,162809,11832],{"class":97},[87,162811,3903],{"class":171},[87,162813,577],{"class":104},[87,162815,4693],{"class":97},[87,162817,162818,162820],{"class":89,"line":120},[87,162819,15702],{"class":171},[87,162821,152933],{"class":104},[87,162823,162824,162826,162828,162830],{"class":89,"line":222},[87,162825,5044],{"class":171},[87,162827,11819],{"class":97},[87,162829,1677],{"class":171},[87,162831,151865],{"class":97},[87,162833,162834],{"class":89,"line":234},[87,162835,3355],{"emptyLinePlaceholder":1029},[87,162837,162838],{"class":89,"line":256},[87,162839,3355],{"emptyLinePlaceholder":1029},[87,162841,162842,162844,162846,162849,162851,162853,162855],{"class":89,"line":269},[87,162843,162067],{"class":97},[87,162845,946],{"class":171},[87,162847,162848],{"class":97}," divide(",[87,162850,242],{"class":104},[87,162852,13385],{"class":97},[87,162854,111],{"class":104},[87,162856,1108],{"class":97},[87,162858,162859],{"class":89,"line":463},[87,162860,3355],{"emptyLinePlaceholder":1029},[87,162862,162863,162865,162867,162869,162871],{"class":89,"line":469},[87,162864,2488],{"class":171},[87,162866,162313],{"class":97},[87,162868,39874],{"class":171},[87,162870,39880],{"class":104},[87,162872,4693],{"class":97},[87,162874,162875,162877,162879,162882],{"class":89,"line":2287},[87,162876,32246],{"class":104},[87,162878,165],{"class":97},[87,162880,162881],{"class":949},"\"除数不能为0\"",[87,162883,1108],{"class":97},[87,162885,162886,162888],{"class":89,"line":2568},[87,162887,2657],{"class":171},[87,162889,4693],{"class":97},[87,162891,162892,162894],{"class":89,"line":2573},[87,162893,32246],{"class":104},[87,162895,77513],{"class":97},[14,162897,162899],{"id":162898},"_512-类型提示","5.12 类型提示",[19,162901,162902],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[77,162904,162906],{"className":31325,"code":162905,"language":31327,"meta":82,"style":82},"def add(a: int, b: int) -> int:\n    return a + b\n",[84,162907,162908,162931],{"__ignoreMap":82},[87,162909,162910,162912,162914,162917,162919,162922,162924,162927,162929],{"class":89,"line":90},[87,162911,32894],{"class":171},[87,162913,6160],{"class":205},[87,162915,162916],{"class":97},"(a: ",[87,162918,1105],{"class":104},[87,162920,162921],{"class":97},", b: ",[87,162923,1105],{"class":104},[87,162925,162926],{"class":97},") -> ",[87,162928,1105],{"class":104},[87,162930,4693],{"class":97},[87,162932,162933,162935,162937,162939],{"class":89,"line":101},[87,162934,5044],{"class":171},[87,162936,11819],{"class":97},[87,162938,1575],{"class":171},[87,162940,151865],{"class":97},[19,162942,162943],{},"字符串参数：",[77,162945,162947],{"className":31325,"code":162946,"language":31327,"meta":82,"style":82},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[84,162948,162949,162966],{"__ignoreMap":82},[87,162950,162951,162953,162955,162958,162960,162962,162964],{"class":89,"line":90},[87,162952,32894],{"class":171},[87,162954,161757],{"class":205},[87,162956,162957],{"class":97},"(name: ",[87,162959,2259],{"class":104},[87,162961,162926],{"class":97},[87,162963,96612],{"class":104},[87,162965,4693],{"class":97},[87,162967,162968,162970,162972,162974,162976,162978,162980,162982,162984],{"class":89,"line":101},[87,162969,32246],{"class":104},[87,162971,165],{"class":97},[87,162973,1152],{"class":171},[87,162975,157815],{"class":949},[87,162977,1988],{"class":104},[87,162979,80736],{"class":97},[87,162981,2037],{"class":104},[87,162983,1347],{"class":949},[87,162985,1108],{"class":97},[19,162987,162988],{},"列表参数：",[77,162990,162992],{"className":31325,"code":162991,"language":31327,"meta":82,"style":82},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[84,162993,162994,163013,163021,163033,163042],{"__ignoreMap":82},[87,162995,162996,162998,163001,163004,163006,163009,163011],{"class":89,"line":90},[87,162997,32894],{"class":171},[87,162999,163000],{"class":205}," get_total",[87,163002,163003],{"class":97},"(numbers: list[",[87,163005,1105],{"class":104},[87,163007,163008],{"class":97},"]) -> ",[87,163010,1105],{"class":104},[87,163012,4693],{"class":97},[87,163014,163015,163017,163019],{"class":89,"line":101},[87,163016,160068],{"class":97},[87,163018,946],{"class":171},[87,163020,48280],{"class":104},[87,163022,163023,163025,163028,163030],{"class":89,"line":120},[87,163024,4155],{"class":171},[87,163026,163027],{"class":97}," number ",[87,163029,26990],{"class":171},[87,163031,163032],{"class":97}," numbers:\n",[87,163034,163035,163037,163039],{"class":89,"line":222},[87,163036,160743],{"class":97},[87,163038,10427],{"class":171},[87,163040,163041],{"class":97}," number\n",[87,163043,163044,163046],{"class":89,"line":234},[87,163045,5044],{"class":171},[87,163047,163048],{"class":97}," total\n",[19,163050,163051],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163053,163055],{"id":163054},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[77,163057,163059],{"className":31325,"code":163058,"language":31327,"meta":82,"style":82},"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",[84,163060,163061,163071,163075,163079,163087,163098,163108,163118,163128,163138,163142,163146,163155,163177,163181,163185,163194,163200,163220,163232,163243,163247,163256,163267,163272,163276,163280,163289,163295,163314,163326,163336,163340,163351,163361,163365,163373,163384,163388,163392,163396,163404,163409,163423,163427,163439,163444,163456,163461,163473,163478,163490,163500,163504,163510],{"__ignoreMap":82},[87,163062,163063,163066,163068],{"class":89,"line":90},[87,163064,163065],{"class":97},"balance ",[87,163067,946],{"class":171},[87,163069,163070],{"class":104}," 1000\n",[87,163072,163073],{"class":89,"line":101},[87,163074,3355],{"emptyLinePlaceholder":1029},[87,163076,163077],{"class":89,"line":120},[87,163078,3355],{"emptyLinePlaceholder":1029},[87,163080,163081,163083,163085],{"class":89,"line":222},[87,163082,32894],{"class":171},[87,163084,152794],{"class":205},[87,163086,32900],{"class":97},[87,163088,163089,163091,163093,163096],{"class":89,"line":234},[87,163090,32246],{"class":104},[87,163092,165],{"class":97},[87,163094,163095],{"class":949},"\"====== ATM ======\"",[87,163097,1108],{"class":97},[87,163099,163100,163102,163104,163106],{"class":89,"line":256},[87,163101,32246],{"class":104},[87,163103,165],{"class":97},[87,163105,161409],{"class":949},[87,163107,1108],{"class":97},[87,163109,163110,163112,163114,163116],{"class":89,"line":269},[87,163111,32246],{"class":104},[87,163113,165],{"class":97},[87,163115,161420],{"class":949},[87,163117,1108],{"class":97},[87,163119,163120,163122,163124,163126],{"class":89,"line":463},[87,163121,32246],{"class":104},[87,163123,165],{"class":97},[87,163125,161431],{"class":949},[87,163127,1108],{"class":97},[87,163129,163130,163132,163134,163136],{"class":89,"line":469},[87,163131,32246],{"class":104},[87,163133,165],{"class":97},[87,163135,161442],{"class":949},[87,163137,1108],{"class":97},[87,163139,163140],{"class":89,"line":2287},[87,163141,3355],{"emptyLinePlaceholder":1029},[87,163143,163144],{"class":89,"line":2568},[87,163145,3355],{"emptyLinePlaceholder":1029},[87,163147,163148,163150,163153],{"class":89,"line":2573},[87,163149,32894],{"class":171},[87,163151,163152],{"class":205}," show_balance",[87,163154,32900],{"class":97},[87,163156,163157,163159,163161,163163,163166,163168,163171,163173,163175],{"class":89,"line":2579},[87,163158,32246],{"class":104},[87,163160,165],{"class":97},[87,163162,1152],{"class":171},[87,163164,163165],{"class":949},"\"当前余额:",[87,163167,1988],{"class":104},[87,163169,163170],{"class":97},"balance",[87,163172,2037],{"class":104},[87,163174,157773],{"class":949},[87,163176,1108],{"class":97},[87,163178,163179],{"class":89,"line":2584},[87,163180,3355],{"emptyLinePlaceholder":1029},[87,163182,163183],{"class":89,"line":2598},[87,163184,3355],{"emptyLinePlaceholder":1029},[87,163186,163187,163189,163192],{"class":89,"line":2603},[87,163188,32894],{"class":171},[87,163190,163191],{"class":205}," save_money",[87,163193,32900],{"class":97},[87,163195,163196,163198],{"class":89,"line":2609},[87,163197,162622],{"class":171},[87,163199,150860],{"class":97},[87,163201,163202,163205,163207,163209,163211,163213,163215,163218],{"class":89,"line":2630},[87,163203,163204],{"class":97},"    money ",[87,163206,946],{"class":171},[87,163208,110723],{"class":104},[87,163210,165],{"class":97},[87,163212,54757],{"class":104},[87,163214,165],{"class":97},[87,163216,163217],{"class":949},"\"请输入存款金额:\"",[87,163219,31444],{"class":97},[87,163221,163222,163224,163226,163228,163230],{"class":89,"line":2635},[87,163223,4055],{"class":171},[87,163225,150903],{"class":97},[87,163227,2544],{"class":171},[87,163229,577],{"class":104},[87,163231,4693],{"class":97},[87,163233,163234,163236,163238,163241],{"class":89,"line":2649},[87,163235,33398],{"class":104},[87,163237,165],{"class":97},[87,163239,163240],{"class":949},"\"金额必须大于0\"",[87,163242,1108],{"class":97},[87,163244,163245],{"class":89,"line":2654},[87,163246,153122],{"class":171},[87,163248,163249,163252,163254],{"class":89,"line":2683},[87,163250,163251],{"class":97},"    balance ",[87,163253,10427],{"class":171},[87,163255,150936],{"class":97},[87,163257,163258,163260,163262,163265],{"class":89,"line":2688},[87,163259,32246],{"class":104},[87,163261,165],{"class":97},[87,163263,163264],{"class":949},"\"存款成功\"",[87,163266,1108],{"class":97},[87,163268,163269],{"class":89,"line":2705},[87,163270,163271],{"class":97},"    show_balance()\n",[87,163273,163274],{"class":89,"line":2710},[87,163275,3355],{"emptyLinePlaceholder":1029},[87,163277,163278],{"class":89,"line":2715},[87,163279,3355],{"emptyLinePlaceholder":1029},[87,163281,163282,163284,163287],{"class":89,"line":2720},[87,163283,32894],{"class":171},[87,163285,163286],{"class":205}," withdraw_money",[87,163288,32900],{"class":97},[87,163290,163291,163293],{"class":89,"line":2734},[87,163292,162622],{"class":171},[87,163294,150860],{"class":97},[87,163296,163297,163299,163301,163303,163305,163307,163309,163312],{"class":89,"line":2739},[87,163298,163204],{"class":97},[87,163300,946],{"class":171},[87,163302,110723],{"class":104},[87,163304,165],{"class":97},[87,163306,54757],{"class":104},[87,163308,165],{"class":97},[87,163310,163311],{"class":949},"\"请输入取款金额:\"",[87,163313,31444],{"class":97},[87,163315,163316,163318,163320,163322,163324],{"class":89,"line":3532},[87,163317,4055],{"class":171},[87,163319,150903],{"class":97},[87,163321,2544],{"class":171},[87,163323,577],{"class":104},[87,163325,4693],{"class":97},[87,163327,163328,163330,163332,163334],{"class":89,"line":3546},[87,163329,33398],{"class":104},[87,163331,165],{"class":97},[87,163333,163240],{"class":949},[87,163335,1108],{"class":97},[87,163337,163338],{"class":89,"line":3554},[87,163339,153122],{"class":171},[87,163341,163342,163344,163346,163348],{"class":89,"line":3559},[87,163343,4055],{"class":171},[87,163345,150903],{"class":97},[87,163347,2051],{"class":171},[87,163349,163350],{"class":97}," balance:\n",[87,163352,163353,163355,163357,163359],{"class":89,"line":3565},[87,163354,33398],{"class":104},[87,163356,165],{"class":97},[87,163358,150998],{"class":949},[87,163360,1108],{"class":97},[87,163362,163363],{"class":89,"line":3571},[87,163364,153122],{"class":171},[87,163366,163367,163369,163371],{"class":89,"line":3576},[87,163368,163251],{"class":97},[87,163370,151013],{"class":171},[87,163372,150936],{"class":97},[87,163374,163375,163377,163379,163382],{"class":89,"line":8898},[87,163376,32246],{"class":104},[87,163378,165],{"class":97},[87,163380,163381],{"class":949},"\"取款成功\"",[87,163383,1108],{"class":97},[87,163385,163386],{"class":89,"line":8922},[87,163387,163271],{"class":97},[87,163389,163390],{"class":89,"line":8927},[87,163391,3355],{"emptyLinePlaceholder":1029},[87,163393,163394],{"class":89,"line":8933},[87,163395,3355],{"emptyLinePlaceholder":1029},[87,163397,163398,163400,163402],{"class":89,"line":8960},[87,163399,109589],{"class":171},[87,163401,96218],{"class":104},[87,163403,4693],{"class":97},[87,163405,163406],{"class":89,"line":8965},[87,163407,163408],{"class":97},"    show_menu()\n",[87,163410,163411,163413,163415,163417,163419,163421],{"class":89,"line":8971},[87,163412,161453],{"class":97},[87,163414,946],{"class":171},[87,163416,61541],{"class":104},[87,163418,165],{"class":97},[87,163420,153834],{"class":949},[87,163422,1108],{"class":97},[87,163424,163425],{"class":89,"line":8983},[87,163426,3355],{"emptyLinePlaceholder":1029},[87,163428,163429,163431,163433,163435,163437],{"class":89,"line":8995},[87,163430,4055],{"class":171},[87,163432,153847],{"class":97},[87,163434,3903],{"class":171},[87,163436,153852],{"class":949},[87,163438,4693],{"class":97},[87,163440,163441],{"class":89,"line":9007},[87,163442,163443],{"class":97},"        show_balance()\n",[87,163445,163446,163448,163450,163452,163454],{"class":89,"line":10666},[87,163447,40240],{"class":171},[87,163449,153847],{"class":97},[87,163451,3903],{"class":171},[87,163453,153871],{"class":949},[87,163455,4693],{"class":97},[87,163457,163458],{"class":89,"line":10691},[87,163459,163460],{"class":97},"        save_money()\n",[87,163462,163463,163465,163467,163469,163471],{"class":89,"line":10714},[87,163464,40240],{"class":171},[87,163466,153847],{"class":97},[87,163468,3903],{"class":171},[87,163470,153889],{"class":949},[87,163472,4693],{"class":97},[87,163474,163475],{"class":89,"line":10738},[87,163476,163477],{"class":97},"        withdraw_money()\n",[87,163479,163480,163482,163484,163486,163488],{"class":89,"line":10743},[87,163481,40240],{"class":171},[87,163483,153847],{"class":97},[87,163485,3903],{"class":171},[87,163487,153943],{"class":949},[87,163489,4693],{"class":97},[87,163491,163492,163494,163496,163498],{"class":89,"line":10748},[87,163493,33398],{"class":104},[87,163495,165],{"class":97},[87,163497,153954],{"class":949},[87,163499,1108],{"class":97},[87,163501,163502],{"class":89,"line":10753},[87,163503,32574],{"class":171},[87,163505,163506,163508],{"class":89,"line":10762},[87,163507,158783],{"class":171},[87,163509,4693],{"class":97},[87,163511,163512,163514,163516,163518],{"class":89,"line":10767},[87,163513,33398],{"class":104},[87,163515,165],{"class":97},[87,163517,153975],{"class":949},[87,163519,1108],{"class":97},[19,163521,163522],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163524,163526],{"id":163525},"_514-易错点","5.14 易错点",[1055,163528,163529,163532,163535,163540,163545,163548],{},[29,163530,163531],{},"函数定义后必须调用才会执行。",[29,163533,163534],{},"函数名后面有括号才是调用。",[29,163536,163537,163539],{},[84,163538,17995],{}," 后面的代码不会执行。",[29,163541,163542,163543,29332],{},"没有返回值的函数默认返回 ",[84,163544,96612],{},[29,163546,163547],{},"局部变量不能在函数外部访问。",[29,163549,163550,163551,163553],{},"不要滥用 ",[84,163552,162587],{},"，更好的方式是让函数返回新值。",[19,163555,163556,163557,163559],{},"例如不用 ",[84,163558,162587],{}," 改写存款：",[77,163561,163563],{"className":31325,"code":163562,"language":31327,"meta":82,"style":82},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[84,163564,163565,163574,163585,163589,163593,163601,163614],{"__ignoreMap":82},[87,163566,163567,163569,163571],{"class":89,"line":90},[87,163568,32894],{"class":171},[87,163570,163191],{"class":205},[87,163572,163573],{"class":97},"(balance, money):\n",[87,163575,163576,163578,163581,163583],{"class":89,"line":101},[87,163577,5044],{"class":171},[87,163579,163580],{"class":97}," balance ",[87,163582,1575],{"class":171},[87,163584,150936],{"class":97},[87,163586,163587],{"class":89,"line":120},[87,163588,3355],{"emptyLinePlaceholder":1029},[87,163590,163591],{"class":89,"line":222},[87,163592,3355],{"emptyLinePlaceholder":1029},[87,163594,163595,163597,163599],{"class":89,"line":234},[87,163596,163065],{"class":97},[87,163598,946],{"class":171},[87,163600,163070],{"class":104},[87,163602,163603,163605,163607,163610,163612],{"class":89,"line":256},[87,163604,163065],{"class":97},[87,163606,946],{"class":171},[87,163608,163609],{"class":97}," save_money(balance, ",[87,163611,2678],{"class":104},[87,163613,1108],{"class":97},[87,163615,163616,163618],{"class":89,"line":269},[87,163617,31362],{"class":104},[87,163619,163620],{"class":97},"(balance)\n",[14,163622,163624],{"id":163623},"_515-本章练习","5.15 本章练习",[1055,163626,163627,163634,163640,163646,163652],{},[29,163628,163629,163630,163633],{},"定义函数 ",[84,163631,163632],{},"print_student(name, age)","，输出学生信息。",[29,163635,163629,163636,163639],{},[84,163637,163638],{},"get_max(a, b, c)","，返回三个数中的最大值。",[29,163641,163629,163642,163645],{},[84,163643,163644],{},"is_even(num)","，判断一个数是否为偶数。",[29,163647,163629,163648,163651],{},[84,163649,163650],{},"calculate_bmi(weight, height)","，返回 BMI。",[29,163653,163654],{},"把第 4 章的菜单程序拆分成多个函数。",[1006,163656,163657],{},"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":82,"searchDepth":101,"depth":101,"links":163659},[163660,163661,163662,163663,163664,163665,163666,163667,163668,163672,163673,163674,163675,163676,163677],{"id":161680,"depth":101,"text":161681},{"id":161721,"depth":101,"text":161722},{"id":161811,"depth":101,"text":161812},{"id":161892,"depth":101,"text":161893},{"id":162025,"depth":101,"text":162026},{"id":162147,"depth":101,"text":162148},{"id":162269,"depth":101,"text":162270},{"id":162346,"depth":101,"text":162347},{"id":162468,"depth":101,"text":162469,"children":163669},[163670,163671],{"id":162472,"depth":120,"text":162473},{"id":162530,"depth":120,"text":162531},{"id":162659,"depth":101,"text":162660},{"id":162785,"depth":101,"text":162786},{"id":162898,"depth":101,"text":162899},{"id":163054,"depth":101,"text":163055},{"id":163525,"depth":101,"text":163526},{"id":163623,"depth":101,"text":163624},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161672,"description":1026},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163684,"title":163685,"body":163686,"description":1026,"extension":1027,"meta":166730,"navigation":1029,"path":166731,"seo":166732,"stem":166733,"__hash__":166734},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163687,"toc":166711},[163688,163691,163695,163698,163701,163805,163808,163812,163815,163895,163898,163902,163905,163965,163968,164004,164007,164022,164026,164099,164102,164157,164160,164230,164233,164317,164327,164385,164389,164434,164437,164463,164466,164572,164576,164579,164621,164624,164688,164691,164695,164698,164759,164762,164792,164795,164833,164837,164840,164849,164852,164976,164979,165020,165024,165027,165038,165078,165081,165096,165101,165104,165171,165174,165264,165268,165271,165319,165322,165349,165351,165381,165384,165404,165407,165438,165441,165474,165478,165481,165505,165508,165532,165535,165559,165563,165566,165696,165699,165779,165782,165857,165861,165864,165914,165917,165959,165962,165986,165988,166012,166015,166070,166073,166139,166143,166146,166149,166187,166190,166243,166246,166292,166295,166328,166331,166335,166654,166658,166687,166691,166708],[10,163689,163685],{"id":163690},"_6-数据容器",[14,163692,163694],{"id":163693},"_61-什么是数据容器","6.1 什么是数据容器",[19,163696,163697],{},"数据容器用于一次保存多个数据。",[19,163699,163700],{},"常见容器：",[1235,163702,163703,163720],{},[1238,163704,163705],{},[1241,163706,163707,163709,163712,163715,163718],{},[1244,163708,26718],{},[1244,163710,163711],{},"是否有序",[1244,163713,163714],{},"是否可变",[1244,163716,163717],{},"是否允许重复",[1244,163719,28439],{},[1281,163721,163722,163740,163756,163771,163788],{},[1241,163723,163724,163727,163730,163733,163736],{},[1286,163725,163726],{},"list列表",[1286,163728,163729],{},"有序",[1286,163731,163732],{},"可变",[1286,163734,163735],{},"允许",[1286,163737,163738],{},[84,163739,156018],{},[1241,163741,163742,163745,163747,163750,163752],{},[1286,163743,163744],{},"tuple元组",[1286,163746,163729],{},[1286,163748,163749],{},"不可变",[1286,163751,163735],{},[1286,163753,163754],{},[84,163755,156031],{},[1241,163757,163758,163761,163763,163765,163767],{},[1286,163759,163760],{},"str字符串",[1286,163762,163729],{},[1286,163764,163749],{},[1286,163766,163735],{},[1286,163768,163769],{},[84,163770,156641],{},[1241,163772,163773,163776,163779,163781,163784],{},[1286,163774,163775],{},"set集合",[1286,163777,163778],{},"无序",[1286,163780,163732],{},[1286,163782,163783],{},"不允许",[1286,163785,163786],{},[84,163787,156056],{},[1241,163789,163790,163793,163795,163797,163800],{},[1286,163791,163792],{},"dict字典",[1286,163794,163729],{},[1286,163796,163732],{},[1286,163798,163799],{},"key不允许重复",[1286,163801,163802],{},[84,163803,163804],{},"{\"name\": \"小明\"}",[19,163806,163807],{},"Python 3.7 之后，字典保持插入顺序。",[14,163809,163811],{"id":163810},"_62-列表list","6.2 列表list",[19,163813,163814],{},"列表用于保存一组有顺序的数据。",[77,163816,163818],{"className":31325,"code":163817,"language":31327,"meta":82,"style":82},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[84,163819,163820,163840,163865,163886],{"__ignoreMap":82},[87,163821,163822,163824,163826,163828,163830,163832,163834,163836,163838],{"class":89,"line":90},[87,163823,161141],{"class":97},[87,163825,946],{"class":171},[87,163827,53163],{"class":97},[87,163829,150649],{"class":949},[87,163831,13385],{"class":97},[87,163833,151697],{"class":949},[87,163835,13385],{"class":97},[87,163837,160492],{"class":949},[87,163839,34193],{"class":97},[87,163841,163842,163845,163847,163849,163851,163853,163855,163857,163859,163861,163863],{"class":89,"line":101},[87,163843,163844],{"class":97},"numbers ",[87,163846,946],{"class":171},[87,163848,53163],{"class":97},[87,163850,1313],{"class":104},[87,163852,13385],{"class":97},[87,163854,1176],{"class":104},[87,163856,13385],{"class":97},[87,163858,1170],{"class":104},[87,163860,13385],{"class":97},[87,163862,1389],{"class":104},[87,163864,34193],{"class":97},[87,163866,163867,163870,163872,163874,163876,163878,163880,163882,163884],{"class":89,"line":120},[87,163868,163869],{"class":97},"mixed ",[87,163871,946],{"class":171},[87,163873,53163],{"class":97},[87,163875,150649],{"class":949},[87,163877,13385],{"class":97},[87,163879,1743],{"class":104},[87,163881,13385],{"class":97},[87,163883,32423],{"class":104},[87,163885,34193],{"class":97},[87,163887,163888,163891,163893],{"class":89,"line":222},[87,163889,163890],{"class":97},"empty ",[87,163892,946],{"class":171},[87,163894,52775],{"class":97},[19,163896,163897],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163899,163901],{"id":163900},"_63-列表索引","6.3 列表索引",[19,163903,163904],{},"正向索引从 0 开始：",[77,163906,163908],{"className":31325,"code":163907,"language":31327,"meta":82,"style":82},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[84,163909,163910,163930,163934,163945,163955],{"__ignoreMap":82},[87,163911,163912,163914,163916,163918,163920,163922,163924,163926,163928],{"class":89,"line":90},[87,163913,161141],{"class":97},[87,163915,946],{"class":171},[87,163917,53163],{"class":97},[87,163919,150649],{"class":949},[87,163921,13385],{"class":97},[87,163923,151697],{"class":949},[87,163925,13385],{"class":97},[87,163927,160492],{"class":949},[87,163929,34193],{"class":97},[87,163931,163932],{"class":89,"line":101},[87,163933,3355],{"emptyLinePlaceholder":1029},[87,163935,163936,163938,163941,163943],{"class":89,"line":120},[87,163937,31362],{"class":104},[87,163939,163940],{"class":97},"(names[",[87,163942,111],{"class":104},[87,163944,5610],{"class":97},[87,163946,163947,163949,163951,163953],{"class":89,"line":222},[87,163948,31362],{"class":104},[87,163950,163940],{"class":97},[87,163952,1313],{"class":104},[87,163954,5610],{"class":97},[87,163956,163957,163959,163961,163963],{"class":89,"line":234},[87,163958,31362],{"class":104},[87,163960,163940],{"class":97},[87,163962,1176],{"class":104},[87,163964,5610],{"class":97},[19,163966,163967],{},"反向索引从 -1 开始：",[77,163969,163971],{"className":31325,"code":163970,"language":31327,"meta":82,"style":82},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[84,163972,163973,163989],{"__ignoreMap":82},[87,163974,163975,163977,163979,163981,163983,163986],{"class":89,"line":90},[87,163976,31362],{"class":104},[87,163978,163940],{"class":97},[87,163980,1625],{"class":171},[87,163982,1313],{"class":104},[87,163984,163985],{"class":97},"])  ",[87,163987,163988],{"class":199},"# 小刚\n",[87,163990,163991,163993,163995,163997,163999,164001],{"class":89,"line":101},[87,163992,31362],{"class":104},[87,163994,163940],{"class":97},[87,163996,1625],{"class":171},[87,163998,1176],{"class":104},[87,164000,163985],{"class":97},[87,164002,164003],{"class":199},"# 小红\n",[19,164005,164006],{},"索引越界会报错：",[77,164008,164010],{"className":31325,"code":164009,"language":31327,"meta":82,"style":82},"print(names[3])\n",[84,164011,164012],{"__ignoreMap":82},[87,164013,164014,164016,164018,164020],{"class":89,"line":90},[87,164015,31362],{"class":104},[87,164017,163940],{"class":97},[87,164019,1170],{"class":104},[87,164021,5610],{"class":97},[14,164023,164025],{"id":164024},"_64-列表常用方法","6.4 列表常用方法",[77,164027,164029],{"className":31325,"code":164028,"language":31327,"meta":82,"style":82},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[84,164030,164031,164047,164051,164060,164074,164088,164092],{"__ignoreMap":82},[87,164032,164033,164035,164037,164039,164041,164043,164045],{"class":89,"line":90},[87,164034,161141],{"class":97},[87,164036,946],{"class":171},[87,164038,53163],{"class":97},[87,164040,150649],{"class":949},[87,164042,13385],{"class":97},[87,164044,151697],{"class":949},[87,164046,34193],{"class":97},[87,164048,164049],{"class":89,"line":101},[87,164050,3355],{"emptyLinePlaceholder":1029},[87,164052,164053,164056,164058],{"class":89,"line":120},[87,164054,164055],{"class":97},"names.append(",[87,164057,160492],{"class":949},[87,164059,1108],{"class":97},[87,164061,164062,164065,164067,164069,164072],{"class":89,"line":222},[87,164063,164064],{"class":97},"names.insert(",[87,164066,1313],{"class":104},[87,164068,13385],{"class":97},[87,164070,164071],{"class":949},"\"小李\"",[87,164073,1108],{"class":97},[87,164075,164076,164079,164081,164083,164086],{"class":89,"line":234},[87,164077,164078],{"class":97},"names.extend([",[87,164080,9633],{"class":949},[87,164082,13385],{"class":97},[87,164084,164085],{"class":949},"\"小赵\"",[87,164087,5610],{"class":97},[87,164089,164090],{"class":89,"line":256},[87,164091,3355],{"emptyLinePlaceholder":1029},[87,164093,164094,164096],{"class":89,"line":269},[87,164095,31362],{"class":104},[87,164097,164098],{"class":97},"(names)\n",[19,164100,164101],{},"删除元素：",[77,164103,164105],{"className":31325,"code":164104,"language":31327,"meta":82,"style":82},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[84,164106,164107,164116,164126,164140,164152],{"__ignoreMap":82},[87,164108,164109,164112,164114],{"class":89,"line":90},[87,164110,164111],{"class":97},"names.remove(",[87,164113,151697],{"class":949},[87,164115,1108],{"class":97},[87,164117,164118,164121,164123],{"class":89,"line":101},[87,164119,164120],{"class":97},"last ",[87,164122,946],{"class":171},[87,164124,164125],{"class":97}," names.pop()\n",[87,164127,164128,164131,164133,164136,164138],{"class":89,"line":120},[87,164129,164130],{"class":97},"first ",[87,164132,946],{"class":171},[87,164134,164135],{"class":97}," names.pop(",[87,164137,111],{"class":104},[87,164139,1108],{"class":97},[87,164141,164142,164145,164148,164150],{"class":89,"line":222},[87,164143,164144],{"class":171},"del",[87,164146,164147],{"class":97}," names[",[87,164149,111],{"class":104},[87,164151,34193],{"class":97},[87,164153,164154],{"class":89,"line":234},[87,164155,164156],{"class":97},"names.clear()\n",[19,164158,164159],{},"查询和统计：",[77,164161,164163],{"className":31325,"code":164162,"language":31327,"meta":82,"style":82},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[84,164164,164165,164193,164197,164208,164219],{"__ignoreMap":82},[87,164166,164167,164169,164171,164173,164175,164177,164179,164181,164183,164185,164187,164189,164191],{"class":89,"line":90},[87,164168,163844],{"class":97},[87,164170,946],{"class":171},[87,164172,53163],{"class":97},[87,164174,1313],{"class":104},[87,164176,13385],{"class":97},[87,164178,1176],{"class":104},[87,164180,13385],{"class":97},[87,164182,1170],{"class":104},[87,164184,13385],{"class":97},[87,164186,1176],{"class":104},[87,164188,13385],{"class":97},[87,164190,1389],{"class":104},[87,164192,34193],{"class":97},[87,164194,164195],{"class":89,"line":101},[87,164196,3355],{"emptyLinePlaceholder":1029},[87,164198,164199,164201,164204,164206],{"class":89,"line":120},[87,164200,31362],{"class":104},[87,164202,164203],{"class":97},"(numbers.index(",[87,164205,1170],{"class":104},[87,164207,31444],{"class":97},[87,164209,164210,164212,164215,164217],{"class":89,"line":222},[87,164211,31362],{"class":104},[87,164213,164214],{"class":97},"(numbers.count(",[87,164216,1176],{"class":104},[87,164218,31444],{"class":97},[87,164220,164221,164223,164225,164227],{"class":89,"line":234},[87,164222,31362],{"class":104},[87,164224,165],{"class":97},[87,164226,8308],{"class":104},[87,164228,164229],{"class":97},"(numbers))\n",[19,164231,164232],{},"排序：",[77,164234,164236],{"className":31325,"code":164235,"language":31327,"meta":82,"style":82},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[84,164237,164238,164262,164266,164271,164278,164282,164296,164302,164306,164311],{"__ignoreMap":82},[87,164239,164240,164242,164244,164246,164248,164250,164252,164254,164256,164258,164260],{"class":89,"line":90},[87,164241,163844],{"class":97},[87,164243,946],{"class":171},[87,164245,53163],{"class":97},[87,164247,1170],{"class":104},[87,164249,13385],{"class":97},[87,164251,1313],{"class":104},[87,164253,13385],{"class":97},[87,164255,1414],{"class":104},[87,164257,13385],{"class":97},[87,164259,1176],{"class":104},[87,164261,34193],{"class":97},[87,164263,164264],{"class":89,"line":101},[87,164265,3355],{"emptyLinePlaceholder":1029},[87,164267,164268],{"class":89,"line":120},[87,164269,164270],{"class":97},"numbers.sort()\n",[87,164272,164273,164275],{"class":89,"line":222},[87,164274,31362],{"class":104},[87,164276,164277],{"class":97},"(numbers)\n",[87,164279,164280],{"class":89,"line":234},[87,164281,3355],{"emptyLinePlaceholder":1029},[87,164283,164284,164287,164290,164292,164294],{"class":89,"line":256},[87,164285,164286],{"class":97},"numbers.sort(",[87,164288,164289],{"class":492},"reverse",[87,164291,946],{"class":171},[87,164293,32423],{"class":104},[87,164295,1108],{"class":97},[87,164297,164298,164300],{"class":89,"line":269},[87,164299,31362],{"class":104},[87,164301,164277],{"class":97},[87,164303,164304],{"class":89,"line":463},[87,164305,3355],{"emptyLinePlaceholder":1029},[87,164307,164308],{"class":89,"line":469},[87,164309,164310],{"class":97},"numbers.reverse()\n",[87,164312,164313,164315],{"class":89,"line":2287},[87,164314,31362],{"class":104},[87,164316,164277],{"class":97},[19,164318,164319,164322,164323,164326],{},[84,164320,164321],{},"sort()"," 会修改原列表，",[84,164324,164325],{},"sorted()"," 返回新列表。",[77,164328,164330],{"className":31325,"code":164329,"language":31327,"meta":82,"style":82},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[84,164331,164332,164356,164368,164372,164378],{"__ignoreMap":82},[87,164333,164334,164336,164338,164340,164342,164344,164346,164348,164350,164352,164354],{"class":89,"line":90},[87,164335,163844],{"class":97},[87,164337,946],{"class":171},[87,164339,53163],{"class":97},[87,164341,1170],{"class":104},[87,164343,13385],{"class":97},[87,164345,1313],{"class":104},[87,164347,13385],{"class":97},[87,164349,1414],{"class":104},[87,164351,13385],{"class":97},[87,164353,1176],{"class":104},[87,164355,34193],{"class":97},[87,164357,164358,164361,164363,164366],{"class":89,"line":101},[87,164359,164360],{"class":97},"new_numbers ",[87,164362,946],{"class":171},[87,164364,164365],{"class":104}," sorted",[87,164367,164277],{"class":97},[87,164369,164370],{"class":89,"line":120},[87,164371,3355],{"emptyLinePlaceholder":1029},[87,164373,164374,164376],{"class":89,"line":222},[87,164375,31362],{"class":104},[87,164377,164277],{"class":97},[87,164379,164380,164382],{"class":89,"line":234},[87,164381,31362],{"class":104},[87,164383,164384],{"class":97},"(new_numbers)\n",[14,164386,164388],{"id":164387},"_65-列表遍历","6.5 列表遍历",[77,164390,164392],{"className":31325,"code":164391,"language":31327,"meta":82,"style":82},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[84,164393,164394,164414,164418,164428],{"__ignoreMap":82},[87,164395,164396,164398,164400,164402,164404,164406,164408,164410,164412],{"class":89,"line":90},[87,164397,161141],{"class":97},[87,164399,946],{"class":171},[87,164401,53163],{"class":97},[87,164403,150649],{"class":949},[87,164405,13385],{"class":97},[87,164407,151697],{"class":949},[87,164409,13385],{"class":97},[87,164411,160492],{"class":949},[87,164413,34193],{"class":97},[87,164415,164416],{"class":89,"line":101},[87,164417,3355],{"emptyLinePlaceholder":1029},[87,164419,164420,164422,164424,164426],{"class":89,"line":120},[87,164421,3979],{"class":171},[87,164423,161177],{"class":97},[87,164425,26990],{"class":171},[87,164427,161182],{"class":97},[87,164429,164430,164432],{"class":89,"line":222},[87,164431,32246],{"class":104},[87,164433,151421],{"class":97},[19,164435,164436],{},"需要索引时：",[77,164438,164440],{"className":31325,"code":164439,"language":31327,"meta":82,"style":82},"for index, name in enumerate(names):\n    print(index, name)\n",[84,164441,164442,164456],{"__ignoreMap":82},[87,164443,164444,164446,164449,164451,164453],{"class":89,"line":90},[87,164445,3979],{"class":171},[87,164447,164448],{"class":97}," index, name ",[87,164450,26990],{"class":171},[87,164452,32553],{"class":104},[87,164454,164455],{"class":97},"(names):\n",[87,164457,164458,164460],{"class":89,"line":101},[87,164459,32246],{"class":104},[87,164461,164462],{"class":97},"(index, name)\n",[19,164464,164465],{},"统计总分：",[77,164467,164469],{"className":31325,"code":164468,"language":31327,"meta":82,"style":82},"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",[84,164470,164471,164496,164504,164508,164519,164527,164531,164548],{"__ignoreMap":82},[87,164472,164473,164476,164478,164480,164482,164484,164486,164488,164490,164492,164494],{"class":89,"line":90},[87,164474,164475],{"class":97},"scores ",[87,164477,946],{"class":171},[87,164479,53163],{"class":97},[87,164481,1954],{"class":104},[87,164483,13385],{"class":97},[87,164485,1828],{"class":104},[87,164487,13385],{"class":97},[87,164489,1350],{"class":104},[87,164491,13385],{"class":97},[87,164493,1654],{"class":104},[87,164495,34193],{"class":97},[87,164497,164498,164500,164502],{"class":89,"line":101},[87,164499,158021],{"class":97},[87,164501,946],{"class":171},[87,164503,48280],{"class":104},[87,164505,164506],{"class":89,"line":120},[87,164507,3355],{"emptyLinePlaceholder":1029},[87,164509,164510,164512,164514,164516],{"class":89,"line":222},[87,164511,3979],{"class":171},[87,164513,158544],{"class":97},[87,164515,26990],{"class":171},[87,164517,164518],{"class":97}," scores:\n",[87,164520,164521,164523,164525],{"class":89,"line":234},[87,164522,160068],{"class":97},[87,164524,10427],{"class":171},[87,164526,2535],{"class":97},[87,164528,164529],{"class":89,"line":256},[87,164530,3355],{"emptyLinePlaceholder":1029},[87,164532,164533,164536,164538,164541,164543,164545],{"class":89,"line":269},[87,164534,164535],{"class":97},"avg ",[87,164537,946],{"class":171},[87,164539,164540],{"class":97}," total ",[87,164542,1677],{"class":171},[87,164544,8281],{"class":104},[87,164546,164547],{"class":97},"(scores)\n",[87,164549,164550,164552,164554,164556,164559,164561,164564,164566,164568,164570],{"class":89,"line":463},[87,164551,31362],{"class":104},[87,164553,165],{"class":97},[87,164555,1152],{"class":171},[87,164557,164558],{"class":949},"\"平均分:",[87,164560,1988],{"class":104},[87,164562,164563],{"class":97},"avg",[87,164565,157920],{"class":171},[87,164567,2037],{"class":104},[87,164569,1347],{"class":949},[87,164571,1108],{"class":97},[14,164573,164575],{"id":164574},"_66-元组tuple","6.6 元组tuple",[19,164577,164578],{},"元组和列表类似，但不可修改。",[77,164580,164582],{"className":31325,"code":164581,"language":31327,"meta":82,"style":82},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[84,164583,164584,164601],{"__ignoreMap":82},[87,164585,164586,164589,164591,164593,164595,164597,164599],{"class":89,"line":90},[87,164587,164588],{"class":97},"point ",[87,164590,946],{"class":171},[87,164592,2614],{"class":97},[87,164594,242],{"class":104},[87,164596,13385],{"class":97},[87,164598,1792],{"class":104},[87,164600,1108],{"class":97},[87,164602,164603,164605,164607,164609,164611,164613,164615,164617,164619],{"class":89,"line":101},[87,164604,117240],{"class":97},[87,164606,946],{"class":171},[87,164608,2614],{"class":97},[87,164610,150649],{"class":949},[87,164612,13385],{"class":97},[87,164614,1743],{"class":104},[87,164616,13385],{"class":97},[87,164618,70201],{"class":949},[87,164620,1108],{"class":97},[19,164622,164623],{},"单元素元组必须加逗号：",[77,164625,164627],{"className":31325,"code":164626,"language":31327,"meta":82,"style":82},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[84,164628,164629,164643,164656,164660,164674],{"__ignoreMap":82},[87,164630,164631,164634,164636,164638,164640],{"class":89,"line":90},[87,164632,164633],{"class":97},"t1 ",[87,164635,946],{"class":171},[87,164637,2614],{"class":97},[87,164639,242],{"class":104},[87,164641,164642],{"class":97},",)\n",[87,164644,164645,164648,164650,164652,164654],{"class":89,"line":101},[87,164646,164647],{"class":97},"t2 ",[87,164649,946],{"class":171},[87,164651,2614],{"class":97},[87,164653,242],{"class":104},[87,164655,1108],{"class":97},[87,164657,164658],{"class":89,"line":120},[87,164659,3355],{"emptyLinePlaceholder":1029},[87,164661,164662,164664,164666,164668,164671],{"class":89,"line":222},[87,164663,31362],{"class":104},[87,164665,165],{"class":97},[87,164667,104033],{"class":104},[87,164669,164670],{"class":97},"(t1))  ",[87,164672,164673],{"class":199},"# tuple\n",[87,164675,164676,164678,164680,164682,164685],{"class":89,"line":234},[87,164677,31362],{"class":104},[87,164679,165],{"class":97},[87,164681,104033],{"class":104},[87,164683,164684],{"class":97},"(t2))  ",[87,164686,164687],{"class":199},"# int\n",[19,164689,164690],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164692,164694],{"id":164693},"_67-字符串str","6.7 字符串str",[19,164696,164697],{},"字符串也是序列，可以索引、切片和遍历。",[77,164699,164701],{"className":31325,"code":164700,"language":31327,"meta":82,"style":82},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[84,164702,164703,164711,164715,164726,164738,164742,164753],{"__ignoreMap":82},[87,164704,164705,164707,164709],{"class":89,"line":90},[87,164706,157205],{"class":97},[87,164708,946],{"class":171},[87,164710,160442],{"class":949},[87,164712,164713],{"class":89,"line":101},[87,164714,3355],{"emptyLinePlaceholder":1029},[87,164716,164717,164719,164722,164724],{"class":89,"line":120},[87,164718,31362],{"class":104},[87,164720,164721],{"class":97},"(text[",[87,164723,111],{"class":104},[87,164725,5610],{"class":97},[87,164727,164728,164730,164732,164734,164736],{"class":89,"line":222},[87,164729,31362],{"class":104},[87,164731,164721],{"class":97},[87,164733,1625],{"class":171},[87,164735,1313],{"class":104},[87,164737,5610],{"class":97},[87,164739,164740],{"class":89,"line":234},[87,164741,3355],{"emptyLinePlaceholder":1029},[87,164743,164744,164746,164748,164750],{"class":89,"line":256},[87,164745,3979],{"class":171},[87,164747,160453],{"class":97},[87,164749,26990],{"class":171},[87,164751,164752],{"class":97}," text:\n",[87,164754,164755,164757],{"class":89,"line":269},[87,164756,32246],{"class":104},[87,164758,160464],{"class":97},[19,164760,164761],{},"字符串不可变：",[77,164763,164765],{"className":31325,"code":164764,"language":31327,"meta":82,"style":82},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[84,164766,164767,164775],{"__ignoreMap":82},[87,164768,164769,164771,164773],{"class":89,"line":90},[87,164770,157205],{"class":97},[87,164772,946],{"class":171},[87,164774,160442],{"class":949},[87,164776,164777,164780,164782,164784,164786,164789],{"class":89,"line":101},[87,164778,164779],{"class":97},"text[",[87,164781,111],{"class":104},[87,164783,5396],{"class":97},[87,164785,946],{"class":171},[87,164787,164788],{"class":949}," \"P\"",[87,164790,164791],{"class":199},"  # 报错\n",[19,164793,164794],{},"如果要得到新字符串：",[77,164796,164798],{"className":31325,"code":164797,"language":31327,"meta":82,"style":82},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[84,164799,164800,164808,164826],{"__ignoreMap":82},[87,164801,164802,164804,164806],{"class":89,"line":90},[87,164803,157205],{"class":97},[87,164805,946],{"class":171},[87,164807,160442],{"class":949},[87,164809,164810,164812,164814,164816,164818,164821,164823],{"class":89,"line":101},[87,164811,157205],{"class":97},[87,164813,946],{"class":171},[87,164815,164788],{"class":949},[87,164817,46513],{"class":171},[87,164819,164820],{"class":97}," text[",[87,164822,1313],{"class":104},[87,164824,164825],{"class":97},":]\n",[87,164827,164828,164830],{"class":89,"line":120},[87,164829,31362],{"class":104},[87,164831,164832],{"class":97},"(text)\n",[14,164834,164836],{"id":164835},"_68-切片","6.8 切片",[19,164838,164839],{},"切片用于从序列中取一部分。",[77,164841,164843],{"className":31325,"code":164842,"language":31327,"meta":82,"style":82},"序列[开始:结束:步长]\n",[84,164844,164845],{"__ignoreMap":82},[87,164846,164847],{"class":89,"line":90},[87,164848,164842],{"class":97},[19,164850,164851],{},"结束位置不包含。",[77,164853,164855],{"className":31325,"code":164854,"language":31327,"meta":82,"style":82},"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",[84,164856,164857,164894,164898,164917,164932,164946,164960],{"__ignoreMap":82},[87,164858,164859,164862,164864,164866,164868,164870,164872,164874,164876,164878,164880,164882,164884,164886,164888,164890,164892],{"class":89,"line":90},[87,164860,164861],{"class":97},"nums ",[87,164863,946],{"class":171},[87,164865,53163],{"class":97},[87,164867,111],{"class":104},[87,164869,13385],{"class":97},[87,164871,1313],{"class":104},[87,164873,13385],{"class":97},[87,164875,1176],{"class":104},[87,164877,13385],{"class":97},[87,164879,1170],{"class":104},[87,164881,13385],{"class":97},[87,164883,1389],{"class":104},[87,164885,13385],{"class":97},[87,164887,1414],{"class":104},[87,164889,13385],{"class":97},[87,164891,1439],{"class":104},[87,164893,34193],{"class":97},[87,164895,164896],{"class":89,"line":101},[87,164897,3355],{"emptyLinePlaceholder":1029},[87,164899,164900,164902,164905,164907,164909,164911,164914],{"class":89,"line":120},[87,164901,31362],{"class":104},[87,164903,164904],{"class":97},"(nums[",[87,164906,1313],{"class":104},[87,164908,1951],{"class":97},[87,164910,1389],{"class":104},[87,164912,164913],{"class":97},"])    ",[87,164915,164916],{"class":199},"# [1, 2, 3]\n",[87,164918,164919,164921,164924,164926,164929],{"class":89,"line":222},[87,164920,31362],{"class":104},[87,164922,164923],{"class":97},"(nums[:",[87,164925,1170],{"class":104},[87,164927,164928],{"class":97},"])     ",[87,164930,164931],{"class":199},"# [0, 1, 2]\n",[87,164933,164934,164936,164938,164940,164943],{"class":89,"line":234},[87,164935,31362],{"class":104},[87,164937,164904],{"class":97},[87,164939,1170],{"class":104},[87,164941,164942],{"class":97},":])     ",[87,164944,164945],{"class":199},"# [3, 4, 5, 6]\n",[87,164947,164948,164950,164953,164955,164957],{"class":89,"line":256},[87,164949,31362],{"class":104},[87,164951,164952],{"class":97},"(nums[::",[87,164954,1176],{"class":104},[87,164956,164913],{"class":97},[87,164958,164959],{"class":199},"# [0, 2, 4, 6]\n",[87,164961,164962,164964,164966,164968,164970,164973],{"class":89,"line":269},[87,164963,31362],{"class":104},[87,164965,164952],{"class":97},[87,164967,1625],{"class":171},[87,164969,1313],{"class":104},[87,164971,164972],{"class":97},"])   ",[87,164974,164975],{"class":199},"# 反转\n",[19,164977,164978],{},"字符串切片：",[77,164980,164982],{"className":31325,"code":164981,"language":31327,"meta":82,"style":82},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[84,164983,164984,164993,165007],{"__ignoreMap":82},[87,164985,164986,164988,164990],{"class":89,"line":90},[87,164987,157205],{"class":97},[87,164989,946],{"class":171},[87,164991,164992],{"class":949}," \"abcdef\"\n",[87,164994,164995,164997,164999,165001,165003,165005],{"class":89,"line":101},[87,164996,31362],{"class":104},[87,164998,164721],{"class":97},[87,165000,1313],{"class":104},[87,165002,1951],{"class":97},[87,165004,1389],{"class":104},[87,165006,5610],{"class":97},[87,165008,165009,165011,165014,165016,165018],{"class":89,"line":120},[87,165010,31362],{"class":104},[87,165012,165013],{"class":97},"(text[::",[87,165015,1625],{"class":171},[87,165017,1313],{"class":104},[87,165019,5610],{"class":97},[14,165021,165023],{"id":165022},"_69-集合set","6.9 集合set",[19,165025,165026],{},"集合特点：",[1055,165028,165029,165032,165035],{},[29,165030,165031],{},"无序。",[29,165033,165034],{},"元素不重复。",[29,165036,165037],{},"可以做交集、并集、差集。",[77,165039,165041],{"className":31325,"code":165040,"language":31327,"meta":82,"style":82},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[84,165042,165043,165071],{"__ignoreMap":82},[87,165044,165045,165047,165049,165051,165053,165055,165057,165059,165061,165063,165065,165067,165069],{"class":89,"line":90},[87,165046,164861],{"class":97},[87,165048,946],{"class":171},[87,165050,5401],{"class":97},[87,165052,1313],{"class":104},[87,165054,13385],{"class":97},[87,165056,1176],{"class":104},[87,165058,13385],{"class":97},[87,165060,1170],{"class":104},[87,165062,13385],{"class":97},[87,165064,1170],{"class":104},[87,165066,13385],{"class":97},[87,165068,1389],{"class":104},[87,165070,123],{"class":97},[87,165072,165073,165075],{"class":89,"line":101},[87,165074,31362],{"class":104},[87,165076,165077],{"class":97},"(nums)\n",[19,165079,165080],{},"创建空集合：",[77,165082,165084],{"className":31325,"code":165083,"language":31327,"meta":82,"style":82},"s = set()\n",[84,165085,165086],{"__ignoreMap":82},[87,165087,165088,165090,165092,165094],{"class":89,"line":90},[87,165089,11529],{"class":97},[87,165091,946],{"class":171},[87,165093,120648],{"class":104},[87,165095,2931],{"class":97},[19,165097,9975,165098,165100],{},[84,165099,33406],{}," 是空字典，不是空集合。",[19,165102,165103],{},"集合常用操作：",[77,165105,165107],{"className":31325,"code":165106,"language":31327,"meta":82,"style":82},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[84,165108,165109,165129,165133,165142,165151,165160],{"__ignoreMap":82},[87,165110,165111,165113,165115,165117,165119,165121,165123,165125,165127],{"class":89,"line":90},[87,165112,11529],{"class":97},[87,165114,946],{"class":171},[87,165116,5401],{"class":97},[87,165118,1313],{"class":104},[87,165120,13385],{"class":97},[87,165122,1176],{"class":104},[87,165124,13385],{"class":97},[87,165126,1170],{"class":104},[87,165128,123],{"class":97},[87,165130,165131],{"class":89,"line":101},[87,165132,3355],{"emptyLinePlaceholder":1029},[87,165134,165135,165138,165140],{"class":89,"line":120},[87,165136,165137],{"class":97},"s.add(",[87,165139,1389],{"class":104},[87,165141,1108],{"class":97},[87,165143,165144,165147,165149],{"class":89,"line":222},[87,165145,165146],{"class":97},"s.remove(",[87,165148,1176],{"class":104},[87,165150,1108],{"class":97},[87,165152,165153,165156,165158],{"class":89,"line":234},[87,165154,165155],{"class":97},"s.discard(",[87,165157,242],{"class":104},[87,165159,1108],{"class":97},[87,165161,165162,165164,165166,165168],{"class":89,"line":256},[87,165163,31362],{"class":104},[87,165165,165],{"class":97},[87,165167,8308],{"class":104},[87,165169,165170],{"class":97},"(s))\n",[19,165172,165173],{},"交并差：",[77,165175,165177],{"className":31325,"code":165176,"language":31327,"meta":82,"style":82},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[84,165178,165179,165199,165219,165223,165238,165251],{"__ignoreMap":82},[87,165180,165181,165183,165185,165187,165189,165191,165193,165195,165197],{"class":89,"line":90},[87,165182,11869],{"class":97},[87,165184,946],{"class":171},[87,165186,5401],{"class":97},[87,165188,1313],{"class":104},[87,165190,13385],{"class":97},[87,165192,1176],{"class":104},[87,165194,13385],{"class":97},[87,165196,1170],{"class":104},[87,165198,123],{"class":97},[87,165200,165201,165203,165205,165207,165209,165211,165213,165215,165217],{"class":89,"line":101},[87,165202,11895],{"class":97},[87,165204,946],{"class":171},[87,165206,5401],{"class":97},[87,165208,1170],{"class":104},[87,165210,13385],{"class":97},[87,165212,1389],{"class":104},[87,165214,13385],{"class":97},[87,165216,1414],{"class":104},[87,165218,123],{"class":97},[87,165220,165221],{"class":89,"line":120},[87,165222,3355],{"emptyLinePlaceholder":1029},[87,165224,165225,165227,165230,165232,165235],{"class":89,"line":222},[87,165226,31362],{"class":104},[87,165228,165229],{"class":97},"(a ",[87,165231,1448],{"class":171},[87,165233,165234],{"class":97}," b)  ",[87,165236,165237],{"class":199},"# 交集\n",[87,165239,165240,165242,165244,165246,165248],{"class":89,"line":234},[87,165241,31362],{"class":104},[87,165243,165229],{"class":97},[87,165245,2012],{"class":171},[87,165247,165234],{"class":97},[87,165249,165250],{"class":199},"# 并集\n",[87,165252,165253,165255,165257,165259,165261],{"class":89,"line":256},[87,165254,31362],{"class":104},[87,165256,165229],{"class":97},[87,165258,1625],{"class":171},[87,165260,165234],{"class":97},[87,165262,165263],{"class":199},"# 差集\n",[14,165265,165267],{"id":165266},"_610-字典dict","6.10 字典dict",[19,165269,165270],{},"字典通过 key-value 保存数据。",[77,165272,165274],{"className":31325,"code":165273,"language":31327,"meta":82,"style":82},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[84,165275,165276,165284,165294,165305,165315],{"__ignoreMap":82},[87,165277,165278,165280,165282],{"class":89,"line":90},[87,165279,150242],{"class":97},[87,165281,946],{"class":171},[87,165283,98],{"class":97},[87,165285,165286,165288,165290,165292],{"class":89,"line":101},[87,165287,147781],{"class":949},[87,165289,108],{"class":97},[87,165291,150649],{"class":949},[87,165293,32413],{"class":97},[87,165295,165296,165299,165301,165303],{"class":89,"line":120},[87,165297,165298],{"class":949},"    \"age\"",[87,165300,108],{"class":97},[87,165302,1743],{"class":104},[87,165304,32413],{"class":97},[87,165306,165307,165310,165312],{"class":89,"line":222},[87,165308,165309],{"class":949},"    \"score\"",[87,165311,108],{"class":97},[87,165313,165314],{"class":104},"95\n",[87,165316,165317],{"class":89,"line":234},[87,165318,123],{"class":97},[19,165320,165321],{},"获取值：",[77,165323,165325],{"className":31325,"code":165324,"language":31327,"meta":82,"style":82},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[84,165326,165327,165338],{"__ignoreMap":82},[87,165328,165329,165331,165334,165336],{"class":89,"line":90},[87,165330,31362],{"class":104},[87,165332,165333],{"class":97},"(student[",[87,165335,63613],{"class":949},[87,165337,5610],{"class":97},[87,165339,165340,165342,165345,165347],{"class":89,"line":101},[87,165341,31362],{"class":104},[87,165343,165344],{"class":97},"(student.get(",[87,165346,63613],{"class":949},[87,165348,31444],{"class":97},[19,165350,16338],{},[77,165352,165354],{"className":31325,"code":165353,"language":31327,"meta":82,"style":82},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[84,165355,165356,165369],{"__ignoreMap":82},[87,165357,165358,165360,165363,165366],{"class":89,"line":90},[87,165359,153620],{"class":97},[87,165361,165362],{"class":949},"\"address\"",[87,165364,165365],{"class":97},"]     ",[87,165367,165368],{"class":199},"# key不存在会报错\n",[87,165370,165371,165374,165376,165378],{"class":89,"line":101},[87,165372,165373],{"class":97},"student.get(",[87,165375,165362],{"class":949},[87,165377,14664],{"class":97},[87,165379,165380],{"class":199},"# key不存在返回None\n",[19,165382,165383],{},"设置默认值：",[77,165385,165387],{"className":31325,"code":165386,"language":31327,"meta":82,"style":82},"print(student.get(\"address\", \"未知\"))\n",[84,165388,165389],{"__ignoreMap":82},[87,165390,165391,165393,165395,165397,165399,165402],{"class":89,"line":90},[87,165392,31362],{"class":104},[87,165394,165344],{"class":97},[87,165396,165362],{"class":949},[87,165398,13385],{"class":97},[87,165400,165401],{"class":949},"\"未知\"",[87,165403,31444],{"class":97},[19,165405,165406],{},"新增和修改：",[77,165408,165410],{"className":31325,"code":165409,"language":31327,"meta":82,"style":82},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[84,165411,165412,165425],{"__ignoreMap":82},[87,165413,165414,165416,165418,165420,165422],{"class":89,"line":90},[87,165415,153620],{"class":97},[87,165417,70056],{"class":949},[87,165419,5396],{"class":97},[87,165421,946],{"class":171},[87,165423,165424],{"class":104}," 19\n",[87,165426,165427,165429,165431,165433,165435],{"class":89,"line":101},[87,165428,153620],{"class":97},[87,165430,165362],{"class":949},[87,165432,5396],{"class":97},[87,165434,946],{"class":171},[87,165436,165437],{"class":949}," \"北京\"\n",[19,165439,165440],{},"删除：",[77,165442,165444],{"className":31325,"code":165443,"language":31327,"meta":82,"style":82},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[84,165445,165446,165459,165469],{"__ignoreMap":82},[87,165447,165448,165450,165452,165455,165457],{"class":89,"line":90},[87,165449,156119],{"class":97},[87,165451,946],{"class":171},[87,165453,165454],{"class":97}," student.pop(",[87,165456,152233],{"class":949},[87,165458,1108],{"class":97},[87,165460,165461,165463,165465,165467],{"class":89,"line":101},[87,165462,164144],{"class":171},[87,165464,152910],{"class":97},[87,165466,70056],{"class":949},[87,165468,34193],{"class":97},[87,165470,165471],{"class":89,"line":120},[87,165472,165473],{"class":97},"student.clear()\n",[14,165475,165477],{"id":165476},"_611-字典遍历","6.11 字典遍历",[19,165479,165480],{},"遍历 key：",[77,165482,165484],{"className":31325,"code":165483,"language":31327,"meta":82,"style":82},"for key in student:\n    print(key, student[key])\n",[84,165485,165486,165498],{"__ignoreMap":82},[87,165487,165488,165490,165493,165495],{"class":89,"line":90},[87,165489,3979],{"class":171},[87,165491,165492],{"class":97}," key ",[87,165494,26990],{"class":171},[87,165496,165497],{"class":97}," student:\n",[87,165499,165500,165502],{"class":89,"line":101},[87,165501,32246],{"class":104},[87,165503,165504],{"class":97},"(key, student[key])\n",[19,165506,165507],{},"遍历 value：",[77,165509,165511],{"className":31325,"code":165510,"language":31327,"meta":82,"style":82},"for value in student.values():\n    print(value)\n",[84,165512,165513,165525],{"__ignoreMap":82},[87,165514,165515,165517,165520,165522],{"class":89,"line":90},[87,165516,3979],{"class":171},[87,165518,165519],{"class":97}," value ",[87,165521,26990],{"class":171},[87,165523,165524],{"class":97}," student.values():\n",[87,165526,165527,165529],{"class":89,"line":101},[87,165528,32246],{"class":104},[87,165530,165531],{"class":97},"(value)\n",[19,165533,165534],{},"遍历 key 和 value：",[77,165536,165538],{"className":31325,"code":165537,"language":31327,"meta":82,"style":82},"for key, value in student.items():\n    print(key, value)\n",[84,165539,165540,165552],{"__ignoreMap":82},[87,165541,165542,165544,165547,165549],{"class":89,"line":90},[87,165543,3979],{"class":171},[87,165545,165546],{"class":97}," key, value ",[87,165548,26990],{"class":171},[87,165550,165551],{"class":97}," student.items():\n",[87,165553,165554,165556],{"class":89,"line":101},[87,165555,32246],{"class":104},[87,165557,165558],{"class":97},"(key, value)\n",[14,165560,165562],{"id":165561},"_612-嵌套容器","6.12 嵌套容器",[19,165564,165565],{},"列表中保存字典，是项目中最常见的结构之一。",[77,165567,165569],{"className":31325,"code":165568,"language":31327,"meta":82,"style":82},"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",[84,165570,165571,165579,165607,165635,165663,165667,165671,165681],{"__ignoreMap":82},[87,165572,165573,165575,165577],{"class":89,"line":90},[87,165574,160477],{"class":97},[87,165576,946],{"class":171},[87,165578,56383],{"class":97},[87,165580,165581,165583,165585,165587,165589,165591,165593,165595,165597,165599,165601,165603,165605],{"class":89,"line":101},[87,165582,149146],{"class":97},[87,165584,63613],{"class":949},[87,165586,108],{"class":97},[87,165588,150649],{"class":949},[87,165590,13385],{"class":97},[87,165592,70056],{"class":949},[87,165594,108],{"class":97},[87,165596,1743],{"class":104},[87,165598,13385],{"class":97},[87,165600,152233],{"class":949},[87,165602,108],{"class":97},[87,165604,2080],{"class":104},[87,165606,5883],{"class":97},[87,165608,165609,165611,165613,165615,165617,165619,165621,165623,165625,165627,165629,165631,165633],{"class":89,"line":120},[87,165610,149146],{"class":97},[87,165612,63613],{"class":949},[87,165614,108],{"class":97},[87,165616,151697],{"class":949},[87,165618,13385],{"class":97},[87,165620,70056],{"class":949},[87,165622,108],{"class":97},[87,165624,1718],{"class":104},[87,165626,13385],{"class":97},[87,165628,152233],{"class":949},[87,165630,108],{"class":97},[87,165632,1903],{"class":104},[87,165634,5883],{"class":97},[87,165636,165637,165639,165641,165643,165645,165647,165649,165651,165653,165655,165657,165659,165661],{"class":89,"line":222},[87,165638,149146],{"class":97},[87,165640,63613],{"class":949},[87,165642,108],{"class":97},[87,165644,160492],{"class":949},[87,165646,13385],{"class":97},[87,165648,70056],{"class":949},[87,165650,108],{"class":97},[87,165652,1768],{"class":104},[87,165654,13385],{"class":97},[87,165656,152233],{"class":949},[87,165658,108],{"class":97},[87,165660,1501],{"class":104},[87,165662,5883],{"class":97},[87,165664,165665],{"class":89,"line":234},[87,165666,34193],{"class":97},[87,165668,165669],{"class":89,"line":256},[87,165670,3355],{"emptyLinePlaceholder":1029},[87,165672,165673,165675,165677,165679],{"class":89,"line":269},[87,165674,3979],{"class":171},[87,165676,152898],{"class":97},[87,165678,26990],{"class":171},[87,165680,152903],{"class":97},[87,165682,165683,165685,165687,165689,165692,165694],{"class":89,"line":463},[87,165684,32246],{"class":104},[87,165686,165333],{"class":97},[87,165688,63613],{"class":949},[87,165690,165691],{"class":97},"], student[",[87,165693,152233],{"class":949},[87,165695,5610],{"class":97},[19,165697,165698],{},"统计平均分：",[77,165700,165702],{"className":31325,"code":165701,"language":31327,"meta":82,"style":82},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[84,165703,165704,165712,165716,165726,165738,165742,165757],{"__ignoreMap":82},[87,165705,165706,165708,165710],{"class":89,"line":90},[87,165707,158021],{"class":97},[87,165709,946],{"class":171},[87,165711,48280],{"class":104},[87,165713,165714],{"class":89,"line":101},[87,165715,3355],{"emptyLinePlaceholder":1029},[87,165717,165718,165720,165722,165724],{"class":89,"line":120},[87,165719,3979],{"class":171},[87,165721,152898],{"class":97},[87,165723,26990],{"class":171},[87,165725,152903],{"class":97},[87,165727,165728,165730,165732,165734,165736],{"class":89,"line":222},[87,165729,160068],{"class":97},[87,165731,10427],{"class":171},[87,165733,152910],{"class":97},[87,165735,152233],{"class":949},[87,165737,34193],{"class":97},[87,165739,165740],{"class":89,"line":234},[87,165741,3355],{"emptyLinePlaceholder":1029},[87,165743,165744,165746,165748,165750,165752,165754],{"class":89,"line":256},[87,165745,164535],{"class":97},[87,165747,946],{"class":171},[87,165749,164540],{"class":97},[87,165751,1677],{"class":171},[87,165753,8281],{"class":104},[87,165755,165756],{"class":97},"(students)\n",[87,165758,165759,165761,165763,165765,165767,165769,165771,165773,165775,165777],{"class":89,"line":269},[87,165760,31362],{"class":104},[87,165762,165],{"class":97},[87,165764,1152],{"class":171},[87,165766,164558],{"class":949},[87,165768,1988],{"class":104},[87,165770,164563],{"class":97},[87,165772,157920],{"class":171},[87,165774,2037],{"class":104},[87,165776,1347],{"class":949},[87,165778,1108],{"class":97},[19,165780,165781],{},"查找学生：",[77,165783,165785],{"className":31325,"code":165784,"language":31327,"meta":82,"style":82},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[84,165786,165787,165802,165806,165816,165830,165836,165840,165846],{"__ignoreMap":82},[87,165788,165789,165791,165793,165795,165797,165800],{"class":89,"line":90},[87,165790,112504],{"class":97},[87,165792,946],{"class":171},[87,165794,61541],{"class":104},[87,165796,165],{"class":97},[87,165798,165799],{"class":949},"\"请输入学生姓名:\"",[87,165801,1108],{"class":97},[87,165803,165804],{"class":89,"line":101},[87,165805,3355],{"emptyLinePlaceholder":1029},[87,165807,165808,165810,165812,165814],{"class":89,"line":120},[87,165809,3979],{"class":171},[87,165811,152898],{"class":97},[87,165813,26990],{"class":171},[87,165815,152903],{"class":97},[87,165817,165818,165820,165822,165824,165826,165828],{"class":89,"line":222},[87,165819,4055],{"class":171},[87,165821,152910],{"class":97},[87,165823,63613],{"class":949},[87,165825,5396],{"class":97},[87,165827,3903],{"class":171},[87,165829,161193],{"class":97},[87,165831,165832,165834],{"class":89,"line":234},[87,165833,33398],{"class":104},[87,165835,150803],{"class":97},[87,165837,165838],{"class":89,"line":256},[87,165839,32574],{"class":171},[87,165841,165842,165844],{"class":89,"line":269},[87,165843,2657],{"class":171},[87,165845,4693],{"class":97},[87,165847,165848,165850,165852,165855],{"class":89,"line":463},[87,165849,32246],{"class":104},[87,165851,165],{"class":97},[87,165853,165854],{"class":949},"\"没有找到\"",[87,165856,1108],{"class":97},[14,165858,165860],{"id":165859},"_613-容器通用操作","6.13 容器通用操作",[19,165862,165863],{},"长度：",[77,165865,165867],{"className":31325,"code":165866,"language":31327,"meta":82,"style":82},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[84,165868,165869,165888,165898],{"__ignoreMap":82},[87,165870,165871,165873,165876,165878,165880,165882,165884,165886],{"class":89,"line":90},[87,165872,8308],{"class":104},[87,165874,165875],{"class":97},"([",[87,165877,1313],{"class":104},[87,165879,13385],{"class":97},[87,165881,1176],{"class":104},[87,165883,13385],{"class":97},[87,165885,1170],{"class":104},[87,165887,5610],{"class":97},[87,165889,165890,165892,165894,165896],{"class":89,"line":101},[87,165891,8308],{"class":104},[87,165893,165],{"class":97},[87,165895,156641],{"class":949},[87,165897,1108],{"class":97},[87,165899,165900,165902,165905,165907,165909,165911],{"class":89,"line":120},[87,165901,8308],{"class":104},[87,165903,165904],{"class":97},"({",[87,165906,63613],{"class":949},[87,165908,108],{"class":97},[87,165910,150649],{"class":949},[87,165912,165913],{"class":97},"})\n",[19,165915,165916],{},"最大最小：",[77,165918,165920],{"className":31325,"code":165919,"language":31327,"meta":82,"style":82},"max([1, 2, 3])\nmin([1, 2, 3])\n",[84,165921,165922,165940],{"__ignoreMap":82},[87,165923,165924,165926,165928,165930,165932,165934,165936,165938],{"class":89,"line":90},[87,165925,6965],{"class":104},[87,165927,165875],{"class":97},[87,165929,1313],{"class":104},[87,165931,13385],{"class":97},[87,165933,1176],{"class":104},[87,165935,13385],{"class":97},[87,165937,1170],{"class":104},[87,165939,5610],{"class":97},[87,165941,165942,165945,165947,165949,165951,165953,165955,165957],{"class":89,"line":101},[87,165943,165944],{"class":104},"min",[87,165946,165875],{"class":97},[87,165948,1313],{"class":104},[87,165950,13385],{"class":97},[87,165952,1176],{"class":104},[87,165954,13385],{"class":97},[87,165956,1170],{"class":104},[87,165958,5610],{"class":97},[19,165960,165961],{},"求和：",[77,165963,165965],{"className":31325,"code":165964,"language":31327,"meta":82,"style":82},"sum([1, 2, 3])\n",[84,165966,165967],{"__ignoreMap":82},[87,165968,165969,165972,165974,165976,165978,165980,165982,165984],{"class":89,"line":90},[87,165970,165971],{"class":104},"sum",[87,165973,165875],{"class":97},[87,165975,1313],{"class":104},[87,165977,13385],{"class":97},[87,165979,1176],{"class":104},[87,165981,13385],{"class":97},[87,165983,1170],{"class":104},[87,165985,5610],{"class":97},[19,165987,164232],{},[77,165989,165991],{"className":31325,"code":165990,"language":31327,"meta":82,"style":82},"sorted([3, 1, 2])\n",[84,165992,165993],{"__ignoreMap":82},[87,165994,165995,165998,166000,166002,166004,166006,166008,166010],{"class":89,"line":90},[87,165996,165997],{"class":104},"sorted",[87,165999,165875],{"class":97},[87,166001,1170],{"class":104},[87,166003,13385],{"class":97},[87,166005,1313],{"class":104},[87,166007,13385],{"class":97},[87,166009,1176],{"class":104},[87,166011,5610],{"class":97},[19,166013,166014],{},"类型转换：",[77,166016,166018],{"className":31325,"code":166017,"language":31327,"meta":82,"style":82},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[84,166019,166020,166030,166048],{"__ignoreMap":82},[87,166021,166022,166024,166026,166028],{"class":89,"line":90},[87,166023,154831],{"class":104},[87,166025,165],{"class":97},[87,166027,156641],{"class":949},[87,166029,1108],{"class":97},[87,166031,166032,166034,166036,166038,166040,166042,166044,166046],{"class":89,"line":101},[87,166033,156026],{"class":104},[87,166035,165875],{"class":97},[87,166037,1313],{"class":104},[87,166039,13385],{"class":97},[87,166041,1176],{"class":104},[87,166043,13385],{"class":97},[87,166045,1170],{"class":104},[87,166047,5610],{"class":97},[87,166049,166050,166052,166054,166056,166058,166060,166062,166064,166066,166068],{"class":89,"line":120},[87,166051,156051],{"class":104},[87,166053,165875],{"class":97},[87,166055,1313],{"class":104},[87,166057,13385],{"class":97},[87,166059,1313],{"class":104},[87,166061,13385],{"class":97},[87,166063,1176],{"class":104},[87,166065,13385],{"class":97},[87,166067,1170],{"class":104},[87,166069,5610],{"class":97},[19,166071,166072],{},"成员判断：",[77,166074,166076],{"className":31325,"code":166075,"language":31327,"meta":82,"style":82},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[84,166077,166078,166095,166119],{"__ignoreMap":82},[87,166079,166080,166082,166084,166087,166090,166093],{"class":89,"line":90},[87,166081,31362],{"class":104},[87,166083,165],{"class":97},[87,166085,166086],{"class":949},"\"a\"",[87,166088,166089],{"class":171}," in",[87,166091,166092],{"class":949}," \"abc\"",[87,166094,1108],{"class":97},[87,166096,166097,166099,166101,166103,166105,166107,166109,166111,166113,166115,166117],{"class":89,"line":101},[87,166098,31362],{"class":104},[87,166100,165],{"class":97},[87,166102,1313],{"class":104},[87,166104,166089],{"class":171},[87,166106,53163],{"class":97},[87,166108,1313],{"class":104},[87,166110,13385],{"class":97},[87,166112,1176],{"class":104},[87,166114,13385],{"class":97},[87,166116,1170],{"class":104},[87,166118,5610],{"class":97},[87,166120,166121,166123,166125,166127,166129,166131,166133,166135,166137],{"class":89,"line":120},[87,166122,31362],{"class":104},[87,166124,165],{"class":97},[87,166126,63613],{"class":949},[87,166128,166089],{"class":171},[87,166130,5401],{"class":97},[87,166132,63613],{"class":949},[87,166134,108],{"class":97},[87,166136,150649],{"class":949},[87,166138,165913],{"class":97},[14,166140,166142],{"id":166141},"_614-推导式","6.14 推导式",[19,166144,166145],{},"推导式用于快速生成容器。",[19,166147,166148],{},"列表推导式：",[77,166150,166152],{"className":31325,"code":166151,"language":31327,"meta":82,"style":82},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[84,166153,166154,166181],{"__ignoreMap":82},[87,166155,166156,166158,166160,166163,166165,166167,166169,166171,166173,166175,166177,166179],{"class":89,"line":90},[87,166157,164861],{"class":97},[87,166159,946],{"class":171},[87,166161,166162],{"class":97}," [i ",[87,166164,3979],{"class":171},[87,166166,10388],{"class":97},[87,166168,26990],{"class":171},[87,166170,33390],{"class":104},[87,166172,165],{"class":97},[87,166174,1313],{"class":104},[87,166176,13385],{"class":97},[87,166178,1439],{"class":104},[87,166180,98226],{"class":97},[87,166182,166183,166185],{"class":89,"line":101},[87,166184,31362],{"class":104},[87,166186,165077],{"class":97},[19,166188,166189],{},"带条件：",[77,166191,166193],{"className":31325,"code":166192,"language":31327,"meta":82,"style":82},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[84,166194,166195,166236],{"__ignoreMap":82},[87,166196,166197,166200,166202,166204,166206,166208,166210,166212,166214,166216,166218,166220,166222,166224,166226,166228,166230,166232,166234],{"class":89,"line":90},[87,166198,166199],{"class":97},"even_nums ",[87,166201,946],{"class":171},[87,166203,166162],{"class":97},[87,166205,3979],{"class":171},[87,166207,10388],{"class":97},[87,166209,26990],{"class":171},[87,166211,33390],{"class":104},[87,166213,165],{"class":97},[87,166215,1313],{"class":104},[87,166217,13385],{"class":97},[87,166219,1432],{"class":104},[87,166221,14664],{"class":97},[87,166223,2488],{"class":171},[87,166225,10388],{"class":97},[87,166227,1423],{"class":171},[87,166229,15705],{"class":104},[87,166231,102485],{"class":171},[87,166233,577],{"class":104},[87,166235,34193],{"class":97},[87,166237,166238,166240],{"class":89,"line":101},[87,166239,31362],{"class":104},[87,166241,166242],{"class":97},"(even_nums)\n",[19,166244,166245],{},"字典推导式：",[77,166247,166249],{"className":31325,"code":166248,"language":31327,"meta":82,"style":82},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[84,166250,166251,166285],{"__ignoreMap":82},[87,166252,166253,166256,166258,166261,166263,166265,166268,166270,166272,166274,166276,166278,166280,166282],{"class":89,"line":90},[87,166254,166255],{"class":97},"squares ",[87,166257,946],{"class":171},[87,166259,166260],{"class":97}," {i: i ",[87,166262,11611],{"class":171},[87,166264,15705],{"class":104},[87,166266,166267],{"class":171}," for",[87,166269,10388],{"class":97},[87,166271,26990],{"class":171},[87,166273,33390],{"class":104},[87,166275,165],{"class":97},[87,166277,1313],{"class":104},[87,166279,13385],{"class":97},[87,166281,1439],{"class":104},[87,166283,166284],{"class":97},")}\n",[87,166286,166287,166289],{"class":89,"line":101},[87,166288,31362],{"class":104},[87,166290,166291],{"class":97},"(squares)\n",[19,166293,166294],{},"集合推导式：",[77,166296,166298],{"className":31325,"code":166297,"language":31327,"meta":82,"style":82},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[84,166299,166300,166321],{"__ignoreMap":82},[87,166301,166302,166305,166307,166310,166312,166314,166316,166319],{"class":89,"line":90},[87,166303,166304],{"class":97},"chars ",[87,166306,946],{"class":171},[87,166308,166309],{"class":97}," {ch ",[87,166311,3979],{"class":171},[87,166313,160453],{"class":97},[87,166315,26990],{"class":171},[87,166317,166318],{"class":949}," \"hello\"",[87,166320,123],{"class":97},[87,166322,166323,166325],{"class":89,"line":101},[87,166324,31362],{"class":104},[87,166326,166327],{"class":97},"(chars)\n",[19,166329,166330],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166332,166334],{"id":166333},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[77,166336,166338],{"className":31325,"code":166337,"language":31327,"meta":82,"style":82},"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",[84,166339,166340,166348,166368,166388,166408,166428,166432,166436,166444,166458,166467,166471,166481,166493,166497,166517,166526,166530,166546,166551,166555,166569,166573,166595,166631],{"__ignoreMap":82},[87,166341,166342,166344,166346],{"class":89,"line":90},[87,166343,160477],{"class":97},[87,166345,946],{"class":171},[87,166347,56383],{"class":97},[87,166349,166350,166352,166354,166356,166358,166360,166362,166364,166366],{"class":89,"line":101},[87,166351,149146],{"class":97},[87,166353,63613],{"class":949},[87,166355,108],{"class":97},[87,166357,150649],{"class":949},[87,166359,13385],{"class":97},[87,166361,152233],{"class":949},[87,166363,108],{"class":97},[87,166365,2080],{"class":104},[87,166367,5883],{"class":97},[87,166369,166370,166372,166374,166376,166378,166380,166382,166384,166386],{"class":89,"line":120},[87,166371,149146],{"class":97},[87,166373,63613],{"class":949},[87,166375,108],{"class":97},[87,166377,151697],{"class":949},[87,166379,13385],{"class":97},[87,166381,152233],{"class":949},[87,166383,108],{"class":97},[87,166385,1903],{"class":104},[87,166387,5883],{"class":97},[87,166389,166390,166392,166394,166396,166398,166400,166402,166404,166406],{"class":89,"line":222},[87,166391,149146],{"class":97},[87,166393,63613],{"class":949},[87,166395,108],{"class":97},[87,166397,160492],{"class":949},[87,166399,13385],{"class":97},[87,166401,152233],{"class":949},[87,166403,108],{"class":97},[87,166405,1501],{"class":104},[87,166407,5883],{"class":97},[87,166409,166410,166412,166414,166416,166418,166420,166422,166424,166426],{"class":89,"line":234},[87,166411,149146],{"class":97},[87,166413,63613],{"class":949},[87,166415,108],{"class":97},[87,166417,164071],{"class":949},[87,166419,13385],{"class":97},[87,166421,152233],{"class":949},[87,166423,108],{"class":97},[87,166425,1974],{"class":104},[87,166427,5883],{"class":97},[87,166429,166430],{"class":89,"line":256},[87,166431,34193],{"class":97},[87,166433,166434],{"class":89,"line":269},[87,166435,3355],{"emptyLinePlaceholder":1029},[87,166437,166438,166440,166442],{"class":89,"line":463},[87,166439,158021],{"class":97},[87,166441,946],{"class":171},[87,166443,48280],{"class":104},[87,166445,166446,166449,166451,166454,166456],{"class":89,"line":469},[87,166447,166448],{"class":97},"max_student ",[87,166450,946],{"class":171},[87,166452,166453],{"class":97}," students[",[87,166455,111],{"class":104},[87,166457,34193],{"class":97},[87,166459,166460,166463,166465],{"class":89,"line":2287},[87,166461,166462],{"class":97},"passed ",[87,166464,946],{"class":171},[87,166466,52775],{"class":97},[87,166468,166469],{"class":89,"line":2568},[87,166470,3355],{"emptyLinePlaceholder":1029},[87,166472,166473,166475,166477,166479],{"class":89,"line":2573},[87,166474,3979],{"class":171},[87,166476,152898],{"class":97},[87,166478,26990],{"class":171},[87,166480,152903],{"class":97},[87,166482,166483,166485,166487,166489,166491],{"class":89,"line":2579},[87,166484,160068],{"class":97},[87,166486,10427],{"class":171},[87,166488,152910],{"class":97},[87,166490,152233],{"class":949},[87,166492,34193],{"class":97},[87,166494,166495],{"class":89,"line":2584},[87,166496,3355],{"emptyLinePlaceholder":1029},[87,166498,166499,166501,166503,166505,166507,166509,166512,166514],{"class":89,"line":2598},[87,166500,4055],{"class":171},[87,166502,152910],{"class":97},[87,166504,152233],{"class":949},[87,166506,5396],{"class":97},[87,166508,2051],{"class":171},[87,166510,166511],{"class":97}," max_student[",[87,166513,152233],{"class":949},[87,166515,166516],{"class":97},"]:\n",[87,166518,166519,166522,166524],{"class":89,"line":2603},[87,166520,166521],{"class":97},"        max_student ",[87,166523,946],{"class":171},[87,166525,152926],{"class":97},[87,166527,166528],{"class":89,"line":2609},[87,166529,3355],{"emptyLinePlaceholder":1029},[87,166531,166532,166534,166536,166538,166540,166542,166544],{"class":89,"line":2630},[87,166533,4055],{"class":171},[87,166535,152910],{"class":97},[87,166537,152233],{"class":949},[87,166539,5396],{"class":97},[87,166541,2666],{"class":171},[87,166543,158598],{"class":104},[87,166545,4693],{"class":97},[87,166547,166548],{"class":89,"line":2635},[87,166549,166550],{"class":97},"        passed.append(student)\n",[87,166552,166553],{"class":89,"line":2649},[87,166554,3355],{"emptyLinePlaceholder":1029},[87,166556,166557,166559,166561,166563,166565,166567],{"class":89,"line":2654},[87,166558,164535],{"class":97},[87,166560,946],{"class":171},[87,166562,164540],{"class":97},[87,166564,1677],{"class":171},[87,166566,8281],{"class":104},[87,166568,165756],{"class":97},[87,166570,166571],{"class":89,"line":2683},[87,166572,3355],{"emptyLinePlaceholder":1029},[87,166574,166575,166577,166579,166581,166583,166585,166587,166589,166591,166593],{"class":89,"line":2688},[87,166576,31362],{"class":104},[87,166578,165],{"class":97},[87,166580,1152],{"class":171},[87,166582,164558],{"class":949},[87,166584,1988],{"class":104},[87,166586,164563],{"class":97},[87,166588,157920],{"class":171},[87,166590,2037],{"class":104},[87,166592,1347],{"class":949},[87,166594,1108],{"class":97},[87,166596,166597,166599,166601,166603,166606,166608,166611,166613,166615,166617,166619,166621,166623,166625,166627,166629],{"class":89,"line":2705},[87,166598,31362],{"class":104},[87,166600,165],{"class":97},[87,166602,1152],{"class":171},[87,166604,166605],{"class":949},"\"最高分学生:",[87,166607,1988],{"class":104},[87,166609,166610],{"class":97},"max_student[",[87,166612,153643],{"class":949},[87,166614,2031],{"class":97},[87,166616,2037],{"class":104},[87,166618,5401],{"class":104},[87,166620,166610],{"class":97},[87,166622,153681],{"class":949},[87,166624,2031],{"class":97},[87,166626,2037],{"class":104},[87,166628,1347],{"class":949},[87,166630,1108],{"class":97},[87,166632,166633,166635,166637,166639,166642,166645,166648,166650,166652],{"class":89,"line":2710},[87,166634,31362],{"class":104},[87,166636,165],{"class":97},[87,166638,1152],{"class":171},[87,166640,166641],{"class":949},"\"及格人数:",[87,166643,166644],{"class":104},"{len",[87,166646,166647],{"class":97},"(passed)",[87,166649,2037],{"class":104},[87,166651,1347],{"class":949},[87,166653,1108],{"class":97},[14,166655,166657],{"id":166656},"_616-易错点","6.16 易错点",[1055,166659,166660,166663,166666,166669,166675,166684],{},[29,166661,166662],{},"列表可变，元组和字符串不可变。",[29,166664,166665],{},"切片结束位置不包含。",[29,166667,166668],{},"字典通过 key 取值，不是通过索引。",[29,166670,166671,166672,29332],{},"空集合要用 ",[84,166673,166674],{},"set()",[29,166676,105292,166677,166680,166681,29332],{},[84,166678,166679],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[84,166682,166683],{},"get()",[29,166685,166686],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166688,166690],{"id":166689},"_617-本章练习","6.17 本章练习",[1055,166692,166693,166696,166699,166702,166705],{},[29,166694,166695],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[29,166697,166698],{},"输入一句话，统计每个字符出现次数。",[29,166700,166701],{},"使用集合去除列表中的重复元素。",[29,166703,166704],{},"使用字典保存一个学生的信息，并实现修改成绩。",[29,166706,166707],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1006,166709,166710],{},"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":82,"searchDepth":101,"depth":101,"links":166712},[166713,166714,166715,166716,166717,166718,166719,166720,166721,166722,166723,166724,166725,166726,166727,166728,166729],{"id":163693,"depth":101,"text":163694},{"id":163810,"depth":101,"text":163811},{"id":163900,"depth":101,"text":163901},{"id":164024,"depth":101,"text":164025},{"id":164387,"depth":101,"text":164388},{"id":164574,"depth":101,"text":164575},{"id":164693,"depth":101,"text":164694},{"id":164835,"depth":101,"text":164836},{"id":165022,"depth":101,"text":165023},{"id":165266,"depth":101,"text":165267},{"id":165476,"depth":101,"text":165477},{"id":165561,"depth":101,"text":165562},{"id":165859,"depth":101,"text":165860},{"id":166141,"depth":101,"text":166142},{"id":166333,"depth":101,"text":166334},{"id":166656,"depth":101,"text":166657},{"id":166689,"depth":101,"text":166690},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163685,"description":1026},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166736,"title":166737,"body":166738,"description":1026,"extension":1027,"meta":168910,"navigation":1029,"path":168911,"seo":168912,"stem":168913,"__hash__":168914},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166739,"toc":168885},[166740,166743,166747,166750,166830,166833,166854,166857,166861,166864,166926,166929,166946,166950,166953,166998,167000,167008,167012,167015,167097,167100,167103,167128,167131,167154,167158,167161,167163,167225,167228,167230,167281,167285,167289,167295,167400,167404,167410,167481,167485,167488,167556,167559,167639,167643,167649,167685,167688,167691,167801,167807,167811,167814,167886,167889,167893,167897,167902,167964,167968,167973,168041,168045,168050,168166,168170,168173,168253,168256,168260,168263,168367,168369,168384,168387,168391,168529,168537,168541,168543,168554,168556,168814,168818,168850,168854,168882],[10,166741,166737],{"id":166742},"_7-函数进阶",[14,166744,166746],{"id":166745},"_71-多返回值","7.1 多返回值",[19,166748,166749],{},"Python 函数可以返回多个值，本质上返回的是元组。",[77,166751,166753],{"className":31325,"code":166752,"language":31327,"meta":82,"style":82},"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",[84,166754,166755,166764,166772,166780,166789,166796,166800,166804,166813,166819],{"__ignoreMap":82},[87,166756,166757,166759,166762],{"class":89,"line":90},[87,166758,32894],{"class":171},[87,166760,166761],{"class":205}," get_info",[87,166763,32900],{"class":97},[87,166765,166766,166768,166770],{"class":89,"line":101},[87,166767,153131],{"class":97},[87,166769,946],{"class":171},[87,166771,150114],{"class":949},[87,166773,166774,166776,166778],{"class":89,"line":120},[87,166775,153147],{"class":97},[87,166777,946],{"class":171},[87,166779,147312],{"class":104},[87,166781,166782,166784,166786],{"class":89,"line":222},[87,166783,153162],{"class":97},[87,166785,946],{"class":171},[87,166787,166788],{"class":104}," 95\n",[87,166790,166791,166793],{"class":89,"line":234},[87,166792,5044],{"class":171},[87,166794,166795],{"class":97}," name, age, score\n",[87,166797,166798],{"class":89,"line":256},[87,166799,3355],{"emptyLinePlaceholder":1029},[87,166801,166802],{"class":89,"line":269},[87,166803,3355],{"emptyLinePlaceholder":1029},[87,166805,166806,166808,166810],{"class":89,"line":463},[87,166807,162067],{"class":97},[87,166809,946],{"class":171},[87,166811,166812],{"class":97}," get_info()\n",[87,166814,166815,166817],{"class":89,"line":469},[87,166816,31362],{"class":104},[87,166818,77513],{"class":97},[87,166820,166821,166823,166825,166827],{"class":89,"line":2287},[87,166822,31362],{"class":104},[87,166824,165],{"class":97},[87,166826,104033],{"class":104},[87,166828,166829],{"class":97},"(result))\n",[19,166831,166832],{},"可以直接解包：",[77,166834,166836],{"className":31325,"code":166835,"language":31327,"meta":82,"style":82},"name, age, score = get_info()\nprint(name, age, score)\n",[84,166837,166838,166847],{"__ignoreMap":82},[87,166839,166840,166843,166845],{"class":89,"line":90},[87,166841,166842],{"class":97},"name, age, score ",[87,166844,946],{"class":171},[87,166846,166812],{"class":97},[87,166848,166849,166851],{"class":89,"line":101},[87,166850,31362],{"class":104},[87,166852,166853],{"class":97},"(name, age, score)\n",[19,166855,166856],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166858,166860],{"id":166859},"_72-位置参数","7.2 位置参数",[19,166862,166863],{},"位置参数按顺序传递。",[77,166865,166867],{"className":31325,"code":166866,"language":31327,"meta":82,"style":82},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[84,166868,166869,166877,166905,166909,166913],{"__ignoreMap":82},[87,166870,166871,166873,166875],{"class":89,"line":90},[87,166872,32894],{"class":171},[87,166874,150133],{"class":205},[87,166876,150136],{"class":97},[87,166878,166879,166881,166883,166885,166887,166889,166891,166893,166895,166897,166899,166901,166903],{"class":89,"line":101},[87,166880,32246],{"class":104},[87,166882,165],{"class":97},[87,166884,1152],{"class":171},[87,166886,150147],{"class":949},[87,166888,1988],{"class":104},[87,166890,80736],{"class":97},[87,166892,2037],{"class":104},[87,166894,150156],{"class":949},[87,166896,1988],{"class":104},[87,166898,71153],{"class":97},[87,166900,2037],{"class":104},[87,166902,150165],{"class":949},[87,166904,1108],{"class":97},[87,166906,166907],{"class":89,"line":120},[87,166908,3355],{"emptyLinePlaceholder":1029},[87,166910,166911],{"class":89,"line":222},[87,166912,3355],{"emptyLinePlaceholder":1029},[87,166914,166915,166918,166920,166922,166924],{"class":89,"line":234},[87,166916,166917],{"class":97},"introduce(",[87,166919,150649],{"class":949},[87,166921,13385],{"class":97},[87,166923,1743],{"class":104},[87,166925,1108],{"class":97},[19,166927,166928],{},"顺序错了就会得到错误含义：",[77,166930,166932],{"className":31325,"code":166931,"language":31327,"meta":82,"style":82},"introduce(18, \"小明\")\n",[84,166933,166934],{"__ignoreMap":82},[87,166935,166936,166938,166940,166942,166944],{"class":89,"line":90},[87,166937,166917],{"class":97},[87,166939,1743],{"class":104},[87,166941,13385],{"class":97},[87,166943,150649],{"class":949},[87,166945,1108],{"class":97},[14,166947,166949],{"id":166948},"_73-关键字参数","7.3 关键字参数",[19,166951,166952],{},"关键字参数按参数名传递。",[77,166954,166956],{"className":31325,"code":166955,"language":31327,"meta":82,"style":82},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[84,166957,166958,166978],{"__ignoreMap":82},[87,166959,166960,166962,166964,166966,166968,166970,166972,166974,166976],{"class":89,"line":90},[87,166961,166917],{"class":97},[87,166963,80736],{"class":492},[87,166965,946],{"class":171},[87,166967,150649],{"class":949},[87,166969,13385],{"class":97},[87,166971,71153],{"class":492},[87,166973,946],{"class":171},[87,166975,1743],{"class":104},[87,166977,1108],{"class":97},[87,166979,166980,166982,166984,166986,166988,166990,166992,166994,166996],{"class":89,"line":101},[87,166981,166917],{"class":97},[87,166983,71153],{"class":492},[87,166985,946],{"class":171},[87,166987,1743],{"class":104},[87,166989,13385],{"class":97},[87,166991,80736],{"class":492},[87,166993,946],{"class":171},[87,166995,150649],{"class":949},[87,166997,1108],{"class":97},[19,166999,118860],{},[1055,167001,167002,167005],{},[29,167003,167004],{},"顺序不容易错。",[29,167006,167007],{},"调用时可读性更强。",[14,167009,167011],{"id":167010},"_74-默认参数","7.4 默认参数",[19,167013,167014],{},"默认参数给参数设置默认值。",[77,167016,167018],{"className":31325,"code":167017,"language":31327,"meta":82,"style":82},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[84,167019,167020,167036,167066,167070,167074,167084],{"__ignoreMap":82},[87,167021,167022,167024,167026,167029,167031,167034],{"class":89,"line":90},[87,167023,32894],{"class":171},[87,167025,123019],{"class":205},[87,167027,167028],{"class":97},"(host, port",[87,167030,946],{"class":171},[87,167032,167033],{"class":104},"3306",[87,167035,31733],{"class":97},[87,167037,167038,167040,167042,167044,167047,167049,167051,167053,167055,167057,167060,167062,167064],{"class":89,"line":101},[87,167039,32246],{"class":104},[87,167041,165],{"class":97},[87,167043,1152],{"class":171},[87,167045,167046],{"class":949},"\"连接",[87,167048,1988],{"class":104},[87,167050,28342],{"class":97},[87,167052,2037],{"class":104},[87,167054,1951],{"class":949},[87,167056,1988],{"class":104},[87,167058,167059],{"class":97},"port",[87,167061,2037],{"class":104},[87,167063,1347],{"class":949},[87,167065,1108],{"class":97},[87,167067,167068],{"class":89,"line":120},[87,167069,3355],{"emptyLinePlaceholder":1029},[87,167071,167072],{"class":89,"line":222},[87,167073,3355],{"emptyLinePlaceholder":1029},[87,167075,167076,167079,167082],{"class":89,"line":234},[87,167077,167078],{"class":97},"connect(",[87,167080,167081],{"class":949},"\"localhost\"",[87,167083,1108],{"class":97},[87,167085,167086,167088,167090,167092,167095],{"class":89,"line":256},[87,167087,167078],{"class":97},[87,167089,167081],{"class":949},[87,167091,13385],{"class":97},[87,167093,167094],{"class":104},"6379",[87,167096,1108],{"class":97},[19,167098,167099],{},"注意：默认参数必须放在非默认参数后面。",[19,167101,167102],{},"错误：",[77,167104,167106],{"className":31325,"code":167105,"language":31327,"meta":82,"style":82},"def connect(port=3306, host):\n    pass\n",[84,167107,167108,167124],{"__ignoreMap":82},[87,167109,167110,167112,167114,167117,167119,167121],{"class":89,"line":90},[87,167111,32894],{"class":171},[87,167113,123019],{"class":205},[87,167115,167116],{"class":97},"(port",[87,167118,946],{"class":171},[87,167120,167033],{"class":104},[87,167122,167123],{"class":97},", host):\n",[87,167125,167126],{"class":89,"line":101},[87,167127,150298],{"class":171},[19,167129,167130],{},"正确：",[77,167132,167134],{"className":31325,"code":167133,"language":31327,"meta":82,"style":82},"def connect(host, port=3306):\n    pass\n",[84,167135,167136,167150],{"__ignoreMap":82},[87,167137,167138,167140,167142,167144,167146,167148],{"class":89,"line":90},[87,167139,32894],{"class":171},[87,167141,123019],{"class":205},[87,167143,167028],{"class":97},[87,167145,946],{"class":171},[87,167147,167033],{"class":104},[87,167149,31733],{"class":97},[87,167151,167152],{"class":89,"line":101},[87,167153,150298],{"class":171},[14,167155,167157],{"id":167156},"_75-默认参数的坑","7.5 默认参数的坑",[19,167159,167160],{},"不要使用可变对象作为默认参数。",[19,167162,158384],{},[77,167164,167166],{"className":31325,"code":167165,"language":31327,"meta":82,"style":82},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[84,167167,167168,167183,167188,167195,167199,167203,167214],{"__ignoreMap":82},[87,167169,167170,167172,167175,167178,167180],{"class":89,"line":90},[87,167171,32894],{"class":171},[87,167173,167174],{"class":205}," add_item",[87,167176,167177],{"class":97},"(item, items",[87,167179,946],{"class":171},[87,167181,167182],{"class":97},"[]):\n",[87,167184,167185],{"class":89,"line":101},[87,167186,167187],{"class":97},"    items.append(item)\n",[87,167189,167190,167192],{"class":89,"line":120},[87,167191,5044],{"class":171},[87,167193,167194],{"class":97}," items\n",[87,167196,167197],{"class":89,"line":222},[87,167198,3355],{"emptyLinePlaceholder":1029},[87,167200,167201],{"class":89,"line":234},[87,167202,3355],{"emptyLinePlaceholder":1029},[87,167204,167205,167207,167210,167212],{"class":89,"line":256},[87,167206,31362],{"class":104},[87,167208,167209],{"class":97},"(add_item(",[87,167211,166086],{"class":949},[87,167213,31444],{"class":97},[87,167215,167216,167218,167220,167223],{"class":89,"line":269},[87,167217,31362],{"class":104},[87,167219,167209],{"class":97},[87,167221,167222],{"class":949},"\"b\"",[87,167224,31444],{"class":97},[19,167226,167227],{},"第二次调用会复用第一次的列表。",[19,167229,156649],{},[77,167231,167233],{"className":31325,"code":167232,"language":31327,"meta":82,"style":82},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[84,167234,167235,167249,167262,167271,167275],{"__ignoreMap":82},[87,167236,167237,167239,167241,167243,167245,167247],{"class":89,"line":90},[87,167238,32894],{"class":171},[87,167240,167174],{"class":205},[87,167242,167177],{"class":97},[87,167244,946],{"class":171},[87,167246,96612],{"class":104},[87,167248,31733],{"class":97},[87,167250,167251,167253,167256,167258,167260],{"class":89,"line":101},[87,167252,4055],{"class":171},[87,167254,167255],{"class":97}," items ",[87,167257,39874],{"class":171},[87,167259,39880],{"class":104},[87,167261,4693],{"class":97},[87,167263,167264,167267,167269],{"class":89,"line":120},[87,167265,167266],{"class":97},"        items ",[87,167268,946],{"class":171},[87,167270,52775],{"class":97},[87,167272,167273],{"class":89,"line":222},[87,167274,167187],{"class":97},[87,167276,167277,167279],{"class":89,"line":234},[87,167278,5044],{"class":171},[87,167280,167194],{"class":97},[14,167282,167284],{"id":167283},"_76-不定长参数","7.6 不定长参数",[44,167286,167288],{"id":167287},"_761-args","7.6.1 *args",[19,167290,167291,167294],{},[84,167292,167293],{},"*args"," 接收任意数量的位置参数，得到元组。",[77,167296,167298],{"className":31325,"code":167297,"language":31327,"meta":82,"style":82},"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",[84,167299,167300,167313,167321,167332,167341,167347,167351,167355,167374],{"__ignoreMap":82},[87,167301,167302,167304,167306,167308,167310],{"class":89,"line":90},[87,167303,32894],{"class":171},[87,167305,6160],{"class":205},[87,167307,165],{"class":97},[87,167309,1549],{"class":171},[87,167311,167312],{"class":97},"args):\n",[87,167314,167315,167317,167319],{"class":89,"line":101},[87,167316,160068],{"class":97},[87,167318,946],{"class":171},[87,167320,48280],{"class":104},[87,167322,167323,167325,167327,167329],{"class":89,"line":120},[87,167324,4155],{"class":171},[87,167326,156941],{"class":97},[87,167328,26990],{"class":171},[87,167330,167331],{"class":97}," args:\n",[87,167333,167334,167336,167338],{"class":89,"line":222},[87,167335,160743],{"class":97},[87,167337,10427],{"class":171},[87,167339,167340],{"class":97}," num\n",[87,167342,167343,167345],{"class":89,"line":234},[87,167344,5044],{"class":171},[87,167346,163048],{"class":97},[87,167348,167349],{"class":89,"line":256},[87,167350,3355],{"emptyLinePlaceholder":1029},[87,167352,167353],{"class":89,"line":269},[87,167354,3355],{"emptyLinePlaceholder":1029},[87,167356,167357,167359,167362,167364,167366,167368,167370,167372],{"class":89,"line":463},[87,167358,31362],{"class":104},[87,167360,167361],{"class":97},"(add(",[87,167363,1313],{"class":104},[87,167365,13385],{"class":97},[87,167367,1176],{"class":104},[87,167369,13385],{"class":97},[87,167371,1170],{"class":104},[87,167373,31444],{"class":97},[87,167375,167376,167378,167380,167382,167384,167386,167388,167390,167392,167394,167396,167398],{"class":89,"line":469},[87,167377,31362],{"class":104},[87,167379,167361],{"class":97},[87,167381,1313],{"class":104},[87,167383,13385],{"class":97},[87,167385,1176],{"class":104},[87,167387,13385],{"class":97},[87,167389,1170],{"class":104},[87,167391,13385],{"class":97},[87,167393,1389],{"class":104},[87,167395,13385],{"class":97},[87,167397,1414],{"class":104},[87,167399,31444],{"class":97},[44,167401,167403],{"id":167402},"_762-kwargs","7.6.2 **kwargs",[19,167405,167406,167409],{},[84,167407,167408],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[77,167411,167413],{"className":31325,"code":167412,"language":31327,"meta":82,"style":82},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[84,167414,167415,167428,167439,167445,167449,167453],{"__ignoreMap":82},[87,167416,167417,167419,167421,167423,167425],{"class":89,"line":90},[87,167418,32894],{"class":171},[87,167420,162706],{"class":205},[87,167422,165],{"class":97},[87,167424,11611],{"class":171},[87,167426,167427],{"class":97},"kwargs):\n",[87,167429,167430,167432,167434,167436],{"class":89,"line":101},[87,167431,4155],{"class":171},[87,167433,165546],{"class":97},[87,167435,26990],{"class":171},[87,167437,167438],{"class":97}," kwargs.items():\n",[87,167440,167441,167443],{"class":89,"line":120},[87,167442,33398],{"class":104},[87,167444,165558],{"class":97},[87,167446,167447],{"class":89,"line":222},[87,167448,3355],{"emptyLinePlaceholder":1029},[87,167450,167451],{"class":89,"line":234},[87,167452,3355],{"emptyLinePlaceholder":1029},[87,167454,167455,167457,167459,167461,167463,167465,167467,167469,167471,167473,167475,167477,167479],{"class":89,"line":256},[87,167456,162771],{"class":97},[87,167458,80736],{"class":492},[87,167460,946],{"class":171},[87,167462,150649],{"class":949},[87,167464,13385],{"class":97},[87,167466,71153],{"class":492},[87,167468,946],{"class":171},[87,167470,1743],{"class":104},[87,167472,13385],{"class":97},[87,167474,71204],{"class":492},[87,167476,946],{"class":171},[87,167478,70201],{"class":949},[87,167480,1108],{"class":97},[14,167482,167484],{"id":167483},"_77-参数解包","7.7 参数解包",[19,167486,167487],{},"列表或元组解包为位置参数：",[77,167489,167491],{"className":31325,"code":167490,"language":31327,"meta":82,"style":82},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[84,167492,167493,167502,167517,167521,167525,167545],{"__ignoreMap":82},[87,167494,167495,167497,167499],{"class":89,"line":90},[87,167496,32894],{"class":171},[87,167498,6160],{"class":205},[87,167500,167501],{"class":97},"(a, b, c):\n",[87,167503,167504,167506,167508,167510,167512,167514],{"class":89,"line":101},[87,167505,5044],{"class":171},[87,167507,11819],{"class":97},[87,167509,1575],{"class":171},[87,167511,11832],{"class":97},[87,167513,1575],{"class":171},[87,167515,167516],{"class":97}," c\n",[87,167518,167519],{"class":89,"line":120},[87,167520,3355],{"emptyLinePlaceholder":1029},[87,167522,167523],{"class":89,"line":222},[87,167524,3355],{"emptyLinePlaceholder":1029},[87,167526,167527,167529,167531,167533,167535,167537,167539,167541,167543],{"class":89,"line":234},[87,167528,164861],{"class":97},[87,167530,946],{"class":171},[87,167532,53163],{"class":97},[87,167534,1313],{"class":104},[87,167536,13385],{"class":97},[87,167538,1176],{"class":104},[87,167540,13385],{"class":97},[87,167542,1170],{"class":104},[87,167544,34193],{"class":97},[87,167546,167547,167549,167551,167553],{"class":89,"line":256},[87,167548,31362],{"class":104},[87,167550,167361],{"class":97},[87,167552,1549],{"class":171},[87,167554,167555],{"class":97},"nums))\n",[19,167557,167558],{},"字典解包为关键字参数：",[77,167560,167562],{"className":31325,"code":167561,"language":31327,"meta":82,"style":82},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[84,167563,167564,167572,167598,167602,167606,167630],{"__ignoreMap":82},[87,167565,167566,167568,167570],{"class":89,"line":90},[87,167567,32894],{"class":171},[87,167569,150133],{"class":205},[87,167571,150136],{"class":97},[87,167573,167574,167576,167578,167580,167582,167584,167586,167588,167590,167592,167594,167596],{"class":89,"line":101},[87,167575,32246],{"class":104},[87,167577,165],{"class":97},[87,167579,1152],{"class":171},[87,167581,1347],{"class":949},[87,167583,1988],{"class":104},[87,167585,80736],{"class":97},[87,167587,2037],{"class":104},[87,167589,5401],{"class":104},[87,167591,71153],{"class":97},[87,167593,2037],{"class":104},[87,167595,1347],{"class":949},[87,167597,1108],{"class":97},[87,167599,167600],{"class":89,"line":120},[87,167601,3355],{"emptyLinePlaceholder":1029},[87,167603,167604],{"class":89,"line":222},[87,167605,3355],{"emptyLinePlaceholder":1029},[87,167607,167608,167610,167612,167614,167616,167618,167620,167622,167624,167626,167628],{"class":89,"line":234},[87,167609,117240],{"class":97},[87,167611,946],{"class":171},[87,167613,5401],{"class":97},[87,167615,63613],{"class":949},[87,167617,108],{"class":97},[87,167619,150649],{"class":949},[87,167621,13385],{"class":97},[87,167623,70056],{"class":949},[87,167625,108],{"class":97},[87,167627,1743],{"class":104},[87,167629,123],{"class":97},[87,167631,167632,167634,167636],{"class":89,"line":256},[87,167633,166917],{"class":97},[87,167635,11611],{"class":171},[87,167637,167638],{"class":97},"info)\n",[14,167640,167642],{"id":167641},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,167644,167645,167648],{},[84,167646,167647],{},"lambda"," 用于定义简单匿名函数。",[77,167650,167652],{"className":31325,"code":167651,"language":31327,"meta":82,"style":82},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[84,167653,167654,167671],{"__ignoreMap":82},[87,167655,167656,167659,167661,167664,167667,167669],{"class":89,"line":90},[87,167657,167658],{"class":97},"add ",[87,167660,946],{"class":171},[87,167662,167663],{"class":171}," lambda",[87,167665,167666],{"class":97}," a, b: a ",[87,167668,1575],{"class":171},[87,167670,151865],{"class":97},[87,167672,167673,167675,167677,167679,167681,167683],{"class":89,"line":101},[87,167674,31362],{"class":104},[87,167676,167361],{"class":97},[87,167678,1313],{"class":104},[87,167680,13385],{"class":97},[87,167682,1176],{"class":104},[87,167684,31444],{"class":97},[19,167686,167687],{},"常和排序、过滤等函数一起使用。",[19,167689,167690],{},"按分数排序：",[77,167692,167694],{"className":31325,"code":167693,"language":31327,"meta":82,"style":82},"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",[84,167695,167696,167704,167724,167744,167764,167768,167772,167795],{"__ignoreMap":82},[87,167697,167698,167700,167702],{"class":89,"line":90},[87,167699,160477],{"class":97},[87,167701,946],{"class":171},[87,167703,56383],{"class":97},[87,167705,167706,167708,167710,167712,167714,167716,167718,167720,167722],{"class":89,"line":101},[87,167707,149146],{"class":97},[87,167709,63613],{"class":949},[87,167711,108],{"class":97},[87,167713,150649],{"class":949},[87,167715,13385],{"class":97},[87,167717,152233],{"class":949},[87,167719,108],{"class":97},[87,167721,2080],{"class":104},[87,167723,5883],{"class":97},[87,167725,167726,167728,167730,167732,167734,167736,167738,167740,167742],{"class":89,"line":120},[87,167727,149146],{"class":97},[87,167729,63613],{"class":949},[87,167731,108],{"class":97},[87,167733,151697],{"class":949},[87,167735,13385],{"class":97},[87,167737,152233],{"class":949},[87,167739,108],{"class":97},[87,167741,1903],{"class":104},[87,167743,5883],{"class":97},[87,167745,167746,167748,167750,167752,167754,167756,167758,167760,167762],{"class":89,"line":222},[87,167747,149146],{"class":97},[87,167749,63613],{"class":949},[87,167751,108],{"class":97},[87,167753,160492],{"class":949},[87,167755,13385],{"class":97},[87,167757,152233],{"class":949},[87,167759,108],{"class":97},[87,167761,1501],{"class":104},[87,167763,5883],{"class":97},[87,167765,167766],{"class":89,"line":234},[87,167767,34193],{"class":97},[87,167769,167770],{"class":89,"line":256},[87,167771,3355],{"emptyLinePlaceholder":1029},[87,167773,167774,167777,167779,167781,167783,167785,167787,167789,167791,167793],{"class":89,"line":269},[87,167775,167776],{"class":97},"students.sort(",[87,167778,154707],{"class":492},[87,167780,154710],{"class":171},[87,167782,154713],{"class":97},[87,167784,152233],{"class":949},[87,167786,113128],{"class":97},[87,167788,164289],{"class":492},[87,167790,946],{"class":171},[87,167792,32423],{"class":104},[87,167794,1108],{"class":97},[87,167796,167797,167799],{"class":89,"line":463},[87,167798,31362],{"class":104},[87,167800,165756],{"class":97},[19,167802,167803,167804,167806],{},"如果逻辑复杂，不要硬写 ",[84,167805,167647],{},"，定义普通函数更清晰。",[14,167808,167810],{"id":167809},"_79-函数作为参数","7.9 函数作为参数",[19,167812,167813],{},"函数可以作为参数传给另一个函数。",[77,167815,167817],{"className":31325,"code":167816,"language":31327,"meta":82,"style":82},"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",[84,167818,167819,167827,167837,167841,167845,167855,167862,167866,167870],{"__ignoreMap":82},[87,167820,167821,167823,167825],{"class":89,"line":90},[87,167822,32894],{"class":171},[87,167824,6160],{"class":205},[87,167826,151854],{"class":97},[87,167828,167829,167831,167833,167835],{"class":89,"line":101},[87,167830,5044],{"class":171},[87,167832,11819],{"class":97},[87,167834,1575],{"class":171},[87,167836,151865],{"class":97},[87,167838,167839],{"class":89,"line":120},[87,167840,3355],{"emptyLinePlaceholder":1029},[87,167842,167843],{"class":89,"line":222},[87,167844,3355],{"emptyLinePlaceholder":1029},[87,167846,167847,167849,167852],{"class":89,"line":234},[87,167848,32894],{"class":171},[87,167850,167851],{"class":205}," calculate",[87,167853,167854],{"class":97},"(a, b, func):\n",[87,167856,167857,167859],{"class":89,"line":256},[87,167858,5044],{"class":171},[87,167860,167861],{"class":97}," func(a, b)\n",[87,167863,167864],{"class":89,"line":269},[87,167865,3355],{"emptyLinePlaceholder":1029},[87,167867,167868],{"class":89,"line":463},[87,167869,3355],{"emptyLinePlaceholder":1029},[87,167871,167872,167874,167877,167879,167881,167883],{"class":89,"line":469},[87,167873,31362],{"class":104},[87,167875,167876],{"class":97},"(calculate(",[87,167878,242],{"class":104},[87,167880,13385],{"class":97},[87,167882,1792],{"class":104},[87,167884,167885],{"class":97},", add))\n",[19,167887,167888],{},"这种思想在排序、回调、框架中经常出现。",[14,167890,167892],{"id":167891},"_710-mapfiltersorted","7.10 map、filter、sorted",[44,167894,167896],{"id":167895},"_7101-map","7.10.1 map",[19,167898,167899,167901],{},[84,167900,74972],{}," 对每个元素执行函数。",[77,167903,167905],{"className":31325,"code":167904,"language":31327,"meta":82,"style":82},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[84,167906,167907,167931,167954],{"__ignoreMap":82},[87,167908,167909,167911,167913,167915,167917,167919,167921,167923,167925,167927,167929],{"class":89,"line":90},[87,167910,164861],{"class":97},[87,167912,946],{"class":171},[87,167914,53163],{"class":97},[87,167916,1313],{"class":104},[87,167918,13385],{"class":97},[87,167920,1176],{"class":104},[87,167922,13385],{"class":97},[87,167924,1170],{"class":104},[87,167926,13385],{"class":97},[87,167928,1389],{"class":104},[87,167930,34193],{"class":97},[87,167932,167933,167935,167937,167940,167942,167944,167947,167949,167951],{"class":89,"line":101},[87,167934,162067],{"class":97},[87,167936,946],{"class":171},[87,167938,167939],{"class":104}," map",[87,167941,165],{"class":97},[87,167943,167647],{"class":171},[87,167945,167946],{"class":97}," x: x ",[87,167948,1549],{"class":171},[87,167950,15705],{"class":104},[87,167952,167953],{"class":97},", nums)\n",[87,167955,167956,167958,167960,167962],{"class":89,"line":120},[87,167957,31362],{"class":104},[87,167959,165],{"class":97},[87,167961,154831],{"class":104},[87,167963,166829],{"class":97},[44,167965,167967],{"id":167966},"_7102-filter","7.10.2 filter",[19,167969,167970,167972],{},[84,167971,80977],{}," 保留满足条件的元素。",[77,167974,167976],{"className":31325,"code":167975,"language":31327,"meta":82,"style":82},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[84,167977,167978,168006,168031],{"__ignoreMap":82},[87,167979,167980,167982,167984,167986,167988,167990,167992,167994,167996,167998,168000,168002,168004],{"class":89,"line":90},[87,167981,164861],{"class":97},[87,167983,946],{"class":171},[87,167985,53163],{"class":97},[87,167987,1313],{"class":104},[87,167989,13385],{"class":97},[87,167991,1176],{"class":104},[87,167993,13385],{"class":97},[87,167995,1170],{"class":104},[87,167997,13385],{"class":97},[87,167999,1389],{"class":104},[87,168001,13385],{"class":97},[87,168003,1414],{"class":104},[87,168005,34193],{"class":97},[87,168007,168008,168010,168012,168015,168017,168019,168021,168023,168025,168027,168029],{"class":89,"line":101},[87,168009,162067],{"class":97},[87,168011,946],{"class":171},[87,168013,168014],{"class":104}," filter",[87,168016,165],{"class":97},[87,168018,167647],{"class":171},[87,168020,167946],{"class":97},[87,168022,1423],{"class":171},[87,168024,15705],{"class":104},[87,168026,102485],{"class":171},[87,168028,577],{"class":104},[87,168030,167953],{"class":97},[87,168032,168033,168035,168037,168039],{"class":89,"line":120},[87,168034,31362],{"class":104},[87,168036,165],{"class":97},[87,168038,154831],{"class":104},[87,168040,166829],{"class":97},[44,168042,168044],{"id":168043},"_7103-sorted","7.10.3 sorted",[19,168046,168047,168049],{},[84,168048,165997],{}," 返回排序后的新列表。",[77,168051,168053],{"className":31325,"code":168052,"language":31327,"meta":82,"style":82},"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",[84,168054,168055,168063,168083,168103,168123,168127,168131,168160],{"__ignoreMap":82},[87,168056,168057,168059,168061],{"class":89,"line":90},[87,168058,160477],{"class":97},[87,168060,946],{"class":171},[87,168062,56383],{"class":97},[87,168064,168065,168067,168069,168071,168073,168075,168077,168079,168081],{"class":89,"line":101},[87,168066,149146],{"class":97},[87,168068,63613],{"class":949},[87,168070,108],{"class":97},[87,168072,150649],{"class":949},[87,168074,13385],{"class":97},[87,168076,152233],{"class":949},[87,168078,108],{"class":97},[87,168080,2080],{"class":104},[87,168082,5883],{"class":97},[87,168084,168085,168087,168089,168091,168093,168095,168097,168099,168101],{"class":89,"line":120},[87,168086,149146],{"class":97},[87,168088,63613],{"class":949},[87,168090,108],{"class":97},[87,168092,151697],{"class":949},[87,168094,13385],{"class":97},[87,168096,152233],{"class":949},[87,168098,108],{"class":97},[87,168100,1903],{"class":104},[87,168102,5883],{"class":97},[87,168104,168105,168107,168109,168111,168113,168115,168117,168119,168121],{"class":89,"line":222},[87,168106,149146],{"class":97},[87,168108,63613],{"class":949},[87,168110,108],{"class":97},[87,168112,160492],{"class":949},[87,168114,13385],{"class":97},[87,168116,152233],{"class":949},[87,168118,108],{"class":97},[87,168120,1501],{"class":104},[87,168122,5883],{"class":97},[87,168124,168125],{"class":89,"line":234},[87,168126,34193],{"class":97},[87,168128,168129],{"class":89,"line":256},[87,168130,3355],{"emptyLinePlaceholder":1029},[87,168132,168133,168135,168137,168139,168142,168144,168146,168148,168150,168152,168154,168156,168158],{"class":89,"line":269},[87,168134,162067],{"class":97},[87,168136,946],{"class":171},[87,168138,164365],{"class":104},[87,168140,168141],{"class":97},"(students, ",[87,168143,154707],{"class":492},[87,168145,154710],{"class":171},[87,168147,154713],{"class":97},[87,168149,152233],{"class":949},[87,168151,113128],{"class":97},[87,168153,164289],{"class":492},[87,168155,946],{"class":171},[87,168157,32423],{"class":104},[87,168159,1108],{"class":97},[87,168161,168162,168164],{"class":89,"line":463},[87,168163,31362],{"class":104},[87,168165,77513],{"class":97},[14,168167,168169],{"id":168168},"_711-闭包入门","7.11 闭包入门",[19,168171,168172],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[77,168174,168176],{"className":31325,"code":168175,"language":31327,"meta":82,"style":82},"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",[84,168177,168178,168188,168198,168209,168213,168220,168224,168228,168242],{"__ignoreMap":82},[87,168179,168180,168182,168185],{"class":89,"line":90},[87,168181,32894],{"class":171},[87,168183,168184],{"class":205}," outer",[87,168186,168187],{"class":97},"(base):\n",[87,168189,168190,168192,168195],{"class":89,"line":101},[87,168191,31748],{"class":171},[87,168193,168194],{"class":205}," inner",[87,168196,168197],{"class":97},"(num):\n",[87,168199,168200,168202,168205,168207],{"class":89,"line":120},[87,168201,15702],{"class":171},[87,168203,168204],{"class":97}," base ",[87,168206,1575],{"class":171},[87,168208,167340],{"class":97},[87,168210,168211],{"class":89,"line":222},[87,168212,3355],{"emptyLinePlaceholder":1029},[87,168214,168215,168217],{"class":89,"line":234},[87,168216,5044],{"class":171},[87,168218,168219],{"class":97}," inner\n",[87,168221,168222],{"class":89,"line":256},[87,168223,3355],{"emptyLinePlaceholder":1029},[87,168225,168226],{"class":89,"line":269},[87,168227,3355],{"emptyLinePlaceholder":1029},[87,168229,168230,168233,168235,168238,168240],{"class":89,"line":463},[87,168231,168232],{"class":97},"add_10 ",[87,168234,946],{"class":171},[87,168236,168237],{"class":97}," outer(",[87,168239,242],{"class":104},[87,168241,1108],{"class":97},[87,168243,168244,168246,168249,168251],{"class":89,"line":469},[87,168245,31362],{"class":104},[87,168247,168248],{"class":97},"(add_10(",[87,168250,1414],{"class":104},[87,168252,31444],{"class":97},[19,168254,168255],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168257,168259],{"id":168258},"_712-装饰器入门","7.12 装饰器入门",[19,168261,168262],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[77,168264,168266],{"className":31325,"code":168265,"language":31327,"meta":82,"style":82},"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",[84,168267,168268,168277,168286,168297,168302,168313,168317,168324,168328,168332,168337,168345,168355,168359,168363],{"__ignoreMap":82},[87,168269,168270,168272,168274],{"class":89,"line":90},[87,168271,32894],{"class":171},[87,168273,88117],{"class":205},[87,168275,168276],{"class":97},"(func):\n",[87,168278,168279,168281,168284],{"class":89,"line":101},[87,168280,31748],{"class":171},[87,168282,168283],{"class":205}," wrapper",[87,168285,32900],{"class":97},[87,168287,168288,168290,168292,168295],{"class":89,"line":120},[87,168289,33398],{"class":104},[87,168291,165],{"class":97},[87,168293,168294],{"class":949},"\"函数开始执行\"",[87,168296,1108],{"class":97},[87,168298,168299],{"class":89,"line":222},[87,168300,168301],{"class":97},"        func()\n",[87,168303,168304,168306,168308,168311],{"class":89,"line":234},[87,168305,33398],{"class":104},[87,168307,165],{"class":97},[87,168309,168310],{"class":949},"\"函数执行结束\"",[87,168312,1108],{"class":97},[87,168314,168315],{"class":89,"line":256},[87,168316,3355],{"emptyLinePlaceholder":1029},[87,168318,168319,168321],{"class":89,"line":269},[87,168320,5044],{"class":171},[87,168322,168323],{"class":97}," wrapper\n",[87,168325,168326],{"class":89,"line":463},[87,168327,3355],{"emptyLinePlaceholder":1029},[87,168329,168330],{"class":89,"line":469},[87,168331,3355],{"emptyLinePlaceholder":1029},[87,168333,168334],{"class":89,"line":2287},[87,168335,168336],{"class":205},"@log\n",[87,168338,168339,168341,168343],{"class":89,"line":2568},[87,168340,32894],{"class":171},[87,168342,161757],{"class":205},[87,168344,32900],{"class":97},[87,168346,168347,168349,168351,168353],{"class":89,"line":2573},[87,168348,32246],{"class":104},[87,168350,165],{"class":97},[87,168352,6794],{"class":949},[87,168354,1108],{"class":97},[87,168356,168357],{"class":89,"line":2579},[87,168358,3355],{"emptyLinePlaceholder":1029},[87,168360,168361],{"class":89,"line":2584},[87,168362,3355],{"emptyLinePlaceholder":1029},[87,168364,168365],{"class":89,"line":2598},[87,168366,161792],{"class":97},[19,168368,159035],{},[77,168370,168372],{"className":31325,"code":168371,"language":31327,"meta":82,"style":82},"say_hello = log(say_hello)\n",[84,168373,168374],{"__ignoreMap":82},[87,168375,168376,168379,168381],{"class":89,"line":90},[87,168377,168378],{"class":97},"say_hello ",[87,168380,946],{"class":171},[87,168382,168383],{"class":97}," log(say_hello)\n",[19,168385,168386],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168388,168390],{"id":168389},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[77,168392,168394],{"className":31325,"code":168393,"language":31327,"meta":82,"style":82},"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",[84,168395,168396,168404,168421,168431,168450,168460,168467,168471,168477,168481,168485,168489,168497,168507,168511,168515],{"__ignoreMap":82},[87,168397,168398,168400,168402],{"class":89,"line":90},[87,168399,32894],{"class":171},[87,168401,88117],{"class":205},[87,168403,168276],{"class":97},[87,168405,168406,168408,168410,168412,168414,168417,168419],{"class":89,"line":101},[87,168407,31748],{"class":171},[87,168409,168283],{"class":205},[87,168411,165],{"class":97},[87,168413,1549],{"class":171},[87,168415,168416],{"class":97},"args, ",[87,168418,11611],{"class":171},[87,168420,167427],{"class":97},[87,168422,168423,168425,168427,168429],{"class":89,"line":120},[87,168424,33398],{"class":104},[87,168426,165],{"class":97},[87,168428,168294],{"class":949},[87,168430,1108],{"class":97},[87,168432,168433,168436,168438,168441,168443,168445,168447],{"class":89,"line":222},[87,168434,168435],{"class":97},"        result ",[87,168437,946],{"class":171},[87,168439,168440],{"class":97}," func(",[87,168442,1549],{"class":171},[87,168444,168416],{"class":97},[87,168446,11611],{"class":171},[87,168448,168449],{"class":97},"kwargs)\n",[87,168451,168452,168454,168456,168458],{"class":89,"line":234},[87,168453,33398],{"class":104},[87,168455,165],{"class":97},[87,168457,168310],{"class":949},[87,168459,1108],{"class":97},[87,168461,168462,168464],{"class":89,"line":256},[87,168463,15702],{"class":171},[87,168465,168466],{"class":97}," result\n",[87,168468,168469],{"class":89,"line":269},[87,168470,3355],{"emptyLinePlaceholder":1029},[87,168472,168473,168475],{"class":89,"line":463},[87,168474,5044],{"class":171},[87,168476,168323],{"class":97},[87,168478,168479],{"class":89,"line":469},[87,168480,3355],{"emptyLinePlaceholder":1029},[87,168482,168483],{"class":89,"line":2287},[87,168484,3355],{"emptyLinePlaceholder":1029},[87,168486,168487],{"class":89,"line":2568},[87,168488,168336],{"class":205},[87,168490,168491,168493,168495],{"class":89,"line":2573},[87,168492,32894],{"class":171},[87,168494,6160],{"class":205},[87,168496,151854],{"class":97},[87,168498,168499,168501,168503,168505],{"class":89,"line":2579},[87,168500,5044],{"class":171},[87,168502,11819],{"class":97},[87,168504,1575],{"class":171},[87,168506,151865],{"class":97},[87,168508,168509],{"class":89,"line":2584},[87,168510,3355],{"emptyLinePlaceholder":1029},[87,168512,168513],{"class":89,"line":2598},[87,168514,3355],{"emptyLinePlaceholder":1029},[87,168516,168517,168519,168521,168523,168525,168527],{"class":89,"line":2603},[87,168518,31362],{"class":104},[87,168520,167361],{"class":97},[87,168522,242],{"class":104},[87,168524,13385],{"class":97},[87,168526,1792],{"class":104},[87,168528,31444],{"class":97},[19,168530,168531,168532,101944,168534,168536],{},"这个写法使用 ",[84,168533,167293],{},[84,168535,167408],{}," 接收原函数的所有参数。",[14,168538,168540],{"id":168539},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,168542,124218],{},[1055,168544,168545,168548,168551],{},[29,168546,168547],{},"给定一组学生数据。",[29,168549,168550],{},"封装函数，根据传入规则筛选学生。",[29,168552,168553],{},"筛选及格、优秀、未成年学生。",[19,168555,10985],{},[77,168557,168559],{"className":31325,"code":168558,"language":31327,"meta":82,"style":82},"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",[84,168560,168561,168569,168597,168625,168653,168657,168661,168665,168675,168683,168693,168700,168705,168711,168715,168719,168743,168766,168789,168793,168800,168807],{"__ignoreMap":82},[87,168562,168563,168565,168567],{"class":89,"line":90},[87,168564,160477],{"class":97},[87,168566,946],{"class":171},[87,168568,56383],{"class":97},[87,168570,168571,168573,168575,168577,168579,168581,168583,168585,168587,168589,168591,168593,168595],{"class":89,"line":101},[87,168572,149146],{"class":97},[87,168574,63613],{"class":949},[87,168576,108],{"class":97},[87,168578,150649],{"class":949},[87,168580,13385],{"class":97},[87,168582,70056],{"class":949},[87,168584,108],{"class":97},[87,168586,1743],{"class":104},[87,168588,13385],{"class":97},[87,168590,152233],{"class":949},[87,168592,108],{"class":97},[87,168594,2080],{"class":104},[87,168596,5883],{"class":97},[87,168598,168599,168601,168603,168605,168607,168609,168611,168613,168615,168617,168619,168621,168623],{"class":89,"line":120},[87,168600,149146],{"class":97},[87,168602,63613],{"class":949},[87,168604,108],{"class":97},[87,168606,151697],{"class":949},[87,168608,13385],{"class":97},[87,168610,70056],{"class":949},[87,168612,108],{"class":97},[87,168614,1718],{"class":104},[87,168616,13385],{"class":97},[87,168618,152233],{"class":949},[87,168620,108],{"class":97},[87,168622,1903],{"class":104},[87,168624,5883],{"class":97},[87,168626,168627,168629,168631,168633,168635,168637,168639,168641,168643,168645,168647,168649,168651],{"class":89,"line":222},[87,168628,149146],{"class":97},[87,168630,63613],{"class":949},[87,168632,108],{"class":97},[87,168634,160492],{"class":949},[87,168636,13385],{"class":97},[87,168638,70056],{"class":949},[87,168640,108],{"class":97},[87,168642,1768],{"class":104},[87,168644,13385],{"class":97},[87,168646,152233],{"class":949},[87,168648,108],{"class":97},[87,168650,1974],{"class":104},[87,168652,5883],{"class":97},[87,168654,168655],{"class":89,"line":234},[87,168656,34193],{"class":97},[87,168658,168659],{"class":89,"line":256},[87,168660,3355],{"emptyLinePlaceholder":1029},[87,168662,168663],{"class":89,"line":269},[87,168664,3355],{"emptyLinePlaceholder":1029},[87,168666,168667,168669,168672],{"class":89,"line":463},[87,168668,32894],{"class":171},[87,168670,168671],{"class":205}," filter_students",[87,168673,168674],{"class":97},"(students, condition):\n",[87,168676,168677,168679,168681],{"class":89,"line":469},[87,168678,161984],{"class":97},[87,168680,946],{"class":171},[87,168682,52775],{"class":97},[87,168684,168685,168687,168689,168691],{"class":89,"line":2287},[87,168686,4155],{"class":171},[87,168688,152898],{"class":97},[87,168690,26990],{"class":171},[87,168692,152903],{"class":97},[87,168694,168695,168697],{"class":89,"line":2568},[87,168696,3452],{"class":171},[87,168698,168699],{"class":97}," condition(student):\n",[87,168701,168702],{"class":89,"line":2573},[87,168703,168704],{"class":97},"            result.append(student)\n",[87,168706,168707,168709],{"class":89,"line":2579},[87,168708,5044],{"class":171},[87,168710,168466],{"class":97},[87,168712,168713],{"class":89,"line":2584},[87,168714,3355],{"emptyLinePlaceholder":1029},[87,168716,168717],{"class":89,"line":2598},[87,168718,3355],{"emptyLinePlaceholder":1029},[87,168720,168721,168723,168725,168728,168730,168733,168735,168737,168739,168741],{"class":89,"line":2603},[87,168722,166462],{"class":97},[87,168724,946],{"class":171},[87,168726,168727],{"class":97}," filter_students(students, ",[87,168729,167647],{"class":171},[87,168731,168732],{"class":97}," s: s[",[87,168734,152233],{"class":949},[87,168736,5396],{"class":97},[87,168738,2666],{"class":171},[87,168740,158598],{"class":104},[87,168742,1108],{"class":97},[87,168744,168745,168748,168750,168752,168754,168756,168758,168760,168762,168764],{"class":89,"line":2609},[87,168746,168747],{"class":97},"excellent ",[87,168749,946],{"class":171},[87,168751,168727],{"class":97},[87,168753,167647],{"class":171},[87,168755,168732],{"class":97},[87,168757,152233],{"class":949},[87,168759,5396],{"class":97},[87,168761,2666],{"class":171},[87,168763,158549],{"class":104},[87,168765,1108],{"class":97},[87,168767,168768,168771,168773,168775,168777,168779,168781,168783,168785,168787],{"class":89,"line":2630},[87,168769,168770],{"class":97},"under_age ",[87,168772,946],{"class":171},[87,168774,168727],{"class":97},[87,168776,167647],{"class":171},[87,168778,168732],{"class":97},[87,168780,70056],{"class":949},[87,168782,5396],{"class":97},[87,168784,938],{"class":171},[87,168786,157046],{"class":104},[87,168788,1108],{"class":97},[87,168790,168791],{"class":89,"line":2635},[87,168792,3355],{"emptyLinePlaceholder":1029},[87,168794,168795,168797],{"class":89,"line":2649},[87,168796,31362],{"class":104},[87,168798,168799],{"class":97},"(passed)\n",[87,168801,168802,168804],{"class":89,"line":2654},[87,168803,31362],{"class":104},[87,168805,168806],{"class":97},"(excellent)\n",[87,168808,168809,168811],{"class":89,"line":2683},[87,168810,31362],{"class":104},[87,168812,168813],{"class":97},"(under_age)\n",[14,168815,168817],{"id":168816},"_715-易错点","7.15 易错点",[1055,168819,168820,168823,168831,168836,168847],{},[29,168821,168822],{},"默认参数不要写可变对象。",[29,168824,168825,168827,168828,168830],{},[84,168826,167293],{}," 是元组，",[84,168829,167408],{}," 是字典。",[29,168832,168833,168835],{},[84,168834,167647],{}," 只适合简单表达式。",[29,168837,168838,101944,168840,168842,168843,168846],{},[84,168839,74972],{},[84,168841,80977],{}," 的结果是迭代器，常用 ",[84,168844,168845],{},"list()"," 转换查看。",[29,168848,168849],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168851,168853],{"id":168852},"_716-本章练习","7.16 本章练习",[1055,168855,168856,168863,168869,168874,168879],{},[29,168857,168858,168859,168862],{},"写函数 ",[84,168860,168861],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[29,168864,168858,168865,168868],{},[84,168866,168867],{},"print_user(**kwargs)","，输出用户所有字段。",[29,168870,105292,168871,168873],{},[84,168872,167647],{}," 对学生列表按年龄排序。",[29,168875,105292,168876,168878],{},[84,168877,80977],{}," 找出成绩不及格的学生。",[29,168880,168881],{},"写一个装饰器，统计函数执行前后的提示信息。",[1006,168883,168884],{},"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":82,"searchDepth":101,"depth":101,"links":168886},[168887,168888,168889,168890,168891,168892,168896,168897,168898,168899,168904,168905,168906,168907,168908,168909],{"id":166745,"depth":101,"text":166746},{"id":166859,"depth":101,"text":166860},{"id":166948,"depth":101,"text":166949},{"id":167010,"depth":101,"text":167011},{"id":167156,"depth":101,"text":167157},{"id":167283,"depth":101,"text":167284,"children":168893},[168894,168895],{"id":167287,"depth":120,"text":167288},{"id":167402,"depth":120,"text":167403},{"id":167483,"depth":101,"text":167484},{"id":167641,"depth":101,"text":167642},{"id":167809,"depth":101,"text":167810},{"id":167891,"depth":101,"text":167892,"children":168900},[168901,168902,168903],{"id":167895,"depth":120,"text":167896},{"id":167966,"depth":120,"text":167967},{"id":168043,"depth":120,"text":168044},{"id":168168,"depth":101,"text":168169},{"id":168258,"depth":101,"text":168259},{"id":168389,"depth":101,"text":168390},{"id":168539,"depth":101,"text":168540},{"id":168816,"depth":101,"text":168817},{"id":168852,"depth":101,"text":168853},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166737,"description":1026},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168916,"title":168917,"body":168918,"description":1026,"extension":1027,"meta":171437,"navigation":1029,"path":171438,"seo":171439,"stem":171440,"__hash__":171441},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168919,"toc":171412},[168920,168923,168927,168930,168933,168964,168968,168972,168975,169002,169006,169009,169060,169063,169078,169081,169116,169120,169122,169146,169149,169209,169213,169217,169220,169277,169280,169300,169304,169307,169370,169374,169377,169433,169440,169464,169468,169471,169534,169538,169543,169594,169597,169601,169606,169673,169676,169758,169762,169767,169818,169821,169825,169828,169831,169839,169842,169888,169891,169937,169941,169947,169991,169994,170040,170043,170083,170086,170147,170151,170154,170244,170247,170389,170392,170459,170463,170466,170469,170610,170613,170691,170694,170870,170874,170876,170887,170889,171088,171092,171336,171340,171374,171378,171409],[10,168921,168917],{"id":168922},"_8-文件操作",[14,168924,168926],{"id":168925},"_81-文件操作的意义","8.1 文件操作的意义",[19,168928,168929],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168931,168932],{},"常见文件类型：",[1055,168934,168935,168941,168947,168953,168959],{},[29,168936,168937,168940],{},[84,168938,168939],{},".txt","：普通文本。",[29,168942,168943,168946],{},[84,168944,168945],{},".csv","：表格文本。",[29,168948,168949,168952],{},[84,168950,168951],{},".json","：结构化数据。",[29,168954,168955,168958],{},[84,168956,168957],{},".log","：日志文件。",[29,168960,168961,168963],{},[84,168962,147113],{},"：Python 源代码。",[14,168965,168967],{"id":168966},"_82-路径","8.2 路径",[44,168969,168971],{"id":168970},"_821-相对路径","8.2.1 相对路径",[19,168973,168974],{},"相对当前运行目录：",[77,168976,168978],{"className":31325,"code":168977,"language":31327,"meta":82,"style":82},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[84,168979,168980],{"__ignoreMap":82},[87,168981,168982,168984,168986,168988,168990,168992,168994,168996,168998,169000],{"class":89,"line":90},[87,168983,87841],{"class":104},[87,168985,165],{"class":97},[87,168987,147557],{"class":949},[87,168989,13385],{"class":97},[87,168991,147562],{"class":949},[87,168993,13385],{"class":97},[87,168995,147567],{"class":492},[87,168997,946],{"class":171},[87,168999,147572],{"class":949},[87,169001,1108],{"class":97},[44,169003,169005],{"id":169004},"_822-绝对路径","8.2.2 绝对路径",[19,169007,169008],{},"从根目录或盘符开始：",[77,169010,169012],{"className":31325,"code":169011,"language":31327,"meta":82,"style":82},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[84,169013,169014,169037],{"__ignoreMap":82},[87,169015,169016,169018,169020,169023,169025,169027,169029,169031,169033,169035],{"class":89,"line":90},[87,169017,87841],{"class":104},[87,169019,165],{"class":97},[87,169021,169022],{"class":949},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[87,169024,13385],{"class":97},[87,169026,147562],{"class":949},[87,169028,13385],{"class":97},[87,169030,147567],{"class":492},[87,169032,946],{"class":171},[87,169034,147572],{"class":949},[87,169036,1108],{"class":97},[87,169038,169039,169041,169043,169046,169048,169050,169052,169054,169056,169058],{"class":89,"line":101},[87,169040,87841],{"class":104},[87,169042,165],{"class":97},[87,169044,169045],{"class":949},"\"D:\u002Fdata\u002Fdata.txt\"",[87,169047,13385],{"class":97},[87,169049,147562],{"class":949},[87,169051,13385],{"class":97},[87,169053,147567],{"class":492},[87,169055,946],{"class":171},[87,169057,147572],{"class":949},[87,169059,1108],{"class":97},[19,169061,169062],{},"Windows 路径建议写成：",[77,169064,169066],{"className":31325,"code":169065,"language":31327,"meta":82,"style":82},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[84,169067,169068],{"__ignoreMap":82},[87,169069,169070,169073,169075],{"class":89,"line":90},[87,169071,169072],{"class":97},"path ",[87,169074,946],{"class":171},[87,169076,169077],{"class":949}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169079,169080],{},"或原始字符串：",[77,169082,169084],{"className":31325,"code":169083,"language":31327,"meta":82,"style":82},"path = r\"D:\\data\\data.txt\"\n",[84,169085,169086],{"__ignoreMap":82},[87,169087,169088,169090,169092,169094,169096,169099,169102,169105,169107,169109,169111,169114],{"class":89,"line":90},[87,169089,169072],{"class":97},[87,169091,946],{"class":171},[87,169093,18070],{"class":171},[87,169095,1347],{"class":949},[87,169097,169098],{"class":48924},"D:",[87,169100,169101],{"class":104},"\\d",[87,169103,169104],{"class":48924},"ata",[87,169106,169101],{"class":104},[87,169108,169104],{"class":48924},[87,169110,1651],{"class":104},[87,169112,169113],{"class":48924},"txt",[87,169115,26080],{"class":949},[14,169117,169119],{"id":169118},"_83-open函数","8.3 open函数",[19,169121,6134],{},[77,169123,169125],{"className":31325,"code":169124,"language":31327,"meta":82,"style":82},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[84,169126,169127],{"__ignoreMap":82},[87,169128,169129,169131,169133,169135,169138,169140,169142,169144],{"class":89,"line":90},[87,169130,46301],{"class":492},[87,169132,14514],{"class":171},[87,169134,147552],{"class":104},[87,169136,169137],{"class":97},"(文件路径, 打开模式, ",[87,169139,147567],{"class":492},[87,169141,946],{"class":171},[87,169143,147572],{"class":949},[87,169145,1108],{"class":97},[19,169147,169148],{},"常见模式：",[1235,169150,169151,169160],{},[1238,169152,169153],{},[1241,169154,169155,169158],{},[1244,169156,169157],{},"模式",[1244,169159,26816],{},[1281,169161,169162,169171,169180,169189,169199],{},[1241,169163,169164,169168],{},[1286,169165,169166],{},[84,169167,1763],{},[1286,169169,169170],{},"只读，文件不存在会报错",[1241,169172,169173,169177],{},[1286,169174,169175],{},[84,169176,1887],{},[1286,169178,169179],{},"只写，文件不存在会创建，存在会清空",[1241,169181,169182,169186],{},[1286,169183,169184],{},[84,169185,1334],{},[1286,169187,169188],{},"追加，文件不存在会创建",[1241,169190,169191,169196],{},[1286,169192,169193],{},[84,169194,169195],{},"rb",[1286,169197,169198],{},"二进制只读",[1241,169200,169201,169206],{},[1286,169202,169203],{},[84,169204,169205],{},"wb",[1286,169207,169208],{},"二进制只写",[14,169210,169212],{"id":169211},"_84-读取文件","8.4 读取文件",[44,169214,169216],{"id":169215},"_841-read","8.4.1 read",[19,169218,169219],{},"一次读取全部内容：",[77,169221,169223],{"className":31325,"code":169222,"language":31327,"meta":82,"style":82},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[84,169224,169225,169251,169263,169270],{"__ignoreMap":82},[87,169226,169227,169229,169231,169233,169235,169237,169239,169241,169243,169245,169247,169249],{"class":89,"line":90},[87,169228,46301],{"class":492},[87,169230,14514],{"class":171},[87,169232,147552],{"class":104},[87,169234,165],{"class":97},[87,169236,147557],{"class":949},[87,169238,13385],{"class":97},[87,169240,147562],{"class":949},[87,169242,13385],{"class":97},[87,169244,147567],{"class":492},[87,169246,946],{"class":171},[87,169248,147572],{"class":949},[87,169250,1108],{"class":97},[87,169252,169253,169256,169258,169260],{"class":89,"line":101},[87,169254,169255],{"class":97},"content ",[87,169257,946],{"class":171},[87,169259,148914],{"class":492},[87,169261,169262],{"class":97},".read()\n",[87,169264,169265,169267],{"class":89,"line":120},[87,169266,31362],{"class":104},[87,169268,169269],{"class":97},"(content)\n",[87,169271,169272,169274],{"class":89,"line":222},[87,169273,46301],{"class":492},[87,169275,169276],{"class":97},".close()\n",[19,169278,169279],{},"可以指定读取字符数：",[77,169281,169283],{"className":31325,"code":169282,"language":31327,"meta":82,"style":82},"content = file.read(10)\n",[84,169284,169285],{"__ignoreMap":82},[87,169286,169287,169289,169291,169293,169296,169298],{"class":89,"line":90},[87,169288,169255],{"class":97},[87,169290,946],{"class":171},[87,169292,148914],{"class":492},[87,169294,169295],{"class":97},".read(",[87,169297,242],{"class":104},[87,169299,1108],{"class":97},[44,169301,169303],{"id":169302},"_842-readline","8.4.2 readline",[19,169305,169306],{},"一次读取一行：",[77,169308,169310],{"className":31325,"code":169309,"language":31327,"meta":82,"style":82},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[84,169311,169312,169338,169342,169353,169360,169364],{"__ignoreMap":82},[87,169313,169314,169316,169318,169320,169322,169324,169326,169328,169330,169332,169334,169336],{"class":89,"line":90},[87,169315,46301],{"class":492},[87,169317,14514],{"class":171},[87,169319,147552],{"class":104},[87,169321,165],{"class":97},[87,169323,147557],{"class":949},[87,169325,13385],{"class":97},[87,169327,147562],{"class":949},[87,169329,13385],{"class":97},[87,169331,147567],{"class":492},[87,169333,946],{"class":171},[87,169335,147572],{"class":949},[87,169337,1108],{"class":97},[87,169339,169340],{"class":89,"line":101},[87,169341,3355],{"emptyLinePlaceholder":1029},[87,169343,169344,169346,169348,169350],{"class":89,"line":120},[87,169345,148013],{"class":97},[87,169347,946],{"class":171},[87,169349,148914],{"class":492},[87,169351,169352],{"class":97},".readline()\n",[87,169354,169355,169357],{"class":89,"line":222},[87,169356,31362],{"class":104},[87,169358,169359],{"class":97},"(line)\n",[87,169361,169362],{"class":89,"line":234},[87,169363,3355],{"emptyLinePlaceholder":1029},[87,169365,169366,169368],{"class":89,"line":256},[87,169367,46301],{"class":492},[87,169369,169276],{"class":97},[44,169371,169373],{"id":169372},"_843-readlines","8.4.3 readlines",[19,169375,169376],{},"读取所有行，返回列表：",[77,169378,169380],{"className":31325,"code":169379,"language":31327,"meta":82,"style":82},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[84,169381,169382,169408,169420,169427],{"__ignoreMap":82},[87,169383,169384,169386,169388,169390,169392,169394,169396,169398,169400,169402,169404,169406],{"class":89,"line":90},[87,169385,46301],{"class":492},[87,169387,14514],{"class":171},[87,169389,147552],{"class":104},[87,169391,165],{"class":97},[87,169393,147557],{"class":949},[87,169395,13385],{"class":97},[87,169397,147562],{"class":949},[87,169399,13385],{"class":97},[87,169401,147567],{"class":492},[87,169403,946],{"class":171},[87,169405,147572],{"class":949},[87,169407,1108],{"class":97},[87,169409,169410,169413,169415,169417],{"class":89,"line":101},[87,169411,169412],{"class":97},"lines ",[87,169414,946],{"class":171},[87,169416,148914],{"class":492},[87,169418,169419],{"class":97},".readlines()\n",[87,169421,169422,169424],{"class":89,"line":120},[87,169423,31362],{"class":104},[87,169425,169426],{"class":97},"(lines)\n",[87,169428,169429,169431],{"class":89,"line":222},[87,169430,46301],{"class":492},[87,169432,169276],{"class":97},[19,169434,169435,169436,169439],{},"每一行通常带有换行符，可以用 ",[84,169437,169438],{},"strip()"," 去掉：",[77,169441,169443],{"className":31325,"code":169442,"language":31327,"meta":82,"style":82},"for line in lines:\n    print(line.strip())\n",[84,169444,169445,169457],{"__ignoreMap":82},[87,169446,169447,169449,169452,169454],{"class":89,"line":90},[87,169448,3979],{"class":171},[87,169450,169451],{"class":97}," line ",[87,169453,26990],{"class":171},[87,169455,169456],{"class":97}," lines:\n",[87,169458,169459,169461],{"class":89,"line":101},[87,169460,32246],{"class":104},[87,169462,169463],{"class":97},"(line.strip())\n",[44,169465,169467],{"id":169466},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,169469,169470],{},"推荐读取大文件时使用：",[77,169472,169474],{"className":31325,"code":169473,"language":31327,"meta":82,"style":82},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[84,169475,169476,169502,169506,169518,169524,169528],{"__ignoreMap":82},[87,169477,169478,169480,169482,169484,169486,169488,169490,169492,169494,169496,169498,169500],{"class":89,"line":90},[87,169479,46301],{"class":492},[87,169481,14514],{"class":171},[87,169483,147552],{"class":104},[87,169485,165],{"class":97},[87,169487,147557],{"class":949},[87,169489,13385],{"class":97},[87,169491,147562],{"class":949},[87,169493,13385],{"class":97},[87,169495,147567],{"class":492},[87,169497,946],{"class":171},[87,169499,147572],{"class":949},[87,169501,1108],{"class":97},[87,169503,169504],{"class":89,"line":101},[87,169505,3355],{"emptyLinePlaceholder":1029},[87,169507,169508,169510,169512,169514,169516],{"class":89,"line":120},[87,169509,3979],{"class":171},[87,169511,169451],{"class":97},[87,169513,26990],{"class":171},[87,169515,148914],{"class":492},[87,169517,4693],{"class":97},[87,169519,169520,169522],{"class":89,"line":222},[87,169521,32246],{"class":104},[87,169523,169463],{"class":97},[87,169525,169526],{"class":89,"line":234},[87,169527,3355],{"emptyLinePlaceholder":1029},[87,169529,169530,169532],{"class":89,"line":256},[87,169531,46301],{"class":492},[87,169533,169276],{"class":97},[14,169535,169537],{"id":169536},"_85-with语句","8.5 with语句",[19,169539,169540,169542],{},[84,169541,108759],{}," 会自动关闭文件，推荐使用。",[77,169544,169546],{"className":31325,"code":169545,"language":31327,"meta":82,"style":82},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[84,169547,169548,169578,169588],{"__ignoreMap":82},[87,169549,169550,169552,169554,169556,169558,169560,169562,169564,169566,169568,169570,169572,169574,169576],{"class":89,"line":90},[87,169551,108759],{"class":171},[87,169553,147552],{"class":104},[87,169555,165],{"class":97},[87,169557,147557],{"class":949},[87,169559,13385],{"class":97},[87,169561,147562],{"class":949},[87,169563,13385],{"class":97},[87,169565,147567],{"class":492},[87,169567,946],{"class":171},[87,169569,147572],{"class":949},[87,169571,14664],{"class":97},[87,169573,32330],{"class":171},[87,169575,148914],{"class":492},[87,169577,4693],{"class":97},[87,169579,169580,169582,169584,169586],{"class":89,"line":101},[87,169581,147584],{"class":97},[87,169583,946],{"class":171},[87,169585,148914],{"class":492},[87,169587,169262],{"class":97},[87,169589,169590,169592],{"class":89,"line":120},[87,169591,32246],{"class":104},[87,169593,169269],{"class":97},[19,169595,169596],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,169598,169600],{"id":169599},"_86-写入文件","8.6 写入文件",[19,169602,169603,169605],{},[84,169604,1887],{}," 模式会清空原文件。",[77,169607,169609],{"className":31325,"code":169608,"language":31327,"meta":82,"style":82},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[84,169610,169611,169641,169658],{"__ignoreMap":82},[87,169612,169613,169615,169617,169619,169621,169623,169625,169627,169629,169631,169633,169635,169637,169639],{"class":89,"line":90},[87,169614,108759],{"class":171},[87,169616,147552],{"class":104},[87,169618,165],{"class":97},[87,169620,147557],{"class":949},[87,169622,13385],{"class":97},[87,169624,152737],{"class":949},[87,169626,13385],{"class":97},[87,169628,147567],{"class":492},[87,169630,946],{"class":171},[87,169632,147572],{"class":949},[87,169634,14664],{"class":97},[87,169636,32330],{"class":171},[87,169638,148914],{"class":492},[87,169640,4693],{"class":97},[87,169642,169643,169646,169649,169652,169654,169656],{"class":89,"line":101},[87,169644,169645],{"class":492},"    file",[87,169647,169648],{"class":97},".write(",[87,169650,169651],{"class":949},"\"hello",[87,169653,157286],{"class":104},[87,169655,1347],{"class":949},[87,169657,1108],{"class":97},[87,169659,169660,169662,169664,169667,169669,169671],{"class":89,"line":120},[87,169661,169645],{"class":492},[87,169663,169648],{"class":97},[87,169665,169666],{"class":949},"\"python",[87,169668,157286],{"class":104},[87,169670,1347],{"class":949},[87,169672,1108],{"class":97},[19,169674,169675],{},"写入多行：",[77,169677,169679],{"className":31325,"code":169678,"language":31327,"meta":82,"style":82},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[84,169680,169681,169716,169720,169751],{"__ignoreMap":82},[87,169682,169683,169685,169687,169689,169692,169694,169696,169698,169701,169703,169705,169707,169710,169712,169714],{"class":89,"line":90},[87,169684,169412],{"class":97},[87,169686,946],{"class":171},[87,169688,53163],{"class":97},[87,169690,169691],{"class":949},"\"小明,18",[87,169693,157286],{"class":104},[87,169695,1347],{"class":949},[87,169697,13385],{"class":97},[87,169699,169700],{"class":949},"\"小红,17",[87,169702,157286],{"class":104},[87,169704,1347],{"class":949},[87,169706,13385],{"class":97},[87,169708,169709],{"class":949},"\"小刚,19",[87,169711,157286],{"class":104},[87,169713,1347],{"class":949},[87,169715,34193],{"class":97},[87,169717,169718],{"class":89,"line":101},[87,169719,3355],{"emptyLinePlaceholder":1029},[87,169721,169722,169724,169726,169728,169731,169733,169735,169737,169739,169741,169743,169745,169747,169749],{"class":89,"line":120},[87,169723,108759],{"class":171},[87,169725,147552],{"class":104},[87,169727,165],{"class":97},[87,169729,169730],{"class":949},"\"students.txt\"",[87,169732,13385],{"class":97},[87,169734,152737],{"class":949},[87,169736,13385],{"class":97},[87,169738,147567],{"class":492},[87,169740,946],{"class":171},[87,169742,147572],{"class":949},[87,169744,14664],{"class":97},[87,169746,32330],{"class":171},[87,169748,148914],{"class":492},[87,169750,4693],{"class":97},[87,169752,169753,169755],{"class":89,"line":222},[87,169754,169645],{"class":492},[87,169756,169757],{"class":97},".writelines(lines)\n",[14,169759,169761],{"id":169760},"_87-追加文件","8.7 追加文件",[19,169763,169764,169766],{},[84,169765,1334],{}," 模式不会清空原内容，而是在末尾追加。",[77,169768,169770],{"className":31325,"code":169769,"language":31327,"meta":82,"style":82},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[84,169771,169772,169803],{"__ignoreMap":82},[87,169773,169774,169776,169778,169780,169783,169785,169787,169789,169791,169793,169795,169797,169799,169801],{"class":89,"line":90},[87,169775,108759],{"class":171},[87,169777,147552],{"class":104},[87,169779,165],{"class":97},[87,169781,169782],{"class":949},"\"log.txt\"",[87,169784,13385],{"class":97},[87,169786,166086],{"class":949},[87,169788,13385],{"class":97},[87,169790,147567],{"class":492},[87,169792,946],{"class":171},[87,169794,147572],{"class":949},[87,169796,14664],{"class":97},[87,169798,32330],{"class":171},[87,169800,148914],{"class":492},[87,169802,4693],{"class":97},[87,169804,169805,169807,169809,169812,169814,169816],{"class":89,"line":101},[87,169806,169645],{"class":492},[87,169808,169648],{"class":97},[87,169810,169811],{"class":949},"\"程序启动",[87,169813,157286],{"class":104},[87,169815,1347],{"class":949},[87,169817,1108],{"class":97},[19,169819,169820],{},"日志类文件常用追加模式。",[14,169822,169824],{"id":169823},"_88-文件编码","8.8 文件编码",[19,169826,169827],{},"编码决定文字如何保存为字节。",[19,169829,169830],{},"常见编码：",[1055,169832,169833,169836],{},[29,169834,169835],{},"UTF-8：推荐。",[29,169837,169838],{},"GBK：部分 Windows 中文文件常见。",[19,169840,169841],{},"读取文件乱码时，可以尝试：",[77,169843,169845],{"className":31325,"code":169844,"language":31327,"meta":82,"style":82},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[84,169846,169847,169878],{"__ignoreMap":82},[87,169848,169849,169851,169853,169855,169857,169859,169861,169863,169865,169867,169870,169872,169874,169876],{"class":89,"line":90},[87,169850,108759],{"class":171},[87,169852,147552],{"class":104},[87,169854,165],{"class":97},[87,169856,147557],{"class":949},[87,169858,13385],{"class":97},[87,169860,147562],{"class":949},[87,169862,13385],{"class":97},[87,169864,147567],{"class":492},[87,169866,946],{"class":171},[87,169868,169869],{"class":949},"\"gbk\"",[87,169871,14664],{"class":97},[87,169873,32330],{"class":171},[87,169875,148914],{"class":492},[87,169877,4693],{"class":97},[87,169879,169880,169882,169884,169886],{"class":89,"line":101},[87,169881,147584],{"class":97},[87,169883,946],{"class":171},[87,169885,148914],{"class":492},[87,169887,169262],{"class":97},[19,169889,169890],{},"写文件时建议统一 UTF-8：",[77,169892,169894],{"className":31325,"code":169893,"language":31327,"meta":82,"style":82},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[84,169895,169896,169926],{"__ignoreMap":82},[87,169897,169898,169900,169902,169904,169906,169908,169910,169912,169914,169916,169918,169920,169922,169924],{"class":89,"line":90},[87,169899,108759],{"class":171},[87,169901,147552],{"class":104},[87,169903,165],{"class":97},[87,169905,147557],{"class":949},[87,169907,13385],{"class":97},[87,169909,152737],{"class":949},[87,169911,13385],{"class":97},[87,169913,147567],{"class":492},[87,169915,946],{"class":171},[87,169917,147572],{"class":949},[87,169919,14664],{"class":97},[87,169921,32330],{"class":171},[87,169923,148914],{"class":492},[87,169925,4693],{"class":97},[87,169927,169928,169930,169932,169935],{"class":89,"line":101},[87,169929,169645],{"class":492},[87,169931,169648],{"class":97},[87,169933,169934],{"class":949},"\"中文内容\"",[87,169936,1108],{"class":97},[14,169938,169940],{"id":169939},"_89-pathlib","8.9 pathlib",[19,169942,169943,169946],{},[84,169944,169945],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[77,169948,169950],{"className":31325,"code":169949,"language":31327,"meta":82,"style":82},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[84,169951,169952,169962,169966,169984],{"__ignoreMap":82},[87,169953,169954,169956,169958,169960],{"class":89,"line":90},[87,169955,31684],{"class":171},[87,169957,109237],{"class":97},[87,169959,31339],{"class":171},[87,169961,109242],{"class":97},[87,169963,169964],{"class":89,"line":101},[87,169965,3355],{"emptyLinePlaceholder":1029},[87,169967,169968,169970,169972,169974,169977,169979,169981],{"class":89,"line":120},[87,169969,169072],{"class":97},[87,169971,946],{"class":171},[87,169973,109471],{"class":97},[87,169975,169976],{"class":949},"\"data\"",[87,169978,14664],{"class":97},[87,169980,1677],{"class":171},[87,169982,169983],{"class":949}," \"students.txt\"\n",[87,169985,169986,169988],{"class":89,"line":222},[87,169987,31362],{"class":104},[87,169989,169990],{"class":97},"(path)\n",[19,169992,169993],{},"创建目录：",[77,169995,169997],{"className":31325,"code":169996,"language":31327,"meta":82,"style":82},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[84,169998,169999,170009,170013,170026],{"__ignoreMap":82},[87,170000,170001,170003,170005,170007],{"class":89,"line":90},[87,170002,31684],{"class":171},[87,170004,109237],{"class":97},[87,170006,31339],{"class":171},[87,170008,109242],{"class":97},[87,170010,170011],{"class":89,"line":101},[87,170012,3355],{"emptyLinePlaceholder":1029},[87,170014,170015,170018,170020,170022,170024],{"class":89,"line":120},[87,170016,170017],{"class":97},"data_dir ",[87,170019,946],{"class":171},[87,170021,109471],{"class":97},[87,170023,169976],{"class":949},[87,170025,1108],{"class":97},[87,170027,170028,170031,170034,170036,170038],{"class":89,"line":222},[87,170029,170030],{"class":97},"data_dir.mkdir(",[87,170032,170033],{"class":492},"exist_ok",[87,170035,946],{"class":171},[87,170037,32423],{"class":104},[87,170039,1108],{"class":97},[19,170041,170042],{},"判断文件是否存在：",[77,170044,170046],{"className":31325,"code":170045,"language":31327,"meta":82,"style":82},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[84,170047,170048,170061,170065,170072],{"__ignoreMap":82},[87,170049,170050,170052,170054,170056,170059],{"class":89,"line":90},[87,170051,169072],{"class":97},[87,170053,946],{"class":171},[87,170055,109471],{"class":97},[87,170057,170058],{"class":949},"\"data\u002Fstudents.txt\"",[87,170060,1108],{"class":97},[87,170062,170063],{"class":89,"line":101},[87,170064,3355],{"emptyLinePlaceholder":1029},[87,170066,170067,170069],{"class":89,"line":120},[87,170068,2488],{"class":171},[87,170070,170071],{"class":97}," path.exists():\n",[87,170073,170074,170076,170078,170081],{"class":89,"line":222},[87,170075,32246],{"class":104},[87,170077,165],{"class":97},[87,170079,170080],{"class":949},"\"文件存在\"",[87,170082,1108],{"class":97},[19,170084,170085],{},"读写文本：",[77,170087,170089],{"className":31325,"code":170088,"language":31327,"meta":82,"style":82},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[84,170090,170091,170103,170107,170124,170141],{"__ignoreMap":82},[87,170092,170093,170095,170097,170099,170101],{"class":89,"line":90},[87,170094,169072],{"class":97},[87,170096,946],{"class":171},[87,170098,109471],{"class":97},[87,170100,147557],{"class":949},[87,170102,1108],{"class":97},[87,170104,170105],{"class":89,"line":101},[87,170106,3355],{"emptyLinePlaceholder":1029},[87,170108,170109,170112,170114,170116,170118,170120,170122],{"class":89,"line":120},[87,170110,170111],{"class":97},"path.write_text(",[87,170113,146637],{"class":949},[87,170115,13385],{"class":97},[87,170117,147567],{"class":492},[87,170119,946],{"class":171},[87,170121,147572],{"class":949},[87,170123,1108],{"class":97},[87,170125,170126,170128,170130,170133,170135,170137,170139],{"class":89,"line":222},[87,170127,169255],{"class":97},[87,170129,946],{"class":171},[87,170131,170132],{"class":97}," path.read_text(",[87,170134,147567],{"class":492},[87,170136,946],{"class":171},[87,170138,147572],{"class":949},[87,170140,1108],{"class":97},[87,170142,170143,170145],{"class":89,"line":234},[87,170144,31362],{"class":104},[87,170146,169269],{"class":97},[14,170148,170150],{"id":170149},"_810-json文件","8.10 JSON文件",[19,170152,170153],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[77,170155,170157],{"className":31325,"code":170156,"language":31327,"meta":82,"style":82},"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",[84,170158,170159,170165,170169,170177,170187,170197,170205,170209,170213,170238],{"__ignoreMap":82},[87,170160,170161,170163],{"class":89,"line":90},[87,170162,31339],{"class":171},[87,170164,147852],{"class":97},[87,170166,170167],{"class":89,"line":101},[87,170168,3355],{"emptyLinePlaceholder":1029},[87,170170,170171,170173,170175],{"class":89,"line":120},[87,170172,150242],{"class":97},[87,170174,946],{"class":171},[87,170176,98],{"class":97},[87,170178,170179,170181,170183,170185],{"class":89,"line":222},[87,170180,147781],{"class":949},[87,170182,108],{"class":97},[87,170184,150649],{"class":949},[87,170186,32413],{"class":97},[87,170188,170189,170191,170193,170195],{"class":89,"line":234},[87,170190,165298],{"class":949},[87,170192,108],{"class":97},[87,170194,1743],{"class":104},[87,170196,32413],{"class":97},[87,170198,170199,170201,170203],{"class":89,"line":256},[87,170200,165309],{"class":949},[87,170202,108],{"class":97},[87,170204,165314],{"class":104},[87,170206,170207],{"class":89,"line":269},[87,170208,123],{"class":97},[87,170210,170211],{"class":89,"line":463},[87,170212,3355],{"emptyLinePlaceholder":1029},[87,170214,170215,170217,170219,170222,170224,170226,170228,170230,170232,170234,170236],{"class":89,"line":469},[87,170216,157205],{"class":97},[87,170218,946],{"class":171},[87,170220,170221],{"class":97}," json.dumps(student, ",[87,170223,147898],{"class":492},[87,170225,946],{"class":171},[87,170227,34934],{"class":104},[87,170229,13385],{"class":97},[87,170231,152773],{"class":492},[87,170233,946],{"class":171},[87,170235,1176],{"class":104},[87,170237,1108],{"class":97},[87,170239,170240,170242],{"class":89,"line":2287},[87,170241,31362],{"class":104},[87,170243,164832],{"class":97},[19,170245,170246],{},"写入 JSON 文件：",[77,170248,170250],{"className":31325,"code":170249,"language":31327,"meta":82,"style":82},"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",[84,170251,170252,170258,170262,170270,170298,170326,170330,170334,170364],{"__ignoreMap":82},[87,170253,170254,170256],{"class":89,"line":90},[87,170255,31339],{"class":171},[87,170257,147852],{"class":97},[87,170259,170260],{"class":89,"line":101},[87,170261,3355],{"emptyLinePlaceholder":1029},[87,170263,170264,170266,170268],{"class":89,"line":120},[87,170265,160477],{"class":97},[87,170267,946],{"class":171},[87,170269,56383],{"class":97},[87,170271,170272,170274,170276,170278,170280,170282,170284,170286,170288,170290,170292,170294,170296],{"class":89,"line":222},[87,170273,149146],{"class":97},[87,170275,63613],{"class":949},[87,170277,108],{"class":97},[87,170279,150649],{"class":949},[87,170281,13385],{"class":97},[87,170283,70056],{"class":949},[87,170285,108],{"class":97},[87,170287,1743],{"class":104},[87,170289,13385],{"class":97},[87,170291,152233],{"class":949},[87,170293,108],{"class":97},[87,170295,2080],{"class":104},[87,170297,5883],{"class":97},[87,170299,170300,170302,170304,170306,170308,170310,170312,170314,170316,170318,170320,170322,170324],{"class":89,"line":234},[87,170301,149146],{"class":97},[87,170303,63613],{"class":949},[87,170305,108],{"class":97},[87,170307,151697],{"class":949},[87,170309,13385],{"class":97},[87,170311,70056],{"class":949},[87,170313,108],{"class":97},[87,170315,1718],{"class":104},[87,170317,13385],{"class":97},[87,170319,152233],{"class":949},[87,170321,108],{"class":97},[87,170323,1903],{"class":104},[87,170325,5883],{"class":97},[87,170327,170328],{"class":89,"line":256},[87,170329,34193],{"class":97},[87,170331,170332],{"class":89,"line":269},[87,170333,3355],{"emptyLinePlaceholder":1029},[87,170335,170336,170338,170340,170342,170344,170346,170348,170350,170352,170354,170356,170358,170360,170362],{"class":89,"line":463},[87,170337,108759],{"class":171},[87,170339,147552],{"class":104},[87,170341,165],{"class":97},[87,170343,152592],{"class":949},[87,170345,13385],{"class":97},[87,170347,152737],{"class":949},[87,170349,13385],{"class":97},[87,170351,147567],{"class":492},[87,170353,946],{"class":171},[87,170355,147572],{"class":949},[87,170357,14664],{"class":97},[87,170359,32330],{"class":171},[87,170361,148914],{"class":492},[87,170363,4693],{"class":97},[87,170365,170366,170369,170371,170373,170375,170377,170379,170381,170383,170385,170387],{"class":89,"line":469},[87,170367,170368],{"class":97},"    json.dump(students, ",[87,170370,46301],{"class":492},[87,170372,13385],{"class":97},[87,170374,147898],{"class":492},[87,170376,946],{"class":171},[87,170378,34934],{"class":104},[87,170380,13385],{"class":97},[87,170382,152773],{"class":492},[87,170384,946],{"class":171},[87,170386,1176],{"class":104},[87,170388,1108],{"class":97},[19,170390,170391],{},"读取 JSON 文件：",[77,170393,170395],{"className":31325,"code":170394,"language":31327,"meta":82,"style":82},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[84,170396,170397,170403,170407,170437,170449,170453],{"__ignoreMap":82},[87,170398,170399,170401],{"class":89,"line":90},[87,170400,31339],{"class":171},[87,170402,147852],{"class":97},[87,170404,170405],{"class":89,"line":101},[87,170406,3355],{"emptyLinePlaceholder":1029},[87,170408,170409,170411,170413,170415,170417,170419,170421,170423,170425,170427,170429,170431,170433,170435],{"class":89,"line":120},[87,170410,108759],{"class":171},[87,170412,147552],{"class":104},[87,170414,165],{"class":97},[87,170416,152592],{"class":949},[87,170418,13385],{"class":97},[87,170420,147562],{"class":949},[87,170422,13385],{"class":97},[87,170424,147567],{"class":492},[87,170426,946],{"class":171},[87,170428,147572],{"class":949},[87,170430,14664],{"class":97},[87,170432,32330],{"class":171},[87,170434,148914],{"class":492},[87,170436,4693],{"class":97},[87,170438,170439,170441,170443,170445,170447],{"class":89,"line":222},[87,170440,153798],{"class":97},[87,170442,946],{"class":171},[87,170444,148925],{"class":97},[87,170446,46301],{"class":492},[87,170448,1108],{"class":97},[87,170450,170451],{"class":89,"line":234},[87,170452,3355],{"emptyLinePlaceholder":1029},[87,170454,170455,170457],{"class":89,"line":256},[87,170456,31362],{"class":104},[87,170458,165756],{"class":97},[14,170460,170462],{"id":170461},"_811-csv文件","8.11 CSV文件",[19,170464,170465],{},"CSV 是逗号分隔值，常用于表格数据。",[19,170467,170468],{},"写入 CSV：",[77,170470,170472],{"className":31325,"code":170471,"language":31327,"meta":82,"style":82},"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",[84,170473,170474,170481,170485,170493,170511,170527,170543,170547,170551,170591,170605],{"__ignoreMap":82},[87,170475,170476,170478],{"class":89,"line":90},[87,170477,31339],{"class":171},[87,170479,170480],{"class":97}," csv\n",[87,170482,170483],{"class":89,"line":101},[87,170484,3355],{"emptyLinePlaceholder":1029},[87,170486,170487,170489,170491],{"class":89,"line":120},[87,170488,160477],{"class":97},[87,170490,946],{"class":171},[87,170492,56383],{"class":97},[87,170494,170495,170498,170500,170502,170504,170506,170509],{"class":89,"line":222},[87,170496,170497],{"class":97},"    [",[87,170499,74027],{"class":949},[87,170501,13385],{"class":97},[87,170503,74060],{"class":949},[87,170505,13385],{"class":97},[87,170507,170508],{"class":949},"\"成绩\"",[87,170510,88762],{"class":97},[87,170512,170513,170515,170517,170519,170521,170523,170525],{"class":89,"line":234},[87,170514,170497],{"class":97},[87,170516,150649],{"class":949},[87,170518,13385],{"class":97},[87,170520,1743],{"class":104},[87,170522,13385],{"class":97},[87,170524,2080],{"class":104},[87,170526,88762],{"class":97},[87,170528,170529,170531,170533,170535,170537,170539,170541],{"class":89,"line":256},[87,170530,170497],{"class":97},[87,170532,151697],{"class":949},[87,170534,13385],{"class":97},[87,170536,1718],{"class":104},[87,170538,13385],{"class":97},[87,170540,1903],{"class":104},[87,170542,88762],{"class":97},[87,170544,170545],{"class":89,"line":269},[87,170546,34193],{"class":97},[87,170548,170549],{"class":89,"line":463},[87,170550,3355],{"emptyLinePlaceholder":1029},[87,170552,170553,170555,170557,170559,170562,170564,170566,170568,170570,170572,170574,170576,170579,170581,170583,170585,170587,170589],{"class":89,"line":469},[87,170554,108759],{"class":171},[87,170556,147552],{"class":104},[87,170558,165],{"class":97},[87,170560,170561],{"class":949},"\"students.csv\"",[87,170563,13385],{"class":97},[87,170565,152737],{"class":949},[87,170567,13385],{"class":97},[87,170569,147567],{"class":492},[87,170571,946],{"class":171},[87,170573,147572],{"class":949},[87,170575,13385],{"class":97},[87,170577,170578],{"class":492},"newline",[87,170580,946],{"class":171},[87,170582,8602],{"class":949},[87,170584,14664],{"class":97},[87,170586,32330],{"class":171},[87,170588,148914],{"class":492},[87,170590,4693],{"class":97},[87,170592,170593,170596,170598,170601,170603],{"class":89,"line":2287},[87,170594,170595],{"class":97},"    writer ",[87,170597,946],{"class":171},[87,170599,170600],{"class":97}," csv.writer(",[87,170602,46301],{"class":492},[87,170604,1108],{"class":97},[87,170606,170607],{"class":89,"line":2568},[87,170608,170609],{"class":97},"    writer.writerows(students)\n",[19,170611,170612],{},"读取 CSV：",[77,170614,170616],{"className":31325,"code":170615,"language":31327,"meta":82,"style":82},"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",[84,170617,170618,170624,170628,170658,170672,170684],{"__ignoreMap":82},[87,170619,170620,170622],{"class":89,"line":90},[87,170621,31339],{"class":171},[87,170623,170480],{"class":97},[87,170625,170626],{"class":89,"line":101},[87,170627,3355],{"emptyLinePlaceholder":1029},[87,170629,170630,170632,170634,170636,170638,170640,170642,170644,170646,170648,170650,170652,170654,170656],{"class":89,"line":120},[87,170631,108759],{"class":171},[87,170633,147552],{"class":104},[87,170635,165],{"class":97},[87,170637,170561],{"class":949},[87,170639,13385],{"class":97},[87,170641,147562],{"class":949},[87,170643,13385],{"class":97},[87,170645,147567],{"class":492},[87,170647,946],{"class":171},[87,170649,147572],{"class":949},[87,170651,14664],{"class":97},[87,170653,32330],{"class":171},[87,170655,148914],{"class":492},[87,170657,4693],{"class":97},[87,170659,170660,170663,170665,170668,170670],{"class":89,"line":222},[87,170661,170662],{"class":97},"    reader ",[87,170664,946],{"class":171},[87,170666,170667],{"class":97}," csv.reader(",[87,170669,46301],{"class":492},[87,170671,1108],{"class":97},[87,170673,170674,170676,170679,170681],{"class":89,"line":234},[87,170675,4155],{"class":171},[87,170677,170678],{"class":97}," row ",[87,170680,26990],{"class":171},[87,170682,170683],{"class":97}," reader:\n",[87,170685,170686,170688],{"class":89,"line":256},[87,170687,33398],{"class":104},[87,170689,170690],{"class":97},"(row)\n",[19,170692,170693],{},"使用字典写入：",[77,170695,170697],{"className":31325,"code":170696,"language":31327,"meta":82,"style":82},"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",[84,170698,170699,170705,170709,170717,170745,170773,170777,170781,170819,170840,170861,170866],{"__ignoreMap":82},[87,170700,170701,170703],{"class":89,"line":90},[87,170702,31339],{"class":171},[87,170704,170480],{"class":97},[87,170706,170707],{"class":89,"line":101},[87,170708,3355],{"emptyLinePlaceholder":1029},[87,170710,170711,170713,170715],{"class":89,"line":120},[87,170712,160477],{"class":97},[87,170714,946],{"class":171},[87,170716,56383],{"class":97},[87,170718,170719,170721,170723,170725,170727,170729,170731,170733,170735,170737,170739,170741,170743],{"class":89,"line":222},[87,170720,149146],{"class":97},[87,170722,63613],{"class":949},[87,170724,108],{"class":97},[87,170726,150649],{"class":949},[87,170728,13385],{"class":97},[87,170730,70056],{"class":949},[87,170732,108],{"class":97},[87,170734,1743],{"class":104},[87,170736,13385],{"class":97},[87,170738,152233],{"class":949},[87,170740,108],{"class":97},[87,170742,2080],{"class":104},[87,170744,5883],{"class":97},[87,170746,170747,170749,170751,170753,170755,170757,170759,170761,170763,170765,170767,170769,170771],{"class":89,"line":234},[87,170748,149146],{"class":97},[87,170750,63613],{"class":949},[87,170752,108],{"class":97},[87,170754,151697],{"class":949},[87,170756,13385],{"class":97},[87,170758,70056],{"class":949},[87,170760,108],{"class":97},[87,170762,1718],{"class":104},[87,170764,13385],{"class":97},[87,170766,152233],{"class":949},[87,170768,108],{"class":97},[87,170770,1903],{"class":104},[87,170772,5883],{"class":97},[87,170774,170775],{"class":89,"line":256},[87,170776,34193],{"class":97},[87,170778,170779],{"class":89,"line":269},[87,170780,3355],{"emptyLinePlaceholder":1029},[87,170782,170783,170785,170787,170789,170791,170793,170795,170797,170799,170801,170803,170805,170807,170809,170811,170813,170815,170817],{"class":89,"line":463},[87,170784,108759],{"class":171},[87,170786,147552],{"class":104},[87,170788,165],{"class":97},[87,170790,170561],{"class":949},[87,170792,13385],{"class":97},[87,170794,152737],{"class":949},[87,170796,13385],{"class":97},[87,170798,147567],{"class":492},[87,170800,946],{"class":171},[87,170802,147572],{"class":949},[87,170804,13385],{"class":97},[87,170806,170578],{"class":492},[87,170808,946],{"class":171},[87,170810,8602],{"class":949},[87,170812,14664],{"class":97},[87,170814,32330],{"class":171},[87,170816,148914],{"class":492},[87,170818,4693],{"class":97},[87,170820,170821,170824,170826,170828,170830,170832,170834,170836,170838],{"class":89,"line":469},[87,170822,170823],{"class":97},"    fieldnames ",[87,170825,946],{"class":171},[87,170827,53163],{"class":97},[87,170829,63613],{"class":949},[87,170831,13385],{"class":97},[87,170833,70056],{"class":949},[87,170835,13385],{"class":97},[87,170837,152233],{"class":949},[87,170839,34193],{"class":97},[87,170841,170842,170844,170846,170849,170851,170853,170856,170858],{"class":89,"line":2287},[87,170843,170595],{"class":97},[87,170845,946],{"class":171},[87,170847,170848],{"class":97}," csv.DictWriter(",[87,170850,46301],{"class":492},[87,170852,13385],{"class":97},[87,170854,170855],{"class":492},"fieldnames",[87,170857,946],{"class":171},[87,170859,170860],{"class":97},"fieldnames)\n",[87,170862,170863],{"class":89,"line":2568},[87,170864,170865],{"class":97},"    writer.writeheader()\n",[87,170867,170868],{"class":89,"line":2573},[87,170869,170609],{"class":97},[14,170871,170873],{"id":170872},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170875,124218],{},[1055,170877,170878,170881,170884],{},[29,170879,170880],{},"读取文本文件。",[29,170882,170883],{},"统计每个单词出现次数。",[29,170885,170886],{},"输出出现次数最多的前 10 个单词。",[19,170888,10985],{},[77,170890,170892],{"className":31325,"code":170891,"language":31327,"meta":82,"style":82},"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",[84,170893,170894,170904,170908,170921,170937,170941,170951,170960,170964,170976,170996,171005,171009,171027,171031,171061,171065,171081],{"__ignoreMap":82},[87,170895,170896,170898,170900,170902],{"class":89,"line":90},[87,170897,31684],{"class":171},[87,170899,109237],{"class":97},[87,170901,31339],{"class":171},[87,170903,109242],{"class":97},[87,170905,170906],{"class":89,"line":101},[87,170907,3355],{"emptyLinePlaceholder":1029},[87,170909,170910,170912,170914,170916,170919],{"class":89,"line":120},[87,170911,169072],{"class":97},[87,170913,946],{"class":171},[87,170915,109471],{"class":97},[87,170917,170918],{"class":949},"\"article.txt\"",[87,170920,1108],{"class":97},[87,170922,170923,170925,170927,170929,170931,170933,170935],{"class":89,"line":222},[87,170924,169255],{"class":97},[87,170926,946],{"class":171},[87,170928,170132],{"class":97},[87,170930,147567],{"class":492},[87,170932,946],{"class":171},[87,170934,147572],{"class":949},[87,170936,1108],{"class":97},[87,170938,170939],{"class":89,"line":234},[87,170940,3355],{"emptyLinePlaceholder":1029},[87,170942,170943,170946,170948],{"class":89,"line":256},[87,170944,170945],{"class":97},"words ",[87,170947,946],{"class":171},[87,170949,170950],{"class":97}," content.lower().split()\n",[87,170952,170953,170956,170958],{"class":89,"line":269},[87,170954,170955],{"class":97},"counter ",[87,170957,946],{"class":171},[87,170959,88794],{"class":97},[87,170961,170962],{"class":89,"line":463},[87,170963,3355],{"emptyLinePlaceholder":1029},[87,170965,170966,170968,170971,170973],{"class":89,"line":469},[87,170967,3979],{"class":171},[87,170969,170970],{"class":97}," word ",[87,170972,26990],{"class":171},[87,170974,170975],{"class":97}," words:\n",[87,170977,170978,170981,170983,170986,170989,170991,170994],{"class":89,"line":2287},[87,170979,170980],{"class":97},"    word ",[87,170982,946],{"class":171},[87,170984,170985],{"class":97}," word.strip(",[87,170987,170988],{"class":949},"\".,!?;:",[87,170990,157256],{"class":104},[87,170992,170993],{"class":949},"'()[]\"",[87,170995,1108],{"class":97},[87,170997,170998,171000,171002],{"class":89,"line":2568},[87,170999,4055],{"class":171},[87,171001,39877],{"class":171},[87,171003,171004],{"class":97}," word:\n",[87,171006,171007],{"class":89,"line":2573},[87,171008,149273],{"class":171},[87,171010,171011,171014,171016,171019,171021,171023,171025],{"class":89,"line":2579},[87,171012,171013],{"class":97},"    counter[word] ",[87,171015,946],{"class":171},[87,171017,171018],{"class":97}," counter.get(word, ",[87,171020,111],{"class":104},[87,171022,14664],{"class":97},[87,171024,1575],{"class":171},[87,171026,56635],{"class":104},[87,171028,171029],{"class":89,"line":2584},[87,171030,3355],{"emptyLinePlaceholder":1029},[87,171032,171033,171036,171038,171040,171043,171045,171047,171049,171051,171053,171055,171057,171059],{"class":89,"line":2598},[87,171034,171035],{"class":97},"items ",[87,171037,946],{"class":171},[87,171039,164365],{"class":104},[87,171041,171042],{"class":97},"(counter.items(), ",[87,171044,154707],{"class":492},[87,171046,154710],{"class":171},[87,171048,154713],{"class":97},[87,171050,1313],{"class":104},[87,171052,113128],{"class":97},[87,171054,164289],{"class":492},[87,171056,946],{"class":171},[87,171058,32423],{"class":104},[87,171060,1108],{"class":97},[87,171062,171063],{"class":89,"line":2603},[87,171064,3355],{"emptyLinePlaceholder":1029},[87,171066,171067,171069,171072,171074,171077,171079],{"class":89,"line":2609},[87,171068,3979],{"class":171},[87,171070,171071],{"class":97}," word, count ",[87,171073,26990],{"class":171},[87,171075,171076],{"class":97}," items[:",[87,171078,242],{"class":104},[87,171080,166516],{"class":97},[87,171082,171083,171085],{"class":89,"line":2630},[87,171084,32246],{"class":104},[87,171086,171087],{"class":97},"(word, count)\n",[14,171089,171091],{"id":171090},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[77,171093,171095],{"className":31325,"code":171094,"language":31327,"meta":82,"style":82},"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",[84,171096,171097,171103,171113,171117,171129,171133,171137,171145,171155,171161,171165,171195,171205,171209,171213,171221,171251,171275,171279,171283,171291,171320,171325],{"__ignoreMap":82},[87,171098,171099,171101],{"class":89,"line":90},[87,171100,31339],{"class":171},[87,171102,147852],{"class":97},[87,171104,171105,171107,171109,171111],{"class":89,"line":101},[87,171106,31684],{"class":171},[87,171108,109237],{"class":97},[87,171110,31339],{"class":171},[87,171112,109242],{"class":97},[87,171114,171115],{"class":89,"line":120},[87,171116,3355],{"emptyLinePlaceholder":1029},[87,171118,171119,171121,171123,171125,171127],{"class":89,"line":222},[87,171120,152585],{"class":104},[87,171122,14514],{"class":171},[87,171124,109471],{"class":97},[87,171126,152592],{"class":949},[87,171128,1108],{"class":97},[87,171130,171131],{"class":89,"line":234},[87,171132,3355],{"emptyLinePlaceholder":1029},[87,171134,171135],{"class":89,"line":256},[87,171136,3355],{"emptyLinePlaceholder":1029},[87,171138,171139,171141,171143],{"class":89,"line":269},[87,171140,32894],{"class":171},[87,171142,152609],{"class":205},[87,171144,32900],{"class":97},[87,171146,171147,171149,171151,171153],{"class":89,"line":463},[87,171148,4055],{"class":171},[87,171150,39877],{"class":171},[87,171152,152620],{"class":104},[87,171154,152623],{"class":97},[87,171156,171157,171159],{"class":89,"line":469},[87,171158,15702],{"class":171},[87,171160,52775],{"class":97},[87,171162,171163],{"class":89,"line":2287},[87,171164,3355],{"emptyLinePlaceholder":1029},[87,171166,171167,171169,171171,171173,171175,171177,171179,171181,171183,171185,171187,171189,171191,171193],{"class":89,"line":2568},[87,171168,35125],{"class":171},[87,171170,147552],{"class":104},[87,171172,165],{"class":97},[87,171174,152585],{"class":104},[87,171176,13385],{"class":97},[87,171178,147562],{"class":949},[87,171180,13385],{"class":97},[87,171182,147567],{"class":492},[87,171184,946],{"class":171},[87,171186,147572],{"class":949},[87,171188,14664],{"class":97},[87,171190,32330],{"class":171},[87,171192,148914],{"class":492},[87,171194,4693],{"class":97},[87,171196,171197,171199,171201,171203],{"class":89,"line":2573},[87,171198,15702],{"class":171},[87,171200,148925],{"class":97},[87,171202,46301],{"class":492},[87,171204,1108],{"class":97},[87,171206,171207],{"class":89,"line":2579},[87,171208,3355],{"emptyLinePlaceholder":1029},[87,171210,171211],{"class":89,"line":2584},[87,171212,3355],{"emptyLinePlaceholder":1029},[87,171214,171215,171217,171219],{"class":89,"line":2598},[87,171216,32894],{"class":171},[87,171218,152719],{"class":205},[87,171220,152722],{"class":97},[87,171222,171223,171225,171227,171229,171231,171233,171235,171237,171239,171241,171243,171245,171247,171249],{"class":89,"line":2603},[87,171224,35125],{"class":171},[87,171226,147552],{"class":104},[87,171228,165],{"class":97},[87,171230,152585],{"class":104},[87,171232,13385],{"class":97},[87,171234,152737],{"class":949},[87,171236,13385],{"class":97},[87,171238,147567],{"class":492},[87,171240,946],{"class":171},[87,171242,147572],{"class":949},[87,171244,14664],{"class":97},[87,171246,32330],{"class":171},[87,171248,148914],{"class":492},[87,171250,4693],{"class":97},[87,171252,171253,171255,171257,171259,171261,171263,171265,171267,171269,171271,171273],{"class":89,"line":2609},[87,171254,152758],{"class":97},[87,171256,46301],{"class":492},[87,171258,13385],{"class":97},[87,171260,147898],{"class":492},[87,171262,946],{"class":171},[87,171264,34934],{"class":104},[87,171266,13385],{"class":97},[87,171268,152773],{"class":492},[87,171270,946],{"class":171},[87,171272,1176],{"class":104},[87,171274,1108],{"class":97},[87,171276,171277],{"class":89,"line":2630},[87,171278,3355],{"emptyLinePlaceholder":1029},[87,171280,171281],{"class":89,"line":2635},[87,171282,3355],{"emptyLinePlaceholder":1029},[87,171284,171285,171287,171289],{"class":89,"line":2649},[87,171286,160477],{"class":97},[87,171288,946],{"class":171},[87,171290,153803],{"class":97},[87,171292,171293,171296,171298,171300,171302,171304,171306,171308,171310,171312,171314,171316,171318],{"class":89,"line":2654},[87,171294,171295],{"class":97},"students.append({",[87,171297,63613],{"class":949},[87,171299,108],{"class":97},[87,171301,150649],{"class":949},[87,171303,13385],{"class":97},[87,171305,70056],{"class":949},[87,171307,108],{"class":97},[87,171309,1743],{"class":104},[87,171311,13385],{"class":97},[87,171313,152233],{"class":949},[87,171315,108],{"class":97},[87,171317,2080],{"class":104},[87,171319,165913],{"class":97},[87,171321,171322],{"class":89,"line":2683},[87,171323,171324],{"class":97},"save_students(students)\n",[87,171326,171327,171329,171331,171334],{"class":89,"line":2688},[87,171328,31362],{"class":104},[87,171330,165],{"class":97},[87,171332,171333],{"class":949},"\"保存成功\"",[87,171335,1108],{"class":97},[14,171337,171339],{"id":171338},"_814-易错点","8.14 易错点",[1055,171341,171342,171346,171352,171357,171364,171371],{},[29,171343,171344,169605],{},[84,171345,1887],{},[29,171347,171348,171349,29332],{},"读写中文要指定 ",[84,171350,171351],{},"encoding=\"utf-8\"",[29,171353,171354,171355,29332],{},"打开文件后要关闭，推荐使用 ",[84,171356,108759],{},[29,171358,171359,171360,171363],{},"读取大文件不要直接 ",[84,171361,171362],{},"read()"," 全部内容。",[29,171365,171366,171367,171370],{},"Windows 写 CSV 时建议加 ",[84,171368,171369],{},"newline=\"\"","，避免空行。",[29,171372,171373],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171375,171377],{"id":171376},"_815-本章练习","8.15 本章练习",[1055,171379,171380,171387,171392,171395,171398],{},[29,171381,171382,171383,171386],{},"写入一个 ",[84,171384,171385],{},"students.txt","，每行保存一个学生姓名。",[29,171388,105281,171389,171391],{},[84,171390,171385],{}," 并输出所有学生。",[29,171393,171394],{},"把学生列表保存为 JSON 文件。",[29,171396,171397],{},"从 JSON 文件读取学生数据，计算平均分。",[29,171399,171400,171401,171404,171405,171408],{},"写一个日志函数 ",[84,171402,171403],{},"write_log(message)","，每次调用向 ",[84,171406,171407],{},"app.log"," 追加一行。",[1006,171410,171411],{},"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":82,"searchDepth":101,"depth":101,"links":171413},[171414,171415,171419,171420,171426,171427,171428,171429,171430,171431,171432,171433,171434,171435,171436],{"id":168925,"depth":101,"text":168926},{"id":168966,"depth":101,"text":168967,"children":171416},[171417,171418],{"id":168970,"depth":120,"text":168971},{"id":169004,"depth":120,"text":169005},{"id":169118,"depth":101,"text":169119},{"id":169211,"depth":101,"text":169212,"children":171421},[171422,171423,171424,171425],{"id":169215,"depth":120,"text":169216},{"id":169302,"depth":120,"text":169303},{"id":169372,"depth":120,"text":169373},{"id":169466,"depth":120,"text":169467},{"id":169536,"depth":101,"text":169537},{"id":169599,"depth":101,"text":169600},{"id":169760,"depth":101,"text":169761},{"id":169823,"depth":101,"text":169824},{"id":169939,"depth":101,"text":169940},{"id":170149,"depth":101,"text":170150},{"id":170461,"depth":101,"text":170462},{"id":170872,"depth":101,"text":170873},{"id":171090,"depth":101,"text":171091},{"id":171338,"depth":101,"text":171339},{"id":171376,"depth":101,"text":171377},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168917,"description":1026},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171443,"title":171444,"body":171445,"description":1026,"extension":1027,"meta":173631,"navigation":1029,"path":173632,"seo":173633,"stem":173634,"__hash__":173635},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171446,"toc":173598},[171447,171450,171454,171457,171460,171552,171554,171573,171578,171582,171585,171588,171617,171624,171627,171631,171634,171663,171665,171717,171723,171776,171780,171878,171881,171948,171952,172009,172011,172017,172021,172026,172032,172123,172128,172132,172135,172213,172216,172254,172258,172376,172379,172383,172386,172431,172434,172438,172443,172449,172499,172502,172533,172537,172541,172571,172575,172610,172614,172649,172689,172693,172709,172712,172716,172720,172799,172803,172844,172848,172903,172907,172941,172945,172975,172984,172991,172997,173054,173057,173065,173068,173072,173079,173082,173088,173091,173108,173113,173117,173123,173136,173139,173176,173179,173190,173193,173207,173210,173224,173228,173235,173268,173271,173273,173279,173282,173286,173288,173294,173299,173472,173476,173539,173543,173567,173571,173595],[10,171448,171444],{"id":171449},"_9-异常模块与包",[14,171451,171453],{"id":171452},"_91-什么是异常","9.1 什么是异常",[19,171455,171456],{},"异常是程序运行过程中出现的错误。",[19,171458,171459],{},"常见异常：",[1235,171461,171462,171471],{},[1238,171463,171464],{},[1241,171465,171466,171469],{},[1244,171467,171468],{},"异常",[1244,171470,26816],{},[1281,171472,171473,171483,171493,171502,171512,171522,171532,171542],{},[1241,171474,171475,171480],{},[1286,171476,171477],{},[84,171478,171479],{},"NameError",[1286,171481,171482],{},"使用了未定义变量",[1241,171484,171485,171490],{},[1286,171486,171487],{},[84,171488,171489],{},"TypeError",[1286,171491,171492],{},"类型不匹配",[1241,171494,171495,171499],{},[1286,171496,171497],{},[84,171498,155595],{},[1286,171500,171501],{},"值不合法",[1241,171503,171504,171509],{},[1286,171505,171506],{},[84,171507,171508],{},"IndexError",[1286,171510,171511],{},"列表索引越界",[1241,171513,171514,171519],{},[1286,171515,171516],{},[84,171517,171518],{},"KeyError",[1286,171520,171521],{},"字典 key 不存在",[1241,171523,171524,171529],{},[1286,171525,171526],{},[84,171527,171528],{},"FileNotFoundError",[1286,171530,171531],{},"文件不存在",[1241,171533,171534,171539],{},[1286,171535,171536],{},[84,171537,171538],{},"ZeroDivisionError",[1286,171540,171541],{},"除数为 0",[1241,171543,171544,171549],{},[1286,171545,171546],{},[84,171547,171548],{},"ImportError",[1286,171550,171551],{},"导入失败",[19,171553,16085],{},[77,171555,171557],{"className":31325,"code":171556,"language":31327,"meta":82,"style":82},"num = int(\"abc\")\n",[84,171558,171559],{"__ignoreMap":82},[87,171560,171561,171563,171565,171567,171569,171571],{"class":89,"line":90},[87,171562,156548],{"class":97},[87,171564,946],{"class":171},[87,171566,3337],{"class":104},[87,171568,165],{"class":97},[87,171570,156641],{"class":949},[87,171572,1108],{"class":97},[19,171574,171575,171576,29332],{},"会触发 ",[84,171577,155595],{},[14,171579,171581],{"id":171580},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,171583,171584],{},"如果不处理异常，程序会直接终止。",[19,171586,171587],{},"例如用户输入年龄：",[77,171589,171591],{"className":31325,"code":171590,"language":31327,"meta":82,"style":82},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[84,171592,171593,171611],{"__ignoreMap":82},[87,171594,171595,171597,171599,171601,171603,171605,171607,171609],{"class":89,"line":90},[87,171596,147307],{"class":97},[87,171598,946],{"class":171},[87,171600,3337],{"class":104},[87,171602,165],{"class":97},[87,171604,54757],{"class":104},[87,171606,165],{"class":97},[87,171608,153155],{"class":949},[87,171610,31444],{"class":97},[87,171612,171613,171615],{"class":89,"line":101},[87,171614,31362],{"class":104},[87,171616,156522],{"class":97},[19,171618,171619,171620,171623],{},"用户输入 ",[84,171621,171622],{},"abc","，程序就会报错退出。",[19,171625,171626],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171628,171630],{"id":171629},"_93-try-except","9.3 try except",[19,171632,171633],{},"基础语法：",[77,171635,171637],{"className":31325,"code":171636,"language":31327,"meta":82,"style":82},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[84,171638,171639,171646,171651,171658],{"__ignoreMap":82},[87,171640,171641,171644],{"class":89,"line":90},[87,171642,171643],{"class":171},"try",[87,171645,4693],{"class":97},[87,171647,171648],{"class":89,"line":101},[87,171649,171650],{"class":97},"    可能出错的代码\n",[87,171652,171653,171656],{"class":89,"line":120},[87,171654,171655],{"class":171},"except",[87,171657,4693],{"class":97},[87,171659,171660],{"class":89,"line":222},[87,171661,171662],{"class":97},"    出错后的处理代码\n",[19,171664,16085],{},[77,171666,171668],{"className":31325,"code":171667,"language":31327,"meta":82,"style":82},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[84,171669,171670,171676,171694,171700,171706],{"__ignoreMap":82},[87,171671,171672,171674],{"class":89,"line":90},[87,171673,171643],{"class":171},[87,171675,4693],{"class":97},[87,171677,171678,171680,171682,171684,171686,171688,171690,171692],{"class":89,"line":101},[87,171679,153147],{"class":97},[87,171681,946],{"class":171},[87,171683,3337],{"class":104},[87,171685,165],{"class":97},[87,171687,54757],{"class":104},[87,171689,165],{"class":97},[87,171691,153155],{"class":949},[87,171693,31444],{"class":97},[87,171695,171696,171698],{"class":89,"line":120},[87,171697,32246],{"class":104},[87,171699,156522],{"class":97},[87,171701,171702,171704],{"class":89,"line":222},[87,171703,171655],{"class":171},[87,171705,4693],{"class":97},[87,171707,171708,171710,171712,171715],{"class":89,"line":234},[87,171709,32246],{"class":104},[87,171711,165],{"class":97},[87,171713,171714],{"class":949},"\"年龄必须是数字\"",[87,171716,1108],{"class":97},[19,171718,171719,171720,171722],{},"不建议裸写 ",[84,171721,171655],{},"，最好指定异常类型。",[77,171724,171726],{"className":31325,"code":171725,"language":31327,"meta":82,"style":82},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[84,171727,171728,171734,171752,171758,171766],{"__ignoreMap":82},[87,171729,171730,171732],{"class":89,"line":90},[87,171731,171643],{"class":171},[87,171733,4693],{"class":97},[87,171735,171736,171738,171740,171742,171744,171746,171748,171750],{"class":89,"line":101},[87,171737,153147],{"class":97},[87,171739,946],{"class":171},[87,171741,3337],{"class":104},[87,171743,165],{"class":97},[87,171745,54757],{"class":104},[87,171747,165],{"class":97},[87,171749,153155],{"class":949},[87,171751,31444],{"class":97},[87,171753,171754,171756],{"class":89,"line":120},[87,171755,32246],{"class":104},[87,171757,156522],{"class":97},[87,171759,171760,171762,171764],{"class":89,"line":222},[87,171761,171655],{"class":171},[87,171763,152987],{"class":104},[87,171765,4693],{"class":97},[87,171767,171768,171770,171772,171774],{"class":89,"line":234},[87,171769,32246],{"class":104},[87,171771,165],{"class":97},[87,171773,171714],{"class":949},[87,171775,1108],{"class":97},[14,171777,171779],{"id":171778},"_94-捕获多个异常","9.4 捕获多个异常",[77,171781,171783],{"className":31325,"code":171782,"language":31327,"meta":82,"style":82},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[84,171784,171785,171791,171812,171832,171839,171847,171858,171867],{"__ignoreMap":82},[87,171786,171787,171789],{"class":89,"line":90},[87,171788,171643],{"class":171},[87,171790,4693],{"class":97},[87,171792,171793,171796,171798,171800,171802,171804,171806,171808,171810],{"class":89,"line":101},[87,171794,171795],{"class":97},"    nums ",[87,171797,946],{"class":171},[87,171799,53163],{"class":97},[87,171801,1313],{"class":104},[87,171803,13385],{"class":97},[87,171805,1176],{"class":104},[87,171807,13385],{"class":97},[87,171809,1170],{"class":104},[87,171811,34193],{"class":97},[87,171813,171814,171817,171819,171821,171823,171825,171827,171830],{"class":89,"line":120},[87,171815,171816],{"class":97},"    index ",[87,171818,946],{"class":171},[87,171820,3337],{"class":104},[87,171822,165],{"class":97},[87,171824,54757],{"class":104},[87,171826,165],{"class":97},[87,171828,171829],{"class":949},"\"请输入索引:\"",[87,171831,31444],{"class":97},[87,171833,171834,171836],{"class":89,"line":222},[87,171835,32246],{"class":104},[87,171837,171838],{"class":97},"(nums[index])\n",[87,171840,171841,171843,171845],{"class":89,"line":234},[87,171842,171655],{"class":171},[87,171844,152987],{"class":104},[87,171846,4693],{"class":97},[87,171848,171849,171851,171853,171856],{"class":89,"line":256},[87,171850,32246],{"class":104},[87,171852,165],{"class":97},[87,171854,171855],{"class":949},"\"索引必须是整数\"",[87,171857,1108],{"class":97},[87,171859,171860,171862,171865],{"class":89,"line":269},[87,171861,171655],{"class":171},[87,171863,171864],{"class":104}," IndexError",[87,171866,4693],{"class":97},[87,171868,171869,171871,171873,171876],{"class":89,"line":463},[87,171870,32246],{"class":104},[87,171872,165],{"class":97},[87,171874,171875],{"class":949},"\"索引越界\"",[87,171877,1108],{"class":97},[19,171879,171880],{},"多个异常使用相同处理逻辑：",[77,171882,171884],{"className":31325,"code":171883,"language":31327,"meta":82,"style":82},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[84,171885,171886,171892,171910,171923,171937],{"__ignoreMap":82},[87,171887,171888,171890],{"class":89,"line":90},[87,171889,171643],{"class":171},[87,171891,4693],{"class":97},[87,171893,171894,171896,171898,171900,171902,171904,171906,171908],{"class":89,"line":101},[87,171895,46540],{"class":97},[87,171897,946],{"class":171},[87,171899,3337],{"class":104},[87,171901,165],{"class":97},[87,171903,54757],{"class":104},[87,171905,165],{"class":97},[87,171907,156557],{"class":949},[87,171909,31444],{"class":97},[87,171911,171912,171914,171916,171918,171920],{"class":89,"line":120},[87,171913,32246],{"class":104},[87,171915,165],{"class":97},[87,171917,242],{"class":104},[87,171919,156807],{"class":171},[87,171921,171922],{"class":97}," num)\n",[87,171924,171925,171927,171929,171931,171933,171935],{"class":89,"line":222},[87,171926,171655],{"class":171},[87,171928,2614],{"class":97},[87,171930,155595],{"class":104},[87,171932,13385],{"class":97},[87,171934,171538],{"class":104},[87,171936,31733],{"class":97},[87,171938,171939,171941,171943,171946],{"class":89,"line":234},[87,171940,32246],{"class":104},[87,171942,165],{"class":97},[87,171944,171945],{"class":949},"\"输入不合法\"",[87,171947,1108],{"class":97},[14,171949,171951],{"id":171950},"_95-获取异常信息","9.5 获取异常信息",[77,171953,171955],{"className":31325,"code":171954,"language":31327,"meta":82,"style":82},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[84,171956,171957,171963,171977,171988],{"__ignoreMap":82},[87,171958,171959,171961],{"class":89,"line":90},[87,171960,171643],{"class":171},[87,171962,4693],{"class":97},[87,171964,171965,171967,171969,171971,171973,171975],{"class":89,"line":101},[87,171966,46540],{"class":97},[87,171968,946],{"class":171},[87,171970,3337],{"class":104},[87,171972,165],{"class":97},[87,171974,156641],{"class":949},[87,171976,1108],{"class":97},[87,171978,171979,171981,171983,171985],{"class":89,"line":120},[87,171980,171655],{"class":171},[87,171982,152987],{"class":104},[87,171984,65537],{"class":171},[87,171986,171987],{"class":97}," e:\n",[87,171989,171990,171992,171994,171996,171999,172001,172003,172005,172007],{"class":89,"line":222},[87,171991,32246],{"class":104},[87,171993,165],{"class":97},[87,171995,1152],{"class":171},[87,171997,171998],{"class":949},"\"出错了:",[87,172000,1988],{"class":104},[87,172002,1173],{"class":97},[87,172004,2037],{"class":104},[87,172006,1347],{"class":949},[87,172008,1108],{"class":97},[19,172010,147218],{},[77,172012,172015],{"className":172013,"code":172014,"language":599,"meta":82},[597],"出错了:invalid literal for int() with base 10: 'abc'\n",[84,172016,172014],{"__ignoreMap":82},[14,172018,172020],{"id":172019},"_96-else和finally","9.6 else和finally",[19,172022,172023,172025],{},[84,172024,2657],{},"：没有异常时执行。",[19,172027,172028,172031],{},[84,172029,172030],{},"finally","：无论是否异常都会执行。",[77,172033,172035],{"className":31325,"code":172034,"language":31327,"meta":82,"style":82},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[84,172036,172037,172043,172061,172069,172079,172085,172106,172112],{"__ignoreMap":82},[87,172038,172039,172041],{"class":89,"line":90},[87,172040,171643],{"class":171},[87,172042,4693],{"class":97},[87,172044,172045,172047,172049,172051,172053,172055,172057,172059],{"class":89,"line":101},[87,172046,46540],{"class":97},[87,172048,946],{"class":171},[87,172050,3337],{"class":104},[87,172052,165],{"class":97},[87,172054,54757],{"class":104},[87,172056,165],{"class":97},[87,172058,156557],{"class":949},[87,172060,31444],{"class":97},[87,172062,172063,172065,172067],{"class":89,"line":120},[87,172064,171655],{"class":171},[87,172066,152987],{"class":104},[87,172068,4693],{"class":97},[87,172070,172071,172073,172075,172077],{"class":89,"line":222},[87,172072,32246],{"class":104},[87,172074,165],{"class":97},[87,172076,153975],{"class":949},[87,172078,1108],{"class":97},[87,172080,172081,172083],{"class":89,"line":234},[87,172082,2657],{"class":171},[87,172084,4693],{"class":97},[87,172086,172087,172089,172091,172093,172096,172098,172100,172102,172104],{"class":89,"line":256},[87,172088,32246],{"class":104},[87,172090,165],{"class":97},[87,172092,1152],{"class":171},[87,172094,172095],{"class":949},"\"输入正确:",[87,172097,1988],{"class":104},[87,172099,2621],{"class":97},[87,172101,2037],{"class":104},[87,172103,1347],{"class":949},[87,172105,1108],{"class":97},[87,172107,172108,172110],{"class":89,"line":269},[87,172109,172030],{"class":171},[87,172111,4693],{"class":97},[87,172113,172114,172116,172118,172121],{"class":89,"line":463},[87,172115,32246],{"class":104},[87,172117,165],{"class":97},[87,172119,172120],{"class":949},"\"程序结束\"",[87,172122,1108],{"class":97},[19,172124,172125,172127],{},[84,172126,172030],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172129,172131],{"id":172130},"_97-抛出异常","9.7 抛出异常",[19,172133,172134],{},"程序可以主动抛出异常。",[77,172136,172138],{"className":31325,"code":172137,"language":31327,"meta":82,"style":82},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[84,172139,172140,172149,172161,172174,172194,172198,172202],{"__ignoreMap":82},[87,172141,172142,172144,172147],{"class":89,"line":90},[87,172143,32894],{"class":171},[87,172145,172146],{"class":205}," set_age",[87,172148,162176],{"class":97},[87,172150,172151,172153,172155,172157,172159],{"class":89,"line":101},[87,172152,4055],{"class":171},[87,172154,16656],{"class":97},[87,172156,938],{"class":171},[87,172158,577],{"class":104},[87,172160,4693],{"class":97},[87,172162,172163,172165,172167,172169,172172],{"class":89,"line":120},[87,172164,104358],{"class":171},[87,172166,152987],{"class":104},[87,172168,165],{"class":97},[87,172170,172171],{"class":949},"\"年龄不能为负数\"",[87,172173,1108],{"class":97},[87,172175,172176,172178,172180,172182,172184,172186,172188,172190,172192],{"class":89,"line":222},[87,172177,32246],{"class":104},[87,172179,165],{"class":97},[87,172181,1152],{"class":171},[87,172183,162744],{"class":949},[87,172185,1988],{"class":104},[87,172187,71153],{"class":97},[87,172189,2037],{"class":104},[87,172191,1347],{"class":949},[87,172193,1108],{"class":97},[87,172195,172196],{"class":89,"line":234},[87,172197,3355],{"emptyLinePlaceholder":1029},[87,172199,172200],{"class":89,"line":256},[87,172201,3355],{"emptyLinePlaceholder":1029},[87,172203,172204,172207,172209,172211],{"class":89,"line":269},[87,172205,172206],{"class":97},"set_age(",[87,172208,1625],{"class":171},[87,172210,1313],{"class":104},[87,172212,1108],{"class":97},[19,172214,172215],{},"调用者可以捕获：",[77,172217,172219],{"className":31325,"code":172218,"language":31327,"meta":82,"style":82},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[84,172220,172221,172227,172238,172248],{"__ignoreMap":82},[87,172222,172223,172225],{"class":89,"line":90},[87,172224,171643],{"class":171},[87,172226,4693],{"class":97},[87,172228,172229,172232,172234,172236],{"class":89,"line":101},[87,172230,172231],{"class":97},"    set_age(",[87,172233,1625],{"class":171},[87,172235,1313],{"class":104},[87,172237,1108],{"class":97},[87,172239,172240,172242,172244,172246],{"class":89,"line":120},[87,172241,171655],{"class":171},[87,172243,152987],{"class":104},[87,172245,65537],{"class":171},[87,172247,171987],{"class":97},[87,172249,172250,172252],{"class":89,"line":222},[87,172251,32246],{"class":104},[87,172253,67931],{"class":97},[14,172255,172257],{"id":172256},"_98-自定义异常","9.8 自定义异常",[77,172259,172261],{"className":31325,"code":172260,"language":31327,"meta":82,"style":82},"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",[84,172262,172263,172277,172281,172285,172289,172297,172307,172318,172328,172332,172336,172342,172359,172370],{"__ignoreMap":82},[87,172264,172265,172267,172270,172272,172275],{"class":89,"line":90},[87,172266,15644],{"class":171},[87,172268,172269],{"class":205}," BalanceNotEnoughError",[87,172271,165],{"class":97},[87,172273,172274],{"class":104},"Exception",[87,172276,31733],{"class":97},[87,172278,172279],{"class":89,"line":101},[87,172280,150298],{"class":171},[87,172282,172283],{"class":89,"line":120},[87,172284,3355],{"emptyLinePlaceholder":1029},[87,172286,172287],{"class":89,"line":222},[87,172288,3355],{"emptyLinePlaceholder":1029},[87,172290,172291,172293,172295],{"class":89,"line":234},[87,172292,32894],{"class":171},[87,172294,150947],{"class":205},[87,172296,163573],{"class":97},[87,172298,172299,172301,172303,172305],{"class":89,"line":256},[87,172300,4055],{"class":171},[87,172302,150903],{"class":97},[87,172304,2051],{"class":171},[87,172306,163350],{"class":97},[87,172308,172309,172311,172314,172316],{"class":89,"line":269},[87,172310,104358],{"class":171},[87,172312,172313],{"class":97}," BalanceNotEnoughError(",[87,172315,150998],{"class":949},[87,172317,1108],{"class":97},[87,172319,172320,172322,172324,172326],{"class":89,"line":463},[87,172321,5044],{"class":171},[87,172323,163580],{"class":97},[87,172325,1625],{"class":171},[87,172327,150936],{"class":97},[87,172329,172330],{"class":89,"line":469},[87,172331,3355],{"emptyLinePlaceholder":1029},[87,172333,172334],{"class":89,"line":2287},[87,172335,3355],{"emptyLinePlaceholder":1029},[87,172337,172338,172340],{"class":89,"line":2568},[87,172339,171643],{"class":171},[87,172341,4693],{"class":97},[87,172343,172344,172346,172348,172351,172353,172355,172357],{"class":89,"line":2573},[87,172345,163251],{"class":97},[87,172347,946],{"class":171},[87,172349,172350],{"class":97}," withdraw(",[87,172352,536],{"class":104},[87,172354,13385],{"class":97},[87,172356,2678],{"class":104},[87,172358,1108],{"class":97},[87,172360,172361,172363,172366,172368],{"class":89,"line":2579},[87,172362,171655],{"class":171},[87,172364,172365],{"class":97}," BalanceNotEnoughError ",[87,172367,32330],{"class":171},[87,172369,171987],{"class":97},[87,172371,172372,172374],{"class":89,"line":2584},[87,172373,32246],{"class":104},[87,172375,67931],{"class":97},[19,172377,172378],{},"入门阶段大多数情况使用内置异常即可。",[14,172380,172382],{"id":172381},"_99-traceback","9.9 traceback",[19,172384,172385],{},"调试时可以输出完整异常堆栈。",[77,172387,172389],{"className":31325,"code":172388,"language":31327,"meta":82,"style":82},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[84,172390,172391,172398,172402,172408,172418,172426],{"__ignoreMap":82},[87,172392,172393,172395],{"class":89,"line":90},[87,172394,31339],{"class":171},[87,172396,172397],{"class":97}," traceback\n",[87,172399,172400],{"class":89,"line":101},[87,172401,3355],{"emptyLinePlaceholder":1029},[87,172403,172404,172406],{"class":89,"line":120},[87,172405,171643],{"class":171},[87,172407,4693],{"class":97},[87,172409,172410,172412,172414,172416],{"class":89,"line":222},[87,172411,2940],{"class":104},[87,172413,165],{"class":97},[87,172415,156641],{"class":949},[87,172417,1108],{"class":97},[87,172419,172420,172422,172424],{"class":89,"line":234},[87,172421,171655],{"class":171},[87,172423,152987],{"class":104},[87,172425,4693],{"class":97},[87,172427,172428],{"class":89,"line":256},[87,172429,172430],{"class":97},"    traceback.print_exc()\n",[19,172432,172433],{},"日志系统中常把异常堆栈记录到文件。",[14,172435,172437],{"id":172436},"_910-什么是模块","9.10 什么是模块",[19,172439,172440,172441,126909],{},"模块就是一个 ",[84,172442,147113],{},[19,172444,172445,172446,25566],{},"例如创建 ",[84,172447,172448],{},"my_math.py",[77,172450,172452],{"className":31325,"code":172451,"language":31327,"meta":82,"style":82},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[84,172453,172454,172462,172472,172476,172480,172489],{"__ignoreMap":82},[87,172455,172456,172458,172460],{"class":89,"line":90},[87,172457,32894],{"class":171},[87,172459,6160],{"class":205},[87,172461,151854],{"class":97},[87,172463,172464,172466,172468,172470],{"class":89,"line":101},[87,172465,5044],{"class":171},[87,172467,11819],{"class":97},[87,172469,1575],{"class":171},[87,172471,151865],{"class":97},[87,172473,172474],{"class":89,"line":120},[87,172475,3355],{"emptyLinePlaceholder":1029},[87,172477,172478],{"class":89,"line":222},[87,172479,3355],{"emptyLinePlaceholder":1029},[87,172481,172482,172484,172487],{"class":89,"line":234},[87,172483,32894],{"class":171},[87,172485,172486],{"class":205}," sub",[87,172488,151854],{"class":97},[87,172490,172491,172493,172495,172497],{"class":89,"line":256},[87,172492,5044],{"class":171},[87,172494,11819],{"class":97},[87,172496,1625],{"class":171},[87,172498,151865],{"class":97},[19,172500,172501],{},"在另一个文件中导入：",[77,172503,172505],{"className":31325,"code":172504,"language":31327,"meta":82,"style":82},"import my_math\n\nprint(my_math.add(1, 2))\n",[84,172506,172507,172514,172518],{"__ignoreMap":82},[87,172508,172509,172511],{"class":89,"line":90},[87,172510,31339],{"class":171},[87,172512,172513],{"class":97}," my_math\n",[87,172515,172516],{"class":89,"line":101},[87,172517,3355],{"emptyLinePlaceholder":1029},[87,172519,172520,172522,172525,172527,172529,172531],{"class":89,"line":120},[87,172521,31362],{"class":104},[87,172523,172524],{"class":97},"(my_math.add(",[87,172526,1313],{"class":104},[87,172528,13385],{"class":97},[87,172530,1176],{"class":104},[87,172532,31444],{"class":97},[14,172534,172536],{"id":172535},"_911-import导入","9.11 import导入",[44,172538,172540],{"id":172539},"_9111-导入模块","9.11.1 导入模块",[77,172542,172544],{"className":31325,"code":172543,"language":31327,"meta":82,"style":82},"import random\n\nprint(random.randint(1, 10))\n",[84,172545,172546,172552,172556],{"__ignoreMap":82},[87,172547,172548,172550],{"class":89,"line":90},[87,172549,31339],{"class":171},[87,172551,46275],{"class":97},[87,172553,172554],{"class":89,"line":101},[87,172555,3355],{"emptyLinePlaceholder":1029},[87,172557,172558,172560,172563,172565,172567,172569],{"class":89,"line":120},[87,172559,31362],{"class":104},[87,172561,172562],{"class":97},"(random.randint(",[87,172564,1313],{"class":104},[87,172566,13385],{"class":97},[87,172568,242],{"class":104},[87,172570,31444],{"class":97},[44,172572,172574],{"id":172573},"_9112-导入指定内容","9.11.2 导入指定内容",[77,172576,172578],{"className":31325,"code":172577,"language":31327,"meta":82,"style":82},"from random import randint\n\nprint(randint(1, 10))\n",[84,172579,172580,172591,172595],{"__ignoreMap":82},[87,172581,172582,172584,172586,172588],{"class":89,"line":90},[87,172583,31684],{"class":171},[87,172585,58732],{"class":97},[87,172587,31339],{"class":171},[87,172589,172590],{"class":97}," randint\n",[87,172592,172593],{"class":89,"line":101},[87,172594,3355],{"emptyLinePlaceholder":1029},[87,172596,172597,172599,172602,172604,172606,172608],{"class":89,"line":120},[87,172598,31362],{"class":104},[87,172600,172601],{"class":97},"(randint(",[87,172603,1313],{"class":104},[87,172605,13385],{"class":97},[87,172607,242],{"class":104},[87,172609,31444],{"class":97},[44,172611,172613],{"id":172612},"_9113-起别名","9.11.3 起别名",[77,172615,172617],{"className":31325,"code":172616,"language":31327,"meta":82,"style":82},"import random as rd\n\nprint(rd.randint(1, 10))\n",[84,172618,172619,172630,172634],{"__ignoreMap":82},[87,172620,172621,172623,172625,172627],{"class":89,"line":90},[87,172622,31339],{"class":171},[87,172624,58732],{"class":97},[87,172626,32330],{"class":171},[87,172628,172629],{"class":97}," rd\n",[87,172631,172632],{"class":89,"line":101},[87,172633,3355],{"emptyLinePlaceholder":1029},[87,172635,172636,172638,172641,172643,172645,172647],{"class":89,"line":120},[87,172637,31362],{"class":104},[87,172639,172640],{"class":97},"(rd.randint(",[87,172642,1313],{"class":104},[87,172644,13385],{"class":97},[87,172646,242],{"class":104},[87,172648,31444],{"class":97},[77,172650,172652],{"className":31325,"code":172651,"language":31327,"meta":82,"style":82},"from random import randint as rint\n\nprint(rint(1, 10))\n",[84,172653,172654,172670,172674],{"__ignoreMap":82},[87,172655,172656,172658,172660,172662,172665,172667],{"class":89,"line":90},[87,172657,31684],{"class":171},[87,172659,58732],{"class":97},[87,172661,31339],{"class":171},[87,172663,172664],{"class":97}," randint ",[87,172666,32330],{"class":171},[87,172668,172669],{"class":97}," rint\n",[87,172671,172672],{"class":89,"line":101},[87,172673,3355],{"emptyLinePlaceholder":1029},[87,172675,172676,172678,172681,172683,172685,172687],{"class":89,"line":120},[87,172677,31362],{"class":104},[87,172679,172680],{"class":97},"(rint(",[87,172682,1313],{"class":104},[87,172684,13385],{"class":97},[87,172686,242],{"class":104},[87,172688,31444],{"class":97},[44,172690,172692],{"id":172691},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[77,172694,172696],{"className":31325,"code":172695,"language":31327,"meta":82,"style":82},"from random import *\n",[84,172697,172698],{"__ignoreMap":82},[87,172699,172700,172702,172704,172706],{"class":89,"line":90},[87,172701,31684],{"class":171},[87,172703,58732],{"class":97},[87,172705,31339],{"class":171},[87,172707,172708],{"class":171}," *\n",[19,172710,172711],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172713,172715],{"id":172714},"_912-常用内置模块","9.12 常用内置模块",[44,172717,172719],{"id":172718},"_9121-random","9.12.1 random",[77,172721,172723],{"className":31325,"code":172722,"language":31327,"meta":82,"style":82},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[84,172724,172725,172731,172735,172749,172768],{"__ignoreMap":82},[87,172726,172727,172729],{"class":89,"line":90},[87,172728,31339],{"class":171},[87,172730,46275],{"class":97},[87,172732,172733],{"class":89,"line":101},[87,172734,3355],{"emptyLinePlaceholder":1029},[87,172736,172737,172739,172741,172743,172745,172747],{"class":89,"line":120},[87,172738,31362],{"class":104},[87,172740,172562],{"class":97},[87,172742,1313],{"class":104},[87,172744,13385],{"class":97},[87,172746,242],{"class":104},[87,172748,31444],{"class":97},[87,172750,172751,172753,172756,172758,172760,172762,172764,172766],{"class":89,"line":222},[87,172752,31362],{"class":104},[87,172754,172755],{"class":97},"(random.choice([",[87,172757,150649],{"class":949},[87,172759,13385],{"class":97},[87,172761,151697],{"class":949},[87,172763,13385],{"class":97},[87,172765,160492],{"class":949},[87,172767,34090],{"class":97},[87,172769,172770,172772,172775,172777,172779,172781,172783,172785,172787,172789,172791,172793,172795,172797],{"class":89,"line":234},[87,172771,31362],{"class":104},[87,172773,172774],{"class":97},"(random.sample([",[87,172776,1313],{"class":104},[87,172778,13385],{"class":97},[87,172780,1176],{"class":104},[87,172782,13385],{"class":97},[87,172784,1170],{"class":104},[87,172786,13385],{"class":97},[87,172788,1389],{"class":104},[87,172790,13385],{"class":97},[87,172792,1414],{"class":104},[87,172794,113128],{"class":97},[87,172796,1176],{"class":104},[87,172798,31444],{"class":97},[44,172800,172802],{"id":172801},"_9122-time","9.12.2 time",[77,172804,172806],{"className":31325,"code":172805,"language":31327,"meta":82,"style":82},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[84,172807,172808,172814,172818,172825,172833],{"__ignoreMap":82},[87,172809,172810,172812],{"class":89,"line":90},[87,172811,31339],{"class":171},[87,172813,32776],{"class":97},[87,172815,172816],{"class":89,"line":101},[87,172817,3355],{"emptyLinePlaceholder":1029},[87,172819,172820,172822],{"class":89,"line":120},[87,172821,31362],{"class":104},[87,172823,172824],{"class":97},"(time.time())\n",[87,172826,172827,172829,172831],{"class":89,"line":222},[87,172828,95997],{"class":97},[87,172830,1313],{"class":104},[87,172832,1108],{"class":97},[87,172834,172835,172837,172839,172842],{"class":89,"line":234},[87,172836,31362],{"class":104},[87,172838,165],{"class":97},[87,172840,172841],{"class":949},"\"1秒后执行\"",[87,172843,1108],{"class":97},[44,172845,172847],{"id":172846},"_9123-datetime","9.12.3 datetime",[77,172849,172851],{"className":31325,"code":172850,"language":31327,"meta":82,"style":82},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[84,172852,172853,172865,172869,172879,172886],{"__ignoreMap":82},[87,172854,172855,172857,172860,172862],{"class":89,"line":90},[87,172856,31684],{"class":171},[87,172858,172859],{"class":97}," datetime ",[87,172861,31339],{"class":171},[87,172863,172864],{"class":97}," datetime\n",[87,172866,172867],{"class":89,"line":101},[87,172868,3355],{"emptyLinePlaceholder":1029},[87,172870,172871,172874,172876],{"class":89,"line":120},[87,172872,172873],{"class":97},"now ",[87,172875,946],{"class":171},[87,172877,172878],{"class":97}," datetime.now()\n",[87,172880,172881,172883],{"class":89,"line":222},[87,172882,31362],{"class":104},[87,172884,172885],{"class":97},"(now)\n",[87,172887,172888,172890,172893,172896,172898,172901],{"class":89,"line":234},[87,172889,31362],{"class":104},[87,172891,172892],{"class":97},"(now.strftime(",[87,172894,172895],{"class":949},"\"%Y-%m-",[87,172897,157452],{"class":104},[87,172899,172900],{"class":949}," %H:%M:%S\"",[87,172902,31444],{"class":97},[44,172904,172906],{"id":172905},"_9124-os","9.12.4 os",[77,172908,172910],{"className":31325,"code":172909,"language":31327,"meta":82,"style":82},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[84,172911,172912,172918,172922,172929],{"__ignoreMap":82},[87,172913,172914,172916],{"class":89,"line":90},[87,172915,31339],{"class":171},[87,172917,46252],{"class":97},[87,172919,172920],{"class":89,"line":101},[87,172921,3355],{"emptyLinePlaceholder":1029},[87,172923,172924,172926],{"class":89,"line":120},[87,172925,31362],{"class":104},[87,172927,172928],{"class":97},"(os.getcwd())\n",[87,172930,172931,172933,172936,172939],{"class":89,"line":222},[87,172932,31362],{"class":104},[87,172934,172935],{"class":97},"(os.listdir(",[87,172937,172938],{"class":949},"\".\"",[87,172940,31444],{"class":97},[44,172942,172944],{"id":172943},"_9125-sys","9.12.5 sys",[77,172946,172948],{"className":31325,"code":172947,"language":31327,"meta":82,"style":82},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[84,172949,172950,172957,172961,172968],{"__ignoreMap":82},[87,172951,172952,172954],{"class":89,"line":90},[87,172953,31339],{"class":171},[87,172955,172956],{"class":97}," sys\n",[87,172958,172959],{"class":89,"line":101},[87,172960,3355],{"emptyLinePlaceholder":1029},[87,172962,172963,172965],{"class":89,"line":120},[87,172964,31362],{"class":104},[87,172966,172967],{"class":97},"(sys.version)\n",[87,172969,172970,172972],{"class":89,"line":222},[87,172971,31362],{"class":104},[87,172973,172974],{"class":97},"(sys.path)\n",[14,172976,172978,172979,172981,172982,1347],{"id":172977},"_913-if-name-main","9.13 if ",[57,172980,80736],{}," == \"",[57,172983,102984],{},[19,172985,172986,172987,172990],{},"模块被直接运行和被导入时，",[84,172988,172989],{},"__name__"," 的值不同。",[19,172992,172993,172994,25566],{},"创建 ",[84,172995,172996],{},"my_module.py",[77,172998,173000],{"className":31325,"code":172999,"language":31327,"meta":82,"style":82},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[84,173001,173002,173010,173020,173024,173028,173040],{"__ignoreMap":82},[87,173003,173004,173006,173008],{"class":89,"line":90},[87,173005,32894],{"class":171},[87,173007,6160],{"class":205},[87,173009,151854],{"class":97},[87,173011,173012,173014,173016,173018],{"class":89,"line":101},[87,173013,5044],{"class":171},[87,173015,11819],{"class":97},[87,173017,1575],{"class":171},[87,173019,151865],{"class":97},[87,173021,173022],{"class":89,"line":120},[87,173023,3355],{"emptyLinePlaceholder":1029},[87,173025,173026],{"class":89,"line":222},[87,173027,3355],{"emptyLinePlaceholder":1029},[87,173029,173030,173032,173034,173036,173038],{"class":89,"line":234},[87,173031,2488],{"class":171},[87,173033,32167],{"class":104},[87,173035,102485],{"class":171},[87,173037,102488],{"class":949},[87,173039,4693],{"class":97},[87,173041,173042,173044,173046,173048,173050,173052],{"class":89,"line":256},[87,173043,32246],{"class":104},[87,173045,167361],{"class":97},[87,173047,1313],{"class":104},[87,173049,13385],{"class":97},[87,173051,1176],{"class":104},[87,173053,31444],{"class":97},[19,173055,173056],{},"作用：",[1055,173058,173059,173062],{},[29,173060,173061],{},"直接运行该文件时，执行测试代码。",[29,173063,173064],{},"被其他文件导入时，不执行测试代码。",[19,173066,173067],{},"这是写模块时很常用的习惯。",[14,173069,173071],{"id":173070},"_914-包","9.14 包",[19,173073,173074,173075,173078],{},"包是包含 ",[84,173076,173077],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173080,173081],{},"目录结构：",[77,173083,173086],{"className":173084,"code":173085,"language":599,"meta":82},[597],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[84,173087,173085],{"__ignoreMap":82},[19,173089,173090],{},"导入：",[77,173092,173094],{"className":31325,"code":173093,"language":31327,"meta":82,"style":82},"from utils.file_utils import read_file\n",[84,173095,173096],{"__ignoreMap":82},[87,173097,173098,173100,173103,173105],{"class":89,"line":90},[87,173099,31684],{"class":171},[87,173101,173102],{"class":97}," utils.file_utils ",[87,173104,31339],{"class":171},[87,173106,173107],{"class":97}," read_file\n",[19,173109,173110,173112],{},[84,173111,173077],{}," 可以为空，也可以写包初始化逻辑。",[14,173114,173116],{"id":173115},"_915-第三方包","9.15 第三方包",[19,173118,173119,173120,173122],{},"第三方包通过 ",[84,173121,24778],{}," 安装。",[77,173124,173126],{"className":24769,"code":173125,"language":24771,"meta":82,"style":82},"pip install requests\n",[84,173127,173128],{"__ignoreMap":82},[87,173129,173130,173132,173134],{"class":89,"line":90},[87,173131,24778],{"class":205},[87,173133,24781],{"class":949},[87,173135,146859],{"class":949},[19,173137,173138],{},"使用：",[77,173140,173142],{"className":31325,"code":173141,"language":31327,"meta":82,"style":82},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[84,173143,173144,173150,173154,173169],{"__ignoreMap":82},[87,173145,173146,173148],{"class":89,"line":90},[87,173147,31339],{"class":171},[87,173149,146859],{"class":97},[87,173151,173152],{"class":89,"line":101},[87,173153,3355],{"emptyLinePlaceholder":1029},[87,173155,173156,173159,173161,173164,173167],{"class":89,"line":120},[87,173157,173158],{"class":97},"response ",[87,173160,946],{"class":171},[87,173162,173163],{"class":97}," requests.get(",[87,173165,173166],{"class":949},"\"https:\u002F\u002Fwww.example.com\"",[87,173168,1108],{"class":97},[87,173170,173171,173173],{"class":89,"line":222},[87,173172,31362],{"class":104},[87,173174,173175],{"class":97},"(response.status_code)\n",[19,173177,173178],{},"查看已安装包：",[77,173180,173182],{"className":24769,"code":173181,"language":24771,"meta":82,"style":82},"pip list\n",[84,173183,173184],{"__ignoreMap":82},[87,173185,173186,173188],{"class":89,"line":90},[87,173187,24778],{"class":205},[87,173189,119881],{"class":949},[19,173191,173192],{},"导出项目依赖：",[77,173194,173195],{"className":24769,"code":147054,"language":24771,"meta":82,"style":82},[84,173196,173197],{"__ignoreMap":82},[87,173198,173199,173201,173203,173205],{"class":89,"line":90},[87,173200,24778],{"class":205},[87,173202,147063],{"class":949},[87,173204,27169],{"class":171},[87,173206,147068],{"class":949},[19,173208,173209],{},"安装项目依赖：",[77,173211,173212],{"className":24769,"code":147074,"language":24771,"meta":82,"style":82},[84,173213,173214],{"__ignoreMap":82},[87,173215,173216,173218,173220,173222],{"class":89,"line":90},[87,173217,24778],{"class":205},[87,173219,24781],{"class":949},[87,173221,120565],{"class":104},[87,173223,147068],{"class":949},[14,173225,173227],{"id":173226},"_916-模块搜索路径","9.16 模块搜索路径",[19,173229,173230,173231,173234],{},"Python 导入模块时会在 ",[84,173232,173233],{},"sys.path"," 中查找。",[77,173236,173238],{"className":31325,"code":173237,"language":31327,"meta":82,"style":82},"import sys\n\nfor path in sys.path:\n    print(path)\n",[84,173239,173240,173246,173250,173262],{"__ignoreMap":82},[87,173241,173242,173244],{"class":89,"line":90},[87,173243,31339],{"class":171},[87,173245,172956],{"class":97},[87,173247,173248],{"class":89,"line":101},[87,173249,3355],{"emptyLinePlaceholder":1029},[87,173251,173252,173254,173257,173259],{"class":89,"line":120},[87,173253,3979],{"class":171},[87,173255,173256],{"class":97}," path ",[87,173258,26990],{"class":171},[87,173260,173261],{"class":97}," sys.path:\n",[87,173263,173264,173266],{"class":89,"line":222},[87,173265,32246],{"class":104},[87,173267,169990],{"class":97},[19,173269,173270],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,173272,158384],{},[77,173274,173277],{"className":173275,"code":173276,"language":599,"meta":82},[597],"random.py\njson.py\ntime.py\n",[84,173278,173276],{"__ignoreMap":82},[19,173280,173281],{},"这些文件名可能导致导入异常。",[14,173283,173285],{"id":173284},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,173287,173081],{},[77,173289,173292],{"className":173290,"code":173291,"language":599,"meta":82},[597],"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",[84,173293,173291],{"__ignoreMap":82},[19,173295,173296,25566],{},[84,173297,173298],{},"utils\u002Ffile_utils.py",[77,173300,173302],{"className":31325,"code":173301,"language":31327,"meta":82,"style":82},"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",[84,173303,173304,173310,173320,173324,173328,173338,173348,173356,173362,173366,173393,173403,173407,173411,173421,173447],{"__ignoreMap":82},[87,173305,173306,173308],{"class":89,"line":90},[87,173307,31339],{"class":171},[87,173309,147852],{"class":97},[87,173311,173312,173314,173316,173318],{"class":89,"line":101},[87,173313,31684],{"class":171},[87,173315,109237],{"class":97},[87,173317,31339],{"class":171},[87,173319,109242],{"class":97},[87,173321,173322],{"class":89,"line":120},[87,173323,3355],{"emptyLinePlaceholder":1029},[87,173325,173326],{"class":89,"line":222},[87,173327,3355],{"emptyLinePlaceholder":1029},[87,173329,173330,173332,173335],{"class":89,"line":234},[87,173331,32894],{"class":171},[87,173333,173334],{"class":205}," read_json",[87,173336,173337],{"class":97},"(path):\n",[87,173339,173340,173343,173345],{"class":89,"line":256},[87,173341,173342],{"class":97},"    path ",[87,173344,946],{"class":171},[87,173346,173347],{"class":97}," Path(path)\n",[87,173349,173350,173352,173354],{"class":89,"line":269},[87,173351,4055],{"class":171},[87,173353,39877],{"class":171},[87,173355,170071],{"class":97},[87,173357,173358,173360],{"class":89,"line":463},[87,173359,15702],{"class":171},[87,173361,52775],{"class":97},[87,173363,173364],{"class":89,"line":469},[87,173365,3355],{"emptyLinePlaceholder":1029},[87,173367,173368,173370,173372,173375,173377,173379,173381,173383,173385,173387,173389,173391],{"class":89,"line":2287},[87,173369,35125],{"class":171},[87,173371,147552],{"class":104},[87,173373,173374],{"class":97},"(path, ",[87,173376,147562],{"class":949},[87,173378,13385],{"class":97},[87,173380,147567],{"class":492},[87,173382,946],{"class":171},[87,173384,147572],{"class":949},[87,173386,14664],{"class":97},[87,173388,32330],{"class":171},[87,173390,148914],{"class":492},[87,173392,4693],{"class":97},[87,173394,173395,173397,173399,173401],{"class":89,"line":2568},[87,173396,15702],{"class":171},[87,173398,148925],{"class":97},[87,173400,46301],{"class":492},[87,173402,1108],{"class":97},[87,173404,173405],{"class":89,"line":2573},[87,173406,3355],{"emptyLinePlaceholder":1029},[87,173408,173409],{"class":89,"line":2579},[87,173410,3355],{"emptyLinePlaceholder":1029},[87,173412,173413,173415,173418],{"class":89,"line":2584},[87,173414,32894],{"class":171},[87,173416,173417],{"class":205}," write_json",[87,173419,173420],{"class":97},"(path, data):\n",[87,173422,173423,173425,173427,173429,173431,173433,173435,173437,173439,173441,173443,173445],{"class":89,"line":2598},[87,173424,35125],{"class":171},[87,173426,147552],{"class":104},[87,173428,173374],{"class":97},[87,173430,152737],{"class":949},[87,173432,13385],{"class":97},[87,173434,147567],{"class":492},[87,173436,946],{"class":171},[87,173438,147572],{"class":949},[87,173440,14664],{"class":97},[87,173442,32330],{"class":171},[87,173444,148914],{"class":492},[87,173446,4693],{"class":97},[87,173448,173449,173452,173454,173456,173458,173460,173462,173464,173466,173468,173470],{"class":89,"line":2603},[87,173450,173451],{"class":97},"        json.dump(data, ",[87,173453,46301],{"class":492},[87,173455,13385],{"class":97},[87,173457,147898],{"class":492},[87,173459,946],{"class":171},[87,173461,34934],{"class":104},[87,173463,13385],{"class":97},[87,173465,152773],{"class":492},[87,173467,946],{"class":171},[87,173469,1176],{"class":104},[87,173471,1108],{"class":97},[19,173473,173474,25566],{},[84,173475,155368],{},[77,173477,173479],{"className":31325,"code":173478,"language":31327,"meta":82,"style":82},"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",[84,173480,173481,173492,173496,173509,173529],{"__ignoreMap":82},[87,173482,173483,173485,173487,173489],{"class":89,"line":90},[87,173484,31684],{"class":171},[87,173486,173102],{"class":97},[87,173488,31339],{"class":171},[87,173490,173491],{"class":97}," read_json, write_json\n",[87,173493,173494],{"class":89,"line":101},[87,173495,3355],{"emptyLinePlaceholder":1029},[87,173497,173498,173500,173502,173505,173507],{"class":89,"line":120},[87,173499,160477],{"class":97},[87,173501,946],{"class":171},[87,173503,173504],{"class":97}," read_json(",[87,173506,152592],{"class":949},[87,173508,1108],{"class":97},[87,173510,173511,173513,173515,173517,173519,173521,173523,173525,173527],{"class":89,"line":222},[87,173512,171295],{"class":97},[87,173514,63613],{"class":949},[87,173516,108],{"class":97},[87,173518,150649],{"class":949},[87,173520,13385],{"class":97},[87,173522,152233],{"class":949},[87,173524,108],{"class":97},[87,173526,2080],{"class":104},[87,173528,165913],{"class":97},[87,173530,173531,173534,173536],{"class":89,"line":234},[87,173532,173533],{"class":97},"write_json(",[87,173535,152592],{"class":949},[87,173537,173538],{"class":97},", students)\n",[14,173540,173542],{"id":173541},"_918-易错点","9.18 易错点",[1055,173544,173545,173548,173553,173558,173561,173564],{},[29,173546,173547],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[29,173549,173550,173551,29332],{},"能指定异常类型就不要裸写 ",[84,173552,171655],{},[29,173554,173555,173557],{},[84,173556,172030],{}," 无论是否出错都会执行。",[29,173559,173560],{},"模块文件名不要和标准库重名。",[29,173562,173563],{},"导入自己写的模块时，要注意运行目录。",[29,173565,173566],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,173568,173570],{"id":173569},"_919-本章练习","9.19 本章练习",[1055,173572,173573,173576,173579,173585,173592],{},[29,173574,173575],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[29,173577,173578],{},"写函数读取文件，如果文件不存在则返回空字符串。",[29,173580,172993,173581,173584],{},[84,173582,173583],{},"math_utils.py","，实现加减乘除函数并导入使用。",[29,173586,173587,173588,173591],{},"创建一个 ",[84,173589,173590],{},"utils"," 包，把 JSON 读写函数放进去。",[29,173593,173594],{},"写一个程序，捕获除零异常和输入格式异常。",[1006,173596,173597],{},"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":82,"searchDepth":101,"depth":101,"links":173599},[173600,173601,173602,173603,173604,173605,173606,173607,173608,173609,173610,173616,173623,173625,173626,173627,173628,173629,173630],{"id":171452,"depth":101,"text":171453},{"id":171580,"depth":101,"text":171581},{"id":171629,"depth":101,"text":171630},{"id":171778,"depth":101,"text":171779},{"id":171950,"depth":101,"text":171951},{"id":172019,"depth":101,"text":172020},{"id":172130,"depth":101,"text":172131},{"id":172256,"depth":101,"text":172257},{"id":172381,"depth":101,"text":172382},{"id":172436,"depth":101,"text":172437},{"id":172535,"depth":101,"text":172536,"children":173611},[173612,173613,173614,173615],{"id":172539,"depth":120,"text":172540},{"id":172573,"depth":120,"text":172574},{"id":172612,"depth":120,"text":172613},{"id":172691,"depth":120,"text":172692},{"id":172714,"depth":101,"text":172715,"children":173617},[173618,173619,173620,173621,173622],{"id":172718,"depth":120,"text":172719},{"id":172801,"depth":120,"text":172802},{"id":172846,"depth":120,"text":172847},{"id":172905,"depth":120,"text":172906},{"id":172943,"depth":120,"text":172944},{"id":172977,"depth":101,"text":173624},"9.13 if name == \"main\"",{"id":173070,"depth":101,"text":173071},{"id":173115,"depth":101,"text":173116},{"id":173226,"depth":101,"text":173227},{"id":173284,"depth":101,"text":173285},{"id":173541,"depth":101,"text":173542},{"id":173569,"depth":101,"text":173570},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171444,"description":1026},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173637,"title":173638,"body":173639,"description":173802,"extension":1027,"meta":173803,"navigation":1029,"path":173804,"seo":173805,"stem":173806,"__hash__":173807},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173640,"toc":173797},[173641,173644,173647,173650,173661,173663,173737,173740,173743,173746,173749,173752,173755,173758,173761,173764,173767],[10,173642,173638],{"id":173643},"python教程",[19,173645,173646],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,173648,173649],{},"建议学习环境：",[1055,173651,173652,173655,173658],{},[29,173653,173654],{},"Python 版本：Python 3.10 及以上。",[29,173656,173657],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[29,173659,173660],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173662,118004],{"id":118004},[1055,173664,173665,173671,173677,173683,173689,173695,173701,173707,173713,173719,173725,173731],{},[29,173666,173667],{},[1334,173668,173670],{"href":173669},".\u002Fch1-Python","Python环境与第一个程序",[29,173672,173673],{},[1334,173674,173676],{"href":173675},".\u002Fch2","基础语法、变量与字符串",[29,173678,173679],{},[1334,173680,173682],{"href":173681},".\u002Fch3","判断语句",[29,173684,173685],{},[1334,173686,173688],{"href":173687},".\u002Fch4","循环语句",[29,173690,173691],{},[1334,173692,173694],{"href":173693},".\u002Fch5","函数基础",[29,173696,173697],{},[1334,173698,173700],{"href":173699},".\u002Fch6","数据容器",[29,173702,173703],{},[1334,173704,173706],{"href":173705},".\u002Fch7","函数进阶",[29,173708,173709],{},[1334,173710,173712],{"href":173711},".\u002Fch8","文件操作",[29,173714,173715],{},[1334,173716,173718],{"href":173717},".\u002Fch9","异常、模块与包",[29,173720,173721],{},[1334,173722,173724],{"href":173723},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[29,173726,173727],{},[1334,173728,173730],{"href":173729},".\u002Fch11","面向对象基础",[29,173732,173733],{},[1334,173734,173736],{"href":173735},".\u002Fch12","综合案例与复习路线",[14,173738,173739],{"id":173739},"学习路线",[19,173741,173742],{},"第一阶段：能运行程序。",[19,173744,173745],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173747,173748],{},"第二阶段：能组织数据。",[19,173750,173751],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173753,173754],{},"第三阶段：能封装逻辑。",[19,173756,173757],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173759,173760],{},"第四阶段：能做小项目。",[19,173762,173763],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173765,173766],{"id":173766},"参考资料",[1055,173768,173769,173776,173783,173790],{},[29,173770,173771,173772],{},"黑马程序员 Python 入门教程推荐：",[1334,173773,173774],{"href":173774,"rel":173775},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24812],[29,173777,173778,173779],{},"Python 官方中文教程：",[1334,173780,173781],{"href":173781,"rel":173782},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24812],[29,173784,173785,173786],{},"Python 标准库文档：",[1334,173787,173788],{"href":173788,"rel":173789},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24812],[29,173791,173792,173793],{},"pyecharts 文档：",[1334,173794,173795],{"href":173795,"rel":173796},"https:\u002F\u002Fpyecharts.org\u002F",[24812],{"title":82,"searchDepth":101,"depth":101,"links":173798},[173799,173800,173801],{"id":118004,"depth":101,"text":118004},{"id":173739,"depth":101,"text":173739},{"id":173766,"depth":101,"text":173766},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24325},"\u002Fwiki\u002F2024-10-10-python",{"title":173638,"description":173802},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331438884]